Shared graph nodes were incorrectly interpolated, only the first object with a shared graph node was interpolated properly.
Thanks to @Cooliokid956 for noticing that most of node types were **never** interpolated.
- Use a double hashmap to store interpolated data for each graph node and object. All translations, rotations and scales are now interpolated correctly.
- Add `GraphNodeScaleXYZ` type to scale to all 3 dimensions; Add `GEO_SCALE_XYZ` command.
gMtxTbl was also reaching it's limit, so dynamic allocation was added.
I didn't add standard Lua require() because I've always been
afraid of it. I'm not sure we can guarantee which files it
will read (or not read).
Instead, here is a custom implementation. It should work more
or less the same and allow for more modular code.
For backwards compatibility reasons, all of the lua files in
the base mod folder will be loaded as in the past. Aka one at
a time and alphabetically.
However, now coop will look for Lua files in subdirectories
and will load them in when another Lua file calls require().
The file search order is more reasonable than normal Lua
require(). It will first look for files relative to the
currently running script. If there is no matching relative
file, it will pick from any Lua file that is in any of the
mod's subdirectories.
---------
Co-authored-by: MysterD <myster@d>
* set_gfx_command part 2
* part 3
* get gfx/vtx from name; copy gfx/vtx
* gfx/vtx dynamic allocation lua
* gfx/vtx_new: don't take level/model/vanilla names
* Clean up gbi constants
* update example
* Isaac review; add gfx_get_next_command and vtx_get_next_vertex
* make all commands length 1; missing NULL checks
to address the grand star late join model bug that can happen with mods like omm.
the bug happened when players have different dynos packs, and during a late join, the model ids are relied on to be the same.
dynos packs can offset the available model ids, therefore desyncing the model used on late join.
Bug: DynOS models with animations cannot swap animations if they are
loaded via lua (smlua_model_util_get_id and
obj_set_model_extended).
Fix: DynOS_Actor_GetActorGfx takes a graph node instead of a georef,
and checks for DynosValidActors graph nodes if georef is NULL.
Bug: The game can crash when calling obj_set_model_extended inside a
HOOK_ON_OBJECT_RENDER hook.
Fix: The crash happens in smlua_model_util_load_with_pool_and_cache_id
due to pool being NULL. If the game can't allocate an
AllocOnlyPool object, use DynOS to generate the graph node.
Bug: warp_to_level and similar functions don't trigger HOOK_ON_WARP.
Fix: Call HOOK_ON_WARP hooks in DynOS_Warp_UpdateWarp and
DynOS_Warp_UpdateExit after level and mario initialization.
Bug: The game sometimes calls HOOK_ON_OBJECT_RENDER hooks for
unintended objects.
Fix: Initialize hookRender field to 0 when creating an object.
Bug: Actions can't apply gfx offsets to characters that have an anim
offset (Waluigi, Wario)
Fix: Add m->curAnimOffset to gfx.pos[1] instead of setting it to
m->pos[1] + m->curAnimOffset, except during the jumbo star
cutscene.