From 16467023937b3bbc786181a5e8d9efbf4d52f718 Mon Sep 17 00:00:00 2001 From: arthurtilly <32559225+arthurtilly@users.noreply.github.com> Date: Fri, 15 Dec 2023 17:24:35 +1300 Subject: [PATCH] shorten call_native command (#733) --- data/behavior_data.c | 7 +++---- src/engine/behavior_script.c | 25 +++++++++++++------------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/data/behavior_data.c b/data/behavior_data.c index 07803591..a0d4303e 100644 --- a/data/behavior_data.c +++ b/data/behavior_data.c @@ -66,6 +66,7 @@ #define BC_HH(a, b) (_SHIFTL(a, 16, 16) | _SHIFTL(b, 0, 16)) #define BC_W(a) ((uintptr_t)(u32)(a)) #define BC_PTR(a) ((uintptr_t)(a)) +#define BC_BPTR(a, b) (_SHIFTL(a, 24, 8) + OS_K0_TO_PHYSICAL(b)) enum BehaviorCommands { /*0x00*/ BHV_CMD_BEGIN, @@ -180,8 +181,7 @@ enum BehaviorCommands { // Executes a native game function. #define CALL_NATIVE(func) \ - BC_B(BHV_CMD_CALL_NATIVE), \ - BC_PTR(func) + BC_BPTR(BHV_CMD_CALL_NATIVE, func) // Adds a float to the specified field. #define ADD_FLOAT(field, value) \ @@ -386,8 +386,7 @@ enum BehaviorCommands { // Spawns a water droplet with the given parameters. #define SPAWN_WATER_DROPLET(dropletParams) \ - BC_B(BHV_CMD_SPAWN_WATER_DROPLET), \ - BC_PTR(dropletParams) + BC_BPTR(BHV_CMD_SPAWN_WATER_DROPLET, dropletParams) const BehaviorScript bhvStarDoor[] = { diff --git a/src/engine/behavior_script.c b/src/engine/behavior_script.c index 299eec42..9ae8b900 100644 --- a/src/engine/behavior_script.c +++ b/src/engine/behavior_script.c @@ -17,16 +17,17 @@ #include "game/puppylights.h" // Macros for retrieving arguments from behavior scripts. -#define BHV_CMD_GET_1ST_U8(index) (u8)((gCurBhvCommand[index] >> 24) & 0xFF) // unused -#define BHV_CMD_GET_2ND_U8(index) (u8)((gCurBhvCommand[index] >> 16) & 0xFF) -#define BHV_CMD_GET_3RD_U8(index) (u8)((gCurBhvCommand[index] >> 8) & 0xFF) -#define BHV_CMD_GET_4TH_U8(index) (u8)((gCurBhvCommand[index]) & 0xFF) +#define BHV_CMD_GET_1ST_U8(index) (u8)((gCurBhvCommand[index] >> 24) & 0xFF) // unused +#define BHV_CMD_GET_2ND_U8(index) (u8)((gCurBhvCommand[index] >> 16) & 0xFF) +#define BHV_CMD_GET_3RD_U8(index) (u8)((gCurBhvCommand[index] >> 8) & 0xFF) +#define BHV_CMD_GET_4TH_U8(index) (u8)((gCurBhvCommand[index]) & 0xFF) -#define BHV_CMD_GET_1ST_S16(index) (s16)(gCurBhvCommand[index] >> 16) -#define BHV_CMD_GET_2ND_S16(index) (s16)(gCurBhvCommand[index] & 0xFFFF) +#define BHV_CMD_GET_1ST_S16(index) (s16)(gCurBhvCommand[index] >> 16) +#define BHV_CMD_GET_2ND_S16(index) (s16)(gCurBhvCommand[index] & 0xFFFF) -#define BHV_CMD_GET_U32(index) (u32)(gCurBhvCommand[index]) -#define BHV_CMD_GET_VPTR(index) (void *)(gCurBhvCommand[index]) +#define BHV_CMD_GET_U32(index) (u32)(gCurBhvCommand[index]) +#define BHV_CMD_GET_VPTR(index) (void *)(gCurBhvCommand[index]) +#define BHV_CMD_GET_VPTR_SMALL(index) (void *)(OS_PHYSICAL_TO_K0(gCurBhvCommand[index] & 0xFFFFFF)) #define BHV_CMD_GET_ADDR_OF_CMD(index) (uintptr_t)(&gCurBhvCommand[index]) @@ -316,11 +317,11 @@ static s32 bhv_cmd_end_loop(void) { // Usage: CALL_NATIVE(func) typedef void (*NativeBhvFunc)(void); static s32 bhv_cmd_call_native(void) { - NativeBhvFunc behaviorFunc = BHV_CMD_GET_VPTR(1); + NativeBhvFunc behaviorFunc = BHV_CMD_GET_VPTR_SMALL(0); behaviorFunc(); - gCurBhvCommand += 2; + gCurBhvCommand++; return BHV_PROC_CONTINUE; } @@ -734,11 +735,11 @@ static s32 bhv_cmd_parent_bit_clear(void) { // Command 0x37: Spawns a water droplet with the given parameters. // Usage: SPAWN_WATER_DROPLET(dropletParams) static s32 bhv_cmd_spawn_water_droplet(void) { - struct WaterDropletParams *dropletParams = BHV_CMD_GET_VPTR(1); + struct WaterDropletParams *dropletParams = BHV_CMD_GET_VPTR_SMALL(0); spawn_water_droplet(gCurrentObject, dropletParams); - gCurBhvCommand += 2; + gCurBhvCommand++; return BHV_PROC_CONTINUE; }