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

606 lines
24 KiB
JSON
Raw Normal View History

{
"version": "1.0.0",
"encounters": [
{
"key": "generator_repair",
"baseProbability": 0.55,
"tags": ["generator", "objectives"],
"tier": 1,
"flavorSuccess": [
"The generator sputters to life. Light floods the area.",
"Sparks fly, then hum — the generator catches.",
"Wires connected. The machine breathes again.",
"A deep mechanical thrum. Progress.",
"The gauge climbs. Another generator done.",
"Hands steady, heart racing. The engine turns over.",
"The generator shudders, then roars. One less in the dark.",
"Circuit reconnected. The hum is its own small victory.",
"It takes longer than expected, but the light comes.",
"The generator protests, then yields."
],
"flavorFailure": [
"The generator kicks back. Too many watchers in the dark.",
"The mechanism jams. Footsteps echo nearby.",
"A noise betrays the position. The generator goes cold.",
"Something shifts in the fog. The work abandoned.",
"The wiring resists every attempt. No progress tonight.",
"A shadow crosses the generator. Not now.",
"The tool slips. The noise is too loud.",
"The generator sparks wrong. An alarm of sorts.",
"Patience runs out before the generator does.",
"A nearby sound. The repair will have to wait."
]
},
{
"key": "totem_cleanse",
"baseProbability": 0.50,
"tags": ["totem", "altruistic", "objectives"],
"tier": 1,
"flavorSuccess": [
"The totem crumbles. Its curse lifts from the fog.",
"Bones scatter. The hex dissolves into smoke.",
"The ritual unravels. Something distant screams.",
"The totem falls apart like it was never solid.",
"Ash and splinter. The hex breaks.",
"A soft crack — the bones give way. Something changes.",
"The skull shatters. Whatever watched through it is gone.",
"The cleansing takes. The fog feels thinner.",
"The totem offers no resistance. It was waiting to fall.",
"One less curse in the trial."
],
"flavorFailure": [
"The totem resists. Its pull is stronger than expected.",
"A presence drives the survivor back before the cleanse completes.",
"The hex holds. Dread thickens the air.",
"Fingers close on the totem — then something warns away.",
"The totem hums with malice. Not today.",
"The ritual is interrupted. The hex burns brighter.",
"The bones refuse to break. Wrong approach.",
"The totem feels wrong. Leave it for now.",
"Whatever keeps the totem standing isn't done yet.",
"The cleanse stalls halfway. The hex endures."
]
},
{
"key": "chest_search",
"baseProbability": 0.45,
"tags": ["chest", "item"],
"tier": 1,
"flavorSuccess": [
"The chest yields a worn medkit. Small mercies.",
"A flashlight, still charged. The fog recedes slightly.",
"A useful tool among the debris.",
"Something worth having. The chest wasn't empty after all.",
"Buried under detritus — a working toolbox.",
"A medkit, half-depleted but still viable.",
"The chest creaks open. Something useful inside.",
"Luck, this time.",
"Not everything in the fog is hostile. The chest provides.",
"A find. The supplies won't last, but they'll help."
],
"flavorFailure": [
"The chest is empty. Only rust and regret.",
"The lid splinters — nothing useful inside.",
"A noise nearby cuts the search short.",
"Someone got here first.",
"The chest is locked. No time to force it.",
"Debris, nothing more.",
"Whatever was here is long gone.",
"The chest yields nothing. Time wasted.",
"Empty. The trial takes without giving.",
"Nothing. Move on."
]
},
{
"key": "hook_escape",
"baseProbability": 0.40,
"tags": ["hook", "survival"],
"tier": 2,
"flavorSuccess": [
"With grim determination, the survivor slips free.",
"Arms aching, the hook releases. Freedom, for now.",
"A desperate push — the chains give way.",
"The hook yields to persistence.",
"Blood and effort. The barb comes free.",
"The survivor drops to the ground, gasping.",
"Will wins where strength falls short. Free.",
"The hook's grip loosens. A precious second of clarity.",
"Every instinct says stop. The survivor doesn't.",
"The chains snap. Unlikely. Necessary."
],
"flavorFailure": [
"The struggle exhausts. The hook holds.",
"Every movement drives the barb deeper. Stay still.",
"The fog presses in. The hook remains.",
"The attempt fails. The chains don't care.",
"No leverage. No escape. Not yet.",
"The energy spent is wasted. Still trapped.",
"The hook was designed for this. It holds.",
"Patience isn't a luxury here — but neither is panic.",
"The barb shifts but doesn't release.",
"The struggle ends. The hook wins this round."
]
},
{
"key": "exit_gate",
"baseProbability": 0.50,
"tags": ["exit", "objectives"],
"tier": 2,
"flavorSuccess": [
"The gate grinds open. Cold air rushes in.",
"Generators humming, the lock gives. Almost there.",
"The exit yields. Light from outside cuts the fog.",
"The switch holds down. The gate obeys.",
"A long, agonising second — then the gate opens.",
"The exit panel responds. The way out is clear.",
"The gate was always going to open. Tonight it does.",
"The outside world, briefly visible through iron.",
"The switch trips. The gate moves.",
"One last obstacle overcome."
],
"flavorFailure": [
"The gate mechanism is jammed. Precious seconds lost.",
"A shadow falls across the panel. The attempt abandoned.",
"The switch is stuck. The gate stays shut.",
"The gate won't cooperate. Not now.",
"The panel sparks and resets. Try again.",
"Something holds the gate. Not mechanical — worse.",
"The generator noise covers the gate's resistance.",
"The lock mechanism fails. The gate holds.",
"Too slow. The gate doesn't open in time.",
"Pressure on the switch, nothing. Wrong timing."
]
},
{
"key": "patrol_avoid",
"baseProbability": 0.60,
"tags": ["stealth", "survival"],
"tier": 1,
"flavorSuccess": [
"Still as stone. The threat passes without noticing.",
"A breath held long — then silence. Safe.",
"The fog swallows the survivor whole. Unseen.",
"The patrol route is predictable. Predictable is avoidable.",
"Close. Too close. But not close enough to matter.",
"The survivor becomes scenery. The patrol sees nothing.",
"A narrow gap in the patrol. Taken.",
"The killer's attention is elsewhere. Move.",
"Footsteps near, then receding. Safe.",
"The locker is cold and cramped and perfect."
],
"flavorFailure": [
"A twig snaps. Eye contact — then the chase begins.",
"The survivor misjudges the angle. Spotted.",
"Heartbeat too loud. Presence too close.",
"The patrol's route changed. A fatal assumption.",
"No cover. The survivor is seen.",
"A shadow where there should be none. Detected.",
"The instinct to run is wrong. It happens anyway.",
"The fog offers no protection here.",
"Spotted. The trial shifts.",
"The killer turns at the wrong moment."
]
},
{
"key": "medkit_use",
"baseProbability": 0.65,
"tags": ["healing", "altruistic", "survival"],
"tier": 1,
"flavorSuccess": [
"Bandages tight, the wound closes. Pain recedes.",
"The medkit does its job. The survivor steadies.",
"A few tense minutes — injuries tended.",
"Not good as new, but functional. Good enough.",
"The bleeding stops. The fog feels slightly less hostile.",
"Clinical precision in a place with no clinics.",
"The medkit is emptied wisely. The injury yields.",
"Hands that shake still heal.",
"The wound is dressed. One less liability.",
"Recovery, however temporary, is still recovery."
],
"flavorFailure": [
"Supplies exhausted before the job is done.",
"Shaking hands fumble the medkit. Time runs out.",
"The wound is worse than it looked. Supplies fall short.",
"The medkit can't do what it wasn't built for.",
"Partial healing is still an open wound.",
"The medkit empties wrong. Wasted.",
"Not enough supplies. Not enough time.",
"A noise ends the attempt prematurely.",
"The injury resists treatment.",
"The medkit fails the survivor. Move anyway."
]
},
{
"key": "pallet_drop",
"baseProbability": 0.55,
"tags": ["survival", "escape"],
"tier": 2,
"flavorSuccess": [
"The pallet crashes down. A moment bought.",
"Timber splinters between them. Distance gained.",
"The drop lands true. The chase falters.",
"A calculated throw. The pallet does its job.",
"The killer staggers. A few precious seconds.",
"The pallet drops at the right instant.",
"An obstacle placed. The chase interrupted.",
"The wood holds. That's all it needs to do.",
"A roar of frustration behind the pallet. Run.",
"The drop lands. The gap widens."
],
"flavorFailure": [
"The pallet drops wide. No gap created.",
"Too slow — the obstacle proves useless.",
"The throw miscalculated. The pursuit continues.",
"The pallet falls too early. Used for nothing.",
"The killer vaults before the drop lands.",
"The angle was wrong. The pallet wasted.",
"The swing comes before the pallet hits.",
"Not enough distance to matter.",
"The throw panics. The pallet means nothing.",
"A wasted pallet. The chase doesn't stop."
]
},
{
"key": "basement_search",
"baseProbability": 0.35,
"tags": ["chest", "item", "high-risk"],
"tier": 3,
"flavorSuccess": [
"The basement yields rare supplies. Worth the risk.",
"A pristine toolbox — almost worth dying for.",
"The gamble paid off. The survivor emerges with something valuable.",
"The basement gives up its best. A full medkit.",
"Down there and back. The best supplies in the trial.",
"The risk calculates out. Everything needed, found.",
"The stairs back up feel like a victory.",
"The basement held back something good tonight.",
"A rare find. The fog occasionally provides.",
"Against instinct, into the basement. Worth it."
],
"flavorFailure": [
"The basement was a trap. Retreat costs dearly.",
"The stairwell offers no escape. A mistake made clear.",
"The risk was not worth the reward found — nothing.",
"The basement is empty. And now time is lost.",
"Going down is easy. Coming back is not.",
"The killer knows about the basement.",
"Nothing down here but dread.",
"The search finds nothing. The stairs up feel longer.",
"An empty chest in a dangerous room.",
"The basement takes more than it gives tonight."
]
},
{
"key": "hatch_find",
"baseProbability": 0.30,
"tags": ["exit", "survival", "high-risk"],
"tier": 3,
"flavorSuccess": [
"The hatch sighs open. One last mercy from the fog.",
"A sound — familiar, haunting. The hatch, just ahead.",
"Against all odds, the escape route reveals itself.",
"The hatch was always here. It waited.",
"The fog breaks once. That's enough.",
"The survivor finds it before the killer does.",
"One last door. It opens.",
"The hatch glows faintly. Run.",
"The sound of it — an invitation.",
"Found. The trial ends here."
],
"flavorFailure": [
"The hatch is nowhere. Only fog and silence.",
"Close — so close. Then it closes.",
"The sound was something else entirely.",
"The hatch stays hidden.",
"Searching costs time that isn't there.",
"The killer finds the hatch first.",
"The fog gives nothing freely.",
"The sound led nowhere. A trick of the trial.",
"No hatch. No escape. Not this way.",
"The trial isn't done with the survivor yet."
]
},
{
"key": "window_vault",
"baseProbability": 0.60,
"tags": ["escape", "survival"],
"tier": 1,
"flavorSuccess": [
"The window frame holds. Through and clear.",
"A clean vault. Momentum kept.",
"The opening is tight but usable.",
"Through the gap before the killer closes.",
"The vault buys distance. Use it.",
"A practiced move. The window yields.",
"Landing clean on the other side.",
"The window is a door when you need it.",
"Fast enough. The gap widens.",
"Through. The chase resets."
],
"flavorFailure": [
"The window is boarded shut.",
"The vault is too slow. Caught.",
"The frame splinters. Not a clean exit.",
"Misjudged the height. A costly stumble.",
"The window closes the gap but not the killer.",
"Too narrow. No good.",
"The vault fails at the worst moment.",
"The opening was an illusion. Dead end.",
"A bad angle kills the attempt.",
"The window doesn't help tonight."
]
},
{
"key": "locker_hide",
"baseProbability": 0.65,
"tags": ["stealth", "survival"],
"tier": 1,
"flavorSuccess": [
"The locker closes. Footsteps pass. Breathe.",
"Darkness and rust — perfect cover.",
"The killer walks past the locker without a glance.",
"Still. Quiet. Safe.",
"The locker is old and cold and hiding works.",
"In and out before the threat turns around.",
"The locker holds its occupant safe.",
"A long minute of nothing. Then clear.",
"The hiding spot works. The patrol moves on.",
"The locker door stays closed. The killer moves on."
],
"flavorFailure": [
"The locker door rattles. Discovered.",
"The killer yanks it open. No hiding here.",
"The locker was already checked.",
"The sound of breathing gives the position away.",
"The killer knows these lockers too well.",
"A squeak of the hinge. Fatal.",
"The hiding spot chosen is the wrong one.",
"The killer's instinct is correct tonight.",
"Spotted entering. No time.",
"The locker offers nothing. Pulled out."
]
},
{
"key": "trap_disarm",
"baseProbability": 0.50,
"tags": ["objectives", "altruistic"],
"tier": 2,
"flavorSuccess": [
"The trap clicks disarmed. One less hazard.",
"Patient work. The mechanism yields.",
"The snap of metal, controlled this time.",
"Disarmed without triggering. Clean.",
"The trap comes apart safely.",
"A moment of focus. The trap poses no more threat.",
"The floor is safer now.",
"The mechanism was elegant. Now it's inert.",
"One trap gone. Onwards.",
"The disarm holds. The path is clear."
],
"flavorFailure": [
"The trap snaps. A brutal reminder.",
"One wrong move. The trap wins.",
"The mechanism was subtler than expected.",
"The disarm attempt triggers it.",
"Fingers too slow. The trap bites.",
"The trap was set with someone capable in mind.",
"Miscalculation. The mechanism triggers.",
"The trap holds and catches.",
"The attempt fails. Pain follows.",
"The trap wasn't meant to be disarmed easily."
]
},
{
"key": "survivor_rescue",
"baseProbability": 0.45,
"tags": ["altruistic", "hook"],
"tier": 2,
"flavorSuccess": [
"Off the hook. Both survivors run.",
"The unhook is clean. No one watching.",
"A teammate freed. The trial continues.",
"Quick hands, lucky timing. The rescue holds.",
"The hook releases. Time to move.",
"Pulled free before the killer returns.",
"The rescue works. Move fast.",
"A window of opportunity, taken.",
"The teammate drops free. The trial has two again.",
"Freed. Both running now."
],
"flavorFailure": [
"The killer turns back too soon. Retreat.",
"The rescue fails. Both caught.",
"The timing was wrong.",
"The unhook attempted — the killer was watching.",
"No safe window. The rescue abandoned.",
"The hook held on.",
"The approach was spotted.",
"The teammate is hooked again. Worse now.",
"The rescue was a trap.",
"The killer was closer than it looked."
]
},
{
"key": "ruin_destroy",
"baseProbability": 0.45,
"tags": ["totem", "objectives", "altruistic"],
"tier": 2,
"flavorSuccess": [
"The ruin totem falls. Generator speed returns to normal.",
"The hex breaks. The pressure lifts.",
"Ruin destroyed. The generators are finally cooperating.",
"The totem crumbles. Something screams.",
"The ruin is gone. Work can continue properly.",
"The corrupting influence ends here.",
"Ruin undone. A meaningful contribution.",
"The hex shattered. Every generator benefits.",
"Ruin falls. The trial shifts.",
"The cleansing removes one of the fog's advantages."
],
"flavorFailure": [
"Ruin holds. The generators resist every effort.",
"The totem is guarded.",
"Ruin endures. Progress is a trickle.",
"The hex is stronger than expected.",
"The cleanse fails. Ruin stays.",
"Guarded or cursed — the totem won't fall.",
"The approach to ruin is cut off.",
"Ruin watches everything. No safe approach.",
"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": [
"The area is clear. Work continues.",
"A careful sweep — nothing here.",
"All quiet. Safe to proceed.",
"The check takes seconds. Worth every one.",
"Nothing threatening nearby. Focus returned.",
"The perimeter is clean. Move on.",
"A slow look around — all clear.",
"The survivor's instincts were right. Safe.",
"No danger. The noise was nothing.",
"The area is empty. Continue."
],
"flavorFailure": [
"The check reveals what was feared.",
"Not clear. Danger is close.",
"The area isn't empty.",
"The sound was not nothing.",
"A presence, sensed too late.",
"The check confirms the worst.",
"Not safe. Move now.",
"The area is 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 trial grounds. The generators are marked.",
"Routes, exits — everything useful on one piece of paper.",
"The map provides context. Decisions improve.",
"A schematic of the realm. Useful.",
"The map shows what couldn't be known otherwise.",
"A rare find. The trial becomes navigable.",
"Totem locations, hooks — the map tells all.",
"The map is accurate. That's not guaranteed here.",
"A clearer picture of the trial grounds.",
"The map is old but correct. It will help."
],
"flavorFailure": [
"Nothing useful found.",
"The map, if it existed, is gone.",
"The search yields no information.",
"Fog and confusion. No map here.",
"The grounds give nothing away.",
"The trial keeps its layout to itself.",
"No orientation gained.",
"Blind as before.",
"The realm offers no guide tonight.",
"No map. Trust instinct."
]
},
{
"key": "scratch_marks",
"baseProbability": 0.55,
"tags": ["stealth", "altruistic"],
"tier": 1,
"flavorSuccess": [
"The trail read correctly. The survivor is found.",
"Scratch marks, followed. Another survivor located.",
"The signs in the fog tell a story.",
"The trail is fresh. Someone was here recently.",
"The marks lead somewhere useful.",
"Reading the ground pays off.",
"The scratch marks don't lie.",
"A teammate's path, followed to its source.",
"The signs are legible. The survivor is found.",
"The trail ends at something worth finding."
],
"flavorFailure": [
"The trail goes cold.",
"The marks lead nowhere useful.",
"Misread. The path was wrong.",
"The trail circles back. Disorienting.",
"The signs in the fog are misleading.",
"Too old. The trail is gone.",
"The scratch marks weren't recent.",
"The trail led somewhere dangerous.",
"The signs can't be read clearly.",
"The trail ends without resolution."
]
},
{
"key": "bone_chill",
"baseProbability": 0.35,
"tags": ["high-risk", "survival"],
"tier": 3,
"flavorSuccess": [
"The presence recedes. The survivor is not chosen.",
"Whatever stalks the fog passes over.",
"The terror subsides. Not tonight.",
"The entity considers — then moves on.",
"The survivor is overlooked. Lucky.",
"The cold lifts. The entity chose elsewhere.",
"The fog's attention moves away.",
"Stillness. The presence is gone.",
"Not taken. Not yet.",
"The chill passes. The trial continues."
],
"flavorFailure": [
"The fog thickens. Something approaches.",
"The presence locks on. There is no outrunning this.",
"The entity's attention does not waver.",
"Noticed. The trial changes.",
"The chill deepens. The entity is here.",
"No escape from something this deliberate.",
"The fog moves with purpose.",
"The survivor is seen by 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 passes harmlessly. Not found.",
"The killer's sense of where to look is wrong tonight.",
"The prediction fails. Safe.",
"The killer checks elsewhere.",
"Instinct misfires. The survivor is still hidden.",
"Wrong corner checked. The survivor breathes.",
"The killer's certainty was misplaced.",
"Not there. Not tonight.",
"The instinct was wrong. Move quickly.",
"The killer's focus breaks elsewhere."
],
"flavorFailure": [
"The killer knows exactly where to look.",
"Instinct and experience. The survivor is found.",
"No hiding from something this certain.",
"The killer's read was correct.",
"The position is given away before the search begins.",
"Exactly where expected. No luck tonight.",
"The killer's certainty was earned.",
"Found before the search starts.",
"The instinct is right.",
"The killer walks directly to the survivor."
]
}
]
}