c: func_80031018

This commit is contained in:
Mittenz
2020-08-23 21:13:29 -05:00
parent 0fca2fad42
commit e0f236a05e
4 changed files with 202 additions and 90 deletions
@@ -1,72 +0,0 @@
glabel func_80031018
/* 031C18 80031018 27BDFF70 */ addiu $sp, $sp, -0x90
/* 031C1C 8003101C 44800000 */ mtc1 $zero, $f0
/* 031C20 80031020 3C01C780 */ li $at, 0xC7800000 # -65536.000000
/* 031C24 80031024 44812000 */ mtc1 $at, $f4
/* 031C28 80031028 3C028012 */ lui $v0, %hi(D_8011B0B0) # $v0, 0x8012
/* 031C2C 8003102C 8C42B0B0 */ lw $v0, %lo(D_8011B0B0)($v0)
/* 031C30 80031030 AFBF0024 */ sw $ra, 0x24($sp)
/* 031C34 80031034 E7A00034 */ swc1 $f0, 0x34($sp)
/* 031C38 80031038 E7A00030 */ swc1 $f0, 0x30($sp)
/* 031C3C 8003103C E7A4002C */ swc1 $f4, 0x2c($sp)
/* 031C40 80031040 844E0004 */ lh $t6, 4($v0)
/* 031C44 80031044 3C013F80 */ li $at, 0x3F800000 # 1.000000
/* 031C48 80031048 A7AE003C */ sh $t6, 0x3c($sp)
/* 031C4C 8003104C 844F0002 */ lh $t7, 2($v0)
/* 031C50 80031050 44813000 */ mtc1 $at, $f6
/* 031C54 80031054 A7AF003A */ sh $t7, 0x3a($sp)
/* 031C58 80031058 84580000 */ lh $t8, ($v0)
/* 031C5C 8003105C 27A40050 */ addiu $a0, $sp, 0x50
/* 031C60 80031060 27A50038 */ addiu $a1, $sp, 0x38
/* 031C64 80031064 E7A00044 */ swc1 $f0, 0x44($sp)
/* 031C68 80031068 E7A00048 */ swc1 $f0, 0x48($sp)
/* 031C6C 8003106C E7A0004C */ swc1 $f0, 0x4c($sp)
/* 031C70 80031070 E7A60040 */ swc1 $f6, 0x40($sp)
/* 031C74 80031074 0C01BF0C */ jal func_8006FC30
/* 031C78 80031078 A7B80038 */ sh $t8, 0x38($sp)
/* 031C7C 8003107C 8FA50034 */ lw $a1, 0x34($sp)
/* 031C80 80031080 8FA60030 */ lw $a2, 0x30($sp)
/* 031C84 80031084 8FA7002C */ lw $a3, 0x2c($sp)
/* 031C88 80031088 27B90034 */ addiu $t9, $sp, 0x34
/* 031C8C 8003108C 27A80030 */ addiu $t0, $sp, 0x30
/* 031C90 80031090 27A9002C */ addiu $t1, $sp, 0x2c
/* 031C94 80031094 AFA90018 */ sw $t1, 0x18($sp)
/* 031C98 80031098 AFA80014 */ sw $t0, 0x14($sp)
/* 031C9C 8003109C AFB90010 */ sw $t9, 0x10($sp)
/* 031CA0 800310A0 0C01BD93 */ jal func_8006F64C
/* 031CA4 800310A4 27A40050 */ addiu $a0, $sp, 0x50
/* 031CA8 800310A8 444AF800 */ cfc1 $t2, $31
/* 031CAC 800310AC C7A80034 */ lwc1 $f8, 0x34($sp)
/* 031CB0 800310B0 35410003 */ ori $at, $t2, 3
/* 031CB4 800310B4 38210002 */ xori $at, $at, 2
/* 031CB8 800310B8 44C1F800 */ ctc1 $at, $31
/* 031CBC 800310BC C7B00030 */ lwc1 $f16, 0x30($sp)
/* 031CC0 800310C0 460042A4 */ cvt.w.s $f10, $f8
/* 031CC4 800310C4 C7A4002C */ lwc1 $f4, 0x2c($sp)
/* 031CC8 800310C8 44CAF800 */ ctc1 $t2, $31
/* 031CCC 800310CC 3C028012 */ lui $v0, %hi(D_8011D468) # $v0, 0x8012
/* 031CD0 800310D0 440B5000 */ mfc1 $t3, $f10
/* 031CD4 800310D4 444CF800 */ cfc1 $t4, $31
/* 031CD8 800310D8 8FBF0024 */ lw $ra, 0x24($sp)
/* 031CDC 800310DC 35810003 */ ori $at, $t4, 3
/* 031CE0 800310E0 38210002 */ xori $at, $at, 2
/* 031CE4 800310E4 44C1F800 */ ctc1 $at, $31
/* 031CE8 800310E8 2442D468 */ addiu $v0, %lo(D_8011D468) # addiu $v0, $v0, -0x2b98
/* 031CEC 800310EC 460084A4 */ cvt.w.s $f18, $f16
/* 031CF0 800310F0 27BD0090 */ addiu $sp, $sp, 0x90
/* 031CF4 800310F4 44CCF800 */ ctc1 $t4, $31
/* 031CF8 800310F8 440D9000 */ mfc1 $t5, $f18
/* 031CFC 800310FC AC4B0000 */ sw $t3, ($v0)
/* 031D00 80031100 444EF800 */ cfc1 $t6, $31
/* 031D04 80031104 AC4D0004 */ sw $t5, 4($v0)
/* 031D08 80031108 35C10003 */ ori $at, $t6, 3
/* 031D0C 8003110C 38210002 */ xori $at, $at, 2
/* 031D10 80031110 44C1F800 */ ctc1 $at, $31
/* 031D14 80031114 00000000 */ nop
/* 031D18 80031118 460021A4 */ cvt.w.s $f6, $f4
/* 031D1C 8003111C 440F3000 */ mfc1 $t7, $f6
/* 031D20 80031120 44CEF800 */ ctc1 $t6, $31
/* 031D24 80031124 03E00008 */ jr $ra
/* 031D28 80031128 AC4F0008 */ sw $t7, 8($v0)
/* 031D2C 8003112C 00000000 */ nop
+12 -2
View File
@@ -173,9 +173,19 @@ typedef struct LevelHeader {
/* 0xB0 */ u8 padB0[0x3];
/* 0xB3 */ u8 unkB3;
/* 0xB4 */ u8 padB4[0x6];
/* 0xB3 */ u8 unkB4;
/* 0xB3 */ u8 unkB5;
/* 0xB3 */ u8 unkB6;
/* 0xB3 */ u8 unkB7;
/* 0xB4 */ u8 padB8[0x2];
/* 0xBA */ s16 unkBA;
/* 0xBE */ u8 padBE[0xA];
/* 0xBE */ u8 unkBE;
/* 0xBE */ u8 unkBF;
/* 0xBE */ u8 unkC0;
/* 0xC1 */ u8 unkC1;
/* 0xC2 */ u8 unkC2;
/* 0xC3 */ u8 unkC3;
/* 0xC4 */ u8 padC4[0x4];
} LevelHeader;
/* Size: 0x50 bytes */
+189 -16
View File
@@ -5,11 +5,6 @@
#include "macros.h"
#include "structs.h"
typedef struct{
u8 pad00[0x49];
s8 unk49;
} unk800DC91C;
/* Size: 0x44 bytes */
typedef struct unk80120AC0 {
s16 unk0;
@@ -34,7 +29,7 @@ typedef struct unk80120AC0 {
u8 pad3C[8];
} unk80120AC0;
extern unk800DC91C* D_800DC91C;
extern LevelHeader *D_800DC91C;
extern s32 D_800DC924;
extern s32 D_8011D37C;
extern s32 D_8011D474;
@@ -82,17 +77,19 @@ typedef struct{
unk800DC918_04_0C* unk0C;
u8 pad0C[0x10];
s16 unk20;
u8 pad24[0x20];
u8 pad22[0x09];
s8 unk2B;
u8 pad2C[0x18];
} unk800DC918_04;
typedef struct{
s16 unk00;
s16 unk02;
s16 unk04;
s16 unk06;
s16 unk08;
s16 unk0A;
} unk800DC918_08;
s16 unk00; //sx
s16 unk02; //sy
s16 unk04; //sz
s16 unk06; //lx
s16 unk08; //ly
s16 unk0A; //lz
} unk800DC918_08; //bounding box
typedef struct{
unk800DC918_00 *unk00;
@@ -104,12 +101,129 @@ typedef struct{
extern unk800DC918* D_800DC918;
typedef struct{
s16 unk00;
s16 unk02;
s16 unk04;
}unk8011B0B0;
unk8011B0B0 *D_8011B0B0;
typedef struct{
s32 unk00;
s32 unk04;
s32 unk08;
}unk8011D468;
unk8011D468 D_8011D468;
extern void func_8006F64C(void*, f32, f32, f32, f32*, f32*, f32*);
s32 func_800249E0(s32 arg0) {
D_8011D37C = arg0;
return 0;
}
#if 1
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800249F0.s")
#else
extern u32 D_800DC874;
extern u32 D_800DC87C;
extern u32 D_8011B0C8;
extern u8 D_8011B0E1;
extern u8 D_8011B0E2;
extern u8 D_8011B0E3;
extern u32 D_8011B0F8;
extern u32 D_8011B100;
extern u32 D_8011B104;
extern u32 D_8011B108;
extern u32 D_8011B10C;
extern u32 D_8011B110;
extern u32 D_8011B114;
extern u32 D_8011D320[4];
extern u32 D_8011D338[4];
extern u32 D_8011D348;
extern u32 D_8011D350[4];
extern u32 D_8011D384;
void func_800249F0(u32 arg0, u32 arg1, s32 arg2, u32 arg3, u32 arg4, u32 arg5, u32 arg6){
s32 i;
s32 tmp_a2;
D_800DC91C = func_8006BDB0();
D_8011B0F8 = 0;
D_8011B100 = 0;
D_8011B104 = 0;
D_8011B108 = 0;
D_8011B10C = 0;
if(D_800DC91C->race_type == 6 || D_800DC91C->race_type == 7){
D_8011B0F8 = 1;
}
func_8002C0C4(arg0);
if(arg2 < 2){
D_8011D384 = 0;
for(i = 0; i < D_800DC918->count; i++){
if(D_800DC918->unk04[i].unk2B != 0){
D_8011D384++;
D_800DC918->unk04[i].unk2B = 1;
}
}
}
if(is_in_two_player_adventure() && (D_800DC91C->race_type == 0 || D_800DC91C->race_type & 0x40)){
tmp_a2 = 2;
}else{
tmp_a2 = arg2;
tmp_a2++;
}
if(D_8011D384){
func_800B82B4(D_800DC918, D_800DC91C, tmp_a2);
}
func_8006652C(arg2);
func_80027FC4(arg1);
D_8011B110 = 0;
D_8011B114 = 0x10000;
func_80011390();
func_8000C8F8(arg6,0);
func_8000C8F8(arg5,1);
D_8011D37C = arg2;
func_8000CC7C(arg3, arg4, arg2);
func_8000B020(72, 64);
if(arg0 == 0 && arg4 == 0){
func_800C01D8(&D_800DC87C);
}
else{
func_800C01D8(&D_800DC874);
}
func_8006652C(D_8011D37C);
D_8011B0FC = 0;
i = 0;
do{
D_8011D350[i] = func_80070C9C(3200, 0xFFFF00FF);
D_8011D320[i] = func_80070C9C(12800, 0xFFFF00FF);
D_8011D338[i] = func_80070C9C(20000, 0xFFFF00FF);
}while(&D_8011D338[++i] != &D_8011D348);
D_8011B0C8 = 0;
func_8002D8DC(1,1,0);
func_8002D8DC(2,2,0);
D_8011B0C8 = 1;
func_8002D8DC(1,1,0);
func_8002D8DC(2,2,0);
D_8011B0C8 = 0;
if(D_800DC91C->unkB7){
D_8011B0E1 = D_800DC91C->unkB4;
D_8011B0E2 = D_800DC91C->unkB5;
D_8011B0E3 = D_800DC91C->unkB6;
func_80025510(arg2 + 1);
}
}
#endif
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/D_80024D54.s")
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80025510.s")
@@ -157,7 +271,23 @@ void func_80028044(s32 arg0) {
}
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80028050.s")
#if 1
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_800289B8.s")
#else
void func_800289B8(void){
u8 sp_2f = D_800DC91C->unkC1;
u8 sp_2e = D_800DC91C->unkC2;
u8 sp_2d = D_800DC91C->unkC3;
u8 sp_2c = D_800DC91C->unkBE;
u8 sp_2b = D_800DC91C->unkBF;
u8 sp_2a = D_800DC91C->unkC0;
u32 sp_24 = D_8011B0A8;
func_8007B3D0(&D_8011B0A0);
func_8007B4C8(&D_8011B0A0, 0, 8);
D_8011B0A0 += 8;
}
#endif
void func_80028C10(void){
unk80120AC0 * v0_some_struct;
@@ -191,7 +321,15 @@ GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80028FAC.s")
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029658.s")
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029AF8.s")
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029D14.s")
#if 1
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80029F18.s")
#else
func_80029F18(){
}
#endif
s32 func_8002A05C(s32 arg0, s32 arg1, s32* arg2){
s32 i;
@@ -218,7 +356,7 @@ s32 func_8002A134(s32* arg0, unk800DC918_08 arg1){
unk800DC918_08 * a0;
s32 cnt = 0;
unk800DC918_08 bnd;
//BAD variable assignments;
bnd.unk00 = arg1.unk00 - 4;
bnd.unk02 = arg1.unk02 - 4;
@@ -309,4 +447,39 @@ GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030838.s")
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_8003093C.s")
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030A74.s")
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80030DE0.s")
GLOBAL_ASM("asm/non_matchings/unknown_0255E0/func_80031018.s")
void func_80031018(void){
struct {
u8 pad00[0x40];
} sp_50; //same as unk80535C4_3
struct {
s16 unk00; //sp_38
s16 unk02; //sp_3A
s16 unk04; //sp_3C
u8 pad06[0x02];
f32 unk08; //sp40;
f32 unk0C; //sp44;
f32 unk10; //sp48;
f32 unk14; //sp4C;
} sp_38;
f32 sp_34 = 0.0f;
f32 sp_30 = 0.0f;
f32 sp_2C = -65536.0f;
sp_38.unk04 = D_8011B0B0->unk04;
sp_38.unk02 = D_8011B0B0->unk02;
sp_38.unk00 = D_8011B0B0->unk00;
sp_38.unk0C = 0.0f;
sp_38.unk10 = 0.0f;
sp_38.unk14 = 0.0f;
sp_38.unk08 = 1.0f;
func_8006FC30(&sp_50, &sp_38);
func_8006F64C(&sp_50, sp_34, sp_30, sp_2C, &sp_34, &sp_30, &sp_2C);
D_8011D468.unk00 = sp_34;
D_8011D468.unk04 = sp_30;
D_8011D468.unk08 = sp_2C;
}
+1
View File
@@ -131,6 +131,7 @@ D_800DC768 = 0x800DC768;
D_800DC848 = 0x800DC848;
D_800DC858 = 0x800DC858;
D_800DC860 = 0x800DC860;
D_800DC874 = 0x800DC874;
D_800DC87C = 0x800DC87C;
D_800DC884 = 0x800DC884;
D_800DC8AC = 0x800DC8AC;