mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
Fixed late join for items a Boo was carrying
This commit is contained in:
parent
3edb08c98d
commit
68e04a74bc
5 changed files with 43 additions and 5 deletions
|
|
@ -2011,6 +2011,7 @@ const BehaviorScript bhvBooCage[] = {
|
||||||
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
OR_INT(oFlags, (OBJ_FLAG_SET_FACE_YAW_TO_MOVE_YAW | OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE)),
|
||||||
SET_FLOAT(oGraphYOffset, 10),
|
SET_FLOAT(oGraphYOffset, 10),
|
||||||
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
|
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 30, /*Gravity*/ -400, /*Bounciness*/ -50, /*Drag strength*/ 0, /*Friction*/ 0, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
|
||||||
|
CALL_NATIVE(bhv_boo_cage_init),
|
||||||
BEGIN_LOOP(),
|
BEGIN_LOOP(),
|
||||||
CALL_NATIVE(bhv_boo_cage_loop),
|
CALL_NATIVE(bhv_boo_cage_loop),
|
||||||
END_LOOP(),
|
END_LOOP(),
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,7 @@ void bhv_unused_poundable_platform(void);
|
||||||
void bhv_beta_trampoline_top_loop(void);
|
void bhv_beta_trampoline_top_loop(void);
|
||||||
void bhv_beta_trampoline_spring_loop(void);
|
void bhv_beta_trampoline_spring_loop(void);
|
||||||
void bhv_jumping_box_loop(void);
|
void bhv_jumping_box_loop(void);
|
||||||
|
void bhv_boo_cage_init(void);
|
||||||
void bhv_boo_cage_loop(void);
|
void bhv_boo_cage_loop(void);
|
||||||
void bhv_bowser_key_init(void);
|
void bhv_bowser_key_init(void);
|
||||||
void bhv_bowser_key_loop(void);
|
void bhv_bowser_key_loop(void);
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,25 @@ static struct ObjectHitbox sBooCageHitbox = {
|
||||||
/* hurtboxHeight: */ 0,
|
/* hurtboxHeight: */ 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void bhv_boo_cage_on_received_post(u8 localIndex) {
|
||||||
|
if (o->oAction > BOO_CAGE_ACT_ON_GROUND) {
|
||||||
|
o->oAction = BOO_CAGE_ACT_ON_GROUND;
|
||||||
|
}
|
||||||
|
o->parentObj = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bhv_boo_cage_init(void) {
|
||||||
|
struct SyncObject* so = network_init_object(o, SYNC_DISTANCE_ONLY_EVENTS);
|
||||||
|
so->on_received_post = bhv_boo_cage_on_received_post;
|
||||||
|
network_init_object_field(o, &o->oAction);
|
||||||
|
network_init_object_field(o, &o->oPosX);
|
||||||
|
network_init_object_field(o, &o->oPosY);
|
||||||
|
network_init_object_field(o, &o->oPosZ);
|
||||||
|
network_init_object_field(o, &o->oVelX);
|
||||||
|
network_init_object_field(o, &o->oVelY);
|
||||||
|
network_init_object_field(o, &o->oVelZ);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update function for bhvBooCage.
|
* Update function for bhvBooCage.
|
||||||
*/
|
*/
|
||||||
|
|
@ -41,10 +60,17 @@ void bhv_boo_cage_loop(void) {
|
||||||
// If the cage's parent boo is killed, set the action to BOO_CAGE_ACT_FALLING,
|
// If the cage's parent boo is killed, set the action to BOO_CAGE_ACT_FALLING,
|
||||||
// give the cage an initial Y velocity of 60 units/frame, and play the puzzle jingle.
|
// give the cage an initial Y velocity of 60 units/frame, and play the puzzle jingle.
|
||||||
// Otherwise, stay inside the boo.
|
// Otherwise, stay inside the boo.
|
||||||
if (o->parentObj->oBooDeathStatus != BOO_DEATH_STATUS_ALIVE) {
|
if (o->parentObj == NULL || o->parentObj->behavior != bhvBooWithCage || o->parentObj->oBooDeathStatus != BOO_DEATH_STATUS_ALIVE) {
|
||||||
o->oAction++;
|
o->oAction++;
|
||||||
o->oVelY = 60.0f;
|
o->oVelY = 60.0f;
|
||||||
play_puzzle_jingle();
|
if (o->parentObj != NULL && o->parentObj->behavior == bhvBooWithCage) {
|
||||||
|
play_puzzle_jingle();
|
||||||
|
}
|
||||||
|
struct MarioState* marioState = nearest_mario_state_to_object(o);
|
||||||
|
if (marioState->playerIndex == 0) {
|
||||||
|
network_send_object(o);
|
||||||
|
}
|
||||||
|
o->parentObj = NULL;
|
||||||
} else {
|
} else {
|
||||||
obj_copy_pos_and_angle(o, o->parentObj);
|
obj_copy_pos_and_angle(o, o->parentObj);
|
||||||
}
|
}
|
||||||
|
|
@ -75,6 +101,11 @@ void bhv_boo_cage_loop(void) {
|
||||||
if (o->oMoveFlags
|
if (o->oMoveFlags
|
||||||
& (OBJ_MOVE_UNDERWATER_ON_GROUND | OBJ_MOVE_AT_WATER_SURFACE | OBJ_MOVE_ON_GROUND)) {
|
& (OBJ_MOVE_UNDERWATER_ON_GROUND | OBJ_MOVE_AT_WATER_SURFACE | OBJ_MOVE_ON_GROUND)) {
|
||||||
o->oAction++;
|
o->oAction++;
|
||||||
|
|
||||||
|
struct MarioState* marioState = nearest_mario_state_to_object(o);
|
||||||
|
if (marioState->playerIndex == 0) {
|
||||||
|
network_send_object(o);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -240,6 +240,11 @@ void coin_inside_boo_act_0(void) {
|
||||||
cur_obj_set_model(MODEL_BLUE_COIN);
|
cur_obj_set_model(MODEL_BLUE_COIN);
|
||||||
cur_obj_scale(0.7);
|
cur_obj_scale(0.7);
|
||||||
}
|
}
|
||||||
|
if (parent == NULL || parent->behavior != bhvGhostHuntBoo) {
|
||||||
|
o->parentObj = NULL;
|
||||||
|
obj_mark_for_deletion(o);
|
||||||
|
return;
|
||||||
|
}
|
||||||
obj_copy_pos(o, parent);
|
obj_copy_pos(o, parent);
|
||||||
if (parent->oBooDeathStatus == BOO_DEATH_STATUS_DYING) {
|
if (parent->oBooDeathStatus == BOO_DEATH_STATUS_DYING) {
|
||||||
o->oAction = 1;
|
o->oAction = 1;
|
||||||
|
|
@ -248,6 +253,7 @@ void coin_inside_boo_act_0(void) {
|
||||||
o->oVelX = sins(sp26) * sp20;
|
o->oVelX = sins(sp26) * sp20;
|
||||||
o->oVelZ = coss(sp26) * sp20;
|
o->oVelZ = coss(sp26) * sp20;
|
||||||
o->oVelY = 35.0f;
|
o->oVelY = 35.0f;
|
||||||
|
o->parentObj = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -936,12 +936,11 @@ u32 interact_star_or_key(struct MarioState *m, UNUSED u32 interactType, struct O
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 interact_bbh_entrance(struct MarioState *m, UNUSED u32 interactType, struct Object *o) {
|
u32 interact_bbh_entrance(struct MarioState *m, UNUSED u32 interactType, struct Object *o) {
|
||||||
|
if (m->playerIndex != 0) { return FALSE; }
|
||||||
if (m->action != ACT_BBH_ENTER_SPIN && m->action != ACT_BBH_ENTER_JUMP) {
|
if (m->action != ACT_BBH_ENTER_SPIN && m->action != ACT_BBH_ENTER_JUMP) {
|
||||||
mario_stop_riding_and_holding(m);
|
mario_stop_riding_and_holding(m);
|
||||||
|
|
||||||
if (m->playerIndex == 0) {
|
o->oInteractStatus = INT_STATUS_INTERACTED;
|
||||||
o->oInteractStatus = INT_STATUS_INTERACTED;
|
|
||||||
}
|
|
||||||
m->interactObj = o;
|
m->interactObj = o;
|
||||||
m->usedObj = o;
|
m->usedObj = o;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue