# **Mission JSON Schema Reference** This document defines the data structure for Game Missions. It covers configuration for World Generation, Narrative logic, Objectives, and Rewards. ## **1\. The Structure (Overview)** A Mission file is a JSON object with the following top-level keys: - **config**: Meta-data (ID, Title, Difficulty). - **biome**: Instructions for the Procedural Generator. - **deployment**: Constraints on who can go on the mission. - **narrative**: Hooks for Intro/Outro and scripted events. - **enemy_spawns**: Specific enemy types and counts to spawn at mission start. - **objectives**: Win/Loss conditions. - **modifiers**: Global rules (e.g., "Fog of War", "High Gravity"). - **rewards**: What the player gets for success. ## **2\. Complete Example (The "Kitchen Sink" Mission)** This example utilizes every capability of the system. ```js { "id": "MISSION_ACT1_FINAL", "type": "STORY", "config": { "title": "Operation: Broken Sky", "description": "The Iron Legion demands we silence the Shardborn Artillery. Expect heavy resistance.", "difficulty_tier": 3, "recommended_level": 5 }, "biome": { "type": "BIOME_RUSTING_WASTES", "generator_config": { "seed_type": "RANDOM", "size": { "x": 30, "y": 10, "z": 30 }, "room_count": 8, "density": "HIGH" }, "hazards": ["HAZARD_ACID_POOLS", "HAZARD_ELECTRICITY"] }, "deployment": { "squad_size_limit": 4, "forced_units": ["UNIT_HERO_VANGUARD"], "banned_classes": ["CLASS_SCAVENGER"] }, "narrative": { "intro_sequence": "NARRATIVE_ACT1_FINAL_INTRO", "outro_success": "NARRATIVE_ACT1_FINAL_WIN", "outro_failure": "NARRATIVE_ACT1_FINAL_LOSE", "scripted_events": [ { "trigger": "ON_TURN_START", "turn_index": 3, "action": "PLAY_SEQUENCE", "sequence_id": "NARRATIVE_MID_BATTLE_TAUNT" }, { "trigger": "ON_UNIT_DEATH", "target_tag": "ENEMY_BOSS", "action": "PLAY_SEQUENCE", "sequence_id": "NARRATIVE_BOSS_PHASE_2" } ] }, "enemy_spawns": [ { "enemy_def_id": "ENEMY_BOSS_ARTILLERY", "count": 1 }, { "enemy_def_id": "ENEMY_SHARDBORN_SENTINEL", "count": 3 } ], "objectives": { "primary": [ { "id": "OBJ_KILL_BOSS", "type": "ELIMINATE_UNIT", "target_def_id": "ENEMY_BOSS_ARTILLERY", "description": "Destroy the Shardborn Artillery Construct." } ], "secondary": [ { "id": "OBJ_TIME_LIMIT", "type": "COMPLETE_BEFORE_TURN", "turn_limit": 10, "description": "Finish within 10 Turns." }, { "id": "OBJ_NO_DEATHS", "type": "SQUAD_SURVIVAL", "min_alive": 4, "description": "Ensure entire squad survives." } ], "failure_conditions": [ { "type": "SQUAD_WIPE" }, { "type": "VIP_DEATH", "target_tag": "VIP_ESCORT" } ] }, "modifiers": [ { "type": "GLOBAL_EFFECT", "effect_id": "EFFECT_ACID_RAIN", "description": "All units take 5 damage at start of turn." }, { "type": "STAT_MODIFIER", "target_team": "ENEMY", "stat": "attack", "value": 1.2 } ], "rewards": { "guaranteed": { "xp": 500, "currency": { "aether_shards": 200, "ancient_cores": 1 }, "items": ["ITEM_ELITE_BLAST_PLATE"], "unlocks": ["CLASS_SAPPER"] }, "conditional": [ { "objective_id": "OBJ_TIME_LIMIT", "reward": { "currency": { "aether_shards": 100 } } } ], "faction_reputation": { "IRON_LEGION": 50, "COGWORK_CONCORD": -10 } } } ``` ## **3\. Field Definitions & Logic Requirements** ### **Deployment Constraints** - **forced_units**: The TeamBuilder UI must check this array and auto-fill slots with these units (locking them so they can't be removed). - **banned_classes**: The UI must disable these cards in the Roster. - **suggested_units**: (Optional) Array of class/unit IDs recommended for this mission. Useful for tutorials to guide player selection. The UI should highlight or recommend these units. - **tutorial_hint**: (Optional) Text to display as a tutorial overlay during the deployment phase. Should point to UI elements (e.g., "Drag units from the bench to the Green Zone."). ### **Enemy Spawns** - **enemy_spawns**: Array of enemy spawn definitions. Each entry specifies an enemy definition ID and count. - **enemy_def_id**: The enemy unit definition ID (e.g., 'ENEMY_SHARDBORN_SENTINEL'). Must match an enemy definition in the UnitRegistry. - **count**: Number of this enemy type to spawn at mission start. - The GameLoop's `finalizeDeployment()` method should read this array and spawn the specified enemies in the enemy spawn zone. ### **Objectives Types** The MissionManager needs logic to handle these specific types: | Type | Data Required | Logic | | :----------------- | :--------------- | :------------------------------------------------------ | | **ELIMINATE_ALL** | None | Monitor unitManager. If enemies.length \=== 0, Success. | | **ELIMINATE_UNIT** | target_def_id | Monitor ON_DEATH events. If victim ID matches, Success. | | **INTERACT** | target_object_id | Monitor ON_INTERACT. If object matches, Success. | | **REACH_ZONE** | zone_coords | Monitor ON_MOVE. If unit ends turn in zone, Success. | | **SURVIVE** | turn_count | Monitor ON_TURN_END. If count reached, Success. | | **ESCORT** | vip_id | If VIP dies, Immediate Failure. | ### **Scripted Events (Triggers)** The GameLoop needs an Event Bus listener that checks these triggers every time an action happens. - **ON_TURN_START**: Checks turnSystem.currentTurn. - **ON_UNIT_SPAWN**: Useful for ambush events. - **ON_HEALTH_PERCENT**: "Boss enters Phase 2 at 50% HP". ### **Rewards** - **unlocks**: Must call MetaProgression.unlockClass(id). - **faction_reputation**: Must update the persistent UserProfile faction standing.