From fffad900282a6ee9137ff6ea8f9f3c9795d462fe Mon Sep 17 00:00:00 2001 From: MysterD Date: Sat, 19 Sep 2020 16:09:52 -0700 Subject: [PATCH] Prevented more NPC dialog soft locks --- src/game/behaviors/bobomb.inc.c | 10 +++++++--- src/game/behaviors/bowser.inc.c | 2 +- src/game/behaviors/camera_lakitu.inc.c | 11 +++++++++-- src/game/behaviors/dorrie.inc.c | 16 ++++++++++++---- src/game/behaviors/grand_star.inc.c | 2 +- src/game/behaviors/hoot.inc.c | 10 +++++++--- src/game/behaviors/koopa.inc.c | 2 +- src/game/behaviors/mips.inc.c | 8 ++++++-- src/game/behaviors/snowman.inc.c | 21 ++++++++++++++++----- src/game/behaviors/ukiki.inc.c | 10 +++++++--- src/game/behaviors/yoshi.inc.c | 4 ++-- src/game/camera.c | 2 +- src/game/mario_actions_cutscene.c | 23 ++++++++++++++--------- src/game/mario_actions_cutscene.h | 2 +- src/game/obj_behaviors.c | 6 +++--- src/game/obj_behaviors_2.c | 2 +- src/game/object_helpers.c | 16 ++++++---------- src/game/object_helpers.h | 4 ++-- 18 files changed, 97 insertions(+), 54 deletions(-) diff --git a/src/game/behaviors/bobomb.inc.c b/src/game/behaviors/bobomb.inc.c index 0226703b0..f519f2a89 100644 --- a/src/game/behaviors/bobomb.inc.c +++ b/src/game/behaviors/bobomb.inc.c @@ -364,7 +364,7 @@ void bobomb_buddy_cannon_dialog(s16 dialogFirstText, s16 dialogSecondText) { break; case BOBOMB_BUDDY_CANNON_STOP_TALKING: - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); o->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP; o->oBobombBuddyHasTalkedToMario = BOBOMB_BUDDY_HAS_TALKED; @@ -376,15 +376,19 @@ void bobomb_buddy_cannon_dialog(s16 dialogFirstText, s16 dialogSecondText) { } } +static u8 bobomb_buddy_act_talk_continue_dialog(void) { + return (o->oAction == BOBOMB_BUDDY_ACT_TALK); +} + void bobomb_buddy_act_talk(void) { - if (set_mario_npc_dialog(&gMarioStates[0], 1) == 2) { + if (set_mario_npc_dialog(&gMarioStates[0], 1, bobomb_buddy_act_talk_continue_dialog) == 2) { //o->activeFlags |= ACTIVE_FLAG_INITIATED_TIME_STOP; switch (o->oBobombBuddyRole) { case BOBOMB_BUDDY_ROLE_ADVICE: if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, o->oBehParams2ndByte) != BOBOMB_BUDDY_BP_STYPE_GENERIC) { - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); o->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP; o->oBobombBuddyHasTalkedToMario = BOBOMB_BUDDY_HAS_TALKED; diff --git a/src/game/behaviors/bowser.inc.c b/src/game/behaviors/bowser.inc.c index dd869c8c7..4a21f6835 100644 --- a/src/game/behaviors/bowser.inc.c +++ b/src/game/behaviors/bowser.inc.c @@ -946,7 +946,7 @@ s32 bowser_dead_not_bits_end(void) { bowser_dead_hide(); spawn_triangle_break_particles(20, 116, 1.0f, 0); bowser_spawn_grand_star_key(); - if (marioState->playerIndex) { set_mario_npc_dialog(marioState, 0); } + if (marioState->playerIndex) { set_mario_npc_dialog(marioState, 0, NULL); } ret = 1; } return ret; diff --git a/src/game/behaviors/camera_lakitu.inc.c b/src/game/behaviors/camera_lakitu.inc.c index cb9ca4fd7..adc278aaa 100644 --- a/src/game/behaviors/camera_lakitu.inc.c +++ b/src/game/behaviors/camera_lakitu.inc.c @@ -21,6 +21,10 @@ void bhv_camera_lakitu_init(void) { } } +static u8 camera_lakitu_intro_act_trigger_cutscene_continue_dialog(void) { + return (o->oAction == CAMERA_LAKITU_INTRO_ACT_TRIGGER_CUTSCENE); +} + /** * Wait for mario to stand on the bridge, then interrupt his action and enter * the spawn cloud action. @@ -32,17 +36,20 @@ static void camera_lakitu_intro_act_trigger_cutscene(void) { && gMarioObject->oPosZ > -2000.0f && gMarioObject->oPosZ < -177.0f && gMarioObject->oPosZ < -177.0f) // always double check your conditions { - if (set_mario_npc_dialog(&gMarioStates[0], 2) == 1) { + if (set_mario_npc_dialog(&gMarioStates[0], 2, camera_lakitu_intro_act_trigger_cutscene_continue_dialog) == 1) { o->oAction = CAMERA_LAKITU_INTRO_ACT_SPAWN_CLOUD; } } } +static u8 camera_lakitu_intro_act_spawn_cloud_continue_dialog(void) { + return (o->oAction == CAMERA_LAKITU_INTRO_ACT_SPAWN_CLOUD); +} /** * Warp up into the air and spawn cloud, then enter the TODO action. */ static void camera_lakitu_intro_act_spawn_cloud(void) { - if (set_mario_npc_dialog(&gMarioStates[0], 2) == 2) { + if (set_mario_npc_dialog(&gMarioStates[0], 2, camera_lakitu_intro_act_spawn_cloud_continue_dialog) == 2) { o->oAction = CAMERA_LAKITU_INTRO_ACT_UNK2; o->oPosX = 1800.0f; diff --git a/src/game/behaviors/dorrie.inc.c b/src/game/behaviors/dorrie.inc.c index 8ab3e8983..be418ee56 100644 --- a/src/game/behaviors/dorrie.inc.c +++ b/src/game/behaviors/dorrie.inc.c @@ -60,6 +60,10 @@ void dorrie_begin_head_raise(s32 liftingMario) { o->oDorrieHeadRaiseSpeed = 0; } +static u8 dorrie_act_lower_head_continue_dialog(void) { + return (o->oAction == DORRIE_ACT_LOWER_HEAD); +} + void dorrie_act_lower_head(void) { if (cur_obj_init_anim_check_frame(2, 35)) { cur_obj_reverse_animation(); @@ -68,7 +72,7 @@ void dorrie_act_lower_head(void) { if (o->oTimer > 150) { dorrie_begin_head_raise(FALSE); } else if (gMarioObject->platform == o) { - if (o->oDorrieForwardDistToMario > 830.0f && set_mario_npc_dialog(&gMarioStates[0], 2) == 1) { + if (o->oDorrieForwardDistToMario > 830.0f && set_mario_npc_dialog(&gMarioStates[0], 2, dorrie_act_lower_head_continue_dialog) == 1) { dorrie_begin_head_raise(TRUE); } else if (o->oDorrieForwardDistToMario > 320.0f) { o->oTimer = 0; @@ -77,7 +81,7 @@ void dorrie_act_lower_head(void) { #else if (gMarioObject->platform == o) { if (o->oDorrieOffsetY == -17.0f && o->oDorrieForwardDistToMario > 780.0f - && set_mario_npc_dialog(&gMarioStates[0], 2) == 1) { + && set_mario_npc_dialog(&gMarioStates[0], 2, dorrie_act_lower_head_continue_dialog) == 1) { dorrie_begin_head_raise(TRUE); } else if (o->oDorrieForwardDistToMario > 320.0f) { o->oTimer = 0; @@ -92,15 +96,19 @@ void dorrie_act_lower_head(void) { } } +static u8 dorrie_act_raise_head_continue_dialog(void) { + return (o->oAction == DORRIE_ACT_RAISE_HEAD); +} + void dorrie_act_raise_head(void) { o->collisionData = segmented_to_virtual(dorrie_seg6_collision_0600F644); if (cur_obj_check_if_near_animation_end()) { o->oAction = DORRIE_ACT_MOVE; } else if (o->oDorrieLiftingMario && o->header.gfx.unk38.animFrame < 74) { - if (set_mario_npc_dialog(&gMarioStates[0], 2) == 2) { + if (set_mario_npc_dialog(&gMarioStates[0], 2, dorrie_act_raise_head_continue_dialog) == 2) { o->oDorrieHeadRaiseSpeed += 0x1CC; if (cur_obj_check_anim_frame(73)) { - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); } dorrie_raise_head(); } else { diff --git a/src/game/behaviors/grand_star.inc.c b/src/game/behaviors/grand_star.inc.c index a2c6dee64..ea2b32303 100644 --- a/src/game/behaviors/grand_star.inc.c +++ b/src/game/behaviors/grand_star.inc.c @@ -51,7 +51,7 @@ void bhv_grand_star_loop(void) { o->oPosY = o->oHomeY + 200.0f; grand_star_zero_velocity(); gObjCutsceneDone = 1; - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); o->oAction++; o->oInteractStatus = 0; cur_obj_play_sound_2(SOUND_GENERAL_GRAND_STAR_JUMP); diff --git a/src/game/behaviors/hoot.inc.c b/src/game/behaviors/hoot.inc.c index 630cd0d77..acf8f0f48 100644 --- a/src/game/behaviors/hoot.inc.c +++ b/src/game/behaviors/hoot.inc.c @@ -252,6 +252,10 @@ void hoot_awake_loop(void) { set_object_visibility(o, 2000); } +static u8 hoot_wants_to_talk_continue_dialog(void) { + return (o->oHootAvailability == HOOT_AVAIL_WANTS_TO_TALK && localTalkToHoot == 1); +} + void bhv_hoot_loop(void) { struct MarioState* marioState = nearest_mario_state_to_object(o); static u8 forceFlySanity = TRUE; @@ -272,9 +276,9 @@ void bhv_hoot_loop(void) { localTalkToHoot = 1; } - if (localTalkToHoot == 1 && set_mario_npc_dialog(&gMarioStates[0], 2) == 2 && cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_044)) { + if (localTalkToHoot == 1 && set_mario_npc_dialog(&gMarioStates[0], 2, hoot_wants_to_talk_continue_dialog) == 2 && cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_044)) { localTalkToHoot = 2; - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); cur_obj_become_tangible(); o->oHootAvailability = HOOT_AVAIL_READY_TO_FLY; network_send_object(o); @@ -283,7 +287,7 @@ void bhv_hoot_loop(void) { case HOOT_AVAIL_READY_TO_FLY: if (forceFlySanity) { - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); cur_obj_become_tangible(); forceFlySanity = FALSE; } diff --git a/src/game/behaviors/koopa.inc.c b/src/game/behaviors/koopa.inc.c index 499aff312..4890f7b0b 100644 --- a/src/game/behaviors/koopa.inc.c +++ b/src/game/behaviors/koopa.inc.c @@ -536,7 +536,7 @@ s32 obj_begin_race(s32 noTimer) { } // Unfreeze mario and disable time stop to begin the race - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); disable_time_stop_including_mario(); } else if (o->oTimer > 50) { return TRUE; diff --git a/src/game/behaviors/mips.inc.c b/src/game/behaviors/mips.inc.c index 1755496a0..eb590a245 100644 --- a/src/game/behaviors/mips.inc.c +++ b/src/game/behaviors/mips.inc.c @@ -220,6 +220,10 @@ void bhv_mips_free(void) { } } +static u8 bhv_mips_held_continue_dialog(void) { + return (o->oHeldState == HELD_HELD && o->oMipsStarStatus == MIPS_STAR_STATUS_HAVENT_SPAWNED_STAR); +} + /** * Handles MIPS being held by Mario. */ @@ -239,13 +243,13 @@ void bhv_mips_held(void) { else dialogID = DIALOG_162; - if (set_mario_npc_dialog(&gMarioStates[0], 1) == 2) { + if (set_mario_npc_dialog(&gMarioStates[0], 1, bhv_mips_held_continue_dialog) == 2) { //o->activeFlags |= ACTIVE_FLAG_INITIATED_TIME_STOP; if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, dialogID)) { o->oInteractionSubtype |= INT_SUBTYPE_DROP_IMMEDIATELY; o->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP; o->oMipsStarStatus = MIPS_STAR_STATUS_SHOULD_SPAWN_STAR; - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); } } } diff --git a/src/game/behaviors/snowman.inc.c b/src/game/behaviors/snowman.inc.c index 65289fd63..6e159b3d7 100644 --- a/src/game/behaviors/snowman.inc.c +++ b/src/game/behaviors/snowman.inc.c @@ -125,6 +125,10 @@ void snowmans_bottom_act_3(void) { } } +static u8 bhv_snowmans_bottom_loop_continue_dialog(void) { + return (o->oAction == 0); +} + void bhv_snowmans_bottom_loop(void) { s16 sp1E; @@ -132,13 +136,12 @@ void bhv_snowmans_bottom_loop(void) { switch (o->oAction) { case 0: - if (distanceToLocal < 400 - && set_mario_npc_dialog(&gMarioStates[0], 1) == 2) { + if (distanceToLocal < 400 && set_mario_npc_dialog(&gMarioStates[0], 1, bhv_snowmans_bottom_loop_continue_dialog) == 2) { sp1E = cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_110); if (sp1E) { o->oForwardVel = 10.0f; o->oAction = 1; - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); network_send_object(o); } } @@ -197,13 +200,21 @@ void bhv_snowmans_head_init(void) { network_init_object_field(o, &o->oAction); } +static u8 bhv_snowmans_head_action_0_continue_dialog(void) { + return (o->oAction == 0); +} + +static u8 bhv_snowmans_head_action_4_continue_dialog(void) { + return (o->oAction == 4); +} + void bhv_snowmans_head_loop(void) { UNUSED s16 sp1E; s16 sp1C; switch (o->oAction) { case 0: - if (trigger_obj_dialog_when_facing(&gMarioStates[0], &o->oSnowmansHeadUnkF4, DIALOG_109, 400.0f, 1)) + if (trigger_obj_dialog_when_facing(&gMarioStates[0], &o->oSnowmansHeadUnkF4, DIALOG_109, 400.0f, 1, bhv_snowmans_head_action_0_continue_dialog)) o->oAction = 1; break; @@ -227,7 +238,7 @@ void bhv_snowmans_head_loop(void) { break; case 4: - if (trigger_obj_dialog_when_facing(&gMarioStates[0], &o->oSnowmansHeadUnkF4, DIALOG_111, 700.0f, 2)) { + if (trigger_obj_dialog_when_facing(&gMarioStates[0], &o->oSnowmansHeadUnkF4, DIALOG_111, 700.0f, 2, bhv_snowmans_head_action_4_continue_dialog)) { spawn_mist_particles(); spawn_default_star(-4700.0f, -1024.0f, 1890.0f); o->oAction = 1; diff --git a/src/game/behaviors/ukiki.inc.c b/src/game/behaviors/ukiki.inc.c index 6003f96ff..b16a8c3e8 100644 --- a/src/game/behaviors/ukiki.inc.c +++ b/src/game/behaviors/ukiki.inc.c @@ -511,6 +511,10 @@ static void ukiki_blink_timer(void) { } } +static u8 cage_ukiki_held_default_continue_dialog(void) { + return (o->oHeldState == HELD_HELD && o->oUkikiTextState == UKIKI_TEXT_DEFAULT); +} + /** * Called by the main behavior function for the cage ukiki whenever it is held. */ @@ -518,7 +522,7 @@ void cage_ukiki_held_loop(void) { if (o->oPosY - o->oHomeY > -100.0f) { switch(o->oUkikiTextState) { case UKIKI_TEXT_DEFAULT: - if (set_mario_npc_dialog(&gMarioStates[0], 2) == 2) { + if (set_mario_npc_dialog(&gMarioStates[0], 2, cage_ukiki_held_default_continue_dialog) == 2) { create_dialog_box_with_response(DIALOG_079); o->oUkikiTextState = UKIKI_TEXT_CAGE_TEXTBOX; } @@ -526,7 +530,7 @@ void cage_ukiki_held_loop(void) { case UKIKI_TEXT_CAGE_TEXTBOX: if (gDialogResponse != 0) { - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); if (gDialogResponse == 1) { o->oInteractionSubtype |= INT_SUBTYPE_DROP_IMMEDIATELY; o->oUkikiTextState = UKIKI_TEXT_GO_TO_CAGE; @@ -584,7 +588,7 @@ void hat_ukiki_held_loop(void) { case UKIKI_TEXT_HAS_HAT: if (cur_obj_update_dialog(&gMarioStates[0], 2, 18, DIALOG_101, 0, hat_ukiki_held_loop_2)) { mario_retrieve_cap(); - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); o->oUkikiHasHat &= ~UKIKI_HAT_ON; o->oUkikiTextState = UKIKI_TEXT_GAVE_HAT_BACK; } diff --git a/src/game/behaviors/yoshi.inc.c b/src/game/behaviors/yoshi.inc.c index a30c68dc7..8c184e897 100644 --- a/src/game/behaviors/yoshi.inc.c +++ b/src/game/behaviors/yoshi.inc.c @@ -75,7 +75,7 @@ void yoshi_idle_loop(void) { void yoshi_talk_loop(void) { if ((s16) o->oMoveAngleYaw == (s16) o->oAngleToMario) { cur_obj_init_animation(0); - if (set_mario_npc_dialog(&gMarioStates[0], 1) == 2) { + if (set_mario_npc_dialog(&gMarioStates[0], 1, NULL) == 2) { //o->activeFlags |= ACTIVE_FLAG_INITIATED_TIME_STOP; if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_161)) { o->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP; @@ -122,7 +122,7 @@ void yoshi_finish_jumping_and_despawn_loop(void) { obj_move_xyz_using_fvel_and_yaw(o); o->oVelY -= 2.0; if (o->oPosY < 2100.0f) { - set_mario_npc_dialog(&gMarioStates[0], 0); + set_mario_npc_dialog(&gMarioStates[0], 0, NULL); gObjCutsceneDone = TRUE; sYoshiDead = 1; o->activeFlags = ACTIVE_FLAG_DEACTIVATED; diff --git a/src/game/camera.c b/src/game/camera.c index 975f1413c..a9374754e 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -7066,7 +7066,7 @@ void copy_spline_segment(struct CutsceneSplinePoint dst[], struct CutsceneSpline s16 cutscene_common_set_dialog_state(s32 state) { s16 timer = gCutsceneTimer; // If the dialog ended, return CUTSCENE_LOOP, which would end the cutscene shot - if (set_mario_npc_dialog(&gMarioStates[0], state) == 2) { + if (set_mario_npc_dialog(&gMarioStates[0], state, NULL) == 2) { timer = CUTSCENE_LOOP; } return timer; diff --git a/src/game/mario_actions_cutscene.c b/src/game/mario_actions_cutscene.c index e038ccf3b..28c8e1b1f 100644 --- a/src/game/mario_actions_cutscene.c +++ b/src/game/mario_actions_cutscene.c @@ -354,13 +354,18 @@ s32 mario_ready_to_speak(struct MarioState* m) { // 0 = not in dialog // 1 = starting dialog // 2 = speaking -s32 set_mario_npc_dialog(struct MarioState* m, s32 actionArg) { +s32 set_mario_npc_dialog(struct MarioState* m, s32 actionArg, u8 (*inContinueDialogFunction)(void)) { s32 dialogState = 0; - if (m->playerIndex == 0 && actionArg == 0) { - localDialogNPCBehavior = NULL; - continueDialogFunction = NULL; - continueDialogFunctionObject = NULL; + if (m->playerIndex == 0) { + if (actionArg == 0 || inContinueDialogFunction == NULL) { + localDialogNPCBehavior = NULL; + gContinueDialogFunction = NULL; + gContinueDialogFunctionObject = NULL; + } else { + gContinueDialogFunction = inContinueDialogFunction; + gContinueDialogFunctionObject = gCurrentObject; + } } // in dialog @@ -400,14 +405,14 @@ s32 act_reading_npc_dialog(struct MarioState *m) { if (m->playerIndex == 0) { u8 continueDialogCallback = TRUE; - if (continueDialogFunction != NULL && continueDialogFunctionObject != NULL) { + if (gContinueDialogFunction != NULL && gContinueDialogFunctionObject != NULL) { struct Object* tmp = gCurrentObject; - gCurrentObject = continueDialogFunctionObject; - continueDialogCallback = continueDialogFunction(); + gCurrentObject = gContinueDialogFunctionObject; + continueDialogCallback = gContinueDialogFunction(); gCurrentObject = tmp; } if (!continueDialogCallback || m->usedObj == NULL || m->usedObj->activeFlags == ACTIVE_FLAG_DEACTIVATED || m->usedObj->behavior != localDialogNPCBehavior) { - set_mario_npc_dialog(m, 0); + set_mario_npc_dialog(m, 0, NULL); } } diff --git a/src/game/mario_actions_cutscene.h b/src/game/mario_actions_cutscene.h index 5a2f22e2c..d6d43c3f3 100644 --- a/src/game/mario_actions_cutscene.h +++ b/src/game/mario_actions_cutscene.h @@ -11,7 +11,7 @@ void bhv_end_peach_loop(void); void bhv_end_toad_loop(void); s32 geo_switch_peach_eyes(s32 run, struct GraphNode *node, UNUSED s32 a2); s32 mario_ready_to_speak(struct MarioState* m); -s32 set_mario_npc_dialog(struct MarioState* m, s32 actionArg); +s32 set_mario_npc_dialog(struct MarioState* m, s32 actionArg, u8(*inContinueDialogFunction)(void)); s32 mario_execute_cutscene_action(struct MarioState *m); #endif // MARIO_ACTIONS_CUTSCENE_H diff --git a/src/game/obj_behaviors.c b/src/game/obj_behaviors.c index 47ab2b878..5fba9ba73 100644 --- a/src/game/obj_behaviors.c +++ b/src/game/obj_behaviors.c @@ -726,7 +726,7 @@ s8 current_mario_room_check(s16 room) { /** * Triggers dialog when Mario is facing an object and controls it while in the dialog. */ -s16 trigger_obj_dialog_when_facing(struct MarioState* m, s32 *inDialog, s16 dialogID, f32 dist, s32 actionArg) { +s16 trigger_obj_dialog_when_facing(struct MarioState* m, s32 *inDialog, s16 dialogID, f32 dist, s32 actionArg, u8 (*inContinueDialogFunction)(void)) { s16 dialogueResponse; int angleToPlayer = obj_angle_to_object(o, m->marioObj); @@ -737,10 +737,10 @@ s16 trigger_obj_dialog_when_facing(struct MarioState* m, s32 *inDialog, s16 dial || (*inDialog == 1)) { *inDialog = 1; - if (set_mario_npc_dialog(m, actionArg) == 2) { //If Mario is speaking. + if (set_mario_npc_dialog(m, actionArg, inContinueDialogFunction) == 2) { //If Mario is speaking. dialogueResponse = cutscene_object_with_dialog(CUTSCENE_DIALOG, o, dialogID); if (dialogueResponse != 0) { - set_mario_npc_dialog(m, 0); + set_mario_npc_dialog(m, 0, NULL); *inDialog = 0; return dialogueResponse; } diff --git a/src/game/obj_behaviors_2.c b/src/game/obj_behaviors_2.c index dadf1ab04..d18489e90 100644 --- a/src/game/obj_behaviors_2.c +++ b/src/game/obj_behaviors_2.c @@ -101,7 +101,7 @@ static s32 obj_update_race_proposition_dialog(struct MarioState* m, s16 dialogID s32 dialogResponse = cur_obj_update_dialog_with_cutscene(m, 2, DIALOG_UNK2_FLAG_0 | DIALOG_UNK2_LEAVE_TIME_STOP_ENABLED, CUTSCENE_RACE_DIALOG, dialogID, inContinueDialogFunction); if (dialogResponse == 2) { - set_mario_npc_dialog(m, 0); + set_mario_npc_dialog(m, 0, NULL); disable_time_stop_including_mario(); } diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index e22bc7d0c..2467e59b8 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -28,8 +28,8 @@ #include "spawn_sound.h" #include "pc/network/network.h" -u8 (*continueDialogFunction)(void) = NULL; -struct Object* continueDialogFunctionObject = NULL; +u8 (*gContinueDialogFunction)(void) = NULL; +struct Object* gContinueDialogFunctionObject = NULL; s8 D_8032F0A0[] = { 0xF8, 0x08, 0xFC, 0x04 }; s16 D_8032F0A4[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; @@ -2689,7 +2689,7 @@ static void cur_obj_end_dialog(struct MarioState* m, s32 dialogFlags, s32 dialog o->oDialogState++; if (!(dialogFlags & DIALOG_UNK1_FLAG_4)) { - set_mario_npc_dialog(m, 0); + set_mario_npc_dialog(m, 0, NULL); } } @@ -2698,8 +2698,6 @@ s32 cur_obj_update_dialog(struct MarioState* m, s32 actionArg, s32 dialogFlags, UNUSED s32 doneTurning = TRUE; if (m->playerIndex != 0) { return 0; } - continueDialogFunctionObject = gCurrentObject; - continueDialogFunction = inContinueDialogFunction; switch (o->oDialogState) { #ifdef VERSION_JP @@ -2729,7 +2727,7 @@ s32 cur_obj_update_dialog(struct MarioState* m, s32 actionArg, s32 dialogFlags, #endif case DIALOG_UNK1_INTERRUPT_MARIO_ACTION: - if (set_mario_npc_dialog(m, actionArg) == 2) { + if (set_mario_npc_dialog(m, actionArg, inContinueDialogFunction) == 2) { o->oDialogState++; } break; @@ -2779,8 +2777,6 @@ s32 cur_obj_update_dialog_with_cutscene(struct MarioState* m, s32 actionArg, s32 s32 doneTurning = TRUE; if (m->playerIndex != 0) { return 0; } - continueDialogFunctionObject = gCurrentObject; - continueDialogFunction = inContinueDialogFunction; switch (o->oDialogState) { #ifdef VERSION_JP @@ -2818,7 +2814,7 @@ s32 cur_obj_update_dialog_with_cutscene(struct MarioState* m, s32 actionArg, s32 } } - if (set_mario_npc_dialog(m, actionArg) == 2 && doneTurning) { + if (set_mario_npc_dialog(m, actionArg, inContinueDialogFunction) == 2 && doneTurning) { o->oDialogResponse = 0; o->oDialogState++; } else { @@ -2848,7 +2844,7 @@ s32 cur_obj_update_dialog_with_cutscene(struct MarioState* m, s32 actionArg, s32 dialogResponse = o->oDialogResponse; o->oDialogState = DIALOG_UNK2_ENABLE_TIME_STOP; } else { - set_mario_npc_dialog(m, 0); + set_mario_npc_dialog(m, 0, NULL); } break; } diff --git a/src/game/object_helpers.h b/src/game/object_helpers.h index 23a390107..7a64c1ee8 100644 --- a/src/game/object_helpers.h +++ b/src/game/object_helpers.h @@ -67,8 +67,8 @@ struct SpawnParticlesInfo /*0x10*/ f32 sizeRange; }; -extern u8 (*continueDialogFunction)(void); -extern struct Object* continueDialogFunctionObject; +extern u8 (*gContinueDialogFunction)(void); +extern struct Object* gContinueDialogFunctionObject; Gfx *geo_update_projectile_pos_from_parent(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx); Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUSED void *context);