Revert macros struct funnies

sausage
This commit is contained in:
Fazana
2021-10-01 11:02:29 +01:00
parent 50941e0559
commit 5206fdbe2e

View File

@@ -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;
}
}
}