370 lines
16 KiB
JSON
370 lines
16 KiB
JSON
{
|
|
"schema": 1,
|
|
"contract_revision": "p10.3-siltwake-deep-channels-r1",
|
|
"source": {
|
|
"region_catalog_path": "docs/content/REGION_CATALOG.md",
|
|
"region_catalog_blob": "2ca533feb82bdedf6f141c6381319c3a56759ba3",
|
|
"enemy_catalog_path": "docs/content/ENEMY_CATALOG.md",
|
|
"enemy_catalog_blob": "cdf05128cfd1832835712e37c3eb200595983613",
|
|
"equipment_catalog_path": "docs/content/EQUIPMENT_CATALOG.md",
|
|
"equipment_catalog_blob": "3fd34ef951056b02749137f7bff2e66fb94b8375",
|
|
"artifact_catalog_path": "docs/content/ARTIFACT_CATALOG.md",
|
|
"artifact_catalog_blob": "009265f793e646a0ebb45d4018eb6c2d2c6e51e3",
|
|
"profession_catalog_path": "docs/content/PROFESSION_CATALOG.md",
|
|
"profession_catalog_blob": "61e05b21d61e8abca2dc78045c3f2d603ababf82",
|
|
"economy_path": "docs/product/ECONOMY_AND_BALANCE.md",
|
|
"economy_blob": "0cb57e7b44d983f61c27e8b60da43d4728950e33"
|
|
},
|
|
"names_zh": {
|
|
"RG-02": "淤潮沼泽",
|
|
"CTR-R2-01": "淤潮初渡",
|
|
"EQ-057": "慈护屏",
|
|
"EQ-058": "低护围甲",
|
|
"EQ-059": "反印盾",
|
|
"EQ-060": "末邻甲",
|
|
"EQ-061": "晨钟",
|
|
"EQ-062": "屏息面具",
|
|
"EQ-063": "回势剪",
|
|
"EQ-064": "余拍环",
|
|
"EN-R2-11": "渠网寡妇",
|
|
"EN-R2-12": "水闸长老",
|
|
"AR-011": "窄锋阵",
|
|
"AR-012": "长列战团",
|
|
"AR-015": "成对职责",
|
|
"RO-R2-M05-Q0": "寡妇堤道",
|
|
"RO-R2-M05-Q1": "缠丝湾口",
|
|
"RO-R2-M05-Q2": "雾缚织渠",
|
|
"RO-R2-M06-Q0": "缓潮水闸",
|
|
"RO-R2-M06-Q1": "籽闸水流",
|
|
"RO-R2-M06-Q2": "长老育池",
|
|
"RO-R2-M07-Q0": "双闸泊台",
|
|
"RO-R2-M07-Q1": "寡妇钟水",
|
|
"RO-R2-M07-Q2": "溺丝水道"
|
|
},
|
|
"region": {
|
|
"id": "RG-02",
|
|
"name": "Siltwake Fens",
|
|
"preview": "Bind the restored ferry to one shared rule before linked positions and moving safe ground overlap.",
|
|
"response_tags": ["linked_positions", "moving_safe_index", "run_rule"]
|
|
},
|
|
"contract": {
|
|
"id": "CTR-R2-01",
|
|
"name": "First Siltwake Contract",
|
|
"region_id": "RG-02",
|
|
"slice_start_market": 5,
|
|
"slice_end_market": 8,
|
|
"boss_executable": false,
|
|
"preview": "Clear Rounds 5 through 7, choose one shared Artifact rule and preserve the changed Run at Market 8.",
|
|
"response_tags": ["three_round_arc", "artifact_choice", "first_promotion"]
|
|
},
|
|
"equipment": [
|
|
{
|
|
"id": "EQ-057",
|
|
"name": "Mercy Screen",
|
|
"fit": "guard; support",
|
|
"class": "B",
|
|
"effect": "A projectile that would defeat an ally leaves it at the survival floor and breaks this screen.",
|
|
"tradeoff": "The protected ally cannot receive healing for one cadence.",
|
|
"preview": "Prevent one projectile fall, but plan around the protected ally's temporary healing lock.",
|
|
"response_tags": ["projectile_survival", "healing_lock", "linked_care"]
|
|
},
|
|
{
|
|
"id": "EQ-058",
|
|
"name": "Lowguard Apron",
|
|
"fit": "garb; center",
|
|
"class": "B",
|
|
"effect": "When the neighbor ahead is below half vitality, it receives the wearer's first positive Guard gain.",
|
|
"tradeoff": "The wearer receives none of that Guard gain.",
|
|
"preview": "Route one Guard gain forward and leave the center wearer without it.",
|
|
"response_tags": ["directional_guard", "low_vitality", "neighbor_ahead"]
|
|
},
|
|
{
|
|
"id": "EQ-059",
|
|
"name": "Counterseal Shield",
|
|
"fit": "guard; any",
|
|
"class": "B",
|
|
"effect": "The first Mark applied to the wearer becomes Guard and removes that Mark.",
|
|
"tradeoff": "The next Mark on the wearer lasts one cadence longer.",
|
|
"preview": "Invert one Mark now while accepting a longer second Mark later.",
|
|
"response_tags": ["mark_inversion", "guard_gain", "second_mark_risk"]
|
|
},
|
|
{
|
|
"id": "EQ-060",
|
|
"name": "Last Neighbor Plate",
|
|
"fit": "guard; any",
|
|
"class": "B",
|
|
"effect": "With exactly one living neighbor, both allies share the first direct hit.",
|
|
"tradeoff": "The shared hit cannot be intercepted again.",
|
|
"preview": "Build one durable pair to share a direct hit without another protection layer.",
|
|
"response_tags": ["paired_duty", "shared_hit", "single_neighbor"]
|
|
},
|
|
{
|
|
"id": "EQ-061",
|
|
"name": "Early Bell",
|
|
"fit": "charm; any",
|
|
"class": "B",
|
|
"effect": "The wearer's first basic resolves one cadence earlier.",
|
|
"tradeoff": "Its second basic resolves one cadence later.",
|
|
"preview": "Take one early action when source focus matters more than the delayed follow-up.",
|
|
"response_tags": ["early_action", "delayed_followup", "focus_timing"]
|
|
},
|
|
{
|
|
"id": "EQ-062",
|
|
"name": "Held Breath Mask",
|
|
"fit": "garb; slow",
|
|
"class": "B",
|
|
"effect": "The first wind-up survives one interrupt as a delay.",
|
|
"tradeoff": "That delayed action loses every status rider.",
|
|
"preview": "Preserve one important slow action while giving up its attached status effect.",
|
|
"response_tags": ["windup_survival", "interrupt_delay", "status_rider_loss"]
|
|
},
|
|
{
|
|
"id": "EQ-063",
|
|
"name": "Recovery Shears",
|
|
"fit": "kit; any",
|
|
"class": "B",
|
|
"effect": "Defeating the current target removes the wearer's recovery time.",
|
|
"tradeoff": "If the target survives, that recovery time doubles.",
|
|
"preview": "Commit to a visible finishing threshold or accept doubled recovery.",
|
|
"response_tags": ["finish_threshold", "recovery_cut", "survival_wager"]
|
|
},
|
|
{
|
|
"id": "EQ-064",
|
|
"name": "Afterbeat Ring",
|
|
"fit": "charm; tempo",
|
|
"class": "B",
|
|
"effect": "Acting immediately after a neighbor grants one local resource.",
|
|
"tradeoff": "Acting before both neighbors Hinders the wearer.",
|
|
"preview": "Order the wearer behind one neighbor to gain resource without taking an early Hindrance.",
|
|
"response_tags": ["neighbor_timing", "local_resource", "early_hindrance"]
|
|
}
|
|
],
|
|
"enemies": [
|
|
{
|
|
"id": "EN-R2-11",
|
|
"name": "Channel Widow",
|
|
"class": "elite",
|
|
"rule": "Thread two allied positions; healing either transfers the same amount as damage to the other until the pair becomes adjacent.",
|
|
"responses": "Swap the linked pair adjacent, or stagger healing until one linked target is safe.",
|
|
"preview": "A visible thread turns healing into damage until its two positions become adjacent.",
|
|
"response_tags": ["linked_positions", "adjacent_swap", "healing_backlash"]
|
|
},
|
|
{
|
|
"id": "EN-R2-12",
|
|
"name": "Sluice Elder",
|
|
"class": "elite",
|
|
"rule": "Move the safe index forward each cadence; units outside it gain Wet, and three Wet causes a pull.",
|
|
"responses": "Follow the safe index and cleanse before the third Wet stack; reverse the plan below half vitality.",
|
|
"preview": "The numbered safe index moves every cadence and reverses below half vitality.",
|
|
"response_tags": ["moving_safe_index", "wet_threshold", "direction_reversal"]
|
|
}
|
|
],
|
|
"artifacts": [
|
|
{
|
|
"id": "AR-011",
|
|
"name": "Narrow Vanguard",
|
|
"rule": "Deploy one fewer Recruit; the foremost starts Guarded and receives forced-target priority.",
|
|
"tradeoff": "Conflicts with AR-012; the lost footprint is shown before route commitment.",
|
|
"conflict_id": "AR-012",
|
|
"preview": "Trade one footprint for a protected, predictable front target.",
|
|
"response_tags": ["capacity_down", "front_guard", "forced_target"]
|
|
},
|
|
{
|
|
"id": "AR-012",
|
|
"name": "Long Company",
|
|
"rule": "Deploy one additional Recruit up to the core cap; no Recruit starts with Guard.",
|
|
"tradeoff": "Conflicts with AR-011; the expanded unguarded line is shown before commitment.",
|
|
"conflict_id": "AR-011",
|
|
"preview": "Gain one footprint when roster breadth outweighs opening protection.",
|
|
"response_tags": ["capacity_up", "unguarded_start", "roster_breadth"]
|
|
},
|
|
{
|
|
"id": "AR-015",
|
|
"name": "Paired Duties",
|
|
"rule": "Prepare partitions the line into adjacent pairs; enable and Guard sharing inside each pair gain priority.",
|
|
"tradeoff": "Conflicts with AR-016; sharing across pair boundaries is delayed one cadence.",
|
|
"conflict_id": "AR-016",
|
|
"preview": "Strengthen adjacent pairs while accepting slower support across pair boundaries.",
|
|
"response_tags": ["adjacent_pairs", "guard_sharing", "cross_pair_delay"]
|
|
}
|
|
],
|
|
"artifact_draft": {
|
|
"id": "AD-R2-M07-01",
|
|
"offer_ids": ["AR-011", "AR-012", "AR-015"],
|
|
"created_after_round": 6,
|
|
"apply_from_market": 7
|
|
},
|
|
"routes": [
|
|
{
|
|
"id": "RO-R2-M05-Q0",
|
|
"name": "Widowbank Causeway",
|
|
"market_index": 5,
|
|
"round_index": 5,
|
|
"risk": 0,
|
|
"enemy_ids": ["EN-R2-11", "EN-R2-02"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-11"}, {"tick": 18, "enemy_id": "EN-R2-02"}],
|
|
"reward_coin": 30,
|
|
"recovery_coin": 9,
|
|
"pressure": "Linked healing requires an adjacent swap before care.",
|
|
"failure_cause": "Healing one separated target damaged its linked partner into danger.",
|
|
"preview": "Bring the linked positions adjacent before committing the next heal.",
|
|
"response_tags": ["adjacent_swap", "healing_backlash", "linked_care"]
|
|
},
|
|
{
|
|
"id": "RO-R2-M05-Q1",
|
|
"name": "Threaded Inlet",
|
|
"market_index": 5,
|
|
"round_index": 5,
|
|
"risk": 1,
|
|
"enemy_ids": ["EN-R2-11", "EN-R2-09"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-11"}, {"tick": 12, "enemy_id": "EN-R2-09"}],
|
|
"reward_coin": 37,
|
|
"recovery_coin": 11,
|
|
"pressure": "Widow link and Medic sustain compete for focus timing.",
|
|
"failure_cause": "The line treated linked damage while the Medic restored the thread source.",
|
|
"preview": "Focus one source before opening the linked care window.",
|
|
"response_tags": ["focus_source", "linked_positions", "enemy_healing"]
|
|
},
|
|
{
|
|
"id": "RO-R2-M05-Q2",
|
|
"name": "Fogbound Loom",
|
|
"market_index": 5,
|
|
"round_index": 5,
|
|
"risk": 2,
|
|
"enemy_ids": ["EN-R2-11", "EN-R2-10", "EN-R2-03"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-11"}, {"tick": 9, "enemy_id": "EN-R2-10"}, {"tick": 21, "enemy_id": "EN-R2-03"}],
|
|
"reward_coin": 44,
|
|
"recovery_coin": 13,
|
|
"pressure": "A guarded center bait must not strand the linked pair.",
|
|
"failure_cause": "The Fogjaw bait separated the Widow's linked positions before healing.",
|
|
"preview": "Guard the center while preserving one adjacent linked pair.",
|
|
"response_tags": ["center_protection", "adjacent_pairs", "reveal_window"]
|
|
},
|
|
{
|
|
"id": "RO-R2-M06-Q0",
|
|
"name": "Patient Sluice",
|
|
"market_index": 6,
|
|
"round_index": 6,
|
|
"risk": 0,
|
|
"enemy_ids": ["EN-R2-12", "EN-R2-06"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-12"}, {"tick": 17, "enemy_id": "EN-R2-06"}],
|
|
"reward_coin": 32,
|
|
"recovery_coin": 10,
|
|
"pressure": "Late cleanse must follow the disclosed moving safe index.",
|
|
"failure_cause": "An early cleanse strengthened Hindrance before the third Wet stack pulled the line.",
|
|
"preview": "Follow the index, then cleanse after the status midpoint and before three Wet.",
|
|
"response_tags": ["delay_cleanse", "moving_safe_index", "wet_threshold"]
|
|
},
|
|
{
|
|
"id": "RO-R2-M06-Q1",
|
|
"name": "Seedgate Current",
|
|
"market_index": 6,
|
|
"round_index": 6,
|
|
"risk": 1,
|
|
"enemy_ids": ["EN-R2-12", "EN-R2-08"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-12"}, {"tick": 10, "enemy_id": "EN-R2-08"}],
|
|
"reward_coin": 39,
|
|
"recovery_coin": 12,
|
|
"pressure": "Seed movement must land inside the next safe index.",
|
|
"failure_cause": "The seed escape crossed outside the new safe index and completed three Wet.",
|
|
"preview": "Time the defeat so its escape step lands on the disclosed next index.",
|
|
"response_tags": ["deliberate_movement", "moving_safe_index", "countdown"]
|
|
},
|
|
{
|
|
"id": "RO-R2-M06-Q2",
|
|
"name": "Elder's Nursery",
|
|
"market_index": 6,
|
|
"round_index": 6,
|
|
"risk": 2,
|
|
"enemy_ids": ["EN-R2-12", "EN-R2-09", "EN-R2-04"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-12"}, {"tick": 8, "enemy_id": "EN-R2-09"}, {"tick": 20, "enemy_id": "EN-R2-04"}],
|
|
"reward_coin": 46,
|
|
"recovery_coin": 14,
|
|
"pressure": "Safe-index reversal overlaps sustain and indexed mud.",
|
|
"failure_cause": "The line followed the old direction through mud while the Medic sustained the Elder.",
|
|
"preview": "Focus sustain before the Elder reverses the safe-index direction.",
|
|
"response_tags": ["focus_source", "direction_reversal", "indexed_hazard"]
|
|
},
|
|
{
|
|
"id": "RO-R2-M07-Q0",
|
|
"name": "Twin-Gate Mooring",
|
|
"market_index": 7,
|
|
"round_index": 7,
|
|
"risk": 0,
|
|
"enemy_ids": ["EN-R2-11", "EN-R2-12"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-11"}, {"tick": 16, "enemy_id": "EN-R2-12"}],
|
|
"reward_coin": 34,
|
|
"recovery_coin": 10,
|
|
"pressure": "Adjacent pairs must follow a moving safe band.",
|
|
"failure_cause": "Cross-pair care arrived after the linked pair left the safe index.",
|
|
"preview": "Keep linked partners adjacent while the pair follows the safe index.",
|
|
"response_tags": ["adjacent_pairs", "moving_safe_index", "guard_sharing"]
|
|
},
|
|
{
|
|
"id": "RO-R2-M07-Q1",
|
|
"name": "Widow's Bellwater",
|
|
"market_index": 7,
|
|
"round_index": 7,
|
|
"risk": 1,
|
|
"enemy_ids": ["EN-R2-11", "EN-R2-12", "EN-R2-09"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-11"}, {"tick": 9, "enemy_id": "EN-R2-12"}, {"tick": 19, "enemy_id": "EN-R2-09"}],
|
|
"reward_coin": 41,
|
|
"recovery_coin": 13,
|
|
"pressure": "Source focus must preserve the linked care window.",
|
|
"failure_cause": "The Medic outlasted focus while linked healing echoed across an unsafe index.",
|
|
"preview": "Interrupt sustain, then use the adjacent care window before the index moves.",
|
|
"response_tags": ["focus_source", "linked_care", "moving_safe_index"]
|
|
},
|
|
{
|
|
"id": "RO-R2-M07-Q2",
|
|
"name": "Drowned Threadway",
|
|
"market_index": 7,
|
|
"round_index": 7,
|
|
"risk": 2,
|
|
"enemy_ids": ["EN-R2-11", "EN-R2-12", "EN-R2-10"],
|
|
"wave_order": [{"tick": 0, "enemy_id": "EN-R2-11"}, {"tick": 8, "enemy_id": "EN-R2-12"}, {"tick": 18, "enemy_id": "EN-R2-10"}],
|
|
"reward_coin": 48,
|
|
"recovery_coin": 15,
|
|
"pressure": "Reveal, linked positions and safe-index movement overlap.",
|
|
"failure_cause": "The reveal chase broke adjacency and left the center outside the reversed safe index.",
|
|
"preview": "Move as one paired line and reserve a short-reach answer for the reveal.",
|
|
"response_tags": ["deliberate_movement", "adjacent_pairs", "short_reach"]
|
|
}
|
|
],
|
|
"markets": [
|
|
{
|
|
"market_index": 5,
|
|
"round_index": 5,
|
|
"cleared_rounds_before": 4,
|
|
"line_capacity": 6,
|
|
"offer_level": 2,
|
|
"route_ids": ["RO-R2-M05-Q0", "RO-R2-M05-Q1", "RO-R2-M05-Q2"],
|
|
"required_equipment_ids": ["EQ-057", "EQ-060"],
|
|
"first_order_changer_id": "EN-R2-11",
|
|
"milestone_disclosure": "linked_positions"
|
|
},
|
|
{
|
|
"market_index": 6,
|
|
"round_index": 6,
|
|
"cleared_rounds_before": 5,
|
|
"line_capacity": 6,
|
|
"offer_level": 2,
|
|
"route_ids": ["RO-R2-M06-Q0", "RO-R2-M06-Q1", "RO-R2-M06-Q2"],
|
|
"required_equipment_ids": ["EQ-061", "EQ-062"],
|
|
"first_order_changer_id": "EN-R2-12",
|
|
"milestone_disclosure": "artifact_after_victory"
|
|
},
|
|
{
|
|
"market_index": 7,
|
|
"round_index": 7,
|
|
"cleared_rounds_before": 6,
|
|
"line_capacity": 7,
|
|
"offer_level": 3,
|
|
"route_ids": ["RO-R2-M07-Q0", "RO-R2-M07-Q1", "RO-R2-M07-Q2"],
|
|
"required_equipment_ids": ["EQ-063", "EQ-064"],
|
|
"first_order_changer_id": "EN-R2-12",
|
|
"milestone_disclosure": "first_promotion"
|
|
}
|
|
]
|
|
}
|