航海のレポートの読み方
数値は stats/voyage.yaml にあります。
tests/diagnostics/voyageStatsReport.test.ts が、定義(src/assets/world-codex/*.yaml)だけから
計算したものです。海区の網・見張りの回数・素の横断時間・風の受け方・季節が配る風の重みを変更したら
再生成します。
npm run stats:voyage
この文書は手書きで、再生成しても書き換わりません。 持つのは読み方——何を測ったか、どこに線を 引いたか、何を数えていないか——だけです。数値そのものは1行も書きません(書けば、再生成した YAMLとずれます)。
YAMLの節
| 節 | 中身 |
|---|---|
meta |
海区の数・針路の数・日数の分母(1日ぶんの自由時間) |
zones |
海区ごとの本土までの残り海区数・見張りの回数と時間・素の横断時間・押し流しまでの時間・出る辺 |
zone_yields |
見張り1回が何を返すかの割合と、航路が現れるまでに湧くものが1度以上立つ割合 |
zone_finds |
見張り1回あたりの期待個数。返るものだけ(重み0の候補は落とす) |
courses |
出航地点×針路の、風を乗せない合計 |
wind_legs |
風が1区間の横断時間へ乗せる分 |
course_wind |
同じ風が通しで吹いた場合の合計 |
course_season |
季節が配る風の重みで期待した合計 |
この表とYAMLが食い違うと npm test が赤くなります。 表に挙げた節がYAMLに在って空でないことと、
表に無い節がYAMLに無いことの両方を、生成元のテストが見ます。
針路の名前
course が shortest なのは、その出航地点から本土まで最も区間の少ない針路です。それ以外が
detour——今の網では分かれ道が1箇所なので、どの出航地点からも針路は2本になります
(Voyage.md 3節)。3本以上になったら再生成が投げます——2本を前提にした
名前では足りないので、そのときは名前の付け方を決め直すことになります。
legs は渡る回数で、通る海区の数と同じです(最後の1本が本土へ着く)。lookouts は通る海区それぞれで
航路が現れるまで見張った回数の合計で、渡った先の海区の見張りも含みます——引き返さずに進む限り、
どの海区でも先へ出る辺は自分で見つけることになります。
日数の分母
days は、合計の分を1日ぶんの自由時間(meta の daily_free_minutes)で割ったものです。島の
山を日数で数えるときの分母(ContentSkeleton.md 4節)とまったく同じで、
出どころも1箇所です(src/analysis/balanceTables.ts の DailyLabour)。航海の日数と島側の労働を
同じ物差しで並べるためで、別に引き算をすると生成物ごとに換算が変わります。
海の上で何時に何ができるかは、この割り算に現れません。 見張りは明るく穏やかなうちだけ、横断は夜でも
嵐でもできる(Voyage.md 3.10節)という差は、1日のどこに時間が入るかの話であって、
要る時間の量ではありません。
何を乗せて、何を乗せていないか
- 筏の側の事情(
sail_speed)は乗せていません。 海流・積載・帆はどう積んだかで決まるので、crossing_minutesはどれも素の値です。海流は海の上では常に効くので、実際の横断はここより 短くなります(Voyage.md3.2節)。 - 風は乗せています(
wind_legs・course_wind・course_season)。風は筏ではなく航路が持ち、 積み方によらないので、同じ航海の幅としてそのまま出せます。wind_legsのminutesは素の横断時間へ 乗せる分で、負なら短く渡れます。 - 荒天の押し流しと引き返しは数えていません。 どちらも何区間ぶん動くかが実行時にしか決まりません
(同3.8節・3.5節)。
coursesが出すのは、それらが起きなかった場合の下限です。zonesのstorm_drift_minutesは、その海区で荒天にさらされてから1度押し流されるまでの時間で、何回 押し流されるかは数えていません。 押し流しのほうは、同じ針路を実際に渡らせて測ったものがVoyageStormStats.mdにあります(引き返しは今も測っていません)。 - 釣りや拾い物に費やす時間も数えていません。 渡るのに要る時間と、渡りながら何が返るかは別の問い
です。後者は
zone_yields・zone_findsが、見張り1回あたりで答えます。 - 季節は風向きの重みだけを見ています。 嵐の出方も季節で変わります
(
ClimateSystemStats.md)が、嵐が何区間ぶん押し流すかは通してみないと 出ないので、course_seasonの差は横断時間の差だけです。押し流しを入れた差はVoyageStormStats.mdが持ちます。
実りの読み方
zone_yields の3つ(barren・foraged・spawned)は見張り1回の卓を割ったもので、和は100です。
barren— 何も返らない割合。地上の探索には無い候補です(地上は1回で必ず1個以上返る。ExplorationSystem.md2節)。foraged— 拾えるものが返る割合。見つけた時点で手に入ります。spawned— 湧くもの(魚の群れ・海鳥の群れ)が海区へ立つ割合。設置物かどうかで見分けています ——spawnの配置先は宣言の読み上げに残らないので、型の側の事実で線を引いています。spawned_by_sighting— 航路が現れるまでの見張りの間に、湧くものが1度以上立つ割合。毎回独立に 引くものとして、spawnedと見張りの回数から出しています。
zone_finds の object は型の名前で、仕様書が使う呼び名とは別です——流木は太い枝2本、漂流物は
太い枝とロープなので、1行が1つの呼び名に対応するとは限りません。
腕前は乗っていません。 湧くものの重みは狩猟の腕を土台にしますが(Skills.md
5節)、定義だけから解くと素の0なので、ここに出るのは素人の卓です。腕が上がるとその海区は魚と鳥の側へ
寄ります。
このレポートは判定を出さない
遠回りを選ぶ理由があるか、季節の窓が期限として働くかは、ここの数字を読んで
Voyage.md が決めます。ここが出すのは、その判断に要る差だけです。