diff --git a/AI_MAP.md b/AI_MAP.md index 02a0d2f..a115816 100644 --- a/AI_MAP.md +++ b/AI_MAP.md @@ -6,7 +6,7 @@ Purpose: static Japanese browser simulation/game. Optimize context by reading th - Entrypoint: `index.html` defines the app shell, canvas, dialogs, right panels, and exact script order. - Runtime style: plain browser JS, global IIFEs, exports on `window`, no bundler/module loader. -- Version/cache: `app_manifest.json`, `js/version.js`, and generated `service-worker.js` share `39.15.164`. +- Version/cache: `app_manifest.json`, `js/version.js`, and generated `service-worker.js` share `39.15.167`. - Main loop: `js/main.js` initializes assets/audio/world/UI/save, then drives update/render. - Performance/display settings: `js/perf_profiler.js` owns manual visual settings and profiler buckets; display tiers affect rendering/visuals, not simulation-quality branches. - Update order: `js/system_order.js` calls phase facades from `js/simulation_systems.js`. diff --git a/BUILD_NOTE.txt b/BUILD_NOTE.txt index 59f4bf0..d5ba9c1 100644 --- a/BUILD_NOTE.txt +++ b/BUILD_NOTE.txt @@ -1,3 +1,23 @@ +tarinai_physics_tuning_v167 +- Replaced the 8-sided circle template with a 24-sided, 20px-grid-aligned contour. +- Raised bounce-fence restitution from 1.08 to 2.40 and increased minimum/capped launch speeds. +- Made rope endpoint and particle constraints inextensible while retaining slack/flexibility. +- Set sticky-bomb blastScale to 0.68, matching the small firecracker. + +tarinai_mechanical_collision_grid_limit_audit_v1 +- Restored shared SAT geometry exports so collision-enabled rotators, reciprocators, and poison blocks physically interact with one another. +- Mechanical shape editors now snap all geometry to a coarse 20px lattice. +- Removed central colony-limit bypass options and added direct-insertion, capacity, save-roundtrip, and over-limit regression checks. +- Version: 39.15.167 + +tarinai_champion_limits_mechanical_defaults_v1 +- Tarinai champions actively prioritize other champions as breeding partners, with stronger mate drive and shorter champion-pair cooldowns. +- Reciprocators now default to 90 degrees. +- Poison blocks now use a smaller default footprint. +- Colony panel now supports optional tarinai-population and object-count limits; blank/0 means unlimited. +- Colony limits are saved in snapshot/binary data. +- Version: 39.15.165 + tarinai_plushie_fling_speed_v1 - Reduced plushie poke-fling velocity to one third. - Lowered plushie fling minimum-speed normalization to the same one-third scale. diff --git a/FILES.json b/FILES.json index c7645ba..6b545ed 100644 --- a/FILES.json +++ b/FILES.json @@ -1,6 +1,6 @@ { "purpose": "Token-efficient machine-readable routing for tarinai_. Use scripts/ai_inventory.py for exact current file expansion.", - "version": "39.15.164", + "version": "39.15.167", "entrypoints": { "app": "index.html", "runtime": "js/main.js", diff --git a/GAME_FEATURES.md b/GAME_FEATURES.md index a96d255..4418ac7 100644 --- a/GAME_FEATURES.md +++ b/GAME_FEATURES.md @@ -2,6 +2,20 @@ This document describes the playable features of `tarinai_`: what the player sees, what tools do, and how tarinai behave. It is intentionally player/design-facing, not an implementation map. +## v39.15.167 mechanical interaction and limit audit + +- 回転体・往復体・毒ブロックは、双方の「当たり判定ON」時にSAT矩形判定で相互作用する。当たり判定OFFの機構は機構同士の衝突対象から除外される。 +- 3種類の輪郭編集は20px間隔のグリッド格子点へスナップする。直線、自由描画、消去位置、テンプレート、再編集時の既存端点に同じ規則を適用する。 +- コロニー上限は中央生成APIで常時適用され、通常実行時に上限を迂回するオプションは持たない。既存要素やセーブ復元要素は削除せず、その後の新規生成のみを抑止する。 + +## v39.15.165 behavior and colony controls + +- たりない王は、繁殖可能な別のたりない王を広い範囲から優先して探し、通常より強い繁殖欲求と短い再繁殖待機時間を持つ。 +- 往復体の新規配置時の標準方向は90度。 +- 毒ブロックの新規配置時の標準輪郭は小型(半径44、輪郭104×40、太さ11)。 +- コロニーパネルで、たりない個体数と生存オブジェクト総数の上限を設定できる。空欄または0は上限なし。既存要素は削除せず、新規追加だけを抑止する。 +- 上限値はスナップショットとバイナリセーブに保存される。 + ## Game Overview `tarinai_` is an observation sandbox about small creatures called tarinai. The player places food, furniture, hazards, machines, and environment tools, then watches how individuals live, move, eat, sleep, panic, fight, reproduce, get sick, recover, and leave family records. @@ -76,10 +90,10 @@ The core loop is: ### Physics -- **ヒモ / rope**: connect two targets with a flexible link. +- **ヒモ / rope**: connect two targets with a flexible, inextensible link that may go slack but does not lengthen. - **棒 / rod**: connect two targets with a rigid link. - **柵 / fence**: blocks tarinai movement; Q/E rotate by 45 degrees, Shift+Q/E by 5 degrees. -- **バウンス柵 / bounce fence**: fence that rebounds things that hit it. +- **バウンス柵 / bounce fence**: high-restitution fence that strongly launches things that hit it. - **ゲート柵 / gate fence**: click to open or close. - **回転体 / rotator**: custom mechanical shape that rotates; click to edit shape and speed. - **毒ブロック / poison block**: custom hazard block; touching it damages skin; click to edit shape. diff --git a/README.md b/README.md index b700605..5a50794 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ AI-first entrypoint for a static browser simulation/game. Keep this file small; ## Runtime Shape -- No bundler; `index.html` loads ordered global-IIFE scripts with `?v=39.15.164`. +- No bundler; `index.html` loads ordered global-IIFE scripts with `?v=39.15.167`. - Mutable runtime lives on `window`; primary entities are `World`, `Tarinai`, items, structures, ants, family graph, weather, and save snapshots. - Update loop: `main.js` creates the world/UI loop; `World.update` delegates to `TarinaiSystemOrder.update`; `system_order.js` runs named phases. - UI loop: pointer/tool/UI intents go through `command_dispatcher.js`; canvas drawing is in render modules; side panels are `ui_*.js`. diff --git a/app_manifest.json b/app_manifest.json index 4d46a30..a501ae8 100644 --- a/app_manifest.json +++ b/app_manifest.json @@ -1,5 +1,5 @@ { - "version": "39.15.164", + "version": "39.15.167", "css": [ "css/base.css", "css/layout.css", diff --git a/css/components.css b/css/components.css index e6649bd..1c320ca 100644 --- a/css/components.css +++ b/css/components.css @@ -829,6 +829,27 @@ opacity: 0.52; } +.colony-limit-control { + margin: 8px 0 4px; + padding: 10px 11px; + border: 1px solid rgba(118, 92, 61, 0.16); + border-radius: 14px; + background: rgba(255, 251, 244, 0.56); +} +.colony-limit-head { + display: flex; + align-items: baseline; + justify-content: space-between; + gap: 8px; + color: rgba(68, 55, 41, 0.84); + font-size: 12px; +} +.colony-limit-head small { color: var(--muted); font-size: 10px; } +.colony-limit-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-top: 8px; } +.colony-limit-grid label { display: grid; gap: 4px; min-width: 0; font-size: 11px; color: var(--muted); } +.colony-limit-grid input { width: 100%; min-width: 0; box-sizing: border-box; border: 1px solid rgba(100, 78, 52, 0.22); border-radius: 8px; padding: 6px 7px; background: rgba(255,255,255,0.78); color: var(--ink); font: inherit; } +.colony-limit-status { margin-top: 7px; color: rgba(68, 55, 41, 0.78); font-size: 10px; line-height: 1.35; } + /* v39.15.131: keep the folded tool card usable when other right-side cards are expanded. */ .tool-card.collapsed { diff --git a/index.html b/index.html index 2e2ded9..ae742ff 100644 --- a/index.html +++ b/index.html @@ -4,14 +4,14 @@