研究所 JSON ドキュメント

研究所 (Lab) は非常にランダム化されていますが、実際のオーバーマップ地形(overmap terrain)タイルはほとんど使用されていません。これは、マップの多様性がほぼ完全にJSONを使用して達成されていることを意味します。特に、研究所では place_nested が集中的に使用され、新しい研究所の部屋などのサブマップがランダムに選択されます。

研究所エリア作成のクイックガイド:

lab_floorplans.json に、om_terrainlab_4sideとした新しいマップ生成JSONを追加してください。

各境界の中央 2マスはドアが開く場所となるため、必ず空けておいてください。境界マスは、研究所のセクション間を隔てる 1マス幅の壁に変換されます。そのため、最も外側のマスが作成されるかどうかに関係なくマップが「機能する」ことを確認してください(それらのマスを空けるか、カウンター、ロッカー、壊れたコンソールなどの「使い捨ての備品(furniture)」を配置することで対応します)。マップの回転を許可してください。

代わりに研究所のフィナーレを追加するには、om_terrain として lab_finale_1levelを使用し、JSONを lab_floorplans_finale1level.json に配置してください。

研究所 行き止まり部屋作成のクイックガイド:

lab_floorplans_1side.json に、om_terrainlab_1sideとした新しいマップ生成JSONを追加してください。

エリアは北向きにしてください。北側の境界の中央 2マスはドアが開く場所となるため、空けておいてください。施錠されたエリアを設けたい場合は、床を t_strconc_floorに設定してください。そうすればそこに階段は出現しません (この床はlab_paletteでは,です)。place_nested を使用して座標 [0, 0]lab_1side_border_doors を配置してください。マップの回転は許可しないでください。

研究所 部屋作成のクイックガイド:

lab_rooms.json に、nested_mapgen_id を lab_room_7x7 または lab_room_9x9 とし、mapgensize を [7, 7] または [9, 9] とした新しいマップ生成 JSON を追加してください。

ごくまれに、最初の行または列の地形が境界壁に置き換えられる可能性があるため、そのような場合でもそのままに見えるレイアウトを優先してください。

レイアウトで部屋のドアがどこに開くかを知る必要がある場合は、代わりに nested_mapgen_id を lab_room_7x7_crossdoors および lab_room_9x9_crossdoors としてください。これにより、ドアは壁のちょうど中央にのみ出現することが保証されます。

研究所 JSON 完全ガイド

エリアマップ生成 JSON の仕組み

研究所は、主に 'lab'、'lab_stairs'、そして通常 1つの 'lab_finale'タイプのオーバーマップタイルで構成されています。

研究所の地形には、階段、境界壁、行き止まりなど、特別な処理が必要です。そのため、JSON では 3つの「フェイク」オーバーマップ地形タイプを使用します。 om_terrain を以下のいずれかに設定した JSONマップ生成オブジェクトを作成すると、コードがそれを変換し、マップ上に正しく配置します。

  • lab_1side - 1つの研究所エリアが隣接している場合に配置されます。 マップは北向きのエントランスを前提とする必要があります。回転は許可しないでください。
  • lab_finale_1level - 地形タイプに基づいて研究所の最下層に配置されます。回転 は任意です。
  • lab_4side - 他のマップです。回転は任意です。

境界壁

研究所には特殊な境界があります。研究所エリア間の 1マス幅の壁であり、そのタイルの南側と東側に配置され、中央に金属製のドアが配置される可能性があります。以下はその例です。

"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       M",
"                       M",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"                       |",
"-----------MM----------|"

北または西の隣接タイルが研究所でない場合、その側全体を、元の地形に代えて壁で上書きする必要があります。 東または南の隣接タイルが研究所でない場合は、そこにあるドアを壁で置き換えます。

一部の JSON マップでは、上記のレイアウトを基準にし、回転を無効化したうえで、JSON 内で 'lab_border_walls' チャンクを指定して place_nested を呼び出すことができます。 この場合、境界は正しく生成されるため、追加のコードは実行されません。

一方、境界がまだ処理されていない場合(東側のドア/壁の有無によって判定)、コードは4方向すべてに研究所の境界壁とドアを生成します。

'lab_border_walls'は回転したマップでは機能しません。そのため、回転されたマップはハードコードされた境界壁の生成に頼る必要があります。これは多様性が増すため、むしろ望ましい点でもあります。したがって、マップレイアウトが最終的に 1x1 の境界が配置されるかどうかを気にしなくてもよい場合には、回転を許可し、'lab_border_walls' を配置しない方が好ましいです。

折衷案として、マップの一部だけが境界壁の位置に対して正しく見えていればよい場合は、マップの東側に壁を配置し、回転を [0, 1] のみに制限してください。 これにより、最終的な回転後も壁が必ずマップの東側または南側に位置するようになります。 具体例は「electricity room」フロアプランを参照してください。

その他のハードコードされたマップ生成方式の研究所

ランダムに照明が付く可能性がわずかにありますが、中央研究所 (central lab) とタワー研究所 (tower lab) は必ず照明を得ます。オーバーマップに階段が表示されている場合、その階段は空の t_thconc_floor のスペースに配置されます。また、浸水、ポータル、放射線事故などの特殊効果が 10% の確率で発生します。 アリの巣に侵食された研究所は破壊された状態になります。

これらはいずれも適用に JSON の変更を必要としませんが、研究所の部屋に特殊効果を追加する JSON アイデアは lab_maybe_effects_7x7 および lab_maybe_effects_9x9 のスポーンテーブルに追加できます。 現在、これにより追加されるのはクモの巣の侵入のみです。

部屋の生成

部屋の生成にランダム性を持たせる最も一般的な方法は、7x7 または 9x9 の部屋を作成し、place_nested を使って内容をランダム化することです。部屋を直接配置する代わりに、「スポーン」と呼ばれる中間のマップチャンクを使用します。これはより多くの情報をエンコードし、その条件を満たす部屋の中からランダム化を行う仕組みです。

  • lab_spawn_7x7: ドアがどこにあるかの保証がない7x7の部屋。
  • lab_spawn_7x7_crossdoors: ドアが各境界壁の中央にのみある7x7の部屋。
  • lab_spawn_9x9: ドアがどこにあるかの保証がない9x9の部屋。
  • lab_spawn_9x9_crossdoors: ドアが各境界壁の中央にのみある9x9の部屋。

スポーンを選択すると、lab_room_[size] に加えてレアなバリアント、そして該当する場合は _crossdoors バリアント間でランダム化されます。

部屋の2つの壁が再定義されても差し支えない場合は、スポーンを使用して、窓の追加、壁のチェーンリンクへの置き換え、複数のドアと内部壁の作成など、壁を変更する可能性のあるランダム化された部屋を追加することもできます。これらのテンプレートは、サブマップの一部ではない2つの壁には、ドアがないことを前提としています。これらのサブマップは、変更する壁自体を含むため、サイズが8x8と10x10であることに注意してください。

  • lab_spawn_7x7_wall_nw
  • lab_spawn_7x7_wall_sw
  • lab_spawn_9x9_wall_nw
  • lab_spawn_9x9_wall_sw

可能な限り最も具体的なスポーンを使用してください。

ディレクトリ

  • lab_central.json - 中央研究所の最上部用のハードコードされたマップ。
  • lab_common.json - 地形パレット、戦利品パレット、一般的なJSONオブジェクト。
  • lab_escape.json - 挑戦-研究所 脱出専用マップ。これは研究所のレベル4に特別に配置されます。
  • lab_floorplan_cross.json - クロス・フロアは、研究所の端に隣接するときに岩石に埋め込まれ、レアな保管庫を持つという特徴があります。
  • lab_floorplans.json - 研究所レイアウトの主要なソース。
  • lab_floorplans_1side.json - 行き止まり部屋。
  • lab_floorplans_finale1level.json - 研究所フィナーレ(1階層) 用部屋。
  • lab_rooms.json - ランダム化された部屋。
  • lab_rooms_wall.json - 壁の境界線を書き換えるランダム化された部屋。
  • lab_trains.json - レベル2と4でまれに生成される科学研究所列車基地用のタイル。