diff --git a/config/GMPE01_00/rels/m424Dll/symbols.txt b/config/GMPE01_00/rels/m424Dll/symbols.txt index 8d4a83df..8320af0c 100644 --- a/config/GMPE01_00/rels/m424Dll/symbols.txt +++ b/config/GMPE01_00/rels/m424Dll/symbols.txt @@ -281,14 +281,14 @@ lbl_1_data_21C = .data:0x0000021C; // type:object size:0xC0 lbl_1_data_2DC = .data:0x000002DC; // type:object size:0xC lbl_1_data_2E8 = .data:0x000002E8; // type:object size:0x24 lbl_1_data_30C = .data:0x0000030C; // type:object size:0xC data:4byte -lbl_1_data_318 = .data:0x00000318; // type:object size:0x6 data:string -lbl_1_data_31E = .data:0x0000031E; // type:object size:0x6 data:string -lbl_1_data_324 = .data:0x00000324; // type:object size:0x6 data:string +lbl_1_data_318 = .data:0x00000318; // type:object size:0x6 scope:local data:string +lbl_1_data_31E = .data:0x0000031E; // type:object size:0x6 scope:local data:string +lbl_1_data_324 = .data:0x00000324; // type:object size:0x6 scope:local data:string jumptable_1_data_32C = .data:0x0000032C; // type:object size:0x40 scope:local lbl_1_data_36C = .data:0x0000036C; // type:object size:0x20 lbl_1_data_38C = .data:0x0000038C; // type:object size:0x20 -lbl_1_data_3AC = .data:0x000003AC; // type:object size:0x19 data:string -lbl_1_data_3C5 = .data:0x000003C5; // type:object size:0x5 data:string +lbl_1_data_3AC = .data:0x000003AC; // type:object size:0x19 scope:local data:string +lbl_1_data_3C5 = .data:0x000003C5; // type:object size:0x5 scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x8 scope:local data:float lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte diff --git a/include/REL/m438Dll.h b/include/REL/m438Dll.h index 798483ee..84847928 100644 --- a/include/REL/m438Dll.h +++ b/include/REL/m438Dll.h @@ -3,6 +3,19 @@ #include "game/object.h" +typedef struct M438MainWork4 { + u8 unk_00; + char unk01[0x3]; + s32 unk_04; + float unk_08; + float unk_0C; + Vec unk_10; + Vec unk_1C; + Vec unk_28; + Vec unk_34; + char unk40[0xC]; +} M438MainWork4; /* size = 0x4C */ + void fn_1_B4D8(Process *arg0); void fn_1_B548(); s32 fn_1_DA64(float arg8); diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index c7409d36..dc82ed96 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -121,24 +121,6 @@ typedef struct M438MainWork3 { u16 unk_188[3]; } M438MainWork3; /* size = */ -typedef struct M438MainWork4 { - u8 unk_00; - char unk01[0x7]; - float unk_08; - float unk_0C; - float unk_10; - float unk_14; - float unk_18; - float unk_1C; - float unk_20; - float unk_24; - char unk28[4]; - float unk_2C; - char unk30[4]; - Vec unk_34; - char unk40[0xC]; -} M438MainWork4; /* size = 0x4C */ - typedef struct M438StructBss298 { /* 0x00 */ u8 unk_00; u8 unk_01; @@ -1595,15 +1577,15 @@ void fn_1_4724(omObjData *object) var_r31 = fn_1_7BFC(sizeof(M438MainWork4)); object->data = var_r31; memset(var_r31, 0, sizeof(M438MainWork4)); - var_r31->unk_10 = 0.0f; - var_r31->unk_14 = -450.0f; - var_r31->unk_18 = -1550.0f; - var_r31->unk_1C = var_r31->unk_20 = var_r31->unk_24 = 0.0f; - var_r31->unk_2C = 35.0f; + var_r31->unk_10.x = 0.0f; + var_r31->unk_10.y = -450.0f; + var_r31->unk_10.z = -1550.0f; + var_r31->unk_1C.x = var_r31->unk_1C.y = var_r31->unk_1C.z = 0.0f; + var_r31->unk_28.y = 35.0f; var_r31->unk_0C = 0.0f; var_r31->unk_00 = 0; - omSetTra(object, var_r31->unk_10, var_r31->unk_14, var_r31->unk_18); - omSetRot(object, var_r31->unk_1C, var_r31->unk_20, var_r31->unk_24); + omSetTra(object, var_r31->unk_10.x, var_r31->unk_10.y, var_r31->unk_10.z); + omSetRot(object, var_r31->unk_1C.x, var_r31->unk_1C.y, var_r31->unk_1C.z); omSetSca(object, 1.25f, 1.25f, 1.25f); object->func = fn_1_4984; } diff --git a/src/REL/m438Dll/map.c b/src/REL/m438Dll/map.c index 8cda3dab..362e6453 100644 --- a/src/REL/m438Dll/map.c +++ b/src/REL/m438Dll/map.c @@ -1 +1,261 @@ #include "REL/m438Dll.h" + +#include "ext_math.h" +#include "game/hsfanim.h" +#include "game/wipe.h" + +// STRUCT + +typedef struct M438MapStruct { + s32 unk0; + s32 unk4; + char unk8[0x4]; + Vec unkC; + f32 unk18; + f32 unk1C; + f32 unk20; +} M438MapStruct; + +typedef struct M438MapStruct2 { + s32 unk0; + s32 unk4; + f32 unk8; + f32 unkC; + f32 unk10; + f32 unk14; + f32 unk18; + f32 unk1C; + f32 unk20; + Vec unk24; + Vec unk30; + Vec unk3C; + M438MainWork4* unk48; +} M438MapStruct2; + +typedef struct M438MapStruct3 { + u32 unk0; + M438MapStruct2 unk4; + char unk4C[0x934]; + M438MapStruct unk984; +} M438MapStruct3; + +// BSS +omObjData* lbl_1_bss_108C; +HsfanimStruct01* lbl_1_bss_E34[0x96]; +s32 lbl_1_bss_E30; + +// DATA +const char* lbl_1_data_848[] = { + "iwa_s1", "iwa_s2", "iwa_s3", "iwa_s4", "iwa_s5", + "iwa_s6", "iwa_s7", "iwa_s8", "iwa_s9", + "iwa_s10", "iwa_s11", "iwa_s12", "iwa_s13", + "iwa_s14", "iwa_s15", "iwa_s16", "iwa_s17", + "iwa_s18", "iwa_s19", "iwa_s20", "iwa_s21", + "iwa_s22", "iwa_s23", "iwa_s24", "iwa_s25", + "iwa_s26", "iwa_s27", "iwa_s28", "iwa_s29", + "iwa_s30", "iwa_s31", "iwa_s32" +}; + +// PROTO +void fn_1_B54C(omObjData*); +void fn_1_D57C(Vec*, f32); +void fn_1_E034(Mtx, Vec*); + +void fn_1_B4D8(Process* arg0) { + omObjData* var_r31; + + lbl_1_bss_E30 = 0; + var_r31 = lbl_1_bss_108C = omAddObjEx(arg0, 0x20, 8, 0, -1, fn_1_B54C); + var_r31->work[0] = 0; +} + +void fn_1_B548(void) {} + +// + +Vec lbl_1_data_8D8[4][2] = { + { + { -967.0f, -80.0f, -312.0f }, + { -867.0f, -80.0f, -485.0f }, + }, + { + { -917.0f, -80.0f, -857.0f }, + { -817.0f, -80.0f, -1030.0f }, + }, + { + { 967.0f, -80.0f, -312.0f }, + { 867.0f, -80.0f, -485.0f }, + }, + { + { 917.0f, -80.0f, -857.0f }, + { 817.0f, -80.0f, -1030.0f }, + }, +}; + +void fn_1_BF20(omObjData* arg0) { + Mtx sp5C; + Mtx sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + f32 temp_f29; + f32 temp_f30; + f32 temp_f31; + s32 var_r29; + M438MapStruct2* var_r31; + M438MapStruct* var_r30; + M438MapStruct3* temp_r28; + + temp_r28 = arg0->data; + temp_r28->unk0++; + var_r31 = &temp_r28->unk4; + + for (var_r29 = 0; var_r29 < 0x20; var_r29++, var_r31++) { + if ((var_r31->unk0 == 0) && (var_r31->unk4 != 0)) { + temp_f29 = var_r31->unk30.y; + PSVECAdd(&var_r31->unk30, &var_r31->unk3C, &var_r31->unk30); + var_r31->unk3C.x *= 0.92f; + var_r31->unk3C.z *= 0.92f; + var_r31->unk3C.y += -0.27222225f; + if (temp_f29 > 0.0) { + if (var_r31->unk30.y <= 0.0) { + HuAudFXEmiterPlay(0x6FF, &var_r31->unk30); + } + } + var_r31->unkC += var_r31->unk10; + var_r31->unk14 += var_r31->unk18; + var_r31->unk1C += var_r31->unk20; + sp14.x = sind(90.0f + var_r31->unk8); + sp14.z = cosd(90.0f + var_r31->unk8); + sp14.y = 0.0f; + PSMTXRotAxisRad(sp5C, &sp14, MTXDegToRad(var_r31->unkC)); + sp14.x = sp14.z = 0.0f; + sp14.y = 1.0f; + PSMTXRotAxisRad(sp2C, &sp14, MTXDegToRad(var_r31->unk14)); + PSMTXConcat(sp2C, sp5C, sp5C); + sp14.x = sind(var_r31->unk8); + sp14.z = cosd(var_r31->unk8); + sp14.y = 0.0f; + PSMTXRotAxisRad(sp2C, &sp14, MTXDegToRad(var_r31->unk1C)); + PSMTXConcat(sp2C, sp5C, sp5C); + fn_1_E034(sp5C, &sp20); + var_r31->unk48->unk_28.x = sp20.x; + var_r31->unk48->unk_28.y = sp20.y; + var_r31->unk48->unk_28.z = sp20.z; + PSMTXInverse(sp5C, sp5C); + PSMTXMultVec(sp5C, &var_r31->unk24, &sp8); + var_r31->unk48->unk_1C.x = (var_r31->unk30.x - sp8.x); + var_r31->unk48->unk_1C.y = (var_r31->unk30.y - sp8.y); + var_r31->unk48->unk_1C.z = (var_r31->unk30.z - sp8.z); + if (var_r31->unk30.y < -500.0f) { + var_r31->unk4 = 0; + } + } + } + if ((temp_r28->unk0 & 1) == 0) { + var_r30 = &temp_r28->unk984; + + for (var_r29 = 0; var_r29 < 0x32; var_r29++, var_r30++) { + if (var_r30->unk0 != 0) continue; + var_r30->unk0 = 1; + var_r30->unk18 = frandmod(0x168); + if (frandmod(0x64) < 0x14) { + var_r30->unkC.x = (0.8f * (frandmod(0x7D0) - 0x3E8)); + var_r30->unkC.y = -80.0f; + var_r30->unkC.z = ((-1.2f * frandmod(0x3E8)) - 1000.0f); + } else { + temp_f31 = frandmod(0x168); + temp_f30 = 800.0f + (0.25f * frandmod(0x3E8)); + var_r30->unkC.x = (temp_f30 * sind(temp_f31)); + var_r30->unkC.y = -80.0f; + var_r30->unkC.z = (temp_f30 * cosd(temp_f31)); + } + var_r30->unk20 = (0.1f + (0.0005f * frandmod(0x3E8))); + var_r30->unk1C = 0.0f; + Hu3DModelAttrReset(var_r30->unk4, 1); + Hu3DModelPosSetV(var_r30->unk4, &var_r30->unkC); + Hu3DModelRotSet(var_r30->unk4, 0.0f, var_r30->unk18, 0.0f); + Hu3DModelScaleSet(var_r30->unk4, var_r30->unk1C, var_r30->unk1C, var_r30->unk1C); + break; + } + } + var_r30 = &temp_r28->unk984; + for (var_r29 = 0; var_r29 < 0x32; var_r29++, var_r30++) { + if (var_r30->unk0 != 0) { + var_r30->unk1C += 0.005f; + if (var_r30->unk1C > var_r30->unk20) { + var_r30->unk0 = 0; + Hu3DModelAttrSet(var_r30->unk4, 1); + fn_1_D57C(&Hu3DData[var_r30->unk4].pos, var_r30->unk20); + } + Hu3DModelScaleSet(var_r30->unk4, var_r30->unk1C, var_r30->unk1C, var_r30->unk1C); + } + } + + for (var_r29 = 0; var_r29 < 4; var_r29++) { + PSVECSubtract(&lbl_1_data_8D8[var_r29][1], &lbl_1_data_8D8[var_r29][0], &sp14); + temp_f31 = 0.001f * frandmod(0x3E8); + PSVECScale(&sp14, &sp14, temp_f31); + PSVECAdd(&lbl_1_data_8D8[var_r29][0], &sp14, &sp8); + PSVECScale(&sp8, &sp8, 0.98f); + fn_1_D57C(&sp8, 0.03f); + } + if ((lbl_1_bss_E30 == 0) && (WipeStatGet() == 0)) { + HuAudFXPlay(0x6F9); + HuAudFXPlay(0x6FD); + lbl_1_bss_E30 = 1; + } +} + +void fn_1_C764(ModelData* model, ParticleData* particle, Mtx matrix) { + HsfanimStruct01* var_r31; + s32 var_r29; + u16 temp_r0; + + var_r31 = particle->unk_48; + + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16 != 0) { + PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); + var_r31->unk08.x *= 0.95f; + var_r31->unk08.z *= 0.95f; + var_r31->unk08.y += -0.27222225f; + if (var_r31->unk00_s16 < 24.0f) { + var_r31->unk40.a = 0.9f * var_r31->unk40.a; + } + if (--var_r31->unk00_s16 == 0) { + var_r31->unk00 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + } + } + DCStoreRange(particle->unk_48, particle->unk_30 * 0x44); +} + +void fn_1_C8E8(ModelData* model, ParticleData* particle, Mtx matrix) { + HsfanimStruct01* var_r31; + s32 var_r29; + u16 temp_r0; + + var_r31 = particle->unk_48; + + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + if (var_r31->unk00_s16 != 0) { + PSVECAdd(&var_r31->unk34, &var_r31->unk08, &var_r31->unk34); + var_r31->unk08.x *= 0.95f; + var_r31->unk08.z *= 0.95f; + var_r31->unk2C += -0.27222225f; + var_r31->unk40.a *= 0.99f; + if (var_r31->unk00_s16 < 24.0f) { + var_r31->unk40.a = 0.9f * var_r31->unk40.a; + } + if (--var_r31->unk00_s16 == 0) { + var_r31->unk00 = 0; + var_r31->unk2C = 0.0f; + var_r31->unk40.a = 0; + } + } + } + DCStoreRange(particle->unk_48, particle->unk_30 * 0x44); +}