From 048f4f1fd4d5e96e072d55aef0a003214beb1086 Mon Sep 17 00:00:00 2001 From: David Joslin Date: Fri, 27 Oct 2023 23:45:48 -0700 Subject: [PATCH] Fix animation comparisons after character anim commit --- src/game/characters.c | 8 +++++--- src/game/mario.c | 6 ++++++ src/game/mario_actions_moving.c | 10 +++++----- src/game/mario_misc.c | 3 +-- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/game/characters.c b/src/game/characters.c index b78b550e..2c5acb63 100644 --- a/src/game/characters.c +++ b/src/game/characters.c @@ -1566,8 +1566,9 @@ void play_character_sound_if_no_flag(struct MarioState* m, enum CharacterSound c f32 get_character_anim_offset(struct MarioState* m) { if (m == NULL || m->marioObj == NULL) { return 0; } struct Object* marioObj = m->marioObj; + if (!marioObj) { return 0; } struct Character* c = get_character(m); - if (!c->animOffsetEnabled) { return 0; } + if (!c || !c->animOffsetEnabled) { return 0; } s32 animID = marioObj->header.gfx.animInfo.animID; if (animID < 0 || animID >= ANIM_TYPE_MAX) { return 0; } @@ -1590,8 +1591,9 @@ f32 get_character_anim_offset(struct MarioState* m) { void update_character_anim_offset(struct MarioState* m) { if (m == NULL || m->marioObj == NULL) { return; } struct Object* marioObj = m->marioObj; + if (!marioObj) { return; } struct Character* c = get_character(m); - if (!c->animOffsetEnabled) { return; } + if (!c || !c->animOffsetEnabled) { return; } f32 targetOffset = get_character_anim_offset(m); @@ -1611,6 +1613,6 @@ s32 get_character_anim(struct MarioState* m, enum CharacterAnimID characterAnim) if (m == NULL || m->marioObj == NULL) { return 0; } struct Character* character = ((m == NULL || m->character == NULL) ? &gCharacters[CT_MARIO] : m->character); - if (characterAnim < 0 || characterAnim >= CHAR_ANIM_MAX) { return 0; } + if (!character || characterAnim < 0 || characterAnim >= CHAR_ANIM_MAX) { return 0; } return character->anims[characterAnim]; } \ No newline at end of file diff --git a/src/game/mario.c b/src/game/mario.c index d7485c65..ab1e102e 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -120,9 +120,12 @@ s16 set_mario_animation(struct MarioState *m, s32 targetAnimID) { * Sets the character specific animation without any acceleration, running at its default rate. */ s16 set_character_animation(struct MarioState *m, s32 targetAnimID) { + if (!m) { return 0; } struct Object *o = m->marioObj; + if (!o || !m->animation) { return 0; } struct Animation *targetAnim = m->animation->targetAnim; s32 charAnimID = get_character_anim(m, targetAnimID); + if (!targetAnim) { return 0; } if (load_patchable_table(m->animation, charAnimID)) { targetAnim->values = (void *) VIRTUAL_TO_PHYSICAL((u8 *) targetAnim + (uintptr_t) targetAnim->values); @@ -193,8 +196,11 @@ s16 set_mario_anim_with_accel(struct MarioState *m, s32 targetAnimID, s32 accel) * slowed down via acceleration. */ s16 set_character_anim_with_accel(struct MarioState *m, s32 targetAnimID, s32 accel) { + if (!m) { return 0; } struct Object *o = m->marioObj; + if (!o || !m->animation) { return 0; } struct Animation *targetAnim = m->animation->targetAnim; + if (!targetAnim) { return 0; } s32 charAnimID = get_character_anim(m, targetAnimID); if (load_patchable_table(m->animation, charAnimID)) { diff --git a/src/game/mario_actions_moving.c b/src/game/mario_actions_moving.c index ef237e4d..52343e7a 100644 --- a/src/game/mario_actions_moving.c +++ b/src/game/mario_actions_moving.c @@ -77,14 +77,14 @@ void play_step_sound(struct MarioState *m, s16 frame1, s16 frame2) { if (!m) { return; } if (is_anim_past_frame(m, frame1) || is_anim_past_frame(m, frame2)) { if (m->flags & MARIO_METAL_CAP) { - if (m->marioObj->header.gfx.animInfo.animID == CHAR_ANIM_TIPTOE) { + if (m->marioObj->header.gfx.animInfo.animID == get_character_anim(m, CHAR_ANIM_TIPTOE)) { play_sound_and_spawn_particles(m, SOUND_ACTION_METAL_STEP_TIPTOE, 0); } else { play_sound_and_spawn_particles(m, SOUND_ACTION_METAL_STEP, 0); } } else if (m->quicksandDepth > 50.0f) { play_sound(SOUND_ACTION_QUICKSAND_STEP, m->marioObj->header.gfx.cameraToObject); - } else if (m->marioObj->header.gfx.animInfo.animID == CHAR_ANIM_TIPTOE) { + } else if (m->marioObj->header.gfx.animInfo.animID == get_character_anim(m, CHAR_ANIM_TIPTOE)) { play_sound_and_spawn_particles(m, SOUND_ACTION_TERRAIN_STEP_TIPTOE, 0); } else { play_sound_and_spawn_particles(m, SOUND_ACTION_TERRAIN_STEP, 0); @@ -755,9 +755,9 @@ void tilt_body_walking(struct MarioState *m, s16 startYaw) { if (!m) { return; } struct MarioBodyState *val0C = m->marioBodyState; UNUSED struct Object *marioObj = m->marioObj; - //s16 animID = m->marioObj->header.gfx.animInfo.animID; - - if (m->action == ACT_WALKING) {//animID == CHAR_ANIM_WALKING || animID == CHAR_ANIM_RUNNING) { + s16 animID = m->marioObj->header.gfx.animInfo.animID; + + if (animID == get_character_anim(m, CHAR_ANIM_WALKING) || animID == get_character_anim(m, CHAR_ANIM_RUNNING)) { s16 dYaw = m->faceAngle[1] - startYaw; //! (Speed Crash) These casts can cause a crash if (dYaw * forwardVel / 12) or //! (forwardVel * 170) exceed or equal 2^31. diff --git a/src/game/mario_misc.c b/src/game/mario_misc.c index ea76cd4e..f3e5fcf9 100644 --- a/src/game/mario_misc.c +++ b/src/game/mario_misc.c @@ -430,8 +430,7 @@ Gfx* geo_mario_tilt_torso(s32 callContext, struct GraphNode* node, Mat4* mtx) { if (callContext == GEO_CONTEXT_RENDER) { struct GraphNodeRotation* rotNode = (struct GraphNodeRotation*) node->next; - if (action != ACT_BUTT_SLIDE && action != ACT_HOLD_BUTT_SLIDE && action != ACT_WALKING - && action != ACT_RIDING_SHELL_GROUND) { + if (action != ACT_BUTT_SLIDE && action != ACT_HOLD_BUTT_SLIDE && action != ACT_WALKING && action != ACT_RIDING_SHELL_GROUND) { vec3s_copy(bodyState->torsoAngle, gVec3sZero); } rotNode->rotation[0] = bodyState->torsoAngle[1] * character->torsoRotMult;