From d091e7382aa6daf98f050651294ad2a0441187f5 Mon Sep 17 00:00:00 2001 From: Fredrik Johansson Date: Tue, 7 Jul 2026 23:13:54 +0200 Subject: [PATCH] Fix recruit: always available, scaling cost; log newest-first at top recruit_neighbor was gated behind !first_meeting so it vanished after the first upgrade. Now a single repeatable recruit with scaling cost. Log scrolls to top on new entries so most recent is always visible. Co-Authored-By: Claude Sonnet 4.6 --- src/ui.ts | 6 ++++++ src/upgrades.ts | 15 +++------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/ui.ts b/src/ui.ts index e06f3d5..b7c7efb 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -168,11 +168,17 @@ function renderUpgrades(state: State): void { }).join(''); } +let lastLogLength = 0; + function renderLog(state: State): void { const log = document.getElementById('log')!; + if (state.log.length === lastLogLength) return; + lastLogLength = state.log.length; + // state.log is newest-first (unshift); render as-is, scroll to top log.innerHTML = state.log.map(e => `
${e.text}
` ).join(''); + log.scrollTop = 0; } function showOverlay(state: State): void { diff --git a/src/upgrades.ts b/src/upgrades.ts index 301d966..b180beb 100644 --- a/src/upgrades.ts +++ b/src/upgrades.ts @@ -13,11 +13,11 @@ export interface Upgrade { export const UPGRADES: Upgrade[] = [ { id: 'recruit_neighbor', - name: 'Rekrytera en granne', + name: 'Rekrytera en troende', desc: '+1 Troende. De undrade varför källarlamporna flimrade. Nu vet de.', cost: { andakt: 20 }, - effect: s => { s.troende += 1; }, - available: s => !s.upgrades.has('first_meeting'), + effect: s => { s.troende += 1; s.andakt = Math.max(0, s.andakt - 20 * Math.max(1, s.troende - 2)); }, + available: s => s.troende < 12, once: false, }, { @@ -56,15 +56,6 @@ export const UPGRADES: Upgrade[] = [ available: s => s.upgrades.has('idol_under_bridge') && s.dread >= 50 && !s.upgrades.has('varnhem_circle'), once: true, }, - { - id: 'recruit_2', - name: 'Rekrytera ytterligare troende', - desc: '+2 Troende. Ryktet sprids längs de rätta kanalerna.', - cost: { andakt: 150 }, - effect: s => { s.troende += 2; s.andaktRate += 0.5; }, - available: s => s.upgrades.has('first_meeting') && s.troende < 8, - once: false, - }, { id: 'torso_beacon', name: 'Altaret vid Turning Torso',