mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-22 20:15:17 +00:00
Fix wiggler softlock and intangibility
This commit is contained in:
parent
98cc31d6cb
commit
f4263deea9
1 changed files with 8 additions and 1 deletions
|
@ -108,6 +108,7 @@ void bhv_wiggler_body_part_update(void) {
|
||||||
if (o->parentObj->oAction == WIGGLER_ACT_SHRINK) {
|
if (o->parentObj->oAction == WIGGLER_ACT_SHRINK) {
|
||||||
cur_obj_become_intangible();
|
cur_obj_become_intangible();
|
||||||
} else {
|
} else {
|
||||||
|
cur_obj_become_tangible();
|
||||||
obj_check_attacks(&sWigglerBodyPartHitbox, o->oAction);
|
obj_check_attacks(&sWigglerBodyPartHitbox, o->oAction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,7 +236,7 @@ static void wiggler_act_walk(void) {
|
||||||
|
|
||||||
// If Mario is positioned below the wiggler, assume he entered through the
|
// If Mario is positioned below the wiggler, assume he entered through the
|
||||||
// lower cave entrance, so don't display text.
|
// lower cave entrance, so don't display text.
|
||||||
if (player->oPosY < o->oPosY || (should_start_or_continue_dialog(marioState, o) && cur_obj_update_dialog_with_cutscene(marioState, 2, 0, CUTSCENE_DIALOG, DIALOG_150, wiggler_act_walk_continue_dialog) != 0)) {
|
if (player->oPosY < o->oPosY || (cur_obj_update_dialog_with_cutscene(&gMarioStates[0], 2, 0, CUTSCENE_DIALOG, DIALOG_150, wiggler_act_walk_continue_dialog) != 0)) {
|
||||||
o->oWigglerTextStatus = WIGGLER_TEXT_STATUS_COMPLETED_DIALOG;
|
o->oWigglerTextStatus = WIGGLER_TEXT_STATUS_COMPLETED_DIALOG;
|
||||||
network_send_object_reliability(o, TRUE);
|
network_send_object_reliability(o, TRUE);
|
||||||
}
|
}
|
||||||
|
@ -280,6 +281,7 @@ static void wiggler_act_walk(void) {
|
||||||
obj_face_pitch_approach(0, 0x320);
|
obj_face_pitch_approach(0, 0x320);
|
||||||
|
|
||||||
// For the first two seconds of walking, stay invulnerable
|
// For the first two seconds of walking, stay invulnerable
|
||||||
|
cur_obj_become_tangible();
|
||||||
if (o->oTimer < 60) {
|
if (o->oTimer < 60) {
|
||||||
obj_check_attacks(&sWigglerHitbox, o->oAction);
|
obj_check_attacks(&sWigglerHitbox, o->oAction);
|
||||||
} else if (obj_handle_attacks(&sWigglerHitbox, o->oAction, sWigglerAttackHandlers)) {
|
} else if (obj_handle_attacks(&sWigglerHitbox, o->oAction, sWigglerAttackHandlers)) {
|
||||||
|
@ -415,11 +417,13 @@ u8 bhv_wiggler_ignore_if_true(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Vec3f wigglerPrePos = { 0 };
|
static Vec3f wigglerPrePos = { 0 };
|
||||||
|
static u8 wigglerCompletedDialog = FALSE;
|
||||||
|
|
||||||
void bhv_wiggler_on_received_pre(u8 localIndex) {
|
void bhv_wiggler_on_received_pre(u8 localIndex) {
|
||||||
wigglerPrePos[0] = o->oPosX;
|
wigglerPrePos[0] = o->oPosX;
|
||||||
wigglerPrePos[1] = o->oPosY;
|
wigglerPrePos[1] = o->oPosY;
|
||||||
wigglerPrePos[2] = o->oPosZ;
|
wigglerPrePos[2] = o->oPosZ;
|
||||||
|
wigglerCompletedDialog = (o->oWigglerTextStatus == WIGGLER_TEXT_STATUS_COMPLETED_DIALOG);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhv_wiggler_on_received_post(u8 localIndex) {
|
void bhv_wiggler_on_received_post(u8 localIndex) {
|
||||||
|
@ -432,6 +436,9 @@ void bhv_wiggler_on_received_post(u8 localIndex) {
|
||||||
o->oWigglerSegments[i].posY += posDiff[1];
|
o->oWigglerSegments[i].posY += posDiff[1];
|
||||||
o->oWigglerSegments[i].posZ += posDiff[2];
|
o->oWigglerSegments[i].posZ += posDiff[2];
|
||||||
}
|
}
|
||||||
|
if (wigglerCompletedDialog) {
|
||||||
|
o->oWigglerTextStatus = WIGGLER_TEXT_STATUS_COMPLETED_DIALOG;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue