Fixed three issues that caused tunneling: 1. **Sub-stepping**: Movement + collision is now split into 4 sub-steps per frame (both intro and main game), so the player moves in smaller increments and can't skip through objects in a single frame. 2. **Iterative collision resolution**: `checkShapeCollisions` now loops up to 3 times per sub-step — if the player is still overlapping any shape after being pushed out, it resolves again. This handles edge cases where bouncing off one shape pushes into another. 3. **Velocity-aware bouncing**: Velocity is only reversed if the player is actually moving *into* the shape, preventing double-bounces that could shoot the player through. Small epsilon values on push-out ensure clean separation. **Next Ideas:** 1. **Visual bounce feedback** - Add a brief squash/stretch animation or screen shake when the person collides with objects 2. **Collision particles** - Spawn small sketchy particle bursts on impact to make bounces feel more satisfying **Ready to level up your game? Pick one and let's build it!**