098 一冊の動く絵本

「軽い」を舟から石へ、「長い」を橋から旗へ。２つの物で言葉を交換すると、景色が同時に返事をします。３章を読み終えたあとも、前のページへ戻って好きな完成絵を残せる小さな絵本です。

起動
Windows: Python 3を用意してsetup.batを一度実行、その後play.bat。
macOS/Linux: sh setup.sh の後、sh play.sh。Python 3と仮想環境が必要です。
launch.shは制作者のクラウドLinux専用。通常はplay.bat/play.shを使います。
プレイに必要なのはPyxel 2.9.9とPython標準ライブラリのみ。日本語字形同梱、通信/アカウント不要。

操作
SPACE/Enterで表紙から開始。表紙のBで一変更比較（切替時は新しい本へ）。
Tab:歩く／札モード。モードは画面下に常時表示。
歩く:←→で１セル移動、Zで物を寄せる・旗を上げる・乗り物から陸へ降りる。
札:矢印で２対象を切替、Zで選ぶ/解除。２つ選んでEnterで交換。選ぶだけでは物理も時間も進まない。
Space:１段階待つ。第３章では風が軽い物を１セル運ぶ。
N:完成した章から次章。Q:前章。元の状態と完成絵は保持。
X:直前１操作undo。R:確認して今の章だけやり直し。他の章は保持。
H/P:説明。S保存、L読込。M表紙。Esc終了。確認はEnter、取消はX。
F12:mediaの今回の記録フォルダへPNG。押しっぱなしは繰返さず、キーを離してから次の操作。

第１章 渡し舟
右陸セル５へ到着が目標。重い物は水底、軽い物は水面の足場。
初めは舟が重く、石が軽い。札交換で舟が浮く。舟に乗って左右に進む。水底の石は舟を妨げない。
陸から２セルまでの軽い物はZで１セル手前へ。初期の石は３セル先で届かない。
航行中に舟を重くすると、旅人は泡で最後の陸へ戻る。死亡・得点罰なし。
右陸へ渡ったあと札を戻せば、浮く石を完成絵に残せる。

第２章 橋
短い橋は谷セル２だけ、長い橋は谷２・３・４を覆う。右端６でZを押して旗を上げる。
渡ったあと札を戻すと、橋は短く、旗は長くなる。橋も旗も長い３単位/短い１単位。
谷上で橋を短くした時は、安全措置として最後の陸へしおりが戻す。右陸に着いていれば戻らない。

第３章 風
右端６で乗り物からZで陸へ降りることが目標。Space１回で軽い物が１セル右へ。重い物は今のセルに留まる。札交換そのものは風を進めない。
軽い物は空中の層を通るため、地上の重い看板を越えられる。この扱いで葉舟だけの安全な到着も成立する。
葉舟で途中の陸へ、Zで降り、札を交換して看板へ乗り継ぐ別案もある。風は右端で止まる。
軽い物が重くなっても、そのセルで留まる。第３章には隠れた落下・破壊ルールを足していない。

完成絵
３章とも目標を果たすと一冊完成。完成後の交換も絵に反映し、ページ移動だけで消えない。
章ごとの札は他章へ持ち越さない。得点、回数罰、善悪の評価なし。
S/Lは作品ID/版/章/各章状態/完成絵/undo履歴/設定をJSONで保存・検証。一時ファイル書込完了後に置換。未知版や破損は現在状態を保持して説明。

比較・確認範囲
通常は交換の原因文＋物の動き、比較版は札と最終状態だけ。同じ物理/操作回数/目標。通常の18フレーム演出中は入力停止し、キーの解放は追跡する。
２種類の三章達成列を両版で実行し、表示設定以外の全状態が同一であることを確認。
media/automatic_*は実Pyxelに自動入力した無音収録。元GIFの全フレームを１回ずつ30fpsへ変換。native_*はクラウドLinuxでのエージェント実操作。人の試遊と区別。
本作は無音。Windows/macOS実機、音の実聴、人による面白さ、所要時間は未確認。

ライセンス
独自コード・図形:LICENSE.txt。Pyxel:assets/PYXEL-LICENSE.txt（全文）。
日本語字形:Noto Sans CJK由来、assets/NOTO-LICENSE.txt（SIL Open Font License全文）。
tools/build_font.pyの再生成だけはPillowとNotoフォントが必要。ゲーム実行には不要。
