diff --git a/config/GMPE01_00/rels/m413Dll/symbols.txt b/config/GMPE01_00/rels/m413Dll/symbols.txt index 131092fc..b7df6d9c 100644 --- a/config/GMPE01_00/rels/m413Dll/symbols.txt +++ b/config/GMPE01_00/rels/m413Dll/symbols.txt @@ -23,7 +23,10 @@ fn_1_D700 = .text:0x0000D700; // type:function size:0x64 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte lbl_1_rodata_0 = .rodata:0x00000000; // type:object size:0x10 data:double -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x38 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x18 data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x18 data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double @@ -172,7 +175,8 @@ lbl_1_rodata_A30 = .rodata:0x00000A30; // type:object size:0x4 data:float lbl_1_rodata_A34 = .rodata:0x00000A34; // type:object size:0x4 data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x4 data:4byte lbl_1_data_4 = .data:0x00000004; // type:object size:0x8 data:4byte -lbl_1_data_C = .data:0x0000000C; // type:object size:0x2C data:4byte +lbl_1_data_C = .data:0x0000000C; // type:object size:0x10 data:4byte +lbl_1_data_1C = .data:0x0000001C; // type:object size:0x1C data:float lbl_1_data_38 = .data:0x00000038; // type:object size:0x9 data:string lbl_1_data_41 = .data:0x00000041; // type:object size:0x19 data:string lbl_1_data_5A = .data:0x0000005A; // type:object size:0x1B data:string @@ -189,13 +193,15 @@ lbl_1_data_10D = .data:0x0000010D; // type:object size:0xF data:string lbl_1_data_11C = .data:0x0000011C; // type:object size:0x19 data:string lbl_1_data_135 = .data:0x00000135; // type:object size:0x24 data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0xC data:4byte +lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte +lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x8 data:4byte lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x2 data:2byte lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x4 data:4byte lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x2 data:2byte -lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x8 data:4byte +lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x4 data:4byte +lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x4 data:4byte lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x4 data:float lbl_1_bss_30 = .bss:0x00000030; // type:object size:0x4 data:4byte lbl_1_bss_34 = .bss:0x00000034; // type:object size:0x10 data:4byte diff --git a/include/game/hsfman.h b/include/game/hsfman.h index 0c7ee048..0d20b256 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -187,8 +187,8 @@ s16 Hu3DGLightCreate(f32, f32, f32, f32, f32, f32, u8, u8, u8); s16 Hu3DGLightCreateV(Vec*, Vec*, GXColor*); s16 Hu3DLLightCreate(s16, f32, f32, f32, f32, f32, f32, u8, u8, u8); s16 Hu3DLLightCreateV(s16, Vec*, Vec*, GXColor*); -void Hu3DGLightSpotSet(s16, u16, f32); -void Hu3DLLightSpotSet(s16, s16, u16, f32); +void Hu3DGLightSpotSet(s16, f32, u16); +void Hu3DLLightSpotSet(s16, s16, f32, u16); void Hu3DGLightInfinitytSet(s16); void Hu3DLLightInfinitytSet(s16, s16); void Hu3DGLightPointSet(s16, f32, f32, u16); diff --git a/src/REL/m413Dll/main.c b/src/REL/m413Dll/main.c new file mode 100644 index 00000000..7c741682 --- /dev/null +++ b/src/REL/m413Dll/main.c @@ -0,0 +1,2195 @@ +#include "game/object.h" +#include "game/objsub.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/minigame_seq.h" +#include "game/gamework_data.h" + +#include "game/sprite.h" +#include "game/pad.h" +#include "game/hsfman.h" +#include "game/hsfdraw.h" + +#include "game/hsfmotion.h" + +#include "ext_math.h" + +#include "rel_sqrt_consts.h" + +typedef struct struct_bss_2A6C StructBss2A6C; + +typedef struct struct_sp_14C8 StructSp14C8; + +typedef struct struct_sp_14C8 { + u8 unk0; + u8 unk1; + u8 unk2; + s32 unk4[4]; + StructBss2A6C *unk14; + StructBss2A6C *unk18; + StructSp14C8 *unk1C; +} StructSp14C8; + +typedef struct work_19C8 { + s32 unk0; + s32 unk4; + s32 unk8; + s32 unkC; + s32 unk10; + s32 unk14; + s32 unk18; + s32 unk1C; + s32 unk20; + s32 unk24; + s32 unk28; + s32 unk2C; + u8 unk30[0x10]; + float unk40; + s32 unk44; + StructBss2A6C *unk48[2]; + u8 unk50[8][2]; + u8 unk60; + u8 unk61; + u8 unk62; + u8 unk63[2]; + u8 unk65[2]; + s32 unk68; + s32 unk6C; + u8 unk70; + u8 unk71; + u8 unk72; + s32 unk74; + u8 unk78; + u8 unk79; + s32 unk7C; + s32 unk80; + s32 unk84; + s32 unk88; + s32 unk8C; + s32 unk90; + s32 unk94; + float unk98; + float unk9C; + float unkA0; + s16 unkA4; +} Work19C8; + +typedef struct struct_bss_2A6C { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + s32 unk8[4]; + union { + s8 unk18; + u8 unk18_u; + }; + + Vec unk1C; + u32 unk28; + StructSp14C8 *unk2C; + StructBss2A6C *unk30; + StructBss2A6C *unk34; + StructBss2A6C *unk38; + StructBss2A6C *unk3C; + StructBss2A6C *unk40; + StructBss2A6C *unk44; + StructBss2A6C *unk48; + StructBss2A6C *unk4C; + Work19C8 *unk50; +} StructBss2A6C; + +typedef struct struct_bss_2684 { + float unk0; + float unk4; + s32 unk8; + s32 unkC; + u8 unk10; +} StructBss2684; + +typedef struct struct_bss_100 { + u8 unk0; + Vec unk4; + Vec unk10; + u8 unk1C; + u8 unk1D; +} StructBss100; + +typedef struct struct_bss_b8 { + s32 unk0; + s32 unk4; + float unk8; + Vec unkC; +} StructBssB8; + +typedef struct struct_bss_48 { + s32 unk0; + float unk4[3]; +} StructBss48; + +StructBss2A6C *lbl_1_bss_7884[12]; +StructBss2A6C lbl_1_bss_2A6C[238]; +StructBss2684 lbl_1_bss_2684[50]; +s32 lbl_1_bss_2680; +StructBss100 lbl_1_bss_100[300]; +s32 lbl_1_bss_FC; +s32 lbl_1_bss_D4[5][2]; +s32 lbl_1_bss_D0; +StructBssB8 lbl_1_bss_B8; +StructBss48 lbl_1_bss_48[7]; +omObjData *lbl_1_bss_44; +omObjData *lbl_1_bss_34[4]; +omObjData *lbl_1_bss_30; +float lbl_1_bss_2C; +s32 lbl_1_bss_28; +Process *lbl_1_bss_24; +s16 lbl_1_bss_20; +s32 lbl_1_bss_1C; +s32 lbl_1_bss_18; +s16 lbl_1_bss_14; +s32 lbl_1_bss_10; +s32 lbl_1_bss_8[2]; +s32 lbl_1_bss_4; +s32 lbl_1_bss_0; + +s32 lbl_1_data_0 = -1; +s32 lbl_1_data_4[2] = { -1, -1 }; +s32 lbl_1_data_C[4] = { 0, 1, 2, 3 }; +float lbl_1_data_1C[7] = { 1000, 1000, 1000, 0, 0, 0, 30 }; + +const Vec lbl_1_rodata_10[2] = { + 0, 7955, 3436, + 0, -0.898794f, -0.43837115f +}; + +const GXColor lbl_1_rodata_28 = { + 0, 0, 0, 255 +}; + +const Vec lbl_1_rodata_2C[2] = { + 0, 5966.25f, 3436, + 0, -0.6740955f, -0.43837115f +}; + +const GXColor lbl_1_rodata_44 = { + 0, 0, 0, 255 +}; + +void fn_1_A0(s32 arg0) +{ + Mtx44 sp10C; + Mtx44 spCC; + Mtx44 sp8C; + Mtx44 sp4C; + Mtx44 spC; + CameraData *temp_r31; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + + MTXRotDeg(sp8C, 'y', HuPadSubStkX[0]/16.0); + MTXRotDeg(spCC, 'x', HuPadSubStkY[0]/-16.0); + MTXTrans(spC, (((HuPadBtn[0] & PAD_BUTTON_RIGHT) != 0)-((HuPadBtn[0] & PAD_BUTTON_LEFT) != 0))*10.0, + (((HuPadBtn[0] & PAD_BUTTON_UP) != 0)-((HuPadBtn[0] & PAD_BUTTON_DOWN) != 0))*10.0, + ((HuPadTrigL[0]-HuPadTrigR[0])/128.0)*30.0); + MTXConcat(spCC, sp8C, sp4C); + MTXConcat(spC, sp4C, sp10C); + for(temp_r30=0, temp_r29=1; temp_r30<16; temp_r30++, temp_r29 <<= 1) { + if(arg0 & temp_r29) { + temp_r31 = &Hu3DCamera[temp_r30]; + MTXMultVec(sp10C, &temp_r31->pos, &temp_r31->pos); + MTXMultVec(sp4C, &temp_r31->up, &temp_r31->up); + MTXMultVec(sp10C, &temp_r31->target, &temp_r31->target); + } + } + (void)temp_r28; + (void)temp_r27; + (void)temp_r26; + (void)temp_r25; + (void)temp_r28; + (void)temp_r27; + (void)temp_r26; + (void)temp_r25; +} + +s32 fn_1_38C(u8 *arg0, s32 *arg1) +{ + s32 temp_r28; + s32 temp_r27 = rand8()%4; + + if(!arg0 || *arg0 == 0) { + return 0; + } + for(temp_r28=0; temp_r28<4; temp_r28++) { + s32 temp_r31 = (temp_r28+temp_r27)%4; + if(*arg0 & (1 << temp_r31)) { + *arg0 = 1 << temp_r31; + if(arg1) { + arg1[(temp_r31+1)%4] = arg1[(temp_r31+2)%4] = arg1[(temp_r31+3)%4] = 0; + } + return temp_r31; + } + } + return 0; +} + +s32 fn_1_4C0(u8 *arg0, s32 *arg1) +{ + s32 temp_r31; + + s32 temp_r28 = rand8()%4; + if(!arg0 || *arg0 == 0) { + return 0; + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + s32 temp_r29 = (temp_r31+temp_r28)%4; + if(*arg0 & (1 << temp_r29)) { + return arg1[temp_r29]; + } + } + return 0; +} + +#pragma dont_inline on +s32 fn_1_57C(s8 arg0, float arg1, StructBss2A6C *arg2, StructBss2A6C **arg3) +{ + StructBss2A6C *temp_r31; + if(arg3) { + *arg3 = NULL; + } + if(arg0 < 0 || arg0 >= 12 || arg1 < 0 || arg1 > 16) { + return 1; + } + for(temp_r31 = lbl_1_bss_7884[arg0]; temp_r31;) { + if(arg2 == NULL || (temp_r31 != arg2 && (!(arg2->unk1 & 0x2) || !(temp_r31->unk1 & 0x2) || (arg2->unk2 != temp_r31->unk2)))) { + if(temp_r31->unk1C.y > arg1-1.0f && temp_r31->unk1C.y < arg1+1.0f) { + if(arg3) { + *arg3 = temp_r31; + } + return 1; + } + } + temp_r31 = temp_r31->unk48; + if(!temp_r31) { + continue; + } + if(temp_r31->unk1C.y >= arg1+1.0f) { + break; + } + } + return 0; +} +#pragma dont_inline off + + +static inline s32 fn_1_57C_inline(s8 arg0, float arg1, StructBss2A6C *arg2, StructBss2A6C **arg3) +{ + StructBss2A6C *temp_r31; + if(arg3) { + *arg3 = NULL; + } + if(arg0 < 0 || arg0 >= 12 || arg1 < 0 || arg1 > 16) { + return 1; + } + for(temp_r31 = lbl_1_bss_7884[arg0]; temp_r31;) { + if(arg2 == NULL || (temp_r31 != arg2 && (!(arg2->unk1 & 0x2) || !(temp_r31->unk1 & 0x2) || (arg2->unk2 != temp_r31->unk2)))) { + if(temp_r31->unk1C.y > arg1-1.0f && temp_r31->unk1C.y < arg1+1.0f) { + if(arg3) { + *arg3 = temp_r31; + } + return 1; + } + } + temp_r31 = temp_r31->unk48; + if(!temp_r31) { + continue; + } + if(temp_r31->unk1C.y >= arg1+1.0f) { + break; + } + } + return 0; +} + +void fn_1_6D0(s8 arg0, float arg1, StructBss2A6C *arg2) +{ + StructBss2A6C *temp_r31; + StructBss2A6C *temp_r30; + if(arg2->unk4C == NULL) { + lbl_1_bss_7884[arg2->unk18] = arg2->unk48; + } else { + arg2->unk4C->unk48 = arg2->unk48; + } + if(arg2->unk48 != NULL) { + arg2->unk48->unk4C = arg2->unk4C; + } + for(temp_r31=lbl_1_bss_7884[arg0], temp_r30 = NULL; temp_r31; temp_r31=temp_r31->unk48) { + if(temp_r31->unk1C.y > arg1) { + break; + } + temp_r30 = temp_r31; + } + arg2->unk18 = arg0; + arg2->unk1C.y = arg1; + arg2->unk48 = temp_r31; + if(arg2->unk48) { + arg2->unk48->unk4C = arg2; + } + arg2->unk4C = temp_r30; + if(arg2->unk4C) { + arg2->unk4C->unk48 = arg2; + } + if(lbl_1_bss_7884[arg0] == arg2->unk48) { + lbl_1_bss_7884[arg0] = arg2; + } +} + + +s32 fn_1_7F8(StructBss2A6C *arg0, StructSp14C8 *arg1) +{ + s32 temp_r29; + Work19C8 *temp_r28; + Work19C8 *temp_r27; + Work19C8 *temp_r26; + Work19C8 *temp_r25; + s32 temp_r23; + temp_r29 = 0; + if(!arg0) { + return temp_r29; + } + if(arg0->unk0 == 0) { + return temp_r29; + } + if(lbl_1_bss_7884[arg0->unk18] == arg0) { + lbl_1_bss_7884[arg0->unk18] = arg0->unk48; + } + if(arg0->unk4C) { + arg0->unk4C->unk48 = arg0->unk48; + } + if(arg0->unk48) { + arg0->unk48->unk4C = arg0->unk4C; + } + if(arg0->unk38) { + arg0->unk38->unk3C = NULL; + } + if(arg0->unk3C) { + arg0->unk3C->unk38 = NULL; + } + if(arg0->unk44) { + arg0->unk44->unk40 = NULL; + } + if(arg0->unk40) { + arg0->unk40->unk44 = NULL; + } + + if(arg0->unk0 >= 1 && arg0->unk0 <= 4) { + temp_r28 = lbl_1_bss_34[0]->data; + temp_r27 = lbl_1_bss_34[1]->data; + temp_r26 = lbl_1_bss_34[2]->data; + temp_r25 = lbl_1_bss_34[3]->data; + temp_r29 = (fn_1_4C0(&arg1->unk2, arg1->unk4) > 0) ? 2 : 1; + if(lbl_1_bss_18 == -1) { + if(arg1->unk2 & 0x1) { + temp_r28->unk24 += temp_r29; + temp_r28->unk68 += (arg0->unk1 & 0x10) ? 1 : 0; + } + if(arg1->unk2 & 0x2) { + temp_r27->unk24 += temp_r29; + temp_r27->unk68 += (arg0->unk1 & 0x10) ? 1 : 0; + } + if(arg1->unk2 & 0x4) { + temp_r26->unk24 += temp_r29; + temp_r26->unk68 += (arg0->unk1 & 0x10) ? 1 : 0; + } + if(arg1->unk2 & 0x8) { + temp_r25->unk24 += temp_r29; + temp_r25->unk68 += (arg0->unk1 & 0x10) ? 1 : 0; + } + } + for(temp_r23=0; temp_r23<2; temp_r23++) { + lbl_1_bss_100[lbl_1_bss_FC].unk0 = arg0->unk0; + lbl_1_bss_100[lbl_1_bss_FC].unk4.x = ((arg0->unk18*100)-500.0)-50.0; + lbl_1_bss_100[lbl_1_bss_FC].unk4.y = ((100.0f*arg0->unk1C.y)-500.0f)+50.0f; + lbl_1_bss_100[lbl_1_bss_FC].unk4.z = 120; + lbl_1_bss_100[lbl_1_bss_FC].unk10.x = ((rand8()/255.0)*24.0)-12; + lbl_1_bss_100[lbl_1_bss_FC].unk10.y = (rand8()/255.0)*16.0; + lbl_1_bss_100[lbl_1_bss_FC].unk10.z = ((rand8()/255.0)*10.0)+6; + lbl_1_bss_100[lbl_1_bss_FC].unk1C = rand8(); + lbl_1_bss_100[lbl_1_bss_FC].unk1D = rand8(); + lbl_1_bss_FC++; + lbl_1_bss_FC = (lbl_1_bss_FC >= 300) ? 0 : lbl_1_bss_FC; + } + } + arg0->unk0 = arg0->unk1 = arg0->unk2 = arg0->unk3 = 0; + arg0->unk48 = arg0->unk4C = NULL; + return temp_r29; +} + +void fn_1_EC0(Work19C8 *arg0) +{ + s32 temp_r30; + s32 temp_r29; + s32 temp_r28; + s32 temp_r26; + s32 temp_r27; + s32 temp_r25; + u8 temp_r24; + + for(temp_r30=0; temp_r30<8; temp_r30++) { + for(temp_r29=0; temp_r29<2; temp_r29++) { + arg0->unk50[temp_r30][temp_r29] = 1; + } + } + for(temp_r30=1; temp_r30<4; temp_r30++) { + for(temp_r29=0; temp_r29<4;) { + temp_r26 = rand8()%8; + temp_r28 = rand8()%2; + if(arg0->unk50[temp_r26][temp_r28] == 1) { + arg0->unk50[temp_r26][temp_r28] = temp_r30+1; + temp_r29++; + } + } + } + for(temp_r30=0; temp_r30<8; temp_r30++) { + if(arg0->unk50[temp_r30][0] == arg0->unk50[temp_r30][1]) { + do { + temp_r29 = rand8()%8; + } while(temp_r30 == temp_r29 || arg0->unk50[temp_r30][0] == arg0->unk50[temp_r29][0] || arg0->unk50[temp_r30][0] == arg0->unk50[temp_r29][1]); + + temp_r27 = rand8()%2; + temp_r25 = arg0->unk50[temp_r30][0]; + temp_r24 = arg0->unk50[temp_r29][temp_r27]; + arg0->unk50[temp_r30][rand8()%2] = temp_r24; + arg0->unk50[temp_r29][temp_r27] = temp_r25; + } + } +} + +void fn_1_10B8(Work19C8 *arg0) +{ + s32 temp_r31; + s32 temp_r30; + u8 sp16C[12][17] = {}; + u8 sp6C[12] = {}; + s32 temp_r22 = (arg0->unk48[0]->unk18-4 < 0) ? 0 : (arg0->unk48[0]->unk18-4); + s32 temp_r21 = (arg0->unk48[0]->unk18+4 > 11) ? 11 : (arg0->unk48[0]->unk18+4); + s32 sp44[2] = {}; + s32 sp3C[2] = {}; + s32 sp34[2] = { 9, 9 }; + s32 temp_r20 = 0; + s32 temp_r19 = 0; + s32 temp_r18 = 0; + u8 sp8[2]; + sp44[0] = sp44[1] = temp_r22; + sp3C[0] = sp3C[1] = temp_r21; + sp34[0] = arg0->unk48[0]->unk1C.y-0.5; + sp34[1] = arg0->unk48[0]->unk1C.y-1.5; + sp34[1] = (sp34[1] < 0) ? 0 : sp34[1]; + sp8[0] = arg0->unk48[0]->unk0; + sp8[1] = arg0->unk48[1]->unk0; + for(temp_r31=temp_r22; temp_r31<=temp_r21; temp_r31++) { + StructBss2A6C *temp_r27; + s32 temp_r26; + for(temp_r27 = lbl_1_bss_7884[temp_r31], temp_r26=0; temp_r27; temp_r27=temp_r27->unk48) { + if(temp_r27->unk1 & 0x2) { + continue; + } + sp16C[temp_r31][temp_r26] = temp_r27->unk0; + temp_r26++; + } + sp6C[temp_r31] = temp_r26; + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(temp_r26 > sp34[temp_r30]) { + if(temp_r31 <= arg0->unk48[0]->unk18) { + sp44[temp_r30] = temp_r31+1; + } else { + sp3C[temp_r30] = temp_r31-1; + } + } + } + } + for(temp_r30=0; temp_r30<4; temp_r30++) { + for(temp_r31=sp44[temp_r30==2]; temp_r31<=sp3C[temp_r30==2]; temp_r31++) { + if(temp_r31 != sp44[temp_r30==2] || temp_r30 != 3) { + if(temp_r31 != sp3C[temp_r30==2]-1 || temp_r30 != 1) { + s32 temp_r25; + s32 spAC[4][12]; + for(temp_r25=0; temp_r25<2; temp_r25++) { + s32 sp5C[4] = { 0, 1, 0, -1 }; + s32 sp4C[4] = { 1, 0, -1, 0 }; + s32 temp_r29; + s32 temp_r28; + s32 temp_r24; + s32 temp_r23; + + spAC[temp_r30][temp_r31] = arg0->unk48[0]->unk18-temp_r31; + spAC[temp_r30][temp_r31] = (spAC[temp_r30][temp_r31] < 0) ? (-spAC[temp_r30][temp_r31]) : spAC[temp_r30][temp_r31]; + spAC[temp_r30][temp_r31] = (spAC[temp_r30][temp_r31] < 3) ? ((3-spAC[temp_r30][temp_r31])*(3-spAC[temp_r30][temp_r31])) : 0; + spAC[temp_r30][temp_r31] *= (arg0->unk20 == 0) ? 4 : ((arg0->unk20 == 1) ? 2 : 1); + temp_r24 = temp_r31+((temp_r25 == 1) ? sp5C[temp_r30] : 0); + for(temp_r28=temp_r24-2; temp_r28<=temp_r24+2; temp_r28++) { + temp_r23 = sp6C[temp_r24]+((temp_r25 == 1) ? sp4C[temp_r30] : 0); + for(temp_r29=temp_r23-2; temp_r29<=temp_r23+2; temp_r29++) { + if(temp_r28 < 0 || temp_r28 >= 12 || temp_r29 < 0 || temp_r29 >= 9) { + continue; + } + if(sp16C[temp_r28][temp_r29] != 5 && arg0->unk48[temp_r25]->unk0 == sp16C[temp_r28][temp_r29]) { + u8 sp91[5][5] = { + 0, 3, 0, 3, 0, + 2, 10, 24, 10, 2, + 10, 24, 0, 24, 10, + 2, 10, 24, 10, 2, + 0, 2, 10, 2, 0 + }; + spAC[temp_r30][temp_r31] += sp91[temp_r28-(temp_r24-2)][temp_r29-(temp_r23-2)]; + } + if(sp16C[temp_r28][temp_r29] == 5) { + u8 sp78[5][5] = { + 0, 0, 0, 0, 0, + 0, 40, 40, 40, 0, + 0, 40, 0, 40, 0, + 0, 40, 40, 40, 0, + 0, 0, 0, 0, 0 + }; + spAC[temp_r30][temp_r31] += sp78[temp_r28-(temp_r24-2)][temp_r29-(temp_r23-2)]/((arg0->unk20 == 0) ? 4 : 1); + } + } + } + } + if(spAC[temp_r30][temp_r31] > temp_r20) { + temp_r20 = spAC[temp_r30][temp_r31]; + temp_r18 = temp_r30; + temp_r19 = temp_r31; + } + } + } + } + } + arg0->unk7C = temp_r19; + arg0->unk80 = temp_r18; +} + +void fn_1_19C4(omObjData *object) +{ + +} + +void fn_1_19C8(omObjData *object) +{ + Work19C8 *temp_r31; + s32 sp19C; + s32 spC4; + s32 spC0; + + temp_r31 = object->data; + temp_r31->unk28 = temp_r31->unk24; + + temp_r31->unk65[0] = (temp_r31->unk65[0] == 0 || temp_r31->unk65[0] >= 15) ? 0 : temp_r31->unk65[0]+1; + if(temp_r31->unk1C != -1) { + sp19C = (HuPadStkX[temp_r31->unk1C] > 26)-(HuPadStkX[temp_r31->unk1C] < -26); + } else { + sp19C = (temp_r31->unk72 == 1 && temp_r31->unk7C != -1) ? ((temp_r31->unk48[0]) ? ((temp_r31->unk7C < temp_r31->unk48[0]->unk18) ? -1 : (temp_r31->unk7C > temp_r31->unk48[0]->unk18) ? 1 : 0) : 0) : 0; + } + temp_r31->unk88 = ((temp_r31->unk72 == 1 && temp_r31->unk48[0]) && temp_r31->unk7C == temp_r31->unk48[0]->unk18) ? (temp_r31->unk88+1) : 0; + if(sp19C != temp_r31->unk0){ + temp_r31->unkC = (sp19C == 0) ? 0 : 1; + } else { + temp_r31->unkC = (temp_r31->unk0 != 0) ? temp_r31->unkC+1 : 0; + } + temp_r31->unkC = (temp_r31->unkC >= 17) ? 14 : temp_r31->unkC; + temp_r31->unk0 = sp19C; + if(temp_r31->unk72 == 2) { + float temp_f30; + float temp_f24; + s32 temp_r25; + s32 temp_r23; + s32 temp_r22; + StructBss2A6C *sp198; + + for(temp_r23=0; temp_r23<3; temp_r23++) { + s32 sp24C[3] = { 1, 2, 0 }; + temp_r22 = (temp_r31->unk10*3)+((temp_r31->unk10 < 2) ? sp24C[temp_r23] : (2-sp24C[temp_r23])); + if(fn_1_57C_inline(temp_r22, 9.5f, NULL, NULL) == 0) { + if(fn_1_57C_inline(temp_r22, 8.5f, NULL, NULL) == 0) { + break; + } + } + } + temp_r22 = (temp_r23 == 3) ? ((temp_r31->unk10*3)+1) : temp_r22; + temp_f30 = (temp_r22*100)-490; + temp_r31->unkA0 = (temp_r31->unk74 == 0) ? temp_f30 : ((temp_r31->unkA0-10 > temp_f30) ? (temp_r31->unkA0-10) : (((temp_r31->unkA0 > temp_f30) ? temp_f30 : ((temp_r31->unkA0+10 < temp_f30) ? (temp_r31->unkA0+10) : ((temp_r31->unkA0 < temp_f30) ? temp_f30 : temp_r31->unkA0))))); + temp_r31->unk74++; + temp_f30 = temp_r31->unk74/24.0f; + temp_f30 = (temp_f30 > 1.0f) ? 1.0f : temp_f30; + temp_f30 = (0.5*sind((temp_f30*180.0f)+270.0f))+0.5; + temp_f24 = 1.0f-temp_f30; + if(lbl_1_bss_18 == -1) { + Vec sp240; + Vec sp234; + sp240.x = (temp_r31->unkA0*temp_f30)+(temp_r31->unk98*temp_f24); + sp240.y = (425.0f*temp_f30)+(temp_r31->unk9C*temp_f24); + sp240.z = 55; + Hu3D3Dto2D(&sp240, 1, &sp234); + HuSprPosSet(temp_r31->unkA4, 0, sp234.x, sp234.y); + } + if(lbl_1_bss_44->work[0] == 1002 && temp_r31->unk74 >= 24) { + for(temp_r23=0; temp_r23<3; temp_r23++) { + s32 sp228[3] = { 1, 2, 0 }; + temp_r22 = (temp_r31->unk10*3)+((temp_r31->unk10 < 2) ? sp228[temp_r23] : (2-sp228[temp_r23])); + if(fn_1_57C_inline(temp_r22, 9.5f, NULL, NULL) == 0) { + if(fn_1_57C_inline(temp_r22, 8.5f, NULL, NULL) == 0) { + break; + } + } + } + if(temp_r23 != 3) { + for(sp198 = lbl_1_bss_7884[temp_r22]; sp198 && sp198->unk48; sp198 = sp198->unk48); + for(temp_r23=0; temp_r23<2; temp_r23++) { + temp_r25 = (lbl_1_bss_0+1)%238; + while(temp_r25 != lbl_1_bss_0) { + if(lbl_1_bss_2A6C[temp_r25].unk0 == 0) { + break; + } + temp_r25++; + temp_r25 = temp_r25%238; + if(temp_r25 == 0) { + OSReport("looped.\n"); + } + } + if(temp_r25 == lbl_1_bss_0) { + OSReport("m413:error:block empty.\n"); + } + lbl_1_bss_0 = temp_r25; + temp_r31->unk48[temp_r23] = &lbl_1_bss_2A6C[temp_r25]; + lbl_1_bss_2A6C[temp_r25].unk0 = temp_r31->unk50[temp_r31->unk60][temp_r23]; + lbl_1_bss_2A6C[temp_r25].unk1 = 2; + lbl_1_bss_2A6C[temp_r25].unk3 = 1 << temp_r31->unk10; + lbl_1_bss_2A6C[temp_r25].unk2 = temp_r31->unk10; + lbl_1_bss_2A6C[temp_r25].unk18 = temp_r22; + lbl_1_bss_2A6C[temp_r25].unk1C.x = temp_r22; + lbl_1_bss_2A6C[temp_r25].unk1C.y = temp_r23+8.9375f; + lbl_1_bss_2A6C[temp_r25].unk1C.z = 0; + lbl_1_bss_2A6C[temp_r25].unk8[0] = lbl_1_bss_2A6C[temp_r25].unk8[1] = lbl_1_bss_2A6C[temp_r25].unk8[2] = lbl_1_bss_2A6C[temp_r25].unk8[3] = 0; + lbl_1_bss_2A6C[temp_r25].unk2C = 0; + lbl_1_bss_2A6C[temp_r25].unk30 = 0; + lbl_1_bss_2A6C[temp_r25].unk34 = 0; + lbl_1_bss_2A6C[temp_r25].unk50 = temp_r31; + } + temp_r31->unk48[1]->unk48 = NULL; + temp_r31->unk48[1]->unk4C = temp_r31->unk48[0]; + temp_r31->unk48[0]->unk48 = temp_r31->unk48[1]; + temp_r31->unk48[0]->unk4C = sp198; + if(!sp198) { + lbl_1_bss_7884[temp_r31->unk48[0]->unk18] = temp_r31->unk48[0]; + } else { + temp_r31->unk48[0]->unk4C->unk48 = temp_r31->unk48[0]; + } + temp_r31->unk60++; + if(temp_r31->unk60 >= 8) { + fn_1_EC0(temp_r31); + temp_r31->unk60 = 0; + } + temp_r31->unk63[0] = temp_r31->unk48[0]->unk0; + temp_r31->unk63[1] = temp_r31->unk48[1]->unk0; + temp_r31->unk65[0] = 1; + if(((temp_r31->unk68+5)/7) != ((temp_r31->unk6C+5)/7)) { + if(((temp_r31->unk68+5)/7)%4 == 2) { + temp_r31->unk50[temp_r31->unk60][0] = 5; + temp_r31->unk50[temp_r31->unk60][1] = 5; + } else { + temp_r31->unk50[temp_r31->unk60][rand8()%2] = 5; + } + } + temp_r31->unk6C = temp_r31->unk68; + temp_r31->unk72 = 1; + temp_r31->unk74 = 0; + temp_r31->unk71 = 20; + temp_r31->unk70 = 0; + temp_r31->unk7C = -1; + temp_r31->unk80 = -1; + if(temp_r31->unk1C == -1) { + temp_r31->unk84 = 0; + temp_r31->unk88 = 0; + temp_r31->unk8C = temp_r31->unk48[0]->unk18; + temp_r31->unk90 = 0; + } + temp_r31->unk78 = 0; + temp_r31->unk79 = 0; + HuSprAttrReset(temp_r31->unkA4, 0, HUSPR_ATTR_DISPOFF); + HuSprAttrReset(temp_r31->unkA4, 0, HUSPR_ATTR_REVERSE); + { + s32 sp258[12] = {}; + s32 sp194; + for(sp194=0; sp194<3; sp194++) { + StructBss2A6C *sp190; + for(sp190 = lbl_1_bss_7884[sp194+(temp_r31->unk10*3)]; sp190; sp190 = sp190->unk48) { + + sp258[sp194] += (sp190 && sp190->unk0 && (sp190->unk1 & 0x2) == 0 && sp258[sp194] < 9); + } + } + Hu3DModelRotSet(object->model[4], 0, ((sp258[0]+sp258[1]+sp258[2] >= 22) ? -90 : 0), 0); + } + } else { + s32 sp21C[3]; + s32 sp18C; + for(sp18C=0; sp18C<3; sp18C++) { + s32 sp188; + StructBss2A6C *sp184; + for(sp184 = lbl_1_bss_7884[sp18C+(temp_r31->unk10*3)], sp188=0; sp188<9; sp184 = sp184->unk48, sp188++) { + if(!sp184 || sp184->unk1 != 1) { + break; + } + } + sp21C[sp18C] = sp188; + } + if(sp21C[0] >= 9 && sp21C[1] >= 9 && sp21C[2] >= 9) { + temp_r31->unk78 += temp_r31->unk78 < 255; + Hu3DModelRotSet(object->model[4], 0, -90, 0); + temp_r31->unk79 = 1; + } else { + temp_r31->unk79 = 0; + } + } + } + + } else if(temp_r31->unk72 == 1) { + if(!temp_r31->unk48[0] || !temp_r31->unk48[1]) { + temp_r31->unk72 = 2; + temp_r31->unk74 = 0; + HuSprAttrSet(temp_r31->unkA4, 0, HUSPR_ATTR_REVERSE); + } else { + s32 temp_r26; + s32 sp180; + + sp180 = (temp_r31->unkC == 1 || temp_r31->unkC == 14) ? temp_r31->unk0 : 0; + temp_r26 = temp_r31->unk70; + if(temp_r31->unk1C != -1) { + temp_r26 = (HuPadBtnDown[temp_r31->unk1C] & (PAD_BUTTON_X|PAD_BUTTON_Y)) ? (temp_r31->unk70+2) : (temp_r31->unk70+((HuPadBtnDown[temp_r31->unk1C] & PAD_BUTTON_A) ? 1 : 0) + ((HuPadBtnDown[temp_r31->unk1C] & PAD_BUTTON_B) ? -1 : 0)); + } else { + if(temp_r31->unk80 != -1 && temp_r31->unk80 != temp_r31->unk70 && temp_r31->unk84 > 5) { + temp_r26 = temp_r31->unk80; + temp_r31->unk84 = 0; + } else { + temp_r31->unk84++; + } + } + temp_r26 = (temp_r26 >= 4) ? (temp_r26-4) : ((temp_r26 < 0) ? (temp_r26+4) : temp_r26); + temp_r31->unk74++; + if(temp_r31->unk1C == -1) { + s32 sp20C[4] = { 120, 50, 25, 2 }; + s32 sp200[3] = { 60, 45, 25 }; + temp_r31->unk90 = (temp_r31->unk8C == temp_r31->unk48[0]->unk18 && temp_r31->unk8C != temp_r31->unk7C) ? (temp_r31->unk90+1) : 0; + temp_r31->unk8C = temp_r31->unk48[0]->unk18; + if(temp_r31->unk7C == -1 && temp_r31->unk90 >= sp20C[temp_r31->unk20] || (temp_r31->unk20 >= 1 && (temp_r31->unk90 >= sp200[temp_r31->unk20-1]))) { + s32 sp1F0[4] = { 30, 30, 20, 10 }; + fn_1_10B8(temp_r31); + temp_r31->unk84 = 0; + temp_r31->unk88 = 0; + temp_r31->unk94 = (rand8()%sp1F0[temp_r31->unk20])-(sp1F0[temp_r31->unk20]/2); + } + } + if(lbl_1_bss_18 == -1) { + if(temp_r31->unk1C != -1) { + temp_r31->unk48[0]->unk1C.z = temp_r31->unk48[1]->unk1C.z = -0.03125f+((HuPadStkY[temp_r31->unk1C] < -36) ? (-0.26875f*((-HuPadStkY[temp_r31->unk1C]-36)/36.0f)) : 0); + temp_r31->unk4 = (HuPadStkY[temp_r31->unk1C] < -36) ? 1 : 0; + } else { + s32 sp1E4[3] = { 50, 30, 25 }; + s32 sp1D8[3] = { 90, 80, 70 }; + + temp_r31->unk4 = ((temp_r31->unk20 && (temp_r31->unk88 > temp_r31->unk94+sp1E4[temp_r31->unk20-1] || temp_r31->unk90 > sp1D8[temp_r31->unk20-1]))) ? 1 : 0; + temp_r31->unk48[0]->unk1C.z = temp_r31->unk48[1]->unk1C.z = -0.03125f+(temp_r31->unk4 ? -0.26875f : 0.0f); + } + } else { + temp_r31->unk48[0]->unk1C.z = temp_r31->unk48[1]->unk1C.z = 0; + } + if(lbl_1_bss_18 == -1 && sp180) { + if(fn_1_57C_inline(temp_r31->unk48[0]->unk18_u+sp180, temp_r31->unk48[0]->unk1C.y, temp_r31->unk48[0], NULL) == 0) { + if(fn_1_57C_inline(temp_r31->unk48[1]->unk18_u+sp180, temp_r31->unk48[1]->unk1C.y, temp_r31->unk48[1], NULL) == 0) { + float sp17C = temp_r31->unk48[0]->unk18; + float sp178 = temp_r31->unk48[1]->unk18; + fn_1_6D0(temp_r31->unk48[0]->unk18_u+sp180, temp_r31->unk48[0]->unk1C.y, temp_r31->unk48[0]); + fn_1_6D0(temp_r31->unk48[1]->unk18_u+sp180, temp_r31->unk48[1]->unk1C.y, temp_r31->unk48[1]); + temp_r31->unk48[0]->unk1C.x = (sp17C*0.5)+(0.5*temp_r31->unk48[0]->unk18); + temp_r31->unk48[1]->unk1C.x = (sp178*0.5)+(0.5*temp_r31->unk48[1]->unk18); + } + } + } + if(lbl_1_bss_18 != -1) { + temp_r26 = temp_r31->unk70; + } + if(temp_r26 != temp_r31->unk70) { + StructBss2A6C *temp_r29 = temp_r31->unk48[0]; + StructBss2A6C *temp_r30 = temp_r31->unk48[1]; + s32 sp174 = temp_r29->unk18; + float temp_f25 = temp_r29->unk1C.y; + s32 sp1C8[4] = { 0, 1, 0, -1 }; + s32 sp1B8[4] = { 1, 0, -1, 0 }; + StructBss2A6C *sp170; + if(fn_1_57C_inline(sp174+sp1C8[temp_r26], temp_f25+sp1B8[temp_r26], temp_r30, &sp170) == 0) { + if(temp_r31->unk70 != temp_r26) { + temp_r30->unk5 = 1; + temp_r30->unk4 = (((((temp_r26-temp_r31->unk70)+8)%4)-1)*4)+temp_r31->unk70+1; + } + temp_r31->unk70 = temp_r26; + fn_1_6D0(sp174+sp1C8[temp_r26], temp_f25+sp1B8[temp_r26], temp_r30); + temp_r30->unk1C.x = temp_r30->unk18; + } else { + float temp_f31; + s32 temp_r24; + if(temp_r26%2 == 0) { + s32 sp16C = (temp_r26 == 2) ? 1 : 0; + temp_f31 = temp_f25+((sp16C == 1) ? sp1B8[temp_r26] : sp1B8[temp_r26]); + fn_1_57C_inline(sp174, temp_f31, (sp16C == 0) ? temp_r30 : temp_r30, &sp170); + if(temp_r26 == 2) { + if(!sp170 || sp170->unk1C.y <= temp_f31) { + temp_f31 = ((sp16C == 1) ? 1.0f : 0.0f)+((sp170) ? sp170->unk1C.y+1.0f : 0.0f); + temp_r24 = sp174; + } else { + temp_f31 = (sp170->unk1C.y-1.0f)-(sp16C==0); + temp_r24 = sp174; + } + } else { + if(sp170->unk1C.y >= temp_f31) { + temp_f31 = ((sp16C == 1) ? 1.0f : 0.0f)+((sp170) ? sp170->unk1C.y-2.0f : 0.0f); + temp_r24 = sp174; + } else { + temp_f31 = (sp170->unk1C.y-1.0f)-(sp16C==0); + temp_r24 = sp174; + } + } + } else { + temp_r24 = sp174-sp1C8[temp_r26]; + temp_f31 = temp_f25; + } + if(fn_1_57C_inline(temp_r24, temp_f31, temp_r29, NULL) == 0) { + if(fn_1_57C_inline(temp_r24+sp1C8[temp_r26], temp_f31+sp1B8[temp_r26], temp_r30, NULL) == 0) { + float sp168 = temp_r31->unk48[0]->unk18; + float sp164 = temp_r31->unk48[1]->unk18; + if(temp_r31->unk70 != temp_r26) { + temp_r30->unk5 = 1; + temp_r30->unk4 = (((((temp_r26-temp_r31->unk70)+8)%4)-1)*4)+temp_r31->unk70+1; + } + temp_r31->unk70 = temp_r26; + if(temp_r26 == 2) { + fn_1_6D0(temp_r24, temp_f31+(0.5*(float)sp1B8[temp_r26]), temp_r29); + fn_1_6D0(temp_r24+sp1C8[temp_r26], temp_f31+sp1B8[temp_r26], temp_r30); + fn_1_6D0(temp_r24, temp_f31, temp_r29); + } else { + fn_1_6D0(temp_r24, temp_f31, temp_r29); + fn_1_6D0(temp_r24+sp1C8[temp_r26], temp_f31+sp1B8[temp_r26], temp_r30); + + } + temp_r31->unk48[0]->unk1C.x = (sp168*0.5)+(0.5*temp_r31->unk48[0]->unk18); + temp_r31->unk48[1]->unk1C.x = (sp164*0.5)+(0.5*temp_r31->unk48[1]->unk18); + } + } + + } + } + } + if(temp_r31->unk48[0]) { + temp_r31->unk98 = 10.0+((100.0*((temp_r31->unk48[0]->unk18+temp_r31->unk48[0]->unk1C.x)/2.0))-500); + temp_r31->unk9C = 25.0f+((100.0f*temp_r31->unk48[0]->unk1C.y)-500.0f); + } + if(lbl_1_bss_18 == -1) { + Vec sp1AC; + Vec sp1A0; + sp1AC.x = temp_r31->unk98; + sp1AC.y = temp_r31->unk9C; + sp1AC.z = 55; + Hu3D3Dto2D(&sp1AC, 1, &sp1A0); + HuSprPosSet(temp_r31->unkA4, 0, sp1A0.x, sp1A0.y); + } + } +} + +void fn_1_8AC8(StructBss2A6C *arg0, StructSp14C8 *arg1); + +#define CHECK_2E48(arg0, arg1, arg2) \ + (((arg0)-1 <= 0 || (arg2[(arg0)-1][(arg1)] && arg2[(arg0)-1][(arg1)]->unk0)) && \ + ((arg0)-1 >= 11 || (arg2[(arg0)+1][(arg1)] && arg2[(arg0)+1][(arg1)]->unk0)) && \ + ((arg1)-1 <= 0 || (arg2[(arg0)][(arg1)-1] && arg2[(arg0)][(arg1)-1]->unk0)) && \ + ((arg1)-1 >= 8 || (arg2[(arg0)][(arg1)+1] && arg2[(arg0)][(arg1)+1]->unk0)) && \ + ((arg0)-1 >= 11 || (arg1)-1 <= 0 || (arg2[(arg0)+1][(arg1)-1] && arg2[(arg0)+1][(arg1)-1]->unk0)) && \ + ((arg0)-1 >= 11 || (arg1)-1 >= 8 || (arg2[(arg0)+1][(arg1)+1] && arg2[(arg0)+1][(arg1)+1]->unk0)) && \ + ((arg0)-1 <= 0 || (arg1)-1 <= 0 || (arg2[(arg0)-1][(arg1)-1] && arg2[(arg0)-1][(arg1)-1]->unk0)) && \ + ((arg0)-1 <= 0 || (arg1)-1 >= 8 || (arg2[(arg0)-1][(arg1)+1] && arg2[(arg0)-1][(arg1)+1]->unk0))) + +void fn_1_52A4(s32 arg0) +{ + omObjData *sp1EC = lbl_1_bss_30; + StructBss2A6C *sp2E48[14][19] = {}; + StructBss2A6C *sp1E8 = NULL; + StructBss2A6C *temp_r31; + StructBss2A6C *temp_r30; + s32 temp_r29; + s32 temp_r23; + s32 temp_r19; + s32 temp_r18; + float temp_f31; + float temp_f30; + float temp_f29; + + StructSp14C8 sp14C8[204]; + StructBss2A6C *spD58[476]; + StructSp14C8 *spA28[204]; + float sp6F8[204]; + float sp3C8[204]; + s16 sp230[204]; + + for(temp_r18=0; temp_r18<12; temp_r18++) { + for(temp_r31 = lbl_1_bss_7884[temp_r18]; temp_r31; temp_r31=temp_r31->unk48) { + s32 sp1E4 = temp_r31->unk1; + s32 sp1E0 = (((sp1E4 & 0x2) == 0 && (arg0 == 4)) || ((sp1E4 & 0x2) && (temp_r31->unk3 & (1 << arg0)))); + temp_f29 = (sp1E0) ? temp_r31->unk1C.z : 0; + temp_r31->unk2C = (void *)(temp_r31->unk30 = temp_r31->unk34 = NULL); + temp_r31->unk38 = temp_r31->unk3C = temp_r31->unk40 = temp_r31->unk44 = NULL; + if(arg0 == 4) { + temp_r31->unk5 +=temp_r31->unk4 != 0 && temp_r31->unk5 != 0; + temp_r31->unk5 = (temp_r31->unk4 == 0 || (temp_r31->unk5 > (((temp_r31->unk4-1)/4 == 1) ? 15 : 15))) ? 0 : temp_r31->unk5; + temp_r31->unk4 = (temp_r31->unk5 == 0) ? 0 : temp_r31->unk4; + temp_r31->unk1C.x = (0.5*temp_r31->unk18)+(0.5*temp_r31->unk1C.x); + } + if(temp_r31->unk0) { + s32 sp1DC = 0; + StructBss2A6C *sp1D8; + if((temp_r31->unk1 & 0x1) && temp_r31->unk1C.y == 0.0f && !temp_r31->unk4C) { + sp1DC = 1; + sp1D8 = NULL; + } else if((temp_r31->unk1 & 0x1) && temp_r31->unk4C && (temp_r31->unk4C->unk1C.y == temp_r31->unk1C.y-1.0f)) { + sp1DC = 2; + sp1D8 = temp_r31->unk4C; + } else { + if(fn_1_57C(temp_r18, temp_r31->unk1C.y+temp_f29, temp_r31, &sp1D8)) { + if(!sp1D8 || temp_r31->unk1C.y+temp_f29 >= sp1D8->unk1C.y) { + sp1DC = 2; + } + } + } + if(sp1DC != 0) { + if(temp_r31->unk1 & 0x2) { + float temp_f28 = (temp_r31->unk1C.y+temp_f29)-((!sp1D8) ? 0.0f : (1.0f+sp1D8->unk1C.y)); + temp_f28 = temp_r31->unk1C.y-((!sp1D8) ? 0.0f : (1.0f+sp1D8->unk1C.y)); + if(temp_r31->unk50->unk48[0]->unk18 != temp_r31->unk50->unk48[1]->unk18) { + temp_r31->unk50->unk48[0]->unk1C.y = ((!sp1D8) ? 0.0f : (1.0f+sp1D8->unk1C.y)); + temp_r31->unk50->unk48[1]->unk1C.y = ((!sp1D8) ? 0.0f : (1.0f+sp1D8->unk1C.y)); + } else { + temp_r31->unk50->unk48[0]->unk1C.y -= temp_f28; + temp_r31->unk50->unk48[1]->unk1C.y -= temp_f28; + } + temp_r31->unk50->unk48[0]->unk1C.z = 0; + temp_r31->unk50->unk48[1]->unk1C.z = 0; + if(sp1E0) { + if(!sp1D8 || ((sp1D8->unk1 & 0x1) && (sp1D8->unk1 & 0x2) == 0)) { + temp_r31->unk50->unk71 -= (temp_r31->unk50->unk71 != 0 && lbl_1_bss_18 == -1); + + } + } + if(temp_r31->unk50->unk71 == 0 || temp_r31->unk50->unk4 != 0 && (!sp1D8 || ((sp1D8->unk1 & 0x1) && (sp1D8->unk1 & 0x2) == 0))) { + temp_r31->unk50->unk48[0]->unk1 &= ~0x2; + temp_r31->unk50->unk48[1]->unk1 &= ~0x2; + temp_r31->unk50->unk48[0]->unk1 |= 0x10; + temp_r31->unk50->unk48[1]->unk1 |= 0x10; + temp_r31->unk1 |= 0x1; + if(temp_r31->unk50->unk48[0]->unk18 != temp_r31->unk50->unk48[1]->unk18) { + s32 sp1D4; + s32 sp1D0 = (temp_r31 == temp_r31->unk50->unk48[1]) ? 1 : 0; + s32 sp1CC = temp_r31->unk50->unk48[sp1D0]->unk18; + s32 sp1C8 = temp_r31->unk50->unk48[1-sp1D0]->unk18; + float sp1C4 = temp_r31->unk50->unk48[sp1D0]->unk1C.y; + float sp1C0 = temp_r31->unk50->unk48[1-sp1D0]->unk1C.y; + sp1D4 = (sp1CC < sp1C8 || (sp1CC == sp1C8 && sp1C4 < sp1C0)) ? 1 : 0; + if(sp1D4 == 1) { + StructBss2A6C *temp_r21 = temp_r31->unk50->unk48[1-sp1D0]; + StructBss2A6C *temp_r20 = (temp_r21) ? temp_r21->unk4C : NULL; + if(temp_r21) { + if((!temp_r20 && temp_r21->unk1C.y == 0.0f) || (temp_r20 && temp_r21->unk1C.y == temp_r20->unk1C.y+1.0f && (temp_r20->unk1 & 0x1) && (temp_r20->unk1 & 0x2) == 0)) { + temp_r21->unk1C.y = (temp_r20) ? (temp_r20->unk1C.y+1.0f) : 0.0f; + temp_r21->unk1 &= ~0x1; + temp_r21->unk1 |= (temp_r20 && ((temp_r20->unk1 & 0x1) == 0 || (temp_r20->unk1 & 0x2) != 0)) ? 0 : 1; + temp_r21->unk1C.z = (temp_r21->unk1 & 0x1) ? -0.010416667f : ((!temp_r20) ? -0.010416667f : temp_r20->unk1C.z); + sp1E8 = temp_r21; + } + } + } + } + temp_r31->unk4 = temp_r31->unk5 = 0; + if(temp_r31->unk50->unk48[0]->unk18 == temp_r31->unk50->unk48[1]->unk18) { + s32 sp1BC = (temp_r31->unk50->unk48[1] == temp_r31) ? 1 : 0; + s32 sp1B8 = temp_r31->unk50->unk48[0]->unk1C.y > temp_r31->unk50->unk48[1]->unk1C.y; + temp_r31->unk50->unk48[1-sp1B8]->unk1C.y = 1+temp_r31->unk50->unk48[sp1B8]->unk1C.y; + temp_r31->unk50->unk48[1-sp1B8]->unk1C.z = -0.010416667f; + temp_r31->unk50->unk48[0]->unk1 |= 0x1; + temp_r31->unk50->unk48[1]->unk1 |= 0x1; + temp_r31->unk50->unk48[0]->unk4 = temp_r31->unk50->unk48[0]->unk5 = 0; + temp_r31->unk50->unk48[1]->unk4 = temp_r31->unk50->unk48[1]->unk5 = 0; + temp_r31->unk38 = (temp_r31->unk50->unk48[1] == temp_r31) ? temp_r31->unk50->unk48[0] : temp_r31->unk50->unk48[1]; + if(sp1BC) { + temp_r31->unk50->unk48[0]->unk1 |= 0x8; + } else { + temp_r31->unk50->unk48[1]->unk1 |= 0x8; + } + + } + temp_r31->unk50->unk48[0] = NULL; + temp_r31->unk50->unk48[1] = NULL; + } + } else { + temp_r31->unk1C.y = (sp1D8) ? (1.0f+sp1D8->unk1C.y) : 0.0f; + temp_r31->unk1 &= ~0x1; + temp_r31->unk1 |= (sp1D8 && ((sp1D8->unk1 & 0x1) == 0 || (sp1D8->unk1 & 0x2) != 0)) ? 0 : 1; + temp_r31->unk1C.z = (temp_r31->unk1 & 0x1) ? -0.010416667f : ((!sp1D8) ? -0.010416667f : sp1D8->unk1C.z); + } + } else { + temp_r31->unk1C.y += temp_f29; + temp_r31->unk1C.z = (sp1E0) ? ((temp_r31->unk1 & 0x3) ? 0.0f : -0.010416667f+temp_r31->unk1C.z) : temp_r31->unk1C.z; + if(temp_r31->unk1 & 0x1) { + temp_r31->unk1 &= ~0x1; + } + } + } + if((temp_r31->unk1 & 0x1) && (sp1E4 & 0x1) && (temp_r31->unk1 & 0x8) == 0 && temp_r31 != sp1E8) { + temp_r31->unk8[0] = temp_r31->unk8[1] = temp_r31->unk8[2] = temp_r31->unk8[3] = 0; + temp_r31->unk3 = 0; + temp_r31->unk1 &= ~0x10; + } + temp_r31->unk1 &= ~0x8; + if((temp_r31->unk1 & 0x1) && (temp_r31->unk1 & 0x2) == 0) { + sp2E48[temp_r31->unk18+1][(int)temp_r31->unk1C.y+1] = temp_r31; + } + if(temp_r31->unk1 & 0x2) { + temp_r31->unk1C.z = 0; + } + } + } + temp_r23 = 0; + { + s32 sp1B4; + for(temp_r18=0; temp_r18<12; temp_r18++) { + StructBss2A6C *sp1B0 = (temp_r18 < 11) ? lbl_1_bss_7884[temp_r18+1] : NULL; + StructBss2A6C *sp1AC = NULL; + StructBss2A6C *sp1A8 = NULL; + float sp1A4 = (sp1B0) ? (sp1B0->unk1C.y) : 0.0f; + for(temp_r31 = lbl_1_bss_7884[temp_r18]; temp_r31; temp_r31=temp_r31->unk48) { + s32 sp1A0 = temp_r31->unk18+1; + s32 sp19C = (int)temp_r31->unk1C.y+1; + if((temp_r31->unk1 & 0x1) && (temp_r31->unk1 & 0x2) == 0) { + if(sp2E48[sp1A0][sp19C+1]) { + temp_r31->unk38 = sp2E48[sp1A0][sp19C+1]; + temp_r31->unk38->unk3C = temp_r31; + } + if(sp2E48[sp1A0+1][sp19C]) { + sp1B0 = sp2E48[sp1A0+1][sp19C]; + temp_r31->unk44 = sp1B0; + temp_r31->unk44->unk40 = temp_r31; + } + sp1AC = sp2E48[sp1A0+1][sp19C+1]; + sp1A8 = sp2E48[sp1A0+1][sp19C-1]; + if(temp_r31->unk0 == 5 && temp_r31->unk2C == NULL && temp_r31->unk1C.y <= 8.0f && sp19C-1 < 9) { + s32 sp198 = temp_r31->unk0 == 5; + sp14C8[temp_r23].unk0 = 5; + sp14C8[temp_r23].unk4[0] = (sp198) ? temp_r31->unk8[0] : temp_r30->unk8[0]; + sp14C8[temp_r23].unk4[1] = (sp198) ? temp_r31->unk8[0] : temp_r30->unk8[1]; + sp14C8[temp_r23].unk4[2] = (sp198) ? temp_r31->unk8[0] : temp_r30->unk8[2]; + sp14C8[temp_r23].unk4[3] = (sp198) ? temp_r31->unk8[0] : temp_r30->unk8[3]; + sp14C8[temp_r23].unk1 = 1; + sp14C8[temp_r23].unk2 = 0; + sp14C8[temp_r23].unk14 = (sp198) ? temp_r31 : temp_r30; + sp14C8[temp_r23].unk18 = (sp198) ? temp_r31 : temp_r30; + sp14C8[temp_r23].unk1C = 0; + if(sp198) { + temp_r31->unk30 = NULL; + temp_r31->unk34 = NULL; + temp_r31->unk2C = &sp14C8[temp_r23]; + } else { + temp_r30->unk30 = NULL; + temp_r30->unk34 = NULL; + temp_r30->unk2C = &sp14C8[temp_r23]; + } + temp_r23++; + } + for(temp_r29=0; temp_r29<((temp_r31 && temp_r31->unk0 == 5) ? 2 : 0)+2; temp_r29++) { + temp_r30 = (temp_r29 == 0) ? temp_r31->unk48 : ((temp_r29 == 1) ? sp1B0 : ((temp_r29 == 2) ? sp1AC : sp1A8)); + if(temp_r30 && (temp_r30->unk1 & 0x1)) { + if(temp_r29 != 1 || temp_r31->unk1C.y == temp_r30->unk1C.y) { + if(temp_r31->unk0 == temp_r30->unk0) { + if((temp_r31->unk0 >= 1 && temp_r31->unk0 <= 4) || (temp_r31->unk0 == 5 && (temp_r31->unk1C.y <= 8.0f || temp_r30->unk1C.y <= 8.0f))) { + StructSp14C8 *temp_r28 = temp_r31->unk2C; + StructSp14C8 *temp_r27 = temp_r30->unk2C; + if(temp_r31->unk2C && temp_r30->unk2C) { + if(temp_r31->unk2C != temp_r30->unk2C) { + StructBss2A6C *sp194 = temp_r28->unk14; + StructBss2A6C *sp190 = temp_r27->unk14; + while(1) { + sp190->unk2C = temp_r28; + if(!sp190->unk34) { + break; + } + sp190 = sp190->unk34; + } + temp_r27->unk14->unk30 = temp_r28->unk18; + temp_r28->unk18->unk34 = temp_r27->unk14; + temp_r28->unk4[0] = (temp_r28->unk4[0] > temp_r27->unk4[0]) ? temp_r28->unk4[0] : temp_r27->unk4[0]; + temp_r28->unk4[1] = (temp_r28->unk4[1] > temp_r27->unk4[1]) ? temp_r28->unk4[1] : temp_r27->unk4[1]; + temp_r28->unk4[2] = (temp_r28->unk4[2] > temp_r27->unk4[2]) ? temp_r28->unk4[2] : temp_r27->unk4[2]; + temp_r28->unk4[3] = (temp_r28->unk4[3] > temp_r27->unk4[3]) ? temp_r28->unk4[3] : temp_r27->unk4[3]; + temp_r28->unk1 = temp_r28->unk1+temp_r27->unk1; + temp_r28->unk2 |= temp_r27->unk2; + temp_r28->unk18 = sp190; + temp_r27->unk14 = temp_r27->unk18 = NULL; + temp_r27->unk1 = 0; + temp_r27->unk0 = 0; + temp_r27->unk1C = temp_r28; + } + } else { + if(temp_r31->unk2C) { + temp_r30->unk2C = temp_r31->unk2C; + temp_r28->unk18->unk34 = temp_r30; + temp_r30->unk30 = temp_r28->unk18; + temp_r28->unk18 = temp_r30; + temp_r28->unk1++; + temp_r28->unk2 |= temp_r30->unk3; + temp_r28->unk4[0] = (temp_r28->unk4[0] < temp_r30->unk8[0]) ? temp_r30->unk8[0] : temp_r28->unk4[0]; + temp_r28->unk4[1] = (temp_r28->unk4[1] < temp_r30->unk8[1]) ? temp_r30->unk8[1] : temp_r28->unk4[1]; + temp_r28->unk4[2] = (temp_r28->unk4[2] < temp_r30->unk8[2]) ? temp_r30->unk8[2] : temp_r28->unk4[2]; + temp_r28->unk4[3] = (temp_r28->unk4[3] < temp_r30->unk8[3]) ? temp_r30->unk8[3] : temp_r28->unk4[3]; + } else if(temp_r30->unk2C) { + temp_r31->unk2C = temp_r30->unk2C; + temp_r27->unk18->unk34 = temp_r31; + temp_r31->unk30 = temp_r27->unk18; + temp_r27->unk18 = temp_r31; + temp_r27->unk1++; + temp_r27->unk2 |= temp_r31->unk3; + temp_r27->unk4[0] = (temp_r27->unk4[0] < temp_r31->unk8[0]) ? temp_r31->unk8[0] : temp_r27->unk4[0]; + temp_r27->unk4[1] = (temp_r27->unk4[1] < temp_r31->unk8[1]) ? temp_r31->unk8[1] : temp_r27->unk4[1]; + temp_r27->unk4[2] = (temp_r27->unk4[2] < temp_r31->unk8[2]) ? temp_r31->unk8[2] : temp_r27->unk4[2]; + temp_r27->unk4[3] = (temp_r27->unk4[3] < temp_r31->unk8[3]) ? temp_r31->unk8[3] : temp_r27->unk4[3]; + } else { + sp14C8[temp_r23].unk0 = temp_r31->unk0; + sp14C8[temp_r23].unk4[0] = (temp_r31->unk8[0] > temp_r30->unk8[0]) ? temp_r31->unk8[0] : temp_r30->unk8[0]; + sp14C8[temp_r23].unk4[1] = (temp_r31->unk8[1] > temp_r30->unk8[1]) ? temp_r31->unk8[1] : temp_r30->unk8[1]; + sp14C8[temp_r23].unk4[2] = (temp_r31->unk8[2] > temp_r30->unk8[2]) ? temp_r31->unk8[2] : temp_r30->unk8[2]; + sp14C8[temp_r23].unk4[3] = (temp_r31->unk8[3] > temp_r30->unk8[3]) ? temp_r31->unk8[3] : temp_r30->unk8[3]; + sp14C8[temp_r23].unk1 = 2; + sp14C8[temp_r23].unk2 = (temp_r31->unk3 | temp_r30->unk3); + sp14C8[temp_r23].unk14 = temp_r31; + sp14C8[temp_r23].unk18 = temp_r30; + sp14C8[temp_r23].unk1C = NULL; + temp_r31->unk30 = NULL; + temp_r31->unk34 = temp_r30; + temp_r30->unk30 = temp_r31; + temp_r30->unk34 = NULL; + temp_r31->unk2C = &sp14C8[temp_r23]; + temp_r30->unk2C = &sp14C8[temp_r23]; + temp_r23++; + } + } + } + } + } + } + } + } + } + } + for(temp_r29=0; temp_r29unk18+1; + s32 temp_r25 = (int)sp18C->unk1C.y+1; + if(sp14C8[temp_r29].unk0 != 0 && temp_r25 <= 9) { + if(!CHECK_2E48(temp_r24, temp_r25, sp2E48)) { + sp14C8[temp_r29].unk0 = 0; + } else { + sp14C8[temp_r29].unk2 |= + ((sp2E48[temp_r24-1][temp_r25]) ? sp2E48[temp_r24-1][temp_r25]->unk3 : 0) | + ((sp2E48[temp_r24+1][temp_r25]) ? sp2E48[temp_r24+1][temp_r25]->unk3 : 0) | + ((sp2E48[temp_r24][temp_r25-1]) ? sp2E48[temp_r24][temp_r25-1]->unk3 : 0) | + ((sp2E48[temp_r24][temp_r25+1]) ? sp2E48[temp_r24][temp_r25+1]->unk3 : 0) | + ((sp2E48[temp_r24+1][temp_r25-1]) ? sp2E48[temp_r24+1][temp_r25-1]->unk3 : 0) | + ((sp2E48[temp_r24+1][temp_r25+1]) ? sp2E48[temp_r24+1][temp_r25+1]->unk3 : 0) | + ((sp2E48[temp_r24-1][temp_r25-1]) ? sp2E48[temp_r24-1][temp_r25-1]->unk3 : 0) | + ((sp2E48[temp_r24-1][temp_r25+1]) ? sp2E48[temp_r24-1][temp_r25+1]->unk3 : 0); + } + sp18C = sp18C->unk34; + if(!sp18C) { + break; + } + } + } + } + for(temp_r29=0; temp_r29= 1 && sp14C8[temp_r29].unk0 <= 4 && sp14C8[temp_r29].unk1 >= 3) || sp14C8[temp_r29].unk0 == 5) { + fn_1_38C(&sp14C8[temp_r29].unk2, sp14C8[temp_r29].unk4); + } + } + sp1B4 = 1; + while(sp1B4 >= 0) { + s32 temp_r22 = 0; + s32 sp188 = 0; + for(temp_r29=0; temp_r29= 1 && sp14C8[temp_r29].unk0 <= 4 && sp14C8[temp_r29].unk1 >= 3)) || (sp1B4 == 1 && sp14C8[temp_r29].unk0 == 5)) { + StructBss2A6C *temp_r26 = sp14C8[temp_r29].unk14; + s32 sp184 = 0; + s32 sp180 = 0; + float temp_f31 = -1; + float temp_f30 = -1; + if(sp14C8[temp_r29].unk0 == 5) { + lbl_1_bss_D0++; + lbl_1_bss_D0 %= 5; + lbl_1_bss_D4[lbl_1_bss_D0][1] = 1; + lbl_1_bss_D4[lbl_1_bss_D0][0] = 0; + for(temp_r19=0; temp_r19<10; temp_r19++) { + Hu3DModelAttrSet(lbl_1_bss_30->model[((lbl_1_bss_D0*10)+13+temp_r19)], 1); + } + } + for(temp_r19=0; temp_r19unk18; + temp_f30 = temp_r26->unk1C.y; + } else { + sp180++; + temp_f31 = (temp_f31*(1.0-(1.0/sp180)))+(temp_r26->unk18*(1.0/sp180)); + temp_f30 = (temp_f30*(1.0-(1.0/sp180)))+(temp_r26->unk1C.y*(1.0/sp180)); + } + if(sp14C8[temp_r29].unk0 == 5) { + if(lbl_1_bss_D4[lbl_1_bss_D0][0] < 10) { + Hu3DModelPosSet(lbl_1_bss_30->model[((lbl_1_bss_D0*10)+13+lbl_1_bss_D4[lbl_1_bss_D0][0])], (((temp_r26->unk18*100)-500.0)-50.0), 50.0f+((100.0f*temp_r26->unk1C.y)-500.0f), 120); + Hu3DModelAttrReset(lbl_1_bss_30->model[((lbl_1_bss_D0*10)+13+lbl_1_bss_D4[lbl_1_bss_D0][0])], 1); + Hu3DMotionTimeSet(lbl_1_bss_30->model[((lbl_1_bss_D0*10)+13+lbl_1_bss_D4[lbl_1_bss_D0][0])], 2.0f); + lbl_1_bss_D4[lbl_1_bss_D0][0]++; + lbl_1_bss_B8.unk4 += 4; + if(lbl_1_bss_D4[lbl_1_bss_D0][0] == 1) { + lbl_1_bss_B8.unk4 += 7; + } + } + fn_1_8AC8(temp_r26->unk38, &sp14C8[temp_r29]); + fn_1_8AC8((temp_r26->unk44 && temp_r26->unk44->unk38) ? temp_r26->unk44->unk38 : temp_r26->unk44, &sp14C8[temp_r29]); + fn_1_8AC8((temp_r26->unk40 && temp_r26->unk40->unk38) ? temp_r26->unk40->unk38 : temp_r26->unk40, &sp14C8[temp_r29]); + spD58[temp_r22] = temp_r26->unk38; + temp_r22++; + spD58[temp_r22] = temp_r26->unk3C; + temp_r22++; + if(temp_r26->unk44) { + spD58[temp_r22] = temp_r26->unk44->unk38; + temp_r22++; + spD58[temp_r22] = temp_r26->unk44->unk3C; + temp_r22++; + } + spD58[temp_r22] = temp_r26->unk44; + temp_r22++; + if(temp_r26->unk40) { + spD58[temp_r22] = temp_r26->unk40->unk38; + temp_r22++; + spD58[temp_r22] = temp_r26->unk40->unk3C; + temp_r22++; + } + spD58[temp_r22] = temp_r26->unk40; + temp_r22++; + spD58[temp_r22] = temp_r26; + temp_r22++; + } else { + fn_1_8AC8(temp_r26, &sp14C8[temp_r29]); + sp184 += fn_1_7F8(temp_r26, &sp14C8[temp_r29]); + } + temp_r26 = temp_r26->unk34; + if(!temp_r26) { + break; + } + } + if(sp14C8[temp_r29].unk0 == 5 && (sp14C8[temp_r29].unk2 & 0xF)) { + Work19C8 *sp220[4]; + s32 sp17C; + for(sp17C=0; sp17C<4; sp17C++) { + if((1 << sp17C) & (sp14C8[temp_r29].unk2)) { + sp220[sp17C] = lbl_1_bss_34[sp17C]->data; + omVibrate(sp220[sp17C]->unk14, 12, 6, 6); + } + } + } + if(lbl_1_bss_48[(sp14C8[temp_r29].unk0 == 5) ? 0 : 1].unk0 < 3) { + lbl_1_bss_48[(sp14C8[temp_r29].unk0 == 5) ? 0 : 1].unk4[lbl_1_bss_48[(sp14C8[temp_r29].unk0 == 5) ? 0 : 1].unk0] = 0.45*(((temp_f31-5.0)-0.5)/5.5); + lbl_1_bss_48[(sp14C8[temp_r29].unk0 == 5) ? 0 : 1].unk0++; + } + if(sp1B4 == 0 && sp184 > 0 && lbl_1_bss_18 == -1) { + s32 sp178 = 0; + s32 sp174 = fn_1_4C0(&sp14C8[temp_r29].unk2, sp14C8[temp_r29].unk4); + Vec sp214 = { 0, 0, 50 }; + s32 temp_r17; + for(temp_r17=0; temp_r17<4; temp_r17++) { + sp178 += ((1 << temp_r17) != 0) & sp14C8[temp_r29].unk2; + } + sp178--; + sp214.x = (100.0f*temp_f31)-500.0; + sp214.y = 100+((100*temp_f30)-500); + sp214.x += sp178*12; + sp214.y -= sp178*30; + for(temp_r17=3; temp_r17>=0; temp_r17--) { + if((1 << temp_r17) & sp14C8[temp_r29].unk2) { + Vec sp208; + lbl_1_bss_2684[lbl_1_bss_2680].unkC = 1; + lbl_1_bss_2684[lbl_1_bss_2680].unk8 = sp184; + lbl_1_bss_2684[lbl_1_bss_2680].unk10 = 1< 3) ? 3 : sp174; + if(lbl_1_bss_48[sp174+3].unk0 < 3) { + lbl_1_bss_48[sp174+3].unk4[lbl_1_bss_48[sp174+3].unk0] = 0.45*(((temp_f31-5.0)-0.5)/5.5); + lbl_1_bss_48[sp174+3].unk0++; + } + } + spA28[sp188] = &sp14C8[temp_r29]; + sp230[sp188] = temp_r22; + sp6F8[sp188] = temp_f31; + sp3C8[sp188] = temp_f30; + sp188++; + } + } + for(temp_r29=0; temp_r29 0 && lbl_1_bss_18 == -1) { + s32 sp16C; + s32 sp168 = 0; + s32 sp164 = fn_1_4C0(&spA28[temp_r29]->unk2, spA28[temp_r29]->unk4); + Vec sp1FC = { 0, 0, 50 }; + for(sp16C=0; sp16C<4; sp16C++) { + sp168 += ((1 << sp16C) != 0) & spA28[temp_r29]->unk2; + } + sp168--; + sp1FC.x = (100.0f*sp6F8[temp_r29])-500.0; + sp1FC.y = 100+((100*sp3C8[temp_r29])-500); + sp1FC.x += sp168*12; + sp1FC.y -= sp168*30; + for(sp16C=3; sp16C>=0; sp16C--) { + if((1 << sp16C) & spA28[temp_r29]->unk2) { + Vec sp1F0; + lbl_1_bss_2684[lbl_1_bss_2680].unkC = 1; + lbl_1_bss_2684[lbl_1_bss_2680].unk8 = sp170; + lbl_1_bss_2684[lbl_1_bss_2680].unk10 = 1< 3) ? 3 : sp164; + if(lbl_1_bss_48[sp164+3].unk0 < 3) { + lbl_1_bss_48[sp164+3].unk4[lbl_1_bss_48[sp164+3].unk0] = 0.45*(((sp6F8[temp_r29]-5.0)-0.5)/5.5); + lbl_1_bss_48[sp164+3].unk0++; + } + } + } + sp1B4--; + } + } + +} +#undef CHECK_2E48 + +void fn_1_8AC8(StructBss2A6C *arg0, StructSp14C8 *arg1) +{ + StructBss2A6C *temp_r31 = arg0; + if(!arg0) { + return; + } + if(arg0->unk0 == 0) { + return; + } + while(temp_r31->unk48) { + if(!temp_r31->unk48->unk0 || (temp_r31->unk48->unk1 & 0x1) == 0 || temp_r31->unk48->unk1C.y != temp_r31->unk1C.y+1.0f) { + break; + } + temp_r31 = temp_r31->unk48; + temp_r31->unk8[0] = arg1->unk4[0]+((arg1->unk2 & 0x1) ? 1 : 0); + temp_r31->unk8[1] = arg1->unk4[1]+((arg1->unk2 & 0x2) ? 1 : 0); + temp_r31->unk8[2] = arg1->unk4[2]+((arg1->unk2 & 0x4) ? 1 : 0); + temp_r31->unk8[3] = arg1->unk4[3]+((arg1->unk2 & 0x8) ? 1 : 0); + temp_r31->unk3 = arg1->unk2; + + } +} + +//decomp.me link is https://decomp.me/scratch/PbkiW +void fn_1_8C10(omObjData *object) +{ + s32 temp_r31; + s32 temp_r30; + + Work19C8 *sp88[4]; + lbl_1_bss_4++; + { + s32 temp_r23; + for(temp_r23=0; temp_r23<4; temp_r23++) { + fn_1_19C8(lbl_1_bss_34[temp_r23]); + fn_1_52A4(temp_r23); + } + } + + fn_1_52A4(4); + for(temp_r31=0; temp_r31<4; temp_r31++) { + sp88[temp_r31] = lbl_1_bss_34[temp_r31]->data; + } + if(lbl_1_bss_18 == -1) { + if(sp88[0]->unk24 >= 100 || sp88[1]->unk24 >= 100 || sp88[2]->unk24 >= 100 || sp88[3]->unk24 >= 100) { + s32 sp78[4] = { 0, 1, 2, 3 }; + for(temp_r31=0; temp_r31<4; temp_r31++) { + s32 temp_r22 = rand8()%4; + if(sp88[temp_r22]->unk24 >= 100) { + lbl_1_bss_18 = temp_r22; + for(temp_r30=0; temp_r30<4; temp_r30++) { + if(temp_r30 != temp_r22) { + if(sp88[temp_r30]->unk24 >= 100) { + sp88[temp_r30]->unk24 = sp88[temp_r30]->unk28; + } + } + } + } else { + for(temp_r30=temp_r22; temp_r30<3-temp_r31; temp_r30++) { + sp78[temp_r30] = sp78[temp_r30+1]; + } + } + } + } + } + temp_r31 = (sp88[0]->unk79 != 0)+(sp88[1]->unk79 != 0)+(sp88[2]->unk79 != 0)+(sp88[3]->unk79 != 0); + if(lbl_1_bss_18 == -1 && temp_r31 == 3) { + for(temp_r30=0; temp_r30<4; temp_r30++) { + if(!sp88[temp_r30]->unk78) { + lbl_1_bss_18 = temp_r30; + } + } + } + if(lbl_1_bss_18 == -1 && temp_r31 == 4) { + lbl_1_bss_18 = 4; + } + if(lbl_1_bss_18 != -1) { + for(temp_r31=0; temp_r31<4; temp_r31++) { + if(sp88[temp_r31]->unk48[0]) { + sp88[temp_r31]->unk48[0]->unk1 &= ~0x2; + } + if(sp88[temp_r31]->unk48[1]) { + sp88[temp_r31]->unk48[1]->unk1 &= ~0x2; + } + sp88[temp_r31]->unk48[0] = NULL; + sp88[temp_r31]->unk48[1] = NULL; + } + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + sp88[temp_r31]->unk44 = (sp88[temp_r31]->unk40 == sp88[temp_r31]->unk24) ? sp88[temp_r31]->unk44+1 : 0; + sp88[temp_r31]->unk40 += (sp88[temp_r31]->unk40 < sp88[temp_r31]->unk24) ? 0.375 : 0; + sp88[temp_r31]->unk40 = (sp88[temp_r31]->unk40 > sp88[temp_r31]->unk24) ? (float)sp88[temp_r31]->unk24 : sp88[temp_r31]->unk40; + for(temp_r30=0; temp_r30<3; temp_r30++) { + float temp_f28 = sp88[temp_r31]->unk40; + float sp4C = (s32)(temp_f28/100.0f)%10; + float temp_f22 = (s32)(temp_f28/10.0f)%10; + float temp_f24 = ((s32)temp_f28)%10; + float temp_f23 = temp_f28-(s32)temp_f28; + float temp_f25 = (temp_r30 == 0) ? ((sp88[temp_r31]->unk24/100)%10) : ((temp_r30 == 1) ? ((sp88[temp_r31]->unk24/10)%10) : sp88[temp_r31]->unk24%10); + s32 sp98[5] = { 0, 15, -9, 3, 0 }; + switch(temp_r30) { + case 0: + temp_f25 = sp4C+(temp_f23*((9.0f == temp_f24 && 9.0f == temp_f22) ? 1.0 : 0.0)); + break; + + case 1: + temp_f25 = temp_f22+(temp_f23*((9.0f == temp_f24) ? 1.0 : 0.0)); + break; + + case 2: + temp_f25 = temp_f24+temp_f23; + break; + } + Hu3DModelRotSet(lbl_1_bss_34[temp_r31]->model[temp_r30+1], 36.0f*temp_f25, 0, 0); + } + } + { + s32 spAC[8][3] = { + 255,64,64, + 32,192,255, + 255,128,255, + 32,208,32, + 224,32,224, + 230,128,32, + 255,240,32, + 160,160,160 + }; + s32 temp_r29 = lbl_1_bss_2680; + s32 temp_r28 = 0; + Work19C8 *sp68[4]; + for(temp_r28=0; temp_r28<4; temp_r28++) { + sp68[temp_r28] = lbl_1_bss_34[temp_r28]->data; + } + do { + temp_r29--; + temp_r29 = (temp_r29 < 0) ? temp_r29+50 : temp_r29; + if(lbl_1_bss_2684[temp_r29].unkC == 0 || (lbl_1_bss_2684[temp_r29].unk10 & 0xF) == 0) { + HuSprAttrSet(lbl_1_bss_14, temp_r28, HUSPR_ATTR_DISPOFF); + } else { + s32 temp_r26 = 0; + u32 temp_r19; + s32 temp_r18; + + s32 temp_r24; + + s32 sp58[4]; + temp_r18 = ((lbl_1_bss_2684[temp_r29].unk8 >= 10) ? 2 : 1)+1; + if(lbl_1_bss_2684[temp_r29].unk10 & 0x1) { + sp58[temp_r26] = 0; + temp_r26++; + } + if(lbl_1_bss_2684[temp_r29].unk10 & 0x2) { + sp58[temp_r26] = 1; + temp_r26++; + } + if(lbl_1_bss_2684[temp_r29].unk10 & 0x4) { + sp58[temp_r26] = 2; + temp_r26++; + } + if(lbl_1_bss_2684[temp_r29].unk10 & 0x8) { + sp58[temp_r26] = 3; + temp_r26++; + } + temp_r19 = sp68[sp58[lbl_1_bss_4%temp_r26]]->unk18; + for(temp_r24=0; temp_r24 0; + if(lbl_1_bss_2684[temp_r29].unkC >= 40) { + lbl_1_bss_2684[temp_r29].unkC = 0; + } + + } while(temp_r29 != lbl_1_bss_2680); + for(; temp_r28<150; temp_r28++) { + HuSprAttrSet(lbl_1_bss_14, temp_r28, HUSPR_ATTR_DISPOFF); + } + } + { + s32 temp_r27 = lbl_1_bss_FC; + s32 temp_r25; + s32 temp_r17; + for(temp_r17=0; temp_r17<300; temp_r17++) { + temp_r27 = temp_r27+1; + temp_r27 %= 300; + if(!lbl_1_bss_100[temp_r27].unk0) { + continue; + } + lbl_1_bss_100[temp_r27].unk4.x += lbl_1_bss_100[temp_r27].unk10.x; + lbl_1_bss_100[temp_r27].unk4.y += lbl_1_bss_100[temp_r27].unk10.y; + lbl_1_bss_100[temp_r27].unk4.z += lbl_1_bss_100[temp_r27].unk10.z; + lbl_1_bss_100[temp_r27].unk10.y += -1.5; + if(lbl_1_bss_100[temp_r27].unk4.y < -1000.0f) { + lbl_1_bss_100[temp_r27].unk0 = 0; + } + lbl_1_bss_100[temp_r27].unk1C += 9; + } + for(temp_r25=0; temp_r25<5; temp_r25++) { + if(lbl_1_bss_D4[temp_r25][0] > 0) { + lbl_1_bss_D4[temp_r25][1]++; + if(lbl_1_bss_D4[temp_r25][1] > 30) { + s32 temp_r21; + lbl_1_bss_D4[temp_r25][0] = 0; + lbl_1_bss_D4[temp_r25][1] = 0; + for(temp_r21=0; temp_r21<10; temp_r21++) { + Hu3DModelAttrSet(object->model[(temp_r25*10)+13+temp_r21], 1); + } + } + } + } + if(lbl_1_bss_44->work[0] >= 1002) { + float temp_f27 = 0; + float temp_f26 = 0; + if(lbl_1_bss_B8.unk0 % 2 >= 0) { + lbl_1_bss_B8.unk8 = lbl_1_bss_B8.unkC.y; + lbl_1_bss_B8.unkC.x = lbl_1_bss_B8.unkC.z; + do { + lbl_1_bss_B8.unkC.y = (2.0*(rand8()/255.0))-1.0; + lbl_1_bss_B8.unkC.z = (2.0*(rand8()/255.0))-1.0; + lbl_1_bss_B8.unkC.y = 0; + } while(VECMagPoint(lbl_1_bss_B8.unkC.y-lbl_1_bss_B8.unk8, lbl_1_bss_B8.unkC.z-lbl_1_bss_B8.unkC.x, 0) < 0.75); + } + temp_f27 = lbl_1_bss_B8.unk8; + temp_f26 = lbl_1_bss_B8.unkC.x; + temp_f27 *= lbl_1_bss_B8.unk4*2; + temp_f26 *= lbl_1_bss_B8.unk4*2; + lbl_1_bss_B8.unk0 = lbl_1_bss_B8.unk0 == 0; + lbl_1_bss_B8.unk4 = (lbl_1_bss_B8.unk4 > 24) ? 23 : ((lbl_1_bss_B8.unk4-1 > 0) ? lbl_1_bss_B8.unk4-1 : 0); + Hu3DCameraPosSet(1, temp_f27, 37.139069+temp_f26, 2599.7346f, 0, 1, 0, temp_f27, 50.0f+temp_f26, 0); + } + if(lbl_1_bss_18 != -1) { + float temp_f30; + s32 temp_r20; + lbl_1_bss_10++; + temp_f30 = 1.0f-((lbl_1_bss_10 > 180) ? 1.0f : (lbl_1_bss_10/180.0f)); + Hu3DMotionSpeedSet(lbl_1_bss_30->model[0], 0.5*temp_f30); + for(temp_r20=0; temp_r20<4; temp_r20++) { + Hu3DMotionSpeedSet(lbl_1_bss_34[temp_r20]->model[5], 0.5*temp_f30); + } + if(temp_f30 > 0.0f && lbl_1_data_4[0] != -1) { + HuAudFXPitchSet(lbl_1_data_4[0], -8192.0f+(8192.0f*temp_f30)); + HuAudFXPitchSet(lbl_1_data_4[1], -8192.0f+(8192.0f*temp_f30)); + HuAudFXVolSet(lbl_1_data_4[0], 63.0f+(64.0f*temp_f30)); + HuAudFXVolSet(lbl_1_data_4[1], 63.0f+(64.0f*temp_f30)); + } else { + if(lbl_1_data_4[0] != -1) { + HuAudFXStop(lbl_1_data_4[0]); + HuAudFXStop(lbl_1_data_4[1]); + lbl_1_data_4[0] = lbl_1_data_4[1] = -1; + + } + } + } + } +} + +void fn_1_D700(omObjData *object); + +void fn_1_A53C(omObjData *object) +{ + Work19C8 *sp28[4]; + s32 temp_r31; + for(temp_r31=0; temp_r31<4; temp_r31++) { + sp28[temp_r31] = lbl_1_bss_34[temp_r31]->data; + } + for(temp_r31=0; temp_r31<7; temp_r31++) { + s32 sp38[7] = { + 1422, + 1423, + 1424, + 1425, + 1426, + 1427, + 1428 + }; + if(lbl_1_bss_48[temp_r31].unk0 > 3) { + lbl_1_bss_48[temp_r31].unk0 = 3; + } + if(lbl_1_bss_48[temp_r31].unk0 > 0) { + s32 temp_r19 = HuAudFXPlay(sp38[temp_r31]); + HuAudFXPanning(temp_r19, 0.5+((63*lbl_1_bss_48[temp_r31].unk4[lbl_1_bss_48[temp_r31].unk0-1])+64)); + lbl_1_bss_48[temp_r31].unk0--; + } + } + if(omSysExitReq && !WipeStatGet()) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + object->func = fn_1_D700; + + } + switch(object->work[0]) { + case 1000: + if(!WipeStatGet()) { + s32 temp_r29; + s32 temp_r28; + s32 temp_r27; + s32 temp_r26; + lbl_1_bss_2C++; + if(lbl_1_bss_2C == 10.0f) { + lbl_1_bss_2C = 50.0f; + } + temp_r29 = (lbl_1_bss_2C > 180.0f) ? 255.0 : ((lbl_1_bss_2C > 120.0f) ? (255.0*((lbl_1_bss_2C-120.0f)/60.0)) : 0.0); + temp_r29 = (lbl_1_bss_2C >= 235.0f) ? 255 : ((lbl_1_bss_2C >= 205.0f) ? 192 : ((lbl_1_bss_2C >= 190.0f) ? 128 : (((lbl_1_bss_2C >= 160.0f) ? 64 : 0)))); + Hu3DGLightColorSet(lbl_1_bss_1C, temp_r29, temp_r29, temp_r29, 255); + for(temp_r28=0; temp_r28<4; temp_r28++) { + + Hu3DMotionTimeSet(lbl_1_bss_34[temp_r28]->model[0], 60.0+(40.0*(temp_r29/255.0))); + for(temp_r27=0; temp_r27<3; temp_r27++) { + Hu3DMotionTimeSet(lbl_1_bss_34[temp_r28]->model[temp_r27+1], 60.0+(40.0*(temp_r29/255.0))); + } + Hu3DMotionTimeSet(lbl_1_bss_34[temp_r28]->model[4], 60.0+(40.0*(temp_r29/255.0))); + } + Hu3DMotionSpeedSet(lbl_1_bss_30->model[0], 0.5*((lbl_1_bss_2C < 100.0f) ? 0.0 : ((lbl_1_bss_2C < 320.0f) ? ((lbl_1_bss_2C-100)/220.0) : 1.0))); + for(temp_r26=0; temp_r26<4; temp_r26++) { + Hu3DMotionSpeedSet(lbl_1_bss_34[temp_r26]->model[5], 0.5*((lbl_1_bss_2C < 100.0f) ? 0.0 : ((lbl_1_bss_2C < 280.0f) ? ((lbl_1_bss_2C-100)/180.0) : 1.0))); + } + if(100.0f == lbl_1_bss_2C) { + Hu3DMotionSpeedSet(lbl_1_bss_30->model[1], 1.0f); + omVibrate(sp28[0]->unk14, 12, 4, 2); + omVibrate(sp28[1]->unk14, 12, 4, 2); + omVibrate(sp28[2]->unk14, 12, 4, 2); + omVibrate(sp28[3]->unk14, 12, 4, 2); + HuAudFXPlay(1431); + } + if(145.0f == lbl_1_bss_2C) { + lbl_1_data_4[0] = HuAudFXPlay(1429); + } + if(160.0f == lbl_1_bss_2C) { + lbl_1_data_4[1] = HuAudFXPlay(1430); + } + if(350.0f < lbl_1_bss_2C) { + object->work[0]++; + lbl_1_bss_2C = 0; + } + } + break; + + case 1001: + lbl_1_bss_2C++; + if(5.0f == lbl_1_bss_2C && lbl_1_bss_20 < 0) { + lbl_1_bss_20 = MGSeqStartCreate(); + } + if(lbl_1_bss_2C >= 5.0f && lbl_1_data_0 == -1 && (MGSeqStatGet(lbl_1_bss_20) & 0x10)) { + lbl_1_data_0 = HuAudSeqPlay(71); + } + if(lbl_1_bss_2C >= 5.0f && !MGSeqStatGet(lbl_1_bss_20) && lbl_1_bss_20 >= 0) { + object->work[0]++; + lbl_1_bss_20 = -1; + lbl_1_bss_2C = 0; + } else { + float temp_f26 = (lbl_1_bss_2C > 60.0f) ? 1.0 : ((lbl_1_bss_2C > 0.0f) ? (lbl_1_bss_2C/60.0) : 0.0); + float temp_f27 = 1.0f-temp_f26; + float temp_f31 = 830.0f*temp_f27; + float temp_f30 = (-1792.0f*temp_f27)+(50.0f*temp_f26); + float temp_f29 = (2854.0f*temp_f27)+(3500.0f*temp_f26); + float temp_f25 = ((2578.212*temp_f27)+(2600.0*temp_f26))/VECMagPoint(temp_f31, temp_f30, temp_f29); + temp_f31 *= temp_f25; + temp_f30 *= temp_f25; + temp_f29 *= temp_f25; + Hu3DCameraPosSet(1, temp_f31, temp_f30, temp_f29, -0.05f*temp_f27, 1, 0, 0, 50*temp_f26, 0); + (void)temp_f27; + + } + break; + + case 1002: + if(lbl_1_bss_18 != -1) { + object->work[0] = 1003; + lbl_1_bss_2C = 0; + } + break; + + case 1003: + if(lbl_1_bss_20 < 0 && lbl_1_bss_2C == 0.0f) { + lbl_1_bss_20 = MGSeqFinishCreate(); + for(temp_r31=0; temp_r31<4; temp_r31++) { + Work19C8 *temp_r25= lbl_1_bss_34[temp_r31]->data; + HuSprAttrSet(temp_r25->unkA4, 0, HUSPR_ATTR_DISPOFF); + } + if(lbl_1_data_0 != -1) { + HuAudSeqFadeOut(lbl_1_data_0, 100); + } + } else if(!MGSeqStatGet(lbl_1_bss_20)) { + lbl_1_bss_2C++; + if(lbl_1_bss_2C >= 30.0f){ + object->work[0]++; + lbl_1_bss_2C = 0; + if(lbl_1_bss_18 != 4){ + lbl_1_bss_20 = MGSeqWinCreate(sp28[lbl_1_bss_18]->unk18, -1, -1, -1); + GWPlayerCoinWinSet(sp28[lbl_1_bss_18]->unk14, 10); + HuAudSStreamPlay(1); + } else if(lbl_1_bss_18 == 4) { + lbl_1_bss_20 = MGSeqDrawCreate(); + HuAudSStreamPlay(4); + } + for(temp_r31=0; temp_r31<4; temp_r31++) { + Hu3DModelRotSet(lbl_1_bss_34[temp_r31]->model[4], 0, (lbl_1_bss_18 == temp_r31) ? 90 : -90, 0); + } + } + } + break; + + case 1004: + lbl_1_bss_2C++; + if(210.0f < lbl_1_bss_2C) { + lbl_1_bss_20 = -1; + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + object->func = fn_1_D700; + } + break; + + default: + OSReport("*** main mode error(%d)!!\n", object->work[0]); + + break; + } +} + +void fn_1_B6C4(ModelData *arg0, Mtx arg1) +{ + GXLoadPosMtxImm(arg1, GX_PNMTX0); + GXSetNumTevStages(1); + GXSetNumTexGens(0); + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + { + s8 sp60[9] = { -1, 0, 1, 2, 3, 4, -1, -1, -1 }; + char *sp6C[6] = { + "m413_11-m413_11", + "m413_12-m413_12", + "m413_13-m413_13", + "m413_14-m413_14", + "g005m3A-bomhei_A", + "g005m3B-bomhei_B" + }; + s8 sp28[6] = { 3, 4, 5, 6, 11, 12 }; + char *sp50[4] = { + "m413_11b-m413_11b", + "m413_12b-m143_12b", + "m413_13b-m413_13b", + "twest-m413_14b" + }; + s8 sp24[4] = { 7, 8, 9, 10 }; + s32 temp_r27; + Mtx spB4; + Mtx sp84; + for(temp_r27=0; temp_r27<12; temp_r27++) { + StructBss2A6C *temp_r31; + for(temp_r31 = lbl_1_bss_7884[temp_r27]; temp_r31; temp_r31=temp_r31->unk48) { + float temp_f31; + if(temp_r31->unk0) { + s32 temp_r19 = 100; + s32 temp_r18 = 100; + float temp_f30 = temp_r31->unk1C.x; + float temp_f29 = temp_r31->unk1C.y; + float temp_f27 = 0; + if(temp_r31->unk4 && temp_r31->unk5) { + s32 sp40[4] = { 0, 1, 0, -1 }; + s32 sp30[4] = { 1, 0, -1, 0 }; + s32 temp_r24 = (temp_r31->unk4+3)%4; + s32 temp_r26 = ((((temp_r31->unk4+3)%4)+(9+((temp_r31->unk4-1)/4))))%4; + s32 temp_r25 = 0; + float temp_f28 = 1; + temp_f30 -= sp40[temp_r26]; + temp_f29 -= sp30[temp_r26]; + switch((temp_r31->unk4-1)/4) { + case 0: + case 2: + for(temp_r25=temp_r31->unk5-1; temp_r25>0; temp_r25--) { + temp_f28 /= 2.0; + } + temp_f31 = 1.0f-temp_f28; + temp_r26 = (temp_r24+3 == temp_r26) ? (temp_r26-4) : ((temp_r24-3 == temp_r26) ? (temp_r26+4) : temp_r26); + temp_f30 += sind((temp_f28*(temp_r24*90))+(temp_f31*(temp_r26*90))); + temp_f29 += cosd((temp_f28*(temp_r24*90))+(temp_f31*(temp_r26*90))); + break; + + case 1: + for(temp_r25=temp_r31->unk5-1; temp_r25>0; temp_r25--) { + temp_f28 /= 2.0; + } + temp_f31 = (temp_r31->unk5-1)/3.0; + temp_f31 = (temp_f31 < 0.0f) ? 0.0f : ((temp_f31 > 1.0f) ? 1.0f : temp_f31); + temp_f31 = (0.75*((1.0f-temp_f28)))+(0.25*temp_f31); + temp_f28 = 1.0f-temp_f31; + temp_f30 += sp40[temp_r24]*cosd(temp_f31*180.0f); + temp_f29 += sp30[temp_r24]*cosd(temp_f31*180.0f); + temp_f27 += sind(temp_f31*180.0f); + + break; + + default: + break; + } + + } + temp_f30 = (temp_f30*temp_r19)-(temp_r19*6); + temp_f29 = (temp_f29*temp_r18)-(temp_r18*5); + temp_f27 = 100*temp_f27; + if(sp60[temp_r31->unk0] != -1) { + s32 temp_r21 = sp60[temp_r31->unk0]+(temp_r31->unk0 == 5 && ((temp_r31->unk1C.z < 0.0f && (temp_r31->unk1 & 0x1) == 0) || (temp_r31->unk1 & 0x2) != 0)); + MTXTrans(spB4, 50+temp_f30, 50+temp_f29, temp_f27); + MTXConcat(arg1, spB4, spB4); + Hu3DModelObjDraw(lbl_1_bss_30->model[sp28[temp_r21]], sp6C[temp_r21], spB4); + } + } + } + } + for(temp_r27=0; temp_r27<4; temp_r27++) { + s32 temp_r29; + for(temp_r29=0; temp_r29<2; temp_r29++) { + s32 temp_r17 = 25; + s32 sp20 = (temp_r27*300)-450; + s32 sp1C = (505-temp_r17)+(temp_r29*(temp_r17*2)); + Work19C8 *temp_r30 = lbl_1_bss_34[temp_r27]->data; + s32 temp_r23 = temp_r30->unk50[temp_r30->unk60][temp_r29]; + if(temp_r30->unk65[0] == 0 || temp_r30->unk65[0] > 7) { + if(sp60[temp_r23] != -1) { + MTXScale(spB4, 0.5f, 0.5f, 0.5f); + MTXTrans(sp84, sp20, sp1C+((temp_r30->unk65[0]) ? (200.0f*((15-temp_r30->unk65[0])/15.0f)) : 0.0f), 125.0f); + MTXConcat(sp84, spB4, spB4); + MTXConcat(arg1, spB4, spB4); + Hu3DModelObjDraw(lbl_1_bss_30->model[sp28[sp60[temp_r23]]], sp6C[sp60[temp_r23]], spB4); + } + } + if(temp_r30->unk65[0] != 0 && temp_r30->unk65[0] < (15-(temp_r29*4)) && sp60[temp_r30->unk63[temp_r29]] != -1) { + MTXScale(spB4, 0.5f, 0.5f, 0.5f); + MTXTrans(sp84, sp20, sp1C, 125.0-(0.25*(40.0f*(temp_r30->unk65[0]/15.0f)))); + MTXConcat(sp84, spB4, spB4); + MTXConcat(arg1, spB4, spB4); + Hu3DModelObjDraw(lbl_1_bss_30->model[sp28[sp60[temp_r30->unk63[temp_r29]]]], sp6C[sp60[temp_r30->unk63[temp_r29]]], spB4); + } + } + } + { + s32 temp_r28 = lbl_1_bss_FC; + s32 temp_r20; + for(temp_r20=0; temp_r20<300; temp_r20++) { + temp_r28++; + temp_r28 %= 300; + if(lbl_1_bss_100[temp_r28].unk0) { + MTXScale(spB4, 0.4f, 0.4f, 0.4f); + MTXRotDeg(sp84, 'x', 360.0*(lbl_1_bss_100[temp_r28].unk1C/255.0)); + MTXConcat(sp84, spB4, spB4); + MTXRotDeg(sp84, 'z', 360.0*(lbl_1_bss_100[temp_r28].unk1D/255.0)); + MTXConcat(sp84, spB4, spB4); + MTXTrans(sp84, lbl_1_bss_100[temp_r28].unk4.x, lbl_1_bss_100[temp_r28].unk4.y , lbl_1_bss_100[temp_r28].unk4.z); + MTXConcat(sp84, spB4, spB4); + MTXConcat(arg1, spB4, spB4); + Hu3DModelObjDraw(lbl_1_bss_30->model[sp24[sp60[lbl_1_bss_100[temp_r28].unk0]]], sp50[sp60[lbl_1_bss_100[temp_r28].unk0]], spB4); + } + } + } + } +} + +void fn_1_C6E0(omObjData *object) +{ + s32 temp_r30; + memset(lbl_1_bss_2A6C, 0, sizeof(lbl_1_bss_2A6C)); + memset(lbl_1_bss_7884, 0, sizeof(lbl_1_bss_7884)); + memset(lbl_1_bss_2684, 0, sizeof(lbl_1_bss_2684)); + lbl_1_bss_2680 = 0; + memset(lbl_1_bss_100, 0, sizeof(lbl_1_bss_100)); + lbl_1_bss_FC = 0; + memset(lbl_1_bss_D4, 0, sizeof(lbl_1_bss_D4)); + lbl_1_bss_D0 = 0; + memset(lbl_1_bss_B8, 0, sizeof(lbl_1_bss_B8)); + object->model[0] = Hu3DModelCreateFile(0x2C0000); + omSetTra(object, 0, 0, 0); + Hu3DMotionSpeedSet(object->model[0], 0); + object->model[1] = Hu3DModelCreateFile(0x2C0001); + Hu3DMotionSpeedSet(object->model[1], 0); + Hu3DModelPosSet(object->model[1], 0, 0, 0); + Hu3DModelAttrSet(object->model[0], 0x40000001); + object->model[2] = Hu3DHookFuncCreate(fn_1_B6C4); + Hu3DModelLayerSet(object->model[2], 1); + for(temp_r30=0; temp_r30<4; temp_r30++) { + object->model[temp_r30+3] = Hu3DModelCreateFile(0x2C0003+temp_r30); + Hu3DModelAttrSet(object->model[temp_r30+3], 1); + object->model[temp_r30+7] = Hu3DModelCreateFile(0x2C0007+temp_r30); + Hu3DModelAttrSet(object->model[temp_r30+7], 1); + } + for(temp_r30=0; temp_r30<2; temp_r30++) { + s32 temp_r28; + if(temp_r30 == 0) { + temp_r28 = 0x2C000B; + } else { + temp_r28 = 0x2C000C; + } + object->model[temp_r30+11] = Hu3DModelCreateFile(temp_r28); + Hu3DModelAttrSet(object->model[temp_r30+11], 1); + } + for(temp_r30=0; temp_r30<5; temp_r30++) { + s32 temp_r29; + object->model[(temp_r30*10)+13] = Hu3DModelCreateFile(0x2C001E); + for(temp_r29=0; temp_r29<10; temp_r29++) { + if(temp_r29 != 0) { + object->model[(13+(temp_r30*10)+temp_r29)] = Hu3DModelLink(object->model[(temp_r30*10)+13]); + } + Hu3DModelAttrSet(object->model[(13+(temp_r30*10)+temp_r29)], 1); + Hu3DModelLayerSet(object->model[(13+(temp_r30*10)+temp_r29)], 2); + } + } + { + void *temp_r27 = HuDataSelHeapReadNum(0x2C001F, MEMORY_DEFAULT_NUM, HEAP_DATA); + AnimData *temp_r26 = HuSprAnimRead(temp_r27); + lbl_1_bss_14 = HuSprGrpCreate(150); + for(temp_r30=0; temp_r30<150; temp_r30++) { + s16 temp_r25 = HuSprCreate(temp_r26, 0, 0); + HuSprGrpMemberSet(lbl_1_bss_14, temp_r30, temp_r25); + HuSprAttrSet(lbl_1_bss_14, temp_r30, HUSPR_ATTR_DISPOFF); + HuSprColorSet(lbl_1_bss_14, temp_r30, 255, 255, 255); + HuSprTPLvlSet(lbl_1_bss_14, temp_r30, 1.0f); + HuSprPriSet(lbl_1_bss_14, temp_r30, 256+temp_r30); + + } + } + object->func = fn_1_8C10; +} + + +void fn_1_CBB4(omObjData *object) +{ + s32 sp8[4] = { 0, 1, 2, 3 }; + s32 temp_r27 = 0; + Work19C8 *temp_r31 = object->data; + s32 temp_r29; + s32 temp_r28; + memset(temp_r31, 0, sizeof(Work19C8)); + if(object->work[0] == 0) { + lbl_1_data_C[0] = lbl_1_data_C[1] = lbl_1_data_C[2] = lbl_1_data_C[3] = -1; + for(temp_r29=0; temp_r29<4; temp_r29++) { + s32 temp_r26; + repeat_iter: + temp_r26 = rand8()%4; + if(lbl_1_data_C[temp_r26] != -1) { + goto repeat_iter; + } + lbl_1_data_C[temp_r26] = temp_r29; + } + } + for(temp_r29=0; temp_r29<4; temp_r29++) { + for(temp_r28=0; temp_r28<4; temp_r28++) { + if(temp_r29 == lbl_1_data_C[temp_r28]) { + sp8[temp_r27] = temp_r28; + temp_r27++; + } + } + } + temp_r31->unk0 = temp_r31->unk4 = temp_r31->unk8 = temp_r31->unkC = 0; + temp_r31->unk10 = object->work[0]; + temp_r31->unk14 = sp8[temp_r31->unk10]; + if(temp_r31->unk14 == 4) { + OSReport("m413:wrong player group\n"); + temp_r31->unk14 = temp_r31->unk10; + } + temp_r31->unk18 = GWPlayerCfg[temp_r31->unk14].character; + temp_r31->unk1C = (GWPlayerCfg[temp_r31->unk14].iscom) ? -1 : GWPlayerCfg[temp_r31->unk14].pad_idx; + temp_r31->unk20 = (temp_r31->unk1C != -1) ? 0 : GWPlayerCfg[temp_r31->unk14].diff; + temp_r31->unk2C = -1; + temp_r31->unk24 = 0; + temp_r31->unk28 = temp_r31->unk24; + temp_r31->unk40 = temp_r31->unk24; + temp_r31->unk44 = 100; + temp_r31->unk72 = 2; + temp_r31->unk74 = 0; + fn_1_EC0(temp_r31); + temp_r31->unk60 = 0; + temp_r31->unk68 = ((rand8()%4)*7)+3; + temp_r31->unk6C = temp_r31->unk68; + temp_r31->unk71 = 20; + temp_r31->unk70 = 0; + temp_r31->unk98 = 0; + temp_r31->unk9C = 0; + object->model[0] = Hu3DModelCreateFile(0x2C0002); + Hu3DModelLayerSet(object->model[0], 1); + object->model[1] = Hu3DModelLink(object->model[0]); + object->model[2] = Hu3DModelLink(object->model[0]); + object->model[3] = Hu3DModelLink(object->model[0]); + Hu3DModelPosSet(object->model[1], (temp_r31->unk10*300)-525, -602, 40); + Hu3DModelPosSet(object->model[2], (temp_r31->unk10*300)-450, -602, 40); + Hu3DModelPosSet(object->model[3], (temp_r31->unk10*300)-375, -602, 40); + Hu3DMotionTimeSet(object->model[1], 60.0f); + Hu3DMotionTimeSet(object->model[2], 60.0f); + Hu3DMotionTimeSet(object->model[3], 60.0f); + Hu3DMotionSpeedSet(object->model[1], 0.0f); + Hu3DMotionSpeedSet(object->model[2], 0.0f); + Hu3DMotionSpeedSet(object->model[3], 0.0f); + Hu3DModelAttrSet(object->model[0], 1); + Hu3DMotionTimeSet(object->model[0], 60.0f); + Hu3DMotionSpeedSet(object->model[0], 0.0f); + object->model[4] = Hu3DModelCreateFile(0x2C000D+temp_r31->unk18); + Hu3DModelPosSet(object->model[4], (temp_r31->unk10*300)-450, 670, 60); + Hu3DMotionTimeSet(object->model[4], 60.0f); + Hu3DMotionSpeedSet(object->model[4], 0.0f); + object->model[5] = Hu3DModelCreateFile(0x2C0015+temp_r31->unk18); + Hu3DModelPosSet(object->model[5], (temp_r31->unk10*300)-450, 0, 0); + Hu3DModelAttrSet(object->model[5], 0x40000001); + Hu3DMotionSpeedSet(object->model[5], 0.0f); + { + AnimData *temp_r23 = HuSprAnimReadFile(0x610038+GWPlayerCfg[temp_r31->unk14].character); + s16 temp_r22; + temp_r31->unkA4 = HuSprGrpCreate(1); + temp_r22 = HuSprCreate(temp_r23, 0, 0); + HuSprGrpMemberSet(temp_r31->unkA4, 0, temp_r22); + HuSprAttrSet(temp_r31->unkA4, 0, HUSPR_ATTR_LOOP|HUSPR_ATTR_DISPOFF|HUSPR_ATTR_LINEAR); + HuSprColorSet(temp_r31->unkA4, 0, 255, 255, 255); + HuSprTPLvlSet(temp_r31->unkA4, 0, 1); + HuSprPriSet(temp_r31->unkA4, 0, 512); + HuSprScaleSet(temp_r31->unkA4, 0, 0.875f, 0.875f); + HuSprSpeedSet(temp_r31->unkA4, 0, 1.0f); + } + + object->func = fn_1_19C4; +} + +void fn_1_D340(omObjData *object) +{ + object->work[0] = 1000; + memset(lbl_1_bss_48, 0, sizeof(StructBss48)); + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + object->func = fn_1_A53C; +} + +void ModuleProlog(void) +{ + s32 i; + OSReport("******* M413 ObjectSetup *********\n"); + HuAudSndGrpSet(38); + lbl_1_bss_24 = omInitObjMan(600, 8192); + omGameSysInit(lbl_1_bss_24); + Hu3DCameraViewportSet(1, 0, 0, 640, 480, 0, 1); + Hu3DCameraPerspectiveSet(1, 40, 10, 20000, 1.2f); + { + Vec sp54 = { 616.5714f, -1331.2f, 2120.1142f }; + Vec sp48 = { -0.05f, 1.0f, 0.0f }; + Vec sp3C = { 0, 0, 0 }; + Vec sp30 = { 0, 0, 0 }; + Vec sp24 = { 0, 0, -1 }; + Hu3DCameraPosSetV(1, &sp54, &sp48, &sp3C); + } + { + Vec sp18 = { -822.5f, 6743.0f, 4625.5f }; + Vec spC = { 0.1545085f, -0.788462f, -0.5850064f }; + GXColor sp8 = { 0, 0, 0, 255 }; + lbl_1_bss_1C = Hu3DGLightCreateV(&sp18, &spC, &sp8); + } + Hu3DGLightStaticSet(lbl_1_bss_1C, 1); + Hu3DGLightSpotSet(lbl_1_bss_1C, 20, 2); + lbl_1_bss_20 = -1; + lbl_1_bss_18 = -1; + lbl_1_bss_30 = omAddObjEx(lbl_1_bss_24, 101, 63, 0, 1, fn_1_C6E0); + for(i=0; i<4; i++) { + omObjData *object = lbl_1_bss_34[i] = omAddObjEx(lbl_1_bss_24, 100, 6, 0, 0, fn_1_CBB4); + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Work19C8), MEMORY_DEFAULT_NUM); + object->work[0] = i; + } + lbl_1_bss_44 = omAddObjEx(lbl_1_bss_24, 102, 0, 0, -1, fn_1_D340); +} + +void fn_1_D700(omObjData *object) +{ + if(!WipeStatGet()) { + if(lbl_1_bss_20 >= 0) { + MGSeqKill(lbl_1_bss_20); + } + MGSeqKillAll(); + HuAudAllStop(); + omOvlReturnEx(1, 1); + } +} diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 36bba085..ab341258 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -18,17 +18,17 @@ typedef struct hsf_draw_object { static void objCall(ModelData *arg0, HsfObject *arg1); static void objMesh(ModelData *arg0, HsfObject *arg1); static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1); -static void SetTevStageNoTex(HsfDrawObject *arg0, HsfMaterial *arg1); +static s32 SetTevStageNoTex(HsfDrawObject *arg0, HsfMaterial *arg1); static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1); static GXTevKColorSel SetKColor(GXTevStageID arg0, u8 arg1); static GXTevKColorSel SetKColorRGB(GXTevStageID arg0, GXColor *arg1); static void FlushKColor(void); static void SetReflect(HsfDrawObject *arg0, s16 arg1, s16 arg2, u8 arg3); static void SetProjection(HsfDrawObject *arg0, s16 arg1, s16 arg2, s16 arg3, GXTexMapID arg4, u32 arg5); -static void SetShadowTex(void); +static s32 SetShadowTex(void); static void SetShadow(HsfDrawObject *arg0, s16 arg1, s16 arg2); static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1); -static void LoadTexture(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 arg3); +static s32 LoadTexture(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 arg3); static void objNull(ModelData *arg0, HsfObject *arg1); static void objRoot(ModelData *arg0, HsfObject *arg1); static void objJoint(ModelData *arg0, HsfObject *arg1); @@ -410,21 +410,20 @@ static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1) { GXColor sp2C; void *sp28; Hu3DTexAnimDataStruct *sp24; + s16 var_r31; + HsfMaterial *temp_r30; + ModelData *temp_r29; + HsfObject *temp_r28; + HsfBitmap *temp_r27; HsfAttribute *temp_r26; - HsfBitmap *temp_r27; - s16 var_r22; - s16 var_r18; - s16 var_r21; s16 var_r24; - s16 var_r31; - s16 var_r17; - s16 var_r6; + HsfdrawStruct01 *temp_r23; + s16 var_r22; + s16 var_r21; + HsfConstData *temp_r20; + s16 var_r18; u32 temp_r19; - HsfConstData *temp_r20; - HsfMaterial *temp_r30; - HsfObject *temp_r28; - ModelData *temp_r29; - HsfdrawStruct01 *temp_r23; + s16 var_r17; temp_r28 = arg0->object; temp_r29 = arg0->model; @@ -717,7 +716,7 @@ static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1) { drawCnt++; } -static void SetTevStageNoTex(HsfDrawObject *arg0, HsfMaterial *arg1) { +static s32 SetTevStageNoTex(HsfDrawObject *arg0, HsfMaterial *arg1) { GXColor sp1C; ModelData *temp_r28; HsfObject *var_r21; @@ -1607,7 +1606,7 @@ static void SetProjection(HsfDrawObject *arg0, s16 arg1, s16 arg2, s16 arg3, GXT GXSetTevAlphaOp(arg1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); } -static void SetShadowTex(void) { +static s32 SetShadowTex(void) { GXTexObj sp8; GXInitTexObj(&sp8, Hu3DShadowData.unk_04, Hu3DShadowData.unk_02, Hu3DShadowData.unk_02, GX_TF_I8, GX_CLAMP, GX_CLAMP, GX_FALSE); @@ -1733,7 +1732,7 @@ static void FaceDrawShadow(HsfDrawObject *arg0, HsfFace *arg1) { drawCnt++; } -static void LoadTexture(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 arg3) { +static s32 LoadTexture(ModelData *arg0, HsfBitmap *arg1, HsfAttribute *arg2, s16 arg3) { GXTexObj sp1C; GXTlutObj sp10; s16 var_r27; diff --git a/src/game/hsfman.c b/src/game/hsfman.c index 1a30df2c..cc318ea5 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -1465,13 +1465,13 @@ inline void Hu3DLightSpotSet(LightData *light, u16 arg1, f32 arg8) { light->unk_02 = arg1; } -void Hu3DGLightSpotSet(s16 arg0, u16 arg1, f32 arg8) { +void Hu3DGLightSpotSet(s16 arg0, f32 arg8, u16 arg1) { LightData *light = &Hu3DGlobalLight[arg0]; Hu3DLightSpotSet(light, arg1, arg8); } -void Hu3DLLightSpotSet(s16 arg0, s16 arg1, u16 arg2, f32 arg8) { +void Hu3DLLightSpotSet(s16 arg0, s16 arg1, f32 arg8, u16 arg2) { ModelData* data; LightData* light; @@ -1752,7 +1752,7 @@ s32 Hu3DModelLightInfoSet(s16 arg0, s16 arg1) { Hu3DGLightStaticSet(sp12, arg1); switch (var_r18->light.type) { case 0: - Hu3DGLightSpotSet(sp12, 2, var_r18->light.cutoff); + Hu3DGLightSpotSet(sp12, var_r18->light.cutoff, 2); break; case 1: Hu3DGLightPointSet(sp12, var_r18->data.base.scale.x - var_r18->data.base.rot.z, 1.0f, 2);