Office gets a working TV
The wall-mounted TV sprite now plays a real animated GIF channel whenever a sprite is on the couch. 24 channel GIFs ship under public/sprites/tv/ plus a static.gif interstitial. Each channel airs for 7s, then 1s of static, then the next channel.
Channel rotation uses bag-shuffle (Spotify-style): every channel airs exactly once per deck before any repeats. When the deck empties it gets re-shuffled with Fisher-Yates, and the first item of the fresh deck is swapped if it would back-to-back the channel that was just on.
Ping-pong polish
- Two-player only — both spots required free or the activity is skipped.
- Both sprites depart together as a group and share a single return-time so the rally doesn't end solo.
- Right-side player position tweaked so they're no longer drawn under the table.
Sprite facing fix
PixelSprite.getRow had 'left' and 'right' mapped to the wrong rows. Verified against the actual sprite sheet (row 2 is left-facing art, row 3 is right-facing art) and swapped the mapping. Sprites now face the direction they're walking.
Notes
- No API or pipeline behavior changes — pure office UI.
- No new dependencies.
See CHANGELOG.md for full history.