--- name: tinyworld-25d-template-sprites description: Use when changing the playable 2.5D template sprite, cloning it into character classes, or wiring idle/walk/attack sprite-sheet playback. --- # TinyWorld 25D Template Sprites This is not the crowd system. Do not route playable template work through `vendor/tiny-crowd-layer.js`, `crowd/`, or `engine/world/11-vehicle-crowd.js`. Runtime: - `engine/world/47-worlds-room.js` owns the playable in-world/player-room avatar from these template sheets. - The character is runtime-only and must not write into `world[x][z]`, `cellMeshes`, export JSON, saved worlds, or crowd people. - Movement uses WASD/arrows. Jump uses Space. Attack uses `F`. Class cycling uses `[` / `]`. - The world-room avatar class API is exposed via `window.__tinyworldWorlds`: `setAvatarClass(name)`, `cycleAvatarClass(delta)`, `avatarClass()`, and `avatarClasses()`. - Warrior/orc side-view avatars in `engine/world/47-worlds-room.js` are also 64px grid sheets: columns are animation frames and rows are directions. Crop to a single row with `repeat.y = 1 / rows`; do not sample a full 256px-tall column, or four stacked bodies render in-world. - The Worlds avatar picker/runtime should use the side-view `Without_shadow` sheets for swordsman/orc avatars unless the user explicitly asks for baked ground shadows. - Side-view swordsman/orc row order is `front/down`, `left`, `right`, `back/up`. Movement should update the sampled row from the camera-relative sector; do not fake left/right by flipping a single side row when the sheet has real side rows. Assets: - Source template sheets live under `models/people/25D/`. - Idle/walk/run sheets are 64px grid sheets. - Attack sheets are 96px grid sheets. - Rows are ordered: `down`, `downRight`, `right`, `upRight`, `up`, `upLeft`, `left`, `downLeft`. - Generated class sheets live under `models/people/25D/classes//` as `idle.png`, `walk.png`, and `attack.png`. - Regenerate class sheets with `python3 tools/generate-playable-25d-classes.py`. When adding a class: 1. Add the class name to `CLASSES` and an overlay function in `tools/generate-playable-25d-classes.py`. 2. Add the class name to `AVATAR_CLASSES` in `engine/world/47-worlds-room.js`. 3. Regenerate sheets, then run `npm test` and `npm run build`.