いつか実装したいこと

無くても完成を宣言できるが、いつか実装したいものを集めます。残りの作業量には数えません。

無いと完成と言えないものの印は 【未実装: 識別子】 で、実体は kind:task の issue が持ちます (DocumentStyle.md 4節)。本書が持つのはその外側だけです。両方を1つの印で 扱うと、あと何が足りないのかを誰も答えられなくなります。

一覧

月齢 — 夜の明るさを月齢で周期させる

いまは半月固定で(ContentSkeleton.md 8.1.1.3節)、夜はどの時刻も暗さの 底へ均されます(同8.1.1.1節)。画面に月齢を出す形が決まっていないので入れません。入れると開けた土地の夜が 「歩ける/歩けない」で周期的に切り替わります——森と密林はどのみち歩けないので、効くのは開けた土地だけです。

泊まりがけ — 補給を持ち込んで、遠い土地に泊まる

拠点へ戻らずに滞在する行程と、そこへ置く前線の段です。今の島は端から端まで日帰りで届き、土地ごとに 日帰りと泊まりの安いほうを採ってもほとんど浮かないので (ContentSkeleton.md 8.3.2節)、無くても1周回は成立します。この2つが 落ちたことで、移動の距離は系統から外れました(同3.1節)。

入れるなら、島を広くするほうが先です。 泊まりを選ぶ理由は「日帰りでは往復が枠を食い尽くす土地が ある」ことでしか作れず、それは島の広さの話だからです。広さを変えないまま行程だけを足すと、 ほとんど変わらない日数のために持ち出す量を決めさせることになります——判断の材料に対して、返るものが釣り合いません。

アチーブメント — 周回をまたぐ記録を残す

「すべての動物を飼いならす」のような達成を、棚と同じく周回をまたいで永続させます (GameEndings.md 7節)。棚が既に周回をまたぐ動機を担っているので、無くても 終幕は成立します。保存先は棚と同じ、セーブの4スロットとは別の領域(SaveDataManagement.md 棚節)。

なめし革の帆 — 生皮の帆の上に1段置く

帆は生皮の1種(sail_speed +2)だけで、その上は空けてあります(Voyage.md 2.1節)。 材料のなめし革はもう作れます(SurvivalItems.md 5節)が、+2 でどの積載でも段が 1つ上がり、生皮の帆だけで外洋は渡り切れるので、無くても航海は成立します。+4 を置くと、重く積んだ日ほど 生皮との差が開きます。

穀物 — 年単位で保つ食材を作物に足す

畑で採れるのはタロイモと空心菜で(src/assets/world-codex/farming.yaml)、いちばん保つ芋でも20日 (DurabilitySystem.md 3節)。塩蔵が持っていく先も同じ20日なので (SurvivalItems.md 9節)、今ある保存はどれも20日で頭打ちです。穀物は 乾かせば桁違いに長く保つ食材で、その上を開けます。要るのは脱穀と製粉の工程で、そこまで足さないと収穫が そのまま食べ物になりません。20日で回る暮らしは既に成立しており、それを超える保存を要求する場面は どこにもありません(航海でさえ4〜6日、Voyage.md 3.9.1節)ので、無くても 完成します。

入れるときは、既存の食材の弱体化か、どちらを選ぶかを分ける条件(腕前・環境)とセットにします (DesignPrinciples.md の「後から足す手段は、既存の手段を残す強さに 抑える」節)。保つ日数だけが桁違いに長い食材を足すと、畑は穀物だけになります——脱穀と製粉の手数を 代償に置くか、育つ土地や季節で芋と分かれるか、どちらかが要ります。

明るさ条件の検査 — 条件の書き忘れを見張る

明るさの条件を書かない操作は「暗くてもできる」という意味になり、書き忘れと見分けが付きません (IlluminationSystem.md 5節)。操作の一覧を出して、明るさの条件を 持たないものを並べる検査で見張ります。遊びの側は無くても完成するので、診断の道具として後から足します。

図鑑の生成型 — 中身入りの容器を図鑑に載せる

「水入りの甕」のように実行時に生成される型は図鑑(src/codex-viewer)の一覧に無く、名指しで開く道が ありません(LiquidContainerSystem.md 1節)。空の容器と液体は別々に 載っているので、無くても図鑑は読めます。載せると、容器と液体の組み合わせが1ページで確かめられます。

洞窟内部 — 浅い洞窟の奥へ続く道を開く

浅い洞窟(shallow_cave)には入れますが、そこから奥へ続く道がありません。要るのは structure_interior スコープの再帰生成(TerrainGeneration.md 3.7節)と、 内部への遷移です。雨よけ・拠点・アーティファクトの行き先は浅い洞窟が既に担っているので、奥が無くても 1周回は成立します。開くときは次のすべてが同時に要ります。

パックの取得元 — ユーザーが選んだアセットパックを入れられるようにする

読むのは同梱の見本パック1つだけで、切り替えは「読む/読まない」しかありません (AssetPack.md 2節、StartScreen.md 画面構成4)。 ローカルのファイル選択(<input type="file">)も、URLの入力(外部サーバはCORSが要る)もまだ無く、 ArrayBuffer を得る口は fetch の側だけです。見本パック1つで「後から足せる形になっている」ことは 実証済み——型を足すのも同梱の土地へ patch で差し込むのも通っている——で、遊びは同梱ぶんだけで 完結するので、無くても完成します。

入れるときは、パックを並べ替えられる画面とセットにします。 読み込み順は入れる人が並べた順と 決まっている(AssetPack.md 6.2節)ので、並べる手が無いと規則だけがあって 使えません。ZIP全体を読んで構わない大きさに収まらなくなったら、中央ディレクトリだけを先に読む形 (HTTPのRange・File.slice)へ移します——今は見本が82KBで、丸ごと読んでいます。

パックの着脱 — 遊んでいる途中でアセットパックを入れ替える

パックは起動時に1回だけ入って以後不変で、設定を変えてもページを読み込み直すまで効きません (AssetPack.md 4節)。絵の在庫表もWorldCodexも起動時に1回組み立てるので、 途中で入れ替えるには両方を作り直すことになります。読み込み直せば同じ状態に行けるので、無くても 完成します。

入れるときは、開いているセーブとの噛み合いが先に要ります。 セーブは作られたときのパックの並びを 記録し、食い違えば開かない(AssetPack.md 6.4節)ので、遊んでいる途中で外すと そのスロットは次から開けなくなります。

絵以外の資産 — 音などをアセットパックの在庫表に載せる

ZIPから読むのは定義YAML・絵・表示文字列だけで、他の拡張子は入っていても無視します (AssetPack.md 3節)。在庫表は「フォルダの直下を名前→URLで引く」形 (src/asset-pack/AssetPack.ts)で絵に固有の作りではなく、ZIPの読み取りは全エントリを保つので、 今のうちに音を入れたパックを配っておいても、読む側が増えた日にそのまま読めます。だから無くても 完成します。

入れるときは、ゲーム本体が音を持つのが先です。 ZIPのトップが src/assets/ に相当するという規約 (同 3節)で決まるので、同梱ぶんの置き場が決まらないとパック側の位置も決まりません。

読み込みの記録の画面 — アセットパックの読み込みで捨てた定義と理由を画面から読む

パックの読み込みで受け付けられなかった定義は、捨てた理由とともに記録へ残り、今はコンソールにだけ出ます (AssetPack.md 6.1節)。画面から読めるようにすることは決まっています (同 6.1.1節)が、遊ぶ人に届くのは「入れたはずの物が出てこない」ときだけで、コンソールで足りるうちは 無くても完成します。候補の置き場はビューアへの表示とタイトル画面の印です。

動かせなかったもの

各文書の未決事項節にある項目は、大半がここへ移りません。移す条件は「やるかどうかが決まって いること」と「入れなくても今の遊びが回ること」の両方で、片方でも欠けるものは未決事項節に残して あります。残した理由は次のとおりです。

残した理由 例
やるかどうかが決まっていない(大半) 「解体して部品を回収できるか」「密度の差を効かせるか」
やると決まっているが、値や形の選択が遊びの内容を変える 各スキルのしきい値、怪我の重さ・出血の配分、罠の餌の段
無いと完成と言えない(残作業の側) 欠乏症

3列目は本書の対象外です。 印を付けて issue にするものですが、要否の判断を通さずに流さない決まりが あるため(agent-ops/parallel-work.md の「承認の要る未実装を、勝手に 流さない」節)、判断が要るものは 判断待ち を付けた issue で1件ずつ訊いています。