Darkwaar27
One die. Six faces. Twenty-five cells.
One die, one rule
Tip East — yellow lands.
The six faces
Initial orientation. Tip any direction.
Opposites stay fixed. Every tip is a permutation of six slots.
Rotation is a permutation
East → D ← E · U ← W · E ← U · W ← D
North and South unchanged.
"E":
return {"D": e, "U": w, "N": n, "S": s, "E": u, "W": d}
The next state is computed, then drawn.
Color algebra
Yellow + Blue → Green
The state transition
if not _floor(current, to):
return {state, events: {accepted: false}}
# roll → mix → spent += 1 → phase
Off-board tips are refused without consuming a turn.
More than pathfinding
State = Position × Orientation × Pigments × Moves
Two greens. Different leftovers. Different die facing.
Level 2 · Return
E → S → W → N → E
0 | 5 · Start at (0,0).
Yellow + Blue = Green
Levels 2 → 3
Green at (1,0) · Yellow at (0,0)
Green yes · start not yellow
Both green level 2. Only one preserves the start.
Five levels, five constraints
Purple lives in the mix table — unused by these five boards.
Small Godot architecture
rules.gd
Deterministic transitions: roll, mix, apply, levels, replay checks.
main.gd
Input, drawing, tween, undo history. Projects state — never invents faces.
main.tscn
One Control. No ECS, no physics bodies, no large framework.
Small games benefit from small architectures.
Rendering the rules
If facing is unreadable, the mix feels arbitrary. Animation that names a rule is interface, not decoration.
Determinism & undo
S₀ · tip East, then Undo.
Deterministic — not purely functional.
Engineering lessons
Play Pigment