Add lore depth, fix recruit click bug, add localStorage save
- 20+ new events drawing from Anders Fager, Kult, and Call of Cthulhu: ICA cashiers who never blink, SJ trains stopping in non-existent tunnels, Kult lictors as city officials, death servants finishing lectures, Deep Ones, investigators dreaming about us, stars being right over Lund Observatory - Rewrite upgrade descriptions to match the register: mundane detail, matter-of-fact horror, no melodrama - Add a new mid-game upgrade (Paktens Förnyelse) to smooth the progression - Fix recruit button: was destroying DOM every 30fps tick, killing mousedown→click events; now only rebuilds when availability/affordability actually changes - Fix double andakt deduction in recruit effect - Fix map growing over log (proper flex constraints) - Add localStorage save/load with versioned key (SAVE_VERSION bump invalidates old saves); autosaves every 10s and on upgrade purchase, clears on restart Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
170
src/events.ts
170
src/events.ts
@@ -153,6 +153,135 @@ export const STANDARD_EVENTS: GameEvent[] = [
|
||||
weight: 3,
|
||||
requires: { minRitual: 60 },
|
||||
},
|
||||
|
||||
// ── Anders Fager-register: vardagssvenska möter det ofattbara ──
|
||||
{
|
||||
id: 'ica_maxi',
|
||||
text: 'Kassörskan på ICA Maxi vid Fosie har inte blinkmat på tre veckor. Kunden bakom i kön räknade. Ingen anmälde det. Det är Malmö.',
|
||||
effect: { dread: 7, kaos: 4 },
|
||||
weight: 9,
|
||||
},
|
||||
{
|
||||
id: 'sj_train',
|
||||
text: 'SJ-tåget mot Köpenhamn stannade i tolv minuter i en tunnel som inte finns på kartan. Passagerarna anlände i tid. Ingen av dem kan minnas att de steg på tåget.',
|
||||
effect: { dread: 14, kaos: 8 },
|
||||
weight: 7,
|
||||
requires: { minDread: 15 },
|
||||
},
|
||||
{
|
||||
id: 'pressbyraan',
|
||||
text: 'Pressbyrån på centralstationen säljer sedan fredag en tidning utan namn. Texten byter innehåll beroende på vem som läser. Bengt-Åke från Husie köper ett ex om dagen och verkar nöjd.',
|
||||
effect: { dread: 10, kaos: 6, andakt: 5 },
|
||||
weight: 8,
|
||||
},
|
||||
{
|
||||
id: 'child_sees',
|
||||
text: 'Syster Halléns dotter, 7 år, har börjat rita samma bild varje dag. En stad under vatten. Byggnaderna är rätt. Malmö kan inte ha legat under vatten. Inte på den här sidan av verkligheten.',
|
||||
effect: { dread: 18, ritual: 2 },
|
||||
weight: 7,
|
||||
requires: { minDread: 10 },
|
||||
},
|
||||
{
|
||||
id: 'rolf_disappears',
|
||||
text: 'Rolf från Limhamn var med oss i tre veckor. Han slutade komma. Vi hittade hans skor utanför lokalen ordentligt placerade med tårna mot havet. Rökarens tobak låg bredvid. Rolf rökte inte.',
|
||||
effect: { hemlighet: -8, dread: 12, kaos: 5 },
|
||||
weight: 7,
|
||||
},
|
||||
{
|
||||
id: 'mirror_problem',
|
||||
text: 'Spegeln i förrummet återspeglar lokalen som den såg ut för ett okänt antal år sedan. Möblerna är annorlunda. Det sitter folk i dem. De ser glada ut.',
|
||||
effect: { dread: 16, kaos: 9 },
|
||||
weight: 6,
|
||||
requires: { minDread: 20 },
|
||||
},
|
||||
{
|
||||
id: 'kult_lictor',
|
||||
text: 'En tjänsteman från stadsbyggnadskontoret kom för att kontrollera ventilationen. Han hittade inga brister. Han stannade i fyra timmar. Han antecknade ingenting men han tittade på allt. Dörren han gick ut genom finns inte längre.',
|
||||
effect: { hemlighet: -20, dread: 15 },
|
||||
weight: 5,
|
||||
requires: { minDread: 30 },
|
||||
},
|
||||
{
|
||||
id: 'anneli_dream',
|
||||
text: 'Systern Anneli-Karin har börjat tala i sömnen på ett språk vi inte känner igen. Vi spelade in det och spelade upp det baklänges. Det var också obegripligt. Fast annorlunda obegripligt.',
|
||||
effect: { dread: 12, ritual: 3, andakt: 8 },
|
||||
weight: 7,
|
||||
requires: { minDread: 25 },
|
||||
},
|
||||
{
|
||||
id: 'hospital_report',
|
||||
text: 'UMAS rapporterar en ökning av patienter med "orientationssvårigheter." De vet vem de är. De vet var de är. De vet bara inte när de är. Siffran stämmer inte med någon känd tidpunkt.',
|
||||
effect: { dread: 20, kaos: 12 },
|
||||
weight: 5,
|
||||
requires: { minDread: 40 },
|
||||
},
|
||||
|
||||
// ── Kult-register: verkligheten är ett fängelse och murarna spricker ──
|
||||
{
|
||||
id: 'kult_space_between',
|
||||
text: 'Det finns ett rum i källaren som inte är med i ritningarna. Vi har mätt tre gånger. Arkitektkontoret mätte en gång. De mäter inte mer.',
|
||||
effect: { dread: 22, kaos: 10 },
|
||||
weight: 6,
|
||||
requires: { minDread: 35 },
|
||||
},
|
||||
{
|
||||
id: 'kult_flesh',
|
||||
text: 'Väggarna i Värnhemslokalens källare har börjat kännas varma. Vi kontrollerade rören. Det är inte rören. Vi kontrollerade inte mer.',
|
||||
effect: { dread: 28, ritual: 4 },
|
||||
weight: 4,
|
||||
requires: { unlockedArea: 'varnhem', minDread: 50 },
|
||||
},
|
||||
{
|
||||
id: 'kult_death_servant',
|
||||
text: 'Broder Mattsson dog i hjärtattack under onsdagsmötet. Han reste sig upp igen och färdigförklarade sin tolkning av det tredje kapitlet. Vi applåderade. Det var den bästa föreläsningen hittills.',
|
||||
effect: { dread: 35, ritual: 6, kaos: 18 },
|
||||
weight: 3,
|
||||
requires: { minDread: 60 },
|
||||
},
|
||||
{
|
||||
id: 'kult_awakening',
|
||||
text: 'Syster Thordis minns plötsligt något. Inte från ett tidigare liv — det är fel metafor. Snarare minns hon något som aldrig upphört. Hon gråter. Hon är glad. Skillnaden är svår att se.',
|
||||
effect: { dread: 25, ritual: 8, andakt: 15 },
|
||||
weight: 4,
|
||||
requires: { minRitual: 20 },
|
||||
},
|
||||
|
||||
// ── CoC-register: utredare, förlorat förstånd, Mythos med Malmö-accent ──
|
||||
{
|
||||
id: 'coc_deep_ones',
|
||||
text: 'Fiskarna vid Ribersborg uppför sig konstigt. De simmar i cirklar. Cirkeln är exakt 13 meter i diameter. Varje dag krymper den med en halv meter. Vi vet vad det betyder. Vi skriver inte ner det här.',
|
||||
effect: { dread: 18, ritual: 2, kaos: 7 },
|
||||
weight: 6,
|
||||
requires: { minDread: 20 },
|
||||
},
|
||||
{
|
||||
id: 'coc_investigator_dream',
|
||||
text: 'Kommissarie Annika Fors från grova brott drömmer om oss. Vi vet det för att hon har börjat dröm-närvara på mötena. Vi har satt ut en stol åt henne. Hon sitter i den utan att veta om det.',
|
||||
effect: { hemlighet: -10, kaos: 15, dread: 12 },
|
||||
weight: 5,
|
||||
requires: { minDread: 35 },
|
||||
},
|
||||
{
|
||||
id: 'coc_old_book',
|
||||
text: 'En antikvariat vid Lilla Torg fick in ett parti böcker från ett dödsbo i Hyllie. En av dem börjar om du öppnar den. Antikvariaten har läst sista sidan. Hon behöver inte läsa fler böcker.',
|
||||
effect: { dread: 20, ritual: 5, kaos: 8 },
|
||||
weight: 5,
|
||||
requires: { minDread: 25 },
|
||||
},
|
||||
{
|
||||
id: 'coc_sanity',
|
||||
text: 'Broder Erik fick ett panikattackliknande tillstånd efter gårdagens session. Inte för att det var läskigt. För att det inte var det längre. "Jag tänkte det borde vara det," sa han. "Och det var det inte."',
|
||||
effect: { dread: 15, kaos: 10, andakt: 10 },
|
||||
weight: 7,
|
||||
requires: { minDread: 30 },
|
||||
},
|
||||
{
|
||||
id: 'coc_stars_right',
|
||||
text: 'Astronomerna vid Lund Observatory har lagt ut en pressrelease om "ovanlig stjärnkonfiguration." De drog tillbaka den inom en timme. Konfigurationen kvarstår. Stjärnorna vet.',
|
||||
effect: { dread: 30, ritual: 7, kaos: 12 },
|
||||
weight: 4,
|
||||
requires: { minRitual: 30, minDread: 50 },
|
||||
},
|
||||
];
|
||||
|
||||
// ── Kaos events (Henderson-tier) ─────────────────────────────────────────────
|
||||
@@ -235,4 +364,45 @@ export const KAOS_EVENTS: GameEvent[] = [
|
||||
weight: 3,
|
||||
requires: { minDread: 60, unlockedArea: 'varnhem' },
|
||||
},
|
||||
{
|
||||
id: 'k_bengt_ake',
|
||||
text: 'Bengt-Åke (tidningsmannen från Husie) visade sig vara med i en helt annan sekt sedan 1987. Hans sekt visade sig vara med i en ännu äldre sekt sedan 1840-talet. Vi håller ett samordningsmöte. Det är produktivt.',
|
||||
effect: { kaos: -45, andakt: 35, troende: 2 },
|
||||
weight: 7,
|
||||
},
|
||||
{
|
||||
id: 'k_skinwalker_bus',
|
||||
text: 'Något som ser ut som en bussförare har kört linje 2 sedan tisdags morse. Tidtabellen är perfekt. Kunderna är nöjda. Skånetrafiken vet inte vem det är. Det spelar ingen roll, säger de. Det kör ju.',
|
||||
effect: { kaos: -50, dread: 45 },
|
||||
weight: 6,
|
||||
requires: { minDread: 40 },
|
||||
},
|
||||
{
|
||||
id: 'k_fager_library',
|
||||
text: 'Stadsbiblioteket på Kung Oscars väg har ett rum i källaren som bara öppnas under kaos. Vi var sist dit. Samlingen är imponerande. Returndatumet är omöjligt.',
|
||||
effect: { kaos: -55, ritual: 12, dread: 20 },
|
||||
weight: 5,
|
||||
requires: { minDread: 30 },
|
||||
},
|
||||
{
|
||||
id: 'k_reporter_vanishes',
|
||||
text: 'Journalisten från Sydsvenskan som skrev det prisbelönta reportaget har rest till Malmö för en uppföljningsartikel. Han hittade mer än han letade efter. Artikeln publiceras aldrig. Vi sparar hans anteckningar.',
|
||||
effect: { kaos: -40, hemlighet: 20, ritual: 5 },
|
||||
weight: 6,
|
||||
requires: { minDread: 45 },
|
||||
},
|
||||
{
|
||||
id: 'k_kult_archon',
|
||||
text: 'Något som påminner om en bank-direktör besökte ritualen utan att vi bjöd in det. Det tittade på oss med ett intresse vi inte kan beskriva. Det lämnade ett visitkort. Det finns inget namn på det. Bara en adress. Vi har inte åkt dit än.',
|
||||
effect: { kaos: -60, dread: 60, hemlighet: -25 },
|
||||
weight: 4,
|
||||
requires: { minDread: 55 },
|
||||
},
|
||||
{
|
||||
id: 'k_oresund_rises',
|
||||
text: 'Vattnet i Öresund sjunker alltjämt. På botten syns nu en stad. Det är inte en gammal stad. Byggnaderna är moderna. En av dem har belysning.',
|
||||
effect: { kaos: -80, dread: 90, ritual: 15 },
|
||||
weight: 2,
|
||||
requires: { minDread: 75, minRitual: 50 },
|
||||
},
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user