Making some sense of particle hell (#408)

* struct sizeofs

* snowblal struct is become dead

* Some debug string relocation

* printf

* Floaties

* rename four unused particle funcs

* Particle cleanup part 1

* oh god I'm actually starting to understand this system

* am straight blasting

* Update particles.c

* more

* l
This commit is contained in:
Fazana
2023-09-22 16:49:22 +01:00
committed by GitHub
parent f4197853b4
commit 888e4cde8b
17 changed files with 1243 additions and 1203 deletions
+1 -1
View File
@@ -354,7 +354,7 @@ glabel func_80010994
/* 011A9C 80010E9C 310A8000 */ andi $t2, $t0, 0x8000
/* 011AA0 80010EA0 11400005 */ beqz $t2, .L80010EB8
/* 011AA4 80010EA4 00000000 */ nop
/* 011AA8 80010EA8 0C02C8BF */ jal func_800B22FC
/* 011AA8 80010EA8 0C02C8BF */ jal handle_particle_movement
/* 011AAC 80010EAC AFA20044 */ sw $v0, 0x44($sp)
/* 011AB0 80010EB0 8FA20044 */ lw $v0, 0x44($sp)
/* 011AB4 80010EB4 00000000 */ nop
+1 -1
View File
@@ -470,7 +470,7 @@ glabel L8000EDE0
/* 00FCF8 8000F0F8 02402025 */ move $a0, $s2
/* 00FCFC 8000F0FC 000A5880 */ sll $t3, $t2, 2
/* 00FD00 8000F100 032B2821 */ addu $a1, $t9, $t3
/* 00FD04 8000F104 0C008D77 */ jal func_800235DC
/* 00FD04 8000F104 0C008D77 */ jal get_object_property_size
/* 00FD08 8000F108 AFA50048 */ sw $a1, 0x48($sp)
/* 00FD0C 8000F10C 8FAC0050 */ lw $t4, 0x50($sp)
/* 00FD10 8000F110 3C018012 */ lui $at, %hi(D_8011AE50) # $at, 0x8012
+2 -2
View File
@@ -193,7 +193,7 @@ glabel func_800AE728
/* 0AF5F8 800AE9F8 02602825 */ move $a1, $s3
/* 0AF5FC 800AE9FC 01F0C021 */ addu $t8, $t7, $s0
/* 0AF600 800AEA00 8F040044 */ lw $a0, 0x44($t8)
/* 0AF604 800AEA04 0C02BB85 */ jal func_800AEE14
/* 0AF604 800AEA04 0C02BB85 */ jal generate_particle_shape_triangle
/* 0AF608 800AEA08 02803025 */ move $a2, $s4
/* 0AF60C 800AEA0C 3C19800E */ lui $t9, %hi(D_800E2E4C) # $t9, 0x800e
/* 0AF610 800AEA10 8F392E4C */ lw $t9, %lo(D_800E2E4C)($t9)
@@ -225,7 +225,7 @@ glabel func_800AE728
/* 0AF670 800AEA70 02602825 */ move $a1, $s3
/* 0AF674 800AEA74 01F0C021 */ addu $t8, $t7, $s0
/* 0AF678 800AEA78 8F040044 */ lw $a0, 0x44($t8)
/* 0AF67C 800AEA7C 0C02BBAE */ jal func_800AEEB8
/* 0AF67C 800AEA7C 0C02BBAE */ jal generate_particle_shape_quad
/* 0AF680 800AEA80 02803025 */ move $a2, $s4
/* 0AF684 800AEA84 3C19800E */ lui $t9, %hi(D_800E2E50) # $t9, 0x800e
/* 0AF688 800AEA88 8F392E50 */ lw $t9, %lo(D_800E2E50)($t9)
File diff suppressed because it is too large Load Diff
+9 -9
View File
@@ -27,7 +27,7 @@ glabel func_800B26E0
/* 0B3324 800B2724 8FA70030 */ lw $a3, 0x30($sp)
/* 0B3328 800B2728 29010002 */ slti $at, $t0, 2
/* 0B332C 800B272C 102001CE */ beqz $at, .L800B2E68
/* 0B3330 800B2730 3C058012 */ lui $a1, %hi(D_80127C80) # $a1, 0x8012
/* 0B3330 800B2730 3C058012 */ lui $a1, %hi(gParticleUpdateRate) # $a1, 0x8012
/* 0B3334 800B2734 8FA90034 */ lw $t1, 0x34($sp)
/* 0B3338 800B2738 00000000 */ nop
/* 0B333C 800B273C 112001CA */ beqz $t1, .L800B2E68
@@ -166,7 +166,7 @@ glabel func_800B26E0
/* 0B3528 800B2928 E7AC004C */ swc1 $f12, 0x4c($sp)
.L800B292C:
/* 0B352C 800B292C 106000CE */ beqz $v1, .L800B2C68
/* 0B3530 800B2930 3C058012 */ lui $a1, %hi(D_80127C80) # $a1, 0x8012
/* 0B3530 800B2930 3C058012 */ lui $a1, %hi(gParticleUpdateRate) # $a1, 0x8012
/* 0B3534 800B2934 90D80068 */ lbu $t8, 0x68($a2)
/* 0B3538 800B2938 C7A40044 */ lwc1 $f4, 0x44($sp)
/* 0B353C 800B293C 170000CA */ bnez $t8, .L800B2C68
@@ -313,9 +313,9 @@ glabel func_800B26E0
/* 0B3768 800B2B68 C7A80044 */ lwc1 $f8, 0x44($sp)
/* 0B376C 800B2B6C 8C6C0008 */ lw $t4, 8($v1)
/* 0B3770 800B2B70 46082401 */ sub.s $f16, $f4, $f8
/* 0B3774 800B2B74 3C058012 */ lui $a1, %hi(D_80127C80) # $a1, 0x8012
/* 0B3774 800B2B74 3C058012 */ lui $a1, %hi(gParticleUpdateRate) # $a1, 0x8012
/* 0B3778 800B2B78 4448F800 */ cfc1 $t0, $31
/* 0B377C 800B2B7C 24A57C80 */ addiu $a1, %lo(D_80127C80) # addiu $a1, $a1, 0x7c80
/* 0B377C 800B2B7C 24A57C80 */ addiu $a1, %lo(gParticleUpdateRate) # addiu $a1, $a1, 0x7c80
/* 0B3780 800B2B80 35010003 */ ori $at, $t0, 3
/* 0B3784 800B2B84 38210002 */ xori $at, $at, 2
/* 0B3788 800B2B88 44C1F800 */ ctc1 $at, $31
@@ -503,9 +503,9 @@ glabel func_800B26E0
/* 0B3A5C 800B2E5C A0CB0068 */ sb $t3, 0x68($a2)
.L800B2E60:
/* 0B3A60 800B2E60 10000041 */ b .L800B2F68
/* 0B3A64 800B2E64 24A57C80 */ addiu $a1, %lo(D_80127C80) # addiu $a1, $a1, 0x7c80
/* 0B3A64 800B2E64 24A57C80 */ addiu $a1, %lo(gParticleUpdateRate) # addiu $a1, $a1, 0x7c80
.L800B2E68:
/* 0B3A68 800B2E68 24A57C80 */ addiu $a1, %lo(D_80127C80) # addiu $a1, $a1, 0x7c80
/* 0B3A68 800B2E68 24A57C80 */ addiu $a1, %lo(gParticleUpdateRate) # addiu $a1, $a1, 0x7c80
/* 0B3A6C 800B2E6C 8CA90000 */ lw $t1, ($a1)
/* 0B3A70 800B2E70 84CD003A */ lh $t5, 0x3a($a2)
/* 0B3A74 800B2E74 00C02025 */ move $a0, $a2
@@ -519,10 +519,10 @@ glabel func_800B26E0
/* 0B3A94 800B2E94 0C003FEE */ jal gParticlePtrList_addObject
/* 0B3A98 800B2E98 AFA60050 */ sw $a2, 0x50($sp)
/* 0B3A9C 800B2E9C 8FA30038 */ lw $v1, 0x38($sp)
/* 0B3AA0 800B2EA0 3C058012 */ lui $a1, %hi(D_80127C80) # $a1, 0x8012
/* 0B3AA0 800B2EA0 3C058012 */ lui $a1, %hi(gParticleUpdateRate) # $a1, 0x8012
/* 0B3AA4 800B2EA4 8FA60050 */ lw $a2, 0x50($sp)
/* 0B3AA8 800B2EA8 1000002F */ b .L800B2F68
/* 0B3AAC 800B2EAC 24A57C80 */ addiu $a1, %lo(D_80127C80) # addiu $a1, $a1, 0x7c80
/* 0B3AAC 800B2EAC 24A57C80 */ addiu $a1, %lo(gParticleUpdateRate) # addiu $a1, $a1, 0x7c80
.L800B2EB0:
/* 0B3AB0 800B2EB0 84C20060 */ lh $v0, 0x60($a2)
/* 0B3AB4 800B2EB4 00000000 */ nop
@@ -588,7 +588,7 @@ glabel func_800B26E0
/* 0B3B98 800B2F98 00000000 */ nop
/* 0B3B9C 800B2F9C 1B000004 */ blez $t8, .L800B2FB0
/* 0B3BA0 800B2FA0 8FBF0014 */ lw $ra, 0x14($sp)
/* 0B3BA4 800B2FA4 0C02CBEF */ jal func_800B2FBC
/* 0B3BA4 800B2FA4 0C02CBEF */ jal set_particle_texture_frame
/* 0B3BA8 800B2FA8 00C02025 */ move $a0, $a2
/* 0B3BAC 800B2FAC 8FBF0014 */ lw $ra, 0x14($sp)
.L800B2FB0:
+2 -2
View File
@@ -467,8 +467,8 @@ typedef struct LevelObjectEntry_TrophyCab {
typedef struct LevelObjectEntry_Bubbler {
/* 0x00 */ LevelObjectEntryCommon common;
/* 0x08 */ u8 unk8;
/* 0x09 */ u8 unk9;
/* 0x08 */ u8 particlePropertyID;
/* 0x09 */ u8 particleBehaviourID;
/* 0x0A */ u16 unkA;
} LevelObjectEntry_Bubbler;
+35 -69
View File
@@ -792,7 +792,7 @@ typedef struct ObjectInteraction {
/* 0x14 */ s16 flags;
/* 0x16 */ s8 unk16;
/* 0x17 */ s8 unk17;
/*0x18*/ s32 pad[4];
/* 0x18 */ s32 pad[4];
} ObjectInteraction;
typedef struct ShadowData {
@@ -865,8 +865,6 @@ typedef struct Object_60 {
s8 *unk2C;
} Object_60;
struct Object;
typedef struct Object_LaserGun {
/* 0x00 */ s32 unk0;
/* 0x00 */ s32 unk4;
@@ -935,6 +933,7 @@ typedef struct Object_Butterfly {
/* 0x104 */ s16 unk104;
/* 0x106 */ s16 unk106;
/* 0x108 */ f32 unk108;
/* 0x10C */ f32 unk10C;
} Object_Butterfly;
typedef struct Object_Fish {
@@ -949,6 +948,11 @@ typedef struct Object_Fish {
/* 0x104 */ s16 unk104;
/* 0x106 */ s16 unk106;
/* 0x108 */ f32 unk108;
/* 0x10C */ f32 unk10C;
/* 0x110 */ f32 unk110;
/* 0x114 */ f32 unk114;
/* 0x118 */ f32 unk118;
/* 0x11c */ f32 unk11C;
} Object_Fish;
typedef struct Object_Boost {
@@ -987,14 +991,6 @@ typedef struct Object_CharacterFlag {
/* 0x24 */ TextureHeader *texture;
} Object_CharacterFlag;
typedef struct Object_Snowball {
/* 0x00 */ u8 pad0[0x20];
/* 0x20 */ u32 soundMask;
/* 0x24 */ s16 unk24;
/* 0x28 */ u8 pad28[0x12];
/* 0x38 */ s8 unk38;
} Object_Snowball;
typedef struct Object_AnimCamera {
/* 0x00 */ u8 pad0[0x30];
/* 0x30 */ s8 unk30;
@@ -1016,6 +1012,7 @@ typedef struct Object_TTDoor {
/* 0x10 */ u8 pad10[2];
/* 0x12 */ u8 unk12;
/* 0x13 */ s8 unk13;
/* 0x14 */ s32 unk14;
} Object_TTDoor;
typedef struct Object_WorldKey {
@@ -1453,7 +1450,15 @@ typedef struct Object_80021400_64 {
} Object_80021400_64;
typedef struct Object_Log {
s32 unk0;
/* 0x00 */ s16 unk0;
/* 0x02 */ u8 unk2;
/* 0x04 */ u8 unk3;
/* 0x04 */ u16 unk4;
/* 0x06 */ u16 unk6;
/* 0x08 */ u16 unk8;
/* 0x0A */ u16 unkA;
/* 0x0C */ u16 unkC;
/* 0x0E */ s8 unkE[2];
} Object_Log;
typedef struct Object_Fireball_Octoweapon {
@@ -1462,12 +1467,18 @@ typedef struct Object_Fireball_Octoweapon {
} Object_Fireball_Octoweapon;
typedef struct Object_AnimatedObject {
u8 pad0[0x28];
u8 pad0[0x20];
/* 0x20 */ u32 soundMask;
/* 0x24 */ s16 unk24;
/* 0x26 */ s16 unk26;
s16 unk28;
u8 pad2A[0xC];
s16 unk36;
u8 pad38[0x2];
s8 unk38;
s8 unk39;
s8 unk3A;
s8 unk3B;
s8 pad3C[0xC];
} Object_AnimatedObject;
typedef struct Object_WizpigRocket {
@@ -1493,18 +1504,6 @@ typedef struct Object_8001E89C_64 {
/* 0x0C */ Object_8001E89C_64_C *unkC;
} Object_8001E89C_64;
typedef struct Object_800BEEB4_64 {
/* 0x00 */ s16 unk0;
/* 0x02 */ u8 unk2;
/* 0x04 */ u8 unk3;
/* 0x04 */ u16 unk4;
/* 0x06 */ u16 unk6;
/* 0x08 */ u16 unk8;
/* 0x0A */ u16 unkA;
/* 0x0C */ u16 unkC;
/* 0x0E */ s8 unkE[2];
} Object_800BEEB4_64;
typedef struct Object_64 {
union {
Object_Laser laser;
@@ -1521,7 +1520,6 @@ typedef struct Object_64 {
Object_CollectEgg egg;
Object_UnkId58 unkid58;
Object_CharacterFlag character_flag;
Object_Snowball snowball;
Object_AnimCamera anim_camera;
Object_InfoPoint info_point;
Object_TTDoor tt_door;
@@ -1551,7 +1549,6 @@ typedef struct Object_64 {
Object_AnimatedObject animatedObject;
Object_WizpigRocket wizpigRocket;
Object_8001E89C_64 obj8001E89C_64;
Object_800BEEB4_64 obj800BEEB4_64;
};
} Object_64;
@@ -1590,9 +1587,9 @@ typedef struct Object_6C {
/* Size: 0xA0 bytes */
typedef struct ParticleBehavior {
s32 flags;
f32 unk4;
f32 unk8;
f32 unkC;
f32 velX;
f32 velY;
f32 velZ;
f32 unk10;
s16 unk14;
s16 unk16;
@@ -1614,17 +1611,16 @@ typedef struct ParticleBehavior {
f32 unk3C;
s16 unk40;
s16 unk42;
// These names are pretty bad, but they're better than nothing.
s16 angleOffsetY;
s16 angleOffsetX;
s16 angleOffsetZ;
s16 angleVelY;
s16 angleVelX;
s16 angleVelZ;
s16 unk4A;
s16 unk4C;
s16 unk4E;
f32 unk50;
f32 unk54;
f32 forwardVel;
s32 unk5C;
s32 behaviourFlags;
s32 gravityRange1;
s16 angleRangeY1;
s16 angleRangeX1;
@@ -1660,15 +1656,6 @@ typedef struct unk800AF29C_C_400 {
s16 unk16;
} unk800AF29C_C_400;
typedef struct unk800AF29C_C {
s16 unkC;
s16 unkE;
s16 unk10;
s16 unk12;
s16 unk14;
s16 unk16;
} unk800AF29C_C;
typedef struct unk800B2260_C {
s32 unk0;
s32 unk4;
@@ -1709,12 +1696,12 @@ typedef struct SegmentPropertiesObject {
typedef struct SegmentPropertiesParticle {
/* 0x002C */ s16 unk2C;
/* 0x002E */ s16 unk2E;
/* 0x002E */ s16 blockID;
/* 0x0030 */ f32 unk30;
/* 0x0034 */ f32 unk34;
/* 0x0038 */ u8 unk38;
/* 0x0039 */ u8 unk39;
/* 0x003A */ s16 unk3A;
/* 0x0039 */ u8 movementType;
/* 0x003A */ s16 destroyTimer;
} SegmentPropertiesParticle;
typedef struct SegmentPropertiesCamera {
@@ -1743,31 +1730,10 @@ typedef struct ObjectSegment {
/* 0x0040 */ ObjectHeader *header;
} ObjectSegment;
typedef struct unk800B0698_44_0 {
u8 pad0[0x3];
/* 0x04 */ s16 unk4;
/* 0x06 */ s16 unk6;
/* 0x08 */ Vertex *unk8;
/* 0x0C */ Triangle *unkC;
/* 0x10 */ u16 unk10;
/* 0x12 */ u16 unk12;
} unk800B0698_44_0;
typedef struct unk800B0698_44 {
union {
unk800B0698_44_0 *unk0Ptr;
s16 unk0;
struct unk800B0698_44_0 unk0struct;
};
} unk800B0698_44;
/* Size: 0x0630 bytes */
typedef struct Object {
/* 0x0000 */ ObjectSegment segment;
union {
/* 0x0044 */ Vertex *unk44;
/* 0x0044 */ unk800B0698_44 *unk44_0;
};
/* 0x0048 */ s16 behaviorId;
/* 0x004A */ s16 unk4A; // Upper byte is object ID, lower byte is object size.
/* 0x004C */ ObjectInteraction *interactObj; //player + 0x318
+5 -1
View File
@@ -394,6 +394,7 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl
for (i = 0; gTempAssetTable[i] != -1; i++) { }
i--;
if (levelId >= i) {
stubbed_printf("LOADLEVEL Error: Level out of range\n");
levelId = ASSET_LEVEL_CENTRALAREAHUB;
}
@@ -431,7 +432,9 @@ void load_level(s32 levelId, s32 numberOfPlayers, s32 entranceId, Vehicle vehicl
for (var_s0 = 0; levelId != someAsset[var_s0]; var_s0 += 2) { }
levelId = someAsset[var_s0 + 1];
entranceId = cutsceneId;
if (cutsceneId) {} // Fakematch
if (cutsceneId == CUTSCENE_NONE) {
stubbed_printf("BossLev problem\n");
}
}
}
if (gCurrentLevelHeader->race_type == RACETYPE_HUBWORLD) {
@@ -640,6 +643,7 @@ char *get_level_name(s32 levelId) {
u8 numberOfNullPointers = 0;
if (levelId < 0 || levelId >= gNumberOfLevelHeaders) {
stubbed_printf("AITABLE Error: Table out of range\n");
return NULL;
}
+5 -5
View File
@@ -1769,10 +1769,10 @@ void obj_init_snowball(Object *obj, UNUSED LevelObjectEntry_Snowball *entry) {
}
void obj_loop_snowball(Object *obj, s32 updateRate) {
Object_Snowball *obj64 = &obj->unk64->snowball;
Object_AnimatedObject *obj64 = &obj->unk64->animatedObject;
if (obj64->unk24 == 0) {
if (obj64->unk38 != 0) {
obj64->unk24 = (s16)(obj64->unk38 & 0xFF);
obj64->unk24 = (s16) (obj64->unk38 & 0xFF);
}
}
if (obj64->unk24 != 0) {
@@ -4603,7 +4603,7 @@ void obj_init_buoy_pirateship(Object *obj, UNUSED LevelObjectEntry_Buoy_PirateSh
*/
void obj_loop_buoy_pirateship(Object *obj, s32 updateRate) {
if (obj->unk64 != NULL) {
obj->segment.trans.y_position = func_800BEEB4(obj->unk64, updateRate);
obj->segment.trans.y_position = get_wave_height((Object_Log *) obj->unk64, updateRate);
}
obj->segment.animFrame += updateRate * 8;
}
@@ -4643,7 +4643,7 @@ void obj_loop_log(Object *obj, s32 updateRate) {
log = (Object_Log *) obj->unk64;
if (log != NULL) {
obj->segment.trans.y_position = func_800BEEB4((Object_64 *) log, updateRate);
obj->segment.trans.y_position = get_wave_height(log, updateRate);
} else {
obj->segment.trans.y_position = ((LevelObjectEntryCommon *) obj->segment.level_entry)->y;
}
@@ -4879,7 +4879,7 @@ void obj_init_midichset(Object *obj, LevelObjectEntry_Midichset *entry) {
/* Official name: bubblerInit */
void obj_init_bubbler(Object *obj, LevelObjectEntry_Bubbler *entry) {
func_800AF134((Particle *) obj->unk6C, entry->unk9, entry->unk8, 0, 0, 0);
func_800AF134((Particle *) obj->unk6C, entry->particleBehaviourID, entry->particlePropertyID, 0, 0, 0);
obj->properties.common.unk0 = entry->unkA;
}
+32 -29
View File
@@ -1094,7 +1094,7 @@ Object *spawn_object(LevelObjectEntryCommon *entry, s32 arg1) {
return NULL;
}
address = (u32 *) &curObj->unk68[curObj->segment.header->numberOfModelIds];
sizeOfobj = func_800235DC(curObj, (Object_64 *) address);
sizeOfobj = get_object_property_size(curObj, (Object_64 *) address);
address = (u32 *) ((uintptr_t) address + sizeOfobj);
D_8011AE50 = NULL;
D_8011AE54 = NULL;
@@ -1560,7 +1560,7 @@ void func_80010994(s32 updateRate) {
obj = gObjPtrList[i];
if (obj->segment.trans.flags & 0x8000) {
//Why is this object being treated as a Particle?
func_800B22FC((Particle *) obj, updateRate);
handle_particle_movement((Particle *) obj, updateRate);
}
}
}
@@ -2507,7 +2507,7 @@ GLOBAL_ASM("asm/non_matchings/objects/func_80012F94.s")
void render_object_parts(Object *obj) {
func_80012F94(obj);
if (obj->segment.trans.flags & OBJ_FLAGS_DEACTIVATED) {
func_800B3740((Particle *) obj, &gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, 0x8000);
render_particle((Particle *) obj, &gObjectCurrDisplayList, &gObjectCurrMatrix, &gObjectCurrVertexList, 0x8000);
} else {
if (obj->segment.header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) {
render_3d_model(obj);
@@ -4142,7 +4142,10 @@ void func_800235D0(s32 arg0) {
D_8011ADD5 = arg0;
}
s32 func_800235DC(Object *obj, Object_64 *obj64) {
/**
* Return the size of the object property struct intended to be used with the object.
*/
s32 get_object_property_size(Object *obj, Object_64 *obj64) {
s32 temp_v0;
s32 ret = 0;
@@ -4150,24 +4153,24 @@ s32 func_800235DC(Object *obj, Object_64 *obj64) {
switch (obj->segment.header->behaviorId) {
case BHV_RACER:
ret = 0x224;
ret = sizeof(Object_Racer);
break;
case BHV_DOOR:
case BHV_TT_DOOR:
ret = 0x18;
ret = sizeof(Object_TTDoor);
break;
case BHV_EXIT:
ret = 0x18;
ret = sizeof(Object_Exit);
break;
case BHV_ANIMATOR:
ret = 0xC;
ret = sizeof(Object_Animator);
break;
case BHV_AUDIO:
ret = 0x10;
ret = sizeof(Object_Audio);
break;
case BHV_AUDIO_LINE:
case BHV_AUDIO_LINE_2:
ret = 0x14;
ret = sizeof(Object_AudioLine);
break;
case BHV_AINODE:
ret = 0x1C;
@@ -4175,40 +4178,40 @@ s32 func_800235DC(Object *obj, Object_64 *obj64) {
case BHV_MODECHANGE:
case BHV_BONUS:
case BHV_TRIGGER:
ret = 0x18;
ret = sizeof(Object_Trigger);
break;
case BHV_AUDIO_REVERB:
ret = 0x6;
ret = sizeof(Object_AudioReverb);
break;
case BHV_TEXTURE_SCROLL:
ret = 0xC;
ret = sizeof(Object_TexScroll);
break;
case BHV_WEAPON:
case BHV_WEAPON_2:
ret = 0x20;
ret = sizeof(Object_Weapon);
break;
case BHV_WEAPON_BALLOON:
ret = 0x8;
ret = sizeof(Object_WeaponBalloon);
break;
case BHV_BANANA:
ret = 0xC;
ret = sizeof(Object_Banana);
break;
case BHV_BRIDGE_WHALE_RAMP:
ret = 0x8;
ret = sizeof(Object_Bridge_WhaleRamp);
break;
case BHV_SEA_MONSTER:
ret = 0x18;
break;
case BHV_COLLECT_EGG:
ret = 0xC;
ret = sizeof(Object_CollectEgg);
break;
case BHV_STOPWATCH_MAN:
case BHV_PARK_WARDEN:
case BHV_GOLDEN_BALLOON:
ret = 0x38;
ret = sizeof(Object_NPC);
break;
case BHV_LASER_GUN:
ret = 0x14;
ret = sizeof(Object_LaserGun);
break;
case BHV_OVERRIDE_POS:
ret = 0x10;
@@ -4235,13 +4238,13 @@ s32 func_800235DC(Object *obj, Object_64 *obj64) {
case BHV_DOOR_OPENER:
case BHV_PIG_ROCKETEER:
case BHV_WIZPIG_GHOSTS:
ret = 0x48;
ret = sizeof(Object_AnimatedObject);
break;
case BHV_MIDI_FADE:
ret = 0x44;
ret = sizeof(Object_MidiFade);
break;
case BHV_MIDI_FADE_POINT:
ret = 0x20;
ret = sizeof(Object_MidiFadePoint);
break;
case BHV_MIDI_CHANNEL_SET:
ret = 0x4;
@@ -4249,29 +4252,29 @@ s32 func_800235DC(Object *obj, Object_64 *obj64) {
case BHV_BUTTERFLY:
temp_v0 = 0x10 - ((s32) obj64 & 0xF);
obj->unk64 = (Object_64 *) &obj64->butterfly.triangles[0].verticesArray[temp_v0];
ret = (temp_v0 + 0x110);
ret = (temp_v0 + sizeof(Object_Butterfly));
break;
case BHV_FISH:
temp_v0 = 0x10 - ((s32) obj64 & 0xF);
obj->unk64 = (Object_64 *) &obj64->fish.triangles[0].verticesArray[temp_v0];
ret = (temp_v0 + 0x120);
ret = (temp_v0 + sizeof(Object_Fish));
break;
case BHV_CHARACTER_FLAG:
temp_v0 = 0x10 - ((s32) obj64 & 0xF);
obj->unk64 = (Object_64 *) &obj64->character_flag.triangles[0].verticesArray[temp_v0];
ret = (temp_v0 + 0x28);
ret = (temp_v0 + sizeof(Object_CharacterFlag));
break;
case BHV_UNK_5E:
ret = 0x60;
break;
case BHV_TROPHY_CABINET:
ret = 0x8;
ret = sizeof(Object_TrophyCabinet);
break;
case BHV_FROG:
ret = 0x34;
ret = sizeof(Object_Frog);
break;
case BHV_FIREBALL_OCTOWEAPON_2:
ret = 0x20;
ret = sizeof(Object_Fireball_Octoweapon);
break;
default:
obj->unk64 = NULL;
+1 -1
View File
@@ -440,7 +440,7 @@ s32 init_object_shading(Object *obj, ShadeProperties *shading);
ObjectHeader *func_8000C718(s32 index);
s32 func_8000F99C(Object *);
void func_8000C844(s32 arg0);
s32 func_800235DC(Object *obj, Object_64 *obj64);
s32 get_object_property_size(Object *obj, Object_64 *obj64);
void light_setup_light_sources(Object *obj);
s32 init_object_interaction_data(Object *arg0, ObjectInteraction *arg1);
s32 func_8000FAC4(Object *obj, Object_6C *arg1);
+646 -599
View File
File diff suppressed because it is too large Load Diff
+112 -83
View File
@@ -5,63 +5,79 @@
#include "structs.h"
#include "libultra_internal.h"
typedef struct unk800E2CF0 {
u8 unk0;
u8 unk1;
u16 unk2;
s16 unk4;
s16 unk6;
s16 unk8;
s16 unkA;
u8 unkC;
u8 unkD;
s16 unkE;
f32 scale;
ColourRGBA colour;
} unk800E2CF0;
enum ParticleFlags {
PARTICLE_FLAGS_NONE,
PARTICLE_GRAVITY = (1 << 0),
PARTICLE_UNK00000002 = (1 << 1),
PARTICLE_UNK00000004 = (1 << 2),
PARTICLE_UNK00000008 = (1 << 3),
PARTICLE_UNK00000010 = (1 << 4),
PARTICLE_UNK00000020 = (1 << 5),
PARTICLE_UNK00000040 = (1 << 6),
PARTICLE_UNK00000080 = (1 << 7),
PARTICLE_VEL_X = (1 << 8),
PARTICLE_VEL_Y = (1 << 9),
PARTICLE_VEL_Z = (1 << 10),
PARTICLE_ANGLE_Y = (1 << 11),
PARTICLE_ANGLE_X = (1 << 12),
PARTICLE_ANGLE_Z = (1 << 13),
PARTICLE_ANGLEVEL_Y = (1 << 14),
PARTICLE_ANGLEVEL_X = (1 << 15),
PARTICLE_ANGLEVEL_Z = (1 << 16),
PARTICLE_UNK00020000 = (1 << 17),
PARTICLE_UNK00040000 = (1 << 18),
PARTICLE_FORWARDVEL = (1 << 19),
PARTICLE_COLOURVEL_RED = (1 << 20),
PARTICLE_COLOURVEL_GREEN = (1 << 21),
PARTICLE_COLOURVEL_BLUE = (1 << 22),
PARTICLE_COLOURVEL_ALPHA = (1 << 23),
PARTICLE_UNK01000000 = (1 << 24),
PARTICLE_UNK02000000 = (1 << 25),
PARTICLE_UNK04000000 = (1 << 26),
PARTICLE_UNK08000000 = (1 << 27),
PARTICLE_UNK10000000 = (1 << 28),
PARTICLE_UNK20000000 = (1 << 29),
PARTICLE_UNK40000000 = (1 << 30),
PARTICLE_UNK80000000 = (1 << 31),
};
enum ParticleMovement {
PARTICLE_MOVEMENT_0,
PARTICLE_MOVEMENT_1,
PARTICLE_MOVEMENT_VELOCITIES,
PARTICLE_MOVEMENT_VELOCITY_PARENT,
PARTICLE_MOVEMENT_BASIC_PARENT,
PARTICLE_MOVEMENT_VELOCITY,
};
typedef struct ParticleProperties {
/* 0x00 */ u8 unk0;
/* 0x01 */ u8 movementType;
/* 0x02 */ u16 unk2;
/* 0x04 */ s16 textureID;
/* 0x06 */ s16 unk6;
/* 0x08 */ s16 lifeTime;
/* 0x0A */ s16 lifeTimeRange;
/* 0x0C */ u8 opacity;
/* 0x0D */ u8 opacityVel;
/* 0x0E */ s16 opacityTimer;
/* 0x10 */ f32 scale;
/* 0x14 */ ColourRGBA colour;
} ParticleProperties;
/* Size: 0x10 bytes */
typedef struct unk800E2D08 {
s16 unk0, unk2, unk4, unk6, unk8, unkA, unkC, unkE;
} unk800E2D08;
typedef struct unk800AF024 {
u8 pad0[4];
s16 unk4;
s16 unk6;
Vertex *unk8;
Triangle *unkC;
} unk800AF024;
typedef struct XYStruct {
s16 x, y;
} XYStruct;
typedef struct unk800B2260_C_44 {
TextureHeader *texture;
} unk800B2260_C_44;
typedef struct unk800B1CB8_44_8 {
u8 pad0[6];
s16 unk6;
} unk800B1CB8_44_8;
typedef struct unk800B1CB8_44 {
s16 unk0;
u8 pad2[6];
unk800B1CB8_44_8 **unk8;
} unk800B1CB8_44;
typedef struct unk800B1130_8 {
u8 pad0[6];
s16 unk6;
} unk800B1130_8;
typedef struct unk800B1130 {
u8 pad0[8];
unk800B1130_8 **unk8;
u8 padC[0x6];
u16 unk12;
} unk800B1130;
typedef struct unk800B1130_SP28 {
s32 unk0;
@@ -75,9 +91,9 @@ typedef struct ParticleAngle {
s16 y_rotation;
s16 x_rotation;
s16 z_rotation;
s16 unk12;
s16 unk14;
s16 unk16;
s16 y_direction;
s16 x_direction;
s16 z_direction;
} ParticleAngle;
typedef struct ParticleData {
@@ -87,19 +103,18 @@ typedef struct ParticleData {
};
/* 0x0004 */ s16 flags;
/* 0x0006 */ u8 unk6;
/* 0x0007 */ u8 unk7;
/* 0x0008 */ s16 unk8;
/* 0x000A */ s16 unkA;
/* 0x0007 */ u8 lifeTime;
/* 0x0008 */ s16 propertyID;
/* 0x000A */ s16 opacity;
union {
/* 0x000C */ Vec3f pos;
/* 0x000C */ ParticleAngle angle;
/* 0x000C */ unk800AF29C_C unkC;
/* 0x000C */ struct Particle **unkC_60;
/* 0x000C */ unk800AF29C_C_400 unkC_400;
};
/* 0x0018 */ s16 unk18;
/* 0x0018 */ s16 unk1A;
/* 0x001C */ s16 unk1C;
/* 0x0018 */ s16 baseVelX;
/* 0x0018 */ s16 baseVelY;
/* 0x001C */ s16 baseVelZ;
/* 0x001E */ s16 unk1E;
/* 0x0020 */ s32 unk20;
/* 0x0024 */ s32 unk24;
@@ -110,12 +125,12 @@ typedef struct ParticleData {
typedef struct ParticleSegment {
/* 0x0000 */ ObjectTransform trans;
/* 0x0018 */ s16 unk18;
/* 0x0018 */ s16 textureFrame;
/* 0x001A */ s16 unk1A;
/* 0x001C */ f32 x_velocity;
/* 0x0020 */ f32 y_velocity;
/* 0x0024 */ f32 z_velocity;
/* 0x0028 */ f32 unk28;
/* 0x0028 */ f32 scaleVel;
union {
SegmentPropertiesObject object;
SegmentPropertiesParticle particle;
@@ -125,40 +140,54 @@ typedef struct ParticleSegment {
/* 0x0040 */ s32 unk40;
} ParticleSegment;
typedef struct ParticleModel {
/* 0x00 */ TextureHeader *texture;
/* 0x04 */ s16 vertexCount;
/* 0x06 */ s16 triangleCount;
/* 0x08 */ Vertex *vertices;
/* 0x0C */ Triangle *triangles;
} ParticleModel;
typedef struct ParticleOtherSomething {
/* 0x00 */ s16 textureCount;
/* 0x02 */ s16 unk2;
/* 0x04 */ s16 unk4;
/* 0x06 */ s16 unk6;
/* 0x08 */ unk800B1CB8_44_8 **unk8;
} ParticleOtherSomething;
typedef struct Particle {
union {
/* 0x0000 */ ParticleSegment segment;
/* 0x0000 */ ParticleData data;
};
union {
/* 0x0044 */ unk800B0698_44 *unk44;
/* 0x0044 */ TextureHeader *unk44_0;
/* 0x0044 */ unk800B2260_C_44 *unk44_1;
/* 0x0044 */ struct unk800B1CB8_44 *unk44_2;
/* 0x0044 */ ParticleModel *modelData;
/* 0x0044 */ ParticleOtherSomething *unk44_1;
};
/* 0x0048 */ s16 behaviorId;
/* 0x004A */ s16 unk4A;
/* 0x004C */ f32 somePosX;
/* 0x0050 */ f32 somePosY;
/* 0x004A */ s16 brightness;
/* 0x004C */ f32 baseVelX;
/* 0x0050 */ f32 baseVelY;
union {
/* 0x0054 */ f32 somePosZ;
/* 0x0054 */ f32 baseVelZ;
/* 0x0054 */ f32 *unk54_ptr;
};
/* 0x0058 */ f32 forwardVel;
/* 0x005C */ s16 unk5C;
/* 0x005E */ s16 unk5E;
/* 0x0060 */ s16 unk60;
/* 0x0062 */ s16 unk62;
/* 0x0064 */ s16 unk64;
/* 0x0066 */ s16 unk66;
/* 0x005C */ s16 opacity;
/* 0x005E */ s16 opacityVel;
/* 0x0060 */ s16 opacityTimer;
/* 0x0062 */ s16 angleVelY;
/* 0x0064 */ s16 angleVelX;
/* 0x0066 */ s16 angleVelZ;
union {
/* 0x0068 */ u8 unk68b;
/* 0x0068 */ f32 unk68f;
/* 0x0068 */ f32 gravity;
};
/* 0x006C */ ColourRGBA colour;
/* 0x0070 */ struct Particle *unk70;
/* 0x0074 */ u8 unk74;
/* 0x0075 */ u8 unk75;
/* 0x0075 */ u8 modelFrame;
/* 0x0076 */ u8 unk76;
/* 0x0077 */ s8 unk77;
} Particle;
@@ -176,10 +205,10 @@ void func_800AE2D8(void);
void func_800AE374(void);
void func_800AE438(void);
void func_800AE490(void);
void func_800AEE14(unk800AF024 *arg0, Vertex **arg1, Triangle **arg2);
void func_800AEEB8(unk800AF024 *arg0, Vertex **arg1, Triangle **arg2);
void func_800AEF88(unk800AF024 *arg0, Vertex **arg1, Triangle **arg2);
void func_800AF024(unk800AF024 *arg0, Vertex **arg1, Triangle **arg2);
void generate_particle_shape_triangle(ParticleModel *arg0, Vertex **arg1, Triangle **arg2);
void generate_particle_shape_quad(ParticleModel *arg0, Vertex **arg1, Triangle **arg2);
void func_800AEF88(ParticleModel *arg0, Vertex **arg1, Triangle **arg2);
void func_800AF024(ParticleModel *arg0, Vertex **arg1, Triangle **arg2);
void func_800AF0A4(Particle *particle);
void func_800AF0F0(Particle *particle);
void partInitTrigger(Particle *arg0, s32 arg1, s32 arg2);
@@ -188,10 +217,10 @@ void func_800AF6E4(Object *obj, s32 arg1);
void func_800B2260(Particle *arg0);
void func_800B263C(Particle *arg0);
void init_particle_assets(void);
void func_800B2FBC(Particle *arg0);
void set_particle_texture_frame(Particle *arg0);
void func_800B03C0(Particle *arg0, Particle *arg1, Particle *arg2, ParticleBehavior *arg3);
void func_800B2040(Particle *arg0);
void func_800B22FC(Particle *arg0, s32 arg1);
void handle_particle_movement(Particle *particle, s32 updateRate);
void func_800B0010(Particle *arg0, Particle *arg1, Particle *arg2, ParticleBehavior *arg3);
Particle *func_800B0698(Particle *arg0, Particle *arg1);
Particle *func_800B1CB8(s32 arg0);
@@ -199,7 +228,7 @@ void func_800AFE5C(Particle *arg0, Particle *arg1);
Particle *func_800B1130(Particle *arg0, Particle *arg1);
void func_800AF52C(Object *obj, s32 arg1);
void func_800AF134(Particle *arg0, s32 arg1, s32 arg2, s16 arg3, s16 arg4, s16 arg5);
void func_800B3740(Particle *particle, Gfx **dlist, MatrixS **mtx, Vertex **vtx, s32 flags);
void render_particle(Particle *particle, Gfx **dList, MatrixS **mtx, Vertex **vtx, s32 flags);
void func_800B4668(Object *obj, s32 idx, s32 arg2, s32 arg3);
void func_800B46BC(Object *obj, s32 idx, s32 arg2, s32 arg3);
@@ -209,11 +238,11 @@ void func_800AE728(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5);
void func_800AF714(Object*, s32); // Non matching
Particle *func_800B0BAC();
void func_800B26E0();
void func_800B3140(Particle *);
void func_800B3240(Particle *);
void func_800B3358(Particle *);
void func_800B34B0(Particle *);
void func_800B3564(Particle *);
void move_particle_basic_parent(Particle *);
void move_particle_velocity_parent(Particle *);
void move_particle_with_velocities(Particle *);
void move_particle_basic(Particle *);
void move_particle_with_velocity(Particle *);
void func_800B3E64(Object *); // Non Matching
#endif
+7 -9
View File
@@ -157,9 +157,7 @@ const char D_800E8C5C[] = "(nil)";
/************ .bss ************/
TextureHeader *gTexture0;
TextureHeader *gTexture1;
TextureHeader *gTexture2;
TextureHeader *gTexture[3];
u16 D_80127CAC;
u16 D_80127CAE;
u16 D_80127CB0;
@@ -198,9 +196,9 @@ UNUSED int sprintf(char *s, const char *format, ...) {
GLOBAL_ASM("asm/non_matchings/printf/vsprintf.s")
void diPrintfInit(void) {
gTexture0 = load_texture(0);
gTexture1 = load_texture(1);
gTexture2 = load_texture(2);
gTexture[0] = load_texture(0);
gTexture[1] = load_texture(1);
gTexture[2] = load_texture(2);
gDebugPrintBufferEnd = gDebugPrintBufferStart;
}
@@ -357,7 +355,7 @@ s32 func_800B69FC(Gfx **dList, s32 asciiVal) {
//Character is a symbol or number and not a letter
if (gDebugFontTexture != 0) {
if (D_80127CB8) {
gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture0 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 192, 11, 0, 2, 2, 0, 0, 0, 0);
gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture[0] + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 192, 11, 0, 2, 2, 0, 0, 0, 0);
}
gDebugFontTexture = 0;
}
@@ -366,7 +364,7 @@ s32 func_800B69FC(Gfx **dList, s32 asciiVal) {
//Character is a upper case letter
if (gDebugFontTexture != 1) {
if (D_80127CB8) {
gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture1 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 248, 11, 0, 2, 2, 0, 0, 0, 0);
gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture[1] + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 248, 11, 0, 2, 2, 0, 0, 0, 0);
}
gDebugFontTexture = 1;
}
@@ -375,7 +373,7 @@ s32 func_800B69FC(Gfx **dList, s32 asciiVal) {
//Character is a lower case letter
if (gDebugFontTexture != 2) {
if (D_80127CB8) {
gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture2 + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 192, 11, 0, 2, 2, 0, 0, 0, 0);
gDPLoadTextureBlock((*dList)++, OS_PHYSICAL_TO_K0(gTexture[2] + 1), G_IM_FMT_IA, G_IM_SIZ_8b, 192, 11, 0, 2, 2, 0, 0, 0, 0);
}
gDebugFontTexture = 2;
}
+3 -9
View File
@@ -47,10 +47,6 @@
/************ .rodata ************/
UNUSED const char sLevelErrorString[] = "LOADLEVEL Error: Level out of range\n";
UNUSED const char sBossErrorString[] = "BossLev problem\n";
UNUSED const char sAITableErrorString[] = "AITABLE Error: Table out of range\n";
UNUSED char *sDebugRomBuildInfo[] = {
"1.1605",
"02/10/97 16:03",
@@ -58,10 +54,6 @@ UNUSED char *sDebugRomBuildInfo[] = {
};
const char D_800E7134[] = "BBB\n"; // Functionally unused.
UNUSED const char sDebugCarString[] = "CAR";
UNUSED const char sDebugHovercraftString[] = "HOV";
UNUSED const char sDebugPlaneString[] = "PLN";
UNUSED const char sDebugVehicleSwapString[] = "Swapping\n";
/*********************************/
@@ -94,7 +86,7 @@ UNUSED FadeTransition D_800DD3FC = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NO
s32 sLogicUpdateRate = LOGIC_5FPS;
FadeTransition D_800DD408 = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_WHITE, 30, -1);
UNUSED char *D_800DD410[3] = {
(char *)sDebugCarString, (char *)sDebugHovercraftString, (char *)sDebugPlaneString
"CAR", "HOV", "PLN"
};
FadeTransition gLevelFadeOutTransition = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_BLACK, 30, -1);
FadeTransition D_800DD424 = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_BLACK, 260, -1);
@@ -183,6 +175,7 @@ void thread3_main(UNUSED void *unused) {
void init_game(void) {
s32 viMode;
stubbed_printf(sDebugRomBuildInfo);
init_main_memory_pool();
init_rzip(); // Initialise gzip decompression related things
sAntiPiracyTriggered = TRUE;
@@ -844,6 +837,7 @@ void set_level_default_vehicle(Vehicle vehicleID) {
}
void func_8006DB20(Vehicle vehicleId) {
stubbed_printf("Swapping\n");
D_8012351C = vehicleId;
}
+17 -18
View File
@@ -309,34 +309,33 @@ GLOBAL_ASM("asm/non_matchings/waves/func_800BCC70.s")
GLOBAL_ASM("asm/non_matchings/waves/func_800BDC80.s")
GLOBAL_ASM("asm/non_matchings/waves/func_800BE654.s")
// Get water height probably.
f32 func_800BEEB4(Object_64 *arg0, s32 updateRate) {
f32 get_wave_height(Object_Log *log, s32 updateRate) {
s32 var_t0;
f32 temp;
f32 y;
arg0->obj800BEEB4_64.unk4 += updateRate;
while (arg0->obj800BEEB4_64.unk4 >= arg0->obj800BEEB4_64.unk6) {
arg0->obj800BEEB4_64.unk4 -= arg0->obj800BEEB4_64.unk6;
log->unk4 += updateRate;
while (log->unk4 >= log->unk6) {
log->unk4 -= log->unk6;
}
var_t0 = arg0->obj800BEEB4_64.unkE[arg0->obj800BEEB4_64.unk4 >> 1];
if (arg0->obj800BEEB4_64.unk4 & 1) {
if ((arg0->obj800BEEB4_64.unk4 + 1) >= arg0->obj800BEEB4_64.unk6) {
var_t0 += arg0->obj800BEEB4_64.unkE[0];
var_t0 = log->unkE[log->unk4 >> 1];
if (log->unk4 & 1) {
if (log->unk4 + 1 >= log->unk6) {
var_t0 += log->unkE[0];
} else {
var_t0 += arg0->obj800BEEB4_64.unkE[(arg0->obj800BEEB4_64.unk4 >> 1) + 1];
var_t0 += log->unkE[(log->unk4 >> 1) + 1];
}
if (arg0->obj800BEEB4_64.unk2 > 0) {
var_t0 <<= (arg0->obj800BEEB4_64.unk2 + 0x1F);
if (log->unk2 > 0) {
var_t0 <<= (log->unk2 + 0x1F);
} else {
var_t0 >>= 1;
}
} else {
var_t0 <<= arg0->obj800BEEB4_64.unk2;
var_t0 <<= log->unk2;
}
temp = (((f32) var_t0 * 0.0625) + (f32) arg0->obj800BEEB4_64.unk0);
temp *= D_80129FC8->unk40;
temp += func_800BEFC4(arg0->obj800BEEB4_64.unkC, arg0->obj800BEEB4_64.unk8, arg0->obj800BEEB4_64.unkA);
return temp;
y = (((f32) var_t0 * 0.0625) + (f32) log->unk0);
y *= D_80129FC8->unk40;
y += func_800BEFC4(log->unkC, log->unk8, log->unkA);
return y;
}
#ifdef NON_EQUIVALENT
+1 -1
View File
@@ -111,7 +111,7 @@ void func_800BBE08(LevelModel *level, unk800BBE08_arg1 *arg1);
void obj_loop_wavepower(Object *obj);
void func_800BFC54(unk800BFC54_arg0 *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4);
void func_800BF3E4(s32 arg0);
f32 func_800BEEB4(Object_64 *, s32);
f32 get_wave_height(Object_Log *log, s32 updateRate);
Object_64 *func_800BE654(s16, f32, f32); // Non Matching
void func_800BBF78(LevelModel *arg0); // Non Matching