diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000..d579227
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,24 @@
+
+ ExpiresActive On
+ ExpiresByType text/html "access plus 0 seconds"
+ ExpiresByType text/css "access plus 0 seconds"
+ ExpiresByType application/javascript "access plus 0 seconds"
+ ExpiresByType application/json "access plus 0 seconds"
+ ExpiresByType image/png "access plus 30 days"
+ ExpiresByType image/webp "access plus 30 days"
+ ExpiresByType audio/mpeg "access plus 30 days"
+ ExpiresByType audio/wav "access plus 30 days"
+
+
+
+ Header set Cache-Control "no-cache, no-store, must-revalidate"
+ Header set Pragma "no-cache"
+ Header set Expires "0"
+
+
+ Header set Cache-Control "public, max-age=2592000"
+
+
+
+ AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json text/plain
+
diff --git a/README.md b/README.md
index a874c63..1cb4af3 100644
--- a/README.md
+++ b/README.md
@@ -1,210 +1,210 @@
-# たりないコロニー観察所
+# たりないコロニー観察所
-ブラウザで動く、観察主体の小さなコロニーゲームです。
-外部ライブラリやサーバーは不要です。
+ブラウザで動く、観察主体の小さなコロニーゲームです。
+外部ライブラリやサーバーは不要です。
-## 起動方法
+## 起動方法
-1. ZIPを展開
-2. `index.html` をブラウザで開く
+1. ZIPを展開
+2. `index.html` をブラウザで開く
-Chrome / Edge / Firefox / Safari の近年版を想定しています。
+Chrome / Edge / Firefox / Safari の近年版を想定しています。
-## ゲーム内容
+## ゲーム内容
-「たりない」たちが観察皿の中で勝手に暮らします。
-基本は眺めるだけですが、餌・水・草・石・寝床・などを配置して軽く介入できます。
+「たりない」たちが観察皿の中で勝手に暮らします。
+基本は眺めるだけですが、餌・水・草・石・寝床・などを配置して軽く介入できます。
-## 主な要素
+## 主な要素
-- 9種類のたりない画像を使用
-- 空腹・孤独・眠気・不安・たりない度
-- 餌探し、睡眠、群れ寄り、パニック、繁殖、死亡
-- 死後の「たりない跡」と草の発生
-- 個体選択による詳細観察
-- 観察ログ
-- 一時停止 / 速度変更 / 保存 / 読込
-- localStorageによるブラウザ内セーブ
+- 9種類のたりない画像を使用
+- 空腹・孤独・眠気・不安・たりない度
+- 餌探し、睡眠、群れ寄り、パニック、繁殖、死亡
+- 死後の「たりない跡」と草の発生
+- 個体選択による詳細観察
+- 観察ログ
+- 一時停止 / 速度変更 / 保存 / 読込
+- localStorageによるブラウザ内セーブ
-## 操作
+## 操作
-- 観察:個体クリックで詳細表示
-- ふつうの餌 / あまい餌 / 水滴 / 草 / ぬくい石 / ふわふわ:キャンバスクリックで配置
-- つつく:個体をクリックして一時的に不安を上げる
-- 迷い込み:指定位置に新しいたりないを追加
+- 観察:個体クリックで詳細表示
+- ふつうの餌 / あまい餌 / 水滴 / 草 / ぬくい石 / ふわふわ:キャンバスクリックで配置
+- つつく:個体をクリックして一時的に不安を上げる
+- 迷い込み:指定位置に新しいたりないを追加
-## 素材について
+## 素材について
-同梱画像は本プロトタイプ用に加工した「たりない」素材です。
-公開・配布・商用利用を行う場合は、元画像作成者・権利者の許諾範囲に従ってください。
+同梱画像は本プロトタイプ用に加工した「たりない」素材です。
+公開・配布・商用利用を行う場合は、元画像作成者・権利者の許諾範囲に従ってください。
-## ファイル構成
+## ファイル構成
```text
tarinai_colony_game/
-├─ index.html
-├─ css/
-│ └─ styles.css
-├─ js/
-│ └─ game.js
-├─ assets/
-│ └─ sprites/
-│ ├─ tarinai_01_smile.png
-│ ├─ ...
-│ └─ _contact_sheet.png
-└─ docs/
- └─ design_notes.md
+├─ index.html
+├─ css/
+│ └─ styles.css
+├─ js/
+│ └─ game.js
+├─ assets/
+│ └─ sprites/
+│ ├─ tarinai_01_smile.png
+│ ├─ ...
+│ └─ _contact_sheet.png
+└─ docs/
+ └─ design_notes.md
```
-## 今後の拡張候補
+## 今後の拡張候補
-- 個体ごとの家系図
-- 図鑑・実績
-- より精密なコロニー分裂
-- 草・死跡・餌の生態循環
-- 音と環境変化
-- 画像素材の追加差分
+- 個体ごとの家系図
+- 図鑑・実績
+- より精密なコロニー分裂
+- 草・死跡・餌の生態循環
+- 音と環境変化
+- 画像素材の追加差分
-## 更新内容(最新版)
+## 更新内容(最新版)
-- たりないの表示サイズを大幅に縮小
-- 右移動時に左右反転
-- 食事中の専用エフェクト
-- つつきすぎによる死亡演出(06→09→死亡)
-- 死亡時の緑のしぶき跡
-- 感情に応じたスプライト自動切替
-- 昼夜サイクルと時間HUD
+- たりないの表示サイズを大幅に縮小
+- 右移動時に左右反転
+- 食事中の専用エフェクト
+- つつきすぎによる死亡演出(06→09→死亡)
+- 死亡時の緑のしぶき跡
+- 感情に応じたスプライト自動切替
+- 昼夜サイクルと時間HUD
-## 更新内容(v3)
+## 更新内容(v3)
-- 出生・死亡バランスを再調整:飢餓速度を下げ、寿命と上限個体数を増やし、観察が長く続くように調整
-- 図鑑を追加:観測済みスプライト、イベント、死因を記録
-- 系譜を追加:繁殖時に親子関係・世代・出生時刻を保存
-- 選択個体に親・子数・気分・つつき耐久を表示
-- Web Audioによる簡易効果音を追加(音 ON ボタンで有効化)
-- 昼夜サイクルをログ・図鑑イベントにも反映
-- 食事、繁殖、死亡、つつき、時間帯切替のイベント記録を追加
+- 出生・死亡バランスを再調整:飢餓速度を下げ、寿命と上限個体数を増やし、観察が長く続くように調整
+- 図鑑を追加:観測済みスプライト、イベント、死因を記録
+- 系譜を追加:繁殖時に親子関係・世代・出生時刻を保存
+- 選択個体に親・子数・気分・つつき耐久を表示
+- Web Audioによる簡易効果音を追加(音 ON ボタンで有効化)
+- 昼夜サイクルをログ・図鑑イベントにも反映
+- 食事、繁殖、死亡、つつき、時間帯切替のイベント記録を追加
-## 更新内容(v4)
+## 更新内容(v4)
-- 選択個体パネルから「足りないもの」「考えていること」を削除
-- 系譜をリスト形式から樹状図形式へ変更
-- 子個体が成長するまで親に追従する挙動を追加
-- 食事エフェクト量を抑制し、餌・あまい餌・草の色を反映
-- 昼夜サイクルの光を地面・アイテム・たりない本体へ反映
-- 近距離・低機嫌・過密時に発生する喧嘩を追加
-- 喧嘩イベントを図鑑イベントへ記録
-- 保存キーは `tarinai-colony-save-v4`
+- 選択個体パネルから「足りないもの」「考えていること」を削除
+- 系譜をリスト形式から樹状図形式へ変更
+- 子個体が成長するまで親に追従する挙動を追加
+- 食事エフェクト量を抑制し、餌・あまい餌・草の色を反映
+- 昼夜サイクルの光を地面・アイテム・たりない本体へ反映
+- 近距離・低機嫌・過密時に発生する喧嘩を追加
+- 喧嘩イベントを図鑑イベントへ記録
+- 保存キーは `tarinai-colony-save-v4`
-## 更新内容(v5)
+## 更新内容(v5)
-- 草は自然発生するように変更
-- 草は自然には消えず、少しずつ伸びる
-- 草を食べると残量が減り、表示される本数も減る
-- 暗い時間帯にスプライトの透過部分へ矩形状の色が乗る問題を修正
-- HUDの観察日を「1日目」表記へ変更
-- HUDの「明るさ」表示を時刻表記へ変更
-- 図鑑UIを完全に削除
-- 系譜を右パネルからメイン画面下部へ移動
-- 保存キーは `tarinai-colony-save-v5`
+- 草は自然発生するように変更
+- 草は自然には消えず、少しずつ伸びる
+- 草を食べると残量が減り、表示される本数も減る
+- 暗い時間帯にスプライトの透過部分へ矩形状の色が乗る問題を修正
+- HUDの観察日を「1日目」表記へ変更
+- HUDの「明るさ」表示を時刻表記へ変更
+- 図鑑UIを完全に削除
+- 系譜を右パネルからメイン画面下部へ移動
+- 保存キーは `tarinai-colony-save-v5`
-## 更新内容(v6)
+## 更新内容(v6)
-- 喧嘩中に頭突き攻撃を行うように変更
-- 草と石が昼夜サイクルの光に反応するように変更
-- 睡眠中は完全に移動停止
-- 09_stretch が見えるよう、つつき耐久を 9 段階に調整
- - 3 回目以降: 06_cry
- - 6 回目以降: 09_stretch
- - 9 回目: 死亡
-- たりないがカーソルに反応
- - 好意的な個体は 01_smile で寄ってくる
- - 敵対的・不安定な個体は逃げる
-- 保存キーは `tarinai-colony-save-v6`
+- 喧嘩中に頭突き攻撃を行うように変更
+- 草と石が昼夜サイクルの光に反応するように変更
+- 睡眠中は完全に移動停止
+- 09_stretch が見えるよう、つつき耐久を 9 段階に調整
+ - 3 回目以降: 06_cry
+ - 6 回目以降: 09_stretch
+ - 9 回目: 死亡
+- たりないがカーソルに反応
+ - 好意的な個体は 01_smile で寄ってくる
+ - 敵対的・不安定な個体は逃げる
+- 保存キーは `tarinai-colony-save-v6`
-## 更新内容(v7)
+## 更新内容(v7)
-- メイン画面の外観を「庭の観察」テイストへ刷新
-- 空・日差し・庭枠・土の質感・周辺の草花を追加
-- たりないに接地影を追加
-- 石・草・各アイテムにも影と周囲とのなじみを追加
-- 選択リングを観察レンズ風の二重リングに変更
-- 子個体と親個体の関係が見えやすいよう、近距離時に薄い追従ガイド線を追加
-- 右上HUDと全体UIを庭の観察ノート風に調整
-- 保存キーは `tarinai-colony-save-v7`
+- メイン画面の外観を「庭の観察」テイストへ刷新
+- 空・日差し・庭枠・土の質感・周辺の草花を追加
+- たりないに接地影を追加
+- 石・草・各アイテムにも影と周囲とのなじみを追加
+- 選択リングを観察レンズ風の二重リングに変更
+- 子個体と親個体の関係が見えやすいよう、近距離時に薄い追従ガイド線を追加
+- 右上HUDと全体UIを庭の観察ノート風に調整
+- 保存キーは `tarinai-colony-save-v7`
-## 更新内容(v8)
+## 更新内容(v8)
-- アニメーションを調整し、呼吸感・移動感・喧嘩時の勢いを強化
-- 庭素材を追加(小石・苔・クローバー・落ち葉・周辺の草花)
-- 太陽や月そのものは描かず、時間帯に応じた投影影を追加
-- ずんちを追加。食事を重ねると排泄し、庭に残る
-- 09_stretch が通常個体でもはっきり表示されるよう補強
-- 系譜の接続線を太く・連続的にして見やすく修正
-- 未使用だった図鑑系の状態管理や関連スタイルを削除
-- 保存キーは `tarinai-colony-save-v8`
+- アニメーションを調整し、呼吸感・移動感・喧嘩時の勢いを強化
+- 庭素材を追加(小石・苔・クローバー・落ち葉・周辺の草花)
+- 太陽や月そのものは描かず、時間帯に応じた投影影を追加
+- ずんちを追加。食事を重ねると排泄し、庭に残る
+- 09_stretch が通常個体でもはっきり表示されるよう補強
+- 系譜の接続線を太く・連続的にして見やすく修正
+- 未使用だった図鑑系の状態管理や関連スタイルを削除
+- 保存キーは `tarinai-colony-save-v8`
-## 更新内容(v9)
+## 更新内容(v9)
-- 投影影が見えにくい問題を修正
- - blur フィルタ依存をやめ、軽量な楕円影へ変更
- - たりない・石・草・アイテムの影を濃く調整
-- 重すぎる問題を軽量化
- - 庭背景の粒・草花・落ち葉描画数を削減
- - filter blur を廃止
- - 草の自動発生上限と発生頻度を抑制
- - アイテム上限を削減
- - 食事パーティクル頻度を抑制
-- 死亡後の緑のしぶきが時間経過でゆっくり薄く消えるように変更
-- 保存キーは `tarinai-colony-save-v9`
+- 投影影が見えにくい問題を修正
+ - blur フィルタ依存をやめ、軽量な楕円影へ変更
+ - たりない・石・草・アイテムの影を濃く調整
+- 重すぎる問題を軽量化
+ - 庭背景の粒・草花・落ち葉描画数を削減
+ - filter blur を廃止
+ - 草の自動発生上限と発生頻度を抑制
+ - アイテム上限を削減
+ - 食事パーティクル頻度を抑制
+- 死亡後の緑のしぶきが時間経過でゆっくり薄く消えるように変更
+- 保存キーは `tarinai-colony-save-v9`
-## 更新内容(v10)
+## 更新内容(v10)
-- 新規スプライト5枚を追加
- - `10_hurt`: 痛い時・喧嘩中に打たれた時
- - `11_weak`: 低体力時
- - `12_back`: 奥方向へ進む時
- - `13_flee`: 喧嘩に負けて敗走する時
- - `14_zunda_eat`: ずんだ餅を食べる時
-- 追加画像はすべて透明PNG化し、`512x468` のキャンバスへ正規化
-- 追加スプライトは行動専用扱いにし、通常個体の基本タイプとしてはランダム出現しないように調整
+- 新規スプライト5枚を追加
+ - `10_hurt`: 痛い時・喧嘩中に打たれた時
+ - `11_weak`: 低体力時
+ - `12_back`: 奥方向へ進む時
+ - `13_flee`: 喧嘩に負けて敗走する時
+ - `14_zunda_eat`: ずんだ餅を食べる時
+- 追加画像はすべて透明PNG化し、`512x468` のキャンバスへ正規化
+- 追加スプライトは行動専用扱いにし、通常個体の基本タイプとしてはランダム出現しないように調整
-## 更新内容(v11)
+## 更新内容(v11)
-- 個体ごとの性格を追加
- - 臆病、食いしん坊、眠たがり、寂しがり、怒りっぽい、マイペース
- - 性格は睡眠、喧嘩、ずんだ餅反応、恐怖、対個体行動へ影響
-- 選択パネルに観察理由を追加
- - 現在の行動理由
- - 対象
- - 仲の良い個体
- - 避けている個体
- - 喧嘩記憶
-- 関係性と喧嘩記憶を追加
- - 近くで過ごす個体同士は親和度が上がる
- - 喧嘩に負けた相手を記憶し、しばらく避けやすくなる
- - 勝敗はログと選択パネルに反映
-- hay bed に快適度・混雑ペナルティを追加
- - 空いているベッドを選びやすくなる
- - 混雑時は回復効率が下がり、ストレスが上がる
-- 草の生態系を強化
- - 雨、水、ずんち由来の肥沃地で育ちやすくなる
- - 強い晴天で水分がないと弱りやすくなる
- - 草の周辺ではストレス・恐怖が少し下がる
-- 表情スプライトの優先順位を整理
- - ずんだ餅、被ダメージ、敗走、恐怖、低体力、睡眠、喧嘩、奥移動、通常の順に競合解決
-- ログを種類別に色分け
- - 誕生、死亡、喧嘩、食事、草、環境、関係、観察
-- 喧嘩で転ぶ演出を追加
- - 打撃時に低確率で転ぶ
- - 敗北時に転倒し、土煙が出る
-- 保存キーは `tarinai-colony-save-v11`
+- 個体ごとの性格を追加
+ - 臆病、食いしん坊、眠たがり、寂しがり、怒りっぽい、マイペース
+ - 性格は睡眠、喧嘩、ずんだ餅反応、恐怖、対個体行動へ影響
+- 選択パネルに観察理由を追加
+ - 現在の行動理由
+ - 対象
+ - 仲の良い個体
+ - 避けている個体
+ - 喧嘩記憶
+- 関係性と喧嘩記憶を追加
+ - 近くで過ごす個体同士は親和度が上がる
+ - 喧嘩に負けた相手を記憶し、しばらく避けやすくなる
+ - 勝敗はログと選択パネルに反映
+- hay bed に快適度・混雑ペナルティを追加
+ - 空いているベッドを選びやすくなる
+ - 混雑時は回復効率が下がり、ストレスが上がる
+- 草の生態系を強化
+ - 雨、水、ずんち由来の肥沃地で育ちやすくなる
+ - 強い晴天で水分がないと弱りやすくなる
+ - 草の周辺ではストレス・恐怖が少し下がる
+- 表情スプライトの優先順位を整理
+ - ずんだ餅、被ダメージ、敗走、恐怖、低体力、睡眠、喧嘩、奥移動、通常の順に競合解決
+- ログを種類別に色分け
+ - 誕生、死亡、喧嘩、食事、草、環境、関係、観察
+- 喧嘩で転ぶ演出を追加
+ - 打撃時に低確率で転ぶ
+ - 敗北時に転倒し、土煙が出る
+- 保存キーは `tarinai-colony-save-v11`
diff --git a/css/styles.css b/css/styles.css
index 21f0d8f..84bd045 100644
--- a/css/styles.css
+++ b/css/styles.css
@@ -350,14 +350,14 @@ h1 {
.tool[data-tool="bed"] { --tool-icon: url("../assets/ui/tool_bed.png"); }
.tool[data-tool="ball"] { --tool-icon: none; }
.tool[data-tool="ball"]::before {
- content: "⚽";
+ content: "\26bd ";
background: none;
font-size: 24px;
line-height: 1;
filter: drop-shadow(0 2px 3px rgba(52,40,26,0.12));
}
.tool[data-tool="ball"]::after {
- content: "⚽";
+ content: "\26bd ";
background: none;
font-size: 48px;
line-height: 1;
@@ -372,14 +372,14 @@ h1 {
}
.tool[data-tool="poke"] { --tool-icon: none; }
.tool[data-tool="poke"]::before {
- content: "👈";
+ content: "\1f448 ";
background: none;
font-size: 25px;
line-height: 1;
filter: drop-shadow(0 2px 3px rgba(52,40,26,0.12));
}
.tool[data-tool="poke"]::after {
- content: "👈";
+ content: "\1f448 ";
background: none;
font-size: 48px;
line-height: 1;
@@ -392,6 +392,74 @@ h1 {
width: 54px;
height: 54px;
}
+
+.tool[data-tool="pinch"] { --tool-icon: none; }
+.tool[data-tool="pinch"]::before {
+ content: "\1f90f ";
+ background: none;
+ font-size: 25px;
+ line-height: 1;
+ filter: drop-shadow(0 2px 3px rgba(52,40,26,0.12));
+}
+.tool[data-tool="pinch"]::after {
+ content: "\1f90f ";
+ background: none;
+ font-size: 48px;
+ line-height: 1;
+ opacity: 0.10;
+ right: -6px;
+ left: auto;
+ top: 50%;
+ bottom: auto;
+ transform: translateY(-50%);
+ width: 54px;
+ height: 54px;
+}
+.tool[data-tool="love_mochi"] { --tool-icon: none; }
+.tool[data-tool="love_mochi"]::before {
+ content: "\1f495 ";
+ background: none;
+ font-size: 24px;
+ line-height: 1;
+ filter: drop-shadow(0 2px 3px rgba(52,40,26,0.12));
+}
+.tool[data-tool="love_mochi"]::after {
+ content: "\1f495 ";
+ background: none;
+ font-size: 46px;
+ line-height: 1;
+ opacity: 0.10;
+ right: -6px;
+ left: auto;
+ top: 50%;
+ bottom: auto;
+ transform: translateY(-50%);
+ width: 54px;
+ height: 54px;
+}
+.tool[data-tool="fight_mochi"] { --tool-icon: none; }
+.tool[data-tool="fight_mochi"]::before {
+ content: "\1f4a2 ";
+ background: none;
+ font-size: 24px;
+ line-height: 1;
+ filter: drop-shadow(0 2px 3px rgba(52,40,26,0.12));
+}
+.tool[data-tool="fight_mochi"]::after {
+ content: "\1f4a2 ";
+ background: none;
+ font-size: 46px;
+ line-height: 1;
+ opacity: 0.10;
+ right: -6px;
+ left: auto;
+ top: 50%;
+ bottom: auto;
+ transform: translateY(-50%);
+ width: 54px;
+ height: 54px;
+}
+
.tool[data-tool="delete"] { --tool-icon: url("../assets/ui/tool_delete.png"); }
.tool[data-tool="new"] { --tool-icon: url("../assets/ui/tool_new.png"); }
.tool.selected {
@@ -429,8 +497,8 @@ h1 {
font-weight: 700;
font-size: 12px;
}
-.tool-category-toggle::before { content: "▾"; display: inline-block; width: 16px; color: var(--muted); }
-.tool-category.collapsed .tool-category-toggle::before { content: "▸"; }
+.tool-category-toggle::before { content: "\25be "; display: inline-block; width: 16px; color: var(--muted); }
+.tool-category.collapsed .tool-category-toggle::before { content: "\25b8 "; }
.tool-category-body { padding: 8px; }
.tool-category.collapsed .tool-category-body { display: none; }
.tool-size-badge {
@@ -844,6 +912,7 @@ body::before {
overflow: visible;
pointer-events: none;
z-index: 1;
+ isolation: isolate;
}
.lineage-render-status {
position: sticky;
@@ -860,6 +929,22 @@ body::before {
border: 1px solid rgba(84,68,48,0.10);
box-shadow: 0 4px 10px rgba(64,48,32,0.06);
}
+.lineage-stale-status {
+ position: sticky;
+ top: 0;
+ left: 0;
+ z-index: 6;
+ width: max-content;
+ max-width: calc(100% - 12px);
+ margin: 0 0 8px;
+ padding: 6px 10px;
+ border-radius: 999px;
+ font-size: 12px;
+ color: rgba(92, 75, 52, 0.82);
+ background: rgba(255, 249, 232, 0.92);
+ border: 1px solid rgba(150, 115, 46, 0.16);
+ box-shadow: 0 4px 10px rgba(64,48,32,0.05);
+}
.lineage-family-tree .lineage-links path {
fill: none;
stroke: rgba(107, 88, 61, 0.58);
@@ -883,11 +968,28 @@ body::before {
min-height: 68px;
box-sizing: border-box;
align-items: flex-start;
+ background: linear-gradient(180deg, #fffdf8, #f8f1e5);
+ box-shadow: 0 2px 5px rgba(64,48,32,0.035);
+ contain: layout paint style;
z-index: 2;
+ isolation: isolate;
}
.lineage-family-tree .tree-node.child {
border-color: rgba(103,178,44,0.34);
}
+.lineage-family-tree .tree-node.dead {
+ opacity: 1;
+ filter: none;
+}
+.lineage-family-tree .tree-node[data-family-tarinai-id]:hover {
+ transform: none;
+}
+.lineage-family-tree .tree-node .family-portrait {
+ right: 0;
+ bottom: -6px;
+ width: 58px;
+ height: 58px;
+}
.lineage-family-tree .tree-generation-label {
position: absolute;
left: 10px;
diff --git a/docs/code_map.md b/docs/code_map.md
index 2ba87a2..41910c2 100644
--- a/docs/code_map.md
+++ b/docs/code_map.md
@@ -7,14 +7,12 @@ Use this map to open the smallest relevant file first.
- `js/items.js`: `Item` lifecycle, item save/load restore, grass and zunchi behavior, and item drawing.
- `js/tarinai.js`: `Tarinai` state, AI, movement, eating, fighting, panic, reproduction-adjacent behavior, and drawing.
- `js/world.js`: `World` state, save/load, spawning, family registry normalization, spatial queries, tools, weather, and update loop coordination.
-- `js/sim.js`: compatibility export for `window.TarinaiSim`.
## UI And Rendering
- `js/render.js`: canvas scene rendering, lighting, weather visuals, HUD, and selected-card overlay.
- `js/ui.js`: DOM references, selected/log panels, labels, save/load buttons, tool controls, canvas input, and UI event binding.
- `js/ui_charts.js`: colony history aggregation and chart rendering.
- `js/ui_family.js`: family tree components, layout, archive rendering, and validation helper.
-- `js/ui_exports.js`: compatibility export for `window.TarinaiUI`.
## Common Tasks
- Change hunger, sleep, fighting, panic, eating, or movement: start with `js/tarinai.js`.
diff --git a/docs/design_notes.md b/docs/design_notes.md
index 2b1c1e8..f5a9b42 100644
--- a/docs/design_notes.md
+++ b/docs/design_notes.md
@@ -1,163 +1,163 @@
-# たりないコロニー観察所:仕様メモ
+# たりないコロニー観察所:仕様メモ
-## コンセプト
+## コンセプト
-「不足を解決するゲーム」ではなく、
-「不足を抱えた生き物が、それでも勝手に暮らす様子を眺めるゲーム」。
+「不足を解決するゲーム」ではなく、
+「不足を抱えた生き物が、それでも勝手に暮らす様子を眺めるゲーム」。
-プレイヤーは神ではなく、観察者兼飼育係程度の立場。
-すべてを最適化するより、少し足りない状態の揺らぎを観察することを主目的にする。
+プレイヤーは神ではなく、観察者兼飼育係程度の立場。
+すべてを最適化するより、少し足りない状態の揺らぎを観察することを主目的にする。
-## 現在実装しているループ
+## 現在実装しているループ
-1. 個体が空腹・孤独・眠気・不安を内部状態として持つ
-2. 状態に応じて餌・仲間・寝床を探す
-3. プレイヤーは環境にアイテムを置いて介入する
-4. 介入と個体行動により、繁殖・死亡・観察ログが生まれる
-5. 死亡個体は「たりない跡」を残し、環境に記録として残る
+1. 個体が空腹・孤独・眠気・不安を内部状態として持つ
+2. 状態に応じて餌・仲間・寝床を探す
+3. プレイヤーは環境にアイテムを置いて介入する
+4. 介入と個体行動により、繁殖・死亡・観察ログが生まれる
+5. 死亡個体は「たりない跡」を残し、環境に記録として残る
-## 個体状態
+## 個体状態
-| 状態 | 内容 |
+| 状態 | 内容 |
|---|---|
-| 空腹 | 高いほど餌・草を探す。上がりすぎると死亡 |
-| 孤独 | 高いほど仲間に寄る。近くに仲間がいると下がる |
-| 眠気残量 | 低いほど寝る。寝床があると回復が速い |
-| 不安 | 高いほど慌てる。水・石・寝床などで下がる |
-| たりない度 | 上記の総合的な不安定さ |
+| 空腹 | 高いほど餌・草を探す。上がりすぎると死亡 |
+| 孤独 | 高いほど仲間に寄る。近くに仲間がいると下がる |
+| 眠気残量 | 低いほど寝る。寝床があると回復が速い |
+| 不安 | 高いほど慌てる。水・石・寝床などで下がる |
+| たりない度 | 上記の総合的な不安定さ |
-## 個体タイプ
+## 個体タイプ
-9枚のスプライトに対応。
+9枚のスプライトに対応。
-- にこたりない
-- いかりたりない
-- うるうるたりない
-- じとたりない
-- よだれたりない
-- ぐしゃたりない
-- すやたりない
-- ぽかんたりない
-- のびたりない
+- にこたりない
+- いかりたりない
+- うるうるたりない
+- じとたりない
+- よだれたりない
+- ぐしゃたりない
+- すやたりない
+- ぽかんたりない
+- のびたりない
-各タイプは、空腹速度・社交性・睡眠傾向・不安耐性・移動速度に差がある。
+各タイプは、空腹速度・社交性・睡眠傾向・不安耐性・移動速度に差がある。
-## 介入アイテム
+## 介入アイテム
-| アイテム | 役割 |
+| アイテム | 役割 |
|---|---|
-| ふつうの餌 | 空腹を直接下げる |
-| あまい餌 | 空腹と不安を下げるが依存的な挙動を生みやすい |
-| 水滴 | 不安を下げる。時間で蒸発する |
-| 草 | 軽い餌・落ち着き場・死後の循環要素 |
-| ぬくい石 | 周辺温度を上げ、不安を下げる |
-| ふわふわ | 寝床。睡眠回復を強める |
-| つつく | 個体に一時的な不安と速度を与える |
-| 迷い込み | 新規個体を追加する |
+| ふつうの餌 | 空腹を直接下げる |
+| あまい餌 | 空腹と不安を下げるが依存的な挙動を生みやすい |
+| 水滴 | 不安を下げる。時間で蒸発する |
+| 草 | 軽い餌・落ち着き場・死後の循環要素 |
+| ぬくい石 | 周辺温度を上げ、不安を下げる |
+| ふわふわ | 寝床。睡眠回復を強める |
+| つつく | 個体に一時的な不安と速度を与える |
+| 迷い込み | 新規個体を追加する |
-## 生死
+## 生死
-死亡条件は現在、主に以下。
+死亡条件は現在、主に以下。
-- 空腹過多
-- 寿命
-- 不安過多
-- 空腹と眠気の複合
+- 空腹過多
+- 寿命
+- 不安過多
+- 空腹と眠気の複合
-死亡時には「たりない跡」が生成され、一定確率で草も発生する。
-これは観察ゲームとして「失敗」ではなく、生態系の記録として扱う。
+死亡時には「たりない跡」が生成され、一定確率で草も発生する。
+これは観察ゲームとして「失敗」ではなく、生態系の記録として扱う。
-## 繁殖
+## 繁殖
-近距離にいる2個体が、以下を満たすと低確率で新個体が発生する。
+近距離にいる2個体が、以下を満たすと低確率で新個体が発生する。
-- 空腹が高すぎない
-- 眠気残量が十分ある
-- 繁殖クールダウンが終わっている
-- コロニーが過密でない
+- 空腹が高すぎない
+- 眠気残量が十分ある
+- 繁殖クールダウンが終わっている
+- コロニーが過密でない
-子は親のタイプ・足りないものを一部継承し、低確率で変異する。
+子は親のタイプ・足りないものを一部継承し、低確率で変異する。
-## 設計上の注意
+## 設計上の注意
-- 完全な最適化ゲームに寄せすぎない
-- 数値を見せつつ、ログ文で生態観察感を出す
-- 介入は強いが万能ではない
-- 死亡や衰退も観察価値として扱う
-- 「むらさき」は画像作成者名のため、ゲーム内の異常現象名には使用していない
+- 完全な最適化ゲームに寄せすぎない
+- 数値を見せつつ、ログ文で生態観察感を出す
+- 介入は強いが万能ではない
+- 死亡や衰退も観察価値として扱う
+- 「むらさき」は画像作成者名のため、ゲーム内の異常現象名には使用していない
-## v3設計メモ
+## v3設計メモ
-- 観察時間を伸ばすため、空腹・孤独の上昇をやや抑制し、寿命を長めにした。
-- 図鑑は「達成」ではなく観察記録として扱う。スプライト、イベント、死因をゆるく解放する。
-- 系譜は全個体を複雑なツリーで描画せず、出生ログとして読みやすさを優先した。
-- 音は外部素材を使わず、Web Audioの短い合成音で実装した。ブラウザ仕様上、音 ON を押すまで鳴らない。
+- 観察時間を伸ばすため、空腹・孤独の上昇をやや抑制し、寿命を長めにした。
+- 図鑑は「達成」ではなく観察記録として扱う。スプライト、イベント、死因をゆるく解放する。
+- 系譜は全個体を複雑なツリーで描画せず、出生ログとして読みやすさを優先した。
+- 音は外部素材を使わず、Web Audioの短い合成音で実装した。ブラウザ仕様上、音 ON を押すまで鳴らない。
-## v4 仕様追記
+## v4 仕様追記
-### 子の追従
-繁殖で生まれた子は `childGrowTime` の間、親のどちらか近い方を追従する。成長すると通常AIへ移行する。
+### 子の追従
+繁殖で生まれた子は `childGrowTime` の間、親のどちらか近い方を追従する。成長すると通常AIへ移行する。
-### 系譜
-系譜は `family` レジストリで保持し、親子関係を樹状図で表示する。表示時は同じ個体を重複させず、共有された親子関係は複数の接続線で表す。
+### 系譜
+系譜は `family` レジストリで保持し、親子関係を樹状図で表示する。表示時は同じ個体を重複させず、共有された親子関係は複数の接続線で表す。
-### 食事エフェクト
-食事パーティクルは表示頻度を抑え、対象アイテムの色を反映する。
+### 食事エフェクト
+食事パーティクルは表示頻度を抑え、対象アイテムの色を反映する。
-### 喧嘩
-近距離、低気分、怒り個体、過密などを条件に小さな喧嘩が発生する。喧嘩中は 02_angry を優先表示し、互いにノックバックする。
+### 喧嘩
+近距離、低気分、怒り個体、過密などを条件に小さな喧嘩が発生する。喧嘩中は 02_angry を優先表示し、互いにノックバックする。
-### 昼夜
-夜間・夕方の色を背景だけでなく、観察皿・アイテム・たりない本体にも重ねる。
+### 昼夜
+夜間・夕方の色を背景だけでなく、観察皿・アイテム・たりない本体にも重ねる。
-## v5 仕様追記
+## v5 仕様追記
-### 草
-草はコロニー内に自動で発生する。草アイテムは `amount` を草量として持ち、時間でゆっくり伸びる。食べられると `amount` が減り、描画本数も減る。
+### 草
+草はコロニー内に自動で発生する。草アイテムは `amount` を草量として持ち、時間でゆっくり伸びる。食べられると `amount` が減り、描画本数も減る。
-### 昼夜の描画修正
-スプライト本体への色補正は `source-atop` の矩形塗りを廃止し、`ctx.filter` に変更した。これにより透過部分へ矩形状の色が乗る問題を避ける。
+### 昼夜の描画修正
+スプライト本体への色補正は `source-atop` の矩形塗りを廃止し、`ctx.filter` に変更した。これにより透過部分へ矩形状の色が乗る問題を避ける。
-### 系譜
-図鑑UIは削除し、系譜のみをメイン画面下部に配置する。
+### 系譜
+図鑑UIは削除し、系譜のみをメイン画面下部に配置する。
-## v6 仕様追記
+## v6 仕様追記
-### 頭突き喧嘩
-喧嘩中は一定周期で相手へ突進し、近距離でノックバックと喧嘩エフェクトを発生させる。
+### 頭突き喧嘩
+喧嘩中は一定周期で相手へ突進し、近距離でノックバックと喧嘩エフェクトを発生させる。
-### 睡眠
-睡眠状態では速度をゼロにし、移動処理を行わない。寝床が近くても寝ながら移動しない。
+### 睡眠
+睡眠状態では速度をゼロにし、移動処理を行わない。寝床が近くても寝ながら移動しない。
-### カーソル反応
-カーソルが近い場合、気分の良い個体は笑顔で寄り、不安・怒り・つつき記憶のある個体は逃げる。
+### カーソル反応
+カーソルが近い場合、気分の良い個体は笑顔で寄り、不安・怒り・つつき記憶のある個体は逃げる。
-## v7 ビジュアル改修
+## v7 ビジュアル改修
-- 背景をシャーレ風から庭の観察区画風へ変更。
-- 地面は木枠に囲まれた明るい土床とし、細かな土粒、苔色のムラ、縁の草、野花を加えた。
-- たりないとアイテムの接地影を追加し、庭の上に実在している感覚を強めた。
-- 右上HUDと下部ラベルを観察札のような見た目へ調整。
-- 親子の追従を視認しやすくするため、近距離では薄い点線ガイドを描く。
+- 背景をシャーレ風から庭の観察区画風へ変更。
+- 地面は木枠に囲まれた明るい土床とし、細かな土粒、苔色のムラ、縁の草、野花を加えた。
+- たりないとアイテムの接地影を追加し、庭の上に実在している感覚を強めた。
+- 右上HUDと下部ラベルを観察札のような見た目へ調整。
+- 親子の追従を視認しやすくするため、近距離では薄い点線ガイドを描く。
-## v8 ビジュアル / 実装改修
+## v8 ビジュアル / 実装改修
-- 直射日光・月光の方向をもとに、たりないとアイテムへ投影影を付与。
-- 背景では天体本体は描かず、空色と影方向のみで昼夜を表現する。
-- 食事の蓄積で「ずんち」を排泄する消化処理を追加。
-- 09_stretch は通常描画でも横にやや広く扱い、視認性を上げた。
-- 系譜ツリーの接続線は擬似要素を再設計し、途切れにくい連結表現へ変更。
-- 旧図鑑用の状態管理(codex)と未使用スタイルを整理。
+- 直射日光・月光の方向をもとに、たりないとアイテムへ投影影を付与。
+- 背景では天体本体は描かず、空色と影方向のみで昼夜を表現する。
+- 食事の蓄積で「ずんち」を排泄する消化処理を追加。
+- 09_stretch は通常描画でも横にやや広く扱い、視認性を上げた。
+- 系譜ツリーの接続線は擬似要素を再設計し、途切れにくい連結表現へ変更。
+- 旧図鑑用の状態管理(codex)と未使用スタイルを整理。
-## v9 修正
+## v9 修正
-- `ctx.filter = blur(...)` を使った影を廃止し、低負荷な楕円描画へ変更。
-- 背景装飾のループ数を削減し、毎フレームの描画負荷を下げた。
-- 死亡時の `splat` は amount を連続的なアルファ値へ反映し、数分かけてフェードアウトする。
+- `ctx.filter = blur(...)` を使った影を廃止し、低負荷な楕円描画へ変更。
+- 背景装飾のループ数を削減し、毎フレームの描画負荷を下げた。
+- 死亡時の `splat` は amount を連続的なアルファ値へ反映し、数分かけてフェードアウトする。
diff --git a/index.html b/index.html
index 743e3ae..6210372 100644
--- a/index.html
+++ b/index.html
@@ -3,17 +3,16 @@
- たりない観察
-
+ たりない観察
+
@@ -43,7 +42,7 @@
-
+
@@ -52,8 +51,8 @@
-
-
+
+
@@ -124,78 +123,76 @@
-
家系図をリセットしますか?
-
現在の親子関係と世代情報を消去します。個体そのものや庭の状態は消えません。
+
家系図をリセットしますか?
+
現在の親子関係と世代情報を消去します。個体そのものや庭の状態は消えません。
-
-
+
+
-
たりないの生態
+
たりないの生態
-
- 食べるお腹がすくと食べ物や草を探します。食べられない時間が長いと弱っていきます。
+
+ 食べるお腹がすくと食べ物や草を探します。食べられない時間が長いと弱っていきます。
-
- 眠る疲れるとその場や寝床で眠ります。休めると元気を取り戻します。
+
+ 眠る疲れるとその場や寝床で眠ります。休めると元気を取り戻します。
-
- なつく気分がよい個体はカーソルや仲間に寄ってきます。やさしく構うと落ち着きやすくなります。
+
+ なつく気分がよい個体はカーソルや仲間に寄ってきます。やさしく構うと落ち着きやすくなります。
-
- 関係が変わる近くで過ごすうちに仲良しや苦手が生まれます。強いストレスは行動や表情に出ます。
+
+ 関係が変わる近くで過ごすうちに仲良しや苦手が生まれます。強いストレスは行動や表情に出ます。
-
- 増える落ち着いた相手どうしから新しい個体が生まれ、家系図に親子関係が残ります。
+
+ 増える落ち着いた相手どうしから新しい個体が生まれ、家系図に親子関係が残ります。
-
- 環境の影響雨や食べ物不足、つつき、喧嘩などで暮らしぶりが変わります。庭の配置も大切です。
+
+ 環境の影響雨や食べ物不足、つつき、喧嘩などで暮らしぶりが変わります。庭の配置も大切です。
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+