Skip to content

feat(engine): fun-while-dying slice 1 — big-nuke doctrines + easy rework - #17

Merged
emp3thy merged 3 commits into
mainfrom
feat/character-personalities
Jul 26, 2026
Merged

feat(engine): fun-while-dying slice 1 — big-nuke doctrines + easy rework#17
emp3thy merged 3 commits into
mainfrom
feat/character-personalities

Conversation

@emp3thy

@emp3thy emp3thy commented Jul 26, 2026

Copy link
Copy Markdown
Owner

What

"Fun while dying" slice 1 — makes the cast read louder and games play differently, and fixes the difficulty paradox the playability study surfaced. Engine-only; no win-condition/scoring/UI change.

Changes

  • Netanyahoo → big-but-rare warmonger. Build plan front-loads large warheads (missile 4, large 3, medium 2, no small). He arms slowly, then lands periodic devastating strikes rather than spamming. launchSalvo already fires largest-first, so this makes large warheads a genuine, reachable character trait — the fix for the study finding that large nukes only ever appeared via randomness.
  • Khameneverhere → grudge goes large. Adds a reachable large tier (missile 5, large 2, medium 2, small 2); his vengeance hits big and falls back to medium/small so he's never disarmed.
  • Easy → light non-lethal noise. DIFFICULTY_RANDOM_PCT.easy 0.3 → 0.12, and the random-swap candidate pool is now difficulty-aware — on easy it excludes medium/large warheads, so noise can no longer manufacture the chaotic big strikes that made easy harsher than normal (12.4% vs 3.8% large-warhead launches in the data). Easy still varies game-to-game; it just stops being lethal-by-accident.

Verified

  • npm run typecheck clean; npm run test:run → 58 files / 431 tests green; npm run build clean.
  • Termination hard gate holds: ai-duel 80/80 finish (unfinished=0), integration termination green.
  • Reviewer hand-traced buildToward AP arithmetic to confirm large warheads are actually built at realistic mid-game AP (not stranded behind cheaper tiers), and confirmed a previously-vacuous Netanyahoo test now genuinely discriminates the new plan.
  • 80-seed duel spread: mileigh-hem 22, netanyahoo 18 (up from ~5), burnem 16, chump 12, carnage 11, khameneverhere 1 — no leader dominates (≤40/80 soft cap); survivor 54 / pyrrhic 26 / apocalypse 0.

Known, out of scope

Khameneverhere flatlines at 1/80 both before and after this slice (git-stash verified) — pre-existing, from his locked no-diplomacy/zero-defence identity, not caused here. Flagged for a future balance slice.

Spec: docs/superpowers/specs/2026-07-26-fun-while-dying-slice1-characters-difficulty-design.md · Plan: docs/superpowers/plans/2026-07-26-fun-while-dying-slice1-characters-difficulty.md

Slice 3 (score-how-you-died) is the remaining piece of the 3-slice effort.

🤖 Generated with Claude Code

emp3thy and others added 3 commits July 26, 2026 13:07
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-lethal noise

Netanyahoo's large-warhead build entry sat last in his plan (after small/medium)
so buildToward never reached it before AP ran out - large warheads never
appeared as strategy. Front-load large (missile 4 -> large 3 -> medium 2, no
small) so his big-but-rare doctrine is actually reachable.

Khameneverhere gets the same treatment: large front-loaded among warheads
(missile 5 -> large 2 -> medium 2 -> small 2) so his grudge strikes land large
when AP allows, falling back to medium/small so he's never disarmed.

Easy difficulty's randomization was both too frequent (30%) and could swap in
build-warhead medium/large, manufacturing the exact big/concentrated strikes
that made easy harsher than normal (12.4% large launches vs 3.8% on normal).
Lower the rate to 12% and make the candidate pool difficulty-aware:
randomizationCandidates(diff) excludes medium/large warheads on easy while
normal keeps the full 8-item pool.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Claude BugBot Analysis

No bugs found in the changes. The diff adds planning/spec docs and rebalances two AI build plans plus difficulty-aware randomization candidates in src/engine/ai/index.ts; the applyRandomization signature change is correctly wired at its call site, and the new build plans are consistent with buildToward's per-yield target semantics.

No bugs were detected in this PR.

@emp3thy
emp3thy merged commit 69ea238 into main Jul 26, 2026
1 check passed
@emp3thy
emp3thy deleted the feat/character-personalities branch July 26, 2026 12:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant