diff --git a/include/structs.h b/include/structs.h index eb049bcf..67834438 100644 --- a/include/structs.h +++ b/include/structs.h @@ -781,7 +781,7 @@ typedef struct Object_Exit { typedef struct Object_Racer { /* 0x000 */ s16 playerIndex; // -1 = AI Controlled, 0 to 3 = Object controlled - /* 0x002 */ u8 pad2; + /* 0x002 */ u8 unk2; /* 0x003 */ s8 characterId; // Affects minimap color, horn, voice, etc. /* 0x004 */ u8 pad4[0x20]; /* 0x024 */ s32 unk24; @@ -1039,6 +1039,19 @@ typedef struct Object_Bridge_WhaleRamp { /* 0x4 */ s32 unk4; } Object_Bridge_WhaleRamp; +typedef struct Object_80011AD0 { + /* 0x00 */ u8 pad0[0x20]; + /* 0x20 */ u32 unk20; + /* 0x24 */ u32 unk24; + /* 0x28 */ u8 pad28[0x48]; + /* 0x70 */ u8 unk70; + /* 0x71 */ u8 pad71[0x3]; + /* 0x74 */ f32 unk74; + /* 0x78 */ u8 pad78[0x80]; + /* 0xF8 */ u32 unkF8; + /* 0xFC */ u8 unkFC; +} Object_80011AD0; + typedef struct Object_64 { union { Object_LaserGun laser_gun; @@ -1080,6 +1093,7 @@ typedef struct Object_64 { Object_Taj taj; Object_TT tt; Object_Bridge_WhaleRamp bridge_whale_ramp; + Object_80011AD0 obj80011AD0; }; } Object_64; diff --git a/src/object_functions.c b/src/object_functions.c index 42c6cc98..fbb3635f 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -1819,7 +1819,7 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { obj4C = obj->unk4C; if ((obj4C->unk13 < 45) && (someBool == FALSE)) { racerObj = obj4C->unk0; - if (racerObj && (racerObj->segment.header->behaviorId == 1) && (racerObj->unk64->racer->unk0 == 0)) { + if (racerObj && (racerObj->segment.header->behaviorId == 1) && (racerObj->unk64->racer.playerIndex == 0)) { settings->balloonsPtr[settings->worldId]++; if (settings->worldId != 0) { settings->balloonsPtr[0]++; @@ -1832,7 +1832,7 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { func_800AFC3C(obj, speed); } } - obj64 = obj->unk64->golden_balloon; + obj64 = &obj->unk64->golden_balloon; obj->segment.unk3B = 0; obj64->unk14 = 0.0f; if (obj->segment.unk38.half.lower < 255) { @@ -2478,7 +2478,7 @@ void obj_loop_weather(Object *obj, s32 speed) { do { curObj = objects[1]; curObj64 = &curObj->unk64->racer; - } while (((++objects) < lastObj) && (sp54 != curObj64->unk0)); + } while (((++objects) < lastObj) && (sp54 != curObj64->playerIndex)); 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; diff --git a/src/objects.c b/src/objects.c index db679de6..0116830a 100644 --- a/src/objects.c +++ b/src/objects.c @@ -620,7 +620,7 @@ void func_8000E2B4(void) { LevelObjectEntry8000E2B4 sp2C; Settings *settings; Object *player; - Object_64 *player_64; + Object_Racer *player_64; s16 object_id; if (D_8011AD44 == 0) { @@ -653,13 +653,13 @@ void func_8000E2B4(void) { (*gObjectStructArrayPtr)[0] = (s32) player; *D_8011AEEC = (s32) player; *D_8011AEE8 = player; - player_64 = player->unk64; + player_64 = &player->unk64->racer; player_64->unk1D6 = (s8) D_8011AD45; - player_64->unk0_a.unk0_b.unk2 = (u8)0; + player_64->unk2 = (u8)0; player_64->unk1D7 = (s8) D_8011AD45; - player_64->unk0_a.unk0_b.unk0 = (u16)0; + player_64->playerIndex = (u16)0; player_64->unk118 = 0; - player_64->unk0_a.unk0_b.unk3 = (s8) settings->racers[0].character; + player_64->characterId = (s8) settings->racers[0].character; if (get_filtered_cheats() & CHEAT_BIG_CHARACTERS) { player->segment.trans.scale *= 1.4f; } @@ -850,16 +850,16 @@ void func_80011AD0(Object *this) { //L80011B10 if (this->unk7C.word < 0) break; - func_80011960(this, this->unk64->unk20, 4, this->unk64, - 2, this->unk64->unk24, 11, 0, 1.0f); + func_80011960(this, this->unk64->obj80011AD0.unk20, 4, this->unk64, + 2, this->unk64->obj80011AD0.unk24, 11, 0, 1.0f); break; case 61: //L80011B58 - offset = (this->unk64->unkFC * 6); + offset = (this->unk64->obj80011AD0.unkFC * 6); offset *= 5; offset = offset * 2 + 0x80; - func_80011960(this, offset, 6, this->unk64, 8, this->unk64->unkF8, 10, 0, 1.0f); + func_80011960(this, offset, 6, this->unk64, 8, this->unk64->obj80011AD0.unkF8, 10, 0, 1.0f); break; case 3: //L80011BB4 @@ -867,16 +867,16 @@ void func_80011AD0(Object *this) { if (this->segment.unk3C_a.unk3C->unkD < 0) { tmp_f0 += 4294967296.0f; } - offset = (this->unk64->unkFC * 6); + offset = (this->unk64->obj80011AD0.unkFC * 6); offset *= 5; offset = offset * 2 + 0x80; - func_80011960(this, offset, 6, this->unk64, 8, this->unk64->unkF8, 26, 0, tmp_f0 * D_800E5550); + func_80011960(this, offset, 6, this->unk64, 8, this->unk64->obj80011AD0.unkF8, 26, 0, tmp_f0 * D_800E5550); break; case 89: //L80011C38 if (this->unk78 == 0) break; - if (this->unk64->unk70 > 0 || 0.0f < this->unk64->unk74) { + if (this->unk64->obj80011AD0.unk70 > 0 || 0.0f < this->unk64->obj80011AD0.unk74) { func_800135B8(this); } break; diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index 252c9a5c..33efbc21 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -181,6 +181,7 @@ s32 func_800249E0(s32 arg0) { } #ifdef NON_EQUIVALENT +void func_8002C0C4(s32 modelId); void func_800249F0(u32 arg0, u32 arg1, s32 arg2, u32 arg3, u32 arg4, u32 arg5, u32 arg6) { s32 i; s32 tmp_a2; diff --git a/src/unknown_032760.c b/src/unknown_032760.c index 346b6a42..65246d53 100644 --- a/src/unknown_032760.c +++ b/src/unknown_032760.c @@ -149,8 +149,8 @@ void func_80032C7C(Object *object) { s16 phi_a0, phi_a1; unk800DC950 *entry; - if (object->header->unk3D == 0) { - switch (object->header->modelType) { + if (object->segment.header->unk3D == 0) { + switch (object->segment.header->modelType) { case OBJECT_MODEL_TYPE_3D_MODEL: // 3D Model sp64 = 2; break; @@ -164,9 +164,9 @@ void func_80032C7C(Object *object) { break; } - sp82 = object->trans.x_position; - sp80 = object->trans.y_position; - sp7E = object->trans.z_position; + sp82 = object->segment.trans.x_position; + sp80 = object->segment.trans.y_position; + sp7E = object->segment.trans.z_position; D_800DC968 = 0; for (i = 0; i < D_800DC95C; i++) { entry = D_800DC950[i]; @@ -183,9 +183,9 @@ void func_80032C7C(Object *object) { D_800DC968 = D_800DC968 + 1; } } else { - D_8011D4C4 = entry->unk10 - object->trans.x_position; - D_8011D4C8 = entry->unk14 - object->trans.y_position; - D_8011D4CC = entry->unk18 - object->trans.z_position; + D_8011D4C4 = entry->unk10 - object->segment.trans.x_position; + D_8011D4C8 = entry->unk14 - object->segment.trans.y_position; + D_8011D4CC = entry->unk18 - object->segment.trans.z_position; if (entry->unk0 == 2) { D_8011D4C8 = 0.0f; } @@ -199,7 +199,7 @@ void func_80032C7C(Object *object) { if (f20 > 0.0f) { f20 *= func_80033A14(entry); if (f20 > 0.0f) { - if (object->header->unk71 != 0) { + if (object->segment.header->unk71 != 0) { if (D_8011D4C0 > 0.0f) { temp = 1.0f / sqrtf(D_8011D4C0); D_8011D4C4 *= temp; @@ -227,7 +227,7 @@ void func_80032C7C(Object *object) { } } - if (object->header->unk71 != 0) { + if (object->segment.header->unk71 != 0) { if (D_800DC968 == 0) { object->unk54->unk7 = 0; object->unk54->unk11 = 0;