58 s32 overhead, s32 startIdx) {
66 if (handle->
ttl < 0) {
74 handle->
addr = bufferMem;
79 nodeVtxList = &node->
fcData.vtxList[startIdx];
82 i = ((s32)buffer & 0xFFFFFF);
86 for (i = 0; i < vtxCount; i++) {
87 *bufferMem = *nodeVtxList;
88 bufferMem->v.ob[0] = buffer->
x;
89 bufferMem->v.ob[1] = buffer->
y;
90 bufferMem->v.ob[2] = buffer->
z;
178 if (node->
fcData.modelID == modelId) {
239 (*gCurrentAnimMeshListPtr)[i] = NULL;
308 (*gCurrentAnimMeshListPtr)[i] = NULL;
330 (*gCurrentAnimMeshListPtr)[i] = animator =
heap_malloc(
sizeof(*animator));
341 if (animPos == NULL) {
378 (*gCurrentAnimMeshListPtr)[i] = animator =
heap_malloc(
sizeof(*animator));
392 animPos = (s16*)(((s32)animPos & 0xFFFFFF) + (s32)animator->
animationBuffer);
434 ret->vertexStartOffset = -1;
440 nextUniqueID =
animator->nextUniqueID;
441 nextUniqueID = nextUniqueID + 1;
446 ret->uniqueIndex = nextUniqueID;
464 ret->uniqueIndex = nextUniqueID;
478 animator->nextUniqueID = nextUniqueID;
506 if (
animator->nextUpdateTime <= 0.0f) {
570 if (
animator->nextUpdateTime <= 0.0f) {
657 x = (
f32)*args++ * 180.0 / 32767.0;
658 y = (
f32)*args++ * 180.0 / 32767.0;
659 z = (
f32)*args++ * 180.0 / 32767.0;
670 x = (
f32)*args++ * 180.0 / 32767.0;
671 y = (
f32)*args++ * 180.0 / 32767.0;
672 z = (
f32)*args++ * 180.0 / 32767.0;
695 x = (
f32)*args++ * 180.0 / 32767.0;
696 y = (
f32)*args++ * 180.0 / 32767.0;
697 z = (
f32)*args++ * 180.0 / 32767.0;
938 if (
node->vertexStartOffset < 0) {
946 if ((
node->displayList[0].words.w0 >> 0x18) !=
G_ENDDL) {
1035 for (i = 0; i < count; i++) {
1140 bpPtr->basePos.x = 0.0f;
1141 bpPtr->basePos.y = 0.0f;
1142 bpPtr->basePos.z = 0.0f;
1149 if (
node->modelID != 0) {
1208 if ((*tree)->vertexStartOffset == 0) {
1234 bpPtr->basePos.x = 0.0f;
1235 bpPtr->basePos.y = 0.0f;
1236 bpPtr->basePos.z = 0.0f;
1242 newNode->vertexStartOffset =
node->vertexStartOffset;
1329 x = (
f32)*args++ * 180.0 / 32767.0;
1330 y = (
f32)*args++ * 180.0 / 32767.0;
1331 z = (
f32)*args++ * 180.0 / 32767.0;
1349 x = (
f32)*args++ * 180.0 / 32767.0;
1350 y = (
f32)*args++ * 180.0 / 32767.0;
1351 z = (
f32)*args++ * 180.0 / 32767.0;
1389 x = (
f32)*args++ * 180.0 / 32767.0;
1390 y = (
f32)*args++ * 180.0 / 32767.0;
1391 z = (
f32)*args++ * 180.0 / 32767.0;
BSS s32 PopupMenu_SelectedIndex
BSS Matrix4f gAnimRotScaleMtx
void play_model_animation(s32 index, s16 *animPos)
BSS AnimatedMeshVertexCopyList D_801536C0
void clear_animator_list(void)
BSS AnimatedMeshList D_801539C0
void render_animated_model_with_vertices(s32 animatorID, Mtx *rootTransform, s32 segment, void *baseAddr)
void set_anim_model_fog_color(s32 r, s32 g, s32 b, s32 a)
void set_animator_tree_to_node_map(ModelAnimator *animator, s32 *nodeIDs, s32 count)
Gfx Gfx_RM3_SURFACE_OPA[]
void reset_animator_list(void)
BSS AnimatedMeshList D_80153A00
AnimatorNode * add_anim_node(ModelAnimator *animator, s32 parentNodeID, AnimatorNodeBlueprint *nodeBP)
void get_anim_model_fog_distance(s32 *start, s32 *end)
ModelAnimator * set_animator_render_callback(s32 animModelID, void *callbackArg, void(*callbackFunc)(void *))
void disable_anim_model_fog(void)
void render_animated_model(s32 animatorID, Mtx *rootTransform)
void enable_anim_model_fog(void)
BSS s32 gAnimModelFogStart
void set_animator_flags(s32 index, s32 bits)
void appendGfx_animator_node(ModelAnimator *, AnimatorNode *, Matrix4f)
AnimatorNode * get_animator_node_with_id(ModelAnimator *animator, s32 id)
void animator_node_update_model_transform(ModelAnimator *animator, f32(*flipMtx)[4], AnimatorNode *node, Mtx *rootTransform)
void reload_mesh_animator_tree(ModelAnimator *animator)
void delete_model_animator_nodes(ModelAnimator *animator)
void get_anim_model_fog_color(s32 *r, s32 *g, s32 *b, s32 *a)
void delete_model_animator(ModelAnimator *animator)
void clear_animator_flags(s32 index, s32 bits)
void play_model_animation_starting_from(s32 index, s16 *animPos, s32 framesToSkip)
void load_mesh_animator_node(StaticAnimatorNode *node, ModelAnimator *animator, s32 parentNodeID, s32 *treeIndexToNodeIDs)
void delete_model_animator_node(AnimatorNode *node)
ModelAnimator * get_animator_by_index(s32 animModelID)
BSS Matrix4f gAnimTranslateMtx
AnimatorNode * get_animator_child_for_model(AnimatorNode *node, s32 modelId)
void animator_make_identity(Matrix4f mtx)
Vtx * animator_copy_vertices_to_buffer(ModelAnimator *animator, AnimatorNode *node, Vec3s *buffer, s32 vtxCount, s32 overhead, s32 startIdx)
Gfx Gfx_RM1_INTERSECTING_OPA[]
void animator_make_mirrorX(Matrix4f mtx)
Gfx Gfx_RM1_INTERSECTING_XLU[]
DisplayListBufferHandle AnimatedMeshVertexCopyList[0x60]
void load_mesh_animator_tree(s32 index, StaticAnimatorNode **tree)
s32 create_model_animator(s16 *animPos)
s32 is_anim_model_fog_enabled(void)
void free_animator_nodes(ModelAnimator *animator)
void update_model_animator(s32 animatorID)
void appendGfx_animator(ModelAnimator *animator)
Gfx Gfx_RM1_SURFACE_XLU[]
void load_model_animator_tree(s32 index, StaticAnimatorNode **tree)
void animator_make_mirrorY(Matrix4f mtx)
void load_model_animator_node(StaticAnimatorNode *node, ModelAnimator *animator, s32 parentNodeID, s32 *treeIndexToNodeIDs)
s32 step_mesh_animator(ModelAnimator *animator)
s32 step_model_animator(ModelAnimator *animator)
void update_model_animator_with_transform(s32 animatorID, Mtx *mtx)
Gfx Gfx_RM3_INTERSECTING_OPA[]
AnimatorNode * get_animator_child_with_id_helper(AnimatorNode *node, s32 id)
void reload_mesh_animator_node(StaticAnimatorNode *node, ModelAnimator *animator, s32 parentNodeID, s32 *treeIndexToNodeIDs)
s32 create_mesh_animator(s16 *animPos, s16 *animBuffer)
BSS AnimatedMeshVertexCopyList D_801533C0
void free_animator_nodes_helper(AnimatorNode *node)
void animator_make_mirrorZ(Matrix4f mtx)
Gfx Gfx_RM3_INTERSECTING_XLU[]
Gfx Gfx_RM1_SURFACE_OPA[]
AnimatorNode * get_animator_node_for_tree_index(ModelAnimator *animator, s32 arg1)
BSS StaticAnimatorNode ** gAnimTreeRoot
void set_anim_model_fog_dist(s32 start, s32 end)
void animator_update_model_transforms(ModelAnimator *animator, Mtx *rootTransform)
AnimScript gAnimScriptDefault
BSS Matrix4f gAnimScaleMtx
AnimatorNode * get_animator_child_with_id(ModelAnimator *animator, s32 id)
Gfx Gfx_RM3_SURFACE_XLU[]
BSS AnimatedMeshList * gCurrentAnimMeshListPtr
BSS s32 gAnimModelFogEnabled
union AnimatorNode::@29 fcData
struct AnimatorNode * children[32]
ModelAnimator * AnimatedMeshList[16]
#define general_heap_malloc
#define queue_render_task
#define ASSERT(condition)
@ MODEL_FLAG_MATRIX_DIRTY
@ MODEL_ANIMATOR_FLAG_CAM_2
@ MODEL_ANIMATOR_FLAG_HAS_MODEL
@ MODEL_ANIMATOR_FLAG_CULL_BACK
@ MODEL_ANIMATOR_FLAG_NO_FLIP
@ MODEL_ANIMATOR_FLAG_MESH
@ MODEL_ANIMATOR_FLAG_CAM_1
@ MODEL_ANIMATOR_FLAG_FREEZE_ANIMATION
@ MODEL_ANIMATOR_FLAG_FLIP_Y
@ MODEL_ANIMATOR_FLAG_FLIP_X
@ MODEL_ANIMATOR_FLAG_CAM_0
@ MODEL_ANIMATOR_FLAG_HIDDEN
@ MODEL_ANIMATOR_FLAG_ENABLED
@ MODEL_ANIMATOR_FLAG_FLIP_Z
@ MODEL_ANIMATOR_FLAG_UPDATE_PENDING
@ RENDER_MODE_INTERSECTING_XLU
@ RENDER_MODE_INTERSECTING_OPA
@ RENDER_MODE_SURFACE_OPA
@ RENDER_MODE_SURFACE_XLU_LAYER1
s32 get_model_list_index_from_tree_index(s32 treeIndex)
struct Model * get_model_from_list_index(s32 listIndex)
void copy_matrix(Matrix4f src, Matrix4f dest)
s32 general_heap_free(void *data)
void * heap_malloc(s32 size)
#define PM_CC2_MULTIPLY_SHADE
#define VIRTUAL_TO_PHYSICAL(addr)
void(* fpRenderCallback)(void *)
AnimatorNode * nodeCache[0x7A]
GameStatus * gGameStatusPtr
DisplayContext * gDisplayContext