From 689ba90944a3e725b9002984a36c1633e163fdf8 Mon Sep 17 00:00:00 2001 From: Antonio Castelli Date: Sun, 6 Nov 2022 12:34:04 -0800 Subject: [PATCH] Make Object_3C a LevelObjectEntry. --- include/level_object_entries.h | 119 +++++++++++++++++++++++++++++++++ include/structs.h | 13 +--- src/object_functions.c | 73 ++++++++------------ src/object_functions.h | 21 ------ src/objects.c | 8 +-- src/racer.c | 4 +- src/unknown_0255E0.c | 36 +++------- 7 files changed, 167 insertions(+), 107 deletions(-) diff --git a/include/level_object_entries.h b/include/level_object_entries.h index 7fc76133..ec9a4ec8 100644 --- a/include/level_object_entries.h +++ b/include/level_object_entries.h @@ -140,6 +140,12 @@ typedef struct LevelObjectEntry_Door { typedef struct LevelObjectEntry_FogChanger { /* 0x00 */ LevelObjectEntryCommon common; /* 0x08 */ u8 unk8; + /* 0x09 */ u8 unk9; + /* 0x0A */ u8 unkA; + /* 0x0B */ u8 unkB; + /* 0x0C */ s16 unkC; + /* 0x0E */ s16 unkE; + /* 0x10 */ s16 unk10; } LevelObjectEntry_FogChanger; typedef struct LevelObjectEntry_AiNode { @@ -230,6 +236,12 @@ typedef struct LevelObjectEntry_Buoy_PirateShip { typedef struct LevelObjectEntry_Weather { /* 0x00 */ LevelObjectEntryCommon common; /* 0x08 */ s16 unk8; + /* 0x0A */ s16 unkA; + /* 0x0C */ s16 unkC; + /* 0x0E */ s16 unkE; + /* 0x10 */ u8 unk10; + /* 0x11 */ u8 unk11; + /* 0x12 */ s16 unk12; } LevelObjectEntry_Weather; typedef struct LevelObjectEntry_Bridge_WhaleRamp { @@ -413,6 +425,12 @@ typedef struct LevelObjectEntry_DynamicLightingObject { typedef struct LevelObjectEntry_EffectBox { /* 0x00 */ LevelObjectEntryCommon common; + /* 0x08 */ u8 unk8; + /* 0x09 */ u8 unk9; + /* 0x0A */ u8 unkA; + /* 0x0B */ u8 unkB; + /* 0x0C */ u8 unkC; + /* 0x0D */ u8 unkD; } LevelObjectEntry_EffectBox; typedef struct LevelObjectEntry_TrophyCab { @@ -494,6 +512,7 @@ typedef struct LevelObjectEntry_Snowball { typedef struct LevelObjectEntry_Teleport { /* 0x00 */ LevelObjectEntryCommon common; + /* 0x08 */ s8 unk8; } LevelObjectEntry_Teleport; typedef struct LevelObjectEntry_Lighthouse_RocketSignpost { @@ -509,6 +528,8 @@ typedef struct LevelObjectEntry_Windsail { typedef struct LevelObjectEntry_RangeTrigger { /* 0x00 */ LevelObjectEntryCommon common; + /* 0x08 */ u16 unk8; + /* 0x0A */ u16 unkA; } LevelObjectEntry_RangeTrigger; typedef struct LevelObjectEntry_Fireball_Octoweapon { @@ -569,4 +590,102 @@ typedef struct LevelObjectEntry8000E2B4 { s16 unkE; } LevelObjectEntry8000E2B4; +typedef struct LevelObjectEntry80011AD0 { + LevelObjectEntryCommon common; + u8 pad8[0x6]; + u8 unkD; +} LevelObjectEntry80011AD0; + +typedef struct LevelObjectEntry { + union { + LevelObjectEntry_Racer racer; + LevelObjectEntry_Scenery scenery; + LevelObjectEntry_Fish fish; + LevelObjectEntry_Animator animator; + LevelObjectEntry_Weapon weapon; + LevelObjectEntry_Smoke smoke; + LevelObjectEntry_Exit exit; + LevelObjectEntry_Audio audio; + LevelObjectEntry_AudioLine audioLine; + LevelObjectEntry_CameraControl cameraControl; + LevelObjectEntry_SetupPoint setupPoint; + LevelObjectEntry_Dino_Whale dino_whale; + LevelObjectEntry_Checkpoint checkpoint; + LevelObjectEntry_Door door; + LevelObjectEntry_FogChanger fogChanger; + LevelObjectEntry_AiNode aiNode; + LevelObjectEntry_WeaponBalloon weaponBalloon; + LevelObjectEntry_AudioSeqLine audioSeqLine; + LevelObjectEntry_BombExplosion bombExplosion; + LevelObjectEntry_WBalloonPop balloonPop; + LevelObjectEntry_Unknown25 unk25; + LevelObjectEntry_SkyControl skyControl; + LevelObjectEntry_AudioReverb audioReverb; + LevelObjectEntry_Torch_Mist torch_mist; + LevelObjectEntry_TexScroll texScroll; + LevelObjectEntry_ModeChange modeChange; + LevelObjectEntry_StopWatchMan tt; + LevelObjectEntry_Banana banana; + LevelObjectEntry_RgbaLight rgbaLighting; + LevelObjectEntry_Buoy_PirateShip buoy_pirateShip; + LevelObjectEntry_Weather weather; + LevelObjectEntry_Bridge_WhaleRamp bridge_whaleRamp; + LevelObjectEntry_RampSwitch rampSwitch; + LevelObjectEntry_SeaMonster seaMonster; + LevelObjectEntry_Bonus bonus; + LevelObjectEntry_LensFlare lensFlare; + LevelObjectEntry_LensFlareSwitch lensFlareSwitch; + LevelObjectEntry_CollectEgg collectEgg; + LevelObjectEntry_EggCreator eggCreator; + LevelObjectEntry_CharacterFlag characterFlag; + LevelObjectEntry_Animation animation; + LevelObjectEntry_InfoPoint infoPoint; + LevelObjectEntry_Trigger trigger; + LevelObjectEntry_AirZippers_WaterZippers airzipper_waterzipper; + LevelObjectEntry_Unknown58 unk58; + LevelObjectEntry_WaveGenerator waverGenerator; + LevelObjectEntry_Butterfly butterfly; + LevelObjectEntry_Parkwarden taj; + LevelObjectEntry_WorldKey worldKey; + LevelObjectEntry_BananaCreator bananaCreator; + LevelObjectEntry_TreasureSucker treasureSucker; + LevelObjectEntry_Log log; + LevelObjectEntry_LavaSpurt lavaSpurt; + LevelObjectEntry_PosArrow posArrow; + LevelObjectEntry_HitTester hitTester; + LevelObjectEntry_MidiFade midiFade; + LevelObjectEntry_DynamicLightingObject dynamicLighting; + LevelObjectEntry_EffectBox effectBox; + LevelObjectEntry_TrophyCab trophyCabinet; + LevelObjectEntry_Bubbler bubbler; + LevelObjectEntry_FlyCoin flyCoin; + LevelObjectEntry_GoldenBalloon goldenBalloon; + LevelObjectEntry_Laserbolt laserbolt; + LevelObjectEntry_Lasergun lasergun; + LevelObjectEntry_GroundZipper groundZipper; + LevelObjectEntry_OverridePos overridePos; + LevelObjectEntry_WizpigShip wizpigShip; + LevelObjectEntry_SilverCoin silverCoin; + LevelObjectEntry_Boost boost; + LevelObjectEntry_WardenSmoke tajSmoke; + LevelObjectEntry_Unknown94 unk94; + LevelObjectEntry_Unknown96 unk96; + LevelObjectEntry_Snowball snowball; + LevelObjectEntry_Teleport teleport; + LevelObjectEntry_Lighthouse_RocketSignpost lighthouse_signpost; + LevelObjectEntry_Windsail windsail; + LevelObjectEntry_RangeTrigger rangeTrigger; + LevelObjectEntry_Fireball_Octoweapon fireball_octoweapon; + LevelObjectEntry_Frog frog; + LevelObjectEntry_SilverCoinAdv2 silverCoinAdv2; + LevelObjectEntry_TTDoor ttDoor; + LevelObjectEntry_MidiFadePoint midiFadePoint; + LevelObjectEntry_OctoBubble octoBubble; + LevelObjectEntry_LevelName levelName; + LevelObjectEntry_Midichset midichset; + LevelObjectEntry8000E2B4 unk8000E2B4; + LevelObjectEntry80011AD0 unk80011AD0; + }; +} LevelObjectEntry; + #endif diff --git a/include/structs.h b/include/structs.h index 7fe980e6..84252d4b 100644 --- a/include/structs.h +++ b/include/structs.h @@ -5,6 +5,7 @@ #include "types.h" #include "enums.h" +#include "level_object_entries.h" // Stolen from PD // This hacky structure allows coords to be accessed using @@ -554,16 +555,6 @@ typedef struct LevelModel { /* 0x48 */ s32 modelSize; } LevelModel; -typedef struct Object_3C { - u8 pad0[0x2]; - s16 unk2; - s16 unk4; - s16 unk6; - s8 unk8; - u8 pad9[0x4]; - u8 unkD; -} Object_3C; - typedef enum { OBJECT_MODEL_TYPE_3D_MODEL, OBJECT_MODEL_TYPE_SPRITE_BILLBOARD, @@ -1387,7 +1378,7 @@ typedef struct ObjectSegment { /* 0x003B */ s8 unk3B; union { - /* 0x003C */ Object_3C* unk3C; + /* 0x003C */ LevelObjectEntry* level_entry; /* 0x003C */ f32 unk3C_f; } unk3C_a; diff --git a/src/object_functions.c b/src/object_functions.c index db84c225..54eeaab7 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -446,7 +446,7 @@ void obj_loop_effectbox(Object *obj, s32 speed) { Object **objList; Object_EffectBox *curObj64; s32 numberOfObjects; - Object_3C_80034B74 *obj3C; + LevelObjectEntry_EffectBox *level_entry; s32 i; f32 xDiff; f32 yDiff; @@ -458,13 +458,13 @@ void obj_loop_effectbox(Object *obj, s32 speed) { f32 temp4; f32 temp5; - obj3C = obj->segment.unk3C_a.unk3C; + level_entry = &obj->segment.unk3C_a.level_entry->effectBox; objList = get_racer_objects(&numberOfObjects); - temp0 = sine_s((obj3C->unkB << 8) * -1); - temp1 = cosine_s((obj3C->unkB << 8) * -1); - temp2 = obj3C->unk8 * 3; - temp3 = obj3C->unk9 * 3; - temp4 = obj3C->unkA * 3; + temp0 = sine_s((level_entry->unkB << 8) * -1); + temp1 = cosine_s((level_entry->unkB << 8) * -1); + temp2 = level_entry->unk8 * 3; + temp3 = level_entry->unk9 * 3; + temp4 = level_entry->unkA * 3; for (i = 0; i < numberOfObjects; i++) { xDiff = objList[i]->segment.trans.x_position - obj->segment.trans.x_position; @@ -476,8 +476,8 @@ void obj_loop_effectbox(Object *obj, s32 speed) { temp5 = (-xDiff * temp1) + (zDiff * temp0); if ((-temp4 < temp5) && (temp5 < temp4)) { curObj64 = &objList[i]->unk64->effect_box; - curObj64->unk1FE = obj3C->unkC; - curObj64->unk1FF = obj3C->unkD; + curObj64->unk1FE = level_entry->unkC; + curObj64->unk1FF = level_entry->unkD; temp5 = temp3 / 2; if ((temp5 < yDiff) && (curObj64->unk1FE == 1)) { temp5 = (1.0 - ((yDiff - temp5) / temp5)); @@ -552,13 +552,13 @@ void obj_loop_trophycab(Object *obj, s32 speed) { obj->unk7C.word = 1; if ((settings->trophies >> (((settings->worldId - 1) ^ 0) * 2)) & 3) { sp44.objectID = 128; - sp44.x = obj->segment.unk3C_a.unk3C->unk2; - sp44.y = obj->segment.unk3C_a.unk3C->unk4; - sp44.z = obj->segment.unk3C_a.unk3C->unk6; + sp44.x = obj->segment.unk3C_a.level_entry->trophyCabinet.common.x; + sp44.y = obj->segment.unk3C_a.level_entry->trophyCabinet.common.y; + sp44.z = obj->segment.unk3C_a.level_entry->trophyCabinet.common.z; sp44.size = 8; trophyObj = spawn_object(&sp44, 1); if (trophyObj) { - trophyObj->segment.unk3C_a.unk3C = (void *) 0; + trophyObj->segment.unk3C_a.level_entry = NULL; trophyObj->segment.trans.y_rotation = obj->segment.trans.y_rotation; } } @@ -684,7 +684,7 @@ void obj_loop_eggcreator(Object *obj, UNUSED s32 speed) { Object_EggCreator *someObj64 = &someObj->unk64->egg_creator; someObj64->unk4 = obj; obj->unk78 = someObj; - someObj->segment.unk3C_a.unk3C = 0; + someObj->segment.unk3C_a.level_entry = NULL; } } } @@ -1441,9 +1441,9 @@ void obj_init_teleport(Object *obj, UNUSED LevelObjectEntry_Teleport *entry) { void obj_loop_teleport(Object *obj, UNUSED s32 speed) { if (obj->unk78 != 0) { - Object_3C_80038DC4 *temp = obj->segment.unk3C_a.unk3C; + LevelObjectEntry_Teleport *level_entry = &obj->segment.unk3C_a.level_entry->teleport; if (obj->unk4C->unk13 < 0x78) { - func_8006F338(temp->unk8); + func_8006F338(level_entry->unk8); obj->unk78 = 0; play_sound_global(SOUND_WHOOSH2, NULL); func_80000FDC(SOUND_VOICE_TT_FUTURE_FUN_LAND, 0, 1.0f); @@ -1749,7 +1749,7 @@ void obj_init_goldenballoon(Object *obj, LevelObjectEntry_GoldenBalloon *entry) } void obj_loop_goldenballoon(Object *obj, s32 speed) { - Object_3C *obj3C; + LevelObjectEntry *levelEntry; Object_4C *obj4C; Object_Racer *racer; Object_GoldenBalloon *obj64; @@ -1772,8 +1772,8 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { } speedf = sp2C; settings = get_settings(); - obj3C = obj->segment.unk3C_a.unk3C; - flag = 0x10000 << obj3C->unk8; + levelEntry = obj->segment.unk3C_a.level_entry; + flag = 0x10000 << levelEntry->goldenBalloon.unk8; if (settings->courseFlagsPtr[settings->courseId] & flag) { if (obj->unk7C.word > 0) { obj->unk74 = 2; @@ -2046,7 +2046,7 @@ void obj_loop_bananacreator(Object *obj, s32 speed) { newBananaObj = spawn_object(&newEntry, 1); obj->unk7C.word = 1; if (newBananaObj) { - newBananaObj->segment.unk3C_a.unk3C = 0; + newBananaObj->segment.unk3C_a.level_entry = NULL; newBananaObj64 = &newBananaObj->unk64->banana; newBananaObj64->spawner = obj; func_8003FC44(obj->segment.trans.x_position, obj->segment.trans.y_position - 14.0f, obj->segment.trans.z_position, 44, 34, 0.25f, 0); @@ -2272,7 +2272,7 @@ void func_8003FC44(f32 arg0, f32 arg1, f32 arg2, s32 arg3, s32 arg4, f32 arg5, s someObj = spawn_object(&sp24, 1); if (someObj != NULL) { someObj->segment.trans.scale *= 3.5 * arg5; - someObj->segment.unk3C_a.unk3C = NULL; + someObj->segment.unk3C_a.level_entry = NULL; someObj->segment.x_velocity = 0.0f; someObj->segment.y_velocity = 0.0f; someObj->segment.z_velocity = 0.0f; @@ -2413,21 +2413,6 @@ void obj_init_weather(Object *obj, LevelObjectEntry_Weather *entry) { #ifdef NON_EQUIVALENT void func_800ABC5C(s32, s32, s32, s32, s32, s32); /* extern */ -typedef struct Object_3C_Weather { - u8 pad0[0x2]; - s16 unk2; - s16 unk4; - s16 unk6; - s8 unk8; - u8 unk9; - s16 unkA; - s16 unkC; - s16 unkE; - u8 unk10; - u8 unk11; - s16 unk12; -} Object_3C_Weather; - // Has stack & regalloc issues. void obj_loop_weather(Object *obj, s32 speed) { s32 sp54; @@ -2436,7 +2421,7 @@ void obj_loop_weather(Object *obj, s32 speed) { Object **objects; Object **lastObj; Object *curObj; - Object_3C_Weather *obj3c; + LevelObjectEntry_Weather *level_entry; f32 temp_f0; f32 new_var; f32 temp_f2; @@ -2454,9 +2439,9 @@ void obj_loop_weather(Object *obj, s32 speed) { temp_f0 = obj->segment.trans.x_position - curObj->segment.trans.x_position; temp_f2 = obj->segment.trans.z_position - curObj->segment.trans.z_position; new_var = obj->unk78f; - obj3c = obj->segment.unk3C_a.unk3C; + level_entry = &obj->segment.unk3C_a.level_entry->weather; if (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) <= (new_var * 1.0f)){ - func_800ABC5C(obj3c->unkA * 256, obj3c->unkC * 256, obj3c->unkE * 256, obj3c->unk10 * 257, obj3c->unk11 * 257, (s32) obj3c->unk12); + func_800ABC5C(level_entry->unkA * 256, level_entry->unkC * 256, level_entry->unkE * 256, level_entry->unk10 * 257, level_entry->unk11 * 257, (s32) level_entry->unk12); } } } @@ -2618,7 +2603,7 @@ void obj_loop_bubbler(Object *obj, s32 speed) { void obj_init_boost(Object *obj, LevelObjectEntry_Boost *entry) { obj->unk64 = (s32)get_misc_asset(MISC_ASSET_UNK14) + (entry->unk8[0] << 7); - obj->segment.unk3C_a.unk3C = NULL; + obj->segment.unk3C_a.level_entry = NULL; } void obj_init_unknown94(UNUSED Object *obj, UNUSED LevelObjectEntry_Unknown94 *entry, UNUSED s32 arg2) { @@ -2632,12 +2617,12 @@ void obj_init_rangetrigger(UNUSED Object *obj, UNUSED LevelObjectEntry_RangeTrig void obj_loop_rangetrigger(Object *obj, s32 speed) { UNUSED s32 temp; - Object_3C_80042178 *obj3C; + LevelObjectEntry_RangeTrigger *level_entry; unk80042178 sp20; - obj3C = obj->segment.unk3C_a.unk3C; - if (func_80016DE8(obj->segment.trans.x_position, 0, obj->segment.trans.z_position, (f32)obj3C->unk8, 1, &sp20) > 0) { - obj->unk74 = obj3C->unkA; + level_entry = &obj->segment.unk3C_a.level_entry->rangeTrigger; + if (func_80016DE8(obj->segment.trans.x_position, 0, obj->segment.trans.z_position, (f32)level_entry->unk8, 1, &sp20) > 0) { + obj->unk74 = level_entry->unkA; } else { obj->unk74 = 0; } diff --git a/src/object_functions.h b/src/object_functions.h index 1da61e4b..19dacc20 100644 --- a/src/object_functions.h +++ b/src/object_functions.h @@ -24,16 +24,6 @@ typedef struct unk80034B4C { s32 unk78; } unk80034B4C; -typedef struct Object_3C_80034B74 { - u8 pad0[0x8]; - u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - u8 unkC; - u8 unkD; -} Object_3C_80034B74; - typedef struct unk8003564C { s8 unk0; s8 unk1; @@ -92,11 +82,6 @@ typedef struct unk80038B74 { s8 unk8; } unk80038B74; -typedef struct Object_3C_80038DC4 { - u8 pad0[8]; - s8 unk8; -} Object_3C_80038DC4; - typedef struct unk80039160 { u8 pad0[0x78]; s32 unk78; @@ -186,12 +171,6 @@ typedef struct unk8004210C { s32 unk64; } unk8004210C; -typedef struct Object_3C_80042178 { - u8 pad0[8]; - u16 unk8; - u16 unkA; -} Object_3C_80042178; - typedef struct unk80042A1C { u8 pad0[0x78]; f32 unk78; diff --git a/src/objects.c b/src/objects.c index 222215cc..5b84adf0 100644 --- a/src/objects.c +++ b/src/objects.c @@ -674,7 +674,7 @@ void func_8000E2B4(void) { if (get_filtered_cheats() & CHEAT_SMALL_CHARACTERS) { player->segment.trans.scale *= 0.714f; } - player->segment.unk3C_a.unk3C = 0; + player->segment.unk3C_a.level_entry = NULL; player->segment.trans.y_rotation = D_8011AD4C; player->segment.trans.y_position = D_8011AD48; } @@ -702,10 +702,10 @@ GLOBAL_ASM("asm/non_matchings/objects/func_8000E4E8.s") s32 func_8000E558(Object *arg0){ s32 temp_v0; s32 new_var, new_var2; - if (arg0->segment.unk3C_a.unk3C == 0) { + if (arg0->segment.unk3C_a.level_entry == NULL) { return TRUE; } - temp_v0 = arg0->segment.unk3C_a.unk3C; + temp_v0 = arg0->segment.unk3C_a.level_entry; new_var2 = D_8011AE98[0]; if ((temp_v0 >= new_var2) && (((D_8011AEA0 * 8) + new_var2) >= temp_v0)) { return FALSE; @@ -1037,7 +1037,7 @@ void func_80011AD0(Object *this) { break; case 3: //L80011BB4 - tmp_f0 = this->segment.unk3C_a.unk3C->unkD; + tmp_f0 = this->segment.unk3C_a.level_entry->unk80011AD0.unkD; offset = (this->unk64->obj80011AD0.unkFC * 6); offset *= 5; offset *= 2; diff --git a/src/racer.c b/src/racer.c index f61e4630..a6ecd8e4 100644 --- a/src/racer.c +++ b/src/racer.c @@ -1496,7 +1496,7 @@ void update_player_racer(Object* obj, s32 updateRate) { newObject.size = 8; tempRacer->unk15C = spawn_object(&newObject, 1); if (tempRacer->unk15C) { - tempRacer->unk15C->segment.unk3C_a.unk3C = 0; + tempRacer->unk15C->segment.unk3C_a.level_entry = NULL; tempRacer->unk15C->segment.unk38.half.lower = 128; } } @@ -3623,7 +3623,7 @@ void racer_enter_door(Object_Racer* racer, s32 updateRate) { if (racer->transitionTimer > 0) { racer->transitionTimer -= updateRate; if (racer->transitionTimer <= 0) { - func_8006D968((s8* ) racer->unk108->segment.unk3C_a.unk3C); + func_8006D968((s8* ) racer->unk108->segment.unk3C_a.level_entry); racer->transitionTimer = 0; } } diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index 1fff4755..65637519 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -484,7 +484,7 @@ void func_80027FC4(s32 arg0) { sp20.objectID = arg0; D_8011B0B8 = spawn_object(&sp20, 2); if (D_8011B0B8 != 0) { - D_8011B0B8->segment.unk3C_a.unk3C = 0; + D_8011B0B8->segment.unk3C_a.level_entry = NULL; D_8011B0B8->unk4A = -1; } } @@ -1348,20 +1348,6 @@ void func_8003093C(s32 arg0) { #ifdef NON_EQUIVALENT //unk8011D388 D_8011D388[4]; -typedef struct Object_3C_FogChanger { - u8 pad0[0x2]; - s16 unk2; - s16 unk4; - s16 unk6; - s8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - s16 unkC; - s16 unkE; - s16 unk10; -} Object_3C_FogChanger; - void obj_loop_fogchanger(Object* obj) { s32 temp_v0; s32 index; @@ -1372,13 +1358,13 @@ void obj_loop_fogchanger(Object* obj) { s32 temp_a3, temp_t0, temp_t1, temp_a1; s32 temp; Object **sp40; - Object_3C_FogChanger *sp44; + LevelObjectEntry_FogChanger *level_entry; Object *tempObj; unk8011D388 *temp_v0_3; ObjectSegment *phi_s3; sp40 = NULL; - sp44 = obj->segment.unk3C_a.unk3C; + level_entry = &obj->segment.unk3C_a.level_entry->fogChanger; phi_s3 = NULL; // check_if_showing_cutscene_camera() returns the bool gCutsceneCameraActive. 1 if camera is controlled by cutscene, 0 if controlled by racer. @@ -1408,15 +1394,15 @@ void obj_loop_fogchanger(Object* obj) { x -= obj->segment.trans.x_position; z -= obj->segment.trans.z_position; if (((x * x) + (z * z)) < obj->unk78f) { - phi_a0 = sp44->unkC; - phi_v1 = sp44->unkE; - temp_a3 = sp44->unk9; - temp_t0 = sp44->unkA; - temp_t1 = sp44->unkB; - temp_a1 = sp44->unk10; + phi_a0 = level_entry->unkC; + phi_v1 = level_entry->unkE; + temp_a3 = level_entry->unk9; + temp_t0 = level_entry->unkA; + temp_t1 = level_entry->unkB; + temp_a1 = level_entry->unk10; if (phi_v1 < phi_a0) { - phi_v1 = sp44->unkC; - phi_a0 = sp44->unkE; + phi_v1 = level_entry->unkC; + phi_a0 = level_entry->unkE; } if (phi_v1 >= 0x400) { phi_v1 = 0x3FF;