mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01: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;
|
break;
|
||||||
|
|
||||||
case BOBOMB_BUDDY_CANNON_STOP_TALKING:
|
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->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP;
|
||||||
o->oBobombBuddyHasTalkedToMario = BOBOMB_BUDDY_HAS_TALKED;
|
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) {
|
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;
|
//o->activeFlags |= ACTIVE_FLAG_INITIATED_TIME_STOP;
|
||||||
|
|
||||||
switch (o->oBobombBuddyRole) {
|
switch (o->oBobombBuddyRole) {
|
||||||
case BOBOMB_BUDDY_ROLE_ADVICE:
|
case BOBOMB_BUDDY_ROLE_ADVICE:
|
||||||
if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, o->oBehParams2ndByte)
|
if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, o->oBehParams2ndByte)
|
||||||
!= BOBOMB_BUDDY_BP_STYPE_GENERIC) {
|
!= 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->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP;
|
||||||
o->oBobombBuddyHasTalkedToMario = BOBOMB_BUDDY_HAS_TALKED;
|
o->oBobombBuddyHasTalkedToMario = BOBOMB_BUDDY_HAS_TALKED;
|
||||||
|
|
|
||||||
|
|
@ -946,7 +946,7 @@ s32 bowser_dead_not_bits_end(void) {
|
||||||
bowser_dead_hide();
|
bowser_dead_hide();
|
||||||
spawn_triangle_break_particles(20, 116, 1.0f, 0);
|
spawn_triangle_break_particles(20, 116, 1.0f, 0);
|
||||||
bowser_spawn_grand_star_key();
|
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;
|
ret = 1;
|
||||||
}
|
}
|
||||||
return ret;
|
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
|
* Wait for mario to stand on the bridge, then interrupt his action and enter
|
||||||
* the spawn cloud action.
|
* 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 > -2000.0f && gMarioObject->oPosZ < -177.0f
|
||||||
&& gMarioObject->oPosZ < -177.0f) // always double check your conditions
|
&& 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;
|
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.
|
* Warp up into the air and spawn cloud, then enter the TODO action.
|
||||||
*/
|
*/
|
||||||
static void camera_lakitu_intro_act_spawn_cloud(void) {
|
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->oAction = CAMERA_LAKITU_INTRO_ACT_UNK2;
|
||||||
|
|
||||||
o->oPosX = 1800.0f;
|
o->oPosX = 1800.0f;
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,10 @@ void dorrie_begin_head_raise(s32 liftingMario) {
|
||||||
o->oDorrieHeadRaiseSpeed = 0;
|
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) {
|
void dorrie_act_lower_head(void) {
|
||||||
if (cur_obj_init_anim_check_frame(2, 35)) {
|
if (cur_obj_init_anim_check_frame(2, 35)) {
|
||||||
cur_obj_reverse_animation();
|
cur_obj_reverse_animation();
|
||||||
|
|
@ -68,7 +72,7 @@ void dorrie_act_lower_head(void) {
|
||||||
if (o->oTimer > 150) {
|
if (o->oTimer > 150) {
|
||||||
dorrie_begin_head_raise(FALSE);
|
dorrie_begin_head_raise(FALSE);
|
||||||
} else if (gMarioObject->platform == o) {
|
} 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);
|
dorrie_begin_head_raise(TRUE);
|
||||||
} else if (o->oDorrieForwardDistToMario > 320.0f) {
|
} else if (o->oDorrieForwardDistToMario > 320.0f) {
|
||||||
o->oTimer = 0;
|
o->oTimer = 0;
|
||||||
|
|
@ -77,7 +81,7 @@ void dorrie_act_lower_head(void) {
|
||||||
#else
|
#else
|
||||||
if (gMarioObject->platform == o) {
|
if (gMarioObject->platform == o) {
|
||||||
if (o->oDorrieOffsetY == -17.0f && o->oDorrieForwardDistToMario > 780.0f
|
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);
|
dorrie_begin_head_raise(TRUE);
|
||||||
} else if (o->oDorrieForwardDistToMario > 320.0f) {
|
} else if (o->oDorrieForwardDistToMario > 320.0f) {
|
||||||
o->oTimer = 0;
|
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) {
|
void dorrie_act_raise_head(void) {
|
||||||
o->collisionData = segmented_to_virtual(dorrie_seg6_collision_0600F644);
|
o->collisionData = segmented_to_virtual(dorrie_seg6_collision_0600F644);
|
||||||
if (cur_obj_check_if_near_animation_end()) {
|
if (cur_obj_check_if_near_animation_end()) {
|
||||||
o->oAction = DORRIE_ACT_MOVE;
|
o->oAction = DORRIE_ACT_MOVE;
|
||||||
} else if (o->oDorrieLiftingMario && o->header.gfx.unk38.animFrame < 74) {
|
} 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;
|
o->oDorrieHeadRaiseSpeed += 0x1CC;
|
||||||
if (cur_obj_check_anim_frame(73)) {
|
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();
|
dorrie_raise_head();
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ void bhv_grand_star_loop(void) {
|
||||||
o->oPosY = o->oHomeY + 200.0f;
|
o->oPosY = o->oHomeY + 200.0f;
|
||||||
grand_star_zero_velocity();
|
grand_star_zero_velocity();
|
||||||
gObjCutsceneDone = 1;
|
gObjCutsceneDone = 1;
|
||||||
set_mario_npc_dialog(&gMarioStates[0], 0);
|
set_mario_npc_dialog(&gMarioStates[0], 0, NULL);
|
||||||
o->oAction++;
|
o->oAction++;
|
||||||
o->oInteractStatus = 0;
|
o->oInteractStatus = 0;
|
||||||
cur_obj_play_sound_2(SOUND_GENERAL_GRAND_STAR_JUMP);
|
cur_obj_play_sound_2(SOUND_GENERAL_GRAND_STAR_JUMP);
|
||||||
|
|
|
||||||
|
|
@ -252,6 +252,10 @@ void hoot_awake_loop(void) {
|
||||||
set_object_visibility(o, 2000);
|
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) {
|
void bhv_hoot_loop(void) {
|
||||||
struct MarioState* marioState = nearest_mario_state_to_object(o);
|
struct MarioState* marioState = nearest_mario_state_to_object(o);
|
||||||
static u8 forceFlySanity = TRUE;
|
static u8 forceFlySanity = TRUE;
|
||||||
|
|
@ -272,9 +276,9 @@ void bhv_hoot_loop(void) {
|
||||||
localTalkToHoot = 1;
|
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;
|
localTalkToHoot = 2;
|
||||||
set_mario_npc_dialog(&gMarioStates[0], 0);
|
set_mario_npc_dialog(&gMarioStates[0], 0, NULL);
|
||||||
cur_obj_become_tangible();
|
cur_obj_become_tangible();
|
||||||
o->oHootAvailability = HOOT_AVAIL_READY_TO_FLY;
|
o->oHootAvailability = HOOT_AVAIL_READY_TO_FLY;
|
||||||
network_send_object(o);
|
network_send_object(o);
|
||||||
|
|
@ -283,7 +287,7 @@ void bhv_hoot_loop(void) {
|
||||||
|
|
||||||
case HOOT_AVAIL_READY_TO_FLY:
|
case HOOT_AVAIL_READY_TO_FLY:
|
||||||
if (forceFlySanity) {
|
if (forceFlySanity) {
|
||||||
set_mario_npc_dialog(&gMarioStates[0], 0);
|
set_mario_npc_dialog(&gMarioStates[0], 0, NULL);
|
||||||
cur_obj_become_tangible();
|
cur_obj_become_tangible();
|
||||||
forceFlySanity = FALSE;
|
forceFlySanity = FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -536,7 +536,7 @@ s32 obj_begin_race(s32 noTimer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unfreeze mario and disable time stop to begin the race
|
// 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();
|
disable_time_stop_including_mario();
|
||||||
} else if (o->oTimer > 50) {
|
} else if (o->oTimer > 50) {
|
||||||
return TRUE;
|
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.
|
* Handles MIPS being held by Mario.
|
||||||
*/
|
*/
|
||||||
|
|
@ -239,13 +243,13 @@ void bhv_mips_held(void) {
|
||||||
else
|
else
|
||||||
dialogID = DIALOG_162;
|
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;
|
//o->activeFlags |= ACTIVE_FLAG_INITIATED_TIME_STOP;
|
||||||
if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, dialogID)) {
|
if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, dialogID)) {
|
||||||
o->oInteractionSubtype |= INT_SUBTYPE_DROP_IMMEDIATELY;
|
o->oInteractionSubtype |= INT_SUBTYPE_DROP_IMMEDIATELY;
|
||||||
o->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP;
|
o->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP;
|
||||||
o->oMipsStarStatus = MIPS_STAR_STATUS_SHOULD_SPAWN_STAR;
|
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) {
|
void bhv_snowmans_bottom_loop(void) {
|
||||||
s16 sp1E;
|
s16 sp1E;
|
||||||
|
|
||||||
|
|
@ -132,13 +136,12 @@ void bhv_snowmans_bottom_loop(void) {
|
||||||
|
|
||||||
switch (o->oAction) {
|
switch (o->oAction) {
|
||||||
case 0:
|
case 0:
|
||||||
if (distanceToLocal < 400
|
if (distanceToLocal < 400 && set_mario_npc_dialog(&gMarioStates[0], 1, bhv_snowmans_bottom_loop_continue_dialog) == 2) {
|
||||||
&& set_mario_npc_dialog(&gMarioStates[0], 1) == 2) {
|
|
||||||
sp1E = cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_110);
|
sp1E = cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_110);
|
||||||
if (sp1E) {
|
if (sp1E) {
|
||||||
o->oForwardVel = 10.0f;
|
o->oForwardVel = 10.0f;
|
||||||
o->oAction = 1;
|
o->oAction = 1;
|
||||||
set_mario_npc_dialog(&gMarioStates[0], 0);
|
set_mario_npc_dialog(&gMarioStates[0], 0, NULL);
|
||||||
network_send_object(o);
|
network_send_object(o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -197,13 +200,21 @@ void bhv_snowmans_head_init(void) {
|
||||||
network_init_object_field(o, &o->oAction);
|
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) {
|
void bhv_snowmans_head_loop(void) {
|
||||||
UNUSED s16 sp1E;
|
UNUSED s16 sp1E;
|
||||||
s16 sp1C;
|
s16 sp1C;
|
||||||
|
|
||||||
switch (o->oAction) {
|
switch (o->oAction) {
|
||||||
case 0:
|
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;
|
o->oAction = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -227,7 +238,7 @@ void bhv_snowmans_head_loop(void) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
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_mist_particles();
|
||||||
spawn_default_star(-4700.0f, -1024.0f, 1890.0f);
|
spawn_default_star(-4700.0f, -1024.0f, 1890.0f);
|
||||||
o->oAction = 1;
|
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.
|
* 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) {
|
if (o->oPosY - o->oHomeY > -100.0f) {
|
||||||
switch(o->oUkikiTextState) {
|
switch(o->oUkikiTextState) {
|
||||||
case UKIKI_TEXT_DEFAULT:
|
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);
|
create_dialog_box_with_response(DIALOG_079);
|
||||||
o->oUkikiTextState = UKIKI_TEXT_CAGE_TEXTBOX;
|
o->oUkikiTextState = UKIKI_TEXT_CAGE_TEXTBOX;
|
||||||
}
|
}
|
||||||
|
|
@ -526,7 +530,7 @@ void cage_ukiki_held_loop(void) {
|
||||||
|
|
||||||
case UKIKI_TEXT_CAGE_TEXTBOX:
|
case UKIKI_TEXT_CAGE_TEXTBOX:
|
||||||
if (gDialogResponse != 0) {
|
if (gDialogResponse != 0) {
|
||||||
set_mario_npc_dialog(&gMarioStates[0], 0);
|
set_mario_npc_dialog(&gMarioStates[0], 0, NULL);
|
||||||
if (gDialogResponse == 1) {
|
if (gDialogResponse == 1) {
|
||||||
o->oInteractionSubtype |= INT_SUBTYPE_DROP_IMMEDIATELY;
|
o->oInteractionSubtype |= INT_SUBTYPE_DROP_IMMEDIATELY;
|
||||||
o->oUkikiTextState = UKIKI_TEXT_GO_TO_CAGE;
|
o->oUkikiTextState = UKIKI_TEXT_GO_TO_CAGE;
|
||||||
|
|
@ -584,7 +588,7 @@ void hat_ukiki_held_loop(void) {
|
||||||
case UKIKI_TEXT_HAS_HAT:
|
case UKIKI_TEXT_HAS_HAT:
|
||||||
if (cur_obj_update_dialog(&gMarioStates[0], 2, 18, DIALOG_101, 0, hat_ukiki_held_loop_2)) {
|
if (cur_obj_update_dialog(&gMarioStates[0], 2, 18, DIALOG_101, 0, hat_ukiki_held_loop_2)) {
|
||||||
mario_retrieve_cap();
|
mario_retrieve_cap();
|
||||||
set_mario_npc_dialog(&gMarioStates[0], 0);
|
set_mario_npc_dialog(&gMarioStates[0], 0, NULL);
|
||||||
o->oUkikiHasHat &= ~UKIKI_HAT_ON;
|
o->oUkikiHasHat &= ~UKIKI_HAT_ON;
|
||||||
o->oUkikiTextState = UKIKI_TEXT_GAVE_HAT_BACK;
|
o->oUkikiTextState = UKIKI_TEXT_GAVE_HAT_BACK;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ void yoshi_idle_loop(void) {
|
||||||
void yoshi_talk_loop(void) {
|
void yoshi_talk_loop(void) {
|
||||||
if ((s16) o->oMoveAngleYaw == (s16) o->oAngleToMario) {
|
if ((s16) o->oMoveAngleYaw == (s16) o->oAngleToMario) {
|
||||||
cur_obj_init_animation(0);
|
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;
|
//o->activeFlags |= ACTIVE_FLAG_INITIATED_TIME_STOP;
|
||||||
if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_161)) {
|
if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, DIALOG_161)) {
|
||||||
o->activeFlags &= ~ACTIVE_FLAG_INITIATED_TIME_STOP;
|
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);
|
obj_move_xyz_using_fvel_and_yaw(o);
|
||||||
o->oVelY -= 2.0;
|
o->oVelY -= 2.0;
|
||||||
if (o->oPosY < 2100.0f) {
|
if (o->oPosY < 2100.0f) {
|
||||||
set_mario_npc_dialog(&gMarioStates[0], 0);
|
set_mario_npc_dialog(&gMarioStates[0], 0, NULL);
|
||||||
gObjCutsceneDone = TRUE;
|
gObjCutsceneDone = TRUE;
|
||||||
sYoshiDead = 1;
|
sYoshiDead = 1;
|
||||||
o->activeFlags = ACTIVE_FLAG_DEACTIVATED;
|
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 cutscene_common_set_dialog_state(s32 state) {
|
||||||
s16 timer = gCutsceneTimer;
|
s16 timer = gCutsceneTimer;
|
||||||
// If the dialog ended, return CUTSCENE_LOOP, which would end the cutscene shot
|
// 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;
|
timer = CUTSCENE_LOOP;
|
||||||
}
|
}
|
||||||
return timer;
|
return timer;
|
||||||
|
|
|
||||||
|
|
@ -354,13 +354,18 @@ s32 mario_ready_to_speak(struct MarioState* m) {
|
||||||
// 0 = not in dialog
|
// 0 = not in dialog
|
||||||
// 1 = starting dialog
|
// 1 = starting dialog
|
||||||
// 2 = speaking
|
// 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;
|
s32 dialogState = 0;
|
||||||
|
|
||||||
if (m->playerIndex == 0 && actionArg == 0) {
|
if (m->playerIndex == 0) {
|
||||||
localDialogNPCBehavior = NULL;
|
if (actionArg == 0 || inContinueDialogFunction == NULL) {
|
||||||
continueDialogFunction = NULL;
|
localDialogNPCBehavior = NULL;
|
||||||
continueDialogFunctionObject = NULL;
|
gContinueDialogFunction = NULL;
|
||||||
|
gContinueDialogFunctionObject = NULL;
|
||||||
|
} else {
|
||||||
|
gContinueDialogFunction = inContinueDialogFunction;
|
||||||
|
gContinueDialogFunctionObject = gCurrentObject;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// in dialog
|
// in dialog
|
||||||
|
|
@ -400,14 +405,14 @@ s32 act_reading_npc_dialog(struct MarioState *m) {
|
||||||
|
|
||||||
if (m->playerIndex == 0) {
|
if (m->playerIndex == 0) {
|
||||||
u8 continueDialogCallback = TRUE;
|
u8 continueDialogCallback = TRUE;
|
||||||
if (continueDialogFunction != NULL && continueDialogFunctionObject != NULL) {
|
if (gContinueDialogFunction != NULL && gContinueDialogFunctionObject != NULL) {
|
||||||
struct Object* tmp = gCurrentObject;
|
struct Object* tmp = gCurrentObject;
|
||||||
gCurrentObject = continueDialogFunctionObject;
|
gCurrentObject = gContinueDialogFunctionObject;
|
||||||
continueDialogCallback = continueDialogFunction();
|
continueDialogCallback = gContinueDialogFunction();
|
||||||
gCurrentObject = tmp;
|
gCurrentObject = tmp;
|
||||||
}
|
}
|
||||||
if (!continueDialogCallback || m->usedObj == NULL || m->usedObj->activeFlags == ACTIVE_FLAG_DEACTIVATED || m->usedObj->behavior != localDialogNPCBehavior) {
|
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);
|
void bhv_end_toad_loop(void);
|
||||||
s32 geo_switch_peach_eyes(s32 run, struct GraphNode *node, UNUSED s32 a2);
|
s32 geo_switch_peach_eyes(s32 run, struct GraphNode *node, UNUSED s32 a2);
|
||||||
s32 mario_ready_to_speak(struct MarioState* m);
|
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);
|
s32 mario_execute_cutscene_action(struct MarioState *m);
|
||||||
|
|
||||||
#endif // MARIO_ACTIONS_CUTSCENE_H
|
#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.
|
* 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;
|
s16 dialogueResponse;
|
||||||
|
|
||||||
int angleToPlayer = obj_angle_to_object(o, m->marioObj);
|
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)) {
|
||||||
*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);
|
dialogueResponse = cutscene_object_with_dialog(CUTSCENE_DIALOG, o, dialogID);
|
||||||
if (dialogueResponse != 0) {
|
if (dialogueResponse != 0) {
|
||||||
set_mario_npc_dialog(m, 0);
|
set_mario_npc_dialog(m, 0, NULL);
|
||||||
*inDialog = 0;
|
*inDialog = 0;
|
||||||
return dialogueResponse;
|
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);
|
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) {
|
if (dialogResponse == 2) {
|
||||||
set_mario_npc_dialog(m, 0);
|
set_mario_npc_dialog(m, 0, NULL);
|
||||||
disable_time_stop_including_mario();
|
disable_time_stop_including_mario();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,8 @@
|
||||||
#include "spawn_sound.h"
|
#include "spawn_sound.h"
|
||||||
#include "pc/network/network.h"
|
#include "pc/network/network.h"
|
||||||
|
|
||||||
u8 (*continueDialogFunction)(void) = NULL;
|
u8 (*gContinueDialogFunction)(void) = NULL;
|
||||||
struct Object* continueDialogFunctionObject = NULL;
|
struct Object* gContinueDialogFunctionObject = NULL;
|
||||||
|
|
||||||
s8 D_8032F0A0[] = { 0xF8, 0x08, 0xFC, 0x04 };
|
s8 D_8032F0A0[] = { 0xF8, 0x08, 0xFC, 0x04 };
|
||||||
s16 D_8032F0A4[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
|
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++;
|
o->oDialogState++;
|
||||||
|
|
||||||
if (!(dialogFlags & DIALOG_UNK1_FLAG_4)) {
|
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;
|
UNUSED s32 doneTurning = TRUE;
|
||||||
|
|
||||||
if (m->playerIndex != 0) { return 0; }
|
if (m->playerIndex != 0) { return 0; }
|
||||||
continueDialogFunctionObject = gCurrentObject;
|
|
||||||
continueDialogFunction = inContinueDialogFunction;
|
|
||||||
|
|
||||||
switch (o->oDialogState) {
|
switch (o->oDialogState) {
|
||||||
#ifdef VERSION_JP
|
#ifdef VERSION_JP
|
||||||
|
|
@ -2729,7 +2727,7 @@ s32 cur_obj_update_dialog(struct MarioState* m, s32 actionArg, s32 dialogFlags,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case DIALOG_UNK1_INTERRUPT_MARIO_ACTION:
|
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++;
|
o->oDialogState++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -2779,8 +2777,6 @@ s32 cur_obj_update_dialog_with_cutscene(struct MarioState* m, s32 actionArg, s32
|
||||||
s32 doneTurning = TRUE;
|
s32 doneTurning = TRUE;
|
||||||
|
|
||||||
if (m->playerIndex != 0) { return 0; }
|
if (m->playerIndex != 0) { return 0; }
|
||||||
continueDialogFunctionObject = gCurrentObject;
|
|
||||||
continueDialogFunction = inContinueDialogFunction;
|
|
||||||
|
|
||||||
switch (o->oDialogState) {
|
switch (o->oDialogState) {
|
||||||
#ifdef VERSION_JP
|
#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->oDialogResponse = 0;
|
||||||
o->oDialogState++;
|
o->oDialogState++;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -2848,7 +2844,7 @@ s32 cur_obj_update_dialog_with_cutscene(struct MarioState* m, s32 actionArg, s32
|
||||||
dialogResponse = o->oDialogResponse;
|
dialogResponse = o->oDialogResponse;
|
||||||
o->oDialogState = DIALOG_UNK2_ENABLE_TIME_STOP;
|
o->oDialogState = DIALOG_UNK2_ENABLE_TIME_STOP;
|
||||||
} else {
|
} else {
|
||||||
set_mario_npc_dialog(m, 0);
|
set_mario_npc_dialog(m, 0, NULL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,8 +67,8 @@ struct SpawnParticlesInfo
|
||||||
/*0x10*/ f32 sizeRange;
|
/*0x10*/ f32 sizeRange;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern u8 (*continueDialogFunction)(void);
|
extern u8 (*gContinueDialogFunction)(void);
|
||||||
extern struct Object* continueDialogFunctionObject;
|
extern struct Object* gContinueDialogFunctionObject;
|
||||||
|
|
||||||
Gfx *geo_update_projectile_pos_from_parent(s32 callContext, UNUSED struct GraphNode *node, Mat4 mtx);
|
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);
|
Gfx *geo_update_layer_transparency(s32 callContext, struct GraphNode *node, UNUSED void *context);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue