Files
fog/libs/encounter-library/src/lib/encounters.json

666 lines
26 KiB
JSON
Raw Normal View History

{
"version": "1.4.0",
"encounters": [
{
"key": "generator_repair",
"baseProbability": 0.55,
"tags": ["generator", "objectives"],
"tier": 1,
"flavorSuccess": [
"It catches. I step back before I let myself feel anything.",
"Sparks, then hum. I keep moving.",
"The last wire clicks. One down.",
"It's running. I don't stop to celebrate.",
"My hands stop shaking when the engine turns over.",
"{{ally}} holds the wire steady. It catches.",
"The gauge climbs. I'm already looking for the next one.",
"Takes too long. But it works.",
"Done. The light helps more than I expected.",
"{{ally}} calls out. I make the connection. Done."
],
"flavorFailure": [
"Something moves in the fog. I pull back.",
"A sound behind me. I leave the gen and run.",
"Too loud. I made it too loud.",
"The wiring's wrong. I can't fix it from here.",
"I miscalculate. The whole thing sparks wrong.",
"{{ally}} had to break away. I lose the progress.",
"My hand slips. The noise is too much.",
"A shadow on the gen. I'm already gone.",
"Not tonight. Not this one.",
"{{ally}} pulls back — something's close. I follow."
]
},
{
"key": "totem_cleanse",
"baseProbability": 0.50,
"tags": ["totem", "altruistic", "objectives"],
"tier": 1,
"flavorSuccess": [
"A hex totem. I hear it before I see it. I break it anyway.",
"Just a dull totem. I cleanse it before it can become something worse.",
"The hex shatters. Whatever was draining us stops.",
"No curse on this one. Still worth clearing.",
"I don't know which hex it was. It's gone now. That's enough.",
"{{ally}} spots the hex. I make short work of it.",
"The glow fades. The hex is gone.",
"Dull totem. Cleansed. One less place for a hex to root itself.",
"{{ally}} calls it out — just a dull totem, but now it's ash.",
"One less totem in the trial."
],
"flavorFailure": [
"The hex totem pulls back. I can't finish this.",
"I reach it but something drives me off before it breaks.",
"The hex holds. The pressure doesn't lift.",
"Just a dull totem, but I can't stay long enough to cleanse it.",
"The hex hums. I'm not strong enough. Not yet.",
"{{ally}} calls wrong. The hex burns brighter.",
"No curse here, but no time either. I leave it standing.",
"{{ally}} needs me. The totem stays.",
"Halfway through. Then something changes. I run.",
"The hex endures. I'll find another way."
]
},
{
"key": "chest_search",
"baseProbability": 0.45,
"tags": ["chest", "item"],
"tier": 1,
"flavorSuccess": [
"A medkit. Worn, but real.",
"A flashlight, still charged. I pocket it.",
"Something useful. I don't ask how it got here.",
"Not empty. That's not nothing.",
"A toolbox, buried under rot. I'll take it.",
"Half a medkit. Better than nothing.",
"The chest creaks open. I take what's there.",
"Lucky.",
"The fog gives sometimes. Not often.",
"Supplies. They won't last, but they'll help."
],
"flavorFailure": [
"Empty. Just rust and old regret.",
"Nothing worth taking.",
"A sound cuts the search short.",
"Someone else was here first.",
"Locked. I don't have time to force it.",
"Debris. Nothing more.",
"Whatever was here is long gone.",
"Nothing. Time I don't have, wasted.",
"The trial takes without giving.",
"Move on."
]
},
{
"key": "hook_escape",
"baseProbability": 0.40,
"tags": ["hook", "survival"],
"tier": 2,
"flavorSuccess": [
"I don't know how. I don't care. I'm off.",
"Arms burning. The hook releases. Move.",
"Every instinct says give up. I don't.",
"It gives. I fall. I run.",
"Blood and effort. The barb comes free.",
"{{ally}}'s voice from out there somewhere. I fight harder. I'm free.",
"Will wins. I'm off the hook.",
"A fraction of movement — and it releases.",
"I stop thinking and just push. It works.",
"{{ally}} is coming. I hold on long enough. Then I'm free."
],
"flavorFailure": [
"The struggle costs everything. The hook doesn't move.",
"Every movement makes it worse. I go still.",
"The fog presses in. I'm still up here.",
"I try. The chains don't.",
"No leverage. Not this time.",
"{{ally}} can't get to me. Still stuck.",
"It's designed for exactly this. It holds.",
"Panic and pain in equal measure. Neither helps.",
"The barb shifts but doesn't release.",
"I lose this one."
]
},
{
"key": "exit_gate",
"baseProbability": 0.50,
"tags": ["exit", "objectives"],
"tier": 2,
"flavorSuccess": [
"The gate grinds open. Cold air. Real air.",
"The lock gives. I keep pressure on the switch.",
"Light from outside cuts through the fog.",
"The gate obeys. I don't let go until it does.",
"A long second. Then the mechanism gives.",
"The panel responds. I'm almost out.",
"It opens. It actually opens.",
"Through the iron, I can see outside.",
"The switch trips. The gate moves. I move.",
"One more thing behind me."
],
"flavorFailure": [
"The gate mechanism jams. I burn seconds I don't have.",
"A shadow at the panel. I abandon it.",
"The switch won't budge.",
"The gate refuses. Not now.",
"The panel sparks and resets. I try again.",
"Something holds it. Nothing mechanical.",
"The gate resists. I can't tell why.",
"The lock fails. The gate stays shut.",
"Too slow. The gate doesn't care.",
"Nothing. Wrong timing."
]
},
{
"key": "patrol_avoid",
"baseProbability": 0.60,
"tags": ["stealth", "survival"],
"tier": 1,
"flavorSuccess": [
"I don't breathe. I don't think. It passes.",
"A long silence — then the footsteps recede.",
"I melt into the fog. Unseen.",
"{{killer}} is predictable. Predictable is avoidable.",
"Close. Too close. But not enough.",
"{{ally}} draws the patrol the other way. I slip through.",
"A gap in the route. I take it.",
"{{killer}} looks elsewhere. I don't waste it.",
"Footsteps near. Then far. Then gone.",
"The locker is cold and tight and it works."
],
"flavorFailure": [
"A wrong step. Eye contact. {{killer}} gives chase.",
"I misjudge the angle. Spotted.",
"My heartbeat is too loud. {{killer}} is too close.",
"The route changed. I didn't know.",
"No cover. Nowhere to go.",
"{{ally}} breaks stealth nearby. We're both compromised.",
"Every instinct says run. That instinct is wrong. I run anyway.",
"The fog doesn't protect me here.",
"Spotted. Everything changes.",
"{{ally}}'s noise pulls {{killer}} my way."
]
},
{
"key": "medkit_use",
"baseProbability": 0.65,
"tags": ["healing", "altruistic", "survival"],
"tier": 1,
"flavorSuccess": [
"The bandages hold. The pain pulls back.",
"The medkit does what it's supposed to.",
"Not ideal. But the wound closes.",
"Not fixed. Functional. That's enough.",
"The bleeding stops. I breathe.",
"{{ally}}'s hands are steadier than mine. It works.",
"I use the supplies right. The wound yields.",
"{{ally}} moves fast. The treatment holds.",
"One less liability.",
"Better than nothing. Better than before."
],
"flavorFailure": [
"The supplies run out before the job is done.",
"My hands shake too much. Time runs out.",
"Worse than I thought. Supplies fall short.",
"The medkit can't do this.",
"Half-healed is still injured.",
"{{ally}} isn't here. I can't manage it alone.",
"Not enough supplies. Not enough time.",
"A sound. I have to stop.",
"The wound doesn't cooperate.",
"The medkit fails me. I move anyway."
]
},
{
"key": "pallet_drop",
"baseProbability": 0.55,
"tags": ["survival", "chase"],
"tier": 2,
"flavorSuccess": [
"{{killer}} is right behind me. I drop the pallet at the right instant. Distance bought.",
"Mid-chase. The wood crashes down between us. I gain ground.",
"I run the loop and hit the pallet at the last second. {{killer}} staggers.",
"Timed right. The pallet interrupts the chase.",
"{{killer}} tries to mindgame the drop. I read it. The pallet lands.",
"The chase breaks. The pallet did its job.",
"A roar of frustration behind me. I'm already running.",
"The gap widens. I don't look back.",
"{{killer}} can't close it. The pallet holds them.",
"I break the chase. For now."
],
"flavorFailure": [
"{{killer}} predicts the drop. I waste the pallet.",
"Too slow — {{killer}} is through before the wood lands.",
"I panic mid-chase. The pallet falls early. Useless.",
"{{killer}} vaults before the drop. The chase continues.",
"Wrong angle. The pallet saves nothing.",
"The chase doesn't stop. I'm out of pallets.",
"The swing comes before the wood hits the ground.",
"I misjudge the distance. Wasted.",
"One less pallet. The chase goes on.",
"The drop panics. So do I."
]
},
{
"key": "basement_search",
"baseProbability": 0.35,
"tags": ["chest", "item", "high-risk"],
"tier": 3,
"flavorSuccess": [
"Down there and back. Worth it.",
"A pristine toolbox. Almost worth dying for.",
"The gamble paid. I have what I need.",
"A full medkit in the basement. I don't question it.",
"The best supplies in the trial. Found.",
"I run the numbers. The risk pays out.",
"The stairs back up feel like a victory.",
"The basement gives up something good.",
"A rare find. The fog occasionally provides.",
"I go against every instinct. It works."
],
"flavorFailure": [
"The basement was a trap. I pay for it.",
"The stairs offer nothing. Getting back costs more.",
"The risk wasn't worth it. Nothing down here.",
"Empty. And now I'm out of time.",
"Going down is easy. Coming back is the problem.",
"They know about the basement.",
"Nothing down here but dread.",
"I find nothing. The stairs back feel endless.",
"An empty chest in a dangerous room.",
"The basement takes more than it gives."
]
},
{
"key": "hatch_find",
"baseProbability": 0.30,
"tags": ["exit", "survival", "high-risk"],
"tier": 3,
"flavorSuccess": [
"The hatch opens. One last way out.",
"That sound — I know that sound. I run toward it.",
"Against everything. The escape route is there.",
"It was here all along. Waiting.",
"The fog breaks once. That's enough.",
"I find it before they do.",
"One door left. It opens.",
"The hatch glows. I don't wait.",
"I hear it. I go.",
"Found. This ends here."
],
"flavorFailure": [
"Nothing. Only fog.",
"Close — so close. Then it closes.",
"That sound was something else.",
"It stays hidden.",
"Searching burns time I don't have.",
"They find the hatch first.",
"The fog gives nothing freely.",
"The sound led nowhere.",
"No hatch. No escape this way.",
"The trial isn't finished with me yet."
]
},
{
"key": "window_vault",
"baseProbability": 0.60,
"tags": ["survival", "chase"],
"tier": 1,
"flavorSuccess": [
"{{killer}} is closing in. I hit the window before they grab me.",
"Clean vault. I reset the chase distance.",
"In a chase and the window is right there. I take it.",
"I make it through before {{killer}} can follow cleanly.",
"The vault buys a second. In a chase, that's everything.",
"Practiced. Through before {{killer}} can react.",
"I land clean. The chase tilts my way.",
"The window resets the loop. I use it.",
"Fast vault. The gap opens.",
"I break the chase line. Through and running."
],
"flavorFailure": [
"Boarded. I lose the chase line.",
"Too slow. {{killer}} catches me mid-vault.",
"I misjudge the height. Mid-chase, that's fatal.",
"The window doesn't save me here.",
"Too narrow. Wrong call in a chase.",
"The vault fails at the worst moment.",
"{{killer}} reads the vault. I gain nothing.",
"Bad angle. The chase continues on their terms.",
"Blocked. I'm out of options on this loop.",
"The window doesn't help. The chase ends badly."
]
},
{
"key": "locker_hide",
"baseProbability": 0.65,
"tags": ["stealth", "survival"],
"tier": 1,
"flavorSuccess": [
"The door closes. Footsteps pass. Breathe.",
"Rust and darkness. It works.",
"They walk past without a glance.",
"Still. Quiet. Safe.",
"Cold metal. Silence. It holds.",
"{{ally}} draws them off. The locker stays shut.",
"I hold my breath. The footsteps don't stop here.",
"One long minute. Then nothing. Clear.",
"The hiding spot works. They move on.",
"They don't check it. I don't breathe until they're gone."
],
"flavorFailure": [
"The door rattles. I'm found.",
"It yanks open. No hiding here.",
"Already checked. Bad call.",
"My breathing gives me away.",
"They know these lockers too well.",
"{{ally}} makes noise nearby. They look harder. They find me.",
"The wrong spot. I know it as soon as I'm inside.",
"Their instinct is right tonight.",
"Spotted going in. No time.",
"Pulled out."
]
},
{
"key": "trap_disarm",
"baseProbability": 0.50,
"tags": ["objectives", "altruistic"],
"tier": 2,
"flavorSuccess": [
"It clicks safe. One less hazard.",
"Patience. The mechanism yields.",
"The snap of metal — controlled this time.",
"Clean disarm. No mistakes.",
"It comes apart safely. I exhale.",
"One moment of focus. The trap is inert.",
"The floor is safer now.",
"Elegant mechanism. Now it's nothing.",
"One trap down. Keep moving.",
"Disarmed. Path clear."
],
"flavorFailure": [
"It snaps. A brutal reminder of what this place is.",
"One wrong move. The trap wins.",
"Subtler than I expected.",
"My attempt triggers it.",
"Too slow. The trap bites.",
"Whoever set this knew what they were doing.",
"I miscalculate. The mechanism fires.",
"It catches me.",
"I fail. Pain follows.",
"It wasn't meant to be easy."
]
},
{
"key": "survivor_rescue",
"baseProbability": 0.45,
"tags": ["altruistic", "hook"],
"tier": 2,
"flavorSuccess": [
"{{ally}} gets there first. Both of us run.",
"Clean unhook. {{killer}} not watching.",
"I get them down. The trial continues.",
"Fast hands, right timing.",
"They're off the hook. We move.",
"{{ally}} pulls them free before {{killer}} returns.",
"The rescue works. Don't stop moving.",
"The window was there. I took it.",
"{{ally}} gets them clear. Two of us running again.",
"Free. Both running now."
],
"flavorFailure": [
"{{ally}} pulls back. {{killer}} turns too soon.",
"The rescue fails. Both of us in danger.",
"Wrong timing.",
"{{ally}} reaches for the hook — {{killer}} is already watching.",
"No safe window. I leave.",
"The hook holds.",
"{{ally}}'s approach is spotted.",
"They're hooked again. Worse now.",
"The rescue was a trap.",
"{{killer}} was closer than it looked."
]
},
{
"key": "ruin_destroy",
"baseProbability": 0.45,
"tags": ["totem", "objectives", "altruistic"],
"tier": 2,
"flavorSuccess": [
"It falls. Generator speed comes back.",
"The hex breaks. The pressure lifts.",
"Ruin is gone. Finally.",
"{{ally}} calls out the location. I put it down.",
"One less advantage for the fog.",
"The corrupting influence ends here.",
"Ruin undone. That mattered.",
"{{ally}} watches while I cleanse. The hex shatters.",
"Ruin falls. The whole trial shifts.",
"One of the fog's edges, removed."
],
"flavorFailure": [
"Ruin holds. The generators push back at every touch.",
"It's guarded.",
"Ruin endures. Progress is slower than it should be.",
"The hex is stronger than I am right now.",
"I fail. Ruin stays.",
"{{ally}} couldn't hold them back. Ruin stands.",
"The path to it is cut off.",
"Ruin sees everything. I can't get close.",
"The hex survives the attempt.",
"Ruin stands. The generators punish every mistake."
]
},
{
"key": "noise_check",
"baseProbability": 0.70,
"tags": ["stealth", "survival", "objectives"],
"tier": 1,
"flavorSuccess": [
"All clear. Back to work.",
"Nothing here. I was right to check.",
"Quiet. Safe to continue.",
"Seconds spent checking. Worth it.",
"Nothing threatening nearby.",
"{{ally}} signals clear. I continue.",
"Slow sweep. Nothing. Move.",
"My instincts were right. Safe.",
"The noise was nothing.",
"Empty. Continue."
],
"flavorFailure": [
"The check confirms what I feared.",
"Not clear. Move now.",
"Not empty.",
"That sound was not nothing.",
"{{ally}}'s signal cuts out. Something is here.",
"Confirmed. Worse than I thought.",
"Get out.",
"I'm being watched.",
"The noise was a warning.",
"Something is here."
]
},
{
"key": "map_find",
"baseProbability": 0.40,
"tags": ["item", "objectives"],
"tier": 1,
"flavorSuccess": [
"A map of the grounds. The generators are marked.",
"Routes, exits — all of it on one piece of paper.",
"The map helps. Decisions get clearer.",
"A schematic of the realm. Useful.",
"The map tells me things I couldn't know otherwise.",
"A rare find. I know where I'm going now.",
"Totem locations, hooks — the map knows.",
"Accurate. I didn't expect that.",
"A clearer picture.",
"Old, but correct. I'll take it."
],
"flavorFailure": [
"Nothing useful.",
"No map. If there was one, it's gone.",
"The search gives me nothing.",
"Fog and no information.",
"The grounds give nothing away.",
"The trial keeps its layout to itself.",
"No orientation gained.",
"Still blind.",
"The realm offers no guide tonight.",
"No map. Trust instinct."
]
},
{
"key": "scratch_marks",
"baseProbability": 0.55,
"tags": ["stealth", "altruistic"],
"tier": 1,
"flavorSuccess": [
"I read the trail right. Found.",
"{{ally}}'s marks, followed. They're close.",
"The fog leaves clues if you know how to look.",
"{{ally}} was just here. The trail is fresh.",
"The marks lead somewhere useful.",
"Reading the ground pays off.",
"The scratch marks don't lie.",
"I follow {{ally}}'s path. It ends well.",
"Legible. I find what I was looking for.",
"The trail ends somewhere worth being."
],
"flavorFailure": [
"The trail goes cold.",
"{{ally}}'s marks lead nowhere useful.",
"I read it wrong. Wrong direction.",
"The trail circles. I lose time.",
"The fog misleads. The signs are wrong.",
"Too old. {{ally}}'s trail is gone.",
"The marks weren't recent.",
"The trail leads somewhere I don't want to be.",
"I can't make sense of them.",
"No resolution."
]
},
{
"key": "bone_chill",
"baseProbability": 0.35,
"tags": ["high-risk", "survival"],
"tier": 3,
"flavorSuccess": [
"The presence passes over me. Not chosen. Not tonight.",
"Whatever stalks the fog — it moves on.",
"The terror recedes. I'm still here.",
"It considers. Then looks elsewhere.",
"I'm overlooked. I don't question it.",
"The cold lifts. It chose someone else.",
"The fog's attention slides away.",
"Stillness. It's gone.",
"Not taken. Not yet.",
"The chill passes. I continue."
],
"flavorFailure": [
"The fog thickens around me. Something is coming.",
"It locks on. There's no running from this.",
"The attention doesn't move.",
"Noticed. Everything changes.",
"The chill deepens. It's here.",
"Nothing escapes something this deliberate.",
"The fog moves with intent.",
"Something sees me. Something that doesn't forget.",
"The presence descends.",
"Chosen. The hardest part begins."
]
},
{
"key": "killer_instinct",
"baseProbability": 0.30,
"tags": ["high-risk", "stealth"],
"tier": 3,
"flavorSuccess": [
"The instinct misfires. I'm not found.",
"{{killer}} looks in the wrong place.",
"The prediction fails. I'm safe.",
"{{killer}} checks elsewhere.",
"Wrong corner. I breathe.",
"{{killer}} is certain. {{killer}} is wrong.",
"The read was off. I move.",
"Not there. Not tonight.",
"{{killer}}'s instinct fails them.",
"{{killer}}'s focus breaks. I use it."
],
"flavorFailure": [
"{{killer}} knows exactly where I am.",
"Instinct and experience. I'm found.",
"There's no hiding from {{killer}}.",
"The read was right.",
"My position is given away before the search starts.",
"Exactly where expected.",
"{{killer}}'s certainty was earned.",
"Found before the search begins.",
"The instinct is right.",
"{{killer}} walks directly to me."
]
},
{
"key": "chase",
"baseProbability": 0.50,
"tags": ["survival", "chase"],
"tier": 2,
"flavorSuccess": [
"I run the loop. {{killer}} can't close the gap. I lose them.",
"Three pallets, two windows. I get out of the chase clean.",
"I break line of sight in the fog. {{killer}}'s terror radius fades.",
"I outlast the chase. {{killer}} gives up.",
"My legs burn. I find cover. The chase ends.",
"I played the tiles right. The chase breaks in my favour.",
"Down to one pallet and I make it count. Chase over.",
"I dodge into the fog. {{killer}} can't read where I went.",
"The terror radius fades. I'm clear.",
"I survive the chase. Barely."
],
"flavorFailure": [
"I run out of pallets. {{killer}} closes the gap.",
"One wrong turn. Cornered.",
"{{killer}} reads my loop before I complete it.",
"I panic. I lose the tiles. That's it.",
"No more pallets. No windows left. I go down.",
"{{killer}} predicts every move I have.",
"I run until there's nowhere left to run.",
"Caught mid-vault. That's all it takes.",
"The terror radius never fades. {{killer}} catches me.",
"{{killer}} closes the distance. I can't stop it."
]
},
{
"key": "hook_sabotage",
"baseProbability": 0.40,
"tags": ["altruistic", "objectives"],
"tier": 2,
"flavorSuccess": [
"I see {{killer}} carrying {{ally}}. I sprint to the nearest hook and sabo it before they arrive.",
"The hook comes apart in my hands. {{killer}} will have to carry them further.",
"I make it in time. One hook down.",
"Quick hands. The hook drops before {{killer}} turns the corner.",
"{{ally}} is being carried. The hook falls. Bought them a few more seconds.",
"Sabotaged and gone before anyone sees me.",
"The hook gives easily. I don't stay to watch.",
"One less hook {{killer}} can use.",
"I hear them struggling close by. I break the nearest hook and run.",
"The sabo lands. {{killer}} has to reroute. Use the time."
],
"flavorFailure": [
"Too slow. The hook is used before I get there.",
"I'm spotted mid-sabo. {{killer}} gives chase.",
"{{killer}} changes direction. They find a different hook.",
"I reach it but I'm too late to finish the sabo.",
"I start to sabo — then {{killer}}'s footsteps get too close.",
"{{ally}} is hooked before I can stop it.",
"{{killer}} anticipates it. They reroute.",
"Not fast enough. The hook holds.",
"{{ally}} goes up on the hook. I was too far.",
"The sabo fails. So does the rescue."
]
}
]
}