From b64e24e43dd7499d5364a034713470030b2860e7 Mon Sep 17 00:00:00 2001 From: Addisonstumpf Date: Sat, 18 Jan 2025 10:52:10 -0600 Subject: [PATCH] Add Ages Unwound (#1422) * Add Ages Unwound * Chaos tokens, and set fix for TRO locations * final scenario name for tokens * correcting campaign filenames --- campaigns/zau/01_au_prologue.json | 76 + campaigns/zau/02_night_of_fire.json | 194 + campaigns/zau/03_an_unknown_benefactor.json | 125 + campaigns/zau/04_the_myriad_gentleman.json | 222 + campaigns/zau/05_a-world_torn_down.json | 1449 ++++++ campaigns/zau/06_unstuck.json | 312 ++ campaigns/zau/07_a_year_to_plan.json | 1077 +++++ campaigns/zau/08_a_world_torn_down_again.json | 810 ++++ campaigns/zau/09_time_runs_out.json | 373 ++ campaigns/zau/10_au_epilogue.json | 108 + campaigns/zau/campaign.json | 363 ++ campaigns/zau/core.json | 59 + cards/zau.json | 16 +- chaos_tokens.json | 430 ++ encounter_sets.json | 3988 ++++++++--------- package.json | 1 + scripts/schemaValidate.js | 1 + 17 files changed, 7602 insertions(+), 2002 deletions(-) create mode 100644 campaigns/zau/01_au_prologue.json create mode 100644 campaigns/zau/02_night_of_fire.json create mode 100644 campaigns/zau/03_an_unknown_benefactor.json create mode 100644 campaigns/zau/04_the_myriad_gentleman.json create mode 100644 campaigns/zau/05_a-world_torn_down.json create mode 100644 campaigns/zau/06_unstuck.json create mode 100644 campaigns/zau/07_a_year_to_plan.json create mode 100644 campaigns/zau/08_a_world_torn_down_again.json create mode 100644 campaigns/zau/09_time_runs_out.json create mode 100644 campaigns/zau/10_au_epilogue.json create mode 100644 campaigns/zau/campaign.json create mode 100644 campaigns/zau/core.json diff --git a/campaigns/zau/01_au_prologue.json b/campaigns/zau/01_au_prologue.json new file mode 100644 index 000000000..64639bfe4 --- /dev/null +++ b/campaigns/zau/01_au_prologue.json @@ -0,0 +1,76 @@ +{ + "id": "au_prologue", + "scenario_name": "Prologue", + "full_name": "Prologue", + "header": "", + "type": "interlude", + "icon": "zau", + "setup": [ + "intro", + "add_assistance", + "check_solo_investigator" + ], + "steps": [ + { + "id": "check_solo_investigator", + "hidden": true, + "type": "branch", + "condition": { + "type": "scenario_data", + "scenario_data": "player_count", + "options": [ + { + "numCondition": 1, + "steps": ["solo_rules"] + } + ] + } + }, + { + "id": "solo_rules", + "title": "Changes for Solo Play", + "type": "rule_reminder", + "text": "A few effects in Ages Unwound will instruct you to interact with another investigator's deck. To simulate this in true solo play, construct a dummy deck out of the following cards:", + "bullets": [ + { + "text": "Guardian: .45 Automatic, Beat Cop, Emergency Aid, On the Hunt, Vicious Blow" + }, + { + "text": "Seeker: Hawk-Eye Folding Camera, Old Book of Lore, Barricade, Connect the Dots, Deduction" + }, + { + "text": "Rogue: Burglary, Lockpicks, Narrow Escape, Sneak Attack, Quick Thinking" + }, + { + "text": "Mystic: Rite of Seeking, Shrivelling, Dark Prophesy, Drawn to the Flame, Fearless" + }, + { + "text": "Survivor: Gravedigger's Shovel, Rabbit's Foot, Hiding Spot, Scrounge for Supplies, Rise to the Occasion" + } + ], + "example": "Remove any cards of your class from this deck, as well as any cards you have at least one copy of in your deck. If you do not own any of the cards on this list, make appropriate replacements from your collection. (Each class has 2 assets, 2 events and 1 skill, representing the core of that class. Avoid must-have or always-useful cards such as Lone Wolf.)\n Whenever you are instructed to interact with another investigator's deck, instead interact with the dummy deck. When a card from the dummy deck would leave play, instead shuffle it back into the dummy deck." + }, + { + "id": "intro", + "type": "story", + "text": "The night's chill has reached your bones, soaking through your layers of warm clothing and settling on your soul. Your eyes, by now accustomed to the dim moonlight, spot no movement on the abandoned street. It's long past midnight. It must be past 1 am by now. \nThe call had been rather questionable - a muffled, distorted voice, entreating you to meet it at midnight, that the fate of the world depended on it. Outlandish, yes, but the caller knew things, things that almost no-one knows about you. It wasn't quite blackmail, but rather a promise of trustworthiness. A promise that everything would be explained soon. \nYou feel a little foolish as you trudge home. Like some cruel trick has been played upon you. Probably you shouldn't have gone, but something made you want to believe the voice on the other end of the phone. Foolish. \nBright, flickering light almost blinds you. You blink rapidly, and as your eyes adjust the blinding hues resolve into an image of fire and fury. Your home is ablaze, an inferno so fierce and hot that it couldn't not be deliberate. Somebody trying to kill you? But why? \nAnd if this is an attempt on your life, what does that make the peculiar call you received earlier this evening?", + "narration": { + "id": "zau.prologue.intro", + "name": "Prologue", + "lang": [] + } + }, + { + "id": "add_assistance", + "text": "Mark 1 Strange Assistance in your Campaign Log. Someone just saved your life.", + "effects": [ + { + "type": "campaign_log_count", + "section": "strange_assistance", + "operation": "add", + "value": 1 + } + ] + } + ] +} \ No newline at end of file diff --git a/campaigns/zau/02_night_of_fire.json b/campaigns/zau/02_night_of_fire.json new file mode 100644 index 000000000..04cec055c --- /dev/null +++ b/campaigns/zau/02_night_of_fire.json @@ -0,0 +1,194 @@ +{ + "id": "night_of_fire", + "scenario_name": "Night of Fire", + "header": "Scenario I", + "full_name": "Scenario I: Night of Fire", + "chaos_bag_card": "zau_00001", + "chaos_bag_card_text": "[skull]: -X. X is half the number of locations in the Arkham Streets deck (rounded down).\n[cultist]: Reveal another token. If you fail, after this test ends, move to a new Arkham Streets location.\n[tablet]: -3 (-1 instead if you have moved this turn).", + "chaos_bag_card_back_text": "[skull]: -X. X is the number of locations in the Arkham Streets deck .\n[cultist]: Reveal another token. If you fail, after this test ends, move to a new Arkham Streets location.\n[tablet]: -4 (-2 instead if you have moved this turn).", + "setup": [ + "intro", + "$check_tarot_reading", + "gather_encounter_sets", + "set_aside_cards", + "setup_locations", + "encounter_deck", + "arkham_streets_rule", + "$play_scenario" + ], + "rules": [ + ], + "steps": [ + { + "id": "intro", + "type": "story", + "text": "Your mournful reverie is broken by movement. The pyre that was once your home illuminates three figures, strolling towards you. They seem to be holding... \nA staccato burst of noise shatters the night's quiet. Gunfire. Definitely someone trying to kill you, then. " + }, + { + "id": "gather_encounter_sets", + "title": "Setup", + "type": "encounter_sets", + "encounter_sets": [ + "zau_night_of_fire", + "zau_agents_of_aforgomon", + "zau_nyctophobia", + "zau_thugs", + "zau_unravelling_years" + ] + }, + { + "id": "set_aside_cards", + "text": "Set Myriad Assassin, Irregulars, each copy of Eternity's Sentinel, each copy of Time Spirit and the Agents of Aforgomon encounter set aside, out of play." + }, + { + "id": "setup_locations", + "text": "Put the Rivertown location into play. (It is on the revealed side of one of the Arkham Streets locations.) Each investigator begins play at Rivertown. \nShuffle the remaining locations into a separate deck, Arkham Streets side faceup. (See \"Arkham Streets\", below.)" + }, + { + "id": "encounter_deck", + "text": "Shuffle the remainder of the encounter cards to build the encounter deck." + }, + { + "id": "arkham_streets_rule", + "type": "rule_reminder", + "title": "Arkham Streets", + "text": "Several scenario effects will ask you to move to a new Arkham Streets location. To do this, put the top card of the Arkham Streets deck into play facedown, then move to it. If there are no locations remaining in the Arkham Streets deck, cancel the effect of the move. \nNote that once an Arkham Streets location is in play, its connections behave normally. It may not be possible to move back to your previous location, or for another investigator at your previous location to follow you." + }, + { + "id": "resolution_1", + "type": "resolution", + "resolution": "R1" + }, + { + "id": "new_quarry", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "new_quarry", + "text": "your hunters found a new quarry." + } + ] + }, + { + "id": "survived_night_of_fire", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "survived_night_of_fire", + "text": "the investigators survived the night of fire." + } + ] + }, + { + "id": "slew_observer", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "slew_observer", + "text": "the investigators slew their strange observer." + } + ] + }, + { + "id": "escaped_night_of_fire", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "escaped_night_of_fire", + "text": "the investigators sescaped the night of fire." + } + ] + }, + { + "id": "earn_xp", + "text": "Each investigator earns experience equal to the Victory X value of each card in the victory display.", + "type": "input", + "input": { + "type": "counter", + "text": "Victory display:", + "effects": [ + { + "type": "earn_xp", + "investigator": "all" + } + ] + } + }, + { + "id": "earn_xp_bonus_2", + "text": "Each investigator earns experience equal to the Victory X value of each card in the victory display. Each investigator earns 2 bonus experience from their desperate flight.", + "type": "input", + "input": { + "type": "counter", + "text": "Victory display:", + "effects": [ + { + "type": "earn_xp", + "investigator": "all", + "bonus": 2 + } + ] + } + } + ], + "resolutions": [ + { + "id": "no_resolution", + "title": "No resolution was reached", + "description": "Each investigator was defeated", + "investigator_status": [ + "eliminated", + "physical", + "mental" + ], + "steps": [ + "resolution_1" + ] + }, + { + "id": "R1", + "hidden": true, + "title": "Resolution 1", + "text": "Tired, beaten, broken, you collapse to the ground. In the distance, the funeral pyre of your home still burns, lighting up the night. With the figures pursuing you endlessly, and the nightmarish creatures accompanying them, you can only assume that you'll shortly be going down with your ship. \nThat said, you've been lying here a while now, and no-one's come to put one last bullet into you. With Herculean effort, you pull yourself to your feet, only to find the streets around you... empty. There are still rattles of gunfire in the distance - your pursuers finding a new target, perhaps?", + "steps": [ + "new_quarry", + "earn_xp", + "$upgrade_decks" + ] + }, + { + "id": "R2", + "title": "Resolution 2", + "text": "Slowly, the streets are filling. Young people in sports attire pursue early-morning exercise, and men in suits hurry towards some office or other. Of the nightmare creature that pursued you, no sign. For now, at least, you've escaped its clutches.", + "steps": [ + "survived_night_of_fire", + "earn_xp_bonus_2", + "$upgrade_decks" + ] + }, + { + "id": "R3", + "title": "Resolution 3", + "text": "With the fall of the creature leading your pursuit, the rest of your hunters vanish into the night. The body you are left with quickly dissolves, leaving a brown sludge that someone whose night had been less traumatic might mistake for soil. Someone, or something, must have sent this monster after you. But who, and why?", + "steps": [ + "slew_observer", + "earn_xp", + "$upgrade_decks" + ] + }, + { + "id": "R4", + "title": "Resolution 4", + "text": "You come to a halt, your lungs and limbs screaming in protest. You take several deep breaths, ragged gasps tearing through the silence of the night. \nSilence... for the first time in hours, no distant shout or rattle of gunfire follows you. You made it.", + "steps": [ + "escaped_night_of_fire", + "earn_xp_bonus_2", + "$upgrade_decks" + ] + } + ] + } \ No newline at end of file diff --git a/campaigns/zau/03_an_unknown_benefactor.json b/campaigns/zau/03_an_unknown_benefactor.json new file mode 100644 index 000000000..948a57058 --- /dev/null +++ b/campaigns/zau/03_an_unknown_benefactor.json @@ -0,0 +1,125 @@ +{ + "id": "an_unknown_benefactor", + "scenario_name": "An Unknown Benefactor", + "full_name": "Interlude I: An Unknown Benefactor", + "header": "Interlude I", + "type": "interlude", + "icon": "zau", + "setup": [ + "intro", + "assist_choice" + ], + "steps": [ + { + "id": "intro", + "type": "story", + "text": "Blessedly, the morning has come. Tiredness weighs you down like lead, and you want nothing more than to sink into your bed, but your bed perished in flames and sleep is a distant dream. Not to mention that with armed thugs still potentially after your head, you're not sure you'd sleep a wink. \nYou decide to settle for a hot breakfast and a pot of strong coffee at Velma's. While you wait for your food, a confused-looking waitress approaches your table, depositing on it a brown paper package with an envelope taped to the top. \"This is for you,\" she adds unnecessarily.\nThe letter in the envelope is short and to the point: \nThey wish to see you dead. I do not. This may help. \nGod knows, you could use an ally, and certainly somebody out there seems to be aiding you from afar. But you hesitate - it could be a trap, and if someone does want to help you, why not show their face?" + }, + { + "id": "assist_choice", + "text": "The investigators must decide (choose one):", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "reject", + "text": "I don't know what this is, and I don't trust it.", + "steps": [ + "going_it_alone" + ] + }, + { + "id": "accept", + "text": "We're out of our depth, here. We need all the help we can get.", + "steps": [ + "leap_of_faith" + ] + } + ] + } + }, + { + "id": "going_it_alone", + "text": "You shovel toast and eggs into your mouth, studiously ignoring the package before you. On your way out, you toss it into the trash.", + "steps": [ + "offer_declined", + "add_tablet" + ] + }, + { + "id": "leap_of_faith", + "text": "If someone wants to help prevent your untimely death, you have no objections. You carefully unwrap the package before you...", + "steps": [ + "offer_accepted", + "add_cultist" + ] + }, + { + "id": "offer_declined", + "text": "In your Campaign Log, record that the investigators declined an offer of help.", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "offer_declined", + "text": "the investigators declined an offer of help." + } + ] + }, + { + "id": "add_tablet", + "text": "Remove each [cultist] token from the chaos bag. Add 1 [tablet] token to the chaos bag.", + "effects": [ + { + "type": "remove_chaos_token", + "tokens": [ + "cultist" + ] + }, + { + "type": "add_chaos_token", + "tokens": [ + "tablet" + ] + } + ] + }, + { + "id": "offer_accepted", + "text": "In your Campaign Log, mark 1 Strange Assistance and record that the investigators accepted an offer of help.", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "offer_accepted", + "text": "the investigators accepted an offer of help." + }, + { + "type": "campaign_log_count", + "section": "strange_assistance", + "operation": "add", + "value": 1 + } + ] + }, + { + "id": "add_cultist", + "text": "Remove each [tablet] token from the chaos bag. Add 1 [cultist] token to the chaos bag.", + "effects": [ + { + "type": "remove_chaos_token", + "tokens": [ + "tablet" + ] + }, + { + "type": "add_chaos_token", + "tokens": [ + "cultist" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/campaigns/zau/04_the_myriad_gentleman.json b/campaigns/zau/04_the_myriad_gentleman.json new file mode 100644 index 000000000..2e660c96f --- /dev/null +++ b/campaigns/zau/04_the_myriad_gentleman.json @@ -0,0 +1,222 @@ +{ + "id": "the_myriad_gentleman", + "scenario_name": "The Myriad Gentleman", + "header": "Scenario II", + "full_name": "Scenario II: The Myriad Gentleman", + "chaos_bag_card": "zau_00023", + "chaos_bag_card_text": "[skull]: -1 (-3 instead if there is a [[Myriad]] enemy at your location).\n[cultist]: -1. If you succeed, deal 1 damage to a [[Myriad]] enemy at your location.\n[tablet]: -2. If you fail and it is Act 2 or 3, spawn a copy of The Myriad Gentleman engaged with you.", + "chaos_bag_card_back_text": "[skull]: -2 (-4 instead if there is a [[Myriad]] enemy at your location).\n[cultist]: -3. If you succeed, deal 1 damage to a [[Myriad]] enemy at your location.\n[tablet]: -3. If you fail and it is Act 2 or 3, spawn a copy of The Myriad Gentleman engaged with you.", + "icon": "zau_myriad_gentleman", + "setup": [ + "check_intro_offer", + "$check_tarot_reading", + "gather_encounter_sets", + "setup_locations", + "set_aside_cards", + "encounter_deck", + "copy_rule", + "$play_scenario" + ], + "rules": [ + ], + "steps": [ + { + "id": "check_intro_offer", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "offer_accepted", + "options": [ + { + "boolCondition": true, + "steps": ["intro_1", "intro_3"] + }, + { + "boolCondition": false, + "steps": ["check_intro_offer_2"] + } + ] + } + }, + { + "id": "check_intro_offer_2", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "offer_declined", + "options": [ + { + "boolCondition": true, + "steps": ["intro_2", "starting_doom", "intro_3"] + } + ] + } + }, + { + "id": "intro_1", + "type": "story", + "text": "The package contains a wealth of information - newspaper clippings, mostly, accompanied by sheets of typed notes. The information all concerns one Joseph Baxter, a self-made millionaire with a manor house on the outskirts of Arkham. His relevance to you is unclear, until you find a series of letters between Joseph and the Sheldon gang, negotiating pay for a variety of shady work, including the 'cleaning up' of, well, you. It's not clear exactly why he wanted you dead - he refers to you as 'a thorn in his side', but you'd not even heard of the man before today. Curious. And terrifying. Mostly the latter, come to think of it." + }, + { + "id": "intro_2", + "type": "story", + "text": "With a full stomach and a caffeine buzz, you set out to determine just why you were targeted. It's slow work, tapping any resources you can find, but it pays dividends: buried in today's Arkham Advertiser is a report of three men arrested in your neighbourhood in the early hours of the morning, suspected to be members of the Sheldon gang. A contact of yours manages to dig up another useful tidbit: the Sheldon gang have been doing a considerable amount of work for a new benefactor, one Joseph Baxter. It's not much to show for a morning's work, but it's a start." + }, + { + "id": "starting_doom", + "text": "Place 1 doom on the current agenda." + }, + { + "id": "intro_3", + "type": "story", + "text": "The gate to Joseph Baxter's mansion is closed and barred, but you've been through too much to let that deter you. You scale a low wall, dropping over it onto a fine manicured lawn. It's time to meet your would-be executioner." + }, + { + "id": "gather_encounter_sets", + "title": "Setup", + "type": "encounter_sets", + "encounter_sets": [ + "zau_myriad_gentleman", + "zau_shifting_reality", + "zau_unravelling_years", + "agents_of_yog", + "locked_doors" + ] + }, + { + "id": "setup_locations", + "text": "Put the Lawn, Hedge Maze, Ornate Fountain and Stables locations into play. Each investigator begins play at the Lawn." + }, + { + "id": "set_aside_cards", + "text": "Set each remaining location aside, out of play, along with each copy of The Myriad Gentleman, Ex Uno Plures, They Just Keep Coming, Not Welcome Here, Aforgomon's Blade and Gaze of Aforgomon." + }, + { + "id": "encounter_deck", + "text": "Shuffle the remainder of the encounter cards to build the encounter deck." + }, + { + "id": "copy_rule", + "type": "rule_reminder", + "title": "Copies of Enemies", + "text": "During this scenario, investigators may be instructed to spawn copies of a displayed enemy. To do this, that investigator places the top card of their deck into play in their threat area, treating it as a copy of the specified enemy until it leaves play (if it is ever unclear who should do this, the lead investigator does so). When that enemy leaves play, the card's owner places it on the bottom of their deck." + }, + { + "id": "resolution_2", + "type": "resolution", + "resolution": "R2" + }, + { + "id": "learnt_of_ritual", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "learnt_of_ritual", + "text": "the investigators learnt of the Myriad's ritual." + } + ] + }, + { + "id": "add_aforgomons_blade", + "text": "If the Myriad Gentleman (Master of the House) is in the victory display, any one investigator may choose to add Aforgomon's Blade to their deck. If an investigator chooses to include Aforgomon's Blade in their deck, they must also add the Gaze of Aforgomon weakness to their deck. These cards do not count towards that investigator's deck size.", + "effects": [ + { + "type": "add_card", + "investigator": "choice", + "card": "zau_00042" + } + ] + }, + { + "id": "check_aforgomons_blade", + "hidden": true, + "type": "branch", + "condition": { + "type": "has_card", + "investigator": "each", + "card": "zau_00042", + "options": [ + { + "boolCondition": true, + "effects": [ + { + "type": "add_card", + "investigator": "$input_value", + "card": "zau_00043" + } + ] + } + ] + } + }, + { + "id": "fled_manor", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "fled_manor", + "text": "the investigators fled the Gentleman's manor." + } + ] + }, + { + "id": "earn_xp", + "text": "Each investigator earns experience equal to the Victory X value of each card in the victory display.", + "type": "input", + "input": { + "type": "counter", + "text": "Victory display:", + "effects": [ + { + "type": "earn_xp", + "investigator": "all" + } + ] + } + } + ], + "resolutions": [ + { + "id": "no_resolution", + "title": "No resolution was reached", + "description": "Each investigator was defeated", + "investigator_status": [ + "eliminated", + "physical", + "mental" + ], + "steps": [ + "resolution_2" + ] + }, + { + "id": "R1", + "title": "Resolution 1", + "text": "Joseph Baxter, the man whose house you've invaded, is part of a cult dedicated to an entity known as Aforgomon. Quite a large part of it, judging by the quantity of him you've encountered today. They're still coming for you though, endless waves of an impossible man, and you have no choice but to make your escape. \nYou've found very little of why he wants you dead - a scrawled note linking you to an event in Cairo, and a letter from the Sheldon gang promising you'll soon be dealt with. \nYou've never even been to Cairo. Perhaps he's mad. Then again, considering what you've seen today, perhaps you are. \nAs the sun dips below the horizon, you consider your options. You could go to the police, but there's no chance they'd believe you. You could walk away, just disappear into the night... but you've seen what this cult can do, and you can't stand back and let them carry out their plan. And besides, insane or not, they still want you dead. Taking the fight to them seems more appealing than simply being hunted down. \nYou have a location, and no time to lose. Better get to it.", + "steps": [ + "learnt_of_ritual", + "add_aforgomons_blade", + "check_aforgomons_blade", + "earn_xp", + "$upgrade_decks" + ] + }, + { + "id": "R2", + "hidden": true, + "title": "Resolution 2", + "text": "You barely remember your flight from Joseph Baxter's manor house. The wounds you nurse are severe, but you made it out alive, which is something. \nYou don't like what's happening here, not at all. Between the things that pursued you last night, and the unnatural proliferation of the man you faced today... It's enough to make you question your own sanity. Certainly more than you can take to the police, lest you end up in the local asylum. Which means, you conclude with a sinking feeling, that the only force in a position to stand against them is you.", + "steps": [ + "fled_manor", + "add_aforgomons_blade", + "check_aforgomons_blade", + "earn_xp", + "$upgrade_decks" + ] + } + ] + } \ No newline at end of file diff --git a/campaigns/zau/05_a-world_torn_down.json b/campaigns/zau/05_a-world_torn_down.json new file mode 100644 index 000000000..0512f8764 --- /dev/null +++ b/campaigns/zau/05_a-world_torn_down.json @@ -0,0 +1,1449 @@ +{ + "id": "a_world_torn_down", + "scenario_name": "A World Torn Down", + "header": "Scenario III", + "full_name": "Scenario III: A World Torn Down", + "chaos_bag_card": "zau_00048", + "chaos_bag_card_text": "[skull]: -X. X is half the number of actions you have remaining (rounded up).\n[cultist]: -3. If you succeed, you get +1 skill value during skill tests until the end of the round.\n[tablet]: -3. If you fail, you get -1 skill value during skill test until the end of the round.\n[elder_thing]: Reveal another token. If you fail, and it is your turn, end your turn.", + "chaos_bag_card_back_text": "[skull]: -X. X is the number of actions you have remaining.\n[cultist]: -5. If you succeed, you get +1 skill value during skill tests until the end of the round.\n[tablet]: -5. If you fail, you get -1 skill value during skill test until the end of the round.\n[elder_thing]: Reveal another token. If it is your turn, end your turn after resolving this skill test.", + "icon": "zau_world_torn_down", + "setup": [ + "check_fled", + "$check_tarot_reading", + "gather_encounter_sets", + "set_aside_cards", + "setup_locations", + "encounter_deck", + "action_rule", + "$haunted_rule", + "time_rule", + "time_ahc_rule", + "$play_scenario" + ], + "steps": [ + { + "id": "check_fled", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "fled_manor", + "options": [ + { + "boolCondition": true, + "steps": ["intro_1"] + }, + { + "boolCondition": false, + "steps": ["intro_2"] + } + ] + } + }, + { + "id": "intro_1", + "type": "story", + "text": "Lacking other leads to pursue, you stay awhile to observe the Myriad Gentleman's home. You spend a long time waiting, watching the property's exits for any sign of movement. Sure enough, as the sun sets, a convoy of vehicles sets out from the manor. You follow as best you can, careful not to be spotted. \nBefore too long, the Myriad Gentleman reaches their destination. A school, by the look of it. You go to follow them, but before you're able to make it inside, the school is suffused with a dim green glow, rebuffing you, as a muffled chanting flows from the building..." + }, + { + "id": "intro_2", + "type": "story", + "text": "Mount Hollyoke Elementary was condemned by Arkham's town council several years ago, but for unknown reasons was never demolished. This seems to suit the Myriad just fine - they've repurposed it to their own ends. A ritual takes place here tonight - one that could spell the end of everything and everywhen." + }, + { + "id": "gather_encounter_sets", + "title": "Setup", + "type": "encounter_sets", + "encounter_sets": [ + "zau_world_torn_down", + "zau_night_of_the_ritual", + "zau_agents_of_aforgomon", + "zau_myriad", + "zau_nyctophobia", + "zau_thugs", + "zau_unleashed_chaos" + ] + }, + { + "id": "setup_locations", + "text": "Put Front Gates, Side Building, Children's Playground, Sports Field, Front Hallway and Rear Corridors into play. Each investigator begins play at the Front Gates." + }, + { + "id": "set_aside_cards", + "text": "Set each other location aside, out of play, along with Hound of Unmaking, Unstable Warding, each copy of Unleashed Chaos and Stirring Titan, Unstable Energies and The Myriad Gentleman (The High Priest) " + }, + { + "id": "encounter_deck", + "text": "Shuffle the remainder of the encounter cards to build the encounter deck." + }, + { + "id": "action_rule", + "type": "rule_reminder", + "title": "Gaining and Losing Actions", + "text": "As time becomes increasingly unstable, the number of actions you may take on a turn may also change.", + "bullets": [ + { + "text": "Several effects refer to standard actions. A standard action is any action that does not have a limitation on its use, regardless of its source. For example, Finn Edwards has a copy of Leo De Luca in play. He has four standard actions on his turns - the default three and an additional action from Leo - as well as an additional, non-standard action from his investigator ability that can only be used to evade." + }, + { + "text": "Each investigator is considered to gain their actions for the next round in step 4.2 of the upkeep phase. Effects that grant you additional actions on each of your turns are also considered to grant you actions at this point. This means that effects after aninvestigator's turn cannot make them lose actions for the nextround, unless they happen after the the upkeep phase. For example, Finn Edwards is attacked by a Chronophage in the enemy phase. This would cause him to lose an action, but as his turn has ended he has no actions remaining. During the upkeep phase of the same round, he draws the weakness Overzealous; if an encounter card drawn from this effect would cause him to lose actions, this happens as normal." + }, + { + "text": "If a player card effect (such as the Gold Pocket Watch) causes the investigator phase to repeat, investigators are considered to gain their actions for their turns at the start of the phase. If a player card effect allows an investigator to take an additional turn, they are considered to gain their actions at the start of that turn." + } + ] + }, + { + "id": "time_rule", + "type": "rule_reminder", + "title": "Recording the Time", + "text": "At various points during this scenario, you will be asked to record the time next to entries in your Campaign Log. To do this, simply record, in brackets, the current agenda number and the number of doom on the current agenda. For example: If there is 4 doom on agenda 1a, you would record the time as (1,4)." + }, + { + "id": "time_ahc_rule", + "type": "rule_reminder", + "title": "ArkhamCards Note", + "text": "When you make a campaign log entry that asks you to record the time, input the agenda and doom as described above. Those entries, along with other campaign log entries from this scenario, will be kept in the Ritual Timeline section of the campaign log." + }, + { "id": "$play_scenario", + "type": "input", + "input": { + "type": "play_scenario", + "campaign_log": [ + { + "id": "somebody_disappeared_unexpectedly", + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "somebody_disappeared_unexpectedly", + "options": [ + { + "boolCondition": false + } + ] + }, + "text": "[An enemy] disappeared unexpectedly.", + "steps": [ + "who_disappeared_unexpectedly" + ] + }, + { + "id": "boundary_broken", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "boundary_broken", + "options": [ + { + "boolCondition": false + } + ] + }, + "text": "The boundary is broken.", + "steps": [ + "boundary_broken", + "boundary_broken_doom", + "front_back_choice" + ] + }, + { + "id": "repelled_hound", + "condition": { + "type": "multi", + "count": 2, + "conditions": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "options": [ + { + "boolCondition": false + } + ] + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "used_front_door", + "options": [ + { + "boolCondition": true + } + ] + } + ], + "options": [ + { + "boolCondition": true + } + ] + }, + "text": "The investigators repelled the Hound of Unmaking.", + "steps": [ + "repelled_hound", + "repelled_hound_doom" + ] + }, + { + "id": "put_down_hound", + "condition": { + "type": "multi", + "count": 2, + "conditions": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "options": [ + { + "boolCondition": false + } + ] + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "used_front_door", + "options": [ + { + "boolCondition": true + } + ] + } + ], + "options": [ + { + "boolCondition": true + } + ] + }, + "text": "The investigators put down the Hound of Unmaking.", + "steps": [ + "put_down_hound", + "put_down_hound_doom" + ] + }, + { + "id": "dispelled_ward", + "condition": { + "type": "multi", + "count": 2, + "conditions": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "options": [ + { + "boolCondition": false + } + ] + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "snuck_in_back", + "options": [ + { + "boolCondition": true + } + ] + } + ], + "options": [ + { + "boolCondition": true + } + ] + }, + "text": "The investigators dispelled the ward.", + "steps": [ + "dispelled_ward", + "dispelled_ward_doom" + ] + }, + { + "id": "unleashed_chaos", + "condition": { + "type": "multi", + "count": 2, + "conditions": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "options": [ + { + "boolCondition": false + } + ] + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "snuck_in_back", + "options": [ + { + "boolCondition": true + } + ] + } + ], + "options": [ + { + "boolCondition": true + } + ] + }, + "text": "The investigators unleashed chaos.", + "steps": [ + "unleashed_chaos", + "unleashed_chaos_doom" + ] + }, + { + "id": "broke_first_circle", + "condition": { + "type": "multi", + "count": 2, + "conditions": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "options": [ + { + "boolCondition": true + } + ] + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "first_circle_check", + "options": [ + { + "boolCondition": false + } + ] + } + ], + "options": [ + { + "boolCondition": true + } + ] + }, + "text": "The investigators broke the first circle.", + "steps": [ + "broke_first_circle", + "broke_first_circle_doom" + ] + } + ], + "branches": [ + { + "id": "strange_assistance", + "icon": "zau", + "text": "Add Strange Assistance", + "steps": [ + "strange_assistance" + ] + } + ] + } + }, + { + "id": "strange_assistance", + "text": "Mark 1 Strange Assistance in your Campaign Log.", + "effects": [ + { + "type": "campaign_log_count", + "section": "strange_assistance", + "operation": "add", + "value": 1 + } + ] + }, + { + "id": "who_disappeared_unexpectedly", + "type": "input", + "text": "Select an enemy:", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "chronophage", + "text": "Chronophage", + "steps": [ + "chronophage_disappeared" + ] + }, + { + "id": "the_myriad_gentleman", + "text": "The Myriad Gentleman", + "steps": [ + "the_myriad_gentleman_disappeared" + ] + }, + { + "id": "hired_thugs", + "text": "Hired Thugs", + "steps": [ + "hired_thugs_disappeared" + ] + }, + { + "id": "myriad_assassin", + "text": "Myriad Assassin", + "steps": [ + "myriad_assassin_disappeared" + ] + }, + { + "id": "irregulars", + "text": "Irregulars", + "steps": [ + "irregulars_disappeared" + ] + } + ] + } + }, + { + "id": "chronophage_disappeared", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "chronophage_disappeared_unexpectedly", + "text": "Chronophage disappeared unexpectedly." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "somebody_disappeared_unexpectedly", + "text": "dummy" + } + ] + }, + { + "id": "the_myriad_gentleman_disappeared", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "gentleman_disappeared_unexpectedly", + "text": "the Myriad Gentleman disappeared unexpectedly." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "somebody_disappeared_unexpectedly", + "text": "dummy" + } + ] + }, + { + "id": "hired_thugs_disappeared", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "thugs_disappeared_unexpectedly", + "text": "Hired Thugs disappeared unexpectedly." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "somebody_disappeared_unexpectedly", + "text": "dummy" + } + ] + }, + { + "id": "myriad_assassin_disappeared", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "assassin_disappeared_unexpectedly", + "text": "Myriad Assassin disappeared unexpectedly." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "somebody_disappeared_unexpectedly", + "text": "dummy" + } + ] + }, + { + "id": "irregulars_disappeared", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "irregulars_disappeared_unexpectedly", + "text": "Irregulars disappeared unexpectedly." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "somebody_disappeared_unexpectedly", + "text": "dummy" + } + ] + }, + { + "id": "boundary_broken", + "type": "input", + "input": { + "type": "counter", + "text": "Current agenda:", + "min": { + "type": "constant", + "value": 1 + }, + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "boundary_broken", + "operation": "set_input" + } + ] + } + }, + { + "id": "boundary_broken_doom", + "type": "input", + "input": { + "type": "counter", + "text": "Current doom on agenda:", + "max": { + "type": "constant", + "value": 9 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "boundary_broken", + "alternate": true, + "operation": "set_input", + "text": "the boundary is broken (#X#, #Y#)." + } + ] + } + }, + { + "id": "front_back_choice", + "type": "input", + "text": "Choose one to record:", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "front", + "text": "The investigators used the school's front door.", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "used_front_door", + "text": "the investigators used the school's front door." + } + ] + }, + { + "id": "back", + "text": "The investigators snuck into the back of the school.", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "snuck_in_back", + "text": "the investigators snuck into the back of the school." + } + ] + } + ] + } + }, + { + "id": "repelled_hound", + "type": "input", + "input": { + "type": "counter", + "text": "Current agenda:", + "min": { + "type": "constant", + "value": 1 + }, + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "repelled_hound", + "operation": "set_input" + } + ] + } + }, + { + "id": "repelled_hound_doom", + "type": "input", + "input": { + "type": "counter", + "text": "Current doom on agenda:", + "max": { + "type": "constant", + "value": 9 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "repelled_hound", + "alternate": true, + "operation": "set_input", + "text": "the investigators repelled the Hound of Unmaking (#X#, #Y#)." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "past_circle", + "text": "past circle is in play" + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "text": "dummy" + } + ] + } + }, + { + "id": "put_down_hound", + "type": "input", + "input": { + "type": "counter", + "text": "Current agenda:", + "min": { + "type": "constant", + "value": 1 + }, + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "put_down_hound", + "operation": "set_input" + } + ] + } + }, + { + "id": "put_down_hound_doom", + "type": "input", + "input": { + "type": "counter", + "text": "Current doom on agenda:", + "max": { + "type": "constant", + "value": 9 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "put_down_hound", + "alternate": true, + "operation": "set_input", + "text": "the investigators put down the Hound of Unmaking (#X#, #Y#)." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "past_circle", + "text": "past circle is in play" + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "text": "dummy" + } + ] + } + }, + { + "id": "dispelled_ward", + "type": "input", + "input": { + "type": "counter", + "text": "Current agenda:", + "min": { + "type": "constant", + "value": 1 + }, + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "dispelled_ward", + "operation": "set_input" + } + ] + } + }, + { + "id": "dispelled_ward_doom", + "type": "input", + "input": { + "type": "counter", + "text": "Current doom on agenda:", + "max": { + "type": "constant", + "value": 9 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "dispelled_ward", + "alternate": true, + "operation": "set_input", + "text": "the investigators dispelled the ward (#X#, #Y#)." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "future_circle", + "text": "future circle is in play" + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "text": "dummy" + } + ] + } + }, + { + "id": "unleashed_chaos", + "type": "input", + "input": { + "type": "counter", + "text": "Current agenda:", + "min": { + "type": "constant", + "value": 1 + }, + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "unleashed_chaos", + "operation": "set_input" + } + ] + } + }, + { + "id": "unleashed_chaos_doom", + "type": "input", + "input": { + "type": "counter", + "text": "Current doom on agenda:", + "max": { + "type": "constant", + "value": 9 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "unleashed_chaos", + "alternate": true, + "operation": "set_input", + "text": "the investigators unleashed chaos (#X#, #Y#)." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "future_circle", + "text": "future circle is in play" + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "timeline_act_3", + "text": "dummy" + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "unleashed_chaos_check", + "text": "dummy" + } + ] + } + }, + { + "id": "broke_first_circle", + "type": "input", + "input": { + "type": "counter", + "text": "Current agenda:", + "min": { + "type": "constant", + "value": 1 + }, + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "broke_first_circle", + "operation": "set_input" + } + ] + } + }, + { + "id": "broke_first_circle_doom", + "type": "input", + "input": { + "type": "counter", + "text": "Current doom on agenda:", + "max": { + "type": "constant", + "value": 9 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "broke_first_circle", + "alternate": true, + "operation": "set_input", + "text": "the investigators broke the first circle (#X#, #Y#)." + }, + { + "type": "campaign_log", + "section": "hidden", + "id": "first_circle_check", + "text": "dummy" + } + ] + } + }, + { + "id": "check_act_1", + "type": "branch", + "text": "Check Ritual Timeline. If the boundary is broken.", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "boundary_broken", + "options": [ + { + "boolCondition": true, + "steps": ["resolution_2"] + }, + { + "boolCondition": false, + "steps": ["resolution_1"] + } + ] + } + }, + { + "id":"check_timeline_weakened", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "timeline_was_weakened", + "options": [ + { + "boolCondition": true, + "steps": ["resolution_4"] + }, + { + "boolCondition": false, + "steps": ["resolution_5"] + } + ] + } + }, + { + "id": "fell_to_the_myriad", + "type": "input", + + "input": { + "type": "counter", + "text": "Current agenda:", + "min": { + "type": "constant", + "value": 1 + }, + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "fell_to_the_myriad", + "operation": "set_input" + } + ] + } + }, + { + "id": "fell_to_the_myriad_doom", + "type": "input", + "input": { + "type": "counter", + "text": "Current doom on agenda:", + "max": { + "type": "constant", + "value": 9 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "timeline", + "id": "fell_to_the_myriad", + "alternate": true, + "operation": "set_input", + "text": "the investigators fell to the Myriad (#X#, #Y#)." + } + ] + } + }, + { + "id": "fell_to_the_myriad_tokens", + "text": "Remove all [cultist] and [tablet] tokens from the chaos bag. Then add 1 [cultist] token, 1 [tablet] token, and 2 [elder_thing] tokens to the chaos bag.", + "effects": [ + { + "type": "remove_chaos_token", + "tokens": [ + "cultist", + "cultist", + "tablet", + "tablet" + ] + }, + { + "type": "add_chaos_token", + "tokens": [ + "cultist", + "tablet", + "elder_thing", + "elder_thing" + ] + } + ] + }, + { + "id": "ask_high_priest", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "yes", + "text": "Is The Myriad Gentleman (The High Priest) in the victory display?", + "steps": [ + "eliminated_priest" + ] + } + ] + } + }, + { + "id": "eliminated_priest", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "investigators_eliminated_the_high_priest", + "text": "the investigators eliminated the high priest." + } + ] + }, + { + "id": "check_past", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "past_circle", + "options": [ + { + "boolCondition": true, + "steps": ["step_past", "step_past_tokens"] + }, + { + "boolCondition": false, + "steps": ["check_future"] + } + ] + } + }, + { + "id": "step_past", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "investigators_stepped_into_past", + "text": "the investigators stepped into the past." + } + ] + }, + { + "id": "step_past_tokens", + "text": "Remove all [cultist] and [tablet] tokens from the chaos bag. Then add 2 [tablet] tokens and 1 [elder_thing] token to the chaos bag.", + "effects": [ + { + "type": "remove_chaos_token", + "tokens": [ + "cultist", + "cultist", + "tablet", + "tablet" + ] + }, + { + "type": "add_chaos_token", + "tokens": [ + "tablet", + "tablet", + "elder_thing" + ] + } + ] + }, + { + "id": "check_future", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "future_circle", + "options": [ + { + "boolCondition": true, + "steps": ["step_future", "step_future_tokens"] + } + ] + } + }, + { + "id": "step_future", + "effects": [ + { + "type": "campaign_log", + "section": "timeline", + "id": "investigators_stepped_into_future", + "text": "the investigators stepped into the future." + } + ] + }, + { + "id": "step_future_tokens", + "text": "Remove all [cultist] and [tablet] tokens from the chaos bag. Then add 2 [cultist] tokens and 1 [elder_thing] token to the chaos bag.", + "effects": [ + { + "type": "remove_chaos_token", + "tokens": [ + "cultist", + "cultist", + "tablet", + "tablet" + ] + }, + { + "type": "add_chaos_token", + "tokens": [ + "cultist", + "cultist", + "elder_thing" + ] + } + ] + }, + { + "id": "all_times_are_one", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "all_times_are_one", + "text": "all times are one." + } + ] + }, + { + "id": "all_insane", + "text": "Each investigator is driven insane.", + "effects": [ + { + "type": "trauma", + "investigator": "all", + "insane": true + } + ] + + }, + { + "id": "campaign_loss", + "text": "The investigators lose the campaign.", + "effects": [ + { + "type": "campaign_data", + "setting": "skip_scenario", + "scenario": "au_epilogue" + }, + { + "type": "campaign_data", + "setting": "result", + "value": "lose" + } + ] + }, + { + "id": "timeline_weakened", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "timeline_was_weakened", + "text": "the timeline was weakened." + } + ] + }, + { + "id": "timeline_weakened_chaos_tokens", + "text": "Add 2 [elder_thing] tokens to the chaos bag.", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "elder_thing", + "elder_thing" + ] + } + ] + }, + { + "id": "repeat_scenario", + "text": "The investigators must replay Scenario III: A World Torn Down. Reset the game to this scenario’s Setup. No experience points are earned from your previous game.", + "steps": [ + "restore_strange_assistance" + ], + "effects": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "somebody_disappeared_unexpectedly", + "remove": true + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "chronophage_disappeared_unexpectedly", + "remove": true + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "gentleman_disappeared_unexpectedly", + "remove": true + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "thugs_disappeared_unexpectedly", + "remove": true + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "assassin_disappeared_unexpectedly", + "remove": true + }, + { + "type": "campaign_log", + "section": "timeline", + "id": "irregulars_disappeared_unexpectedly", + "remove": true + }, + { + "type": "campaign_data", + "setting": "replay_scenario", + "scenario": "a_world_torn_down" + } + ] + }, + { + "id": "restore_strange_assistance", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "offer_accepted", + "options": [ + { + "boolCondition": true, + "effects": [ + { + "type": "campaign_log_count", + "section": "strange_assistance", + "operation": "set", + "value": 2 + } + ] + }, + { + "boolCondition": false, + "effects": [ + { + "type": "campaign_log_count", + "section": "strange_assistance", + "operation": "set", + "value": 1 + } + ] + } + ] + } + }, + { + "id": "defeat_guardrail", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "first_circle_check", + "options": [ + { + "boolCondition": true, + "steps": ["defeat_guardrail_visible"] + }, + { + "boolCondition": false, + "steps": ["check_act_1"] + } + ] + } + }, + { + "id": "defeat_guardrail_visible", + "type": "branch", + "text": "Check Ritual Timeline. If the investigators broke the first cicrle.", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "broke_first_circle", + "options": [ + { + "boolCondition": true, + "steps": ["defeat_error"] + } + ] + } + }, + { + "id": "defeat_error", + "text": "You must proceed to Resolution 3. Please undo, and select the correct resolution.", + "effects": [ + { + "type": "campaign_data", + "setting": "result", + "value": "lose" + } + ] + }, + { + "id": "circle_guardrail", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "first_circle_check", + "options": [ + { + "boolCondition": true, + "steps": [ + "r3_story", + "check_past", + "ask_high_priest", + "earn_xp", + "$upgrade_decks" + ] + }, + { + "boolCondition": false, + "steps": ["circle_error"] + } + ] + } + }, + { + "id": "r3_story", + "type": "story", + "text": "Tearing apart the first ritual circle, you turn your attention to the other two. The cultists surrounding them advance on you; they don't look like particularly capable fighters, but they outnumber you ten to one. Taking a few cautious steps backwards, you find yourself on the precipice of a swirling, many-hued rift in reality, the untamed schism that was once contained by the arcane circle you broke. It's a way out, maybe, but an unfathomable one...\nThen, a commotion on the far side of the auditorium. New arrivals, cutting their way through the cultists, making a beeline for the other circles. It's difficult to see past the encroaching cultists, but you manage to catch the eye of-\nNo, that can't be.\nYou glance at the rift behind you. The figure nods, once. You step into the unknown." + }, + { + "id": "circle_error", + "text": "Before proceeding to resolution 3, the campaign log entries for the act advancements need to be completed. Please undo, and complete those entries.", + "effects": [ + { + "type": "campaign_data", + "setting": "result", + "value": "lose" + } + ] + }, + { + "id": "resolution_1", + "type": "resolution", + "resolution": "R1" + }, + { + "id": "resolution_2", + "type": "resolution", + "resolution": "R2" + }, + { + "id": "resolution_4", + "type": "resolution", + "resolution": "R4" + }, + { + "id": "resolution_5", + "type": "resolution", + "resolution": "R5" + }, + { + "id": "earn_xp", + "text": "Each investigator earns experience equal to the Victory X value of each card in the victory display.", + "type": "input", + "input": { + "type": "counter", + "text": "Victory display:", + "effects": [ + { + "type": "earn_xp", + "investigator": "all" + } + ] + } + } + ], + "resolutions": [ + { + "id": "no_resolution", + "title": "No resolution was reached", + "description": "Each investigator was defeated", + "investigator_status": [ + "eliminated", + "physical", + "mental" + ], + "steps": [ + "defeat_guardrail" + ] + }, + { + "id": "R1", + "hidden": true, + "title": "Resolution 1", + "text": "Try as you might, the Myriad's fortress is virtually impenetrable. As the ritual inside builds towards its terrible conclusion, you throw yourself at it in desperation, seeking any way to break-", + "steps": [ + "check_timeline_weakened" + ] + }, + { + "id": "R2", + "hidden": true, + "title": "Resolution 2", + "text": "The distortions around you grow more and more severe. You can barely stand, can hardly move as broken realities circle and shift. Time melts like butter on a stove, and you find yourself falling, falling outside of time...", + "steps": [ + "fell_to_the_myriad", + "fell_to_the_myriad_doom", + "fell_to_the_myriad_tokens", + "ask_high_priest", + "earn_xp", + "$upgrade_decks" + ] + }, + { + "id": "R3", + "title": "Resolution 3", + "steps": [ + "circle_guardrail" + ] + }, + { + "id": "R4", + "hidden": true, + "title": "Resolution 4", + "text": "You run, panting, down an alley. The armed men are still in pursuit-\nAs you explore the manor's garden, a tall man in a fine suit strolls out to meet you-\nYour family, such as it is, stands at your bedside, awaiting-\nYou let out an ear-piercing wail, unsteady on your tiny legs-\n-through the barrier. There must be a way, there-\n\"Mama.\" Your first word.\n\"I'm sorry. I failed you all.\" Your last.", + "steps": [ + "all_times_are_one", + "all_insane", + "campaign_loss" + ] + }, + { + "id": "R5", + "hidden": true, + "title": "Resolution 5", + "text": "Mount Hollyoke Elementary was condemned by Arkham's town council several years ago, but for unknown reasons was never demolished. This seems to suit the Myriad just fine - they've repurposed it to their own ends. A ritual takes place here tonight - one that could spell the end of everything and everywhen.", + "steps": [ + "timeline_weakened", + "timeline_weakened_chaos_tokens", + "repeat_scenario" + ] + } + ] + } \ No newline at end of file diff --git a/campaigns/zau/06_unstuck.json b/campaigns/zau/06_unstuck.json new file mode 100644 index 000000000..619f84e94 --- /dev/null +++ b/campaigns/zau/06_unstuck.json @@ -0,0 +1,312 @@ +{ + "id": "unstuck", + "scenario_name": "Unstuck", + "header": "Scenario IV", + "full_name": "Scenario IV: Unstuck", + "chaos_bag_card": "zau_00062", + "chaos_bag_card_text": "[skull]: -X. X is the current agenda number.\n[cultist]: Reveal another token. If you fail, resolve the effects of the failed skill test an additional time.\n[tablet]: -2. If you fail, draw the topmost treachery in the encounter discard pile.\n[elder_thing]: -4. If you fail and you are at an [[Adrift]] location, after this test ends, swap the positions of your location and the location across from you.", + "chaos_bag_card_back_text": "[skull]: -X. X is the sum of the current act number and the current agenda number.\n[cultist]: Reveal another token. If you fail, resolve the effects of the failed skill test an additional time.\n[tablet]: -3. If you fail, draw the topmost treachery in the encounter discard pile.\n[elder_thing]: -5. If you are at an [[Adrift]] location, after this test ends, swap the positions of your location and the location across from you.", + "icon": "zau_unstuck", + "setup": [ + "intro", + "$check_tarot_reading", + "gather_encounter_sets", + "set_aside_cards", + "elite_setup", + "setup_locations", + "check_starting_location", + "add_chaos_token", + "encounter_deck", + "random_location_rule", + "$play_scenario" + ], + "steps": [ + { + "id": "intro", + "type": "story", + "text": "\"With a sense of troublous familiarity, I beheld the blurred unstable pictures which flowed past me upon this never-resting medium. Orient temples, flashing with sun-struck bronze and gold; the sharp, crowded gables and spires of medieval cities; tropic and northern forests; the costumes and physiognomies of the Levant, of Persia, of old Rome and Carthage, went by like blown, flying mirages. Each succeeding tableau belonged to a more ancient period than the one before it — and I knew that each was a scene from some former existence of my own.\" \n\n- Clark Ashton Smith, \"The Chain of Aforgomon\"\n\nYou fall. Though fall is maybe the wrong word - fall implies a sense ofdown. You tumble through realities, flashes of years long past and dizzying futures muddling your senses. You feel sick, faint, close to passing out. \nA sudden stillness. You lie on solid ground. It takes you a minute to pull yourself to your feet, and your head still pounds. You're in a forest. Not one that looks familiar, but it's something. It's reality. \nA roar cuts through your musings, painfully loud. Three creatures burst from the foliage, screeching as they flee past you, lizard-like beasts almost as tall as you are. You watch them flee, turning back just in time to spot a colossal beast crushing the trees in front of you. It roars again, the sound pounding your bones to jelly, as it charges you... \nExistence gives way, and you find yourself falling once more." + }, + { + "id": "gather_encounter_sets", + "title": "Setup", + "type": "encounter_sets", + "encounter_sets": [ + "zau_unstuck", + "zau_paradox" + ] + }, + { + "id": "set_aside_cards", + "text": "Set each copy of the Time Runs Backwards weakness, the Paradox encounter set, and The Timestream and Arkham, Massachusetts (Present Day?) locations aside, out of play." + }, + { + "id": "elite_setup", + "text": "Shuffle the four [[Elite]] enemies together. Set three of them aside, out of play, without looking at them. (The fourth will be shuffled into the encounter deck.)" + }, + { + "id": "setup_locations", + "text": "Remove one of the two copies of each other location from the game, at random. Then shuffle the eight remaining locations together and put them into play in a random order, forming a circle." + }, + { + "id": "check_starting_location", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "investigators_stepped_into_past", + "options": [ + { + "boolCondition": true, + "steps": ["check_past_visible"] + }, + { + "boolCondition": false, + "steps": ["check_starting_location_2"] + } + ] + } + }, + { + "id": "check_starting_location_2", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "investigators_stepped_into_future", + "options": [ + { + "boolCondition": true, + "steps": ["check_future_visible"] + }, + { + "boolCondition": false, + "steps": ["check_starting_location_3"] + } + ] + } + }, + { + "id": "check_starting_location_3", + "type": "branch", + "text": "Check Ritual Timeline. If the investigators fell to the Myriad.", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "fell_to_the_myriad", + "options": [ + { + "boolCondition": true, + "steps": ["divided_start"] + } + ] + } + }, + { + "id": "check_past_visible", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "investigators_stepped_into_past", + "options": [ + { + "boolCondition": true, + "steps": ["arkham_start"] + } + ] + } + }, + { + "id": "check_future_visible", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "investigators_stepped_into_future", + "options": [ + { + "boolCondition": true, + "steps": ["future_start"] + } + ] + } + }, + { + "id": "arkham_start", + "bullet_type": "small", + "text": "Each investigator begins play at Arkham Massachussetts (16th Century)." + }, + { + "id": "future_start", + "bullet_type": "small", + "text": "Each investigator begins play at A Disquieting Future" + }, + { + "id": "divided_start", + "bullet_type": "small", + "text": "Each investigator begins play at a different random Extradimensional location." + }, + { + "id": "add_chaos_token", + "type": "branch", + "condition": { + "type": "campaign_data", + "campaign_data": "difficulty", + "options": [ + { + "condition": "easy", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "-2" + ] + } + ] + }, + { + "condition": "standard", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "-3" + ] + } + ] + }, + { + "condition": "hard", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "-4" + ] + } + ] + }, + { + "condition": "expert", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "-5" + ] + } + ] + } + ] + } + }, + { + "id": "encounter_deck", + "text": "Shuffle the remainder of the encounter cards to build the encounter deck." + }, + { + "id": "random_location_rule", + "type": "rule_reminder", + "title": "Locations Outside of Time", + "text": "During this scenario, you will sometimes be instructed to choose a random [[Adrift]] location. This should be done by shuffling together the 8 locations removed from the game during setup (the versions of each [[Adrift]] location in play not currently being used) and drawing 1 at random. If you are instructed to choose a random location that fits a certain criterion, keep drawing locations until one is drawn that satisfies the effect's requirements." + }, + { + "id": "$play_scenario", + "type": "input", + "input": { + "type": "play_scenario", + "branches": [ + { + "id": "randomize_locations", + "text": "Choose a random location", + "steps": [ + "choose_random_location" + ] + } + ] + } + }, + { + "id": "choose_random_location", + "type": "input", + "input": { + "type": "random_location", + "cards": [ + "zau_00069", + "zau_00071", + "zau_00073", + "zau_00075", + "zau_00077", + "zau_00079", + "zau_00081", + "zau_00083" + ] + } + }, + { + "id": "resolution_1", + "type": "resolution", + "resolution": "R1" + }, + { + "id": "time_runs_backwards", + "text": "Each investigator who was defeated gains the Time Runs Backwards weakness, and must add it to their deck.", + "effects": [ + { + "type": "add_card", + "investigator": "defeated", + "card": "zau_00087" + } + ] + }, + { + "id": "earn_xp", + "text": "Each investigator earns experience equal to the Victory X value of each card in the victory display.", + "type": "input", + "input": { + "type": "counter", + "text": "Victory display:", + "effects": [ + { + "type": "earn_xp", + "investigator": "all" + } + ] + } + } + ], + "resolutions": [ + { + "id": "investigator_defeat", + "title": "Investigator Defeat", + "text": "You come to in a moonlit jail cell. Your head pounds like nothing you've ever felt before, and as you try and get someone's attention you feel the flow of time slip around you, and suddenly the sun is high in the sky. You manage to attract the attention of a very confused police officer, who doesn't remember you ever being brought in. \nHe asks you a few questions - which you do your best to answer, though your memories are of little help to you - before releasing you onto the streets of Arkham, nonplussed but without reason to hold you. \nEmerging from the station, you're forced to duck into an alleyway as you spot an officer approaching, supporting a barely-conscious you. \"Picked this one up right off the street,\" you hear him comment to the desk sergeant. \"Bold as brass, just lying there in a drunken stupor.\" He's not got it quite right, but you can hardly stop to correct him.", + "steps": [ + "time_runs_backwards" + ] + }, + { + "id": "no_resolution", + "title": "No resolution was reached", + "description": "Each investigator was defeated", + "investigator_status": [ + "eliminated", + "physical", + "mental" + ], + "steps": [ + "resolution_1" + ] + }, + { + "id": "R1", + "title": "Resolution 1", + "text": "With your feet firmly on the ground, you take a moment to stop and breathe in the air. Arkham's distinct ashy, slightly mildewed scent fills you with a sense of peace. You're home.\nYour reverie doesn't last long. The Myriad's ritual was disrupted by your efforts, but could still continue. It's daytime now, so presumably it's the next day... or the previous one. You spot a newsagent with a stack of papers on sale, and your heart sinks as you read the date: \n
Tuesday, August 26th, 1924
\nYou're early. You've arrived a whole year before you left.", + "steps": [ + "earn_xp", + "$upgrade_decks" + ] + } + ] +} \ No newline at end of file diff --git a/campaigns/zau/07_a_year_to_plan.json b/campaigns/zau/07_a_year_to_plan.json new file mode 100644 index 000000000..7b3531771 --- /dev/null +++ b/campaigns/zau/07_a_year_to_plan.json @@ -0,0 +1,1077 @@ +{ + "id": "a_year_to_plan", + "scenario_name": "A Year to Plan", + "header": "Scenario V", + "full_name": "Scenario V: A Year to Plan", + "chaos_bag_card": "zau_00105", + "chaos_bag_card_text": "[skull]: -X. X is half the number of completed [[Tasks]] (rounded down).\n[cultist]: -5. Draw a card or gain a resource.\n[tablet]: -2. If you fail and it is your turn, lose all remaining actions and end your turn.\n[elder_thing]: -3. If you fail, take 1 damage and 1 horror.", + "chaos_bag_card_back_text": "[skull]: -X. X is the number of completed [[Tasks]].\n[cultist]: -8. Draw a card or gain a resource.\n[tablet]: -4. If you fail and it is your turn, lose all remaining actions and end your turn.\n[elder_thing]: -5. If you fail, take 1 damage and 1 horror.", + "icon": "zau_year_to_plan", + "setup": [ + "intro", + "$check_tarot_reading", + "gather_encounter_sets", + "setup_locations", + "helping_yourself", + "list_strange_assistance", + "setup_task_deck", + "set_aside_cards", + "encounter_deck", + "task_rules", + "$play_scenario" + ], + "rules": [ + ], + "steps": [ + { + "id": "intro", + "type": "story", + "text": "It takes a little time to get used to being in the past. There's a second you here - you've seen them, though you made sure they didn't see you. That means you don't have a home, or a family, unless you want to meddle with your own past.\nOnce you get yourself set up, though, you're able to do some research. A few days at the Miskatonic University library dig up some interesting leads you intend to follow up on. The Myriad are operating in this time, it seems - so why not interfere with their plans?" + }, + { + "id": "gather_encounter_sets", + "title": "Setup", + "type": "encounter_sets", + "encounter_sets": [ + "zau_year_to_plan", + "zau_missions", + "zau_myriad", + "zau_shifting_reality", + "zau_unravelling_years", + "pentagram", + "arkham" + ], + "subtext": "When gathering The Midnight Masks encounter set, only gather the five treachery cards (2x False Lead and 3x Hunting Shadow). Do not gather any other cards from that encounter set." + }, + { + "id": "setup_locations", + "text": "Put each [[City]] and [[Wilderness]] location into play. Each investigator begins play in Arkham, Massachusetts." + }, + { + "id": "helping_yourself", + "text": "Put the Helping Yourself treachery into play next to the act deck with X resources on it. X is the number of marks under Strange Assistance in your Campaign Log." + }, + { + "id": "list_strange_assistance", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log_count", + "section": "strange_assistance", + "id": "$count", + "options": [], + "default_option": { + "effects": [ + { + "type": "check_campaign_log_count", + "bullet_type": "small", + "text": "#X# Strange Assistance marked." + } + ] + } + } + }, + { + "id": "setup_task_deck", + "text": "Shuffle the following treachery cards together to form the task deck: Enemy of my Enemy, A Treasure Unearthed, The Devil You Know, Higher Powers, Entreating the Gods, and Up To Something. Place this deck near the scenario reference card." + }, + { + "id": "set_aside_cards", + "text": "Set the remainder of the Missions encounter set aside, out of play, along with each copy of Curse of a Thousand Winters." + }, + { + "id": "encounter_deck", + "text": "Shuffle the remainder of the encounter cards to build the encounter deck." + }, + { + "id": "task_rules", + "type": "rule_reminder", + "title": "Tasks", + "text": "Some treacheries in this scenario have the [[Task]] trait. These cards have objectives on them, which provide goals to complete throughout the scenario. When you meet the objective printed on a [[Task]], or when another card tells you to complete it, remove it from the game, making sure to keep track of which [[Tasks]] you've completed." + }, + { + "id": "$play_scenario", + "type": "input", + "input": { + "type": "play_scenario", + "campaign_log": [ + { + "id": "solved_riddle", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "solved_the_riddle_of_the_sphinx", + "options": [ + { + "boolCondition": false + } + ] + }, + "text": "You solved the riddle of the sphinx.", + "steps": [ + "solved_riddle" + ] + }, + { + "id": "took_tea", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "took_tea_with_the_ruler_of_a_strange_dimension", + "options": [ + { + "boolCondition": false + } + ] + }, + "text": "You took tea with the ruler of a strange dimension.", + "steps": [ + "took_tea" + ] + }, + { + "id": "advanced_schemes", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "advanced_the_schemes_of_the_silver_twilight_lodge", + "options": [ + { + "boolCondition": false + } + ] + }, + "text": "You have advanced the schemes of the Silver Twilight Lodge.", + "steps": [ + "advanced_schemes" + ] + } + ] + } + }, + { + "id": "solved_riddle", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "solved_the_riddle_of_the_sphinx", + "text": "you solved the riddle of the sphinx." + } + ] + }, + { + "id": "took_tea", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "took_tea_with_the_ruler_of_a_strange_dimension", + "text": "You took tea with the ruler of a strange dimension." + } + ] + }, + { + "id": "advanced_schemes", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "advanced_the_schemes_of_the_silver_twilight_lodge", + "text": "you have advanced the schemes of the Silver Twilight Lodge." + } + ] + }, + { + "id": "ritual_is_nigh", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "ritual_is_nigh", + "text": "the ritual is nigh." + } + ] + }, + { + "id": "late_return", + "text": "For each investigator that did not resign, record in your campaign log that [investigator name] returned to Arkham late.", + "effects": [ + { + "type": "campaign_log_cards", + "section": "campaign_notes", + "id": "late_return", + "cards": "$not_resigned", + "masculine_text": "#name# returned to Arkham late.", + "feminine_text": "#name# returned to Arkham late.", + "nonbinary_text": "#name# returned to Arkham late." + } + ] + }, + { + "id": "ask_multitude_of_plots", + "text": "How many copies of A Multitude of Plots are in the victory display?", + "type": "input", + "input": { + "type": "counter", + "text": "A Multitude of Plots:", + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "hidden", + "id": "multitude_of_plots", + "operation": "set_input" + } + ] + } + }, + { + "id": "check_multitude_of_plots", + "type": "branch", + "hidden": true, + "loop": true, + "condition": { + "type": "math", + "opA": { + "type": "campaign_log_count", + "section": "hidden", + "id": "multitude_of_plots" + }, + "opB": { + "type": "constant", + "value": 1 + }, + "operation": "compare", + "options": [ + { + "numCondition": 1, + "steps": ["choose_plot"] + }, + { + "numCondition": 0, + "steps": ["choose_plot"] + } + ] + } + }, + { + "id": "choose_plot", + "text": "For each copy, choose one:", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "powerful_warding", + "text": "The Myriad raised a powerful warding.", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_raised_a_powerful_warding", + "options": [ + { + "boolCondition": false + } + ] + }, + "steps": [ + "record_powerful_warding" + ], + "effects": [ + { + "type": "campaign_log_count", + "section": "hidden", + "id": "multitude_of_plots", + "operation": "add", + "value": -1 + } + ] + }, + { + "id": "cruel_sorcerer", + "text": "The Myriad recruited a cruel sorcerer.", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_recruited_a_cruel_sorcerer", + "options": [ + { + "boolCondition": false + } + ] + }, + "steps": [ + "record_cruel_sorcerer" + ], + "effects": [ + { + "type": "campaign_log_count", + "section": "hidden", + "id": "multitude_of_plots", + "operation": "add", + "value": -1 + } + ] + }, + { + "id": "dread_curse", + "text": "The Myriad weaved a dread curse.", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_weaved_a_dread_curse", + "options": [ + { + "boolCondition": false + } + ] + }, + "steps": [ + "record_dread_curse", + "curse_of_thousand_winters" + ], + "effects": [ + { + "type": "campaign_log_count", + "section": "hidden", + "id": "multitude_of_plots", + "operation": "add", + "value": -1 + } + ] + } + ] + } + }, + { + "id": "record_powerful_warding", + "bullet_type": "small", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_raised_a_powerful_warding", + "text": "the Myriad raised a powerful warding." + } + ] + }, + { + "id": "record_cruel_sorcerer", + "bullet_type": "small", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_recruited_a_cruel_sorcerer", + "text": "the Myriad recruited a cruel sorcerer." + } + ] + }, + { + "id": "record_dread_curse", + "bullet_type": "small", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_weaved_a_dread_curse", + "text": "the Myriad weaved a dread curse." + } + ] + }, + { + "id": "curse_of_thousand_winters", + "bullet_type": "small", + "text": "Each investigator must add 1 copy of Curse of a Thousand Winters to their deck. This card does not count towards deck size.", + "effects": [ + { + "type": "add_card", + "investigator": "all", + "card": "zau_00128" + } + ] + }, + { + "id": "reset_tokens", + "text": "Remove all [cultist], [tablet], and [elder_thing] tokens from the chaos bag. Then add 1 [cultist] token and 1 [tablet] token to the chaos bag.", + "effects": [ + { + "type": "remove_chaos_token", + "tokens": [ + "cultist", + "cultist", + "tablet", + "tablet", + "elder_thing", + "elder_thing" + ] + }, + { + "type": "add_chaos_token", + "tokens": [ + "cultist", + "tablet" + ] + } + ] + }, + { + "id": "ask_final_preparations", + "text": "For each resource on the act, add 1 [cultist] token to the chaos bag.", + "type": "input", + "input": { + "type": "counter", + "text": "Resources on the act:", + "max": { + "type": "constant", + "value": 3 + }, + "effects": [ + { + "type": "campaign_log_count", + "section": "hidden", + "id": "final_preparations", + "text": "dummy", + "operation": "set_input" + } + ] + } + }, + { + "id": "check_final_preparations", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log_count", + "section": "hidden", + "id": "final_preparations", + "max": 3, + "options": [ + { + "numCondition": 0, + "steps": [ + ] + }, + { + "numCondition": 1, + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "cultist" + ] + } + ] + }, + { + "numCondition": 2, + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "cultist", + "cultist" + ] + } + ] + }, + { + "numCondition": 3, + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "cultist", + "cultist", + "cultist" + ] + } + ] + } + ] + } + }, + { + "id": "check_helping_yourself", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "helping_yourself", + "text": "Was [[Helping Yourself]] completed?", + "effects": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "helping_yourself_complete", + "text": "dummy" + } + ] + } + ] + } + }, + { + "id": "invert_helping_yourself", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "helping_yourself_complete", + "options": [ + { + "boolCondition": false, + "steps": [ + "violate_causality", + "record_causality", + "causality_tokens" + ] + } + ] + } + }, + { + "id": "violate_causality", + "type": "story", + "text": "As you prepare for your assault on the Myriad's ceremony, you feel time twist and distort around you. For one panicked moment, you think the ritual has started early. Then, you remember: your past self had help from a mysterious benefactor. Help you have failed to provide." + }, + { + "id": "record_causality", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "violated_causality", + "text": "the investigators violated causality." + } + ] + }, + { + "id": "causality_tokens", + "bullet_type": "small", + "text": "Add 2 [elder_thing] tokens to the chaos bag.", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "elder_thing", + "elder_thing" + ] + } + ] + }, + { + "id": "check_riddle", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section":"campaign_notes", + "id": "solved_the_riddle_of_the_sphinx", + "options": [ + { + "boolCondition": true, + "steps": ["keeper_of_knowledge_complete"] + }, + { + "boolCondition": false, + "steps": ["check_ancient_sphinx"] + } + ] + } + }, + { + "id": "keeper_of_knowledge_complete", + "text": "[[Keeper of Knowledge]] was completed." + }, + { + "id": "check_ancient_sphinx", + "type": "input", + "text": "Where is the Ancient Sphinx?", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "victory_display", + "text": "Victory display.", + "steps": [ + "catchup_riddle" + ] + }, + { + "id": "in_play", + "text": "In play.", + "steps": [ + "myriad_riddle", + "record_myriad_riddle", + "myriad_riddle_tokens" + ] + }, + { + "id": "neither", + "text": "Neither.", + "steps": [ + ] + } + ] + } + }, + { + "id": "catchup_riddle", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "solved_the_riddle_of_the_sphinx", + "text": "you solved the riddle of the sphinx." + } + ] + }, + { + "id": "myriad_riddle", + "type": "story", + "text": "The sphinx has since disappeared from Egypt. You don't imagine it would deign to fly to Arkham just to assist the cult of Aforgomon, but there's no telling what dark knowledge they may have extracted from it." + }, + { + "id": "record_myriad_riddle", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_solved_the_riddle_of_the_sphinx", + "text": "the Myriad solved the riddle of the sphinx." + } + ] + }, + { + "id": "myriad_riddle_tokens", + "bullet_type": "small", + "text": "Add 2 [tablet] tokens to the chaos bag.", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "tablet", + "tablet" + ] + } + ] + }, + { + "id": "check_tea", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section":"campaign_notes", + "id": "took_tea_with_the_ruler_of_a_strange_dimension", + "options": [ + { + "boolCondition": true, + "steps": ["strange_portal_complete"] + }, + { + "boolCondition": false, + "steps": [ + "check_strange_portal", + "invert_strange_portal" + ] + } + ] + } + }, + { + "id": "strange_portal_complete", + "text": "[[Strange Portal]] was completed." + }, + { + "id": "check_strange_portal", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "helping_yourself", + "text": "Was [[Strange Portal]] completed?", + "effects": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "strange_portal_complete", + "text": "dummy" + } + ] + } + ] + } + }, + { + "id": "invert_strange_portal", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "strange_portal_complete", + "options": [ + { + "boolCondition": true, + "steps": [ + "catchup_tea" + ] + }, + { + "boolCondition": false, + "steps": [ + "myriad_harnessed", + "record_myriad_harnessed" + ] + } + ] + } + }, + { + "id": "catchup_tea", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "took_tea_with_the_ruler_of_a_strange_dimension", + "text": "You took tea with the ruler of a strange dimension." + } + ] + }, + { + "id": "myriad_harnessed", + "type": "story", + "text": "Paris is quiet for the most part, but if you dig deep enough you find report after report of unexplained disappearances. Possessions, people, even whole buildings on occasion." + }, + { + "id": "record_myriad_harnessed", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_harnessed_the_power_of_another_realm", + "text": "the Myriad harnessed the power of another realm." + } + ] + }, + { + "id": "check_tunguska", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "tunguska", + "text": "Was [[The Tunguska Event]] completed?", + "effects": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "tunguska_complete", + "text": "dummy" + } + ] + } + ] + } + }, + { + "id": "invert_tunguska", + "hidden": true, + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "tunguska_complete", + "options": [ + { + "boolCondition": false, + "steps": [ + "myriad_color", + "record_myriad_color" + ] + } + ] + } + }, + { + "id": "myriad_color", + "type": "story", + "text": "You still don't know what exactly happened in Tunguska, but some of the Myriad Gentlemen you've encoountered recently have been... different. Changed." + }, + { + "id": "record_myriad_color", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_took_control_of_a_color_out_of_space", + "text": "the Myriad took control of a color out of space." + } + ] + }, + { + "id": "check_enemy_of_my_enemy", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "enemy_of_my_enemy", + "text": "Was [[Enemy of my Enemy]] completed?", + "steps": [ + "add_monastic_training" + ] + } + ] + } + }, + { + "id": "add_monastic_training", + "text": "Any one investigator may choose to add Monastic Training to their deck. This card does not count toward that investigator’s deck size.", + "effects": [ + { + "type": "add_card", + "investigator": "choice", + "card": "zau_00149" + } + ] + }, + { + "id": "check_treasure_unearthed", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "treasure_unearthed", + "text": "Was [[A Treasure Unearthed]] completed?", + "steps": [ + "add_chronal_atlas" + ] + } + ] + } + }, + { + "id": "add_chronal_atlas", + "text": "Any one investigator may choose to add Chronal Atlas to their deck. This card does not count toward that investigator’s deck size.", + "effects": [ + { + "type": "add_card", + "investigator": "choice", + "card": "zau_00150" + } + ] + }, + { + "id": "check_devil_you_know", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "devil_you_know", + "text": "Was [[The Devil You Know]] completed?", + "steps": [ + "check_advanced_schemes", + "add_ionian_pendant" + ] + } + ] + } + }, + { + "id": "check_advanced_schemes", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section":"campaign_notes", + "id": "advanced_the_schemes_of_the_silver_twilight_lodge", + "options": [ + { + "boolCondition": false, + "steps": ["catchup_advanced_schemes"] + } + ] + } + }, + { + "id": "catchup_advanced_schemes", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "advanced_the_schemes_of_the_silver_twilight_lodge", + "text": "you have advanced the schemes of the Silver Twilight Lodge." + } + ] + }, + { + "id": "add_ionian_pendant", + "text": "Any one investigator may choose to add Ionian Pendant to their deck. This card does not count toward that investigator’s deck size.", + "effects": [ + { + "type": "add_card", + "investigator": "choice", + "card": "zau_00151" + } + ] + }, + { + "id": "check_higher_powers", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "higher_powers", + "text": "Was [[Higher Powers]] completed?", + "steps": [ + "add_agency_strike_team" + ] + } + ] + } + }, + { + "id": "add_agency_strike_team", + "text": "Any one investigator may choose to add Agency Strike Team to their deck. This card does not count toward that investigator’s deck size.", + "effects": [ + { + "type": "add_card", + "investigator": "choice", + "card": "zau_00152" + } + ] + }, + { + "id": "check_entreating_the_gods", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "entreating_the_gods", + "text": "Was [[Entreating the Gods]] completed?", + "steps": [ + "add_wings_of_damakairon" + ] + } + ] + } + }, + { + "id": "add_wings_of_damakairon", + "text": "Any one investigator may choose to add Wings of Damakairon to their deck. This card does not count toward that investigator’s deck size.", + "effects": [ + { + "type": "add_card", + "investigator": "choice", + "card": "zau_00153" + } + ] + }, + { + "id": "check_up_to_something", + "type": "input", + "input": { + "type": "choose_one", + "choices": [ + { + "id": "up_to_something", + "text": "Was [[Up To Something]] completed?", + "steps": [ + "add_forestall_fate" + ] + } + ] + } + }, + { + "id": "add_forestall_fate", + "text": "Any one investigator may choose to add Forestall Fate to their deck. This card does not count toward that investigator’s deck size.", + "effects": [ + { + "type": "add_card", + "investigator": "choice", + "card": "zau_00154" + } + ] + }, + { + "id": "resolution_1", + "type": "resolution", + "resolution": "R1" + }, + { + "id": "earn_xp", + "text": "Each investigator earns experience equal to the Victory X value of each card in the victory display.", + "type": "input", + "input": { + "type": "counter", + "text": "Victory display:", + "effects": [ + { + "type": "earn_xp", + "investigator": "all" + } + ] + } + } + ], + "resolutions": [ + { + "id": "no_resolution", + "title": "No resolution was reached", + "description": "Each investigator resigned or was defeated", + "investigator_status": [ + "resigned", + "eliminated", + "physical", + "mental" + ], + "steps": [ + "resolution_1" + ] + }, + { + "id": "R1", + "title": "Resolution 1", + "text": "It's been a long year. It feels like you've been fighting forever, never stopping, never able to relax. One more night, you tell yourself, as you ready to head out. After tonight, whatever happens, your fight will be over.", + "steps": [ + "ritual_is_nigh", + "late_return", + "ask_multitude_of_plots", + "check_multitude_of_plots", + "reset_tokens", + "ask_final_preparations", + "check_final_preparations", + "check_helping_yourself", + "invert_helping_yourself", + "check_riddle", + "check_tea", + "check_tunguska", + "invert_tunguska", + "check_enemy_of_my_enemy", + "check_treasure_unearthed", + "check_devil_you_know", + "check_higher_powers", + "check_entreating_the_gods", + "check_up_to_something", + "earn_xp", + "$upgrade_decks" + ] + } + ] + } \ No newline at end of file diff --git a/campaigns/zau/08_a_world_torn_down_again.json b/campaigns/zau/08_a_world_torn_down_again.json new file mode 100644 index 000000000..c6a2be5e7 --- /dev/null +++ b/campaigns/zau/08_a_world_torn_down_again.json @@ -0,0 +1,810 @@ +{ + "id": "a_world_torn_down_again", + "scenario_name": "A World Torn Down, Again", + "header": "Scenario VI", + "full_name": "Scenario VI: A World Torn Down, Again", + "chaos_bag_card": "zau_00155", + "chaos_bag_card_text": "[skull]: -X. X is the number of actions you have remaining.\n[cultist]: -1. If you succeed, you get +1 skill value during skill tests until the end of the round.\n[tablet]: -3. If you fail, place 1 doom on the current agenda.\n[elder_thing]: -5. Take 1 horror.", + "chaos_bag_card_back_text": "[skull]: -X. X is 1 more than the number of actions you have remaining.\n[cultist]: -3. If you succeed, you get +1 skill value during skill tests until the end of the round.\n[tablet]: -5. If you fail, place 1 doom on current agenda.\n[elder_thing]: You automatically fail. Take 1 horror.", + "icon": "zau_world_torn_down_again", + "setup": [ + "check_quarry", + "$check_tarot_reading", + "gather_encounter_sets", + "check_causality", + "setup_locations", + "check_late_return", + "add_chaos_token", + "check_warding", + "check_color", + "check_schemes", + "check_riddle", + "check_chronophage_disappeared_invisible", + "check_future", + "set_aside_cards", + "encounter_deck", + "past_and_present_rule", + "$play_scenario" + ], + "steps": [ + { + "id": "check_quarry", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "new_quarry", + "options": [ + { + "boolCondition": true, + "steps": [ + "intro_1", + "investigator_damage_horror", + "check_realm" + ] + }, + { + "boolCondition": false, + "steps": [ + "check_realm" + ] + } + ] + } + }, + { + "id": "intro_1", + "type": "story", + "text": "There was, in the end, a simple way to lure the Sheldon gang and their supernatural compatriots away from your past self. Their target was you, after all.\nThat said, your encounters with them mean you reach the ritual site rather the worse for wear." + }, + { + "id": "investigator_damage_horror", + "text": "Each investigator takes 1 direct damage and 1 direct horror." + }, + { + "id": "check_realm", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_harnessed_the_power_of_another_realm", + "options": [ + { + "boolCondition": true, + "steps": [ + "intro_2" + ] + }, + { + "boolCondition": false, + "steps": [ + "intro_3" + ] + } + ] + } + }, + { + "id": "intro_2", + "type": "story", + "text": "Mount Hollyoke Elementary School - the site of the Myriad's profane ritual, the place that sent you tumbling into the past a year ago - is absent. You've reached its address, the place where you distinctly remember it being, and yet, it is not.\nThe air thrums with energy, and a green light glows very faintly in your periphery. The ritual's still happening, then. This... This could pose an issue." + }, + { + "id": "intro_3", + "type": "story", + "text": "Mount Hollyoke Elementary School. It's been a long time since you last visited. You can't say you missed it, honestly.\nThe barrier erected by the Myriad stands firm around it, and the air is rich with temporal energy. The ritual has begun, which means it's time for you to intervene." + }, + { + "id": "gather_encounter_sets", + "title": "Setup", + "type": "encounter_sets", + "encounter_sets": [ + "zau_world_torn_down_again", + "zau_night_of_the_ritual", + "zau_agents_of_aforgomon", + "zau_myriad", + "zau_nyctophobia", + "zau_thugs", + "zau_unleashed_chaos" + ] + }, + { + "id": "check_causality", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "violated_causality", + "options": [ + { + "boolCondition": true, + "steps": [ + "add_paradox" + ] + } + ] + } + }, + { + "id": "add_paradox", + "type": "encounter_sets", + "encounter_sets": [ "zau_paradox"], + "text": "Also gather the Paradox encounter set." + }, + { + "id": "setup_locations", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_harnessed_the_power_of_another_realm", + "options": [ + { + "boolCondition": true, + "steps": [ + "featureless_streets_setup" + ] + }, + { + "boolCondition": false, + "steps": [ + "ordinary_setup", + "check_front_door" + ] + } + ] + } + }, + { + "id": "featureless_streets_setup", + "bullet_type": "small", + "text": "Put Featureless Streets into play. The starting location is Featureless Streets." + }, + { + "id": "ordinary_setup", + "bullet_type": "small", + "text": "Otherwise, remove Featureless Streets and act 1a from the game. The game begins at act 2a. Put Front Gates, Sports Field, Children's Playground and Side Building into play. The starting location is Sports Field." + }, + { + "id": "check_front_door", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "used_front_door", + "options": [ + { + "boolCondition": true, + "steps": [ + "check_front_door_visible" + ] + }, + { + "boolCondition": false, + "steps": [ + "check_back_door_visible" + ] + } + ] + } + }, + { + "id": "check_front_door_visible", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "used_front_door", + "options": [ + { + "boolCondition": true, + "steps": [ + "rear_corridors" + ] + } + ] + } + }, + { + "id": "check_back_door_visible", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "snuck_in_back", + "options": [ + { + "boolCondition": true, + "steps": [ + "front_hallway" + ] + } + ] + } + }, + { + "id": "rear_corridors", + "bullet_type": "small", + "text": "Also put Rear Corridors into play." + }, + { + "id": "front_hallway", + "bullet_type": "small", + "text": "Also put Front Hallway into play." + }, + { + "id": "check_late_return", + "text": "Each investigator who returned to Arkham late performs setup normally, but begins the game at no location. They are not considered to be in play, and cannot interact with the game in any way. At the end of the first round of the game, each of these investigators enters play at the starting location. Each other investigator begins play at the starting location." + }, + { + "id": "add_chaos_token", + "type": "branch", + "condition": { + "type": "campaign_data", + "campaign_data": "difficulty", + "options": [ + { + "condition": "easy", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "-3" + ] + } + ] + }, + { + "condition": "standard", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "-5" + ] + } + ] + }, + { + "condition": "hard", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "-6" + ] + } + ] + }, + { + "condition": "expert", + "effects": [ + { + "type": "add_chaos_token", + "tokens": [ + "-7" + ] + } + ] + } + ] + } + }, + { + "id": "check_warding", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_raised_a_powerful_warding", + "options": [ + { + "boolCondition": true, + "steps": [ + "place_nexus_of_aforgomon" + ] + }, + { + "boolCondition": false, + "steps": [ + "remove_nexus_of_aforgomon" + ] + } + ] + } + }, + { + "id": "place_nexus_of_aforgomon", + "bullet_type": "small", + "text": "Put Nexus of Aforgomon into play next to the agenda deck." + }, + { + "id": "remove_nexus_of_aforgomon", + "bullet_type": "small", + "text": "Remove Nexus of Aforgomon from the game." + }, + { + "id": "check_color", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_took_control_of_a_color_out_of_space", + "options": [ + { + "boolCondition": true, + "steps": [ + "place_colors_spread" + ] + }, + { + "boolCondition": false, + "steps": [ + "remove_colors_spread" + ] + } + ] + } + }, + { + "id": "place_colors_spread", + "bullet_type": "small", + "text": "Put The Color's Spread into play next to the agenda deck." + }, + { + "id": "remove_colors_spread", + "bullet_type": "small", + "text": "Remove The Color's Spread from the game." + }, + { + "id": "check_schemes", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "advanced_the_schemes_of_the_silver_twilight_lodge", + "options": [ + { + "boolCondition": true, + "steps": [ + "no_changes" + ] + }, + { + "boolCondition": false, + "steps": [ + "remove_lodge_assistance" + ] + } + ] + } + }, + { + "id": "no_changes", + "bullet_type": "small", + "text": "No changes are made." + }, + { + "id": "remove_lodge_assistance", + "bullet_type": "small", + "text": "Remove each copy of Assistance from the Lodge from the game." + }, + { + "id": "check_riddle", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "solved_the_riddle_of_the_sphinx", + "options": [ + { + "boolCondition": true, + "steps": [ + "riddle_reward" + ] + }, + { + "boolCondition": false, + "steps": [ + "check_myriad_riddle" + ] + } + ] + } + }, + { + "id": "riddle_reward", + "bullet_type": "small", + "text": "Each investigator begins the game with 1 additional card and 2 additional resources." + }, + { + "id": "check_myriad_riddle", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "myriad_solved_the_riddle_of_the_sphinx", + "options": [ + { + "boolCondition": true, + "steps": [ + "riddle_punishment" + ] + } + ] + } + }, + { + "id": "riddle_punishment", + "bullet_type": "small", + "text": "Place 1 doom on the current agenda." + }, + { + "id": "check_chronophage_disappeared_invisible", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "chronophage_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "check_chronophage_disappeared_visible" + ] + }, + { + "boolCondition": false, + "steps": [ "check_gentleman_disappeared_invisible" + ] + } + ] + } + }, + { + "id": "check_chronophage_disappeared_visible", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "chronophage_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "set_aside_disappeared" + ] + } + ] + } + }, + { + "id": "check_gentleman_disappeared_invisible", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "gentleman_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "check_gentleman_disappeared_visible" + ] + }, + { + "boolCondition": false, + "steps": [ "check_thugs_disappeared_invisible" + ] + } + ] + } + }, + { + "id": "check_gentleman_disappeared_visible", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "gentleman_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "set_aside_disappeared" + ] + } + ] + } + }, + { + "id": "check_thugs_disappeared_invisible", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "thugs_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "check_thugs_disappeared_visible" + ] + }, + { + "boolCondition": false, + "steps": [ "check_assassin_disappeared_invisible" + ] + } + ] + } + }, + { + "id": "check_thugs_disappeared_visible", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "thugs_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "set_aside_disappeared" + ] + } + ] + } + }, + { + "id": "check_assassin_disappeared_invisible", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "assassin_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "check_assassin_disappeared_visible" + ] + }, + { + "boolCondition": false, + "steps": [ "check_irregulars_disappeared_invisible" + ] + } + ] + } + }, + { + "id": "check_assassin_disappeared_visible", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "assassin_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "set_aside_disappeared" + ] + } + ] + } + }, + { + "id": "check_irregulars_disappeared_invisible", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "irregulars_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "check_irregulars_disappeared_visible" + ] + }, + { + "boolCondition": false, + "steps": [ "no_disappearance" + ] + } + ] + } + }, + { + "id": "check_irregulars_disappeared_visible", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "irregulars_disappeared_unexpectedly", + "options": [ + { + "boolCondition": true, + "steps": [ "set_aside_disappeared" + ] + } + ] + } + }, + { + "id": "set_aside_disappeared", + "bullet_type": "small", + "text": "Set a copy of that enemy aside, out of play." + }, + { + "id": "no_disappearance", + "text": "No enemy disappeared unexpectedly, so no further changes are made." + }, + { + "id": "check_future", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "investigators_stepped_into_future", + "options": [ + { + "boolCondition": true, + "steps": ["future_remove"] + }, + { + "boolCondition": false, + "steps": ["check_past"] + } + ] + } + }, + { + "id": "check_past", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "investigators_stepped_into_past", + "options": [ + { + "boolCondition": true, + "steps": ["past_remove"] + } + ] + } + }, + { + "id": "future_remove", + "bullet_type": "small", + "text": "Remove Ritual Circle (A Harnessed Future) from the game." + }, + { + "id": "past_remove", + "bullet_type": "small", + "text": "Remove Ritual Circle (Gateway to the Past) from the game." + }, + { + "id": "set_aside_cards", + "text": " Set each remaining location aside, out of play, along with Estravius Malone, Hound of Unmaking, Unstable Warding,Unstable Energies, The Myriad Gentleman (The High Priest) and each copy of Unleashed Chaos, Stirring Titan and Hired Thugs. " + }, + { + "id": "encounter_deck", + "text": "Shuffle the remainder of the encounter cards to build the encounter deck." + }, + { + "id": "past_and_present_rule", + "type": "rule_reminder", + "title": "The Past and the Present", + "text": "This scenario has two act decks. The \"a/b\" deck represents the progress of the present investigators, and behaves as normal, while the \"c/d\" act deck tracks the actions of the investigators' past selves.\nEach \"c/d\" act has one or more conditions for advancing, at least one of which should be recorded in your Campaign Log with a time next to it. After checking the doom threshold each round, compare these times to the current agenda number and amount of doom on the agenda. Advance the act if:", + "bullets": [ + { + "text": "The current agenda number is equal to the one recorded, and there is at least as much doom on the current agenda as is recorded, or:" + }, + { + "text": "The current agenda number is greater than the one recorded." + } + ], + "example": "For example: Act 1c advances when the boundary is broken. Agnes Baker has this statement in her Campaign Log, with (1,5) written next to it. After checking the doom threshold each round, she checks this, and when the agenda has 5 or more doom on it, she advances to act 1d. If, due to her Dark Memory weakness, agenda 1 advanced after having only 4 doom on it the previous round, she would still advance act 1c that round, as the agenda number, 2, is greater than the recorded agenda number, 1." + }, + { + "id": "resolution_2", + "type": "resolution", + "resolution": "R2" + }, + { + "id": "all_times_are_one", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "all_times_are_one", + "text": "all times are one." + } + ] + }, + { + "id": "all_insane", + "text": "Each investigator is driven insane.", + "effects": [ + { + "type": "trauma", + "investigator": "all", + "insane": true + } + ] + + }, + { + "id": "campaign_loss", + "text": "The investigators lose the campaign.", + "effects": [ + { + "type": "campaign_data", + "setting": "skip_scenario", + "scenario": "time_runs_out" + }, + { + "type": "campaign_data", + "setting": "skip_scenario", + "scenario": "au_epilogue" + }, + { + "type": "campaign_data", + "setting": "result", + "value": "lose" + } + ] + }, + { + "id": "earn_xp", + "text": "Each investigator earns experience equal to the Victory X value of each card in the victory display.", + "type": "input", + "input": { + "type": "counter", + "text": "Victory display:", + "effects": [ + { + "type": "earn_xp", + "investigator": "all" + } + ] + } + } + ], + "resolutions": [ + { + "id": "no_resolution", + "title": "No resolution was reached", + "description": "Each investigator was defeated", + "investigator_status": [ + "eliminated", + "physical", + "mental" + ], + "steps": [ + "resolution_2" + ] + }, + { + "id": "R1", + "title": "Resolution 1", + "text": "Minutes and eons rush past you, ancient secrets and terrible futures. A force tugs on you, urging you to fall, to be lost in the timestream once more.\nThis time, however, you are not so easily taken. You stand, holding firm against the pull of entropy, and step. One step, then another, dragging yourself through time. You can control this, forge your own path, straight towards Aforgomon. Pushing towards an ending, one way or another.", + "steps": [ + "earn_xp", + "$upgrade_decks" + ] + }, + { + "id": "R2", + "hidden": true, + "title": "Resolution 2", + "text": "You run, panting, down an alley. The armed men are still in pursuit-\nAs you explore the manor's garden, a tall man in a fine suit strolls out to meet you-\nYour family, such as it is, stands at your bedside, awaiting-\nYou let out an ear-piercing wail, unsteady on your tiny legs-\n-scratching desperately at the runes painted on the floor, hoping against hope that-\n\"Mama.\" Your first word.\n\"I'm sorry. I failed you all.\" Your last.", + "steps": [ + "all_times_are_one", + "all_insane", + "campaign_loss" + ] + } + ] + } \ No newline at end of file diff --git a/campaigns/zau/09_time_runs_out.json b/campaigns/zau/09_time_runs_out.json new file mode 100644 index 000000000..3647c9b37 --- /dev/null +++ b/campaigns/zau/09_time_runs_out.json @@ -0,0 +1,373 @@ +{ + "id": "time_runs_out", + "scenario_name": "Time Runs Out", + "header": "Scenario VII", + "full_name": "Scenario VII: Time Runs Out", + "chaos_bag_card": "zau_00182", + "chaos_bag_card_text": "[skull]: -X. X is the current act number.\n[cultist]: -2. If you succeed and it is your turn, gain an action.\n[tablet]: -4. If you fail and it is your turn, lose 1 action.\n[elder_thing]: -5. If you fail, either exile a card from your hand or place 1 doom on your location.", + "chaos_bag_card_back_text": "[skull]: -X. X is twice the current act number.\n[cultist]: -3. If you succeed and it is your turn, gain an action.\n[tablet]: -5. If it is your turn and you did not succeed by at least 2, lose 1 action.\n[elder_thing]: -8. If you fail, either exile a card from your hand or place 1 doom on your location.", + "icon": "zau_time_runs_out", + "setup": [ + "intro", + "$check_tarot_reading", + "gather_encounter_sets", + "check_chaos", + "setup_locations", + "set_aside_cards", + "encounter_deck", + "random_location_rule", + "exile_rule", + "$play_scenario" + ], + "steps": [ + { + "id": "intro", + "type": "story", + "text": "\"Even as I write this at my library table, it seems that an ancient midnight plucks at the lamp. The bookcases turn to walls of oozing, nighted stone. There is no longer a table ... nor one who writes... and I breathe the noisome dankness of a dungeon lying unfathomed by any sun, in a lost world.\"\n- Clark Ashton Smith, \"The Chain of Aforgomon\"\nTime lies before you, an endless expanse of realities.\nEven in the midst of your current mission, you're forced to take a moment to gawk. Everything that ever was, everything that ever will be, could be, is here, open to you like the pages of a book. The knowledge, the opportunity, the sheer beauty of it all... it's a lot to take in.\nStill, the moment passes, and the beauty of the scene is marred somewhat by the formless presence rising above it. Aforgomon, god of the minutes and the cycles; an unfathomable being who seeks nothing less than to unmake everything you see here. Mount Hollyoke's disrupted ritual is the fulcrum through which Aforgomon can reach into your universe.\nAnd between this cosmic force and the universe it seeks to annihilate... you. You suddenly feel very, very small." + }, + { + "id": "gather_encounter_sets", + "title": "Setup", + "type": "encounter_sets", + "encounter_sets": [ + "zau_time_runs_out", + "zau_agents_of_aforgomon", + "zau_paradox", + "zau_unravelling_years" + ] + }, + { + "id": "check_chaos", + "type": "branch", + "text": "Check Ritual Timeline. If the investigators unleashed chaos.", + "condition": { + "type": "campaign_log", + "section": "timeline", + "id": "unleashed_chaos", + "options": [ + { + "boolCondition": true, + "steps": [ + "add_unleashed_chaos" + ] + } + ] + } + }, + { + "id": "add_unleashed_chaos", + "type": "encounter_sets", + "encounter_sets": [ "zau_unleashed_chaos"], + "text": "Also gather the Unleashed Chaos encounter set." + }, + { + "id": "setup_locations", + "text": "Put one of the two versions of the following locations into play at random, revealed side faceup: Fulcrum of Possibility, Days That Never Were, Secrets Long Forgotten, Today, a Thousand Times, What Could Be, What Could Never Be, Dawn of the Universe and The End of All Things. Remove the other versions of each of those locations from the game. Each investigator begins play in Fulcrum of Possibility." + }, + { + "id": "set_aside_cards", + "text": "Set The Past, The Present, The Future, and Yourself aside, out of play." + }, + { + "id": "encounter_deck", + "text": "Shuffle the remainder of the encounter cards to build the encounter deck." + }, + { + "id": "random_location_rule", + "type": "rule_reminder", + "title": "Locations Outside of Time", + "text": "Many of the locations in this scenario have no unrevealed side, and therefore enter play with their revealed side faceup. For the best experience, do not look at the reverse of these cards unless an effect instructs you to do so.During this scenario, you will sometimes be instructed to choose a random location. This should be done by shuffling together the 8 locations removed from the game during setup (the versions of each location in play not currently being used) and drawing 1 at random. If you are instructed to choose a random location that fits a certain criterion, keep drawing locations until one is drawn that satisfies the effect's requirements." + }, + { + "id": "exile_rule", + "type": "rule_reminder", + "title": "Exile", + "text": "When a card is exiled, it is removed from the game and returned to your collection. During campaign play, a card that has been exiled must be purchased again with experience points (between scenarios) if you wish to re-include it in your deck. If a game effect forces you to choose a target to exile, weaknesses and permanent assets are not valid targets." + }, + { + "id": "$play_scenario", + "type": "input", + "input": { + "type": "play_scenario", + "branches": [ + { + "id": "randomize_locations", + "text": "Choose a random location", + "steps": [ + "choose_random_location" + ] + } + ] + } + }, + { + "id": "choose_random_location", + "type": "input", + "input": { + "type": "random_location", + "cards": [ + "zau_00189", + "zau_00190", + "zau_00191", + "zau_00192", + "zau_00193", + "zau_00194", + "zau_00195", + "zau_00196" + ] + } + }, + { + "id": "all_times_are_one", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "all_times_are_one", + "text": "all times are one." + } + ] + }, + { + "id": "all_insane", + "text": "Each investigator is driven insane.", + "effects": [ + { + "type": "trauma", + "investigator": "all", + "insane": true + } + ] + + }, + { + "id": "campaign_loss", + "text": "The investigators lose the campaign.", + "effects": [ + { + "type": "campaign_data", + "setting": "skip_scenario", + "scenario": "au_epilogue" + }, + { + "type": "campaign_data", + "setting": "result", + "value": "lose" + } + ] + }, + { + "id": "bound_aforgomon_in_a_prison_of_time", + "effects": [ + { + "type": "campaign_log", + "section": "campaign_notes", + "id": "bound_aforgomon_in_a_prison_of_time", + "text": "the investigators bound Aforgomon in a prison of time." + } + ] + }, + { + "id": "check_unspeakable_oath", + "type": "input", + "text": "For each investigator who ended the game with at least 1 copy of the Unspeakable Oath weakness in their hand, and whose existence is not waning, record in your Campaign Log that [investigator name] still bears Aforgomon's mark", + "input": { + "type": "investigator_choice", + "investigator": "all", + "source": "scenario", + "choices": [ + { + "id": "marked", + "text": "At least 1 Unspeakable Oath weakness in hand.", + "effects": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "marked", + "text": "one or more investigators still bear Aforgomon's mark." + }, + { + "type": "campaign_log_cards", + "section": "campaign_notes", + "id": "marked", + "cards": "$input_value", + "masculine_text": "#name# still bears Aforgomon's mark.", + "feminine_text": "#name# still bears Aforgomon's mark.", + "nonbinary_text": "#name# still bears Aforgomon's mark." + } + ] + } + ] + } + }, + { + "id": "check_existence_waning", + "type": "input", + "text": "In your Campaign Log, record the names of each investigator whose 'existence is waning'.", + "input": { + "type": "investigator_choice", + "investigator": "all", + "source": "scenario", + "choices": [ + { + "id": "waning", + "text": "Existence is waning", + "effects": [ + { + "type": "campaign_log", + "section": "hidden", + "id": "waning", + "text": "one or more investigators' existence is waning." + }, + { + "type": "campaign_log_cards", + "section": "campaign_notes", + "id": "waning", + "cards": "$input_value", + "masculine_text": "#name#'s existence is waning.", + "feminine_text": "#name#'s existence is waning.", + "nonbinary_text": "#name#'s existence is waning." + }, + { + "type": "trauma", + "hidden": true, + "investigator": "$input_value", + "insane": true + } + ] + } + ] + } + }, + { + "id": "win_campaign", + "text": "The investigators win the campaign!", + "effects": [ + { + "type": "campaign_data", + "setting": "result", + "value": "win" + } + ] + }, + { + "id": "maybe_add_elder_thing", + "text": "Add 1 [elder_thing] token to the chaos bag. If you cannot, each investigator takes 1 mental trauma instead.", + "type": "branch", + "condition": { + "type": "multi", + "count": 1, + "conditions": [ + { + "type": "campaign_data", + "campaign_data": "chaos_bag", + "token": "elder_thing", + "options": [ + { + "numCondition": 4 + } + ] + } + ], + "options": [ + { + "boolCondition": true, + "effects": [ + { + "type": "trauma", + "investigator": "all", + "mental": 1 + } + ] + }, + { + "boolCondition": false, + "effects": [ + { + "type": "add_chaos_token", + "tokens": ["elder_thing"] + } + ] + } + ] + } + }, + { + "id": "repeat_scenario", + "text": "The investigators must replay Scenario VII: Time Runs Out. Reset the game to this scenario’s Setup. Do not record anything else in your Campaign Log except for any trauma suffered from your previous game. No experience points are earned from your previous game. Players may not alter their decks, even if they are in an illegal state, or remove any weaknesses added during the scenario. Any player whose investigator was killed or driven insane is eliminated and may not choose a new investigator to play.", + "effects": [ + { + "type": "campaign_data", + "setting": "replay_scenario", + "scenario": "time_runs_out" + } + ] + }, + { + "id": "resolution_1", + "type": "resolution", + "resolution": "R1" + }, + { + "id": "earn_xp", + "text": "Each investigator earns experience equal to the Victory X value of each card in the victory display.", + "type": "input", + "input": { + "type": "counter", + "text": "Victory display:", + "effects": [ + { + "type": "earn_xp", + "investigator": "all" + } + ] + } + } + ], + "resolutions": [ + { + "id": "no_resolution", + "title": "No resolution was reached", + "description": "Each investigator was defeated", + "investigator_status": [ + "eliminated", + "physical", + "mental" + ], + "steps": [ + "resolution_1" + ] + }, + { + "id": "R1", + "title": "Resolution 1", + "text": "The end of time is an experience unlike any other. Everything will be still; any sense of movement or causality was gone. Everything that was or could be or never was will be happening now, inasmuch as 'now' would have any meaning here.\nAll times are one. Everything will be now. And here is where you were stuck, where you would have been made part of an unchanging tapestry of reality, where you could be, would be, were, are, will be trapped forever. That is, if forever still existed.", + "steps": [ + "all_times_are_one", + "all_insane", + "campaign_loss" + ] + }, + { + "id": "R2", + "title": "Resolution 2", + "text": "You find yourself, eventually, lying on a smooth, flat surface. Every inch of your body wants to sink into the floor, become one with the ground. You stay that way for a long, long time.\nIt's the smell of smoke that finally makes you pull yourself up. You're in the gymnasium of Mount Hollyoke Elementary School. The cultists and gangsters seem to be long gone, leaving behind only dormant runes and abandoned texts. The smoke drifts in from the rear door, so you exit out the front.\nDay broke at some point, perhaps more than once. But you made it through, reality made it through, and perhaps, now, you can return to some semblance of normality. You've not lived that life for a year, sure, but you're the only you in the present now. You'll need to find somewhere new to live...\nLost in your thoughts, you watch as a conflagration consumes the school, presumably set by the backfiring ritual. This whole thing started with a fire; it seems only fitting that it should end the same way.", + "steps": [ + "bound_aforgomon_in_a_prison_of_time", + "check_existence_waning", + "check_unspeakable_oath", + "earn_xp", + "win_campaign" + ] + }, + { + "id": "R3", + "title": "Resolution 3", + "text": "Time spins and whirls, which is an especially strange experience when you're standing outside it. Keeping a firm grip on the streams you're manipulating, you unwind the works of you and Aforgomon alike, until...\nTime lies before you, an endless expanse of realities.\nEverything that ever was, everything that ever will be, could be, is here, open to you like the pages of a book, reset to how it was before this fight begun. As Aforgomon's unholy presence once again looms above you, you let out a long breath, ready for round two.", + "steps": [ + "maybe_add_elder_thing", + "repeat_scenario" + ] + } + ] + } \ No newline at end of file diff --git a/campaigns/zau/10_au_epilogue.json b/campaigns/zau/10_au_epilogue.json new file mode 100644 index 000000000..ad732d96f --- /dev/null +++ b/campaigns/zau/10_au_epilogue.json @@ -0,0 +1,108 @@ +{ + "id": "au_epilogue", + "scenario_name": "Epilogue", + "header": "", + "full_name": "Epilogue", + "icon": "zau_ages_unwound", + "type": "epilogue", + "setup": [ + "check_waning", + "check_marked", + "check_silver_twilight", + "$upgrade_decks" + ], + "steps": [ + { + "id": "check_waning", + "text": "Read only if at least one investigator's existence is waning", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "waning", + "options": [ + { + "boolCondition": true, + "steps": [ + "waning", + "erase_waning" + ] + } + ] + } + }, + { + "id": "waning", + "type": "story", + "text": "You're tired. This isn't exactly surprising; you just fought a god. As you wend your way through the early-morning Arkham streets, though, you feel surprisingly light on your feet - if fatigue weighs you down, this feeling lifts you up, until you're practically floating. You feel yourself drift off, still walking, into a cozy, endless sleep..." + }, + { + "id": "erase_waning", + "text": "Each investigator whose existence is waning is erased from reality. Remove that investigator's entry from your Campaign Log as thoroughly as possible, as that investigator never existed.", + "type": "branch", + "condition": { + "type": "campaign_log_cards", + "section": "campaign_notes", + "id": "waning", + "options": [ + { + "boolCondition": true, + "effects": [ + { + "type": "trauma", + "investigator": "$input_value", + "insane": true + } + ] + } + ] + } + }, + { + "id": "check_marked", + "text": "Read only if at least one surviving investigator still bears Aforgomon's mark", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "hidden", + "id": "marked", + "options": [ + { + "boolCondition": true, + "steps": [ + "marked" + ] + } + ] + } + }, + { + "id": "marked", + "type": "story", + "text": "In the years that follow, you remain fascinated with time. After all, you understand spacetime perhaps better than anyone else alive. You try to share your findings a few times; each time, your theories are shot down as outlandish and unfounded. There's so much you could teach the world - you could advance the field of physics by decades with what you know - but nobody wants to listen.\nFour years after your final confrontation with Aforgomon, you knock three times on the front door of an elegant manor on the outskirts of Arkham. A silent butler leads you to a bedchamber, where thick velvet curtains block out all light and the smell of death hangs heavy in the air. The room's occupant stirs slightly.\n\"I'm so, so glad that you accepted my invitation.\" The voice is barely more than a whisper. The withered form of Joseph Baxter, the Myriad Gentleman, looks at least a hundred years old. He smiles at you, the predatory smile looking rather out of place on the old man's face. \"We have much work to do.\"" + }, + { + "id": "check_silver_twilight", + "text": "Read only if you have advanced the schemes of the Silver Twilight Lodge", + "type": "branch", + "condition": { + "type": "campaign_log", + "section": "campaign_notes", + "id": "advanced_the_schemes_of_the_silver_twilight_lodge", + "options": [ + { + "boolCondition": true, + "steps": [ + "lodge" + ] + } + ] + } + }, + { + "id": "lodge", + "type": "story", + "text": "\"And we're quite certain it's real?\" Carl Sanford's eyes rest on the slight man sat nervously before him. Mr. Sanford was an intimidating man at the best of times, but the intensity he was focusing on the messenger made the man want to shrink into nothingness.\n\"Y-yes sir,\" he managed, \"Our trials were conclusive. We now only miss one component-\"\n\"Not quite. Our new friends helped us with that as well.\" Eyes twinkling, Sanford produces a loose array of singed papers from his desk. \"After helping dispatch Baxter's operation, one of our agents recovered some of his research. We have everything we need.\n\"Let the great work begin.\"" + } + ] +} \ No newline at end of file diff --git a/campaigns/zau/campaign.json b/campaigns/zau/campaign.json new file mode 100644 index 000000000..098c6e345 --- /dev/null +++ b/campaigns/zau/campaign.json @@ -0,0 +1,363 @@ +{ + "id": "zau", + "position": 25, + "version": 1, + "name": "Ages Unwound", + "tarot": [ + "night_of_fire", + "the_myriad_gentleman", + "a_world_torn_down", + "unstuck", + "a_year_to_plan", + "a_world_torn_down_again", + "time_runs_out" + ], + "custom": { + "creator": "Olivia Juliet", + "download_link": { + "en": "https://mysteriouschanting.wordpress.com/2021/11/10/ages-unwound-campaign/" + } + }, + "campaign_type": "campaign", + "campaign_log": [ + { + "id": "timeline", + "title": "Ritual Timeline" + }, + { + "id": "campaign_notes", + "title": "Campaign Notes" + }, + { + "id": "strange_assistance", + "title": "Strange Assistance", + "type": "count" + }, + { + "id": "hidden", + "hidden": true, + "title": "Hidden" + } + ], + "scenarios": [ + "au_prologue", + "night_of_fire", + "an_unknown_benefactor", + "the_myriad_gentleman", + "a_world_torn_down", + "unstuck", + "a_year_to_plan", + "a_world_torn_down_again", + "time_runs_out", + "au_epilogue" + ], + "setup": [ + "quote", + "choose_investigators", + "difficulty_choice", + "$alert", + "$story", + "$swarming", + "maybe_draw_weakness" + ], + "steps": [ + + { + "id": "maybe_draw_weakness", + "type": "branch", + "hidden": true, + "condition": { + "type": "campaign_data", + "campaign_data": "version", + "min_version": 1, + "options": [ + { + "boolCondition": true, + "steps": ["draw_weakness"] + } + ] + } + }, + { + "id": "draw_weakness", + "type": "input", + "bullet_type": "none", + "input": { + "type": "investigator_choice", + "source": "scenario", + "investigator": "all", + "choices": [ + { + "id": "rbw", + "text": "Draw Random Basic Weakness", + "effects": [ + { + "type": "add_weakness", + "investigator": "$input_value", + "weakness_traits": [], + "select_traits": false + }, + { + "type": "remove_card", + "investigator": "$input_value", + "card": "01000", + "non_story": true + } + ], + "steps": ["save_decks"] + } + ] + } + }, + { + "id": "save_decks", + "type": "input", + "input": { + "type": "save_decks", + "trauma": true + } + }, + { + "id": "quote", + "type": "story", + "title": "Time Takes its Toll", + "text": "“I was well acquainted with Milwarp over a term of years. But my recollection of the man is becoming strangely blurred, like an image in a misted mirror. His dark, half-alien personality, his preoccupation with the occult, his immense knowledge of Eastern life and lore, are things I remember with such effort and vagueness as attends the recovery of a dream. Sometimes I almost doubt that he ever existed. It is as if the man, and all that pertains to him, were being erased from human record by some mysterious acceleration of the common process of obliteration.”\n - Clark Ashton Smith, The Chain of Aforgomon." + }, + { + "id": "choose_investigators", + "type": "input", + "input": { + "type": "scenario_investigators" + } + }, + { + "id": "difficulty_choice", + "text": "Choose difficulty level:", + "type": "input", + "input": { + "type": "choose_one", + "default_choice": "standard", + "choices": [ + { + "id": "easy", + "text": "Easy", + "description": "I want to experience the story", + "tokens": [ + "+1", + "+1", + "0", + "0", + "0", + "-1", + "-1", + "-1", + "-2", + "-2", + "skull", + "skull", + "skull", + "cultist", + "tablet", + "auto_fail", + "elder_sign" + ], + "effects": [ + { + "type": "campaign_data", + "setting": "difficulty", + "value": "easy" + }, + { + "type": "add_chaos_token", + "tokens": [ + "+1", + "+1", + "0", + "0", + "0", + "-1", + "-1", + "-1", + "-2", + "-2", + "skull", + "skull", + "skull", + "cultist", + "tablet", + "auto_fail", + "elder_sign" + ] + } + ] + }, + { + "id": "standard", + "text": "Standard", + "description": "I want a challenge", + "tokens": [ + "+1", + "0", + "0", + "-1", + "-1", + "-1", + "-2", + "-2", + "-3", + "-4", + "skull", + "skull", + "skull", + "cultist", + "tablet", + "auto_fail", + "elder_sign" + ], + "effects": [ + { + "type": "campaign_data", + "setting": "difficulty", + "value": "standard" + }, + { + "type": "add_chaos_token", + "tokens": [ + "+1", + "0", + "0", + "-1", + "-1", + "-1", + "-2", + "-2", + "-3", + "-4", + "skull", + "skull", + "skull", + "cultist", + "tablet", + "auto_fail", + "elder_sign" + ] + } + ] + }, + { + "id": "hard", + "text": "Hard", + "description": "I want a true nightmare", + "tokens": [ + "0", + "0", + "0", + "-1", + "-1", + "-2", + "-2", + "-3", + "-3", + "-4", + "-5", + "skull", + "skull", + "skull", + "cultist", + "tablet", + "auto_fail", + "elder_sign" + ], + "effects": [ + { + "type": "campaign_data", + "setting": "difficulty", + "value": "hard" + }, + { + "type": "add_chaos_token", + "tokens": [ + "0", + "0", + "0", + "-1", + "-1", + "-2", + "-2", + "-3", + "-3", + "-4", + "-5", + "skull", + "skull", + "skull", + "cultist", + "tablet", + "auto_fail", + "elder_sign" + ] + } + ] + }, + { + "id": "expert", + "text": "Expert", + "description": "I will heed the call", + "tokens": [ + "0", + "-1", + "-1", + "-2", + "-2", + "-3", + "-3", + "-4", + "-4", + "-5", + "-6", + "-8", + "skull", + "skull", + "skull", + "cultist", + "tablet", + "auto_fail", + "elder_sign" + ], + "effects": [ + { + "type": "campaign_data", + "setting": "difficulty", + "value": "expert" + }, + { + "type": "add_chaos_token", + "tokens": [ + "0", + "-1", + "-1", + "-2", + "-2", + "-3", + "-3", + "-4", + "-4", + "-5", + "-6", + "-8", + "skull", + "skull", + "skull", + "cultist", + "tablet", + "auto_fail", + "elder_sign" + ] + } + ] + } + ] + } + } + ] +} \ No newline at end of file diff --git a/campaigns/zau/core.json b/campaigns/zau/core.json new file mode 100644 index 000000000..86fe3b0f6 --- /dev/null +++ b/campaigns/zau/core.json @@ -0,0 +1,59 @@ +{ + "id": "core", + "scenario_name": "Ages Unwound", + "full_name": "Ages Unwound", + "header": "", + "type": "core", + "setup": [ + "$alert", + "$story", + "$swarming", + "$haunted_rule" + ], + "steps": [ + { + "id": "$alert", + "type": "rule_reminder", + "title": "Alert", + "text": "Each time an investigator fails a skill test while attempting to evade an enemy with the alert keyword, after applying all results for that skill test, that enemy performs an attack against the evading investigator. An enemy does not exhaust after performing an alert attack. This attack occurs whether the enemy is engaged with the evading investigator or not." + }, + { + "id": "$story", + "type": "rule_reminder", + "title": "Story Cards", + "text": "Story cards serve as an avenue for additional narrative and typically appear as the reverse side of another scenario card. When you are instructed to resolve a story card, simply read its story text and resolve its game text." + }, + { + "id": "$swarming", + "type": "rule_reminder", + "title": "Swarming X", + "text": "An enemy with the swarming X keyword is actually a pack of enemies operating in unison. After you put an enemy with the swarming X keyword into play, place the top X cards of your deck facedown underneath the enemy as swarm cards, without looking at them. The enemy they are underneath is called the “host enemy.” Some scenario card effects may also instruct a player to add swarm cards to an enemy. This is done using the same process.", + "bullets": [ + { + "text": "If it is ever unclear which investigator should add swarm cards, the lead investigator does so." + }, + { + "text": "Each swarm card underneath the host enemy acts as a separate instance of that enemy for most purposes. Each swarm card has the same values and text as its host card. (For example, if an investigator is engaged with a host enemy with 2 swarm cards underneath it, that investigator is engaged with 3 enemies in total.)" + }, + { + "text": "Each swarm card attacks separately when enemies attack during the enemy phase. Once the host enemy and all of its swarm cards have attacked during this step, exhaust all of them." + }, + { + "text": "Each swarm card can be attacked or dealt damage separately, but the host enemy cannot be defeated while it still has swarm cards underneath it. When a swarm card is defeated, any excess damage may be dealt to another swarm card underneath the same host enemy or to the host enemy itself. (For example, Tony Morgan uses a .41 Derringer to attack a Stealthy Zoog with 2 swarm cards. The attack deals 2 damage. The first point of damage defeats 1 of the 2 swarm cards, so the excess point of damage may be dealt to another swarm card, defeating it as well.)" + }, + { + "text": "Anytime a swarm card leaves play, place it on the bottom of its owner’s deck. If you are unsure of the owner of the swarm card, you may look at it to determine its owner." + }, + { + "text": "The host enemy and all of its swarm cards move, engage, and exhaust as a single entity. (For example, if a host enemy or any of its swarm cards are evaded, all of them exhaust and become disengaged.)" + } + ] + }, + { + "id": "$haunted_rule", + "title": "Haunted", + "type": "rule_reminder", + "text": "Haunted is a new ability that appears on some locations. Each time an investigator fails a skill test while investigating a location, after applying all results for that skill test, that investigator must resolve all \"Haunted –\" abilities on that location.\nA location is \"haunted\" for the purposes of other card effects if it has at least one \"Haunted –\" ability (printed or otherwise)." + } + ] +} \ No newline at end of file diff --git a/cards/zau.json b/cards/zau.json index 562508228..fcf1ca892 100644 --- a/cards/zau.json +++ b/cards/zau.json @@ -468,7 +468,7 @@ "clues": 1, "code": "zau_00189", "double_sided": true, - "encounter_code": "zau_unstuck", + "encounter_code": "zau_time_runs_out", "encounter_position": 14, "faction_code": "mythos", "back_flavor": "", @@ -487,7 +487,7 @@ "clues": 1, "code": "zau_00190", "double_sided": true, - "encounter_code": "zau_unstuck", + "encounter_code": "zau_time_runs_out", "encounter_position": 16, "faction_code": "mythos", "back_flavor": "", @@ -506,7 +506,7 @@ "clues": 1, "code": "zau_00191", "double_sided": true, - "encounter_code": "zau_unstuck", + "encounter_code": "zau_time_runs_out", "encounter_position": 18, "faction_code": "mythos", "back_flavor": "", @@ -525,7 +525,7 @@ "clues": 2, "code": "zau_00192", "double_sided": true, - "encounter_code": "zau_unstuck", + "encounter_code": "zau_time_runs_out", "encounter_position": 20, "faction_code": "mythos", "back_flavor": "", @@ -544,7 +544,7 @@ "clues": 1, "code": "zau_00193", "double_sided": true, - "encounter_code": "zau_unstuck", + "encounter_code": "zau_time_runs_out", "encounter_position": 22, "faction_code": "mythos", "back_flavor": "", @@ -563,7 +563,7 @@ "clues": 1, "code": "zau_00194", "double_sided": true, - "encounter_code": "zau_unstuck", + "encounter_code": "zau_time_runs_out", "encounter_position": 24, "faction_code": "mythos", "back_flavor": "", @@ -582,7 +582,7 @@ "clues": 1, "code": "zau_00195", "double_sided": true, - "encounter_code": "zau_unstuck", + "encounter_code": "zau_time_runs_out", "encounter_position": 26, "faction_code": "mythos", "back_flavor": "", @@ -601,7 +601,7 @@ "clues": 2, "code": "zau_00196", "double_sided": true, - "encounter_code": "zau_unstuck", + "encounter_code": "zau_time_runs_out", "encounter_position": 28, "faction_code": "mythos", "back_flavor": "", diff --git a/chaos_tokens.json b/chaos_tokens.json index b1825af99..d707b99e7 100644 --- a/chaos_tokens.json +++ b/chaos_tokens.json @@ -9640,5 +9640,435 @@ } } ] + }, + { + "code": "zau_00001", + "scenario": "night_of_fire", + "standard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "Half the number of locations in the Arkham Streets deck (rounded down)" + } + }, + { + "token": "cultist", + "value": { + "modifier": 0, + "reveal_another": 1 + } + }, + { + "token": "tablet", + "type": "condition", + "condition": { + "default_value": { + "modifier": -3 + }, + "options": [{ + "prompt": "You have moved this turn", + "modified_value": { + "modifier": -1 + } + }] + } + } + ], + "hard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "The number of locations in the Arkham Streets deck" + } + }, + { + "token": "cultist", + "value": { + "modifier": 0, + "reveal_another": 1 + } + }, + { + "token": "tablet", + "type": "condition", + "condition": { + "default_value": { + "modifier": -4 + }, + "options": [{ + "prompt": "You have moved this turn", + "modified_value": { + "modifier": -2 + } + }] + } + } + ] + }, + { + "code": "zau_00023", + "scenario": "the_myriad_gentleman", + "standard": [ + { + "token": "skull", + "type": "condition", + "condition": { + "default_value": { + "modifier": -1 + }, + "options": [{ + "prompt": "There is a [[Myriad]] enemy at your location", + "modified_value": { + "modifier": -3 + } + }] + } + }, + { + "token": "cultist", + "value": { + "modifier": -1 + } + }, + { + "token": "tablet", + "value": { + "modifier": -2 + } + } + ], + "hard": [ + { + "token": "skull", + "type": "condition", + "condition": { + "default_value": { + "modifier": -2 + }, + "options": [{ + "prompt": "There is a [[Myriad]] enemy at your location", + "modified_value": { + "modifier": -4 + } + }] + } + }, + { + "token": "cultist", + "value": { + "modifier": -3 + } + }, + { + "token": "tablet", + "value": { + "modifier": -3 + } + } + ] + }, + { + "code": "zau_00048", + "scenario": "a_world_torn_down", + "standard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "Half the number of actions you have remaining (rounded up)" + } + }, + { + "token": "cultist", + "value": { + "modifier": -3 + } + }, + { + "token": "tablet", + "value": { + "modifier": -3 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": 0, + "reveal_another": 1 + } + } + ], + "hard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "The number of actions you have remaining" + } + }, + { + "token": "cultist", + "value": { + "modifier": -5 + } + }, + { + "token": "tablet", + "value": { + "modifier": -5 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": 0, + "reveal_another": 1 + } + } + ] + }, + { + "code": "zau_00062", + "scenario": "unstuck", + "standard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "Current agenda number", + "min": 1 + } + }, + { + "token": "cultist", + "value": { + "modifier": 0, + "reveal_another": 1 + } + }, + { + "token": "tablet", + "value": { + "modifier": -2 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": -4 + } + } + ], + "hard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "The sum of the current act number and the current agenda number", + "min": 2 + } + }, + { + "token": "cultist", + "value": { + "modifier": 0, + "reveal_another": 1 + } + }, + { + "token": "tablet", + "value": { + "modifier": -3 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": -5 + } + } + ] + }, + { + "code": "zau_00105", + "scenario": "a_year_to_plan", + "standard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "Half the number of completed [[Tasks]] (rounded down)", + "min": 0 + } + }, + { + "token": "cultist", + "value": { + "modifier": -5 + } + }, + { + "token": "tablet", + "value": { + "modifier": -2 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": -3 + } + } + ], + "hard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "The number of completed [[Tasks]]", + "min": 0 + } + }, + { + "token": "cultist", + "value": { + "modifier": -8 + } + }, + { + "token": "tablet", + "value": { + "modifier": -4 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": -5 + } + } + ] + }, + { + "code": "zau_00155", + "scenario": "a_world_torn_down_again", + "standard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "The number of actions you have remaining" + } + }, + { + "token": "cultist", + "value": { + "modifier": -1 + } + }, + { + "token": "tablet", + "value": { + "modifier": -3 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": -5 + } + } + ], + "hard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "The number of actions you have remaining", + "adjustment": 1 + } + }, + { + "token": "cultist", + "value": { + "modifier": -3 + } + }, + { + "token": "tablet", + "value": { + "modifier": -5 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": "auto_fail" + } + } + ] + }, + { + "code": "zau_00182", + "scenario": "time_runs_out", + "standard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "Current act number", + "min": 1 + } + }, + { + "token": "cultist", + "value": { + "modifier": -2 + } + }, + { + "token": "tablet", + "value": { + "modifier": -4 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": -5 + } + } + ], + "hard": [ + { + "token": "skull", + "type": "counter", + "counter": { + "prompt": "Current act number", + "min": 1, + "scale": 2 + } + }, + { + "token": "cultist", + "value": { + "modifier": -3 + } + }, + { + "token": "tablet", + "value": { + "modifier": -5 + } + }, + { + "token": "elder_thing", + "value": { + "modifier": -8 + } + } + ] } ] diff --git a/encounter_sets.json b/encounter_sets.json index 76e697bd8..0be070e35 100644 --- a/encounter_sets.json +++ b/encounter_sets.json @@ -1,1994 +1,1994 @@ -[ - { - "code": "torch", - "name": "The Gathering" - }, - { - "code": "arkham", - "name": "The Midnight Masks" - }, - { - "code": "cultists", - "name": "Cult of Umôrdhoth" - }, - { - "code": "tentacles", - "name": "The Devourer Below" - }, - { - "code": "rats", - "name": "Rats" - }, - { - "code": "ghouls", - "name": "Ghouls" - }, - { - "code": "striking_fear", - "name": "Striking Fear" - }, - { - "code": "ancient_evils", - "name": "Ancient Evils" - }, - { - "code": "chilling_cold", - "name": "Chilling Cold" - }, - { - "code": "pentagram", - "name": "Dark Cult" - }, - { - "code": "nightgaunts", - "name": "Nightgaunts" - }, - { - "code": "locked_doors", - "name": "Locked Doors" - }, - { - "code": "agents_of_hastur", - "name": "Agents of Hastur" - }, - { - "code": "agents_of_yog", - "name": "Agents of Yog-Sothoth" - }, - { - "code": "agents_of_shub", - "name": "Agents of Shub-Niggurath" - }, - { - "code": "agents_of_cthulhu", - "name": "Agents of Cthulhu" - }, - { - "code": "unknown", - "name": "Unknown" - }, - { - "code": "bayou", - "name": "The Bayou" - }, - { - "code": "rougarou", - "name": "Curse of the Rougarou" - }, - { - "code": "venice", - "name": "Carnevale of Horrors" - }, - { - "code": "armitages_fate", - "name": "Armitage's Fate" - }, - { - "code": "bishops_thralls", - "name": "Bishop's Thralls" - }, - { - "code": "beast_thralls", - "name": "Beast Thralls" - }, - { - "code": "naomis_crew", - "name": "Naomi's Crew" - }, - { - "code": "extracurricular_activity", - "name": "Extracurricular Activity" - }, - { - "code": "the_house_always_wins", - "name": "The House Always Wins" - }, - { - "code": "sorcery", - "name": "Sorcery" - }, - { - "code": "dunwich", - "name": "Dunwich" - }, - { - "code": "whippoorwills", - "name": "Whippoorwills" - }, - { - "code": "bad_luck", - "name": "Bad Luck" - }, - { - "code": "the_beyond", - "name": "The Beyond" - }, - { - "code": "hideous_abominations", - "name": "Hideous Abominations" - }, - { - "code": "the_miskatonic_museum", - "name": "The Miskatonic Museum" - }, - { - "code": "essex_county_express", - "name": "The Essex County Express" - }, - { - "code": "blood_on_the_altar", - "name": "Blood On The Altar" - }, - { - "code": "undimensioned_and_unseen", - "name": "Undimensioned and Unseen" - }, - { - "code": "where_doom_awaits", - "name": "Where Doom Awaits" - }, - { - "code": "lost_in_time_and_space", - "name": "Lost in Time and Space" - }, - { - "code": "curtain_call", - "name": "Curtain Call" - }, - { - "code": "the_last_king", - "name": "The Last King" - }, - { - "code": "delusions", - "name": "Delusions" - }, - { - "code": "byakhee", - "name": "Byakhee" - }, - { - "code": "inhabitants_of_carcosa", - "name": "Inhabitants of Carcosa" - }, - { - "code": "evil_portents", - "name": "Evil Portents" - }, - { - "code": "hauntings", - "name": "Hauntings" - }, - { - "code": "hasturs_gift", - "name": "Hastur's Gift" - }, - { - "code": "cult_of_the_yellow_sign", - "name": "Cult of the Yellow Sign" - }, - { - "code": "decay", - "name": "Decay & Filth" - }, - { - "code": "stranger", - "name": "The Stranger" - }, - { - "code": "echoes_of_the_past", - "name": "Echoes of the Past" - }, - { - "code": "the_unspeakable_oath", - "name": "The Unspeakable Oath" - }, - { - "code": "a_phantom_of_truth", - "name": "A Phantom of Truth" - }, - { - "code": "the_pallid_mask", - "name": "The Pallid Mask" - }, - { - "code": "black_stars_rise", - "name": "Black Stars Rise" - }, - { - "code": "flood", - "name": "The Flood Below" - }, - { - "code": "vortex", - "name": "The Vortex Above" - }, - { - "code": "dim_carcosa", - "name": "Dim Carcosa" - }, - { - "code": "agents_of_yig", - "name": "Agents of Yig" - }, - { - "code": "traps", - "name": "Deadly Traps" - }, - { - "code": "expedition", - "name": "Expedition" - }, - { - "code": "ruins", - "name": "Forgotten Ruins" - }, - { - "code": "guardians_of_time", - "name": "Guardians of Time" - }, - { - "code": "pnakotic_brotherhood", - "name": "Pnakotic Brotherhood" - }, - { - "code": "poison", - "name": "Poison" - }, - { - "code": "rainforest", - "name": "Rainforest" - }, - { - "code": "serpents", - "name": "Serpents" - }, - { - "code": "flux", - "name": "Temporal Flux" - }, - { - "code": "eztli", - "name": "The Doom of Eztli" - }, - { - "code": "wilds", - "name": "The Untamed Wilds" - }, - { - "code": "venom", - "name": "Yig's Venom" - }, - { - "code": "threads_of_fate", - "name": "Threads of Fate" - }, - { - "code": "the_boundary_beyond", - "name": "The Boundary Beyond" - }, - { - "code": "heart_of_the_elders", - "name": "Heart of the Elders" - }, - { - "code": "pillars_of_judgment", - "name": "Pillars of Judgment" - }, - { - "code": "knyan", - "name": "K'n-yan" - }, - { - "code": "the_city_of_archives", - "name": "The City of Archives" - }, - { - "code": "the_depths_of_yoth", - "name": "The Depths of Yoth" - }, - { - "code": "shattered_aeons", - "name": "Shattered Aeons" - }, - { - "code": "turn_back_time", - "name": "Turn Back Time" - }, - { - "code": "agents_of_azathoth", - "name": "Agents of Azathoth" - }, - { - "code": "anettes_coven", - "name": "Anette's Coven" - }, - { - "code": "at_deaths_doorstep", - "name": "At Death's Doorstep" - }, - { - "code": "return_to_at_deaths_doorstep", - "name": "Return to At Death's Doorstep" - }, - { - "code": "city_of_sins", - "name": "City of Sins" - }, - { - "code": "city_of_the_damned", - "name": "City of the Damned" - }, - { - "code": "disappearance_at_the_twilight_estate", - "name": "Disappearance at the Twilight Estate" - }, - { - "code": "return_to_disappearance_at_the_twilight_estate", - "name": "Return to Disappearance at the Twilight Estate" - }, - { - "code": "inexorable_fate", - "name": "Inexorable Fate" - }, - { - "code": "unspeakable_fate", - "name": "Unspeakable Fate" - }, - { - "code": "realm_of_death", - "name": "Realm of Death" - }, - { - "code": "unstable_realm", - "name": "Unstable Realm" - }, - { - "code": "chilling_mists", - "name": "Chilling Mists" - }, - { - "code": "silver_twilight_lodge", - "name": "Silver Twilight Lodge" - }, - { - "code": "spectral_predators", - "name": "Spectral Predators" - }, - { - "code": "the_watcher", - "name": "The Watcher" - }, - { - "code": "the_witching_hour", - "name": "The Witching Hour" - }, - { - "code": "return_to_the_witching_hour", - "name": "Return to The Witching Hour" - }, - { - "code": "trapped_spirits", - "name": "Trapped Spirits" - }, - { - "code": "bloodthirsty_spirits", - "name": "Bloodthirsty Spirits" - }, - { - "code": "witchcraft", - "name": "Witchcraft" - }, - { - "code": "hexcraft", - "name": "Hexcraft" - }, - { - "code": "the_secret_name", - "name": "The Secret Name" - }, - { - "code": "return_to_the_secret_name", - "name": "Return to The Secret Name" - }, - { - "code": "the_wages_of_sin", - "name": "The Wages of Sin" - }, - { - "code": "return_to_the_wages_of_sin", - "name": "Return to The Wages of Sin" - }, - { - "code": "for_the_greater_good", - "name": "For the Greater Good" - }, - { - "code": "return_to_for_the_greater_good", - "name": "Return to For the Greater Good" - }, - { - "code": "union_and_disillusion", - "name": "Union and Disillusion" - }, - { - "code": "return_to_union_and_disillusion", - "name": "Return to Union and Disillusion" - }, - { - "code": "in_the_clutches_of_chaos", - "name": "In the Clutches of Chaos" - }, - { - "code": "return_to_in_the_clutches_of_chaos", - "name": "Return to In the Clutches of Chaos" - }, - { - "code": "music_of_the_damned", - "name": "Music of the Damned" - }, - { - "code": "secrets_of_the_universe", - "name": "Secrets of the Universe" - }, - { - "code": "before_the_black_throne", - "name": "Before the Black Throne" - }, - { - "code": "return_to_before_the_black_throne", - "name": "Return to Before the Black Throne" - }, - { - "code": "impending_evils", - "name": "Impending Evils" - }, - { - "code": "agents_of_atlach_nacha", - "name": "Agents of Atlach-Nacha" - }, - { - "code": "agents_of_nyarlathotep", - "name": "Agents of Nyarlathotep" - }, - { - "code": "corsairs", - "name": "Corsairs" - }, - { - "code": "creatures_of_the_underworld", - "name": "Creatures of the Underworld" - }, - { - "code": "dreamers_curse", - "name": "Dreamer's Curse" - }, - { - "code": "dreamlands", - "name": "Dreamlands" - }, - { - "code": "merging_realities", - "name": "Merging Realities" - }, - { - "code": "spiders", - "name": "Spiders" - }, - { - "code": "whispers_of_hypnos", - "name": "Whispers of Hypnos" - }, - { - "code": "zoogs", - "name": "Zoogs" - }, - { - "code": "in_the_labyrinths_of_lunacy", - "name": "The Labyrinths of Lunacy" - }, - { - "code": "epic_multiplayer", - "name": "Epic Multiplayer" - }, - { - "code": "single_group", - "name": "Single Group" - }, - { - "code": "abyssal_gifts", - "name": "Abyssal Gifts" - }, - { - "code": "abyssal_tribute", - "name": "Abyssal Tribute" - }, - { - "code": "brotherhood_of_the_beast", - "name": "Brotherhood of the Beast" - }, - { - "code": "sands_of_egypt", - "name": "Sands of Egypt" - }, - { - "code": "the_eternal_slumber", - "name": "The Eternal Slumber" - }, - { - "code": "the_nights_usurper", - "name": "The Night's Usurper" - }, - { - "code": "return_to_the_gathering", - "name": "Return to the Gathering" - }, - { - "code": "return_to_the_midnight_masks", - "name": "Return to the Midnight Masks" - }, - { - "code": "return_to_the_devourer_below", - "name": "Return to the Devourer Below" - }, - { - "code": "ghouls_of_umôrdhoth", - "name": "Ghouls of Umôrdhoth" - }, - { - "code": "the_devourers_cult", - "name": "The Devourers Cult" - }, - { - "code": "return_cult", - "name": "Return Cult of Umôrdhoth" - }, - { - "code": "return_to_extracurricular_activities", - "name": "Return to Extracurricular Activity" - }, - { - "code": "return_to_the_house_always_wins", - "name": "Return to The House Always Wins" - }, - { - "code": "return_to_the_miskatonic_museum", - "name": "Return to The Miskatonic Museum" - }, - { - "code": "return_to_the_essex_county_express", - "name": "Return to The Essex County Express" - }, - { - "code": "return_to_blood_on_the_altar", - "name": "Return to Blood on the Altar" - }, - { - "code": "return_to_undimensioned_and_unseen", - "name": "Return to Undimensioned and Unseen" - }, - { - "code": "return_to_where_doom_awaits", - "name": "Return to Where Doom Awaits" - }, - { - "code": "return_to_lost_in_time_and_space", - "name": "Return to Lost in Time and Space" - }, - { - "code": "resurgent_evils", - "name": "Resurgent Evils" - }, - { - "code": "erratic_fear", - "name": "Erratic Fear" - }, - { - "code": "creeping_cold", - "name": "Creeping Cold" - }, - { - "code": "secret_doors", - "name": "Secret Doors" - }, - { - "code": "yog_sothoths_emissaries", - "name": "Yog-Sothoth's Emissaries" - }, - { - "code": "beyond_the_threshold", - "name": "Beyond the Threshold" - }, - { - "code": "return_to_curtain_call", - "name": "Return to Curtain Call" - }, - { - "code": "return_to_the_last_king", - "name": "Return to The Last King" - }, - { - "code": "return_to_echoes_of_the_past", - "name": "Return to Echoes of the Past" - }, - { - "code": "return_to_the_unspeakable_oath", - "name": "Return to The Unspeakable Oath" - }, - { - "code": "return_to_a_phantom_of_truth", - "name": "Return to A Phantom of Truth" - }, - { - "code": "return_to_the_pallid_mask", - "name": "Return to The Pallid Mask" - }, - { - "code": "return_to_black_stars_rise", - "name": "Return to Black Stars Rise" - }, - { - "code": "return_to_dim_carcosa", - "name": "Return to Dim Carcosa" - }, - { - "code": "delusory_evils", - "name": "Delusory Evils" - }, - { - "code": "neurotic_fear", - "name": "Neurotic Fear" - }, - { - "code": "hasturs_envoys", - "name": "Hastur's Envoys" - }, - { - "code": "decaying_reality", - "name": "Decaying Reality" - }, - { - "code": "maddening_delusions", - "name": "Maddening Delusions" - }, - { - "code": "beyond_the_gates_of_sleep", - "name": "Beyond the Gates of Sleep" - }, - { - "code": "waking_nightmare", - "name": "Waking Nightmare" - }, - { - "code": "a_thousand_shapes_of_horror", - "name": "A Thousand Shapes of Horror" - }, - { - "code": "the_search_for_kadath", - "name": "The Search for Kadath" - }, - { - "code": "dark_side_of_the_moon", - "name": "Dark Side of the Moon" - }, - { - "code": "point_of_no_return", - "name": "Point of No Return" - }, - { - "code": "where_the_gods_dwell", - "name": "Where the Gods Dwell" - }, - { - "code": "weaver_of_the_cosmos", - "name": "Weaver of the Cosmos" - }, - { - "code": "terror_of_the_vale", - "name": "Terror of the Vale" - }, - { - "code": "descent_into_the_pitch", - "name": "Descent into the Pitch" - }, - { - "code": "murder_at_the_excelsior_hotel", - "name": "Murder at the Excelsior Hotel" - }, - { - "code": "alien_interference", - "name": "Alien Interference" - }, - { - "code": "dark_rituals", - "name": "Dark Rituals" - }, - { - "code": "excelsior_management", - "name": "Excelsior Management" - }, - { - "code": "sins_of_the_past", - "name": "Sins of the Past" - }, - { - "code": "vile_experiments", - "name": "Vile Experiments" - }, - { - "code": "blob", - "name": "The Blob That Ate Everything" - }, - { - "code": "blob_that_ate_everything_else", - "name": "The Blob That Ate Everything Else" - }, - { - "code": "blob_epic_multiplayer", - "name": "Epic Multiplayer" - }, - { - "code": "blob_single_group", - "name": "Single Group" - }, - { - "code": "migo_incursion", - "name": "Mi-Go Incursion" - }, - { - "code": "migo_incursion_2", - "name": "Mi-Go Incursion II" - }, - { - "code": "read_or_die", - "name": "Read or Die" - }, - { - "code": "all_or_nothing", - "name": "All or Nothing" - }, - { - "code": "bad_blood", - "name": "Bad Blood" - }, - { - "code": "by_the_book", - "name": "By the Book" - }, - { - "code": "return_to_the_untamed_wilds", - "name": "Return to the Untamed Wilds" - }, - { - "code": "return_to_the_doom_of_eztli", - "name": "Return to the Doom of Eztli" - }, - { - "code": "return_to_threads_of_fate", - "name": "Return to Threads of Fate" - }, - { - "code": "return_to_the_boundary_beyond", - "name": "Return to the Boundary Beyond" - }, - { - "code": "return_to_heart_of_the_elders", - "name": "Return to Heart of the Elders" - }, - { - "code": "return_to_pillars_of_judgment", - "name": "Return to Pillars of Judgment" - }, - { - "code": "return_to_knyan", - "name": "Return to K'n-yan" - }, - { - "code": "return_to_the_city_of_archives", - "name": "Return to the City of Archives" - }, - { - "code": "return_to_the_depths_of_yoth", - "name": "Return to the Depths of Yoth" - }, - { - "code": "return_to_shattered_aeons", - "name": "Return to Shattered Aeons" - }, - { - "code": "return_to_turn_back_time", - "name": "Return to Turn Back Time" - }, - { - "code": "return_to_the_rainforest", - "name": "Return to the Rainforest" - }, - { - "code": "cult_of_pnakotus", - "name": "Cult of Pnakotus" - }, - { - "code": "doomed_expedition", - "name": "Doomed Expedition" - }, - { - "code": "temporal_hunters", - "name": "Temporal Hunters" - }, - { - "code": "venomous_hate", - "name": "Venomous Hate" - }, - { - "code": "the_pit_of_despair", - "name": "The Pit of Despair" - }, - { - "code": "creatures_of_the_deep", - "name": "Creatures of the Deep" - }, - { - "code": "flooded_caverns", - "name": "Flooded Caverns" - }, - { - "code": "rising_tide", - "name": "Rising Tide" - }, - { - "code": "shattered_memories", - "name": "Shattered Memories" - }, - { - "code": "agents_of_dagon", - "name": "Agents of Dagon" - }, - { - "code": "agents_of_hydra", - "name": "Agents of Hydra" - }, - { - "code": "the_locals", - "name": "The Locals" - }, - { - "code": "fog_over_innsmouth", - "name": "Fog over Innsmouth" - }, - { - "code": "the_vanishing_of_elina_harper", - "name": "The Vanishing of Elina Harper" - }, - { - "code": "syzygy", - "name": "Syzygy" - }, - { - "code": "malfunction", - "name": "Malfunction" - }, - { - "code": "in_too_deep", - "name": "In Too Deep" - }, - { - "code": "devil_reef", - "name": "Devil Reef" - }, - { - "code": "war_of_the_outer_gods", - "name": "War of the Outer Gods" - }, - { - "code": "children_of_paradise", - "name": "Children of Paradise" - }, - { - "code": "swarm_of_assimilation", - "name": "Swarm of Assimilation" - }, - { - "code": "death_of_stars", - "name": "Death of Stars" - }, - { - "code": "meddling_of_meowlathotep", - "name": "The Meddling of Meowlathotep" - }, - { - "code": "horror_in_high_gear", - "name": "Horror in High Gear" - }, - { - "code": "a_light_in_the_fog", - "name": "A Light in the Fog" - }, - { - "code": "the_lair_of_dagon", - "name": "The Lair of Dagon" - }, - { - "code": "into_the_maelstrom", - "name": "Into the Maelstrom" - }, - { - "code": "the_tatterdemalion", - "name": "The Tatterdemalion" - }, - { - "code": "electric_nightmare", - "name": "Electric Nightmare" - }, - { - "code": "lost_quantum", - "name": "Lost Quantum" - }, - { - "code": "in_the_shadow_of_earth", - "name": "In the Shadow of Earth" - }, - { - "code": "strange_moons", - "name": "Strange Moons" - }, - { - "code": "the_machine_in_yellow", - "name": "The Machine in Yellow" - }, - { - "code": "fragment_of_carcosa", - "name": "Fragment of Carcosa" - }, - { - "code": "starfall", - "name": "Starfall" - }, - { - "code": "deep_space", - "name": "Deep Space" - }, - { - "code": "anachronism", - "name": "Anachronism" - }, - { - "code": "dark_past", - "name": "Dark Past" - }, - { - "code": "artificial_intelligence", - "name": "Artificial Intelligence" - }, - { - "code": "endtimes", - "name": "Endtimes" - }, - { - "code": "the_boogeyman", - "name": "The Boogeyman" - }, - { - "code": "interstellar_predators", - "name": "Interstellar Predators" - }, - { - "code": "hasturs_gaze", - "name": "Hastur's Gaze" - }, - { - "code": "consternation_on_the_constellation", - "name": "Consternation on the Constellation" - }, - { - "code": "deep_ones", - "name": "Deep Ones" - }, - { - "code": "sinking_ship", - "name": "Sinking Ship" - }, - { - "code": "a_sea_of_troubles", - "name": "A Sea of Troubles" - }, - { - "code": "gurathnakas_shadows", - "name": "Gurathnaka's Shadows" - }, - { - "code": "cheshire_cat", - "name": "Cheshire Cat" - }, - { - "code": "arkham_in_wonderland", - "name": "Arkham in Wonderland" - }, - { - "code": "warped_reality", - "name": "Warped Reality" - }, - { - "code": "bleeding_hearts", - "name": "Bleeding Hearts" - }, - { - "code": "card_guards", - "name": "Card Guards" - }, - { - "code": "riddles_and_games", - "name": "Riddles & Games" - }, - { - "code": "wonderland_boons", - "name": "Wonderland Boons" - }, - { - "code": "wonderland_banes", - "name": "Wonderland Banes" - }, - { - "code": "fools_mate", - "name": "Fool's Mate" - }, - { - "code": "chessmen", - "name": "Chessmen" - }, - { - "code": "lucid_nightmare", - "name": "Lucid Nightmare" - }, - { - "code": "alice_in_arkham", - "name": "Alice in Arkham" - }, - { - "code": "sibling_rivalry", - "name": "Sibling Rivalry" - }, - { - "code": "tempest_in_a_teapot", - "name": "Tempest in a Teapot" - }, - { - "code": "walrus_and_carpenter", - "name": "Walrus and Carpenter" - }, - { - "code": "wild_snark_chase", - "name": "Wild Snark Chase" - }, - { - "code": "jabberwocky", - "name": "Jabberwocky" - }, - { - "code": "the_warning", - "name": "The Warning" - }, - { - "code": "berserkers", - "name": "Berserkers" - }, - { - "code": "draugar", - "name": "Draugar" - }, - { - "code": "lacuna", - "name": "Lacuna" - }, - { - "code": "runic_oaths", - "name": "Runic Oaths" - }, - { - "code": "hudulfolk", - "name": "Hudulfólk" - }, - { - "code": "glacial_mists", - "name": "Glacial Mists" - }, - { - "code": "the_crown", - "name": "The Crown" - }, - { - "code": "the_fallen", - "name": "The Fallen" - }, - { - "code": "the_golden_circle", - "name": "The Golden Circle" - }, - { - "code": "ice_and_death", - "name": "Ice and Death" - }, - { - "code": "the_crash", - "name": "The Crash" - }, - { - "code": "creatures_in_the_ice", - "name": "Creatures in the Ice" - }, - { - "code": "deadly_weather", - "name": "Deadly Weather" - }, - { - "code": "hazards_of_antarctica", - "name": "Hazards of Antarctica" - }, - { - "code": "silence_and_mystery", - "name": "Silence and Mystery" - }, - { - "code": "tekeli_li", - "name": "Tekeli-li" - }, - { - "code": "to_the_forbidden_peaks", - "name": "To the Forbidden Peaks" - }, - { - "code": "the_great_seal", - "name": "The Great Seal" - }, - { - "code": "city_of_the_elder_things", - "name": "City of the Elder Things" - }, - { - "code": "seeping_nightmares", - "name": "Seeping Nightmares" - }, - { - "code": "nameless_horrors", - "name": "Nameless Horrors" - }, - { - "code": "memorials_of_the_lost", - "name": "Memorials of the Lost" - }, - { - "code": "fatal_mirage", - "name": "Fatal Mirage" - }, - { - "code": "elder_things", - "name": "Elder Things" - }, - { - "code": "the_heart_of_madness", - "name": "The Heart of Madness" - }, - { - "code": "stirring_in_the_deep", - "name": "Stirring in the Deep" - }, - { - "code": "shoggoths", - "name": "Shoggoths" - }, - { - "code": "penguins", - "name": "Penguins" - }, - { - "code": "miasma", - "name": "Miasma" - }, - { - "code": "lost_in_the_night", - "name": "Lost in the Night" - }, - { - "code": "left_behind", - "name": "Left Behind" - }, - { - "code": "expedition_team", - "name": "Expedition Team" - }, - { - "code": "agents_of_the_unknown", - "name": "Agents of the Unknown" - }, - { - "code": "machinations_through_time", - "name": "Machinations Through Time" - }, - { - "code": "machinations_epic_multiplayer", - "name": "Epic Multiplayer" - }, - { - "code": "machinations_single_group", - "name": "Single Group" - }, - { - "code": "red_tide_rising", - "name": "Red Tide Rising" - }, - { - "code": "agency_survivors", - "name": "Agency Survivors" - }, - { - "code": "agents_of_cthugha", - "name": "Agents of Cthugha" - }, - { - "code": "gifts_of_the_plaguebearer", - "name": "Gifts of the Plaguebearer" - }, - { - "code": "haze_of_miasma", - "name": "Haze of Miasma" - }, - { - "code": "life_and_death", - "name": "Life and Death" - }, - { - "code": "the_plaguebearers_commands", - "name": "The Plaguebearer's Commands" - }, - { - "code": "tenuous_allies", - "name": "Tenuous Allies" - }, - { - "code": "fallen_arkham", - "name": "Fallen Arkham" - }, - { - "code": "unbound_power", - "name": "Unbound Power" - }, - { - "code": "late_risers", - "name": "Late Risers" - }, - { - "code": "night_on_the_town", - "name": "Night on the Town" - }, - { - "code": "dead_by_dawn", - "name": "Dead by Dawn" - }, - { - "code": "mourning_chorus", - "name": "Mourning Chorus" - }, - { - "code": "high_noon_descent", - "name": "High Noon Descent" - }, - { - "code": "the_afternoon_war", - "name": "The Afternoon War" - }, - { - "code": "death_at_sundown", - "name": "Death at Sundown" - }, - { - "code": "the_midnight_hour", - "name": "The Midnight Hour" - }, - { - "code": "the_symphony_of_erich_zann", - "name": "The Symphony of Erich Zann" - }, - { - "code": "meteoric_phenomenon", - "name": "Meteoric Phenomenon" - }, - { - "code": "unnatural_disturbances", - "name": "Unnatural Disturbances" - }, - { - "code": "inhospitable_locality", - "name": "Inhospitable Locality" - }, - { - "code": "made_flesh", - "name": "Made Flesh" - }, - { - "code": "lost_cathedral", - "name": "Lost Cathedral" - }, - { - "code": "across_dreadful_waters", - "name": "Across Dreadful Waters" - }, - { - "code": "archaic_evils", - "name": "Archaic Evils" - }, - { - "code": "architects_of_chaos", - "name": "Architects of Chaos" - }, - { - "code": "awakened_madness", - "name": "Awakened Madness" - }, - { - "code": "blood_from_stones", - "name": "Blood From Stones" - }, - { - "code": "countermeasures", - "name": "Countermeasures" - }, - { - "code": "crumbling_masonry", - "name": "Crumbling Masonry" - }, - { - "code": "cult_of_cthulhu", - "name": "Cult of Cthulhu" - }, - { - "code": "deep_dreams", - "name": "Deep Dreams" - }, - { - "code": "going_twice", - "name": "Going Twice" - }, - { - "code": "grand_compass", - "name": "Grand Compass" - }, - { - "code": "lost_moorings", - "name": "Lost Moorings" - }, - { - "code": "private_lives", - "name": "Private Lives" - }, - { - "code": "pyroclastic_flow", - "name": "Pyroclastic Flow" - }, - { - "code": "shadowy_agents", - "name": "Shadowy Agents" - }, - { - "code": "spawn_of_rlyeh", - "name": "Spawn of R'lyeh" - }, - { - "code": "storm_and_sea", - "name": "Storm and Sea" - }, - { - "code": "tomb_of_dead_dreams", - "name": "Tomb of Dead Dreams" - }, - { - "code": "unfriendly_ports", - "name": "Unfriendly Ports" - }, - { - "code": "unnatural_stone", - "name": "Unnatural Stone" - }, - { - "code": "the_fall_of_the_house_of_usher", - "name": "The Fall of the House of Usher" - }, - { - "code": "hanninah_valley", - "name": "Hanninah Valley" - }, - { - "code": "wendigos_myth", - "name": "Wendigo's Myth" - }, - { - "code": "fortune_and_folly", - "name": "Fortune and Folly" - }, - { - "code": "fortunes_chosen", - "name": "Fortune's Chosen" - }, - { - "code": "plan_in_shambles", - "name": "Plan in Shambles" - }, - { - "code": "the_black_stone", - "name": "The Black Stone" - }, - { - "code": "legendry", - "name": "Legendry" - }, - { - "code": "occultism", - "name": "Occultism" - }, - { - "code": "magyar", - "name": "Magyar" - }, - { - "code": "natural_hazards", - "name": "Natural Hazards" - }, - { - "code": "wild_beasts", - "name": "Wild Beasts" - }, - { - "code": "ancient_hunger", - "name": "Ancient Hunger" - }, - { - "code": "witch_cult", - "name": "Witch-Cult" - }, - { - "code": "tomes", - "name": "Tomes" - }, - { - "code": "riddles_and_rain", - "name": "Riddles and Rain" - }, - { - "code": "mysteries_abound", - "name": "Mysteries Abound" - }, - { - "code": "shades_of_suffering", - "name": "Shades of Suffering" - }, - { - "code": "agents_of_the_outside", - "name": "Agents of the Outside" - }, - { - "code": "beyond_the_beyond", - "name": "Beyond the Beyond" - }, - { - "code": "congress_of_the_keys", - "name": "Congress of the Keys" - }, - { - "code": "dancing_mad", - "name": "Dancing Mad" - }, - { - "code": "dead_heat", - "name": "Dead Heat" - }, - { - "code": "dogs_of_war", - "name": "Dogs of War" - }, - { - "code": "outsiders", - "name": "Outsiders" - }, - { - "code": "scarlet_sorcery", - "name": "Scarlet Sorcery" - }, - { - "code": "spatial_anomaly", - "name": "Spatial Anomaly" - }, - { - "code": "strange_happenings", - "name": "Strange Happenings" - }, - { - "code": "secret_war", - "name": "Secret War" - }, - { - "code": "shadow_of_a_doubt", - "name": "Shadow of a Doubt" - }, - { - "code": "without_a_trace", - "name": "Without a Trace" - }, - { - "code": "agents_of_yuggoth", - "name": "Agents of Yuggoth" - }, - { - "code": "cleanup_crew", - "name": "Cleanup Crew" - }, - { - "code": "crimson_conspiracy", - "name": "Crimson Conspiracy" - }, - { - "code": "dark_veiling", - "name": "Dark Veiling" - }, - { - "code": "dealings_in_the_dark", - "name": "Dealings in the Dark" - }, - { - "code": "globetrotting", - "name": "Globetrotting" - }, - { - "code": "on_thin_ice", - "name": "On Thin Ice" - }, - { - "code": "red_coterie", - "name": "Red Coterie" - }, - { - "code": "sanguine_shadows", - "name": "Sanguine Shadows" - }, - { - "code": "spreading_corruption", - "name": "Spreading Corruption" - }, - { - "code": "zhod_africa_is_watching", - "name": "Africa is Watching" - }, - { - "code": "zhod_to_the_heart_of_the_congo", - "name": "To the Heart of the Congo" - }, - { - "code": "zhod_the_avatar_of_darkness", - "name": "The Avatar of Darkness" - }, - { - "code": "zhod_the_darkness", - "name": "The Darkness" - }, - { - "code": "zhod_african_wildlife", - "name": "African Wildlife" - }, - { - "code": "zhod_lands_of_the_congo", - "name": "Lands of the Congo" - }, - { - "code": "zhod_cult_of_darkness", - "name": "Cult of Darkness" - }, - { - "code": "zreturn_to_the_pit_of_despair", - "name": "Return to The Pit of Despair" - }, - { - "code": "zreturn_to_the_vanishing_of_elina_harper", - "name": "Return to The Vanishing of Elina Harper" - }, - { - "code": "zreturn_to_in_too_deep", - "name": "Return to In Too Deep" - }, - { - "code": "zreturn_to_devil_reef", - "name": "Return to Devil Reef" - }, - { - "code": "zreturn_to_horror_in_high_gear", - "name": "Return to Horror in High Gear" - }, - { - "code": "zreturn_to_a_light_in_the_fog", - "name": "Return to A Light in the Fog" - }, - { - "code": "zreturn_to_the_lair_of_dagon", - "name": "Return to The Lair of Dagon" - }, - { - "code": "zreturn_to_into_the_maelstrom", - "name": "Return to Into the Maelstrom" - }, - { - "code": "zstalkers_of_cthulhu", - "name": "Stalkers of Cthulhu" - }, - { - "code": "zrolling_tide", - "name": "Rolling Tide" - }, - { - "code": "zinnsmouth_haze", - "name": "Innsmouth Haze" - }, - { - "code": "zoccultation", - "name": "Occultation" - }, - { - "code": "zbarricaded_doors", - "name": "Barricaded Doors" - }, - { - "code": "zreturn_to_flooded_caverns", - "name": "Return to Flooded Caverns" - }, - { - "code": "laid_to_rest", - "name": "Laid to Rest" - }, - { - "code": "relics_of_the_past", - "name": "Relics of the Past" - }, - { - "code": "too_noble", - "name": "Too Noble" - }, - { - "code": "something_big", - "name": "Something Big" - }, - { - "code": "unscrupulous_investments", - "name": "Unscrupulous Investments" - }, - { - "code": "anything_once", - "name": "Anything Once" - }, - { - "code": "mysterious_benefits", - "name": "Mysterious Benefits" - }, - { - "code": "the_first_day", - "name": "The First Day" - }, - { - "code": "the_second_day", - "name": "The Second Day" - }, - { - "code": "the_final_day", - "name": "The Final Day" - }, - { - "code": "agents_of_the_colour", - "name": "Agents of the Colour" - }, - { - "code": "fate_of_the_vale", - "name": "Fate of the Vale" - }, - { - "code": "heirlooms", - "name": "Heirlooms" - }, - { - "code": "horrors_in_the_rock", - "name": "Horrors in the Rock" - }, - { - "code": "myconids", - "name": "Myconids" - }, - { - "code": "residents", - "name": "Residents" - }, - { - "code": "the_longest_night", - "name": "The Longest Night" - }, - { - "code": "the_silent_heath", - "name": "The Silent Heath" - }, - { - "code": "the_twisted_hollow", - "name": "The Twisted Hollow" - }, - { - "code": "transfiguration", - "name": "Transfiguration" - }, - { - "code": "day_of_rest", - "name": "Day of Rest" - }, - { - "code": "day_of_rain", - "name": "Day of Rain" - }, - { - "code": "day_of_the_feast", - "name": "Day of the Feast" - }, - { - "code": "blight", - "name": "Blight" - }, - { - "code": "fire", - "name": "Fire!" - }, - { - "code": "hemlock_house", - "name": "Hemlock House" - }, - { - "code": "mutations", - "name": "Mutations" - }, - { - "code": "refractions", - "name": "Refractions" - }, - { - "code": "the_forest", - "name": "The Forest" - }, - { - "code": "the_lost_sister", - "name": "The Lost Sister" - }, - { - "code": "the_thing_in_the_depths", - "name": "The Thing in the Depths" - }, - { - "code": "the_vale", - "name": "The Vale" - }, - { - "code": "written_in_rock", - "name": "Written in Rock" - }, - { - "code": "depraved_legions", - "name": "Depraved Legions" - }, - { - "code": "spiraling_inferno", - "name": "Spiralling Inferno" - }, - { - "code": "scorched_wasteland", - "name": "Scorched Wasteland" - }, - { - "code": "malevolent_ritual", - "name": "Malevolent Ritual" - }, - { - "code": "final_annihilation", - "name": "Final Annihilation" - }, - { - "code": "the_midwinter_gala", - "name": "The Midwinter Gala" - }, - { - "code": "zoz_the_road_to_oz", - "name": "The Road to Oz" - }, - { - "code": "zoz_ferocious_beasts", - "name": "Ferocious Beasts" - }, - { - "code": "zoz_wicked_witches", - "name": "Wicked Witches" - }, - { - "code": "zoz_prismatic_evils", - "name": "Prismatic Evils" - }, - { - "code": "zoz_terror_out_of_space", - "name": "Terror Out of Space" - }, - { - "code": "zoz_princess_of_oz", - "name": "Princess of Oz" - }, - { - "code": "zoz_chromatic_infection", - "name": "Chromatic Infection" - }, - { - "code": "zoz_deep_impact", - "name": "Deep Impact" - }, - { - "code": "zoz_emerald_city", - "name": "Emerald City" - }, - { - "code": "zoz_alien_vibrance", - "name": "Alien Vibrance" - }, - { - "code": "zoz_horrid_infection", - "name": "Horrid Infection" - }, - { - "code": "zoz_companions_of_oz", - "name": "Companions of Oz" - }, - { - "code": "zoz_spiraling_decay", - "name": "Spiraling Decay" - }, - { - "code": "zoz_double_whammy", - "name": "Double Whammy" - }, - { - "code": "zoz_chasing_rainbows", - "name": "Chasing Rainbows" - }, - { - "code": "zoz_blighted_land", - "name": "Blighted Land" - }, - { - "code": "zoz_misery_loves_company", - "name": "Misery Loves Company" - }, - { - "code": "zoz_nomes", - "name": "Nomes" - }, - { - "code": "zoz_violent_invasion", - "name": "Violent Invasion" - }, - { - "code": "zoz_hall_of_the_mountain_king", - "name": "Hall of the Mountain King" - }, - { - "code": "zoz_defense_of_the_realm", - "name": "Defense of the Realm" - }, - { - "code": "zoz_true_colours", - "name": "True Colours" - }, - { - "code": "zoz_the_colour_itself", - "name": "The Colour Itself" - }, - { - "code": "zoz_munchkin", - "name": "Munchkin Country" - }, - { - "code": "zoz_winkie", - "name": "Winkie Country" - }, - { - "code": "zoz_quadling", - "name": "Quadling Country" - }, - { - "code": "zoz_gillikin", - "name": "Gillikin Country" - }, - { - "code": "zoz_prologue", - "name": "Prologue" - }, - { - "code": "zau_night_of_fire", - "name": "Night of Fire" - }, - { - "code": "zau_myriad_gentleman", - "name": "The Myriad Gentleman" - }, - { - "code": "zau_world_torn_down", - "name": "A World Torn Down" - }, - { - "code": "zau_unstuck", - "name": "Unstuck" - }, - { - "code": "zau_year_to_plan", - "name": "A Year to Plan" - }, - { - "code": "zau_world_torn_down_again", - "name": "A World Torn Down, Again" - }, - { - "code": "zau_time_runs_out", - "name": "Time Runs Out" - }, - { - "code": "zau_agents_of_aforgomon", - "name": "Agents of Aforgomon" - }, - { - "code": "zau_missions", - "name": "Missions" - }, - { - "code": "zau_myriad", - "name": "Myriad" - }, - { - "code": "zau_night_of_the_ritual", - "name": "Night of the Ritual" - }, - { - "code": "zau_nyctophobia", - "name": "Nyctophobia" - }, - { - "code": "zau_paradox", - "name": "Paradox" - }, - { - "code": "zau_shifting_reality", - "name": "Shifting Reality" - }, - { - "code": "zau_thugs", - "name": "Thugs" - }, - { - "code": "zau_unleashed_chaos", - "name": "Unleashed Chaos" - }, - { - "code": "zau_unravelling_years", - "name": "Unravelling Years" - } -] +[ + { + "code": "torch", + "name": "The Gathering" + }, + { + "code": "arkham", + "name": "The Midnight Masks" + }, + { + "code": "cultists", + "name": "Cult of Umôrdhoth" + }, + { + "code": "tentacles", + "name": "The Devourer Below" + }, + { + "code": "rats", + "name": "Rats" + }, + { + "code": "ghouls", + "name": "Ghouls" + }, + { + "code": "striking_fear", + "name": "Striking Fear" + }, + { + "code": "ancient_evils", + "name": "Ancient Evils" + }, + { + "code": "chilling_cold", + "name": "Chilling Cold" + }, + { + "code": "pentagram", + "name": "Dark Cult" + }, + { + "code": "nightgaunts", + "name": "Nightgaunts" + }, + { + "code": "locked_doors", + "name": "Locked Doors" + }, + { + "code": "agents_of_hastur", + "name": "Agents of Hastur" + }, + { + "code": "agents_of_yog", + "name": "Agents of Yog-Sothoth" + }, + { + "code": "agents_of_shub", + "name": "Agents of Shub-Niggurath" + }, + { + "code": "agents_of_cthulhu", + "name": "Agents of Cthulhu" + }, + { + "code": "unknown", + "name": "Unknown" + }, + { + "code": "bayou", + "name": "The Bayou" + }, + { + "code": "rougarou", + "name": "Curse of the Rougarou" + }, + { + "code": "venice", + "name": "Carnevale of Horrors" + }, + { + "code": "armitages_fate", + "name": "Armitage's Fate" + }, + { + "code": "bishops_thralls", + "name": "Bishop's Thralls" + }, + { + "code": "beast_thralls", + "name": "Beast Thralls" + }, + { + "code": "naomis_crew", + "name": "Naomi's Crew" + }, + { + "code": "extracurricular_activity", + "name": "Extracurricular Activity" + }, + { + "code": "the_house_always_wins", + "name": "The House Always Wins" + }, + { + "code": "sorcery", + "name": "Sorcery" + }, + { + "code": "dunwich", + "name": "Dunwich" + }, + { + "code": "whippoorwills", + "name": "Whippoorwills" + }, + { + "code": "bad_luck", + "name": "Bad Luck" + }, + { + "code": "the_beyond", + "name": "The Beyond" + }, + { + "code": "hideous_abominations", + "name": "Hideous Abominations" + }, + { + "code": "the_miskatonic_museum", + "name": "The Miskatonic Museum" + }, + { + "code": "essex_county_express", + "name": "The Essex County Express" + }, + { + "code": "blood_on_the_altar", + "name": "Blood On The Altar" + }, + { + "code": "undimensioned_and_unseen", + "name": "Undimensioned and Unseen" + }, + { + "code": "where_doom_awaits", + "name": "Where Doom Awaits" + }, + { + "code": "lost_in_time_and_space", + "name": "Lost in Time and Space" + }, + { + "code": "curtain_call", + "name": "Curtain Call" + }, + { + "code": "the_last_king", + "name": "The Last King" + }, + { + "code": "delusions", + "name": "Delusions" + }, + { + "code": "byakhee", + "name": "Byakhee" + }, + { + "code": "inhabitants_of_carcosa", + "name": "Inhabitants of Carcosa" + }, + { + "code": "evil_portents", + "name": "Evil Portents" + }, + { + "code": "hauntings", + "name": "Hauntings" + }, + { + "code": "hasturs_gift", + "name": "Hastur's Gift" + }, + { + "code": "cult_of_the_yellow_sign", + "name": "Cult of the Yellow Sign" + }, + { + "code": "decay", + "name": "Decay & Filth" + }, + { + "code": "stranger", + "name": "The Stranger" + }, + { + "code": "echoes_of_the_past", + "name": "Echoes of the Past" + }, + { + "code": "the_unspeakable_oath", + "name": "The Unspeakable Oath" + }, + { + "code": "a_phantom_of_truth", + "name": "A Phantom of Truth" + }, + { + "code": "the_pallid_mask", + "name": "The Pallid Mask" + }, + { + "code": "black_stars_rise", + "name": "Black Stars Rise" + }, + { + "code": "flood", + "name": "The Flood Below" + }, + { + "code": "vortex", + "name": "The Vortex Above" + }, + { + "code": "dim_carcosa", + "name": "Dim Carcosa" + }, + { + "code": "agents_of_yig", + "name": "Agents of Yig" + }, + { + "code": "traps", + "name": "Deadly Traps" + }, + { + "code": "expedition", + "name": "Expedition" + }, + { + "code": "ruins", + "name": "Forgotten Ruins" + }, + { + "code": "guardians_of_time", + "name": "Guardians of Time" + }, + { + "code": "pnakotic_brotherhood", + "name": "Pnakotic Brotherhood" + }, + { + "code": "poison", + "name": "Poison" + }, + { + "code": "rainforest", + "name": "Rainforest" + }, + { + "code": "serpents", + "name": "Serpents" + }, + { + "code": "flux", + "name": "Temporal Flux" + }, + { + "code": "eztli", + "name": "The Doom of Eztli" + }, + { + "code": "wilds", + "name": "The Untamed Wilds" + }, + { + "code": "venom", + "name": "Yig's Venom" + }, + { + "code": "threads_of_fate", + "name": "Threads of Fate" + }, + { + "code": "the_boundary_beyond", + "name": "The Boundary Beyond" + }, + { + "code": "heart_of_the_elders", + "name": "Heart of the Elders" + }, + { + "code": "pillars_of_judgment", + "name": "Pillars of Judgment" + }, + { + "code": "knyan", + "name": "K'n-yan" + }, + { + "code": "the_city_of_archives", + "name": "The City of Archives" + }, + { + "code": "the_depths_of_yoth", + "name": "The Depths of Yoth" + }, + { + "code": "shattered_aeons", + "name": "Shattered Aeons" + }, + { + "code": "turn_back_time", + "name": "Turn Back Time" + }, + { + "code": "agents_of_azathoth", + "name": "Agents of Azathoth" + }, + { + "code": "anettes_coven", + "name": "Anette's Coven" + }, + { + "code": "at_deaths_doorstep", + "name": "At Death's Doorstep" + }, + { + "code": "return_to_at_deaths_doorstep", + "name": "Return to At Death's Doorstep" + }, + { + "code": "city_of_sins", + "name": "City of Sins" + }, + { + "code": "city_of_the_damned", + "name": "City of the Damned" + }, + { + "code": "disappearance_at_the_twilight_estate", + "name": "Disappearance at the Twilight Estate" + }, + { + "code": "return_to_disappearance_at_the_twilight_estate", + "name": "Return to Disappearance at the Twilight Estate" + }, + { + "code": "inexorable_fate", + "name": "Inexorable Fate" + }, + { + "code": "unspeakable_fate", + "name": "Unspeakable Fate" + }, + { + "code": "realm_of_death", + "name": "Realm of Death" + }, + { + "code": "unstable_realm", + "name": "Unstable Realm" + }, + { + "code": "chilling_mists", + "name": "Chilling Mists" + }, + { + "code": "silver_twilight_lodge", + "name": "Silver Twilight Lodge" + }, + { + "code": "spectral_predators", + "name": "Spectral Predators" + }, + { + "code": "the_watcher", + "name": "The Watcher" + }, + { + "code": "the_witching_hour", + "name": "The Witching Hour" + }, + { + "code": "return_to_the_witching_hour", + "name": "Return to The Witching Hour" + }, + { + "code": "trapped_spirits", + "name": "Trapped Spirits" + }, + { + "code": "bloodthirsty_spirits", + "name": "Bloodthirsty Spirits" + }, + { + "code": "witchcraft", + "name": "Witchcraft" + }, + { + "code": "hexcraft", + "name": "Hexcraft" + }, + { + "code": "the_secret_name", + "name": "The Secret Name" + }, + { + "code": "return_to_the_secret_name", + "name": "Return to The Secret Name" + }, + { + "code": "the_wages_of_sin", + "name": "The Wages of Sin" + }, + { + "code": "return_to_the_wages_of_sin", + "name": "Return to The Wages of Sin" + }, + { + "code": "for_the_greater_good", + "name": "For the Greater Good" + }, + { + "code": "return_to_for_the_greater_good", + "name": "Return to For the Greater Good" + }, + { + "code": "union_and_disillusion", + "name": "Union and Disillusion" + }, + { + "code": "return_to_union_and_disillusion", + "name": "Return to Union and Disillusion" + }, + { + "code": "in_the_clutches_of_chaos", + "name": "In the Clutches of Chaos" + }, + { + "code": "return_to_in_the_clutches_of_chaos", + "name": "Return to In the Clutches of Chaos" + }, + { + "code": "music_of_the_damned", + "name": "Music of the Damned" + }, + { + "code": "secrets_of_the_universe", + "name": "Secrets of the Universe" + }, + { + "code": "before_the_black_throne", + "name": "Before the Black Throne" + }, + { + "code": "return_to_before_the_black_throne", + "name": "Return to Before the Black Throne" + }, + { + "code": "impending_evils", + "name": "Impending Evils" + }, + { + "code": "agents_of_atlach_nacha", + "name": "Agents of Atlach-Nacha" + }, + { + "code": "agents_of_nyarlathotep", + "name": "Agents of Nyarlathotep" + }, + { + "code": "corsairs", + "name": "Corsairs" + }, + { + "code": "creatures_of_the_underworld", + "name": "Creatures of the Underworld" + }, + { + "code": "dreamers_curse", + "name": "Dreamer's Curse" + }, + { + "code": "dreamlands", + "name": "Dreamlands" + }, + { + "code": "merging_realities", + "name": "Merging Realities" + }, + { + "code": "spiders", + "name": "Spiders" + }, + { + "code": "whispers_of_hypnos", + "name": "Whispers of Hypnos" + }, + { + "code": "zoogs", + "name": "Zoogs" + }, + { + "code": "in_the_labyrinths_of_lunacy", + "name": "The Labyrinths of Lunacy" + }, + { + "code": "epic_multiplayer", + "name": "Epic Multiplayer" + }, + { + "code": "single_group", + "name": "Single Group" + }, + { + "code": "abyssal_gifts", + "name": "Abyssal Gifts" + }, + { + "code": "abyssal_tribute", + "name": "Abyssal Tribute" + }, + { + "code": "brotherhood_of_the_beast", + "name": "Brotherhood of the Beast" + }, + { + "code": "sands_of_egypt", + "name": "Sands of Egypt" + }, + { + "code": "the_eternal_slumber", + "name": "The Eternal Slumber" + }, + { + "code": "the_nights_usurper", + "name": "The Night's Usurper" + }, + { + "code": "return_to_the_gathering", + "name": "Return to the Gathering" + }, + { + "code": "return_to_the_midnight_masks", + "name": "Return to the Midnight Masks" + }, + { + "code": "return_to_the_devourer_below", + "name": "Return to the Devourer Below" + }, + { + "code": "ghouls_of_umôrdhoth", + "name": "Ghouls of Umôrdhoth" + }, + { + "code": "the_devourers_cult", + "name": "The Devourers Cult" + }, + { + "code": "return_cult", + "name": "Return Cult of Umôrdhoth" + }, + { + "code": "return_to_extracurricular_activities", + "name": "Return to Extracurricular Activity" + }, + { + "code": "return_to_the_house_always_wins", + "name": "Return to The House Always Wins" + }, + { + "code": "return_to_the_miskatonic_museum", + "name": "Return to The Miskatonic Museum" + }, + { + "code": "return_to_the_essex_county_express", + "name": "Return to The Essex County Express" + }, + { + "code": "return_to_blood_on_the_altar", + "name": "Return to Blood on the Altar" + }, + { + "code": "return_to_undimensioned_and_unseen", + "name": "Return to Undimensioned and Unseen" + }, + { + "code": "return_to_where_doom_awaits", + "name": "Return to Where Doom Awaits" + }, + { + "code": "return_to_lost_in_time_and_space", + "name": "Return to Lost in Time and Space" + }, + { + "code": "resurgent_evils", + "name": "Resurgent Evils" + }, + { + "code": "erratic_fear", + "name": "Erratic Fear" + }, + { + "code": "creeping_cold", + "name": "Creeping Cold" + }, + { + "code": "secret_doors", + "name": "Secret Doors" + }, + { + "code": "yog_sothoths_emissaries", + "name": "Yog-Sothoth's Emissaries" + }, + { + "code": "beyond_the_threshold", + "name": "Beyond the Threshold" + }, + { + "code": "return_to_curtain_call", + "name": "Return to Curtain Call" + }, + { + "code": "return_to_the_last_king", + "name": "Return to The Last King" + }, + { + "code": "return_to_echoes_of_the_past", + "name": "Return to Echoes of the Past" + }, + { + "code": "return_to_the_unspeakable_oath", + "name": "Return to The Unspeakable Oath" + }, + { + "code": "return_to_a_phantom_of_truth", + "name": "Return to A Phantom of Truth" + }, + { + "code": "return_to_the_pallid_mask", + "name": "Return to The Pallid Mask" + }, + { + "code": "return_to_black_stars_rise", + "name": "Return to Black Stars Rise" + }, + { + "code": "return_to_dim_carcosa", + "name": "Return to Dim Carcosa" + }, + { + "code": "delusory_evils", + "name": "Delusory Evils" + }, + { + "code": "neurotic_fear", + "name": "Neurotic Fear" + }, + { + "code": "hasturs_envoys", + "name": "Hastur's Envoys" + }, + { + "code": "decaying_reality", + "name": "Decaying Reality" + }, + { + "code": "maddening_delusions", + "name": "Maddening Delusions" + }, + { + "code": "beyond_the_gates_of_sleep", + "name": "Beyond the Gates of Sleep" + }, + { + "code": "waking_nightmare", + "name": "Waking Nightmare" + }, + { + "code": "a_thousand_shapes_of_horror", + "name": "A Thousand Shapes of Horror" + }, + { + "code": "the_search_for_kadath", + "name": "The Search for Kadath" + }, + { + "code": "dark_side_of_the_moon", + "name": "Dark Side of the Moon" + }, + { + "code": "point_of_no_return", + "name": "Point of No Return" + }, + { + "code": "where_the_gods_dwell", + "name": "Where the Gods Dwell" + }, + { + "code": "weaver_of_the_cosmos", + "name": "Weaver of the Cosmos" + }, + { + "code": "terror_of_the_vale", + "name": "Terror of the Vale" + }, + { + "code": "descent_into_the_pitch", + "name": "Descent into the Pitch" + }, + { + "code": "murder_at_the_excelsior_hotel", + "name": "Murder at the Excelsior Hotel" + }, + { + "code": "alien_interference", + "name": "Alien Interference" + }, + { + "code": "dark_rituals", + "name": "Dark Rituals" + }, + { + "code": "excelsior_management", + "name": "Excelsior Management" + }, + { + "code": "sins_of_the_past", + "name": "Sins of the Past" + }, + { + "code": "vile_experiments", + "name": "Vile Experiments" + }, + { + "code": "blob", + "name": "The Blob That Ate Everything" + }, + { + "code": "blob_that_ate_everything_else", + "name": "The Blob That Ate Everything Else" + }, + { + "code": "blob_epic_multiplayer", + "name": "Epic Multiplayer" + }, + { + "code": "blob_single_group", + "name": "Single Group" + }, + { + "code": "migo_incursion", + "name": "Mi-Go Incursion" + }, + { + "code": "migo_incursion_2", + "name": "Mi-Go Incursion II" + }, + { + "code": "read_or_die", + "name": "Read or Die" + }, + { + "code": "all_or_nothing", + "name": "All or Nothing" + }, + { + "code": "bad_blood", + "name": "Bad Blood" + }, + { + "code": "by_the_book", + "name": "By the Book" + }, + { + "code": "return_to_the_untamed_wilds", + "name": "Return to the Untamed Wilds" + }, + { + "code": "return_to_the_doom_of_eztli", + "name": "Return to the Doom of Eztli" + }, + { + "code": "return_to_threads_of_fate", + "name": "Return to Threads of Fate" + }, + { + "code": "return_to_the_boundary_beyond", + "name": "Return to the Boundary Beyond" + }, + { + "code": "return_to_heart_of_the_elders", + "name": "Return to Heart of the Elders" + }, + { + "code": "return_to_pillars_of_judgment", + "name": "Return to Pillars of Judgment" + }, + { + "code": "return_to_knyan", + "name": "Return to K'n-yan" + }, + { + "code": "return_to_the_city_of_archives", + "name": "Return to the City of Archives" + }, + { + "code": "return_to_the_depths_of_yoth", + "name": "Return to the Depths of Yoth" + }, + { + "code": "return_to_shattered_aeons", + "name": "Return to Shattered Aeons" + }, + { + "code": "return_to_turn_back_time", + "name": "Return to Turn Back Time" + }, + { + "code": "return_to_the_rainforest", + "name": "Return to the Rainforest" + }, + { + "code": "cult_of_pnakotus", + "name": "Cult of Pnakotus" + }, + { + "code": "doomed_expedition", + "name": "Doomed Expedition" + }, + { + "code": "temporal_hunters", + "name": "Temporal Hunters" + }, + { + "code": "venomous_hate", + "name": "Venomous Hate" + }, + { + "code": "the_pit_of_despair", + "name": "The Pit of Despair" + }, + { + "code": "creatures_of_the_deep", + "name": "Creatures of the Deep" + }, + { + "code": "flooded_caverns", + "name": "Flooded Caverns" + }, + { + "code": "rising_tide", + "name": "Rising Tide" + }, + { + "code": "shattered_memories", + "name": "Shattered Memories" + }, + { + "code": "agents_of_dagon", + "name": "Agents of Dagon" + }, + { + "code": "agents_of_hydra", + "name": "Agents of Hydra" + }, + { + "code": "the_locals", + "name": "The Locals" + }, + { + "code": "fog_over_innsmouth", + "name": "Fog over Innsmouth" + }, + { + "code": "the_vanishing_of_elina_harper", + "name": "The Vanishing of Elina Harper" + }, + { + "code": "syzygy", + "name": "Syzygy" + }, + { + "code": "malfunction", + "name": "Malfunction" + }, + { + "code": "in_too_deep", + "name": "In Too Deep" + }, + { + "code": "devil_reef", + "name": "Devil Reef" + }, + { + "code": "war_of_the_outer_gods", + "name": "War of the Outer Gods" + }, + { + "code": "children_of_paradise", + "name": "Children of Paradise" + }, + { + "code": "swarm_of_assimilation", + "name": "Swarm of Assimilation" + }, + { + "code": "death_of_stars", + "name": "Death of Stars" + }, + { + "code": "meddling_of_meowlathotep", + "name": "The Meddling of Meowlathotep" + }, + { + "code": "horror_in_high_gear", + "name": "Horror in High Gear" + }, + { + "code": "a_light_in_the_fog", + "name": "A Light in the Fog" + }, + { + "code": "the_lair_of_dagon", + "name": "The Lair of Dagon" + }, + { + "code": "into_the_maelstrom", + "name": "Into the Maelstrom" + }, + { + "code": "the_tatterdemalion", + "name": "The Tatterdemalion" + }, + { + "code": "electric_nightmare", + "name": "Electric Nightmare" + }, + { + "code": "lost_quantum", + "name": "Lost Quantum" + }, + { + "code": "in_the_shadow_of_earth", + "name": "In the Shadow of Earth" + }, + { + "code": "strange_moons", + "name": "Strange Moons" + }, + { + "code": "the_machine_in_yellow", + "name": "The Machine in Yellow" + }, + { + "code": "fragment_of_carcosa", + "name": "Fragment of Carcosa" + }, + { + "code": "starfall", + "name": "Starfall" + }, + { + "code": "deep_space", + "name": "Deep Space" + }, + { + "code": "anachronism", + "name": "Anachronism" + }, + { + "code": "dark_past", + "name": "Dark Past" + }, + { + "code": "artificial_intelligence", + "name": "Artificial Intelligence" + }, + { + "code": "endtimes", + "name": "Endtimes" + }, + { + "code": "the_boogeyman", + "name": "The Boogeyman" + }, + { + "code": "interstellar_predators", + "name": "Interstellar Predators" + }, + { + "code": "hasturs_gaze", + "name": "Hastur's Gaze" + }, + { + "code": "consternation_on_the_constellation", + "name": "Consternation on the Constellation" + }, + { + "code": "deep_ones", + "name": "Deep Ones" + }, + { + "code": "sinking_ship", + "name": "Sinking Ship" + }, + { + "code": "a_sea_of_troubles", + "name": "A Sea of Troubles" + }, + { + "code": "gurathnakas_shadows", + "name": "Gurathnaka's Shadows" + }, + { + "code": "cheshire_cat", + "name": "Cheshire Cat" + }, + { + "code": "arkham_in_wonderland", + "name": "Arkham in Wonderland" + }, + { + "code": "warped_reality", + "name": "Warped Reality" + }, + { + "code": "bleeding_hearts", + "name": "Bleeding Hearts" + }, + { + "code": "card_guards", + "name": "Card Guards" + }, + { + "code": "riddles_and_games", + "name": "Riddles & Games" + }, + { + "code": "wonderland_boons", + "name": "Wonderland Boons" + }, + { + "code": "wonderland_banes", + "name": "Wonderland Banes" + }, + { + "code": "fools_mate", + "name": "Fool's Mate" + }, + { + "code": "chessmen", + "name": "Chessmen" + }, + { + "code": "lucid_nightmare", + "name": "Lucid Nightmare" + }, + { + "code": "alice_in_arkham", + "name": "Alice in Arkham" + }, + { + "code": "sibling_rivalry", + "name": "Sibling Rivalry" + }, + { + "code": "tempest_in_a_teapot", + "name": "Tempest in a Teapot" + }, + { + "code": "walrus_and_carpenter", + "name": "Walrus and Carpenter" + }, + { + "code": "wild_snark_chase", + "name": "Wild Snark Chase" + }, + { + "code": "jabberwocky", + "name": "Jabberwocky" + }, + { + "code": "the_warning", + "name": "The Warning" + }, + { + "code": "berserkers", + "name": "Berserkers" + }, + { + "code": "draugar", + "name": "Draugar" + }, + { + "code": "lacuna", + "name": "Lacuna" + }, + { + "code": "runic_oaths", + "name": "Runic Oaths" + }, + { + "code": "hudulfolk", + "name": "Hudulfólk" + }, + { + "code": "glacial_mists", + "name": "Glacial Mists" + }, + { + "code": "the_crown", + "name": "The Crown" + }, + { + "code": "the_fallen", + "name": "The Fallen" + }, + { + "code": "the_golden_circle", + "name": "The Golden Circle" + }, + { + "code": "ice_and_death", + "name": "Ice and Death" + }, + { + "code": "the_crash", + "name": "The Crash" + }, + { + "code": "creatures_in_the_ice", + "name": "Creatures in the Ice" + }, + { + "code": "deadly_weather", + "name": "Deadly Weather" + }, + { + "code": "hazards_of_antarctica", + "name": "Hazards of Antarctica" + }, + { + "code": "silence_and_mystery", + "name": "Silence and Mystery" + }, + { + "code": "tekeli_li", + "name": "Tekeli-li" + }, + { + "code": "to_the_forbidden_peaks", + "name": "To the Forbidden Peaks" + }, + { + "code": "the_great_seal", + "name": "The Great Seal" + }, + { + "code": "city_of_the_elder_things", + "name": "City of the Elder Things" + }, + { + "code": "seeping_nightmares", + "name": "Seeping Nightmares" + }, + { + "code": "nameless_horrors", + "name": "Nameless Horrors" + }, + { + "code": "memorials_of_the_lost", + "name": "Memorials of the Lost" + }, + { + "code": "fatal_mirage", + "name": "Fatal Mirage" + }, + { + "code": "elder_things", + "name": "Elder Things" + }, + { + "code": "the_heart_of_madness", + "name": "The Heart of Madness" + }, + { + "code": "stirring_in_the_deep", + "name": "Stirring in the Deep" + }, + { + "code": "shoggoths", + "name": "Shoggoths" + }, + { + "code": "penguins", + "name": "Penguins" + }, + { + "code": "miasma", + "name": "Miasma" + }, + { + "code": "lost_in_the_night", + "name": "Lost in the Night" + }, + { + "code": "left_behind", + "name": "Left Behind" + }, + { + "code": "expedition_team", + "name": "Expedition Team" + }, + { + "code": "agents_of_the_unknown", + "name": "Agents of the Unknown" + }, + { + "code": "machinations_through_time", + "name": "Machinations Through Time" + }, + { + "code": "machinations_epic_multiplayer", + "name": "Epic Multiplayer" + }, + { + "code": "machinations_single_group", + "name": "Single Group" + }, + { + "code": "red_tide_rising", + "name": "Red Tide Rising" + }, + { + "code": "agency_survivors", + "name": "Agency Survivors" + }, + { + "code": "agents_of_cthugha", + "name": "Agents of Cthugha" + }, + { + "code": "gifts_of_the_plaguebearer", + "name": "Gifts of the Plaguebearer" + }, + { + "code": "haze_of_miasma", + "name": "Haze of Miasma" + }, + { + "code": "life_and_death", + "name": "Life and Death" + }, + { + "code": "the_plaguebearers_commands", + "name": "The Plaguebearer's Commands" + }, + { + "code": "tenuous_allies", + "name": "Tenuous Allies" + }, + { + "code": "fallen_arkham", + "name": "Fallen Arkham" + }, + { + "code": "unbound_power", + "name": "Unbound Power" + }, + { + "code": "late_risers", + "name": "Late Risers" + }, + { + "code": "night_on_the_town", + "name": "Night on the Town" + }, + { + "code": "dead_by_dawn", + "name": "Dead by Dawn" + }, + { + "code": "mourning_chorus", + "name": "Mourning Chorus" + }, + { + "code": "high_noon_descent", + "name": "High Noon Descent" + }, + { + "code": "the_afternoon_war", + "name": "The Afternoon War" + }, + { + "code": "death_at_sundown", + "name": "Death at Sundown" + }, + { + "code": "the_midnight_hour", + "name": "The Midnight Hour" + }, + { + "code": "the_symphony_of_erich_zann", + "name": "The Symphony of Erich Zann" + }, + { + "code": "meteoric_phenomenon", + "name": "Meteoric Phenomenon" + }, + { + "code": "unnatural_disturbances", + "name": "Unnatural Disturbances" + }, + { + "code": "inhospitable_locality", + "name": "Inhospitable Locality" + }, + { + "code": "made_flesh", + "name": "Made Flesh" + }, + { + "code": "lost_cathedral", + "name": "Lost Cathedral" + }, + { + "code": "across_dreadful_waters", + "name": "Across Dreadful Waters" + }, + { + "code": "archaic_evils", + "name": "Archaic Evils" + }, + { + "code": "architects_of_chaos", + "name": "Architects of Chaos" + }, + { + "code": "awakened_madness", + "name": "Awakened Madness" + }, + { + "code": "blood_from_stones", + "name": "Blood From Stones" + }, + { + "code": "countermeasures", + "name": "Countermeasures" + }, + { + "code": "crumbling_masonry", + "name": "Crumbling Masonry" + }, + { + "code": "cult_of_cthulhu", + "name": "Cult of Cthulhu" + }, + { + "code": "deep_dreams", + "name": "Deep Dreams" + }, + { + "code": "going_twice", + "name": "Going Twice" + }, + { + "code": "grand_compass", + "name": "Grand Compass" + }, + { + "code": "lost_moorings", + "name": "Lost Moorings" + }, + { + "code": "private_lives", + "name": "Private Lives" + }, + { + "code": "pyroclastic_flow", + "name": "Pyroclastic Flow" + }, + { + "code": "shadowy_agents", + "name": "Shadowy Agents" + }, + { + "code": "spawn_of_rlyeh", + "name": "Spawn of R'lyeh" + }, + { + "code": "storm_and_sea", + "name": "Storm and Sea" + }, + { + "code": "tomb_of_dead_dreams", + "name": "Tomb of Dead Dreams" + }, + { + "code": "unfriendly_ports", + "name": "Unfriendly Ports" + }, + { + "code": "unnatural_stone", + "name": "Unnatural Stone" + }, + { + "code": "the_fall_of_the_house_of_usher", + "name": "The Fall of the House of Usher" + }, + { + "code": "hanninah_valley", + "name": "Hanninah Valley" + }, + { + "code": "wendigos_myth", + "name": "Wendigo's Myth" + }, + { + "code": "fortune_and_folly", + "name": "Fortune and Folly" + }, + { + "code": "fortunes_chosen", + "name": "Fortune's Chosen" + }, + { + "code": "plan_in_shambles", + "name": "Plan in Shambles" + }, + { + "code": "the_black_stone", + "name": "The Black Stone" + }, + { + "code": "legendry", + "name": "Legendry" + }, + { + "code": "occultism", + "name": "Occultism" + }, + { + "code": "magyar", + "name": "Magyar" + }, + { + "code": "natural_hazards", + "name": "Natural Hazards" + }, + { + "code": "wild_beasts", + "name": "Wild Beasts" + }, + { + "code": "ancient_hunger", + "name": "Ancient Hunger" + }, + { + "code": "witch_cult", + "name": "Witch-Cult" + }, + { + "code": "tomes", + "name": "Tomes" + }, + { + "code": "riddles_and_rain", + "name": "Riddles and Rain" + }, + { + "code": "mysteries_abound", + "name": "Mysteries Abound" + }, + { + "code": "shades_of_suffering", + "name": "Shades of Suffering" + }, + { + "code": "agents_of_the_outside", + "name": "Agents of the Outside" + }, + { + "code": "beyond_the_beyond", + "name": "Beyond the Beyond" + }, + { + "code": "congress_of_the_keys", + "name": "Congress of the Keys" + }, + { + "code": "dancing_mad", + "name": "Dancing Mad" + }, + { + "code": "dead_heat", + "name": "Dead Heat" + }, + { + "code": "dogs_of_war", + "name": "Dogs of War" + }, + { + "code": "outsiders", + "name": "Outsiders" + }, + { + "code": "scarlet_sorcery", + "name": "Scarlet Sorcery" + }, + { + "code": "spatial_anomaly", + "name": "Spatial Anomaly" + }, + { + "code": "strange_happenings", + "name": "Strange Happenings" + }, + { + "code": "secret_war", + "name": "Secret War" + }, + { + "code": "shadow_of_a_doubt", + "name": "Shadow of a Doubt" + }, + { + "code": "without_a_trace", + "name": "Without a Trace" + }, + { + "code": "agents_of_yuggoth", + "name": "Agents of Yuggoth" + }, + { + "code": "cleanup_crew", + "name": "Cleanup Crew" + }, + { + "code": "crimson_conspiracy", + "name": "Crimson Conspiracy" + }, + { + "code": "dark_veiling", + "name": "Dark Veiling" + }, + { + "code": "dealings_in_the_dark", + "name": "Dealings in the Dark" + }, + { + "code": "globetrotting", + "name": "Globetrotting" + }, + { + "code": "on_thin_ice", + "name": "On Thin Ice" + }, + { + "code": "red_coterie", + "name": "Red Coterie" + }, + { + "code": "sanguine_shadows", + "name": "Sanguine Shadows" + }, + { + "code": "spreading_corruption", + "name": "Spreading Corruption" + }, + { + "code": "zhod_africa_is_watching", + "name": "Africa is Watching" + }, + { + "code": "zhod_to_the_heart_of_the_congo", + "name": "To the Heart of the Congo" + }, + { + "code": "zhod_the_avatar_of_darkness", + "name": "The Avatar of Darkness" + }, + { + "code": "zhod_the_darkness", + "name": "The Darkness" + }, + { + "code": "zhod_african_wildlife", + "name": "African Wildlife" + }, + { + "code": "zhod_lands_of_the_congo", + "name": "Lands of the Congo" + }, + { + "code": "zhod_cult_of_darkness", + "name": "Cult of Darkness" + }, + { + "code": "zreturn_to_the_pit_of_despair", + "name": "Return to The Pit of Despair" + }, + { + "code": "zreturn_to_the_vanishing_of_elina_harper", + "name": "Return to The Vanishing of Elina Harper" + }, + { + "code": "zreturn_to_in_too_deep", + "name": "Return to In Too Deep" + }, + { + "code": "zreturn_to_devil_reef", + "name": "Return to Devil Reef" + }, + { + "code": "zreturn_to_horror_in_high_gear", + "name": "Return to Horror in High Gear" + }, + { + "code": "zreturn_to_a_light_in_the_fog", + "name": "Return to A Light in the Fog" + }, + { + "code": "zreturn_to_the_lair_of_dagon", + "name": "Return to The Lair of Dagon" + }, + { + "code": "zreturn_to_into_the_maelstrom", + "name": "Return to Into the Maelstrom" + }, + { + "code": "zstalkers_of_cthulhu", + "name": "Stalkers of Cthulhu" + }, + { + "code": "zrolling_tide", + "name": "Rolling Tide" + }, + { + "code": "zinnsmouth_haze", + "name": "Innsmouth Haze" + }, + { + "code": "zoccultation", + "name": "Occultation" + }, + { + "code": "zbarricaded_doors", + "name": "Barricaded Doors" + }, + { + "code": "zreturn_to_flooded_caverns", + "name": "Return to Flooded Caverns" + }, + { + "code": "laid_to_rest", + "name": "Laid to Rest" + }, + { + "code": "relics_of_the_past", + "name": "Relics of the Past" + }, + { + "code": "too_noble", + "name": "Too Noble" + }, + { + "code": "something_big", + "name": "Something Big" + }, + { + "code": "unscrupulous_investments", + "name": "Unscrupulous Investments" + }, + { + "code": "anything_once", + "name": "Anything Once" + }, + { + "code": "mysterious_benefits", + "name": "Mysterious Benefits" + }, + { + "code": "the_first_day", + "name": "The First Day" + }, + { + "code": "the_second_day", + "name": "The Second Day" + }, + { + "code": "the_final_day", + "name": "The Final Day" + }, + { + "code": "agents_of_the_colour", + "name": "Agents of the Colour" + }, + { + "code": "fate_of_the_vale", + "name": "Fate of the Vale" + }, + { + "code": "heirlooms", + "name": "Heirlooms" + }, + { + "code": "horrors_in_the_rock", + "name": "Horrors in the Rock" + }, + { + "code": "myconids", + "name": "Myconids" + }, + { + "code": "residents", + "name": "Residents" + }, + { + "code": "the_longest_night", + "name": "The Longest Night" + }, + { + "code": "the_silent_heath", + "name": "The Silent Heath" + }, + { + "code": "the_twisted_hollow", + "name": "The Twisted Hollow" + }, + { + "code": "transfiguration", + "name": "Transfiguration" + }, + { + "code": "day_of_rest", + "name": "Day of Rest" + }, + { + "code": "day_of_rain", + "name": "Day of Rain" + }, + { + "code": "day_of_the_feast", + "name": "Day of the Feast" + }, + { + "code": "blight", + "name": "Blight" + }, + { + "code": "fire", + "name": "Fire!" + }, + { + "code": "hemlock_house", + "name": "Hemlock House" + }, + { + "code": "mutations", + "name": "Mutations" + }, + { + "code": "refractions", + "name": "Refractions" + }, + { + "code": "the_forest", + "name": "The Forest" + }, + { + "code": "the_lost_sister", + "name": "The Lost Sister" + }, + { + "code": "the_thing_in_the_depths", + "name": "The Thing in the Depths" + }, + { + "code": "the_vale", + "name": "The Vale" + }, + { + "code": "written_in_rock", + "name": "Written in Rock" + }, + { + "code": "depraved_legions", + "name": "Depraved Legions" + }, + { + "code": "spiraling_inferno", + "name": "Spiralling Inferno" + }, + { + "code": "scorched_wasteland", + "name": "Scorched Wasteland" + }, + { + "code": "malevolent_ritual", + "name": "Malevolent Ritual" + }, + { + "code": "final_annihilation", + "name": "Final Annihilation" + }, + { + "code": "the_midwinter_gala", + "name": "The Midwinter Gala" + }, + { + "code": "zoz_the_road_to_oz", + "name": "The Road to Oz" + }, + { + "code": "zoz_ferocious_beasts", + "name": "Ferocious Beasts" + }, + { + "code": "zoz_wicked_witches", + "name": "Wicked Witches" + }, + { + "code": "zoz_prismatic_evils", + "name": "Prismatic Evils" + }, + { + "code": "zoz_terror_out_of_space", + "name": "Terror Out of Space" + }, + { + "code": "zoz_princess_of_oz", + "name": "Princess of Oz" + }, + { + "code": "zoz_chromatic_infection", + "name": "Chromatic Infection" + }, + { + "code": "zoz_deep_impact", + "name": "Deep Impact" + }, + { + "code": "zoz_emerald_city", + "name": "Emerald City" + }, + { + "code": "zoz_alien_vibrance", + "name": "Alien Vibrance" + }, + { + "code": "zoz_horrid_infection", + "name": "Horrid Infection" + }, + { + "code": "zoz_companions_of_oz", + "name": "Companions of Oz" + }, + { + "code": "zoz_spiraling_decay", + "name": "Spiraling Decay" + }, + { + "code": "zoz_double_whammy", + "name": "Double Whammy" + }, + { + "code": "zoz_chasing_rainbows", + "name": "Chasing Rainbows" + }, + { + "code": "zoz_blighted_land", + "name": "Blighted Land" + }, + { + "code": "zoz_misery_loves_company", + "name": "Misery Loves Company" + }, + { + "code": "zoz_nomes", + "name": "Nomes" + }, + { + "code": "zoz_violent_invasion", + "name": "Violent Invasion" + }, + { + "code": "zoz_hall_of_the_mountain_king", + "name": "Hall of the Mountain King" + }, + { + "code": "zoz_defense_of_the_realm", + "name": "Defense of the Realm" + }, + { + "code": "zoz_true_colours", + "name": "True Colours" + }, + { + "code": "zoz_the_colour_itself", + "name": "The Colour Itself" + }, + { + "code": "zoz_munchkin", + "name": "Munchkin Country" + }, + { + "code": "zoz_winkie", + "name": "Winkie Country" + }, + { + "code": "zoz_quadling", + "name": "Quadling Country" + }, + { + "code": "zoz_gillikin", + "name": "Gillikin Country" + }, + { + "code": "zoz_prologue", + "name": "Prologue" + }, + { + "code": "zau_night_of_fire", + "name": "Night of Fire" + }, + { + "code": "zau_myriad_gentleman", + "name": "The Myriad Gentleman" + }, + { + "code": "zau_world_torn_down", + "name": "A World Torn Down" + }, + { + "code": "zau_unstuck", + "name": "Unstuck" + }, + { + "code": "zau_year_to_plan", + "name": "A Year to Plan" + }, + { + "code": "zau_world_torn_down_again", + "name": "A World Torn Down, Again" + }, + { + "code": "zau_time_runs_out", + "name": "Time Runs Out" + }, + { + "code": "zau_agents_of_aforgomon", + "name": "Agents of Aforgomon" + }, + { + "code": "zau_missions", + "name": "Missions" + }, + { + "code": "zau_myriad", + "name": "Myriad" + }, + { + "code": "zau_night_of_the_ritual", + "name": "Night of the Ritual" + }, + { + "code": "zau_nyctophobia", + "name": "Nyctophobia" + }, + { + "code": "zau_paradox", + "name": "Paradox" + }, + { + "code": "zau_shifting_reality", + "name": "Shifting Reality" + }, + { + "code": "zau_thugs", + "name": "Thugs" + }, + { + "code": "zau_unleashed_chaos", + "name": "Unleashed Chaos" + }, + { + "code": "zau_unravelling_years", + "name": "Unravelling Years" + } +] diff --git a/package.json b/package.json index b04cff703..b040cadff 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ }, "scripts": { "all": "npm-run-all clean verify validate:schema definitions sync", + "all-dirty": "npm-run-all verify validate:schema definitions sync", "mini": "npm-run-all build:return-to build:standalone build:all-campaigns build:return-to build:campaign-logs validate:schema definitions sync", "build": "npm-run-all build:return-to build:standalone build:all-campaigns build:return-to build:campaign-logs build:i18n", "build:all-campaigns": "./scripts/build.sh", diff --git a/scripts/schemaValidate.js b/scripts/schemaValidate.js index 9d4d321fe..c3d42764a 100644 --- a/scripts/schemaValidate.js +++ b/scripts/schemaValidate.js @@ -29,6 +29,7 @@ const FIXED_MAGIC_STEPS = { $choose_investigators: true, $check_tarot_reading: true, $pr_R1: true, + $pr_R3: true, $pr_no_resolution: true, $embark: true, $embark_return: true,