航海(筏・海区・本土)
概要
島から出航して本土へ渡るまで——筏を作り、積み、漕ぎ出し、海区ごとに見張って航路を選び、渡る
——を、ゲームに登場するモノとしてどう表すかをまとめます。周回の終わり方そのもの(なぜ出航だけをエンドにするか、
何を持ち帰れるか)は GameEndings.md が決めており、本書はそれを
エンジンのどの機能へ写したかを持ちます。
決めないことは、航海の外側です。海図(3.7 節)も、そこから出る推定日数の提示(同 9.3 節・
CardView.md 16 節)も入りました——中盤の沿岸航海
(同 11 節)は、引き返し(3.5 節)と、渡った先で得られるもの(小島の錫、3.4 節)が揃って成立しています。
飢え・渇きは航海中も島と同じに働きます(VitalsSystem.md)。季節と天気は
ClimateSystem.md が持ち、風向きだけを本書が足しています(3.1 節)。
足した文法はごくわずかです。 筏も海区も本土も普通の location
(ExplorationSystem.md 1 節)で、海区は地上の土地と同じ
explorable をそのまま名乗ります——見張りは explore、航路は fixtures に立つ設置物、渡るのは
move です。足したのは、move の行き先を型で指す to_object
(GameElementDefinition.md 9.6 節。世界にただ1つ在る場所を、
生成時のインスタンスIDを知らずに指す)と、set が個体そのものを書けること(同 9.2 節。筏が
出航した海岸を覚える、3.5 節)と、spawn の配置先を同じ型の名前で指せること(into_object、
同 9.4 節。見張りが次の海区へ折り返しの航路を立てる、3.5 節)と、その型をプロパティに持てること
(同 6.9 節。海区が自分の隣を 1 度だけ名乗る、3.8 節)です。
在処は、定義が src/assets/world-codex/voyage.yaml(筏・海区・航路・本土)・timber.yaml(木と丸太)・
artifacts.yaml(持ち帰る物)・core.yaml(風向き)・locations.yaml(海岸と、海図を書き入れる山頂)、
周回をまたぐ棚が src/save/Shelf.ts と
src/game/ShelfScene.ts、到達したことの読み取りが
src/domain/wrappers/PlayerCharacter.ts、検証が tests/world-codex/voyageYaml.test.ts と
tests/world-codex/timberYaml.test.ts・tests/save/shelf.test.ts です。すぐ試せる開始状態として
src/assets/scenarios/voyage_ready.yaml があります。
本ドキュメントは検討結果であり、確定仕様書ではありません。海区は顔ぶれから配ったもので、 うねりの海で二手に分かれて流れ藻の海で合流する網になっています(3 節)。島側は複数の辺で繋がって いて、どの海岸から漕ぎ出すかで網のどこへ立つかが変わります(3.6 節)。海図は海区の側に入りました (3.7 節)。風は航路ごとに効きます(3.2 節)。実装されていないのは 3.9 節の釣りだけで、そこだけ は海区に湧く魚の群れを掬う今の形が残っています。未決事項は 未決事項・今後の検討課題にまとめています。
1. 丸太は斧だけが作り、担いで運べるのは1本まで
筏の材料は丸太とロープで、丸太は斧を入れることでしか手に入りません。
刃物(cutting_tool)で足りる草の茎・ヤシの葉と違い、木部を持つ幹は柄の遠心力が乗る道具でなければ
断てません。斧を指すのは chopping_tool タグで、今これを持つのは石斧だけです。石を打ち割って刃を作り、
柄を付けて斧にする——それまでの道具作りが、そのまま出航の前提になります。
幹を出すものが複数あります——立っている広葉樹(伐り倒す)と、海岸へ打ち上げられた流木の幹
(玉切りにする、timber.yaml)です。森も密林も無い島でも筏が組めるように入口を2つ持たせて
ありますが(DesignPrinciples.md の「要るものは、名指しの鍵ではなく、
部分的に代替できる資源で作る」節)、どちらも斧を要求するので、上の前提は変わりません。
丸太は1本20kgで、担ぐと荷重(load)の段が1つ上がります。2本目は担げません。 筏の材料の丸太を
どこで伐ってどこへ運ぶかが島側の仕事として残ります(GameEndings.md 3.1 節)。
そりを引けば、力のある担ぎ手なら2本まで一度に運べます(Containers.md 2節)
——全員ではありません。 そりで積める重さは担ぎ手で違い
(Characters.md 荷重の効き方節)、丸太2本はその違いの中にあるので、往復が
半分で済む担ぎ手と、そりを引いても1本のままの担ぎ手に分かれます。
そりそのものが丸太を要らない代わりに長い棒と縄を食い、木材加工の腕も要るので、斧を手にした直後の 1往復目には間に合いません。 何往復かしてからそりへ乗り換えるか、担いで運び切るかが、ここでの判断に なります。
2. 筏は設置物であり、場所でもある
筏が設置物と場所を兼ねることは 2.3 節が決めます。
この形にすると、出航も海区の横断も「筏を1つ動かす」だけになります。積荷もプレイヤーも子として 付いてくるので、「何を一緒に運ぶか」を数える処理はどこにも要りません。
- 積み込みは編み籠と同じ操作です。カードへ重ねれば積荷(
items)に入ります。中身は外からは 見えません(visible_slotsに載せていない)——何を積んだかは乗り込んでから確かめます。 - 帆を筏の札へ重ねても、積荷に入るだけで取り付けられません。 アイテムとしての帆はまず荷物で、
帆として張るのはプレイヤーが
structureの枠へ入れたときだけです(GameElementDefinition.md7.8 節の宣言順でitemsが先)。 帆の種類が増えれば「どれを張るか」という判断が生まれるので、重ねただけで張られては困ります。 - 積める量は枠の数(12)とかさ(500L)が決めますが、実際の限界は重さです(3.2 節)。
- 乗り込むのは出航アクションの一部です。降りられるのは陸の上だけ——本土・小島(3.4 節)・引き返した 先の海岸(3.5 節)で、海の上では降りられません。乗る手と出る手を分けても選べることは増えません。
2.1 帆は構造スロットへ組み込む
帆は積荷ではなく筏の一部です。 筏は structure スロット(Dwellings.md 1 節の
構造スロットと同じ形)を1枠だけ持ち、sail タグを持つ物を1つ受け入れます。組み込んだ帆は
modify で親(筏)の sail_speed を +2 します。
今ある帆は生皮の帆(rawhide_sail)1種で、生皮・糸・太い枝2・ロープ2から、骨針(sewing_tool)を
道具として縫います。+2 は、積みすぎでない限り段をちょうど1つ上げる最小の値です——素の筏は海流だけで
slow、帆があれば moderate に届きます。+1 では段が動かない積載があり、+3 にしても上がる段は
変わらないので、盤面に差が出るのは2だけです(tests/world-codex/voyageYaml.test.ts)。
構造スロットは、筏に乗り込んでから現在地の札を押すと開きます(積荷のスロットは外から札を押して
開くので、2つは操作の入口から分かれています)。乗り降りは筏の board/disembark です。
【いつか: なめし革の帆】 生皮の帆1種でどの積載でも段が1つ上がるので、その上の段は後から足します
(Someday.md)。
2.2 筏は壊れず、帆以外の部品も持たない【確定】
筏に耐久はありません。櫂のような帆以外の部品も入れません。 構造スロットが受け入れるのは帆だけの ままです(2.1 節)。
だから浸水も沈没もありません。 海の上で起きるのは風向きの変化(3.1 節)と荒天の押し流し(3.8 節)
だけで、筏が水を被る・傷むといった事故は、専用の仕組みごと持ちません。航海の緊張は筏の状態ではなく、
残量と両側の海区数の差し引きが持ちます(GameEndings.md 12.5 節)。
出どころ: #656(#1111 筏は壊れない)
2.3 筏は、設置物でありながら場所として振る舞う【確定】
筏は置いた物でありながら、場所でもあります。 積荷も乗り手も、筏に載るのではなく筏の中に 入ります。
出どころ: ユーザーの指示(積荷も乗り手も筏の中に入る。#1884)
2.4 兼ねさせ方は、タグと trait の組み合わせ
2.3 節から導いたもので、覆すのに人間の判断は要りません。
筏(raft)は fixture タグを持ちながら location trait を実装します。 土地と同じ
スロット(ExplorationSystem.md 1.1 節)を持つので、専用の入れ物の
仕組みは要りません。
3. 海は海区の連なりで、進むのは見張って渡ったときだけ
外洋は場所 1 つではなく、海区の連なりです。 海区は地上の土地とまったく同じ location +
explorable で、そこに浮かんだ筏から見張り(explore)を重ねると次の海区へ出る航路が現れ、その航路を
渡ると次の海区へ移ります。漂っているだけでは 1 海区も進みません
(GameEndings.md 12.8 節)。
海区は顔ぶれ(ContentSkeleton.md 7 節)から配ったもので、
うねりの海で二手に分かれ、流れ藻の海で合流します。海区ごとに違うのは次だけ
——本土までの最短の残り海区数(網のどこに居るか、3.7 節)・辺で繋がった隣(3.8 節)・何回の見張りで
航路が現れるか・見張りの卓の重み(=顔ぶれ、3.3 節)。
残り——渡るのにかかる時間・海流・浮いていることの配布・見張りそのもの・海図の幅・荒天にさらされた時間と
押し流し方——は sea_zone trait が 1 箇所で持ちます。
| 顔ぶれ | 海区 | 見張り | 拾えるもの | 湧くもの | 空振り |
|---|---|---|---|---|---|
| 沿岸 | 島影の海・本土の島影 | 2 | 流木・海藻 | 魚の群れ | 20% |
| 潮目 | 潮目・沖の潮目 | 3 | — | 魚の群れ | 20% |
| 海藻の帯 | 海藻の帯・流れ藻の海 | 3 | 海藻 | — | 45% |
| 岩礁 | 岩礁の海・黒い岩礁 | 3 | 漂流物 | 魚の群れ | 45% |
| 海鳥の岩 | 海鳥の岩・白い岩 | 3 | 卵・羽 | 海鳥の群れ | 45% |
| 沈船の海 | 沈船の海 | 4 | 漂流物・アーティファクト | — | 80% |
| 小島のある海区 | 小島の海 | 3 | — | — | 100% |
| 空の海 | 空の海・うねりの海 | 5 | — | — | 100% |
小島(3.4 節)が立つのは、小島の海と海鳥の岩の顔ぶれです
(ContentSkeleton.md 7 節)。海鳥の岩は、鳥が巣を作るその岩が上陸できる小島
そのものなので、海面の見張りが返す卵・羽とは別に、降りて歩けば島の産物が採れます。
「空振り」は、1 回の見張りが何も返さない割合です(残りが実り)。名前はどれも見れば分かるものから採っています
(GameEndings.md 12.2 節)。
島と繋がっているのは島側の端だけではありません。 出航はどの海岸からでもでき、立つ海区は海岸ごとに 違います(3.6 節)——島影の海・潮目・海鳥の岩が、島と辺で繋がっています。
針路を選べるのは 1 箇所です(GameEndings.md 12.3 節)。
島影の海 — 海藻の帯 — 潮目 — 岩礁の海 — 海鳥の岩 — 小島の海 — 空の海 — 沈船の海 — うねりの海
近道 : うねりの海 — 流れ藻の海
遠回り: うねりの海 — 沖の潮目 — 黒い岩礁 — 流れ藻の海
流れ藻の海 — 白い岩 — 本土の島影 — 本土
- 近道はうねりの海から流れ藻の海へ直に渡ります。遠回りは沖の潮目・黒い岩礁を経由するので、 本土まで 2 区間長くなります。素の横断時間はどの海区も同じなので、区間数と顔ぶれのほかに差を作るのは 風だけです——近道は本土へ近づく辺、遠回りの入口は沖へ出る辺なので、向かい風の日は遠回りのほうが 短く渡れます(3.2 節)。
- 最短の航路が最も実りが薄い(同 12.1 節)のは、近道が自分の海区を持たないからです——飛ばすのは 沖の潮目(補給が当てになる顔ぶれ)と黒い岩礁(漂流物)で、近道を選ぶことは 2 区間ぶんの時間と 引き換えにその実りを捨てることです。魚の群れが立つかどうかは針路が決めます(3.9 節)。
- 分かれ道の海区だけが、見張り切ったときに航路を 2 本立てます。 どちらへ渡るかを選べることが分岐の 眼目なので、片方を先に見せることはしません(見張りの進み具合は 1 つしか無く、段階を分けるには別の つまみが要ります)。
- 荒天は、分かれ道でもどちらかの隣へ押し流します(3.8 節)。
風は航路ごとに効きます(3.2 節)。同じ風でも、その辺が本土へ近づくか遠ざかるかで受け方が分かれるので、
分かれ道には「遠回りだが今なら短く渡れる航路」と「最短だが今は長くかかる航路」が同時に並びます
(GameEndings.md 12.3 節)。
目印の少ない海区ほど見張りを重ねることになるという差は、地上の「探索率 100% までの回数」
(ExplorationSystem.md 2 節)と同じつまみで表しています。
航路は見張りの成果です。 見張りの進捗が上限へ達した瞬間、その海区の on_max が航路(sea_route
タグを持つ設置物)を fixtures へ湧かせます。航路は海区どうしを繋ぐ辺なので、湧くのはその両端に
1 本ずつ——今いる海区に「次の海区への航路」を、次の海区に「この海区への航路」を、です(3.5 節)。
島と海を繋ぐ辺だけは渡る手が出航(set_sail)なので、その両端を立てるのも出航です(3.5 節)。
航路が現れても、その海区の見張りは終わりません(GameEndings.md
12.1 節・12.3 節)。渡らずに待つことは、明るいうちはその海区を探索し続けることなので(3.10 節)、
拾い物も魚の群れも、航路が見えた後の見張りが返します。同じ航路が二度湧かないのは、湧かせる側が自分で止まるからです
——on_max は「その航路がまだ立っていないなら」という conditions
(GameElementDefinition.md 6.3 節)を持ち、満たさない回は
range を書いただけのときと同じ既定のクランプへ倒れます。見るのは印ではなく湧かせた物そのもので、
sea_route タグでは見分けられない(渡り着いたばかりの海区には来た航路が既に立っている)ため、
型を名指ししています。
渡る手は航路が持ちます。 地上の道の travel と同じメニューの操作で、違うのは動かす物だけです
——地上の道が歩く本人を動かすのに対し、航路は同じ海区に浮かんでいる筏を動かします。乗り手も積荷も
筏の中に居るので、一緒に渡ります(2 節)。筏を指すのに among
(GameElementDefinition.md 10.3 節)を使うのは、航路から見て筏が
親でも子でもなく、同じ海区に並ぶ兄弟だからです。
行き先は型で指します(to_object)。海区は singleton なので、地上の道のように生成時のインスタンスIDを
プロパティで持つ必要がありません。航路が行き先ごとに別の型なのは、海区が立てる航路を
route_to_<行き先> と名指して湧かせるからで、渡る手そのものは sea_route trait が 1 本だけ持ちます
——型ごとに書くのは行き先(destination_zone。型を値に持つプロパティ、
GameElementDefinition.md 6.9 節)と、その行き先が名乗る残り海区数
(3.2 節)の 2 行だけです。
3.1 風向きは季節が配る
風向き(world の wind)は tailwind/crosswind/headwind で、wind_remaining の 32 tick ごとに引き直します。
候補の重みは季節の段が配るので、乾季は追い風が多く、雨季は向かい風が増えます——これが
「出航に適した季節の窓」(GameEndings.md 3.1 節)になります。
| 季節 | 追い風 | 横風 | 向かい風 |
|---|---|---|---|
| 穏やか | 30 | 45 | 25 |
| 雨季 | 20 | 40 | 40 |
| 乾季 | 50 | 35 | 15 |
仕組みは天気の遷移(ClimateSystem.md 4 節)と同じ形——残り時間が尽きるたび、
*_weight を重みとする pick が次を選ぶ——ですが、天気と違って持続は一律です。向きしか無いので、
長さまで振ると何が変わったのか読めなくなります。
この重みが横断時間へ返すものは、1 周回に 1 度の航海では小さな差です。 砂浜から近道で渡ると、
乾季なら 5.02 日、
雨季なら 5.34 日——
最も短い岸壁からでも
3.38 日と
3.60 日で、
季節のあいだで最も開いても、砂浜で
0.3 日、岸壁で
0.2 日です
(stats/voyage.yaml の course_season)。
荒天の押し流し(3.8 節)を入れても、この差は小さいままです。 風下は押し流す先も決めるので、向かい風の
多い雨季ほど島の側へ戻される回が増えます。海区と筏を実体化して渡らせると
(VoyageStormStats.md)、乾季の航海はほとんど押し流されません
——伸びるのは
0.01 日で、
嵐そのものが乾季にはほとんど立たないからです
(ClimateSystemStats.md)。一方、雨季は
1.65 区間、
0.40 日伸びます
——伸びのほとんどは押し戻された区間ではなく、渡っている最中に流されて空振りになった渡りです
(3.8 節)。砂浜から近道で渡ると
5.03 日と
5.74 日、最も短い岸壁
からでも
3.39 日と
4.00 日で、
季節のあいだで最も開いても、砂浜で
0.8 日、岸壁で
0.6 日です。
一方、窓を逃したときに待つのは季節 2 つぶんです。 季節はどれも
24〜36
日で回り、乾季の次の乾季までには穏やかと雨季が挟まるので、乾季を逃せばその 2 季ぶんを待つことになります
——引き返して逃した場合も同じで、引き返しの代償(GameEndings.md 12.5 節)
にはこれが乗ります。得るものに対して待ちが桁違いに大きいので、今の重みでは「窓を待つ」は
選択になりません——期限として働かせるなら、動かすのは風向きの重みでも荒天の押し流しでもなく、
季節が航海へ返すものの側です。
雨季が効くのは、平均ではなく読めなさのほうです。 砂浜から雨季に出た航海は、20 回に 1 回は
7.61 日を超え、最も長い
回は
9.66 日かかりました
——平均は
0.40 日しか動かないのに
裾はこれだけ伸びるので、雨季に出ることの代償は日数の期待値ではなく、
積む量をどれだけ厚くするかに出ます(GameEndings.md 3.1 節の「読めない
伸びをどう見込むか」、3.9.3 節)。
風を読むのは筏ではなく航路です(3.2 節)。航路が ancestor で world まで遡り(海区には風の概念が
無いので自然に world まで届きます)、自分の辺がどちらへ伸びているかと突き合わせて、渡るのにかかる時間へ
効かせます。
3.2 横断にかかる時間は、筏の側の事情が縮め、風が航路ごとに動かす
海区は素の横断時間(crossing_minutes)を持ち、筏の sail_speed の段がそこから引きます。
海流・積載・帆はすべて sail_speed へ集まるので、筏の側の事情を書く場所は 1 つで済みます。
風だけは筏ではなく航路が持ちます(GameEndings.md 12.3 節)。
風向きは速さの係数ではなく、どの航路が今いくらで渡れるかを決めるものなので、航路が自分の
crossing_minutes(土台は今いる海区の値)へ受け方を乗せ、渡る手はそこを読みます。筏へ集めると、
同じ海区から出る 2 本の航路が必ず同じ時間になり、分かれ道が「今なら短く渡れる航路」を出せません
(3 節)。
素の横断時間はどの海区も 360 分で、海区ごとの差はありません(sea_zone trait が 1 度だけ持ちます)。
海図が持てるのは残りの海区数だけなので(GameEndings.md 12.6 節)、推定日数は
これから渡る 1 区間の時間で残り全部を代表して出すしかありません(同 9.3 節)。海区ごとに違えば、その
1 区間は全体を代表せず、鎖の先頭に立つ最も遠い出航地点が最も短く見えるといったことが起きます。
距離の差は残りの海区数だけで表します(3.6 節)。
sail_speed の段 |
crossing_minutes への寄与 |
|---|---|
becalmed(0〜1) |
0 |
slow(2〜3) |
−30 |
moderate(4〜) |
−60 |
sail_speed の素の値は0で、寄与は海流・積載・帆だけです。陸に居る間はどれも効かないので、
浜に繋いだ筏は横断時間を縮めません。段で刻むのは、modify の量がリテラルしか書けないためです
(GameElementDefinition.md 8.3 節)——可変の効き方を段に写しています。
段が 3 つなのは、寄与の合計が 0〜5 にしかならないからです(海流 +3、帆 +2、積載 0〜−6)——
届かない段を並べても、読む人に「どうすればそこへ届くのか」を探させるだけになります。
航路が風をどう受けるか
辺の伸びている方角は、行き先と今いる海区の「本土まであと何海区か」(3.7 節)の差が言います。 航路は 行き先ごとに別の型なので(3 節)、行き先の残り海区数を型の側へ 1 行書けば、立った海区との差でその辺が どちらへ伸びているかが出ます。方角そのものを宣言する必要はありません。
| 辺の伸びる先 | 追い風 | 横風 | 向かい風 |
|---|---|---|---|
| 本土の側(行き先のほうが本土に近い) | −60 | −30 | +30 |
| 沖の側(行き先のほうが本土から遠い) | +30 | −30 | −60 |
航路そのものは向きを持ちません(3.5 節)。同じ型の航路が辺の両端に立っても、立っている海区が違えば
差の符号が逆になるので、同じ辺を逆に渡れば追い風は向かい風になります——引き返しの代償
(GameEndings.md 12.5 節)が、専用の宣言なしにそのまま出ます。横風は
どちらへ伸びる辺にも横から当たるので、方角を見ません。
分かれ道の 2 本が差を持つのはここです(3 節)。近道(うねりの海 → 流れ藻の海)は本土へ近づく辺、 遠回りの入口(うねりの海 → 沖の潮目)は本土から遠ざかる辺なので、向かい風の日は遠回りのほうが 短く渡れます。「遠回りだが今なら短く渡れる航路」と「最短だが今は長くかかる航路」が同時に盤面へ出る (同 12.3 節)のは、この 1 点だけです。
ただし短く渡れるのはその 1 区間だけで、通して渡れば遠回りのほうが必ず長くかかります(3.9.1 節)。 風は針路を選ばせるつまみではありません——動かすのは「今この辺を渡るか、風が向き直るまで見張りを 続けるか」であって、どちらの針路を採るかではない。針路を分けているのは実りのほう(3.3 節)です。
島へ戻る航路(route_to_shore)の行き先は海区ではありません。 島は鎖の島側の端よりさらに向こうなので、
海区が名乗れる最も遠い値を書いて、どの海区から見ても沖の側にしてあります——追い風で出た日ほど、戻りが
高くつきます(3.5 節)。
横断時間は漕ぎ出すときに読み切ります(duration は効果より先に時計を進めます)。渡っている最中に
風が変わっても伸び縮みしないので、針路の判断が博打になりません
(GameEndings.md 12.3 節)。range の下限 120 分は、寄与がどれだけ重なっても横断時間が消えないための底です。
海流は海区が modify: {child: ...} で、浮かんでいるものすべてへ +3 を配ります。 筏の側に「今どこの
海に居るか」を書かずに済み、海区ごとに別の海流を持たせることもできます(今は揃えてあります)。
帆の寄与だけは、条件の書き方が他と違います。筏自身なら親の型で絞れますが(parent が
sea タグを持つか)、組み込んだ部品から見ると海は親の親で、条件では指せません。そこで海区が
afloat を子へ配り、帆はそれを読みます。条件を落とすと、浜に繋いだままの筏が横断時間を縮め始めます。
積荷は weight の段が速さを削ります。 筏の weight は中身の重さを含む実効値なので
(ContainerSystem.md 1 節)、積むほど段が上がり、横断が長くなります。
weight の段 |
sail_speed への寄与 |
|---|---|
light |
0 |
laden |
−1 |
heavy |
−3 |
overladen |
−6 |
段の境目は乗員を見込んでいます。 乗員(Characters.md)は航海中ずっと
乗っているので、weight の段の境目はその体重を含めた値で書いてあります(voyage.yaml の筏の weight。
空の筏と乗員から測った積荷の量は tests/world-codex/voyageYaml.test.ts が見ます)。
手に持てば積まずに済む、とはなりません——手持ちの重さも乗員を通って筏へ届きます(ContainerSystem.md
1.1 節)。
これで「積荷を捨てれば速くなり、速いほど水と食料が保つ」(GameEndings.md 4 節)が、
専用の宣言なしに成立します。海の上で捨てられる物は、筏から出せばそれだけで軽くなります。
3.3 顔ぶれの差は、見張りの卓の重みだけ
顔ぶれの数だけ仕組みがあるわけではありません。 見張りの抽選卓(pick)は sea_zone trait が
1 つだけ持ち、候補ごとの重みを海区の props が与えます(発見量のつまみ、
ExplorationSystem.md 2 節)。素の重みは 0 なので、海区が名乗らなかった
候補は、その海には無いことになります。顔ぶれを表す型もタグもありません。
測った値は stats/voyage.yaml が出します——zone_yields が見張り 1 回の
卓の割り方(何も返らない/拾えるものが返る/湧くものが立つ)を、zone_finds が何が何個返るかを、
海区ごとに持ちます(読み方は VoyageStats.md)。
海だけが「何も見つからない」候補を持ちます。 地上の探索は必ず 1 個以上を返しますが
(ExplorationSystem.md 2 節)、
それを海でも保つと海が豊かになりすぎます。この候補が、地上のつまみでは表せない唯一のものです
——空の海は見張りの
100%が空振りで、地上にはそういう土地が
ありません。実りの濃淡は、この候補の重みの高さで表します。
拾えるものは海面に置かず、見つけた時点で手に入ります
(GameEndings.md 12.7 節)。手が塞がっていれば筏の積荷へ
こぼれ、そこも塞がっていれば手に入りません(spawn の into: agent)。湧くもの(魚の群れ・海鳥の群れ)
は設置物なので海区に立ち、6 時間ほどで去ります——獣の立ち去り
(HuntingSystem.md 5.6 節)と同じ形ですが、獣の立ち去りを止める
ゲートは、どれも掛かりません。乗り手は筏の中に居るので「目の前では消えない」は成立せず、群れは
怪我を負わない(突いて獲るのは群れそのものではなく、そこから引く1匹)ので「深手の間は止まる」も
掛かりません。罠にも入れ物にも入りません。
獲れるのは獣と同じ生肉です(同 1.5 節の「得られる素材は獲物の種類によらず同じ」)。魚と貝のために 別の食材を足せば、焼く鎖もそのぶん増えます。
湧くもののつまみは、見張る人の狩猟の腕を base の土台にします
(Skills.md 5 節)。地上の探索で獣のつまみへ積んでいるのと同じ「出くわす機会」で、
拾えるものには積みません。上の表の「空振り」は novice のもので、腕が上がるとその海区は
魚と鳥の側へ寄ります。
実りの濃淡を表すのは、この重みだけです。 素の横断時間はどの海区も同じ(3.2 節)なので、
「実りの濃い海区ほど渡るのに時間がかかる」という形では表せません。「最短の航路が最も実りが薄い」
(GameEndings.md 12.1 節)は、うねりの海の分かれ道が判断にしています
(3 節)——近道は自分の海区を持たず、遠回りが通る沖の潮目と黒い岩礁を飛ばすだけなので、短さと実りが
そのまま引き換えになります。海区が持つ差は経路の海区数と顔ぶれだけで、渡る時間を動かすのは航路の
側(風の受け方、3.2 節)です。
3.4 小島は、上陸して探索できる場所
小島の海と海鳥の岩で見張りを終えると、航路と一緒に小島(offshore_islet)が現れます。設置物でありながら
場所——浅い洞窟(locations.yaml)と同じ形で、降りれば地上とまったく同じ探索ができます。
- 上陸は、同じ海区に浮かんでいる筏を小島へ寄せます。航路の「渡る」と同じ形(
amongで兄弟の 筏を選んでmove)で、積荷も乗り手も一緒に着きます。 - 島を調べるには筏から降りている必要があります。乗ったままでは岸から眺めているだけです。
- 漕ぎ出すは、乗り込むところまでを 1 手に含めます(筏の
set_sailと同じ)——降りたまま筏だけを 押し出せると、小島に取り残されます。
小島が返すのは、岩・流木・海藻・卵と羽、そして錫鉱石(tin_ore)です。錫はここでしか採れません
(ContentSkeleton.md 7.1 節。青銅のもう一方の材料である銅は母島の山で採れます)
——渡らないと道具の最終段に届かないことが、最終航海より前に一度海へ出ておく理由になります
(GameEndings.md 11 節)。錫を使う先(製錬と青銅の道具)は刃物・打撃の系統
(ContentSkeleton.md 4 節)が持つので、ここにあるのは物そのものだけです。
卓はどの候補も 2 個ずつ返す形で、錫は重み 20 / 120。 地上の土地と同じ配り方
(1 回の探索で平均 2 個、locations.yaml)のまま候補を 1 つ増やしただけなので、実りの濃さは動いていません。
1 個 1.5 kg(石より重い)なので、持ち帰る量がそのまま帰りの速さを削ります(3.2 節)。
3.5 引き返しは、来た航路を戻ること
島へ引き返すのに専用の仕組みはありません(GameEndings.md 12.5 節、確定)。
航路は向きを持たず、行き先の型だけを持つので、島の側へ戻る航路は隣の海区が進む先に使うのと同じ型に
なります——潮目に立つ「海藻の帯への航路」は、島影の海が持つのと同じ route_to_kelp_belt です。鎖の島側の
端(route_to_coastal_waters・route_to_shore)だけが、進む側に相手を持たないぶん新しい型です。
代償は時間だけです。積荷は減りません——捨てるのは進むための選択(同 4 節)であって、戻るための罰では
ないからです。追い風で出た航路を戻れば向かい風になる(3.2 節)ので、行きが順調だったぶんだけ戻りが
高くつくことは、航路の crossing_minutes へそのまま出ます。戻る航路が新しい型でないのと同じで、
戻りが高くつくことにも専用の宣言はありません——同じ辺を逆に渡ると、行き先が本土に近づく側から
遠ざかる側へ変わるだけです。
戻る航路は、渡り着く前から立っています。 航路は海区どうしを繋ぐ辺なので、見つけた側の見張りが
両端へ 1 本ずつ立てます——今いる海区に「次の海区への航路」を、次の海区に「この海区への航路」を
(spawn の配置先を型で指す into_object、
GameElementDefinition.md 9.4 節。次の海区は、海区が名乗る隣を
そのまま引きます、3.8 節)。地上の道が辺 1 本につき両端へ 1 個ずつ置く(IslandSpawner)のと同じことを、
海では見張りの成果として実行時にやります。
だから渡り着いた海区では、1 回も見張らずに来た航路を戻れます(GameEndings.md
12.5 節の「航海のどこからでも選べる」)。折り返しを立てるのは見つけた側だけなので、渡り着いた側で
見張っても同じ航路は二重になりません。一度見定めた海区では両方の航路が立ったままなので、戻り道で
見張り直すこともありません(同 12.5 節の「戻りは既知で、進みは推定」)。
鎖の先の端だけが、見張りで両端を立てません(本土に着けば周回が終わるので折り返しは要りません)。島側は
海区ではないので、その辺を渡る手も見張って現れる航路ではなく出航(set_sail)そのものです
——両端を立てるのは辺を渡れるようにした側なので、島へ帰る航路(route_to_shore)を立てるのは出航に
なります。だから出航した瞬間から島へ引き返せます(GameEndings.md
12.5 節の「どこからでも」には、まだ一度も見張っていない出航直後も含まれます)。立てる先は押し出した先の
海区(into: parent)なので、どの海岸から出ても書くのは 1 行です。
この 1 本だけは渡ると消えます。 行き先が筏の覚えている海岸である以上、意味を持つのは筏が海に出て いる間だけで、岸へ戻れば指す先がありません。出航は何度でもできるので、消えなければ周回のたびに積み 上がります——次に出航すればまた立つので、出た先の海区に並ぶのは常に 1 本です。
島へ渡る route_to_shore だけは、行き先が海区ではなく島の海岸そのものです。海岸は島に
何個も在るので型では指せず、ここだけ行き先を個体で指します——筏が出航のときに自分の居た海岸を覚え
(home_coast_id。set が個体を書ける、
GameElementDefinition.md 9.2 節)、航路はその個体へ帰します。
出航は {tag: coast} なので岩の海岸からもでき、着くのは出たその海岸です。砂浜が 1 つも無い島
(stats/island_escape_reach.yaml の
island_missing_location)でも戻れます。
3.6 出航地点が、鎖のどこへ繋がるかを決める
海に面した土地ならどこからでも出航でき、どこから漕ぎ出したかで最初に立つ海区が変わります
(GameEndings.md 5 節)。
| 海岸 | 立つ海区 | 本土まで最短で | 素の横断時間の合計 | 最寄りの小島まで | 片道の素の横断時間 |
|---|---|---|---|---|---|
| 砂浜 | 島影の海 | 12 区間 | 4,320 分 | 4 区間 | 1,440 分 |
| 岩だらけの海岸 | 潮目 | 10 区間 | 3,600 分 | 2 区間 | 720 分 |
| 岸壁 | 海鳥の岩 | 8 区間 | 2,880 分 | 0 区間 | 0 分 |
「本土まで」は近道を選んだときの数です。 うねりの海の分かれ道(3 節)で遠回りを選べば、どの海岸から 出ても 2 区間ぶん増えます。
最寄りの小島はどの海岸からも海鳥の岩(島側から 5 番目)です。岸壁はその海区に面しているので、出航して
見張り 3 回で小島が現れます——岸壁から出る人にとって、中盤の沿岸航海は「出て、上陸して、戻る」だけです。
砂浜から出るなら 4 区間の往復(素の横断時間で 2,880 分、帆と追い風が
あればもっと短い)になり、
これが GameEndings.md 11 節の言う「戻ってこられる範囲の航海」の実体です。距離を選んだのは出航地点を選んだときで、
小島の側に遠近の仕掛けはありません。
地点差を持たせる仕組みはありません。 海岸が持つのは「自分はどの海区に面しているか」の 1 点だけで、 距離は本土までの残り海区数、危険度は通ることになる海区の顔ぶれとして出ます。砂浜からの航路は最も長い 代わりに、序盤に島影の海(空振り 20%)・海藻の帯・潮目(同 20%。補給が当てになる唯一の海区)が続きます。 岸壁からは 4 区間を跨いで最も短く着きますが、その先は小島の海・空の海・沈船の海・うねりの海と、返すものの 無い海区が並びます。短い航路ほど補給の当てが無い——これが「危険度」の中身です。魚の群れが立つのは 沿岸・潮目・岩礁の 3 顔ぶれだけなので、この差はそのまま食料の差になります(3.9 節)。小島だけは例外で、 上陸すれば地上と同じ卓が返ります(3.4 節)。海面の見張りより手数はかかりますが、小島の立つ海区 (海鳥の岩・小島の海・白い岩)では、止まって補給する選択が残ります。
面している海区は海岸の側が名乗ります(coast trait)。筏の set_sail は「この海岸はどの海区に
面しているか」の重みを引くだけで、行き先の海区も残りの区間数も知りません。素の重みは 0——名乗らなかった
海区には面していない、という書き方は、海区の見張りの卓(3.3 節)とまったく同じ形です。今はどの海岸も
1 つだけ立てるので抽選になりませんが、2 つ立てれば「風向き次第でどちらへ出るか」も同じ卓で書けます。
この差が判断になるのは、筏をその海岸まで運ぶ手が要るからです。 丸太は 1 本ずつしか運べない(1 節)ので、
遠い海岸を選ぶことは 6 往復ぶんの島側の仕事を選ぶことでもあります。岸壁は歩きにくく(move_cost 1.7)、
どの島にもあるとは限りません(stats/terrain.yaml の
location_type_counts の cliff_coast)。資材の運搬コストと航海日数を秤に
かける判断が、ここに残ります。
差は出航前に読めます(GameEndings.md 5 節後段)。距離は海図が持ち
(3.7 節)、岸へ繋いだ筏の札が、面している海区の幅から今の積載での推定日数を出します
(CardView.md 16 節)。筏をその海岸まで運べば、漕ぎ出す前に日数が読めます。
3.7 海図は、海区が持つ「本土まであと何海区か」の幅
海図という物は作りません。「本土まであと何海区か」を海区の側が持ち、記入が進むほどその幅が
狭まります(GameEndings.md 12.6 節)。持ち歩く物にすると、置き忘れれば
知っていることを忘れる——知識は海図の在処ではなく、どこまで見たかで決まります。
海区が持つのは次のとおりです。
zones_to_mainland— その海区から本土まで、その海区を含めて最短で何区間あるか。海の側の 事実で、島側の端(島影の海)が 12、本土の手前(本土の島影)が 1(3.6 節の表の「本土まで最短で」 そのもの)。分岐があるので 1 つの数で言えるのは最短だけです——遠回りを選べば実際は 2 区間ぶん 延びますが、それは海図の粗さではなく針路の選択なので、下の幅には入りません。この数は隣どうしで 必ず 1 違うわけでもありません——遠回りの側の隣(沖の潮目、5)は、分かれ道(うねりの海、4)より 遠くなります。zones_to_mainland_min/zones_to_mainland_max— 海図が言う下限と上限。土台は上の真値で、 そこへ記入の粗さが幅として乗ります。下限は 0 で止まります。
幅を配るのは記入の印だけです。
| 海図の記入 | 幅 | 立てるもの |
|---|---|---|
| 方角しか分からない | ±5 海区 | 初期値(漂流物の向き・鳥の方角、同 9.1 節) |
| 山頂から見定めた | ±2 海区 | 山頂の探索(locations.yaml) |
| 渡った | 幅無し | その海区自身 |
渡った海区を記入するのは海区自身です。 筏が浮かんでいるかは自分の中を見れば分かるので、渡らせた 側(航路・出航)が「渡した後にあれも書く」を覚えておく必要がありません。一度立てば下がりません ——島へ引き返しても記入は残るので、沿岸航海で海に出るほど最終航海の見通しが良くなります(同 12.6 節)。
山頂が書き入れるのは、探索率 100% に達したその先です。 島を歩き尽くしてなお海を見渡すと、周りの
海区から 1 つ選んで見定めます(on_max と among)——どの区画が埋まるかは決まっておらず、既に
入っている区画を見直すこともあるので、14 区画すべてが埋まるには何度も登ることになります。これが
「山頂へ到達すること自体が中盤の目標になる」(同 9.1 節)の中身です。
同 9.1 節の残る段階——海岸線の踏破と、海流・季節風の把握——はまだありません。幅を狭める段を 足す形でそのまま入ります(今あるものと同じで、幅の表に行が増えるだけです)。
3.8 荒天は、風下の隣の海区へ押し流す
荒天(weather が storm)は渡る手を止めるのではなく、筏を風下の隣の海区へ移します
(GameEndings.md 12.4 節)。押し流す先を持つのは海区の側です——筏は
流されるだけで、どの隣へ行くのかを知りません。海岸が出航先を持つのと同じで、行き先を型で
名指しできるのは、そこに在り続ける海区のほうだからです。
嵐が屋外の行動を止める線(ContentSkeleton.md 8.1.4 節)は、渡ることには
掛かりません。 あの線は屋根の下へ入れることを前提に引かれていますが、海区に屋根はありません——
渡りまで止めれば、嵐の海区は待つ以外にすることの無い区間になります
(DesignPrinciples.md の「時間経過に任せる区間を作らない」節)。
海の上で嵐に閉じるのは、見て探す仕事のほうです(3.10 節)。未知の海区で嵐に遭えば進めはしません
——見張れなければ航路が立たないからで、そこで効くのは待つことではなく、押し流された先がまた別の海区で
あることです(下)。
隣を書く場所は 1 つです。 海区は辺で繋がった隣を zone_toward_mainland / zone_toward_island に
型として持ち(GameElementDefinition.md 6.9 節)、見張り切って
航路を立てる先(3.5 節)も、荒天が押し流す先も、そこを引きます。同じ隣を 2 か所へ書き写せば、片方だけ
取り違えてもその海区で荒天に遭うまで表に出ません。押し流す卓そのものは sea_zone trait が 1 つだけ
持ち、海区が書くのは隣だけです。
- 海区は「この海区で荒天にさらされた時間」(
storm_drift)を持ち、筏がそこに浮いている間だけ 1 tick ずつ進みます。折り返す点に達すると 1 回押し流して 0 へ戻ります(range+on_max、GameElementDefinition.md6.3 節)。海岸に繋いだままの筏が 流されないのは、この条件が筏の在処を見ているからです。 - 風下は風向き(3.1 節)が決めます——追い風なら本土の側の隣、向かい風なら島の側の隣。 横風では動きません——辺で繋がった隣はどれも本土の側か島の側のどちらかで、横風の風下に当たる 海区はどれとも繋がっていません(分岐が入っても、増えるのは「本土の側の隣が 2 つある」海区であって、 横の行き先ではありません)。さらされた時間も横風の間は溜まらないので、風が向き直るまで待つと、 そこから押し流されるまでが短くなります。
- 分かれ道と合流点では、その向きの隣が 2 つあります(うねりの海の本土側、流れ藻の海の島側)。同じ 重みの候補を 2 つ並べるので、近道と遠回りのどちらへ流されるかは荒天が決めます——押し流しは針路の 選択を奪う形ではなく、選び直させる形で効きます。
- 押し流す先の「本土の側/島の側」は、航路が風をどう受けるか(3.2 節)とは別の分け方です。 ここで
分けているのは鎖の先の隣か手前の隣かで、分かれ道では先の隣が 2 つ——近道も遠回りも「先」なので、
荒天はどちらへも流します。渡るときの風の受け方が見るのは行き先が本土に近づくかどうかなので、沖へ出る
遠回りの入口だけは、両者が食い違います。押し流す先を航路の側から出せないのは、航路がまだ 1 本も
立っていない海区でも荒天は流すからです——未知の海区へ流れ着くことが
GameEndings.md12.4 節の眼目なので、隣は海区の側の事実として持ちます。 - 押し流す先は隣の海区だけです。 島側の端(島影の海)の向かい風にも、本土側の端(本土の島影)の 追い風にも隣の海区が無いので、荒天が岸へ乗り上げさせることも、荒天で本土へ着いてしまうことも ありません(到達は航路を渡ること、4 節)。端の海区はその側の隣を持たないので、その風下を引いた回は 何も起きません——端のために卓を書き分けずに済みます。
- 荒天が去るか筏が出ていけば、貯まった時間はほどけていきます。 同じ海区へ戻ってきた筏が、前の荒天の 続きから流されることはありません。
- 流れ着いた先が未知なら、そこが海図に入ります(3.7 節)。記入するのは海区自身なので、渡って着いたか
流されて着いたかを問いません。流された先から島までの海区数は動くので、引き返しの秤も動きます
(
GameEndings.md12.5 節)。 - 渡っている最中にも押し流されます。 渡る手が動かすのは「その海区に浮かんでいる筏」なので、漕ぎ出した 海区から流されてしまえば、その渡りは空振りになります(時間だけが過ぎ、居場所は荒天が決めた先)。
| 顔ぶれ | さらされてから押し流されるまで |
|---|---|
| 岩礁(岩礁の海・黒い岩礁) | 8 tick(2 時間) |
| その他 | 16 tick(4 時間) |
岩礁だけが短いのは、ContentSkeleton.md 7 節が岩礁に与えている役割
(荒天で押し流されやすい)です。顔ぶれの差はこの長さだけで、押し流し方そのものはどの海区も
同じです。
実際に渡らせると、押し流しのほとんどは雨季に出ます
(VoyageStormStats.md)。砂浜から近道で渡った航海 1 回あたり、
雨季は 0.82 回島の側へ、
0.47 回本土の側へ流されるのに
対し、穏やかな季節は島の側へ 0.02 回、
乾季は 0.00 回です。
穏やかな季節が乾季を上回るのは、嵐の多さの順ではありません——嵐そのものは乾季のほうが長く
(季節 1 本あたり 0.86 時間に
対し、穏やかな季節は 0.04 時間。
ClimateSystemStats.md)、この表の季節は漕ぎ出したときのもの
なので、穏やかな季節に出て雨季へ入った航海がここに乗るからです
(VoyageStormStats.md)。効くのは戻された区間ではなく、
渡っている最中に流されて空振りになった渡りのほうで、雨季は 1 回の航海で
1.30 回——押し流しの
回数(0.82 + 0.47)と、小数第 2 位へ丸めた幅では見分けが付きません。押し流しはほぼ必ず渡っている
最中に来ます(航海に費やす時間の大半が横断だからです)。空振りは押し流しの部分集合なので、丸める
前の割合が 100% を超えることはありません。
風向きの見分けだけは条件ではなく重みにしてあります——pick の候補は conditions を持てないため、
風向きが drift_to_mainland_weight / drift_to_island_weight の片方だけを立て、on_max の pick が
それを重みとして引きます。素の値が 0 なので、立った側だけが選ばれます。
3.9 航海の食料は、積んだぶんと釣ったぶんで賄う
航海の食料は、島で 30 日ぶんを揃えるのではなく、数日ぶんを積んで、足りないぶんを海の上で釣ります。
どちらか一方では足りません。 積むだけでは荒天と引き返しで伸びたぶんに届かず、釣るだけでは魚の
群れの立たない区間で赤字になります(DesignPrinciples.md の
「補給の無い区間で要るものは、積ませるより現地で獲れるようにする」節と「後から足す手段は、既存の
手段を残す強さに抑える」節)。
3.9.1 航海は 1 週間に届かず、30 日ではない
3 節の網から出る所要時間は、最も長い出航地点と針路でも素の速さで
6.4 日で、1 週間には届きません。 各海区で航路が現れるまでの見張り(3 節の表)と、
素の横断 360 分(3.2 節)の合計を、島と同じ物差し(1 日ぶんの自由時間
891 分。ContentSkeleton.md
4 節)で割ったものです。数を出すのは stats/voyage.yaml の courses
(読み方は VoyageStats.md)。
| 出航地点 | 針路 | 区間 | 見張り | 見張りの時間 | 横断 | 合計 | 日数 |
|---|---|---|---|---|---|---|---|
| 砂浜(島影の海から) | 近道 | 12 | 39 回 | 585 分 | 4,320 分 | 4,905 分 | 5.5 |
| 砂浜 | 遠回り | 14 | 45 回 | 675 分 | 5,040 分 | 5,715 分 | 6.4 |
| 岩だらけの海岸(潮目から) | 近道 | 10 | 34 回 | 510 分 | 3,600 分 | 4,110 分 | 4.6 |
| 岩だらけの海岸 | 遠回り | 12 | 40 回 | 600 分 | 4,320 分 | 4,920 分 | 5.5 |
| 岸壁(海鳥の岩から) | 近道 | 8 | 28 回 | 420 分 | 2,880 分 | 3,300 分 | 3.7 |
| 岸壁 | 遠回り | 10 | 34 回 | 510 分 | 3,600 分 | 4,110 分 | 4.6 |
遠回りを選ぶと、どの海岸からでも同じだけ増えます(沖の潮目と黒い岩礁の 2 区間で 810 分)。帆と追い風が あれば縮み、荒天の押し流し(3.8 節)と引き返し(3.5 節)が伸ばします。
表は押し流しを数えていません(同じ物差しで数えたものは
stats/voyage_storm.yaml)。嵐のあいだ見張れないことも数えて
いません——1 航海ぶんの見張りは、嵐を引いた明るい時間にも収まるからです(3.10 節)。乾季と穏やかな季節では、表のままです
——押し流されるのは雨季で、平均は
0.40 日しか伸びない
一方、20 回に 1 回は 7.61 日を超えます(3.1 節)。積む「4〜6 日ぶん」(3.9.3 節)は乾季に出た
場合の話で、雨季に出るなら積む量はその裾で決めることになります。
それでも遠回りは、時間では選べません。 同じ風が続く日で比べると、遠回りは近道より常に長くかかります
——砂浜から向かい風で、近道が
5,265 分に対して
遠回りは 6,045 分、
追い風でも 4,185 分に対して
4,965 分 です。
風が 1 区間へ乗せる幅(3.2 節)は、遠回りが増やす 2 区間には届きません(tests/world-codex/voyageYaml.test.ts)。
遠回りが返すのは時間ではなく実りです(3.6 節)——沖の潮目は見張り 3 回のうちに
99%の割で群れが立ち、
群れ 1 つは 3 日ぶんの身になります(3.9.2 節)。2 区間ぶんの時間を払って 3 日ぶんの当てを買うのが
遠回りで、風はその判断を動かしません。
だから「30 日ぶんを積む」という前提は、海区の網が入った時点で既に事実ではありません。
ContentSkeleton.md 5 節が要求するのも、この 4〜6 日ぶんです。塩蔵が保つ 20 日
(SurvivalItems.md 9 節)は航海の日数を大きく上回り、足りない 10 日という穴も
ありません。航海をこれ以上短くはしません——やることの少ない区間は詰めるのが既定ですが
(DesignPrinciples.md の「退屈な区間は、簡単になりすぎない範囲で
短くする」節)、4 日はもう短い側で、ここから削ると渡る手応えごと無くなります。
3.9.2 釣りは、魚の群れへ当てたときだけよく獲れる
銛を突く相手ごとに、当たりが違います。
| 突く相手 | 1 回 | 生肉 1 つ | 空振り | 銛を失う |
|---|---|---|---|---|
海区に立った魚の群れ(fish_shoal) |
30 分 | 78 | 20 | 2 |
| 群れの居ない海面(筏から) | 60 分 | 15 | 83 | 2 |
表の数は卓の重みで、1 回あたりの当たりはその重みが卓に占める割合そのものです
(GameElementDefinition.md 10 節)。以下に出す割合は、どれも
この割り算から出ます——突いた回数を数えて測った値ではありません。
表は素人の卓で、狩猟の腕は当たる側だけを押し上げます。 生肉の重みが狙い(hunting_aim)を base の
土台にするためで(Skills.md 5 節)、expert(+40)では群れが 78 → 118、海面が
15 → 55 になります。空振りと銛を失う重みは動かないので、獲れる割合は群れで 78% → 84%、海面で
15% → 39% です。
そのぶん、群れと海面の落差は縮みます——素人の 5.2 倍が expert では 2.1 倍です。加算なので相手ごとの
差が腕で埋もれる(Skills.md 5 節)ことがここにも出ており、「積むか釣るか」の判断は腕が
上がるほど軽くなります。それでも判断が消えないのは、下の 3.9.3 節のとおり海面だけでは 1 日ぶんに
届かないためです。縮めたくなったときに動かすのは腕の刻みではなく catch_chance の側です——同じ刻みを
武器の当たり所も土台にしているので、刻みを変えると殴る側まで一緒に動きます。
群れの居ない海でも皆無ではないのは、筏そのものが漁礁になるからです。 漂流物には外洋魚が付きます ——漁業が漁具として使うほど確実な現象で、シイラやマグロは浮遊物のまわりに数日から数週間留まります。 当てにできる量ではない、という違いだけがここに出ます。
当たりを一律に下げず、対象へ結びつけたのは、読めなさの出どころを航路にするためです
(DesignPrinciples.md の「効率は一律に下げず、事前に読めない
当たりへ結びつける」節)。群れが立つのは沿岸・潮目・岩礁の 3 顔ぶれだけで、そこで見張りの卓を
引き当てたときだけです(3 節の表)——どの海区を通るかは針路の選択、群れが出るかは渡り切るまで
確定しません。 毎回のさいころで散らすのでは、要る回数が増えるだけで、積むかどうかの判断は生まれません。
群れは 6 時間で去ります(3.3 節)。その間に突き続ければ 12 回で 9 切れ(熟達で 10 切れ)
——3 日ぶんが一度に入ります。
ただし生肉は 2.5 日で腐るので、獲りだめするには塩が要ります(塩漬けで 20 日、
SurvivalItems.md 9 節)。製塩は航海の前提のまま残ります。
3.9.3 積むのは予定ぶん、釣るのは狂ったぶん
1 日ぶんは生肉 3 つです(満腹 500 が 3 つで 1,500。1 日に減るのは
1,536。
DigestionSystem.md 2 節)。ここから次の数が出ます。
- 群れに当てられた日は、1 日ぶんに 2 時間。 30 分で 0.78 切れなので、3 切れに平均 3.8 回です (熟達すれば 3.6 回)。
- 群れの出なかった日は、6 時間釣っても 1 切れに届きません(0.9。熟達しても 2.4 で、1 日ぶんの 3 には届きません)。丸一日(1 日ぶんの自由時間 891 分) 粘っても 1 日ぶんに届きません(熟達すれば届きます)。しかも丸一日釣れば その日は 1 海区も進みません(3 節。横断は 360 分、3.2 節)——熟達した腕で足りるようになるのは、 進むのをやめた日のぶんだけです。釣りだけで出れば、群れの無い区間は赤字です——砂浜から 今の網(3 節)では、近道を行く 12 区間のうち群れの立ちうる海区は 4 つで、残る区間がそれにあたります。岸壁から出る 8 区間では 1 つだけ(本土の島影)——「短い航路ほど補給の当てが無い」(3.6 節)は、そのまま 「短い航路ほど積んで出なければならない」になります。
- だから積むのは 4〜6 日ぶん(3.9.1 節の針路の日数ぶん)。1 日 3 つを日数ぶん積んでも、積荷の段が
上がる境目(3.2 節の
laden)には届かず、予定ぶんを積むこと自体は速さを削りません (tests/world-codex/voyageYaml.test.ts)。削られるのは、 それを塩漬けにするまでの島側の時間です。
生肉は、満腹と一緒に菌も運びます(1 切れ pathogen +3、
DigestionSystem.md 6 節)。塩漬けにしても消えません——cure を
通した先も同じ eat を継ぐので、製塩が前提であること(3.9.2 節)は、菌を避ける手にはなりません。
それでも 1 日 3 つは、症状の段へ届きません。 入る菌は 1 切れ +3 ずつですが、感染している間は免疫が上がり
続け(+0.25/tick)、
素の 60 からやがて最上段(primed)へ届きます。そこから先は 1 tick に
−0.30 引くので、
菌自身の増殖(+0.15/tick)を
差し引いた正味でも、1 日で入るぶんを上回って引けるので、菌は食事ごとに 0 へ戻ります(他の段が引く量は
DigestionSystem.md 6.2 節)。条件は間隔です——発熱の段は 5 なので、
1 切れ +3 が 2 回続けて入ればその場で乗ります。最上段へ届くまでは robust の
−0.20 なので、
増殖を差し引いた正味がごくわずかで、間隔が詰まると 1 日 3 つでも段に乗ります——起きている時間帯へ 3 食を寄せるあたりが境目で、満腹が減るたびに食べる間隔なら届きません
(tests/world-codex/pathogen.test.ts)。
崩れるのは、免疫の押し下げを抱えて出航したときです。 押し下げのぶん最上段へ届くのが遅れ、その間の 正味で引ける量が入るぶんを下回るので、積み上がります——ビタミン不足(−15)を抱えて出るだけで、 初日のうちに発熱の段へ乗ります。 壊血病(−40)まで行くと最上段へ届かなくなり、菌は上限へ暴走します。
釣りが賄うのは、予定が狂ったぶんです。 荒天は未知の海区へ押し流し(3.8 節)、引き返しは来た区間を もう一度渡らせます(3.5 節)——どちらも何日伸びるかを出航前には出せないので、そこを積んで先回り することはできません。積む量は読める日数ぶん、釣りは読めない日数ぶん、という分担になります。
海の食料は釣りだけではありません。 海藻(満腹 200・ビタミン 60。海藻の帯と沿岸で拾え、塩漬けで 20 日保つ)と海鳥の卵(満腹 150。殻が隔てるので芋と同じ 20 日)、それに海鳥の群れを狩って得る生肉が あります(3 節の表)。群れの出ない日に効くのはこちらで、釣りを入れたことで潰れてはいません。
ビタミンを運ぶのは、そのうち海藻です——卵は 10、生肉は 1 切れ 2 しかありません。 1 日に回るのは 48 なので、生肉 3 つでは その大半が毎日削れていきます。 予定どおりの日数なら、素の蓄え(900)から押し下げの段(600 未満)へは届きませんが、 削ったまま出るか、荒天と引き返しで伸びれば入ります——予定が狂ったときに要るのは、満腹を埋める釣り だけではありません。
脂も同じ形で足りません——1 日に要る 24 に、生肉 1 日 3 つでは届きません
(DigestionSystem.md 3 節。tests/world-codex/pathogen.test.ts)。ただしこちらは釣りではなく積む側で
埋まります(3.9.6 節)。
3.9.4 道具は突き銛で、失っても海の上で作り直せる
釣りに要るのは fishing_tool タグを持つ物で、今それを名乗るのは突き銛(fishing_harpoon)だけです。
木を倒せるのが chopping_tool だけであるのと同じ形で(1 節)、釣り針や網が後から増えても、釣りの手その
ものは書き換わりません。
材料は太い枝・尖った石・紐で、石斧とまったく同じです(src/assets/world-codex/tools.yaml の
stone_axe)。柄をこしらえ、穂先を紐で締め上げる柄付け(Skills.md 3 節)の 2 工程が
そのまま使えるので、島の産物から筏・帆へ届く鎖(src/analysis/escapeReach.ts)の上に、新しい
素材を足さずに載ります。締め方を銛だけ緩めません——繊維で直に締める形を作れば、柄付けの標準が
2 つ並びます。槍の柄になる長い棒は要りません——筏の縁から真下へ突くので、獣を狙う長さが要らない
ためです。槍の軸は若木を切って採る長い棒で(SurvivalItems.md 3 節)、そこへ
載せると釣りまで若木を探すことと木材加工の腕の後ろへ回ります。
銛は突いた魚に持って行かれることがあります(失う重み 2 は動かず、腕が当たる側だけを 太らせるので、上手いほど銛を失いにくくなります)。だから積むのは銛 1 本ではなく、穂先になる尖った石と、締める紐です。 柄になる太い枝は海が返します(流木と漂流物、3 節の表)が、石と紐は返りません——漂流物が返す ロープは紐 3 本を撚った先で、ほどいて紐に戻す手はありません。作り直すのに火は要らず、削るための刃物を 1 つ積んでおけば筏の上で組み直せます。予備を切らすと、群れに出会っても突けません——食料を積んで いても、伸びたぶんを賄う手がそこで消えます。
3.9.5 火は要りません
生肉はそのまま食べられます(src/assets/world-codex/animals.yaml の raw_meat。満腹 500・
たんぱく 20)。焼けば身になる量が増え、菌も入りませんが
(DigestionSystem.md 6.1 節)、どちらも焼かないと食べられないという
関係ではありません。現実の漂流者も生で食べています。生のままで賄える条件は 3.9.3 節です。
火を筏へ持ち込むことを釣りの前提にはしません。 前提にするには生肉を食べられなくする必要があり、 それは島側の狩り全体に及びます。釣りの代償は火ではなく、道具を持ち込むことです。
3.9.6 水を甕で積むなら、蓋をするかどうかが積む数を決める
積む手段は甕とヤシの実の 2 つで、どちらで運ぶかはプレイヤーが選びます
(ContentSkeleton.md 5.3 節)。この節が数えているのは甕の側です。
水は海の上で得られないので、日数ぶんを積み切ります。 甕 1 つは 1.7 日ぶん
(LiquidContainerSystem.md 5 節)なので、遠回りを見込んだ
3.9.1 節の 4〜6 日なら
3〜4 つ。蓋をすればこれがそのまま積む数で、蓋をしなければ下限です——蒸発が押し上げ、積む物を
誤れば食い方の側からも押し上がります。
- 蓋をすれば、蒸発は 1mL も引きません(同 6.2 節)。蓋の有無がそのまま積む数に出るのがここで、 航海のあいだ甕は開けっ放しで日なたに置かれ続けるからです。
- 蓋をしなければ蒸発が引きます。 開けたままの甕は、中身が日なたで 1 日 273mL (乾季。雨季でも 61mL) ずつ減ります(同 6 節)。1 日に飲むぶんに比べて小さくない量で、海区は樹冠も影も持たないので(3.10 節)日陰へ 寄せる手もありません。飲んでいる甕だけでなく、順番を待っている甕も同じだけ失うので、積む数が 増えるほど 1 つあたりの取り分は減ります——最後に開ける甕は、それまでの日数ぶんを失った状態で開く ことになります。空になった甕は減りません(中身の軸ごと落ちる、同 1 節)。
- 蓋をすると雨は受けられません(同 6.2 節)。海の上で水が増える道は雨水しかない
(
GameEndings.md3.1 節)ので、降ってきたら外すという手が残ります ——載せ外しは一瞬なので、これは積む数ではなく航海中の判断のほうへ出ます。 - 肉だけを積むと、保ちが半分になります。 航海の献立は生肉に寄る(3.9.3 節)ので、そのままでは
fat_starvedの段が立ち、hydrationの削りが倍になります (DigestionSystem.md8 節)。1 日ぶんの生肉 3 切れが運ぶ脂は、 1 日に要る量の半分にしかなりません(同 3 節)——避けるにはヤシの果肉を 2 日に 1 つ積みます (果肉 1 つが 26、1 日に要るのが 24)。生肉と同じく塩漬け・天日干し・燻しが効くので、 日数ぶんを積んで出られます。
重さとかさは、どちらも効きません。 満たした甕は 5.2kg(器 1.2kg + 水 4kg)で、積む数ぶん
載せても——積荷の段が上がる境目(3.2 節の laden)には、日数ぶんの生肉(3.9.3 節)と合わせても
届きません(tests/world-codex/voyageYaml.test.ts)。かさの側も、筏の 500 L に対して甕 1 つが 15 L です。蓋を足しても同じです——蓋 1 枚は
0.4kg・0.3 L で、甕の数ぶん載せても段は動きません。積む数を縛るのは船ではなく、浜まで運ぶ側です
(ContentSkeleton.md 5 節)。
この数をプレイヤーへは示しません。 画面が出すのは積載に対する推定日数までで、賄えるかどうかは
出しません(GameEndings.md 9.3 節)。甕何個で何日保つかは、島の
暮らしで同じ器を使ううちに身につく側です(同 9.2 節)。
3.10 海の上で見て探す仕事は、明るく穏やかなうちだけ
見張り(3 節)・釣り(3.9.2 節)・海鳥を捕ること(3 節の表)は、視界が明るく、嵐でないうちだけ
できます。 どれも屋外で見て探す仕事なので、地上の探索・採取と同じ分類に入ります
(IlluminationSystem.md 5 節)。海の上を昼夜の外へは置きません
——海区は樹冠も地面の反射も持たないので、明るさは空そのものです。夜は暗さの底(−6)です。
どれも、嵐でも止まります。 屋根の下でない場所での行動だからで、そこは既に決まっています
(ContentSkeleton.md 8.1.4 節)。海区に屋根は無いので、嵐のあいだは
逃げ込む先もありません。
渡ることには明るさも風雨も要りません(3 節・3.8 節)。明るく穏やかなうちに見張って漁り、
暗くなったら渡るという組み立てになります(DesignPrinciples.md の
「時間経過に任せる区間を作らない」節)。所要日数(3.9.1 節)は変わりません——1 航海ぶんの見張りは
横断よりずっと短く、嵐を引いた明るい時間にも収まります。海区と同じ明るさの土地(樹冠も反射も無い
開けた土地)で見ると、いちばん荒れる雨季でも見て探せるのは 1 日
10.1 時間で、
砂浜から近道を渡る航海の見張り
585 分は
その 1 日ぶんにすら届きません。
航路が 1 本も立っていない海区の夜と嵐だけは、待つことになります。 渡り着いた海区には来た航路が 立っている(3 節)ので、これに当たるのは荒天に流された先(3.8 節)です。嵐に流された先で嵐が続いて いれば、見張り始められるのは収まってからになります。
明かりを持ち込めば、夜でも同じ手が通ります(松明。
IlluminationSystem.md 3 節)。銛を手に持っている必要は無いので、
片手が松明で塞がっても漁は止まりません。止めているのは夜そのものではなく明るさで、そこは島と
同じです。嵐のほうは松明では開きません——止めているのが明るさではないからで、そこも島と同じです
(ContentSkeleton.md 8.1.1.4 節)。
4. 到達は、本土へ移ることそのもの
4.1 最後の航路を渡ると、筏ごと本土へ着く【確定】
最後の海区(本土の島影)の航路を渡ると、筏が本土へ移ります。 プレイヤーも積荷も筏の中に 居るので、一緒に着きます。渡る手そのものは他の海区とまったく同じで、違うのは行き先が海区ではないこと だけです。
着いた後は風も海流も効きません(親が海区でなくなる)。本土に航路は無いので、そこから先へ渡ることも ありません。
着いたことを読むのは画面だけで、旗はどこにも持ちません——死が「もうどこにも居ない」ことで表される
のと同じ分担で(VitalsSystem.md 6 節)、到達は「本土の中に居る」ことが
そのまま表します。
出どころ: ユーザーの指示(最後の航路を渡ると筏ごと本土へ着く。#1884)
4.2 本土の湧かせ方と、着いた後に画面がすること
4.1 節から導いたもので、覆すのに人間の判断は要りません。
本土は世界にただ1つ在る場所なので、行き先は型の名前(mainland)で指せます(to_object)。
親が海区でなくなるぶん、着いた後の速さは0に戻ります。海区と本土は
どれも singleton で、世界を作った時点で1つずつ湧きます(NewGame.spawnSingletonsAcceptedByWorld)。
「本土の中に居る」ことを読むのは Ending.kind が escape になる経路です。
画面は、島を出たことを伝えるダイアログを出し、持ち帰った物を棚へ収め、セーブデータを消して棚の画面へ 移ります。
4.3 航海の現在地は札が示し、残りは画面に出さない
航海の現在地は、居る海区の札そのものが示します。残りの日数も、本土までの残り海区数も画面には
出しません——海図は値として在りますが(3.7 節)、それを読んで示すのは
docs/ui/ の担当で、まだ入っていません
(GameEndings.md 9.3 節)。
5. 棚の枠は、アーティファクトの型そのもの
5.1 棚の枠は型そのもので、渡り切った側に在る物が埋める【確定】
アーティファクトの型がそのまま棚の枠になります。
持ち帰ったと数えるのは、本土に着いた側に在る物すべてです。筏の積荷か手持ちかは問いません ——渡り切った側に在ることだけが条件なので、置き場所ごとの数え方を持ちません。
同じ物を2度持ち帰っても枠は増えません。棚はタイトル画面からも開けます——空きが見えていることが次の
周回へ向かう動機だからです(GameEndings.md 6 節)。
出どころ: ユーザーの指示(棚の枠はアーティファクトの型そのもの。#1884)
5.2 枠を増やすことは、artifacts.yaml へ1つ足すこと
5.1 節から導いたもので、覆すのに人間の判断は要りません。
枠になる型は artifact タグで拾うので、種類を増やすことは artifacts.yaml へ1つ足すことと同じです。
今あるのは金の聖杯だけです。
棚は周回そのもの(セーブスロット)とは別の領域に残ります
(SaveDataManagement.md 棚節)。
未決事項・今後の検討課題
- 分かれ道をいくつ置くか(3 節)。今は 1 箇所で、近道と遠回りを分けているのは 2 区間ぶんの時間と、 その 2 区間が返す実り(3.9.1 節)。何箇所あれば針路を選び続けることになるのかは、この 1 箇所を 遊んでみないと測れない。
- 貝と金属片(
ContentSkeleton.md7 節)。貝は生では食べられないので焼く鎖ごと、 金属片は使い道ごと足すことになる。どちらも入るまでは、岩礁の湧くものは魚の群れ、沈船の海の拾い物は 漂流物とアーティファクトで代えてある。 - 小島へのアーティファクトの配置(
ContentSkeleton.md6.2 節)。小島は上陸して 探索できる土地になった(3.4 節)が、今の卓はアーティファクトを返さない。小島から出る種類数と 1 周回に配る数は同節が決めているので、残っているのは卓へ載せることだけ。 - 丸太をまとめて運ぶ手段(1 節)。そりと台車は入った(
Containers.md2節)が、 2本目が積めるかが担ぎ手で分かれ、筏1つぶんの丸太を1往復で運ぶ手立てはどの担ぎ手にも無い (tests/world-codex/loadEffects.test.ts)。積める重さを 上げるのか、往復そのものを短くするのか、担ぎ手で分かれたままにするのかは決めていない。