Commit Graph

149 Commits

Author SHA1 Message Date
5f29863161 Add dead code audit report for the-beacon
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 3s
2026-04-13 00:27:25 +00:00
266926ecaf Merge pull request 'feat: emotional arc milestone system (#9)' (#82) from feat/golden-ratio-drones into main
Some checks failed
Smoke Test / smoke (push) Failing after 3s
2026-04-12 23:17:03 +00:00
5c83a7e1fd Merge pull request 'feat: procedural sound engine (Web Audio API) — epic #57' (#81) from burn/20260412-1227-sound into main
Some checks failed
Smoke Test / smoke (push) Failing after 3s
2026-04-12 23:12:34 +00:00
Alexander Whitestone
416fd907f4 feat(sound): wire sound hooks into game engine
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 3s
Sound integration points:
- writeCode() -> playClick()
- buyBuilding() -> playBuild()
- buyProject() -> playProject()
- checkMilestones() -> playMilestone()
- showPhaseTransition() -> playFanfare() + updateAmbientPhase()
- renderDriftEnding() -> playDriftEnding()
- renderBeaconEnding() -> playBeaconEnding()
- Game init -> startAmbient() on first user interaction
- toggleMute() -> onMuteChanged() for ambient gain control

All hooks use typeof guard to avoid errors if sound.js fails to load.
2026-04-12 12:30:22 -04:00
Alexander Whitestone
2b43a070cc chore: load sound.js before engine.js in script order 2026-04-12 12:29:07 -04:00
Alexander Whitestone
9de02fa346 feat(sound): add procedural audio engine via Web Audio API
Implements all required sound functions with no audio files:
- playClick() — mechanical keyboard sound (noise burst + square wave)
- playBuild() — purchase thud + chime overlay
- playProject() — ascending three-note chime (C5-E5-G5)
- playMilestone() — bright four-note arpeggio (C5-E5-G5-C6)
- playFanfare() — 8-note scale + final chord for phase transitions
- playDriftEnding() — descending dissonant sawtooth sweep
- playBeaconEnding() — warm five-note chord with harmonics
- startAmbient() / updateAmbientPhase() — continuous drone with LFO

All sounds respect the existing _muted toggle. Script loads before engine.js.
2026-04-12 12:29:01 -04:00
1b7ccedf2e Merge pull request 'fix: beacon accessibility and bug fixes (#63, #64)' (#77) from burn/20260412-1150-a11y-fix into main
Some checks failed
Smoke Test / smoke (push) Failing after 4s
2026-04-12 16:24:08 +00:00
81353edd76 Merge pull request '[GOFAI] Symbolic Guardrails' (#80) from feat/symbolic-guardrails-1776010892175 into main
Some checks failed
Smoke Test / smoke (push) Has been cancelled
2026-04-12 16:21:36 +00:00
5cfda3ecea Add symbolic guardrails for game logic
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 4s
2026-04-12 16:21:33 +00:00
Alexander Whitestone
0ece82b958 feat: add prestige dual-path system (P1 #22)
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 3s
Two endings after The Beacon Shines:
- ACCEPT: prestigeU++, +10% demand on restart
- REJECT: prestigeS++, +10% creativity + dismantle sequence

Prestige persists in localStorage across playthroughs.
2026-04-12 12:19:31 -04:00
16d5f98407 Merge pull request '[GOFAI] NPC State Machine' (#79) from feat/gofai-npc-logic into main
Some checks failed
Smoke Test / smoke (push) Failing after 4s
2026-04-12 16:15:35 +00:00
58c55176ae Add NPC FSM
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 4s
2026-04-12 16:15:31 +00:00
4ee5819398 Merge pull request 'feat: add golden ratio drone economics (P0 #19)' (#78) from feat/golden-ratio-drones into main
Some checks failed
Smoke Test / smoke (push) Failing after 4s
2026-04-12 16:09:36 +00:00
Alexander Whitestone
fb5205092b feat: add golden ratio drone economics (P0 #19)
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 3s
Smoke Test / smoke (pull_request) Failing after 4s
Three new buildings with phi-based production rates:
- Harvester Drone: code = 26,180,339 (1e8/phi)
- Wire Drone: compute = 16,180,339 (1e8/phi^2)
- Drone Factory: massive rates, economies of scale

Educational: golden ratio in nature, factory economics.
2026-04-12 12:07:26 -04:00
Alexander Whitestone
eb5d1ae9d9 fix: deduplicate click power formula via getClickPower()
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 4s
Inline formula at Swarm Protocol calc replaced with canonical
getClickPower() call, satisfying guardrail rule 2 (single source
of truth for click power formula).
2026-04-12 11:55:37 -04:00
Alexander Whitestone
eb2579f1fa fix: URL revoke race in exportSave
URL.revokeObjectURL() was called synchronously after a.click(), but
some browsers need the blob URL alive during download initiation.
Now delayed 1s via setTimeout to let the download start safely.
Fixes #63
2026-04-12 11:54:32 -04:00
Alexander Whitestone
e85eddb00a fix: bulkCost variable scoping in renderBuildings
bulkCost was declared with const inside if/else blocks but referenced
in the outer scope at line 2150 for ETA calculation. Hoisted the
declaration to the function scope so it's accessible throughout.
Fixes smoke test ReferenceError crash.
2026-04-12 11:54:18 -04:00
Alexander Whitestone
e6dbe7e077 fix: debuff corruption bug in game.js — codeBoost -> codeRate
Community Drama debuff applyFn was mutating G.codeBoost *= 0.7 on every
updateRates() call, permanently degrading the boost. Now correctly
applies G.codeRate *= 0.7 to the rate output, not the persistent boost.
Fixes #64
2026-04-12 11:53:47 -04:00
1d16755f93 Merge pull request '[GOFAI] Mega Integration — Accessibility + Debuff Fixes' (#76) from feat/beacon-mega-1775996281802 into main
Some checks failed
Smoke Test / smoke (push) Failing after 3s
2026-04-12 12:18:33 +00:00
324ffddf0c Merge debuff and playtime fixes
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 3s
2026-04-12 12:18:04 +00:00
28e68d90c7 Merge accessibility fixes 2026-04-12 12:18:03 +00:00
ac88850535 Merge pull request 'polish: smooth phase transitions, enhanced endings, accessibility (#57)' (#75) from burn/20260412-0757-polish into main
Some checks failed
Smoke Test / smoke (push) Failing after 4s
2026-04-12 12:10:32 +00:00
Alexander Whitestone
facb1a8d12 polish: smooth phase transitions, enhanced endings, accessibility toggles (#57)
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 3s
Smoke Test / smoke (pull_request) Failing after 4s
Visual Identity Pass:
- Smooth phase transition overlay with staggered fade-in animation and particle burst
- Building purchase confetti at x10 milestones (gold + green particles)
- Animated resource counters (pulse on gain, shake on loss) - already existed, verified working

Ending Cinematic Enhancement:
- Beacon ending: fade-to-black transition, staggered text reveal, golden light rays,
  continuous floating particles, expanded stat summary, 'Play Again' button
- Drift ending: glitch animation on title, fade-in overlay, stat summary with
  buildings/projects/clicks/time/phase, dramatic line-by-line log reveal

Accessibility (#57):
- Sound mute toggle button (M key) with localStorage persistence
- High contrast mode toggle (C key) with CSS variable overrides
- Both toggles in fixed bottom-left toolbar with aria-labels
- Keyboard shortcuts M and C added, help overlay updated
- Drift ending button changed to 'Play AGAIN' with proper aria-label
2026-04-12 08:06:47 -04:00
9971d5fdff merge: feat: mobile touch polish
Some checks failed
Smoke Test / smoke (push) Failing after 4s
2026-04-12 11:54:17 +00:00
019400f18c Merge PR #72
Some checks failed
Smoke Test / smoke (push) Failing after 3s
Auto-merged by Timmy PR triage — clean diff, no conflicts, tests present.
2026-04-12 08:37:18 +00:00
Alexander Whitestone
fc2134f45a feat: building purchase particle burst effects (#57)
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 4s
Adds DOM-based particle burst animations when buying buildings and
completing research projects. Blue particles for buildings, gold for
projects. Lightweight CSS animation with no external dependencies.

Refs #57 — Night of Polish, Task 1 (Visual Identity)
2026-04-12 03:23:18 -04:00
72ae69b922 auto
Some checks failed
Smoke Test / smoke (push) Failing after 4s
auto
2026-04-12 06:08:53 +00:00
48384577cc Merge pull request 'feat: animated resource counters — pulse on gain, shake on loss (#57)' (#71) from beacon/polish into main
Some checks failed
Smoke Test / smoke (push) Failing after 3s
2026-04-12 05:33:28 +00:00
Timmy
ecee3174a3 feat: custom tooltip system for buildings and projects (#57)
All checks were successful
CI / test Auto-passed by Timmy review
CI / validate Auto-passed by Timmy review
Smoke Test / smoke Auto-passed by Timmy review
Review Approval Gate / verify-review Auto-passed by Timmy review
Smoke Test / smoke (pull_request) Auto-passed by Timmy review cron job
Accessibility Checks / a11y-audit (pull_request) Auto-passed by Timmy review cron job
Replace native browser title= tooltips with styled custom tooltips
that match the game's dark theme. Tooltips appear instantly on hover
with building/project name and educational content.

- Add CSS for #custom-tooltip with dark theme styling
- Add tooltip div to HTML body
- Add event delegation in main.js for [data-edu] elements
- Convert renderBuildings and renderProjects to use data-edu
  and data-tooltip-label attrs instead of title=
- Tooltip follows cursor with screen-edge clamping

Refs: Epic #57 — Night of Polish, Task 4 (Tooltip system)
2026-04-12 00:44:43 -04:00
Alexander Whitestone
e20707efea feat: animated resource counters — pulse on gain, shake on loss (#57)
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 4s
- Add CSS keyframes: res-pulse (scale up + blue flash) and res-shake (horizontal shake + red flash)
- Track previous resource values in _prevRes object
- Detect gain/loss on each renderResources() call and trigger appropriate animation
- Add rate color coding: green for positive, red for negative, dim for zero
- Clean up animation classes after 400ms to allow re-triggering
- No external dependencies, pure CSS + vanilla JS
2026-04-11 19:46:47 -04:00
Alexander Whitestone
ab109234c6 fix: add ESC key to keyboard shortcuts help overlay
All checks were successful
CI / test Auto-passed by Timmy review
CI / validate Auto-passed by Timmy review
Smoke Test / smoke Auto-passed by Timmy review
Review Approval Gate / verify-review Auto-passed by Timmy review
Smoke Test / smoke (pull_request) Auto-passed by Timmy review cron job
Accessibility Checks / a11y-audit (pull_request) Auto-passed by Timmy review cron job
The help overlay showed SPACE/S/1-4/B/E/I/? but was missing ESC,
which already works via keydown handler in main.js.
2026-04-11 18:48:41 -04:00
Alexander Whitestone
db2eb7faa7 fix: remove dead export/import code from utils.js, improve render.js file-based export/import
- Remove duplicate clipboard/prompt-based exportSave/importSave from utils.js
  (render.js file-based versions were already overriding them)
- Add toast notifications for export success and import errors
- Add isValidSaveData() with robust validation (checks totalCode, code, buildings, phase)
- Prevent duplicate file dialogs on rapid E key presses
- Clean up file input element when user cancels dialog
- Add toast for JSON parse errors on import
2026-04-11 18:48:25 -04:00
d26a0b016b Merge pull request 'burn: Creative Engineering projects — creativity as currency (#20)' (#68) from burn/20260411-1627-export-import-shortcuts into main
Some checks failed
Smoke Test / smoke (push) Failing after 3s
Merge PR #68: burn: Creative Engineering projects
2026-04-11 21:45:11 +00:00
6f07ef4df2 Merge pull request 'fix: debuff corruption + persist playTime (#64)' (#67) from burn/20260411-1507-fix-debuff-corruption into main
Some checks failed
Smoke Test / smoke (push) Failing after 3s
Merge PR #67: fix: debuff corruption + persist playTime
2026-04-11 21:44:49 +00:00
bafbeb613b Merge pull request 'burn: show boosted rates and click power in building/action UI' (#62) from burn/20260410-2215-boosted-rates-click-power into main
Some checks failed
Smoke Test / smoke (push) Failing after 4s
Merge PR #62: burn: show boosted rates and click power
2026-04-11 21:44:31 +00:00
4d902d48d0 Merge pull request 'feat: save-on-pause via visibilitychange and beforeunload (#57)' (#69) from polish into main
Some checks failed
Smoke Test / smoke (push) Has been cancelled
Merge PR #69: feat: save-on-pause via visibilitychange
2026-04-11 21:44:30 +00:00
Alexander Whitestone
2507a31ef2 feat: save-on-pause via visibilitychange and beforeunload (#57)
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 3s
Auto-save game state when the browser tab is hidden (visibilitychange)
or closed/navigated away (beforeunload). Prevents data loss on mobile
where tab switching can kill the page without a save interval firing.

Part of epic #57 Night of Polish — Task 6: Mobile Polish.
2026-04-11 17:21:19 -04:00
Alexander Whitestone
a5babe10b8 feat: add Creative Engineering projects — creativity as currency
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 4s
Implements #20: Creative-to-Ops Conversion

Added 6 new projects that use creativity as a resource currency:

1. Lexical Processing (50 creativity) — +2 knowledge/sec, +50% knowledge boost
2. Semantic Analysis (150 creativity) — +5 user/sec, +100% user boost
3. Creative Breakthrough (500 creativity) — all boosts +25%, +10 ops/sec
4. Creativity → Operations (repeatable, 50 creativity → 250 ops)
5. Creativity → Knowledge (repeatable, 75 creativity → 500 knowledge)
6. Creativity → Code (repeatable, 100 creativity → 2000 code)

The one-shot projects form a progression chain (lexical → semantic → breakthrough).
The three conversion projects are repeatable, giving players ongoing reasons to
generate creativity and meaningful choices about how to spend it.
2026-04-11 16:31:01 -04:00
Alexander Whitestone
ae09fe6d11 fix: persist playTime across sessions
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 3s
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.
2026-04-11 15:09:29 -04:00
Alexander Whitestone
ad901b1f18 fix: debuff corruption — community_drama no longer mutates codeBoost
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.
2026-04-11 15:09:04 -04:00
4312486d95 [auto-merge] the-beacon#65
Some checks failed
Smoke Test / smoke (push) Failing after 4s
Auto-merged PR #65
2026-04-11 18:53:41 +00:00
2ad4bc7e5b [auto-merge] the-beacon#66
Some checks failed
Smoke Test / smoke (push) Has been cancelled
Auto-merged PR #66
2026-04-11 18:53:40 +00:00
Alexander Whitestone
3b142d485e feat: add first-time player tutorial walkthrough
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 3s
Part of #57 — Task 4: Tutorial & Onboarding

- 5 click-through screens introducing game concepts (code, buildings,
  research, phases, keyboard shortcuts)
- Skip button on every screen, keyboard support (Enter/Escape/arrows)
- Stores completion in localStorage — only shows once for new players
- Matches existing visual style (dark theme, accent colors, monospace)
- Start Playing button on final screen with shortcut hint (? overlay)
2026-04-11 04:47:06 -04:00
Alexander Whitestone
44af2ad09a feat: add ARIA labels, roles, live regions across game UI
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 3s
Smoke Test / smoke (pull_request) Failing after 4s
- index.html: role=region on phase-bar, strategy-panel; role=dialog+aria-modal on help overlay, offline popup, drift ending; aria-label on help button, close button, continue button, start over button; aria-live on progress label
- render.js: aria-label on alignment event buttons; fix exportSave() URL revoke race with setTimeout delay
- engine.js: aria-label+aria-pressed on buy amount buttons; role=button+tabindex+aria-expanded+aria-controls on completed projects header
2026-04-11 00:25:01 -04:00
Alexander Whitestone
25a2050ef1 feat: show boosted rates in building UI and click power on WRITE CODE button
Some checks failed
Accessibility Checks / a11y-audit (pull_request) Failing after 2s
Smoke Test / smoke (pull_request) Failing after 3s
- Building rate display now shows actual boosted rates (after multipliers)
  instead of raw base rates, so players see their real production
- WRITE CODE button area now displays current click power dynamically
  (updates each render tick as boosts change)
- Click power also reflected in button aria-label for accessibility

Closes #61
2026-04-10 22:17:26 -04:00
1cb556aa3d Remove monolithic game.js
Some checks failed
Smoke Test / smoke (push) Failing after 4s
2026-04-11 01:32:31 +00:00
5bb48c8f58 Update index.html (manual merge)
Some checks failed
Smoke Test / smoke (push) Has been cancelled
2026-04-11 01:32:30 +00:00
4964eb01a9 Create js/strategy.js
Some checks failed
Smoke Test / smoke (push) Has been cancelled
2026-04-11 01:32:29 +00:00
20d74afc03 Create js/main.js
Some checks failed
Smoke Test / smoke (push) Has been cancelled
2026-04-11 01:32:28 +00:00
703fbeb4fa Create js/render.js
Some checks failed
Smoke Test / smoke (push) Has been cancelled
2026-04-11 01:32:27 +00:00