- animationUpdate now advances and resolves boundary crossings for
ANIMATION_FLAG_LOOP, ANIMATION_FLAG_PINGPONG, ANIMATION_FLAG_REVERSE, and
the STOP_BEGINNING/STOP_END flags, firing onLoop/onComplete appropriately;
guards against LOOP+PINGPONG being set together and moves the
duration-must-be-positive check into animationInit
- keyframeGetValue clamps to the last keyframe's value instead of dividing
by zero once time reaches it, and its keyframe walk drops a branch that's
unreachable after that clamp
- Adds test/animation/test_animation.c covering init, per-layer sampling,
and the full animationUpdate flag matrix
- keyframeGetValue now returns the last keyframe's value for times at or
beyond it, fixes a missing util/math.h include, and asserts keyframes are
sorted by time; adds test/animation/test_keyframe.c
- Adds mainmenu scene/UI and a battle HUD UI frame
- Adds save autosave-related fields and battle scene tweaks
- Adds headless test coverage for cutscenes, entities, and map areas
Replace the one-fighter-at-a-time turn model with an OPENING/PRE_ROUND/
PLAYER_SELECTION/AI_SELECTION/MOVES_EXECUTING/POST_ROUND/ENDED state
machine and a per-fighter action queue, so actions are decided before any
of them execute (needed for speed-ordered resolution) and so a cutscene
can pause the battle, wait for a specific state, and force a fighter's
action -- enabling automated, fully-scripted, and partially-scripted
battles. Adds CUTSCENE_PAUSE_BATTLE plus CUTSCENE_BATTLE_WAIT_STATE and
CUTSCENE_BATTLE_FORCE_ACTION cutscene items, and generic onStateChanged/
onActionDecided callbacks on battle_t. Re-enables the long-dormant
test/rpg suite and adds test/rpg/battle covering the state machine and
the new cutscene hooks end-to-end.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>