From a8f76be263fbcec6df5300c9dae1c4cd075426ad Mon Sep 17 00:00:00 2001 From: Agent X <44549182+AgentXLP@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:03:20 -0400 Subject: [PATCH] Fix red coins, secrets, goomba triplet macros, and count_objects_with_behavior --- src/engine/level_script.c | 4 ++-- src/game/behaviors/hidden_star.inc.c | 1 - src/game/object_helpers.c | 2 ++ src/pc/network/packets/packet_level_macro.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/engine/level_script.c b/src/engine/level_script.c index 200e1f2fc..29621ff4a 100644 --- a/src/engine/level_script.c +++ b/src/engine/level_script.c @@ -132,9 +132,9 @@ static void area_check_red_coin_or_secret(void *arg, bool isMacroObject) { } else { bhv = (const BehaviorScript *) arg; } - if (bhv == smlua_override_behavior(bhvRedCoin)) { + if (bhv == bhvRedCoin) { gAreas[sCurrAreaIndex].numRedCoins++; - } else if (bhv == smlua_override_behavior(bhvHiddenStarTrigger)) { + } else if (bhv == bhvHiddenStarTrigger) { gAreas[sCurrAreaIndex].numSecrets++; } } diff --git a/src/game/behaviors/hidden_star.inc.c b/src/game/behaviors/hidden_star.inc.c index eaad5afcd..9cbadffac 100644 --- a/src/game/behaviors/hidden_star.inc.c +++ b/src/game/behaviors/hidden_star.inc.c @@ -58,7 +58,6 @@ void bhv_hidden_star_loop(void) { } } -/* TODO: this is likely not a checkpoint but a Secret */ void bhv_hidden_star_trigger_loop(void) { if ((o->oInteractStatus & INT_STATUS_INTERACTED) || (gMarioStates[0].visibleToEnemies && obj_check_if_collided_with_object(o, gMarioObjects[0]) == 1)) { struct Object *hiddenStar = cur_obj_nearest_object_with_behavior(bhvHiddenStar); diff --git a/src/game/object_helpers.c b/src/game/object_helpers.c index 0784c6efa..bb3460ba8 100644 --- a/src/game/object_helpers.c +++ b/src/game/object_helpers.c @@ -1151,6 +1151,8 @@ s32 count_unimportant_objects(void) { } s32 count_objects_with_behavior(const BehaviorScript *behavior) { + if (!behavior) { return 0; } + behavior = smlua_override_behavior(behavior); uintptr_t *behaviorAddr = segmented_to_virtual(behavior); u32 objList = get_object_list_from_behavior(behaviorAddr); diff --git a/src/pc/network/packets/packet_level_macro.c b/src/pc/network/packets/packet_level_macro.c index 5020748f1..f858a0572 100644 --- a/src/pc/network/packets/packet_level_macro.c +++ b/src/pc/network/packets/packet_level_macro.c @@ -207,7 +207,7 @@ void network_receive_level_macro(struct Packet* p) { } } LOG_INFO("rx macro special: coin formation"); - } else if (behavior == smlua_override_behavior(bhvGoombaTripletSpawner)) { + } else if (behavior == bhvGoombaTripletSpawner) { for (s32 i = 0; i < OBJECT_POOL_CAPACITY; i++) { struct Object* o2 = &gObjectPool[i]; if (o2->parentObj != o) { continue; }