diff --git a/Makefile b/Makefile index 19126f5a15..fafc40df36 100644 --- a/Makefile +++ b/Makefile @@ -161,12 +161,12 @@ $(BUILD_DIR)/%.Yay0.o: $(BUILD_DIR)/%.bin.Yay0 $(LD) -r -b binary -o $@ $< # Compile C files -$(BUILD_DIR)/%.c.o: %.c $(MDEPS) $(GENERATED_HEADERS) +$(BUILD_DIR)/%.c.o: %.c $(MDEPS) $(GENERATED_HEADERS) | $(GENERATED_HEADERS) @mkdir -p $(shell dirname $@) $(CPP) $(CPPFLAGS) -o - $(CPPMFLAGS) $< | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ - # Compile C files (with DSL macros) -$(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(MDEPS) tools/compile_dsl_macros.py $(GENERATED_HEADERS) +$(foreach cfile, $(DSL_C_FILES), $(BUILD_DIR)/$(cfile).o): $(BUILD_DIR)/%.c.o: %.c $(MDEPS) tools/compile_dsl_macros.py $(GENERATED_HEADERS) | $(GENERATED_HEADERS) @mkdir -p $(shell dirname $@) $(CPP) $(CPPFLAGS) -o - $< $(CPPMFLAGS) | $(PYTHON) tools/compile_dsl_macros.py | $(ICONV) | $(CC) $(CFLAGS) -o - | $(OLD_AS) $(OLDASFLAGS) -o $@ - diff --git a/include/enums.h b/include/enums.h index 8997b7ffe2..5156552b4b 100644 --- a/include/enums.h +++ b/include/enums.h @@ -11,20 +11,6 @@ typedef UNK_TYPE EncounterTriggerFlags; #define EncounterTriggerFlags_HAMMER 0x00000004 #define EncounterTriggerFlags_PARTNER 0x00000006 -typedef s8 PartnerId; -#define PartnerId_NONE 0x00 -#define PartnerId_GOOMBARIO 0x01 -#define PartnerId_KOOPER 0x02 -#define PartnerId_BOMBETTE 0x03 -#define PartnerId_PARAKARRY 0x04 -#define PartnerId_GOOMPA 0x05 -#define PartnerId_WATT 0x06 -#define PartnerId_SUSHIE 0x07 -#define PartnerId_LAKILESTER 0x08 -#define PartnerId_BOW 0x09 -#define PartnerId_GOOMBARIA 0x0A -#define PartnerId_TWINK 0x0B - typedef s32 SongID; #define Song_TOAD_TOWN 0x00000000 #define Song_NORMAL_BATTLE 0x00000002 diff --git a/src/code_7bb60_len_41b0.c b/src/code_7bb60_len_41b0.c index 7becacbe3f..c77926fa26 100644 --- a/src/code_7bb60_len_41b0.c +++ b/src/code_7bb60_len_41b0.c @@ -1,4 +1,5 @@ #include "common.h" +#include "world/partners.h" void func_800E26B0(void) { PlayerStatus* playerStatus = &gPlayerStatus; @@ -91,7 +92,7 @@ INCLUDE_ASM(s32, "code_7bb60_len_41b0", func_800E4F10); INCLUDE_ASM(s32, "code_7bb60_len_41b0", check_input_midair_jump); -PartnerId get_current_partner_id(void) { +PartnerID get_current_partner_id(void) { return gPlayerData.currentPartner; } @@ -159,7 +160,7 @@ void set_action_state(s32 actionState) { // Whilst Lakilester, Bow, or Parakarry's ability is active, hazards have no effect. partner = playerData->currentPartner; - if (((u8)(partner - 7) < 2) || (playerData->currentPartner == PartnerId_PARAKARRY)) { + if (((u8)(partner - 7) < 2) || (playerData->currentPartner == PartnerID_PARAKARRY)) { if (D_8010EBB0[0]) { playerStatus->animFlags |= 0x4; playerStatus->flags |= 0x800; @@ -247,7 +248,7 @@ s32 check_input_hammer(void) { if (playerStatus->pressedButtons & Button_B) { if (!(playerStatus->flags & 4)) { - if (D_8010EBB0[0] != 1 || playerData->currentPartner != PartnerId_WATT) { + if (D_8010EBB0[0] != 1 || playerData->currentPartner != PartnerID_WATT) { if (playerData->hammerLevel != -1) { set_action_state(ActionState_HAMMER); return TRUE; diff --git a/src/world/area_kmr/kmr_03/8C7F90.c b/src/world/area_kmr/kmr_03/8C7F90.c index bdae212f4d..0768f9c117 100644 --- a/src/world/area_kmr/kmr_03/8C7F90.c +++ b/src/world/area_kmr/kmr_03/8C7F90.c @@ -1,4 +1,5 @@ #include "kmr_03.h" +#include "../../partners.h" Script M(Main); @@ -6,11 +7,11 @@ ApiStatus func_80240000_8C7F90(ScriptInstance* script, s32 isInitialCall) { Bytecode* args = script->ptrReadPos; PlayerData* playerData = PLAYER_DATA; NpcId npcID = get_variable(script, *args++); - PartnerId partnerID = get_variable(script, *args++); + PartnerID partnerID = get_variable(script, *args++); Npc* npc = get_npc_safe(npcID); if (isInitialCall) { - if (gPlayerData.currentPartner == PartnerId_NONE) { + if (gPlayerData.currentPartner == PartnerID_NONE) { script->functionTemp[0].s = 2; } else { script->functionTemp[0].s = 0; diff --git a/src/world/common/PartnerToggleAbilityScript.inc.c b/src/world/common/PartnerToggleAbilityScript.inc.c index a20b7f45de..fb05c0278b 100644 --- a/src/world/common/PartnerToggleAbilityScript.inc.c +++ b/src/world/common/PartnerToggleAbilityScript.inc.c @@ -1,7 +1,8 @@ #include "common.h" +#include "../partners.h" static ApiStatus PartnerSuspendAbilityScript(ScriptInstance* script, s32 isInitialCall) { - if (gPlayerData.currentPartner == PartnerId_NONE) { + if (gPlayerData.currentPartner == PartnerID_NONE) { return ApiStatus_DONE2; } partner_suspend_ability_script(); diff --git a/src/world/partner/goombaria.c b/src/world/partner/goombaria.c index 6a62c9edc6..8f496ca778 100644 --- a/src/world/partner/goombaria.c +++ b/src/world/partner/goombaria.c @@ -1,4 +1,5 @@ #include "common.h" +#include "../partners.h" void func_802BD100_324F10(Npc* npc) { npc->collisionHeight = 24; @@ -24,7 +25,7 @@ ApiStatus func_802BD14C_324F10(ScriptInstance* script, s32 isInitialCall) { func_800EBA3C(owner); func_800EBB40(owner); - playerData->unk_2F4[PartnerId_GOOMBARIA]++; + playerData->unk_2F4[PartnerID_GOOMBARIA]++; return ApiStatus_BLOCK; } diff --git a/src/world/partner/twink.c b/src/world/partner/twink.c index 1fb4e6a25d..6cb17a613a 100644 --- a/src/world/partner/twink.c +++ b/src/world/partner/twink.c @@ -1,4 +1,5 @@ #include "common.h" +#include "../partners.h" // Init void func_802BD100_325070(Npc* npc) { @@ -25,7 +26,7 @@ ApiStatus func_802BD148_325070(ScriptInstance* script, s32 isInitialCall) { update_player_move_history(owner); func_800ED5D0(owner); - playerData->unk_2F4[PartnerId_TWINK]++; + playerData->unk_2F4[PartnerID_TWINK]++; return ApiStatus_BLOCK; } diff --git a/src/world/partners.c b/src/world/partners.c index 092c102c2d..17444b02cb 100644 --- a/src/world/partners.c +++ b/src/world/partners.c @@ -1,5 +1,6 @@ #include "common.h" #include "ld_addrs.h" +#include "partners.h" #include "partner/goombario.h" #include "sprite/npc/world_goombario.h" @@ -25,28 +26,10 @@ #include "sprite/npc/twink.h" -typedef struct WorldPartner { - /* 0x00 */ void* dmaStart; - /* 0x04 */ void* dmaEnd; - /* 0x08 */ void* dmaDest; ///< Always `0x802BD100` - /* 0x10 */ s32 isFlying; - /* 0x14 */ void (*init)(Npc* partner); - /* 0x18 */ Bytecode* takeOut; - /* 0x1C */ Bytecode* useAbility; - /* 0x20 */ Bytecode* update; - /* 0x24 */ Bytecode* putAway; - /* 0x28 */ NpcAnimID idle; - /* 0x2C */ UNK_FUN_PTR(testFirstStrike); - /* 0x30 */ UNK_FUN_PTR(canUseAbility); - /* 0x34 */ UNK_FUN_PTR(canPlayerPause); - /* 0x38 */ void (*preBattle)(Npc* partner); - /* 0x3C */ UNK_FUN_PTR(postBattle); - /* 0x40 */ Bytecode* whileRiding; -} WorldPartner; // size = 0x40 - static s32 _pad[] = { 0x00, 0x00, 0x00 }; WorldPartner gWorldPartners[] = { + // XXX: it's possible that's there's a "none" entry here to match up with enum PartnerID { // Goombario .dmaStart = &world_partner_goombario_ROM_START, diff --git a/src/world/partners.h b/src/world/partners.h new file mode 100644 index 0000000000..83ab85a8e7 --- /dev/null +++ b/src/world/partners.h @@ -0,0 +1,43 @@ +#ifndef _WORLD_PARTNERS_H +#define _WORLD_PARTNERS_H + +#include "common.h" + +typedef struct WorldPartner { + /* 0x00 */ void* dmaStart; + /* 0x04 */ void* dmaEnd; + /* 0x08 */ void* dmaDest; ///< Always `0x802BD100` + /* 0x10 */ s32 isFlying; + /* 0x14 */ void (*init)(Npc* partner); + /* 0x18 */ Bytecode* takeOut; + /* 0x1C */ Bytecode* useAbility; + /* 0x20 */ Bytecode* update; + /* 0x24 */ Bytecode* putAway; + /* 0x28 */ NpcAnimID idle; + /* 0x2C */ UNK_FUN_PTR(testFirstStrike); + /* 0x30 */ UNK_FUN_PTR(canUseAbility); + /* 0x34 */ UNK_FUN_PTR(canPlayerPause); + /* 0x38 */ void (*preBattle)(Npc* partner); + /* 0x3C */ UNK_FUN_PTR(postBattle); + /* 0x40 */ Bytecode* whileRiding; +} WorldPartner; // size = 0x40 + +WorldPartner gWorldPartners[11]; + +typedef s8 PartnerID; +enum PartnerID { + PartnerID_NONE, + PartnerID_GOOMBARIO, + PartnerID_KOOPER, + PartnerID_BOMBETTE, + PartnerID_PARAKARRY, + PartnerID_GOOMPA, + PartnerID_WATT, + PartnerID_SUSHIE, + PartnerID_LAKILESTER, + PartnerID_BOW, + PartnerID_GOOMBARIA, + PartnerID_TWINK, +}; + +#endif diff --git a/src/world/script_api/7E3700.c b/src/world/script_api/7E3700.c index dc0334f9e7..4d5d6c43a6 100644 --- a/src/world/script_api/7E3700.c +++ b/src/world/script_api/7E3700.c @@ -1,4 +1,5 @@ #include "common.h" +#include "../partners.h" ApiStatus func_80282880(ScriptInstance* script, s32 isInitialCall) { PlayerStatus* playerStatus = PLAYER_STATUS; @@ -62,7 +63,7 @@ ApiStatus TeleportPartnerToPlayer(ScriptInstance* script, s32 isInitialCall) { PlayerStatus* playerStatus2 = PLAYER_STATUS; Npc* partner; - if (PLAYER_DATA->currentPartner == PartnerId_NONE) { + if (PLAYER_DATA->currentPartner == PartnerID_NONE) { return ApiStatus_DONE2; } @@ -91,7 +92,7 @@ ApiStatus func_80283908(ScriptInstance* script, s32 isInitialCall) { playerStatus->position.y = GAME_STATUS->savedPos.y; playerStatus->position.z = GAME_STATUS->savedPos.z; - if (currentPartner != PartnerId_NONE) { + if (currentPartner != PartnerID_NONE) { Npc* partner = get_npc_unsafe(NpcId_PARTNER); f32 angle = clamp_angle((playerStatus2->spriteFacingAngle < 180.0f) ? (90.0f) : (-90.0f)); partner->pos.x = playerStatus2->position.x; diff --git a/src/world_goombaria.c b/src/world_goombaria.c deleted file mode 100644 index 6a62c9edc6..0000000000 --- a/src/world_goombaria.c +++ /dev/null @@ -1,43 +0,0 @@ -#include "common.h" - -void func_802BD100_324F10(Npc* npc) { - npc->collisionHeight = 24; - npc->collisionRadius = 20; -} - -ApiStatus func_802BD114_324F10(ScriptInstance* script, s32 isInitialCall) { - Npc* owner = script->owner2.npc; - - if (isInitialCall) { - func_800EECC4(owner); - } - return func_800EECE8(owner) != 0; -} - -ApiStatus func_802BD14C_324F10(ScriptInstance* script, s32 isInitialCall) { - PlayerData* playerData = &gPlayerData; - Npc* owner = script->owner2.npc; - - if (isInitialCall) { - enable_partner_walking(owner, TRUE); - } - - func_800EBA3C(owner); - func_800EBB40(owner); - playerData->unk_2F4[PartnerId_GOOMBARIA]++; - - return ApiStatus_BLOCK; -} - -ApiStatus func_802BD1AC_324F10(ScriptInstance* script, s32 isInitialCall) { - return ApiStatus_DONE2; -} - -ApiStatus func_802BD1B4(ScriptInstance* script, s32 isInitialCall) { - Npc* owner = script->owner2.npc; - - if (isInitialCall) { - func_800EE994(owner); - } - return func_800EE9B8(owner) != 0; -} diff --git a/src/world_goompa.c b/src/world_goompa.c deleted file mode 100644 index 7a385c3ddb..0000000000 --- a/src/world_goompa.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "common.h" - -void func_802BD100_324A10(Npc* npc) { - npc->collisionHeight = 24; - npc->collisionRadius = 20; -} - -ApiStatus func_802BD114(ScriptInstance* script, s32 isInitialCall) { - Npc* owner = script->owner2.npc; - - if (isInitialCall) { - func_800EECC4(owner); - } - return func_800EECE8(owner) != 0; -} - -INCLUDE_ASM(s32, "world_goompa", func_802BD14C); - -INCLUDE_ASM(s32, "world_goompa", func_802BD4E0); - -ApiStatus func_802BD524(ScriptInstance* script, s32 isInitialCall) { - return ApiStatus_DONE2; -} - -ApiStatus func_802BD52C(ScriptInstance* script, s32 isInitialCall) { - Npc* owner = script->owner2.npc; - - if (isInitialCall) { - func_800EE994(owner); - } - return func_800EE9B8(owner) != 0; -} diff --git a/src/world_twink.c b/src/world_twink.c deleted file mode 100644 index 1fb4e6a25d..0000000000 --- a/src/world_twink.c +++ /dev/null @@ -1,44 +0,0 @@ -#include "common.h" - -// Init -void func_802BD100_325070(Npc* npc) { - npc->collisionHeight = 20; - npc->collisionRadius = 20; -} - -ApiStatus func_802BD110(ScriptInstance* script, s32 isInitialCall) { - Npc* owner = script->owner2.npc; - - if (isInitialCall) { - func_800EECC4(owner); - } - return func_800EECE8(owner) != 0; -} - -ApiStatus func_802BD148_325070(ScriptInstance* script, s32 isInitialCall) { - PlayerData* playerData = &gPlayerData; - Npc* owner = script->owner2.npc; - - if (isInitialCall) { - enable_partner_flying(owner, TRUE); - } - - update_player_move_history(owner); - func_800ED5D0(owner); - playerData->unk_2F4[PartnerId_TWINK]++; - - return ApiStatus_BLOCK; -} - -ApiStatus func_802BD1A8(ScriptInstance* script, s32 isInitialCall) { - return ApiStatus_DONE2; -} - -ApiStatus func_802BD1B0(ScriptInstance* script, s32 isInitialCall) { - Npc* owner = script->owner2.npc; - - if (isInitialCall) { - func_800EE994(owner); - } - return func_800EE9B8(owner) != 0; -}