《Cataclysm-DDA》は、ターン制サバイバルゲームであり、プレイヤーが廃墟となった世界で建造・改造・防衛を行うことを可能にする高度な地形操作システムを備えています。このシステムの核となるのは、data/json/construction/ および data/json/traps.json に配置されるJSON定義ファイルです。本稿では、これらのファイルを活用して耐久性を持つ構造物や反応型トラップを設計する方法を、技術的視点から再構成し解説します。
構造物のステートフル実装
建物は単一の地形タイプではなく、複数の状態(state)を経て変化する動的エンティティとして定義されます。たとえば、木製壁は以下の3つの地形IDで表現されます:t_wall_wood(健全)、t_wall_wood_chipped(部分損傷)、t_wall_wood_broken(完全破壊)。各状態は独立した地形定義を持ち、constructionエントリによって遷移が制御されます。
以下は、損傷壁の修復処理を表す構造物定義の一例です。ここでは、作業時間・必要スキル・素材構成・工具品質が明示的に分離され、モジュラーな設計が可能になっています:
{
"type": "construction",
"id": "constr_fix_wooden_barrier",
"group": "maintain_wooden_defense",
"category": "REPAIR",
"required_skills": [ [ "carpentry", 2 ] ],
"time": "45 m",
"qualities": [ [ { "id": "HAMMER", "level": 1 } ] ],
"components": [
[ [ "lumber", 6 ], [ "plywood_sheet", 1 ] ],
[ [ "nail_box", 12 ] ]
],
"pre_terrain": "t_wall_wood_chipped",
"post_terrain": "t_wall_wood"
}
材料特性と構造挙動
構造物の動作は、その基盤となる素材の物理的属性に強く依存します。JSON定義内には直接記述されませんが、関連する地形定義(data/json/terrains.json)にて、flags 配列に "SUPPORTS_ROOF" や "FLAMMABLE" などのフラグが設定され、ゲームエンジンが自動的に破壊・燃焼・崩落の判定を行います。例えば、t_wall_steel は "FLAMMABLE": false を含むため、火災による劣化が発生しません。
トラップの動作モデル
トラップは「検知→反応→結果」の三段階ロジックで構成されます。各段階はJSON内の異なるフィールドで制御されます:
- 検知条件:
trigger_weight(質量閾値)、visibility(可視性)、avoidance(回避難易度) - 反応アクション:
action(例:"landmine")、vehicle_data(車両専用効果) - 結果出力:
drops(ドロップアイテム)、eocs(イベントオーバーライドコマンド)
以下は、範囲型テレポート効果を伴う特殊床面の定義です。このトラップは、周囲4マス以内の生物をランダムな位置へ転送し、視認不可能(always_invisible)であるため、戦術的伏兵として機能します:
{
"type": "trap",
"id": "tr_quantum_floor",
"name": "quantum resonance tile",
"color": "cyan",
"symbol": "@",
"visibility": 0,
"avoidance": 3,
"difficulty": 99,
"trap_radius": 4,
"action": "eocs",
"eocs": [ "EOC_TELEPAD_RANDOM" ],
"always_invisible": true
}
組み合わせ防御の設計原則
有効な防衛ラインは、単一要素の強化ではなく、複数の構造物・トラップの相互作用に基づいて設計されます。典型的なレイヤード防御では、次の4層が機能的に分離されています:
- 監視層:低可視性・高回避難易度のトラップ(例:
tr_laser_grid)で侵入検知 - 遅延層:移動速度低下または行動不能化(
tr_spiked_pit,tr_vine_snare) - 除去層:即時ダメージまたは爆発(
tr_plasma_cannon_trap) - 防護層:遮蔽・射撃支援・再生可能な構造(
t_barricade_reinforced)
カスタマイズの実践フロー
新規構造物またはトラップを追加する際には、以下の順序でファイルを編集します:
data/json/construction/内の適切なカテゴリファイル(例:walls.json,repairs.json)にconstruction定義を追加data/json/traps.jsonにtrap定義を挿入- 使用する地形IDが既存のものと重複しないよう、
data/json/terrains.jsonで対応する地形を事前に登録 - テスト用マップで
debugモードを有効にし、Ctrl+Shift+Tでトラップ配置、Ctrl+Shift+Cで構造物施工を確認