export type EventEffect = Partial<{ andakt: number; hemlighet: number; kaos: number; dread: number; troende: number; ritual: number; }>; export interface GameEvent { id: string; text: string; effect: EventEffect; weight: number; requires?: Partial<{ minTroende: number; minDread: number; minRitual: number; unlockedArea: Area }>; } export type Area = 'rosengard' | 'varnhem' | 'torso'; // ── Standard events ────────────────────────────────────────────────────────── export const STANDARD_EVENTS: GameEvent[] = [ // Early / low dread { id: 'dreams_lindqvist', text: 'Broder Lindqvist drömmer om havet varje natt. Han säger att fisken talar till honom. Vi lyssnar.', effect: { andakt: 5, kaos: 2 }, weight: 10, }, { id: 'systembolaget', text: 'En berusad man utanför Systembolaget på Davidshallsgatan erbjöd sig att "hälsa på gubben i havet." Vi är osäkra på om han menar Den Sovande eller sin morfar. Kanske båda.', effect: { kaos: 8, dread: 3 }, weight: 8, }, { id: 'skatteverket', text: 'Skatteverket har skickat ett brev. De undrar om vår religiösa verksamhet är momsbefriad. Syster Hassan svarar dem med ett 47 sidor långt svar. De hör inte av sig igen.', effect: { hemlighet: -5, andakt: 10 }, weight: 7, }, { id: 'ducks_torso', text: 'Det finns en anledning till att alla änder vid Ribersborg vänder sig mot Turning Torso i ett nästan tillbedjande tillstånd. De anar mer än oss.', effect: { dread: 8, kaos: 3 }, weight: 9, }, { id: 'ikea_table', text: 'Ett IKEA-bord av modell LACK har börjat blöda svart vätska. Vi har lagt en matta över det. Det hjälper inte men det ser snyggare ut.', effect: { dread: 6, kaos: 5 }, weight: 8, }, { id: 'discord_goran', text: 'En Malmöbo vid namn Göran har av misstag blivit med i vår Discord-server och tror att vi diskuterar ett brädspel om havet. Hans feedback är konstruktiv.', effect: { kaos: 12, hemlighet: -8 }, weight: 6, }, { id: 'neighbor_smell', text: 'Grannarna har klagat på lukten från källaren. Vi förklarar att det är kimchi. Det är inte kimchi.', effect: { hemlighet: -6, andakt: 4 }, weight: 9, }, { id: 'lighthouse_keeper', text: 'Fyrvaktaren vid Malmöhus har slutat dyka upp. Hans ersättare rapporterar att vattnet sjunger nu på nätterna. Hon har också slutat dyka upp.', effect: { dread: 10, kaos: 6 }, weight: 7, }, { id: 'oresund_hum', text: 'Øresundsbron vibrerar med en frekvens som inte finns i naturen. Danskarna på andra sidan ringer och klagar. Vi svarar inte.', effect: { dread: 12, hemlighet: -4 }, weight: 7, requires: { minDread: 20 }, }, { id: 'turning_torso_spin', text: 'Turning Torso har börjat rotera igen. Det har inte gjort det på tre år. Arkitektkontoret säger att det är omöjligt. Arkitektkontoret ringer inte mer.', effect: { dread: 20, kaos: 10 }, weight: 6, requires: { minDread: 30 }, }, { id: 'varnhem_pigeons', text: 'Duvorna på Värnhemstorget har upphört att äta. De sitter bara. De tittar. En av dem har för många ögon.', effect: { dread: 15, kaos: 8 }, weight: 7, requires: { unlockedArea: 'varnhem' }, }, { id: 'varnhem_fountain', text: 'Fontänen på Värnhemstorget rinner baklänges sedan tisdag. Kommunen har satt upp ett staket. Folk tar selfies.', effect: { dread: 12, hemlighet: -10, kaos: 5 }, weight: 6, requires: { unlockedArea: 'varnhem' }, }, { id: 'bus_driver', text: 'Bussföraren på linje 5 körde förbi Värnhemstorget tre gånger utan att stanna. Passagerarna märkte det inte. Bussföraren ser nöjd ut.', effect: { dread: 8, kaos: 6 }, weight: 8, requires: { unlockedArea: 'varnhem' }, }, { id: 'investigator_sighting', text: 'En man i grå kostym har stått utanför lokalen i sex timmar. Han tar anteckningar. Broder Persson hälsade vänligt. Mannen vände sig om och gick. Hans skugga gick inte med.', effect: { hemlighet: -15, kaos: 10 }, weight: 5, requires: { minDread: 40 }, }, { id: 'manuscript_dream', text: 'Skriften har börjat skriva sig själv på nätterna. De nya raderna är inte på något känt språk. De är inte på något okänt språk heller egentligen.', effect: { dread: 18, ritual: 3, kaos: 8 }, weight: 5, requires: { minRitual: 10 }, }, { id: 'torso_shadow', text: 'Turning Torsos skugga pekar nu mot havet oavsett var solen står. En student från Malmö Universitet skriver en uppsats om detta. Hon sover inte längre.', effect: { dread: 22, kaos: 12 }, weight: 5, requires: { unlockedArea: 'torso' }, }, { id: 'torso_windows', text: 'Fönstren i Turning Torso lyser nu i ett mönster. Mönstret är ett namn. Vi kan inte läsa det. Inte än.', effect: { dread: 30, ritual: 5, kaos: 15 }, weight: 4, requires: { unlockedArea: 'torso', minRitual: 30 }, }, { id: 'sea_level', text: 'Vattennivån i Öresund har sjunkit 4 centimeter sedan måndag. SMHI rapporterar ett "tekniskt fel i mätinstrumenten." Det är inte ett tekniskt fel.', effect: { dread: 25, kaos: 10 }, weight: 4, requires: { minDread: 60 }, }, { id: 'police_curious', text: 'Polisen i Malmö har börjat fråga om "den religiösa föreningen vid vattnet." Vi skickar dem en broschyr om mindfulness. De tackar och ber om en till.', effect: { hemlighet: -12, andakt: 8 }, weight: 5, requires: { minDread: 50 }, }, { id: 'final_dream', text: 'I natt drömde alla troende samma sak. Det finns inga ord för vad vi såg. Det finns dock ett ljud. Vi har börjat göra det.', effect: { dread: 40, ritual: 8, troende: 2, kaos: 20 }, weight: 3, requires: { minRitual: 60 }, }, ]; // ── Kaos events (Henderson-tier) ───────────────────────────────────────────── export const KAOS_EVENTS: GameEvent[] = [ { id: 'k_goran_dog', text: 'Göran (från Discord-incidenten) har tagit med sig sin hund "Bamse" till ritualen. Bamse verkar inte störd av chantingen. Tvärtom. Bamse leder nu det andra kvartalets böner.', effect: { kaos: -40, andakt: 20, troende: 1 }, weight: 10, }, { id: 'k_influencer', text: 'En influencer har börjat live-streama utanför vår lokal med titeln "mysig sektkänsla i Malmö 🌊✨". Kommentarerna är överväldigande positiva. Dread ökar snabbare nu.', effect: { kaos: -30, dread: 40, hemlighet: -20 }, weight: 9, }, { id: 'k_zlatan', text: 'Zlatan Ibrahimović har postat en bild på Instagram från Stortorget klockan 3 på natten med texten "jag vet." Vi vet inte vad han vet. Han vet.', effect: { kaos: -50, dread: 35, hemlighet: -5 }, weight: 8, }, { id: 'k_bygglov', text: 'Kommunen har beviljat bygglov för "andlig rekreationsanläggning" vid Västra Hamnen. Ceremonin är nu stadsplanegodkänd. Det finns en toalett.', effect: { kaos: -35, hemlighet: 15, andakt: 25 }, weight: 8, }, { id: 'k_journalist', text: 'En journalist från Sydsvenskan skriver ett positivt reportage om "Malmös växande alternativa andlighet." Artikeln vinner pris. Juryn kan inte minnas vad de tyckte om den.', effect: { kaos: -40, troende: 3, hemlighet: -15 }, weight: 7, }, { id: 'k_rival_cult', text: 'En rivaliserande sekt med bas i Hässleholm försöker summera en annan entitet. De summerar fel. De summerar IKEA:s kundtjänst. Det är värre.', effect: { kaos: -45, dread: 50, hemlighet: 10 }, weight: 7, }, { id: 'k_duck_army', text: 'Änderna vid Ribersborg marscherar nu i formation mot Turning Torso. Turisterna filmar det. En orkester spelar av oklar anledning. Det låter rätt.', effect: { kaos: -60, dread: 60, ritual: 5 }, weight: 5, requires: { minDread: 30 }, }, { id: 'k_old_man', text: 'En pensionerad sjöman med oidentifierbara tatueringar har låst in sig i tornet vid Turning Torso och börjat sjunga. Räddningstjänsten kan inte ta sig in. Sången hjälper faktiskt ritualen.', effect: { kaos: -50, ritual: 10, hemlighet: -10 }, weight: 5, requires: { unlockedArea: 'torso' }, }, { id: 'k_varnhem_kebab', text: 'Kebabkiosken på Värnhemstorget serverar sedan onsdag ett alternativt menyalternativ som inte finns på tavlan. Kunderna som beställer det återkommer. De ser annorlunda ut.', effect: { kaos: -40, troende: 4, dread: 30 }, weight: 6, requires: { unlockedArea: 'varnhem' }, }, { id: 'k_denmark', text: 'Danmark har officiellt begärt förklaring om vad som händer i Malmö. Sverige skickar en arbetsgrupp. Arbetsgruppen reser över Øresundsbron och hör inte av sig.', effect: { kaos: -55, dread: 45, hemlighet: -8 }, weight: 5, requires: { minDread: 50 }, }, { id: 'k_goran_promoted', text: 'Göran har frågat om han kan "ta lite mer ansvar" i föreningen. Vi har utnämnt honom till Väktare av det Tredje Sigillet. Han tolkar det som kassör. Det är ungefär rätt.', effect: { kaos: -30, andakt: 30, hemlighet: 5 }, weight: 8, }, { id: 'k_no_survivors', text: 'Det hände något på Värnhemstorget i natt. Bevakningskamerorna fungerar men visar statiska bilder från 1987. Alla inblandade är okej. Ingen vet vad "okej" betyder längre.', effect: { kaos: -70, dread: 80, ritual: 8 }, weight: 3, requires: { minDread: 60, unlockedArea: 'varnhem' }, }, ];