Designer & builderMay 2026Game devGDScriptPrototype

Happy Healthy Games

A Godot party game, built for determinism

A friend and I built this Godot 4 party game in one night: a signal-driven architecture with a headless test harness that runs a thousand shuffle iterations and a hundred random matches to check the rules hold.

1,000shuffle iterations
100random matches

Project brief

Prototype

Problem

Game rules are difficult to trust when state changes are spread across rendering code.

Outcome

A Godot 4 party game built with a friend in one night, on a signal-driven architecture with a headless test harness that runs a thousand shuffle iterations and a hundred random matches to check the rules hold.

Evidence

  • That split is what makes it testable without a renderer: a shuffle-stability invariant over a thousand iterations, and a hundred random matches run headless.
  • Headless harness fuzzes matches to verify single-winner termination.

Key decisions

  • Mutation zone: Only GameManager changes game state; subscribers react to typed signals.
  • Input zone: InputController gates player intent against the current FSM state.
  • Test zone: Headless harness fuzzes matches to verify single-winner termination.
  • Presentation zone: HUD, audio, FX, and visuals never mutate model state directly.

The build

My friend and I built a Godot 4 party game where one object mutates state through an explicit finite-state machine; everything on screen is a pure subscriber to typed signals. That split is what makes it testable without a renderer: a shuffle-stability invariant over a thousand iterations, and a hundred random matches run headless. A one-command installer bootstraps the toolchain. State machines here share the explicit-transition discipline Tightrope applies to API contracts. Scripts judge; agents propose is the same trust split applied to game rules instead of APIs.

Why it's built this way

Game rules are difficult to trust when state changes are spread across rendering code.

Architecture

Happy Healthy Games is built for determinism. One object mutates state through an explicit finite-state machine; everything on screen subscribes to typed signals.

Signal hub architecture
GameManagersole mutator + FSMgun · turns · players
InputControllerstate-gated dispatch
HUDpure subscriber
Audio + FXpure subscribers
Visualspure subscribers
GameManager is the sole state mutator. HUD, audio, FX, and visuals are pure subscribers wired once at startup.
Match state machine
1Load roundshuffle shells
2Await targetturn started
3Confirmgate
4Resolve shotdamage or blank
5Check endgate
A match cycles through load, target selection, confirmation, and resolution until one player remains or the gun reloads.

Zones

Mutation zone

Only GameManager changes game state; subscribers react to typed signals.

Input zone

InputController gates player intent against the current FSM state.

Test zone

Headless harness fuzzes matches to verify single-winner termination.

Presentation zone

HUD, audio, FX, and visuals never mutate model state directly.

Skills applied

Game dev

Happy Healthy Games is built as an interactive game loop with explicit state and feedback.

GDScript

Game logic in Happy Healthy Games is written in GDScript on Godot.

Testing

Thousand-iteration shuffle stability and hundred random headless matches catch rule regressions.

State machines

Happy Healthy Games enumerates states and transitions so “what can happen next” stays testable.

Python

Where automation helps outside the renderer, Python supports harness and tooling edges.

Developer tools

Headless harnesses make party-game rules regression-testable without a play session.

Godot

Happy Healthy Games runs on the Godot engine: scenes, nodes, and export targets.

Related work

Related writing

Portfolio graph

Hover nodes · click empty canvas to zoom/pan

Maps how the work here connects. Open the Portfolio graph →

  • Professional
  • Personal
  • Skill
  • Writing