The 魂 max crowd was two flattened PNGs per variant, so every figure sat at one fixed position, the turtle/shiba groups lost their depth order relative to the rest of the crowd, and nothing moved.
This makes the crowd data-driven:
Graphics/background/fevera_N/ — one texture per crowd group (3 crowds).
Scripts/background/bg_data/fever_anim/f_N.lua — per-frame display list (position / scale / rotation / alpha per group) for the rise, the loop and the fall.
Scripts/background/bg_objects/fever_anim.lua — replays it at 60 fps; start() plays the rise into the loop, stop() plays the fall (re-triggerable, same contract as the old Fever objects).
fever.lua routes Fever.create to it when the data exists; background.lua picks from the 3 crowds. The old flat overlays stay as a fallback.
Result: each group bobs and squashes on its own phase, layering matches the original, and the base of the crowd lands on the band.
The 魂 max crowd was two flattened PNGs per variant, so every figure sat at one fixed position, the turtle/shiba groups lost their depth order relative to the rest of the crowd, and nothing moved.
This makes the crowd data-driven:
- `Graphics/background/fevera_N/` — one texture per crowd group (3 crowds).
- `Scripts/background/bg_data/fever_anim/f_N.lua` — per-frame display list (position / scale / rotation / alpha per group) for the rise, the loop and the fall.
- `Scripts/background/bg_objects/fever_anim.lua` — replays it at 60 fps; `start()` plays the rise into the loop, `stop()` plays the fall (re-triggerable, same contract as the old Fever objects).
- `fever.lua` routes `Fever.create` to it when the data exists; `background.lua` picks from the 3 crowds. The old flat overlays stay as a fallback.
Result: each group bobs and squashes on its own phase, layering matches the original, and the base of the crowd lands on the band.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
The 魂 max crowd was two flattened PNGs, so every figure sat at one fixed
position, the turtle/shiba groups lost their depth order, and nothing moved.
The crowd is now data-driven: one texture per crowd group
(background/fevera_N) plus a per-frame display list
(bg_data/fever_anim/f_N.lua) covering the rise, the loop and the fall, replayed
by bg_objects/fever_anim.lua at 60 fps. Every group bobs and squashes on its
own phase and layers exactly as authored; the base of the crowd lands on the
band. Three crowds are shipped; the old flat overlays stay as a fallback for
skins without the data.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The original's random pool only holds fever_effect1 and fever_effect2;
fever_effect0 is a single figure parked off-screen, so picking it showed an
empty crowd at 魂 max. Drop it and pick from the two real crowds.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The original advances the movie at 120 Hz, so the bob ran at half speed, and it
paints the crowd after the bottom band, not under it.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The original re-times this movie to the song (the same frame sync the dancers
use): the 40-frame bob is one beat, so 60 fps only at 90 BPM.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The 魂 max crowd was two flattened PNGs per variant, so every figure sat at one fixed position, the turtle/shiba groups lost their depth order relative to the rest of the crowd, and nothing moved.
This makes the crowd data-driven:
Graphics/background/fevera_N/— one texture per crowd group (3 crowds).Scripts/background/bg_data/fever_anim/f_N.lua— per-frame display list (position / scale / rotation / alpha per group) for the rise, the loop and the fall.Scripts/background/bg_objects/fever_anim.lua— replays it at 60 fps;start()plays the rise into the loop,stop()plays the fall (re-triggerable, same contract as the old Fever objects).fever.luaroutesFever.createto it when the data exists;background.luapicks from the 3 crowds. The old flat overlays stay as a fallback.Result: each group bobs and squashes on its own phase, layering matches the original, and the base of the crowd lands on the band.
🤖 Generated with Claude Code