mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-27 14:33:01 +00:00
Prevented more NPC dialog soft locks
This commit is contained in:
parent
09a1390d8d
commit
fffad90028
18 changed files with 97 additions and 54 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue