Extract the family-specific extra melee hit timing for Magma and Storm
into a small helper abstraction instead of keeping it hardcoded directly
inside MonsterAttack().
This keeps behavior unchanged:
- the normal melee hit still happens at animFrameNum - 1
- Magma monsters still perform their extra hit on frame 8
- Storm monsters still perform their extra hit on frame 12
- Snake attack sound timing remains unchanged
The goal is only to make the extra hit windows easier to reason about
without mixing those family-specific rules directly into the main melee
attack flow.
The previous implementation didn't behave quite like A-* is supposed to.
After trying to figure out what's causing it and giving up,
I've reimplemented it in a straightforward manner.
Now it seems to work a lot better.
Also increases maximum player path length to 100 steps.
We still only store the first 25 steps in the save file for vanilla
compatibility.
In C++, globals initialization order accross translation units is not
defined. Accessing a global via a function ensures that it is initialized.
This will be needed for #7638, which will statically initialize change
handlers after the Options object has been initialized.
1. Moves more assets-related stuff from `init` to `engine/assets`.
2. Removes `SDL_audiolib` dependency from `soundsample.h`.
3. Cleans up some unused/missing includes.
Looks like the KallistiOS Dreamcast SDK disables double support
by default: 495e77fd60/environ_dreamcast.sh (L16)
We don't really need doubles in this code.
The one place where we might have needed them is the SMK video
decoder, handled in a separate PR.