From 5206fdbe2ee2a49ce82dd47f7cc7b6f256d2bca3 Mon Sep 17 00:00:00 2001 From: Fazana <52551480+FazanaJ@users.noreply.github.com> Date: Fri, 1 Oct 2021 11:02:29 +0100 Subject: [PATCH] Revert macros struct funnies sausage --- src/game/macro_special_objects.c | 63 ++++++++++++++++++-------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/src/game/macro_special_objects.c b/src/game/macro_special_objects.c index 304b391b..e8de3316 100644 --- a/src/game/macro_special_objects.c +++ b/src/game/macro_special_objects.c @@ -77,17 +77,23 @@ UNUSED static void spawn_macro_coin_unknown(const BehaviorScript *behavior, s16 obj->oBehParams = (a1[4] & 0xFF) >> 16; } -#define MACRO_OBJ_Y_ROT 0 -#define MACRO_OBJ_X 1 -#define MACRO_OBJ_Y 2 -#define MACRO_OBJ_Z 3 +struct LoadedPreset { + /*0x00*/ const BehaviorScript *behavior; + /*0x04*/ s16 param; // huh? why does the below function swap these.. just use the struct.. + /*0x06*/ ModelID16 model; +}; + +#define MACRO_OBJ_Y_ROT 0 +#define MACRO_OBJ_X 1 +#define MACRO_OBJ_Y 2 +#define MACRO_OBJ_Z 3 #define MACRO_OBJ_PARAMS 4 void spawn_macro_objects(s32 areaIndex, s16 *macroObjList) { s32 presetID; s16 macroObject[5]; // see the 5 #define statements above struct Object *newObj; - s16 presetParams, macroParams; + struct LoadedPreset preset; gMacroObjectDefaultParent.header.gfx.areaIndex = areaIndex; gMacroObjectDefaultParent.header.gfx.activeAreaIndex = areaIndex; while (TRUE) { @@ -103,34 +109,37 @@ void spawn_macro_objects(s32 areaIndex, s16 *macroObjList) { macroObject[MACRO_OBJ_PARAMS] = *macroObjList++; // Behavior params // Get the preset values from the MacroObjectPresets list. - presetParams = MacroObjectPresets[presetID].param; - macroParams = macroObject[MACRO_OBJ_PARAMS]; + preset.model = MacroObjectPresets[presetID].model; + preset.behavior = MacroObjectPresets[presetID].behavior; + preset.param = MacroObjectPresets[presetID].param; - if (presetParams != 0) { - macroParams = (macroParams & 0xFF00) + (presetParams & 0x00FF); + if (preset.param != 0) { + macroObject[MACRO_OBJ_PARAMS] = + (macroObject[MACRO_OBJ_PARAMS] & 0xFF00) + (preset.param & 0x00FF); } // If object has been killed, prevent it from respawning - if (((macroParams >> 8) & RESPAWN_INFO_DONT_RESPAWN) != RESPAWN_INFO_DONT_RESPAWN) { + if (((macroObject[MACRO_OBJ_PARAMS] >> 8) & RESPAWN_INFO_DONT_RESPAWN) != RESPAWN_INFO_DONT_RESPAWN) { // Spawn the new macro object. - newObj = spawn_object_abs_with_rot(&gMacroObjectDefaultParent, // Parent object - 0, // Unused - MacroObjectPresets[presetID].model, // Model ID - MacroObjectPresets[presetID].behavior, // Behavior address - macroObject[MACRO_OBJ_X], // X-position - macroObject[MACRO_OBJ_Y], // Y-position - macroObject[MACRO_OBJ_Z], // Z-position - 0, // X-rotation - convert_rotation(macroObject[MACRO_OBJ_Y_ROT]), // Y-rotation - 0 // Z-rotation + newObj = spawn_object_abs_with_rot(&gMacroObjectDefaultParent, // Parent object + 0, // Unused + MacroObjectPresets[presetID].model, // Model ID + MacroObjectPresets[presetID].behavior, // Behavior address + macroObject[MACRO_OBJ_X], // X-position + macroObject[MACRO_OBJ_Y], // Y-position + macroObject[MACRO_OBJ_Z], // Z-position + 0, // X-rotation + convert_rotation(macroObject[MACRO_OBJ_Y_ROT]), // Y-rotation + 0 // Z-rotation ); - newObj->oUnusedCoinParams = macroParams; - newObj->oBehParams = ((macroParams & 0x00FF) << 16) - + (macroParams & 0xFF00); - newObj->oBehParams2ndByte = macroParams & 0x00FF; - newObj->respawnInfoType = RESPAWN_INFO_TYPE_16; - newObj->respawnInfo = (macroObjList - 1); - newObj->parentObj = newObj; + + newObj->oUnusedCoinParams = macroObject[MACRO_OBJ_PARAMS]; + newObj->oBehParams = ((macroObject[MACRO_OBJ_PARAMS] & 0x00FF) << 16) + + (macroObject[MACRO_OBJ_PARAMS] & 0xFF00); + newObj->oBehParams2ndByte = macroObject[MACRO_OBJ_PARAMS] & 0x00FF; + newObj->respawnInfoType = RESPAWN_INFO_TYPE_16; + newObj->respawnInfo = macroObjList - 1; + newObj->parentObj = newObj; } } }