Behavior module system
- All goose behaviors extracted from
goose.pyinto individual modules inbehaviors/— each with its own state, stage enum, constants, and logic - Core loop is now clean dispatch; behaviors are self-contained and independently readable
- Override slot pattern: behaviors influence core systems by writing to neutral-default attributes that the core reads blindly — no behavior identity checks anywhere in core code
- Foundation for new behaviors going forward
New behavior: Carry Prop
- Goose walks offscreen and returns with a knife in his beak
- Wanders for a while carrying it, then either places it carefully on the ground or transitions to the next task and drops it mid-stride 0.7s into the new walk cycle
- If a knife is already on screen, picks it up instead of fetching a new one
- Smooth swap: heading to pick one up while still carrying another — drops at feet right before grabbing the next
- Spinning drop when moving, straight drop when stopped
Prop physics
- Gravity, bounce, friction, angular velocity — props can fall, tumble, and settle
launch_prop_fallingandrandom_spinare shared helpers — all future prop drops use the same system automatically
Prop design mode
- Dev debug tool for iterating new prop visuals before implementing their behavior
- Variant panel: multiple shape/size configurations rendered side by side, active variant highlighted
- Compass ring: 8 reference geese facing every cardinal and diagonal direction — checks how the prop reads at any angle
- Shadow previews: prop rendered at beak height and at ground level to tune shadow scale and opacity at both extremes
- Sine wave Z test: prop floating continuously through its full Z range so shadow behavior can be checked in motion
- Flip button: mirrors the entire layout to the opposite side of the screen to catch left/right asymmetry
- Activated via
DEV_ForceSpawnPropin config.ini
Visual
- Fake sleep eye adjusted to three-quarters open
Task weights
- Carry Prop: 2/18 → 3/18
- Collect Notepad: 3/18 → 2/18
Linux build is untested.