086 ひと部屋の災害会議
合意形成ソロ / 日本語 / Pyxel 2.9.9 + Python標準ライブラリ

架空の川沿い町の3世帯。どの計画でも、必ず全員が高台へ到着します。
誰の理由を先に聞くか。便の順番、灯り、台車、戸締りで何を大事にするか。
速さ・心配・残予算を一つの点にまとめない、小さな人物劇です。
現実の防災助言・避難計画の教材ではありません。

起動
Windows: Python 3を用意し、setup.batを一度実行。その後play.bat。
Linux/macOS: bash setup.sh の後、bash play.sh。
セットアップ時のPyxel取得に通信が必要。ゲーム起動時は外部通信・アカウント不要。
制作環境専用launch.shと配布先用play.sh/play.batを区別しています。
Windows/macOS実機、音の実聴、人の面白さは未確認。ゲームと動画は無音です。

操作と目標
左右: 人物を選ぶ。会話画面でZ: 事情を聞く。3質問まで。同じ事情の再読は無料。
質問は好感度を上げません。計画の受入式を知るだけです。聞かずに決めてもよいです。
Tab: 会話と計画編集。計画中の上下: 後便・灯り・台車・戸締りの欄を選ぶ。
後便欄でZ: 現在選んでいる人物を後便へ。残る2世帯は自動的に初便です。
設備欄でZ: 有無を切替。灯り1枚、台車2枚、戸締り1枚。総予算4枚。
灯りは待合を照らし、台車は店の品を運び、戸締りは店を閉めます。
どの人の受入式に効くかは、公開希望と聞いた事情を見て判断します。
Enter: 予算と便を確認。もう一度Z/Enterで提出。他のキーで取消。
提出後は全事情が開き、人物ごとの準備刻・全員到着刻・持帰り備えを表示。
Space: 提出した計画の時計を1刻進める。読む間や説明中に時間は進みません。
基本達成は全世帯が高台へ到着すること。失敗・見捨てる選択・破局締切はありません。
X: 一編集/質問を戻す。提出後は計画編集へ戻し、以前の提出は別枠に保存。
見た事情はundoでも保持。質問を戻すと残数は戻りますが、再読で再び消費しません。
Rは確認後同じ会議を最初へ。既知の事情は残ります。1/2/3はA/B/C。
H・Pは説明。Bは最初から全事情を見せる表示比較。計画・予算・計算は同じ。
一度比較で見た事情を原版へ戻っても未知に装いません。原版の表示に既知保持を明記。
F12画像、S記録保存、M表紙、Q/Escape終了。確定・遷移後はキーを一度離します。

準備と船の計算
受入式を満たせば準備1刻。満たさなくても公開希望を満たせば2刻。両方なしは3刻。
公開の賛成/反対は公開希望だけの反応です。受入式による協力とは別に表示します。
事情が未知なら個人の準備は1～3刻とだけ表示し、正確な答えを漏らしません。
3人の仕事は同時に始まり、初便の二人がともに準備完了した刻に出発します。
初便は1刻で到着。出発から2刻後に船が戻ります。
後便は帰船と本人の準備完了の遅い方で出発。1刻後に高台到着です。
公開の反対があっても準備は終わり、全世帯を必ず運びます。
質問・計画選択・説明には締切や隠れた時間ペナルティを付けません。

検算した72計画
3初便組合せ×8設備=24計画、会議3つで72計画を全列挙。
全計画は予算内、全員が一便にだけ乗り、刻4～6で全員到着。
全員準備1刻の計画数はAが3、Bが4、Cが3。存在を隠さず記録します。
最小設備費はA3枚/B3枚/C2枚。すべてを買うことが唯一解ではありません。
A: ハル後便、台車＋戸締りで全員1刻、全員到着4、備え1枚。
A: ミナ後便、全設備で全員1刻。灯りがあればミナは後便を受け入れます。
A: ハル後便、戸締りのみなら準備(1,2,1)、全員到着5、備え3枚。
B: ソラまたはトワ後便、台車＋戸締りで全員1刻、全員到着4、備え1枚。
C: ユズ後便、灯り＋戸締りで全員1刻、全員到着4、備え2枚。
C: 同じ便で戸締りのみでも全員到着4、備え3枚。ただしユズの準備は2刻で灯りの心配が残ります。
最後の例は同じ速さでも事情への配慮が異なる例。どちらかを総合点で下げません。
比較は情報を開く方法だけを変更。72計画すべてで両版のOutcome一致を確認しました。
policy_results.jsonに全計画の人物別準備/反応、両便時刻、残予算を保存しています。

実装と証拠の区別
councils.jsonへ人物・希望・事情・AND/OR式を一元化。
model.pyは不変State/step、式評価、表示式生成、船計算。描画に依存しません。
controller.pyは物理キー解放を毎フレーム更新。世界を止めても解放を取り逃しません。
python -m unittest -v test_model test_ui。検査はmediaの原証跡へ書込みません。
入力記録はルール版、初期人物条件、意味入力journal、論理時計、最終状態を保存。
undoと既知保持もjournalで再現できます。提出履歴はundo後も別枠に残ります。
各自動・ネイティブ記録は実行時の全ソースとSHA-256を別フォルダに保持します。
映像は実Pyxelを自動入力し無音収録。原GIFの全枚を1回ずつ30fpsでMP4化。
これは技術的な検査であり、実際の人の理解・納得・楽しさの確認ではありません。

ライセンス
自作コード・図形: LICENSE.txt。Pyxel全文: assets/PYXEL-LICENSE.txt。
日本語字形: Noto Sans CJK由来、SIL OFL1.1全文はassets/NOTO-LICENSE.txt。
実行時はPyxelと標準ライブラリだけ。フォント・Pillow・ffmpegは不要。
フォント/動画の再生成補助だけPillow/ffmpegを使います。

推奨媒体
media/automatic_20261003T012606_550614/council_automatic_silent.mp4
749枚を30fps、24.966667秒、音声なし。初回の不均一GIFは履歴として残しています。
通常プレイは動画バッファ0、デモのみ30秒。F12静止画・意味入力ログは通常プレイでも保存。
設定変更前後の正確なソース来歴はsource_provenance.json、技術観察はNATIVE_OBSERVATIONS.txt。
