From ad901b1f18f037b03b814d56b6269843fa53dd54 Mon Sep 17 00:00:00 2001 From: Alexander Whitestone Date: Sat, 11 Apr 2026 15:09:04 -0400 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20debuff=20corruption=20=E2=80=94=20co?= =?UTF-8?q?mmunity=5Fdrama=20no=20longer=20mutates=20codeBoost?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit applyFn was multiplying G.codeBoost by 0.7 on every updateRates() call (building purchase, project, click, etc.), permanently degrading it. After 10 calls the boost was effectively zero. Fix: apply penalty to G.codeRate (computed per-tick) instead of G.codeBoost (persistent multiplier). Debuffs must never mutate boost state. --- js/engine.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/engine.js b/js/engine.js index 42d8662..4af4465 100644 --- a/js/engine.js +++ b/js/engine.js @@ -514,8 +514,8 @@ const EVENTS = [ if (G.activeDebuffs.find(d => d.id === 'community_drama')) return; G.activeDebuffs.push({ id: 'community_drama', title: 'Community Drama', - desc: 'Harmony -0.5/s, code boost -30%', - applyFn: () => { G.harmonyRate -= 0.5; G.codeBoost *= 0.7; }, + desc: 'Harmony -0.5/s, code production -30%', + applyFn: () => { G.harmonyRate -= 0.5; G.codeRate *= 0.7; }, resolveCost: { resource: 'trust', amount: 15 } }); log('EVENT: Community drama. Spend 15 trust to mediate.', true); -- 2.43.0 From ae09fe6d11d1c095f11bc0e8e0a380626e2c4bff Mon Sep 17 00:00:00 2001 From: Alexander Whitestone Date: Sat, 11 Apr 2026 15:09:29 -0400 Subject: [PATCH 2/2] fix: persist playTime across sessions playTime was defined in globals but never incremented and never included in save/load. Now incremented each tick and persisted in localStorage via the whitelist and save data. --- js/engine.js | 1 + js/render.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/js/engine.js b/js/engine.js index 4af4465..7ef75f8 100644 --- a/js/engine.js +++ b/js/engine.js @@ -169,6 +169,7 @@ function tick() { } G.tick += dt; + G.playTime += dt; // Sprint ability tickSprint(dt); diff --git a/js/render.js b/js/render.js index 9080611..c6ac3c2 100644 --- a/js/render.js +++ b/js/render.js @@ -161,6 +161,7 @@ function saveGame() { activeDebuffIds: debuffIds, totalEventsResolved: G.totalEventsResolved || 0, buyAmount: G.buyAmount || 1, + playTime: G.playTime || 0, sprintActive: G.sprintActive || false, sprintTimer: G.sprintTimer || 0, sprintCooldown: G.sprintCooldown || 0, @@ -195,7 +196,7 @@ function loadGame() { 'memoryFlag', 'pactFlag', 'lazarusFlag', 'mempalaceFlag', 'ciFlag', 'branchProtectionFlag', 'nightlyWatchFlag', 'nostrFlag', 'milestones', 'completedProjects', 'activeProjects', - 'totalClicks', 'startedAt', 'flags', 'rescues', 'totalRescues', + 'totalClicks', 'startedAt', 'playTime', 'flags', 'rescues', 'totalRescues', 'drift', 'driftEnding', 'beaconEnding', 'pendingAlignment', 'lastEventAt', 'totalEventsResolved', 'buyAmount', 'sprintActive', 'sprintTimer', 'sprintCooldown', -- 2.43.0