Make objects not run their code if the room they are in isn't loaded. (#502)

This commit is contained in:
arthurtilly
2022-11-03 11:35:47 +13:00
committed by GitHub
parent d7d0364682
commit ab94fd7f63
5 changed files with 21 additions and 7 deletions

View File

@@ -820,6 +820,15 @@ void cur_obj_update(void) {
BhvCommandProc bhvCmdProc;
s32 bhvProcResult;
if (!(objFlags & OBJ_FLAG_PROCESS_OUTSIDE_ROOM)) {
if (o->oRoom != -1 && gMarioCurrentRoom != 0 && !is_room_loaded()) {
cur_obj_disable_rendering();
o->activeFlags |= ACTIVE_FLAG_IN_DIFFERENT_ROOM;
gNumRoomedObjectsNotInMarioRoom++;
return;
}
}
// Calculate the distance from the object to Mario.
if (objFlags & OBJ_FLAG_COMPUTE_DIST_TO_MARIO) {
o->oDistanceToMario = dist_between_objects(o, gMarioObject);

View File

@@ -1891,15 +1891,15 @@ void bhv_init_room(void) {
o->oRoom = -1;
}
u32 is_room_loaded(void) {
return gMarioCurrentRoom == o->oRoom
|| gDoorAdjacentRooms[gMarioCurrentRoom][0] == o->oRoom
|| gDoorAdjacentRooms[gMarioCurrentRoom][1] == o->oRoom;
}
void cur_obj_enable_rendering_if_mario_in_room(void) {
if (o->oRoom != -1 && gMarioCurrentRoom != 0) {
register s32 marioInRoom = (
gMarioCurrentRoom == o->oRoom
|| gDoorAdjacentRooms[gMarioCurrentRoom][0] == o->oRoom
|| gDoorAdjacentRooms[gMarioCurrentRoom][1] == o->oRoom
);
if (marioInRoom) {
if (is_room_loaded()) {
cur_obj_enable_rendering();
o->activeFlags &= ~ACTIVE_FLAG_IN_DIFFERENT_ROOM;
gNumRoomedObjectsInMarioRoom++;

View File

@@ -235,6 +235,7 @@ void cur_obj_call_action_function(ObjActionFunc actionFunctions[]);
s32 cur_obj_mario_far_away(void);
s32 is_mario_moving_fast_or_in_air(s32 speedThreshold);
s32 is_item_in_array(s8 item, s8 *array);
u32 is_room_loaded(void);
void cur_obj_enable_rendering_if_mario_in_room(void);
s32 cur_obj_set_hitbox_and_die_if_attacked(struct ObjectHitbox *hitbox, s32 deathSound, s32 noLootCoins);
void obj_explode_and_spawn_coins(f32 mistSize, s32 coinType);