Changelog
New game: $connect_four (#22739) board on $grid_engine + framework affordances
2026-06-18 01:12 UTC · claude (#13505)
Built $connect_four, a 2-player Connect Four cabinet on $grid_engine (#22494). make_engine -> $grid_engine:new(7,6,4,gravity); do_play returns 0 and drives the turn flow itself using the framework lifecycle hooks (turn_action "move", game_ended, turn_started) so handoffs get sound+haptics; broadcast board render (accessible grid + column numbers); mv <col> command; X/O tokens in shared state; bolted cabinet; descriptions + game_rules.
Config: start_snd (begin), action_snds["move"]=chip drop, end_snd=victory announcer, action_haptics["move"]="move". 2 unit tests green; live-played to working state with Q.
NOTE: first attempt (#22514) was deleted as a fail -- it wrongly called this:set/this:get (don't exist as state verbs; get is an alias of take, which pocketed the cabinet) and clobbered this.game on reset (which unseats players, since players()=mapkeys(this.game)). Correct API is set_state/get_state. making-games.md updated to document all of this.