From a34f38d2bdab9b3582380de44f1f845149e6edf8 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Tue, 26 Nov 2024 10:22:31 -0500 Subject: [PATCH 1/8] start work on m438 --- .vscode/settings.json | 3 +- config/GMPE01_00/rels/m438Dll/symbols.txt | 2 +- src/REL/m438Dll/main.c | 425 +++++++++++++++++----- 3 files changed, 328 insertions(+), 102 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 0e3a6ba5..7c43f1a7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,7 +21,8 @@ ".clangd": "yaml", "m443dll.h": "c", "object.h": "c", - "executor.h": "c" + "executor.h": "c", + "m438dll.h": "c" }, "search.useIgnoreFiles": false, "search.exclude": { diff --git a/config/GMPE01_00/rels/m438Dll/symbols.txt b/config/GMPE01_00/rels/m438Dll/symbols.txt index dfbd3109..42b61291 100644 --- a/config/GMPE01_00/rels/m438Dll/symbols.txt +++ b/config/GMPE01_00/rels/m438Dll/symbols.txt @@ -383,7 +383,7 @@ lbl_1_data_28 = .data:0x00000028; // type:object size:0xC lbl_1_data_34 = .data:0x00000034; // type:object size:0xC lbl_1_data_40 = .data:0x00000040; // type:object size:0x23 data:string lbl_1_data_64 = .data:0x00000064; // type:object size:0x4 data:4byte -lbl_1_data_68 = .data:0x00000068; // type:object size:0x420 +lbl_1_data_68 = .data:0x00000068; // type:object size:0x420 data:float lbl_1_data_488 = .data:0x00000488; // type:object size:0x2C lbl_1_data_4B4 = .data:0x000004B4; // type:object size:0x30 jumptable_1_data_4E4 = .data:0x000004E4; // type:object size:0x2C scope:local diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index 26583249..64c73098 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -230,106 +230,6 @@ Vec lbl_1_data_1C = { 500.0f, 3000.0f, 500.0f }; Vec lbl_1_data_28 = { 0.0f, 1.0f, 0.0f }; Vec lbl_1_data_34 = { 0.0f, 0.0f, 0.0f }; -s32 lbl_1_data_64 = -1; -Vec lbl_1_data_68[10][8]; // TODO not right -s32 lbl_1_data_488[0xB] = { 0, 2, 3, 8, 0xA, 9, 0x13, 0xD, 0x10, 0x17, 0x18 }; - -Vec lbl_1_data_4B4[4] = { - { -400.0f, 1600.0f, -400.0f }, - { 400.0f, 1600.0f, -400.0f }, - { -400.0f, 1600.0f, 400.0f }, - { 400.0f, 1600.0f, 400.0f }, -}; - -Vec lbl_1_data_514 = { -850.0f, 0.0f, -850.0f }; - -s32 lbl_1_data_520[0x19] = { - 0xFFFFFF9E, - 0xFFFFFF9F, - 0xFFFFFFA0, - 0xFFFFFFA1, - 0xFFFFFFA2, - 0xFFFFFFCE, - 0xFFFFFFCF, - 0xFFFFFFD0, - 0xFFFFFFD1, - 0xFFFFFFD2, - 0xFFFFFFFE, - 0xFFFFFFFF, - 0, - 1, - 2, - 0x2E, - 0x2F, - 0x30, - 0x31, - 0x32, - 0x5E, - 0x5F, - 0x60, - 0x61, - 0x62, -}; - -u32 lbl_1_data_584[0x19] = { - 0x50, - 0x64, - 0x78, - 0x64, - 0x50, - 0x64, - 0x8C, - 0xA0, - 0x8C, - 0x64, - 0x78, - 0xA0, - 0xB4, - 0xA0, - 0x78, - 0x64, - 0x8C, - 0xA0, - 0x8C, - 0x64, - 0x50, - 0x64, - 0x78, - 0x64, - 0x50, -}; - -s32 lbl_1_data_5E8[9] = { 0, 0xFFFFFFCF, 0xFFFFFFD0, 0xFFFFFFD1, 0xFFFFFFFF, 1, 0x2F, 0x30, 0x31 }; - -Vec lbl_1_data_60C[9] = { - { 0.0f, 0.0f, 0.0f }, - { -35.416668f, 0.0f, -35.416668f }, - { 0.0f, 0.0f, -35.416668f }, - { 35.416668f, 0.0f, -35.416668f }, - { -35.416668f, 0.0f, 0.0f }, - { 35.416668f, 0.0f, 0.0f }, - { -35.416668f, 0.0f, 35.416668f }, - { 0.0f, 0.0f, 35.416668f }, - { 35.416668f, 0.0f, 35.416668f }, -}; - -s32 lbl_1_data_678[9] = { 0, 0xFFFFFF9E, 0xFFFFFF70, 0xFFFFFFA2, 0xFFFFFFFD, 3, 0x5E, 0x90, 0x62 }; - -Vec lbl_1_data_69C[9] = { - { 0.0f, 0.0f, 0.0f }, - { -70.833336f, 0.0f, -70.833336f }, - { 0.0f, 0.0f, -106.25f }, - { 70.833336f, 0.0f, -70.833336f }, - { -106.25f, 0.0f, 0.0f }, - { 106.25f, 0.0f, 0.0f }, - { -70.833336f, 0.0f, 70.833336f }, - { 0.0f, 0.0f, 106.25f }, - { 70.833336f, 0.0f, 70.833336f }, -}; - -s32 lbl_1_data_708[9] = { 0, 0xFFFFFFED, 0xFFFFFFEE, 0xFFFFFFEF, 0xFFFFFFFF, 1, 0x11, 0x12, 0x13 }; -s32 lbl_1_data_72C[9] = { 0, 0xFFFFFFDA, 0xFFFFFFCA, 0xFFFFFFDE, 0xFFFFFFFD, 3, 0x22, 0x36, 0x26 }; - M438StructBssDE4 lbl_1_bss_DE4; omObjData *lbl_1_bss_DE0; omObjData *lbl_1_bss_DDC; @@ -482,6 +382,7 @@ void fn_1_4FC(omObjData *object) } } +s32 lbl_1_data_64 = -1; void fn_1_974(omObjData *object) { s32 var_r31; @@ -648,6 +549,254 @@ void fn_1_1174(omObjData *object) } } +Vec lbl_1_data_68[11][8] = { + { + { -528.6f, 0.0f, 350.7f }, + { -375.7f, 0.0f, 243.0f }, + { -214.2f, 0.0f, 331.4f }, + { -173.3f, 0.0f, 523.7f }, + { 15.000001f, 0.0f, 505.7f }, + { 148.59999f, 0.0f, 393.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + }, + { + { -198.7f, 0.0f, -122.899994f }, + { -11.599999f, 0.0f, -177.1f } + } +// 63.4, 0, -349.7 +// 277.09998 +// 0 +// -296.4 +// 397.5 +// 0 +// -470.2 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// -421 +// 0 +// -471.3 +// -270.1 +// 0 +// -460 +// -153.1 +// 0 +// -356.5 +// 12.4 +// 0 +// -473.99997 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// -545.10004 +// 0 +// -318.9 +// -469 +// 0 +// -154.1 +// -313.4 +// 0 +// -170.09999 +// -250 +// 0 +// -32.8 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// -155.6 +// 0 +// 19.5 +// -34.3 +// 0 +// 96.6 +// -63.9 +// 0 +// 240.00002 +// 37.5 +// 0 +// 402.8 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 207.5 +// 0 +// -163.2 +// 270.1 +// 0 +// -104.799995 +// 402.19998 +// 0 +// -102.4 +// 511.49997 +// 0 +// -25.099998 +// 627.3 +// 0 +// -142 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// -601 +// 0 +// 97.799995 +// -516.80005 +// 0 +// 60.000004 +// -417.7 +// 0 +// 92.9 +// -309.40002 +// 0 +// 76.1 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 82.8 +// 0 +// 164.2 +// 179.40001 +// 0 +// 179.8 +// 241.00002 +// 0 +// 87.1 +// 323 +// 0 +// 38.800003 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 243.4 +// 0 +// 573.5 +// 227.7 +// 0 +// 461.2 +// 319.30002 +// 0 +// 400.6 +// 342.30002 +// 0 +// 310 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 357.69998 +// 0 +// 146.8 +// 418.80002 +// 0 +// 225 +// 503.2 +// 0 +// 234.69998 +// 548.1 +// 0 +// 321.19998 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// -100 +// 0 +// 0 +// 0 +// 0 +// -100 +// 100 +// 0 +// 0 +// 0 +// 1 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +// 0 +}; void fn_1_1204(omObjData *object) { M438StructBss298 *var_r31; @@ -1078,6 +1227,13 @@ void fn_1_28E4(u8 arg0, u16 arg1, float arg9, float argA, float arg4) var_r31->unk_164[arg0] = 90.0f; } +s32 lbl_1_data_488[11] = { 0, 2, 3, 8, 0xA, 9, 0x13, 0xD, 0x10, 0x17, 0x18 }; +Vec lbl_1_data_4B4[4] = { + { -400.0f, 1600.0f, -400.0f }, + { 400.0f, 1600.0f, -400.0f }, + { -400.0f, 1600.0f, 400.0f }, + { 400.0f, 1600.0f, 400.0f }, +}; void fn_1_2964(omObjData *object) { M438MainWork *var_r31; @@ -3349,6 +3505,43 @@ void fn_1_A60C(omObjData *object) void fn_1_A688(omObjData *object) { } +Vec lbl_1_data_514 = { -850.0f, 0.0f, -850.0f }; +s32 lbl_1_data_520[25] = { + -98, -97, -96, -95, -94, + -50, -49, -48, -47, -46, + -2, -1, 0, 1, 2, + 0x2E, 0x2F, 0x30, 0x31, 0x32, + 0x5E, 0x5F, 0x60, 0x61, 0x62, +}; + +u32 lbl_1_data_584[25] = { + 0x50, + 0x64, + 0x78, + 0x64, + 0x50, + 0x64, + 0x8C, + 0xA0, + 0x8C, + 0x64, + 0x78, + 0xA0, + 0xB4, + 0xA0, + 0x78, + 0x64, + 0x8C, + 0xA0, + 0x8C, + 0x64, + 0x50, + 0x64, + 0x78, + 0x64, + 0x50, +}; + // void fn_1_A68C(ModelData *model, Mtx matrix) // { // Vec sp14; @@ -3502,6 +3695,38 @@ void fn_1_A688(omObjData *object) { } // return var_r30; // } +s32 lbl_1_data_5E8[9] = { 0, -49, -48, -47, -1, 1, 0x2F, 0x30, 0x31 }; + +Vec lbl_1_data_60C[9] = { + { 0.0f, 0.0f, 0.0f }, + { -35.416668f, 0.0f, -35.416668f }, + { 0.0f, 0.0f, -35.416668f }, + { 35.416668f, 0.0f, -35.416668f }, + { -35.416668f, 0.0f, 0.0f }, + { 35.416668f, 0.0f, 0.0f }, + { -35.416668f, 0.0f, 35.416668f }, + { 0.0f, 0.0f, 35.416668f }, + { 35.416668f, 0.0f, 35.416668f }, +}; + +s32 lbl_1_data_678[9] = { 0, -98, -144, -94, -3, 3, 0x5E, 0x90, 0x62 }; + +Vec lbl_1_data_69C[9] = { + { 0.0f, 0.0f, 0.0f }, + { -70.833336f, 0.0f, -70.833336f }, + { 0.0f, 0.0f, -106.25f }, + { 70.833336f, 0.0f, -70.833336f }, + { -106.25f, 0.0f, 0.0f }, + { 106.25f, 0.0f, 0.0f }, + { -70.833336f, 0.0f, 70.833336f }, + { 0.0f, 0.0f, 106.25f }, + { 70.833336f, 0.0f, 70.833336f }, +}; + +s32 lbl_1_data_708[9] = { 0, -19, -18, -17, -1, 1, 0x11, 0x12, 0x13 }; +s32 lbl_1_data_72C[9] = { 0, -38, -54, -34, -3, 3, 0x22, 0x36, 0x26 }; + + // s32 fn_1_AE18(u32 arg0, Vec *arg1, Vec *arg2) // { // Vec sp4C; From cb0cd12ab05ba725f5dcab0ba9771f2536959cda Mon Sep 17 00:00:00 2001 From: CreateSource <72283721+abnormalhare@users.noreply.github.com> Date: Tue, 26 Nov 2024 21:12:39 -0500 Subject: [PATCH 2/8] halfway done --- .vscode/settings.json | 80 ++++- config/GMPE01_00/rels/m438Dll/symbols.txt | 1 + src/REL/m438Dll/main.c | 344 ++++++---------------- 3 files changed, 162 insertions(+), 263 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7c43f1a7..233a6160 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -22,20 +22,78 @@ "m443dll.h": "c", "object.h": "c", "executor.h": "c", - "m438dll.h": "c" + "m438dll.h": "c", + "audio.h": "c" }, "search.useIgnoreFiles": false, "search.exclude": { - "build/*/config.json": true, - "build/**/*.MAP": true, - "build.ninja": true, - ".ninja_*": true, - "objdiff.json": true, - "progress.json": true, - "report.json": true, - "compile_commands.json": true, + "build/*/config.json": true, + "build/**/*.MAP": true, + "build.ninja": true, + ".ninja_*": true, + "objdiff.json": true, + "progress.json": true, + "report.json": true, + "compile_commands.json": true }, "cmake.ignoreCMakeListsMissing": true, "editor.fontFamily": "Fira Code", - "editor.fontLigatures": true -} + "editor.fontLigatures": true, + "C_Cpp_Runner.cCompilerPath": "gcc", + "C_Cpp_Runner.cppCompilerPath": "g++", + "C_Cpp_Runner.debuggerPath": "gdb", + "C_Cpp_Runner.cStandard": "", + "C_Cpp_Runner.cppStandard": "", + "C_Cpp_Runner.msvcBatchPath": "C:/Program Files/Microsoft Visual Studio/VR_NR/Community/VC/Auxiliary/Build/vcvarsall.bat", + "C_Cpp_Runner.useMsvc": false, + "C_Cpp_Runner.warnings": [ + "-Wall", + "-Wextra", + "-Wpedantic", + "-Wshadow", + "-Wformat=2", + "-Wcast-align", + "-Wconversion", + "-Wsign-conversion", + "-Wnull-dereference" + ], + "C_Cpp_Runner.msvcWarnings": [ + "/W4", + "/permissive-", + "/w14242", + "/w14287", + "/w14296", + "/w14311", + "/w14826", + "/w44062", + "/w44242", + "/w14905", + "/w14906", + "/w14263", + "/w44265", + "/w14928" + ], + "C_Cpp_Runner.enableWarnings": true, + "C_Cpp_Runner.warningsAsError": false, + "C_Cpp_Runner.compilerArgs": [], + "C_Cpp_Runner.linkerArgs": [], + "C_Cpp_Runner.includePaths": [], + "C_Cpp_Runner.includeSearch": [ + "*", + "**/*" + ], + "C_Cpp_Runner.excludeSearch": [ + "**/build", + "**/build/**", + "**/.*", + "**/.*/**", + "**/.vscode", + "**/.vscode/**" + ], + "C_Cpp_Runner.useAddressSanitizer": false, + "C_Cpp_Runner.useUndefinedSanitizer": false, + "C_Cpp_Runner.useLeakSanitizer": false, + "C_Cpp_Runner.showCompilationTime": false, + "C_Cpp_Runner.useLinkTimeOptimization": false, + "C_Cpp_Runner.msvcSecureNoWarnings": false +} \ No newline at end of file diff --git a/config/GMPE01_00/rels/m438Dll/symbols.txt b/config/GMPE01_00/rels/m438Dll/symbols.txt index 42b61291..13ca3c7d 100644 --- a/config/GMPE01_00/rels/m438Dll/symbols.txt +++ b/config/GMPE01_00/rels/m438Dll/symbols.txt @@ -387,6 +387,7 @@ lbl_1_data_68 = .data:0x00000068; // type:object size:0x420 data:float lbl_1_data_488 = .data:0x00000488; // type:object size:0x2C lbl_1_data_4B4 = .data:0x000004B4; // type:object size:0x30 jumptable_1_data_4E4 = .data:0x000004E4; // type:object size:0x2C scope:local +lbl_1_data_510 = .data:0x00000510; // type:object size:0x4 lbl_1_data_514 = .data:0x00000514; // type:object size:0xC lbl_1_data_520 = .data:0x00000520; // type:object size:0x64 lbl_1_data_584 = .data:0x00000584; // type:object size:0x64 diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index 64c73098..3bdd8fbd 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -210,9 +210,9 @@ void fn_1_7DD8(s32 arg0, s32 *arg1); float fn_1_7EDC(float arg8, float arg9, float argA); void fn_1_8164(float *arg0, Vec *arg1); void fn_1_8C34(float *arg0, float *arg1, float *arg2, s32 arg3); -float fn_1_8EEC(float *arg0, float *arg1, float *arg2, float arg8); +float fn_1_8EEC(float arg8, float *arg0, float *arg1, float *arg2, s32 arg3); void fn_1_9040(float *arg0, Vec *arg1, float arg2[3][3], s32 arg3); -void fn_1_9420(float *arg0, float *arg1, float arg2[3][3], float arg3[3][3], s32 arg4, float arg8); +void fn_1_9420(float arg8, float *arg0, float *arg1, float arg2[3][3], float arg3[3][3], s32 arg4); float fn_1_9634(Vec *arg0); void fn_1_974(omObjData *object); float fn_1_9960(Vec *arg0, Vec *arg1, Vec *arg2); @@ -558,244 +558,78 @@ Vec lbl_1_data_68[11][8] = { { 15.000001f, 0.0f, 505.7f }, { 148.59999f, 0.0f, 393.0f }, { 0.0f, 1.0f, 0.0f }, - { 0.0f, 0.0f, 0.0f }, }, { { -198.7f, 0.0f, -122.899994f }, - { -11.599999f, 0.0f, -177.1f } + { -11.599999f, 0.0f, -177.1f }, + { 63.4f, 0.0f, -349.7f }, + { 277.09999f, 0.0f, -296.4f }, + { 397.5f, 0.0f, -470.2f }, + { 0.0f, 1.0f, 0.0f }, + }, + { + { -421.0f, 0.0f, -471.3f }, + { -270.1f, 0.0f, -460.0f }, + { -153.1f, 0.0f, -356.5f }, + { 12.4f, 0.0f, -473.99997f }, + { 0.0f, 1.0f, 0.0f }, + }, + { + { -545.10004f, 0.0f, -318.9f }, + { -469.0f, 0.0f, -154.1f }, + { -313.4, 0.0f, -170.09999f }, + { -250.0f, 0.0f, -32.8f }, + { 0.0f, 1.0f, 0.0f }, + }, + { + { -155.6f, 0.0f, 19.5f }, + { -34.3f, 0.0f, 96.6f }, + { -63.9f, 0.0f, 240.00002f }, + { 37.5f, 0.0f, 402.8f }, + { 0.0f, 1.0f, 0.0f } + }, + { + { 207.5f, 0.0f, -163.2f }, + { 270.1f, 0.0f, -104.799995f }, + { 402.19998f, 0.0f, -102.4f }, + { 511.49997f, 0.0f, -25.099998f }, + { 627.3f, 0.0f, -142.0f }, + { 0.0f, 1.0f, 0.0f } + }, + { + { -601.0f, 0.0f, 97.799995f }, + { -516.80005f, 0.0f, 60.000004f }, + { -417.7f, 0.0f, 92.9f }, + { -309.40002f, 0.0f, 76.1f }, + { 0.0f, 1.0f, 0.0f }, + }, + { + { 82.8f, 0.0f, 164.2f }, + { 179.40001f, 0.0f, 179.8f }, + { 241.00002f, 0.0f, 87.1f }, + { 323.0f, 0.0f, 38.800003f }, + { 0.0f, 1.0f, 0.0f } + }, + { + { 243.4f, 0.0f, 573.5f }, + { 227.7f, 0.0f, 461.2f }, + { 319.30002f, 0.0f, 400.6f }, + { 342.30002f, 0.0f, 310.0f }, + { 0.0f, 1.0f, 0.0f } + }, + { + { 357.69998f, 0.0f, 146.8f }, + { 418.80002f, 0.0f, 225.0f }, + { 503.2f, 0.0f, 234.69998f }, + { 548.1f, 0.0f, 321.19998f }, + { 0.0f, 1.0f, 0.0f } + }, + { + { -100.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, -100.0f }, + { 100.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f } } -// 63.4, 0, -349.7 -// 277.09998 -// 0 -// -296.4 -// 397.5 -// 0 -// -470.2 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// -421 -// 0 -// -471.3 -// -270.1 -// 0 -// -460 -// -153.1 -// 0 -// -356.5 -// 12.4 -// 0 -// -473.99997 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// -545.10004 -// 0 -// -318.9 -// -469 -// 0 -// -154.1 -// -313.4 -// 0 -// -170.09999 -// -250 -// 0 -// -32.8 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// -155.6 -// 0 -// 19.5 -// -34.3 -// 0 -// 96.6 -// -63.9 -// 0 -// 240.00002 -// 37.5 -// 0 -// 402.8 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 207.5 -// 0 -// -163.2 -// 270.1 -// 0 -// -104.799995 -// 402.19998 -// 0 -// -102.4 -// 511.49997 -// 0 -// -25.099998 -// 627.3 -// 0 -// -142 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// -601 -// 0 -// 97.799995 -// -516.80005 -// 0 -// 60.000004 -// -417.7 -// 0 -// 92.9 -// -309.40002 -// 0 -// 76.1 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 82.8 -// 0 -// 164.2 -// 179.40001 -// 0 -// 179.8 -// 241.00002 -// 0 -// 87.1 -// 323 -// 0 -// 38.800003 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 243.4 -// 0 -// 573.5 -// 227.7 -// 0 -// 461.2 -// 319.30002 -// 0 -// 400.6 -// 342.30002 -// 0 -// 310 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 357.69998 -// 0 -// 146.8 -// 418.80002 -// 0 -// 225 -// 503.2 -// 0 -// 234.69998 -// 548.1 -// 0 -// 321.19998 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// -100 -// 0 -// 0 -// 0 -// 0 -// -100 -// 100 -// 0 -// 0 -// 0 -// 1 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 -// 0 }; void fn_1_1204(omObjData *object) { @@ -849,9 +683,8 @@ void fn_1_13A0(omObjData *object) switch (lbl_1_bss_DBA) { case 0: case 1: - case 2: - case 3: case 4: + case 5: break; case 6: lbl_1_bss_294 = 0x1E; @@ -1092,11 +925,10 @@ void fn_1_2070(omObjData *object) var_r31->unk_10.y = var_r31->unk_28.y + (var_f31 * (var_r31->unk_40.y - var_r31->unk_28.y)); var_r31->unk_10.z = var_r31->unk_28.z + (var_f31 * (var_r31->unk_40.z - var_r31->unk_28.z)); var_r31->unk_130 = var_r31->unk_134 + (var_f31 * (var_r31->unk_138 - var_r31->unk_134)); - } - else { - fn_1_9420((float *)&var_r31->unk_04, var_r31->unk_F4, (float(*)[3]) & var_r31->unk_64, var_r31->unk_88, 3, 2.0f * var_f31); - fn_1_9420((float *)&var_r31->unk_10, var_r31->unk_100, (float(*)[3]) & var_r31->unk_AC, var_r31->unk_D0, 3, 2.0f * var_f31); - var_r31->unk_130 = fn_1_8EEC(var_r31->unk_124, var_r31->unk_10C, var_r31->unk_118, 2.0f * var_f31); + } else { + fn_1_9420(2.0f * var_f31, (float *)&var_r31->unk_04, var_r31->unk_F4, (float(*)[3]) & var_r31->unk_64, var_r31->unk_88, 3); + fn_1_9420(2.0f * var_f31, (float *)&var_r31->unk_10, var_r31->unk_100, (float(*)[3]) & var_r31->unk_AC, var_r31->unk_D0, 3); + var_r31->unk_130 = fn_1_8EEC(2.0f * var_f31, var_r31->unk_124, var_r31->unk_10C, var_r31->unk_118, 3); } } CRot.x = var_r31->unk_10.x; @@ -1615,12 +1447,16 @@ void fn_1_35C0(omObjData *object) var_r31->unk_22 = var_r28; var_r31->unk_20 = var_r28; CharModelMotionShiftSet(var_r31->unk_01, object->motion[8], 0.0f, 8.0f, var_r27); - } - else if (var_r28 < 3) { - if (var_r28 < 0 || var_r31->unk_20 == 0 || CharModelMotionShiftIDGet(var_r31->unk_01) < 0) { - var_r31->unk_22 = var_r28; - var_r31->unk_20 = var_r28; - CharModelMotionShiftSet(var_r31->unk_01, object->motion[var_r31->unk_20], 0.0f, 8.0f, var_r27); + } else { + switch (var_r28) { + case 0: + case 1: + case 2: + if (var_r31->unk_20 != 0 && CharModelMotionShiftIDGet(var_r31->unk_01) >= 0) break; + default: + var_r31->unk_22 = var_r28; + var_r31->unk_20 = var_r28; + CharModelMotionShiftSet(var_r31->unk_01, object->motion[var_r31->unk_20], 0.0f, 8.0f, var_r27); } } var_r31->unk_30 = CharModelMotionMaxTimeGet(var_r31->unk_01); @@ -1728,6 +1564,7 @@ void fn_1_4724(omObjData *object) object->func = fn_1_4984; } + // void fn_1_4984(omObjData *object) // { // float sp10; @@ -3046,7 +2883,7 @@ void fn_1_8C34(float *arg0, float *arg1, float *arg2, s32 arg3) } } -float fn_1_8EEC(float *arg0, float *arg1, float *arg2, float arg8) +float fn_1_8EEC(float arg8, float *arg0, float *arg1, float *arg2, s32 arg3) { float var_f31; float var_f30; @@ -3123,7 +2960,8 @@ void fn_1_9040(float *arg0, Vec *arg1, float arg2[3][3], s32 arg3) } } -void fn_1_9420(float *arg0, float *arg1, float arg2[3][3], float arg3[3][3], s32 arg4, float arg8) + +void fn_1_9420(float arg8, float *arg0, float *arg1, float arg2[3][3], float arg3[3][3], s32 arg4) { float sp48[16]; float sp8[16]; @@ -3138,7 +2976,7 @@ void fn_1_9420(float *arg0, float *arg1, float arg2[3][3], float arg3[3][3], s32 sp48[var_r30] = arg2[var_r30][var_r29]; sp8[var_r30] = arg3[var_r30][var_r29]; } - arg0[var_r29] = fn_1_8EEC(arg1, sp48, sp8, arg8); + arg0[var_r29] = fn_1_8EEC(arg8, arg1, sp48, sp8, arg4); } } @@ -3503,6 +3341,8 @@ void fn_1_A60C(omObjData *object) object->func = fn_1_A688; } +u32 lbl_1_data_510 = 0x41C64E6D; + void fn_1_A688(omObjData *object) { } Vec lbl_1_data_514 = { -850.0f, 0.0f, -850.0f }; From fa773dcfbdd309313a3eedb3550d44062e216e0f Mon Sep 17 00:00:00 2001 From: CreateSource Date: Wed, 27 Nov 2024 10:49:58 -0500 Subject: [PATCH 3/8] complete fn_1_4984 --- src/REL/m438Dll/main.c | 209 +++++++++++++++++++---------------------- 1 file changed, 97 insertions(+), 112 deletions(-) diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index 3bdd8fbd..13c88ac0 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -178,6 +178,9 @@ typedef struct M438StructBssDE4 { M438UnkStruct2 *unk_40; } M438StructBssDE4; /* size = */ +void fn_1_4DC(omObjData *object); +void fn_1_4FC(omObjData *object); +void fn_1_974(omObjData *object); void fn_1_1174(omObjData *object); void fn_1_1204(omObjData *object); void fn_1_13A0(omObjData *object); @@ -193,9 +196,7 @@ void fn_1_35C0(omObjData *object); void fn_1_4374(omObjData *object); void fn_1_4724(omObjData *object); void fn_1_4984(omObjData *object); -void fn_1_4DC(omObjData *object); void fn_1_4F50(omObjData *object); -void fn_1_4FC(omObjData *object); void fn_1_5D4C(void *arg0); void fn_1_62BC(void *arg0); void fn_1_63B0(void *arg0); @@ -208,13 +209,12 @@ void fn_1_7D30(void); s32 fn_1_7DB4(void); void fn_1_7DD8(s32 arg0, s32 *arg1); float fn_1_7EDC(float arg8, float arg9, float argA); -void fn_1_8164(float *arg0, Vec *arg1); +void fn_1_8164(Mtx arg0, Vec *arg1); void fn_1_8C34(float *arg0, float *arg1, float *arg2, s32 arg3); float fn_1_8EEC(float arg8, float *arg0, float *arg1, float *arg2, s32 arg3); void fn_1_9040(float *arg0, Vec *arg1, float arg2[3][3], s32 arg3); void fn_1_9420(float arg8, float *arg0, float *arg1, float arg2[3][3], float arg3[3][3], s32 arg4); float fn_1_9634(Vec *arg0); -void fn_1_974(omObjData *object); float fn_1_9960(Vec *arg0, Vec *arg1, Vec *arg2); float fn_1_A14C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3); void fn_1_A60C(omObjData *object); @@ -1565,115 +1565,100 @@ void fn_1_4724(omObjData *object) } -// void fn_1_4984(omObjData *object) -// { -// float sp10; -// float spC; -// float sp8; -// float temp_f0; -// float temp_f0_2; -// float var_f31; -// omObjData *var_r29; -// s16 var_r27; -// void *var_r28; -// void *var_r30; -// void *var_r31; +void fn_1_4984(omObjData *object) +{ + Vec sp8; + float var_f31; + s32 var_r27; + M438MainWork3 *var_r28; + M438MainWork3 *var_r30; + M438MainWork3 *var_r31; -// var_r29 = object; -// var_r31 = var_r29->data; -// switch (lbl_1_bss_DBA) { -// case 1: -// if (lbl_1_bss_4 == 0) { -// lbl_1_bss_4 = fn_1_10258(0x90, 1); -// fn_1_11018(lbl_1_bss_4, 0, 0x45000A); -// *(lbl_1_bss_DE4.unk_40 + ((lbl_1_bss_4 * 0xBC) + 0x30)) = fn_1_6A3C; -// fn_1_11890(lbl_1_bss_4, var_r31->unk_10, -80.0f, var_r31->unk_18); -// fn_1_12100(lbl_1_bss_4, 4); -// fn_1_124CC(lbl_1_bss_4, 1); -// *(lbl_1_bss_DE4.unk_40 + ((lbl_1_bss_4 * 0xBC) + 0x7C)) = 0; -// } -// break; -// case 2: -// var_r31->unk_14 = var_r31->unk_14 + var_r31->unk_2C; -// var_r31->unk_2C = var_r31->unk_2C - -2.0416667f; -// if (var_r31->unk_14 >= -350.0f) { -// HuAudFXPlay(0x6FA); -// *(lbl_1_bss_DE4.unk_40 + ((lbl_1_bss_4 * 0xBC) + 0x7C)) = 1; -// } -// if (var_r31->unk_14 > 0.0f) { -// HuAudFXEmiterPlay(0x700, var_r31 + 0x10); -// lbl_1_bss_DB2 = 0x78; -// lbl_1_bss_DBA += 1; -// var_r31->unk_30 = 20.0f; -// } -// break; -// case 3: -// var_r31->unk_14 = var_r31->unk_14 + var_r31->unk_2C; -// var_r31->unk_18 = var_r31->unk_18 + var_r31->unk_30; -// var_r31->unk_2C = var_r31->unk_2C + -2.0416667f; -// if (var_r31->unk_14 < 0.0f) { -// var_r31->unk_30 = var_r31->unk_30 - 0.5f; -// if (var_r31->unk_30 < 0.0f) { -// var_r31->unk_30 = 0.0f; -// } -// var_r31->unk_14 = 0.0f; -// if (lbl_1_bss_8 == 0) { -// HuAudFXPlay(0x6FE); -// var_r28 = lbl_1_bss_DD8->data; -// var_r28->unk_18A = 0x3C; -// var_r28->unk_150 = 25.0f; -// var_r28->unk_15C = 0.95f; -// var_r28->unk_174 = 90.0f; -// var_r28->unk_168 = 90.0f; -// for (var_r27 = 0; var_r27 < 4; var_r27++) { -// omVibrate(var_r27, 0x36, 0xC, 0); -// } -// lbl_1_bss_4 = fn_1_10258(0x3C, 1); -// fn_1_11018(lbl_1_bss_4, 0, 0x45000F); -// *(lbl_1_bss_DE4.unk_40 + ((lbl_1_bss_4 * 0xBC) + 0x30)) = fn_1_5D4C; -// fn_1_11890(lbl_1_bss_4, var_r31->unk_10, 50.0f + var_r31->unk_14, var_r31->unk_18); -// fn_1_124CC(lbl_1_bss_4, 1); -// lbl_1_bss_8++; -// } -// } -// sp8 = var_r31->unk_10; -// spC = var_r31->unk_14; -// sp10 = var_r31->unk_18; -// temp_f0 = spC + 120.00001f; -// spC = temp_f0; -// temp_f0_2 = sp10 - 300.0f; -// sp10 = temp_f0_2; -// var_f31 = CZoom; -// var_r30 = lbl_1_bss_DD8->data; -// var_r30->unk_00 = 0; -// var_r30->unk_144 = 1.0f; -// var_r30->unk_148 = 1.0f; -// var_r30->unk_1C = var_r30->unk_04; -// var_r30->unk_20 = var_r30->unk_08; -// var_r30->unk_24 = var_r30->unk_0C; -// var_r30->unk_34 = sp8; -// var_r30->unk_38 = temp_f0; -// var_r30->unk_3C = temp_f0_2; -// var_r30->unk_28 = var_r30->unk_10; -// var_r30->unk_2C = var_r30->unk_14; -// var_r30->unk_30 = var_r30->unk_18; -// var_r30->unk_40 = CRot.x; -// var_r30->unk_44 = CRot.y; -// var_r30->unk_48 = CRot.z; -// var_r30->unk_134 = var_r30->unk_130; -// var_r30->unk_138 = var_f31; -// break; -// case 5: -// Hu3DModelAttrReset(*var_r29->model, HU3D_MOTATTR_LOOP); -// Hu3DModelAttrSet(*var_r29->model, HU3D_MOTATTR_REV); -// var_r29->func = fn_1_4F50; -// var_r29->work[0] = 0xA; -// var_r29->work[1] = 0; -// break; -// } -// omSetTra(var_r29, var_r31->unk_10, var_r31->unk_14, var_r31->unk_18); -// omSetRot(var_r29, var_r31->unk_1C, var_r31->unk_20, var_r31->unk_24); -// } + var_r31 = object->data; + switch (lbl_1_bss_DBA) { + case 1: + if (lbl_1_bss_4 == 0) { + lbl_1_bss_4 = fn_1_10258(0x90, 1); + fn_1_11018(lbl_1_bss_4, 0, 0x45000A); + lbl_1_bss_DE4.unk_40[lbl_1_bss_4].unk_30 = fn_1_6A3C; + fn_1_11890(lbl_1_bss_4, var_r31->unk_10.x, -80.0f, var_r31->unk_10.z); + fn_1_12100(lbl_1_bss_4, 4); + fn_1_124CC(lbl_1_bss_4, 1); + lbl_1_bss_DE4.unk_40[lbl_1_bss_4].unk_7C = 0; + } + break; + case 2: + var_r31->unk_10.y += var_r31->unk_28.y; + var_r31->unk_28.y -= -2.0416667f; + if (var_r31->unk_10.y >= -350.0f) { + HuAudFXPlay(0x6FA); + lbl_1_bss_DE4.unk_40[lbl_1_bss_4].unk_7C = 1; + } + if (var_r31->unk_10.y > 0.0f) { + HuAudFXEmiterPlay(0x700, &var_r31->unk_10); + lbl_1_bss_DB2 = 0x78; + lbl_1_bss_DBA += 1; + var_r31->unk_28.z = 20.0f; + } + break; + case 3: + var_r31->unk_10.y += var_r31->unk_28.y; + var_r31->unk_10.z += var_r31->unk_28.z; + var_r31->unk_28.y += -2.0416667f; + if (var_r31->unk_10.y < 0.0f) { + var_r31->unk_28.z -= 0.5f; + if (var_r31->unk_28.z < 0.0f) { + var_r31->unk_28.z = 0.0f; + } + var_r31->unk_10.y = 0.0f; + if (lbl_1_bss_8 == 0) { + HuAudFXPlay(0x6FE); + var_r28 = lbl_1_bss_DD8->data; + var_r28->unk_188[1] = 0x3C; + var_r28->unk_14C[1] = 25.0f; + var_r28->unk_158[1] = 0.95f; + var_r28->unk_170[1] = 90.0f; + var_r28->unk_164[1] = 90.0f; + for (var_r27 = 0; var_r27 < 4; var_r27++) { + omVibrate(var_r27, 0x36, 0xC, 0); + } + lbl_1_bss_4 = fn_1_10258(0x3C, 1); + fn_1_11018(lbl_1_bss_4, 0, 0x45000F); + lbl_1_bss_DE4.unk_40[lbl_1_bss_4].unk_30 = fn_1_5D4C; + fn_1_11890(lbl_1_bss_4, var_r31->unk_10.x, 50.0f + var_r31->unk_10.y, var_r31->unk_10.z); + fn_1_124CC(lbl_1_bss_4, 1); + lbl_1_bss_8++; + } + } + sp8 = var_r31->unk_10; + sp8.y += 120.00001f; + sp8.z -= 300.0f; + var_f31 = CZoom; + var_r30 = lbl_1_bss_DD8->data; + var_r30->unk_00 = 0; + var_r30->unk_148 = var_r30->unk_144 = 1.0f; + var_r30->unk_1C = var_r30->unk_04; + var_r30->unk_34.x = sp8.x; + var_r30->unk_34.y = sp8.y; + var_r30->unk_34.z = sp8.z; + var_r30->unk_28 = var_r30->unk_10; + var_r30->unk_40.x = CRot.x; + var_r30->unk_40.y = CRot.y; + var_r30->unk_40.z = CRot.z; + var_r30->unk_134 = var_r30->unk_130; + var_r30->unk_138 = var_f31; + break; + case 5: + Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP); + Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_REV); + object->func = fn_1_4F50; + object->work[0] = 10; + object->work[1] = 0; + break; + } + 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); +} // void fn_1_4F50(omObjData *object) // { From f826ddd8fe12fb9ef397a5d3b380df8f823c7367 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sat, 30 Nov 2024 19:59:13 -0500 Subject: [PATCH 4/8] up to 7EDC --- src/REL/m438Dll/main.c | 1388 ++++++++++++++++++---------------------- 1 file changed, 634 insertions(+), 754 deletions(-) diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index 13c88ac0..77956add 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -82,7 +82,11 @@ typedef struct M438MainWork2 { typedef struct M438MainWork3 { u8 unk_00; - Vec unk_04; + s16 unk_02; + union { + Vec unk_04; + s32 unk_04s; + }; Vec unk_10; Vec unk_1C; Vec unk_28; @@ -147,18 +151,51 @@ typedef struct M438StructBss298 { Vec unk_24; } M438StructBss298; /* size = 0x30 */ +typedef struct M438UnkSubStruct { + u8 unk_00; + char unk01[0x23]; + u8 unk_24; + float unk_28; + float unk_2C; +} M438UnkSubStruct; + typedef struct M438UnkStruct { - char unk00[0x5C]; - s8 unk_5C; - char unk5D[0x3B]; + Vec unk_00; + char unk0C[0xC]; + Vec unk_18; + char unk24[0xF]; + s8 unk_33; + char unk34[0x4]; + s32 unk_38; + char unk_3C[0x18]; + s8 unk_54; + s8 unk_55; + s8 unk_56; + u8 unk_57; + M438UnkSubStruct* unk_58; + u8 unk_5C; + char unk5D[0x3]; + Vec unk_60; + Vec unk_6C; + s16 unk_78; + s16 unk_7A; + char unk7C[0x1C]; } M438UnkStruct; /* size = 0x98 */ typedef struct M438UnkStruct2 { - char unk00[0x30]; - void *unk_30; // TODO type + s16 unk_00; + s16 unk_02; + char unk04[0x8]; + Vec unk_0C; + char unk18[0xC]; + Vec unk_24; + void (*unk_30)(struct M438UnkStruct2*); char unk34[8]; M438UnkStruct *unk_3C; - char unk40[0x3C]; + char unk40[0x20]; + u8 unk_60; + char unk61[0x3]; + char unk64[0x18]; s16 unk_7C; s16 unk_7E; float unk_80; @@ -197,11 +234,11 @@ void fn_1_4374(omObjData *object); void fn_1_4724(omObjData *object); void fn_1_4984(omObjData *object); void fn_1_4F50(omObjData *object); -void fn_1_5D4C(void *arg0); -void fn_1_62BC(void *arg0); -void fn_1_63B0(void *arg0); -void fn_1_6A3C(void *arg0); -void fn_1_7300(void *arg0); +void fn_1_5D4C(M438UnkStruct2 *arg0); +void fn_1_62BC(M438UnkStruct2 *arg0); +void fn_1_63B0(M438UnkStruct2 *arg0); +void fn_1_6A3C(M438UnkStruct2 *arg0); +void fn_1_7300(M438UnkStruct2 *arg0); void fn_1_7B58(omObjData *object); void fn_1_7BBC(void); void *fn_1_7BFC(s32 arg0); @@ -711,7 +748,7 @@ void fn_1_13A0(omObjData *object) } for (var_r28 = 0, var_r26 = 0; var_r26 < var_r27; var_r28++) { var_r25 = sp8[var_r28]; - var_r24 = (s32)(80.0f * (0.000015258789f * fn_1_7DB4())) + 0x3C; + var_r24 = (s32)(80.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) + 0x3C; for (var_r31 = lbl_1_bss_298, var_r30 = 0; var_r30 < 0x30; var_r30++, var_r31++) { if (var_r31->unk_02 == var_r25) { if (var_r31->unk_00 != 0) { @@ -1101,7 +1138,7 @@ void fn_1_2964(omObjData *object) var_r31->unk_0A = 0; var_r28 = object->work[1]; var_r31->unk_6C.x = lbl_1_data_4B4[var_r28].x; - var_r31->unk_6C.y = lbl_1_data_4B4[var_r28].y + 100.0f * (0.000030517578f * (fn_1_7DB4() - 0x8000)); + var_r31->unk_6C.y = lbl_1_data_4B4[var_r28].y + 100.0f * ((1.0f / 32768.0f) * (fn_1_7DB4() - 0x8000)); var_r31->unk_6C.z = lbl_1_data_4B4[var_r28].z; var_r31->unk_84 = var_r31->unk_88 = var_r31->unk_8C = 0.0f; var_r31->unk_78 = var_r31->unk_7C = var_r31->unk_80 = 0.0f; @@ -1613,12 +1650,7 @@ void fn_1_4984(omObjData *object) var_r31->unk_10.y = 0.0f; if (lbl_1_bss_8 == 0) { HuAudFXPlay(0x6FE); - var_r28 = lbl_1_bss_DD8->data; - var_r28->unk_188[1] = 0x3C; - var_r28->unk_14C[1] = 25.0f; - var_r28->unk_158[1] = 0.95f; - var_r28->unk_170[1] = 90.0f; - var_r28->unk_164[1] = 90.0f; + fn_1_28E4(1, 0x3C, 25.0f, 0.95f, 90.0f); for (var_r27 = 0; var_r27 < 4; var_r27++) { omVibrate(var_r27, 0x36, 0xC, 0); } @@ -1660,743 +1692,593 @@ void fn_1_4984(omObjData *object) omSetRot(object, var_r31->unk_1C.x, var_r31->unk_1C.y, var_r31->unk_1C.z); } -// void fn_1_4F50(omObjData *object) -// { -// Vec sp18; -// float var_f24; -// float var_f25; -// float var_f26; -// float var_f27; -// float var_f28; -// float var_f29; -// float var_f30; -// float var_f31; -// omObjData *var_r30; -// s16 temp_r0; -// s16 temp_r3_3; -// s16 temp_r6; -// s16 var_r28; -// s32 temp_r3_2; -// s32 var_r26; -// u8 temp_r3; -// void *var_r27; -// void *var_r29; -// void *var_r31; - -// var_r30 = object; -// var_r31 = var_r30->data; -// switch (lbl_1_bss_DBA) { -// case 7: -// temp_r3 = var_r31->unk_00; -// switch (temp_r3) { -// case 0: -// var_r31->unk_34 = var_r31->unk_10; -// var_r31->unk_38 = var_r31->unk_14; -// var_r31->unk_3C = var_r31->unk_18; -// Hu3DMotionShiftSet(*var_r30->model, var_r30->motion->unk_06, 0.0f, 8.0f, 0); -// var_r31->unk_00 = var_r31->unk_00 + 1; - -// case 1: -// var_r31->unk_34 = var_r31->unk_10; -// var_r31->unk_38 = var_r31->unk_14; -// var_r31->unk_3C = var_r31->unk_18; -// var_r28 = 0; -// var_r26 = 0; -// loop_21: -// if (var_r28 < 4) { -// var_r29 = lbl_1_bss_DC4[var_r28]->data; -// if ((var_r29->unk_07 != 0) && ((var_r29->unk_07 & 2) == 0)) { -// VECSubtract(var_r29 + 0x6C, var_r31 + 0x10, &sp18); -// temp_r3_2 = var_r26; -// var_r26++; -// (&sp8[0])[temp_r3_2] = atan2d(sp18, sp18.z); -// } -// var_r28++; -// goto loop_21; -// } -// var_r31->unk_20 = var_r31->unk_20 + (18.0f + var_r30->work[1]); -// if (var_r31->unk_20 > 180.0f) { -// var_r31->unk_20 = var_r31->unk_20 - 360.0f; -// } -// if (var_r31->unk_20 <= -180.0f) { -// var_r31->unk_20 = var_r31->unk_20 + 360.0f; -// } -// var_r28 = 0; -// loop_35: -// if (var_r28 >= var_r26) { } -// else { -// var_f31 = fn_1_E5A4((&sp8[0])[var_r28], var_r30->rot.y); -// if (var_f31 < 0.0f) { -// var_f27 = -var_f31; -// } -// else { -// var_f27 = var_f31; -// } -// if (!(var_f27 > (20.0f + var_r30->work[1])) -// && ((var_r30->work[0] -= 1, ((var_r30->work[0] == 0) != 0)) || ((fn_1_7DB4() & 0xF) == 0))) { -// var_r31->unk_08 = (&sp8[0])[var_r28]; -// var_r31->unk_20 = (&sp8[0])[var_r28]; -// var_r31->unk_2C = 16.333334f; -// var_r31->unk_0C = 6.0 + (0.5 * var_r30->work[1]); -// var_r31->unk_34 = var_r31->unk_10; -// var_r31->unk_38 = var_r31->unk_14; -// var_r31->unk_3C = var_r31->unk_18; -// var_r31->unk_40 = 20.0f; -// var_r31->unk_44 = 0.0f; -// var_r31->unk_02 = 0x1E; -// Hu3DMotionShiftSet(*var_r30->model, var_r30->motion->unk_00, 0.0f, 8.0f, 0x40000002); -// var_r31->unk_00 = var_r31->unk_00 + 1; -// } -// else { -// var_r28++; -// goto loop_35; -// } -// } -// break; -// case 2: -// var_r31->unk_44 = var_r31->unk_44 + 10.0f; -// if (var_r31->unk_44 > 90.0f) { -// var_r31->unk_44 = 0.0f; -// } -// var_f29 = cosd(var_r31->unk_44); -// var_r31->unk_1C = var_r31->unk_40 * var_f29; -// var_r31->unk_10 = var_r31->unk_34 + ((50.0f * var_f29) * sind(var_r31->unk_20)); -// var_r31->unk_18 = var_r31->unk_3C + ((50.0f * var_f29) * cosd(var_r31->unk_20)); -// temp_r0 = var_r31->unk_02 - 1; -// var_r31->unk_02 = temp_r0; -// if (temp_r0 == 0) { -// HuAudFXEmiterPlay(0x700, var_r31 + 0x10); -// Hu3DModelAttrReset(*var_r30->model, HU3D_MOTATTR_PAUSE); -// Hu3DModelAttrSet(*var_r30->model, HU3D_MOTATTR_LOOP); -// var_r31->unk_1C = 0.0f; -// var_r31->unk_00 = var_r31->unk_00 + 1; -// } -// break; -// case 3: -// var_r31->unk_0C = var_r31->unk_0C + 0.5; -// var_r31->unk_2C = var_r31->unk_2C + -3.0625f; -// var_f28 = var_r31->unk_0C + (0.8f * var_r31->unk_2C); -// var_r31->unk_28 = var_f28 * sind(var_r31->unk_08); -// var_r31->unk_30 = var_f28 * cosd(var_r31->unk_08); -// var_r31->unk_10 = var_r31->unk_10 + var_r31->unk_28; -// var_r31->unk_14 = var_r31->unk_14 + var_r31->unk_2C; -// var_r31->unk_18 = var_r31->unk_18 + var_r31->unk_30; -// var_r31->unk_34 = var_r31->unk_10; -// var_r31->unk_38 = var_r31->unk_14; -// var_r31->unk_3C = var_r31->unk_18; -// if (var_r31->unk_14 < 0.0f) { -// var_r31->unk_14 = 0.0f; -// var_r31->unk_2C = 16.333334f; -// } -// sp18 = var_r31->unk_10; -// sp18.y = var_r31->unk_14; -// sp18.z = var_r31->unk_18; -// sp18.y = 0.0f; -// var_f30 = VECMag(&sp18); -// if (!(var_f30 <= 700.0f)) { -// var_r31->unk_02 = 1; -// if (fn_1_DA64(atan2d(sp18, sp18.z)) != 0) { -// var_r31->unk_02 = 0x78; -// for (var_r28 = 0; var_r28 < 4; var_r28++) { -// var_r29 = lbl_1_bss_DC4[var_r28]->data; -// if ((var_r29->unk_07 != 0) && ((var_r29->unk_07 & 2) == 0)) { -// omVibrate(var_r28, 0xC, 4, 2); -// } -// } -// var_r27 = lbl_1_bss_DD8->data; -// var_r27->unk_188 = 0x3C; -// var_r27->unk_14C = 25.0f; -// var_r27->unk_158 = 0.95f; -// var_r27->unk_170 = 90.0f; -// var_r27->unk_164 = 90.0f; -// HuAudFXEmiterPlay(0x6FC, var_r31 + 0x10); -// HuAudFXPlay(0x6FE); -// } -// fn_1_9634(&sp18); -// var_r31->unk_10 = 700.0f * sp18; -// var_r31->unk_18 = 700.0f * sp18.z; -// var_r31->unk_40 = var_r31->unk_1C; -// var_r31->unk_44 = var_r31->unk_20; -// var_r31->unk_48 = var_r31->unk_24; -// var_r31->unk_00 = var_r31->unk_00 + 1; -// } -// break; -// case 4: -// var_r31->unk_2C = var_r31->unk_2C + -3.0625f; -// var_r31->unk_14 = var_r31->unk_14 + var_r31->unk_2C; -// if (!(var_r31->unk_14 > 0.0f)) { -// var_r31->unk_14 = 0.0f; -// var_r31->unk_34 = var_r31->unk_10; -// var_r31->unk_38 = var_r31->unk_14; -// var_r31->unk_3C = var_r31->unk_18; -// Hu3DModelAttrReset(*var_r30->model, HU3D_MOTATTR_LOOP); -// Hu3DModelAttrSet(*var_r30->model, HU3D_MOTATTR_REV); -// var_r31->unk_44 = var_r31->unk_44 + 8.0f; -// var_r31->unk_40 = 10.0 * sind(var_r31->unk_44); -// var_r31->unk_48 = 10.0 * cosd(var_r31->unk_44); -// mtxRot(&sp24[0], 0.0f, 360.0f - var_r31->unk_08, var_r31->unk_48); -// mtxRotCat(&sp24[0], var_r31->unk_40, 0.0f, 0.0f); -// fn_1_8164(&sp24[0], var_r31 + 0x1C); -// temp_r3_3 = var_r31->unk_02 - 1; -// var_r31->unk_02 = temp_r3_3; -// if (temp_r3_3 == 0) { -// var_r31->unk_24 = 0.0f; -// var_r31->unk_1C = 0.0f; -// var_r31->unk_20 = var_r31->unk_08; -// var_r30->work[0] = 0.5f * (lbl_1_bss_DB4 / 60.0f); -// var_r30->work[1] += 1; -// var_r31->unk_00 = 0; -// } -// } -// break; -// } -// break; -// case 8: -// var_r31->unk_24 = 0.0f; -// var_r31->unk_1C = 0.0f; -// Hu3DModelAttrReset(*var_r30->model, HU3D_MOTATTR_LOOP); -// Hu3DModelAttrSet(*var_r30->model, HU3D_MOTATTR_REV); -// break; -// case 9: -// var_r31->unk_20 = fn_1_7EDC(var_r31->unk_20, 0.0f, 0.9f); -// break; -// case 10: -// if (var_r31->unk_04 == 0) { -// Hu3DModelAttrReset(*var_r30->model, HU3D_MOTATTR_PAUSE | HU3D_MOTATTR_REV); -// Hu3DMotionSet(*var_r30->model, var_r30->motion->unk_02); -// Hu3DMotionSpeedSet(*var_r30->model, 1.0f); -// Hu3DModelAttrSet(*var_r30->model, HU3D_MOTATTR_LOOP); -// var_r31->unk_04 = 1; -// } -// break; -// } -// if (lbl_1_bss_DBA == 7) { -// var_r28 = 0; -// var_r26 = 0; -// loop_72: -// if (var_r28 < 4) { -// var_r29 = lbl_1_bss_DC4[var_r28]->data; -// VECSubtract(var_r29 + 0x6C, var_r31 + 0x10, &sp18); -// var_f30 = VECMag(&sp18); -// if (!(var_f30 >= 200.0f) && (var_r29->unk_20 != 7)) { -// omVibrate(var_r29->unk_00, 0xC, 4, 2); -// var_r29->unk_07 = var_r29->unk_07 | 2; -// var_r29->unk_0D = 0; -// var_r29->unk_20 = 7; -// var_r29->unk_28 = atan2d(sp18, sp18.z); -// if (var_r29->unk_28 >= 360.0f) { -// var_r29->unk_28 = var_r29->unk_28 - 360.0f; -// } -// var_f26 = fn_1_E5A4(var_r29->unk_28, var_r29->unk_7C); -// var_f25 = fabs(var_f26); -// var_f24 = var_f25; -// if (var_f24 > 90.0) { -// var_r29->unk_7C = 180.0f + var_r29->unk_28; -// var_r29->unk_14 = 0; -// } -// else { -// var_r29->unk_7C = var_r29->unk_28; -// var_r29->unk_14 = 1; -// } -// var_r29->unk_24 = 10.0f; -// var_r29->unk_88 = 53.083336f; -// if (lbl_1_bss_DAA[var_r28] == 0) { -// temp_r6 = lbl_1_bss_DA8; -// lbl_1_bss_DA8 = temp_r6 - 1; -// lbl_1_bss_DAA[var_r28] = temp_r6; -// } -// } -// var_r28++; -// goto loop_72; -// } -// } -// omSetTra(var_r30, var_r31->unk_10, var_r31->unk_14, var_r31->unk_18); -// omSetRot(var_r30, var_r31->unk_1C, var_r31->unk_20, var_r31->unk_24); -// } - -// void fn_1_5D4C(void *arg0) -// { -// s16 sp8; -// float var_f26; -// float var_f27; -// float var_f28; -// float var_f29; -// float var_f30; -// float var_f31; -// s32 var_r29; -// u8 temp_r0; -// void *var_r30; -// void *var_r31; - -// var_r30 = arg0; -// sp8 = 0; -// temp_r0 = var_r30->unk_60; -// switch (temp_r0) { -// case 0: -// var_f27 = 360.0f / var_r30->unk_02; -// for (var_r31 = var_r30->unk_3C; var_r29 = 0; var_r31 < var_r30->unk_02; var_r29++; var_r31 += 0x98) { -// var_f26 = 0.8f + (0.1f * (2.0f * (0.000030517578f * (fn_1_7DB4() - 0x8000)))); -// var_r31->unk_6C = sind((var_f27 * var_r29)) * var_f26; -// var_r31->unk_70 = 0.0f; -// var_f26 = 0.8f + (0.1f * (2.0f * (0.000030517578f * (fn_1_7DB4() - 0x8000)))); -// var_r31->unk_74 = cosd((var_f27 * var_r29)) * var_f26; -// var_r31->unk_00 = 40.0f * var_r31->unk_6C; -// var_r31->unk_04 = 6.0f; -// var_r31->unk_08 = 40.0f * var_r31->unk_74; -// var_f29 = 0.01f * (100.0f * (0.000015258789f * fn_1_7DB4())); -// var_r31->unk_54 = 80.0f + (60.0f * var_f29); -// var_r31->unk_55 = 64.0f + (60.0f * var_f29); -// var_r31->unk_56 = 56.0f + (60.0f * var_f29); -// } -// var_r30->unk_7C = 0x30; -// var_r30->unk_60 = var_r30->unk_60 + 1; - -// case 1: -// var_r30->unk_7C = var_r30->unk_7C - 1; -// var_f31 = (48.0f - var_r30->unk_7C) / 48.0f; -// var_f28 = var_r30->unk_7C / 48.0f; -// for (var_r31 = var_r30->unk_3C; var_r29 = 0; var_r31 < var_r30->unk_02; var_r29++; var_r31 += 0x98) { -// var_r31->unk_00 = var_r31->unk_00 + (12.5f * var_f28 * var_r31->unk_6C); -// var_r31->unk_08 = var_r31->unk_08 + (12.5f * var_f28 * var_r31->unk_74); -// var_f30 = 2.4f + (6.0f * var_f31); -// var_r31->unk_18 = var_f30; -// var_r31->unk_1C = var_f30; -// var_r31->unk_20 = var_f30; -// var_r31->unk_57 = 96.0f * (1.0f - (var_f31 * var_f31)); -// } -// if (var_r30->unk_7C == 0) { -// var_r30->unk_60 = var_r30->unk_60 + 1; -// return; -// } -// return; -// case 2: -// fn_1_107BC(var_r30->unk_00); -// break; -// } -// } - -void fn_1_62BC(void *arg0) +void fn_1_4F50(omObjData *object) { - // s16 sp8; + Mtx sp24; + Vec sp18; + float sp8[4]; + float var_f31; + float var_f30; + float var_f29; + float var_f28; + float var_f27; + float var_f25; + s32 var_r26; + M438MainWork3 *var_r27; + s32 var_r28; + M438MainWork *var_r29; + M438MainWork3 *var_r31; - // void *var_r31; - // void *var_r30; - - // var_r30 = arg0; - // sp8 = 0; - // switch (var_r30->unk_60) { - // case 0: - // var_r31 = var_r30->unk_3C; - // var_r31->unk_70 = 5.0f; - // var_r31->unk_6C *= -2.0f; - // var_r31->unk_74 *= -2.0f; - // var_r30->unk_60++; - - // case 1: - // var_r31 = var_r30->unk_3C; - // var_r31->unk_00 += var_r31->unk_6C; - // var_r31->unk_04 += var_r31->unk_70; - // var_r31->unk_08 += var_r31->unk_74; - // return; - // case 2: - // fn_1_107BC(var_r30->unk_00); - // return; - // } + var_r31 = object->data; + switch (lbl_1_bss_DBA) { + case 7: + switch (var_r31->unk_00) { + case 0: + var_r31->unk_34 = var_r31->unk_10; + Hu3DMotionShiftSet(object->model[0], object->motion[3], 0.0f, 8.0f, 0); + var_r31->unk_00++; + case 1: + var_r31->unk_34 = var_r31->unk_10; + + for (var_r28 = 0, var_r26 = 0; var_r28 < 4; var_r28++) { + var_r29 = lbl_1_bss_DC4[var_r28]->data; + if ((var_r29->unk_07 != 0) && ((var_r29->unk_07 & 2) == 0)) { + VECSubtract(&var_r29->unk_6C, &var_r31->unk_10, &sp18); + sp8[var_r26++] = atan2d(sp18.x, sp18.z); + } + } + var_r31->unk_1C.y += 18.0f + object->work[1]; + if (var_r31->unk_1C.y > 180.0f) { + var_r31->unk_1C.y -= 360.0f; + } + if (var_r31->unk_1C.y <= -180.0f) { + var_r31->unk_1C.y += 360.0f; + } + + for (var_r28 = 0; var_r28 < var_r26; var_r28++) { + var_f31 = fn_1_E5A4(sp8[var_r28], object->rot.y); + if (var_f31 < 0.0f) { + var_f27 = -var_f31; + } else { + var_f27 = var_f31; + } + if (var_f27 > (20.0f + object->work[1])) continue; + object->work[0]--; + if (object->work[0] != 0 && ((fn_1_7DB4() & 0xF) != 0)) continue; + var_r31->unk_04.y = sp8[var_r28]; + var_r31->unk_1C.y = sp8[var_r28]; + var_r31->unk_28.y = 16.333334f; + var_r31->unk_04.z = 6.0 + (0.5 * object->work[1]); + var_r31->unk_34 = var_r31->unk_10; + var_r31->unk_40.x = 20.0f; + var_r31->unk_40.y = 0.0f; + var_r31->unk_02 = 30; + Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000002); + var_r31->unk_00++; + break; + } + break; + case 2: + var_r31->unk_40.y += 10.0f; + if (var_r31->unk_40.y > 90.0f) { + var_r31->unk_40.y = 0.0f; + } + var_f29 = cosd(var_r31->unk_40.y); + var_r31->unk_1C.x = var_r31->unk_40.x * var_f29; + var_r31->unk_10.x = var_r31->unk_34.x + ((50.0f * var_f29) * sind(var_r31->unk_1C.y)); + var_r31->unk_10.z = var_r31->unk_34.z + ((50.0f * var_f29) * cosd(var_r31->unk_1C.y)); + if (--var_r31->unk_02 == 0) { + HuAudFXEmiterPlay(0x700, &var_r31->unk_10); + Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_PAUSE); + Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP); + var_r31->unk_1C.x = 0.0f; + var_r31->unk_00++; + } + break; + case 3: + var_r31->unk_04.z += 0.5; + var_r31->unk_28.y += -3.0625f; + var_f28 = var_r31->unk_04.z + (0.8f * var_r31->unk_28.y); + var_r31->unk_28.x = var_f28 * sind(var_r31->unk_04.y); + var_r31->unk_28.z = var_f28 * cosd(var_r31->unk_04.y); + var_r31->unk_10.x += var_r31->unk_28.x; + var_r31->unk_10.y += var_r31->unk_28.y; + var_r31->unk_10.z += var_r31->unk_28.z; + var_r31->unk_34 = var_r31->unk_10; + if (var_r31->unk_10.y < 0.0f) { + var_r31->unk_10.y = 0.0f; + var_r31->unk_28.y = 16.333334f; + } + sp18 = var_r31->unk_10; + sp18.y = 0.0f; + var_f30 = VECMag(&sp18); + if (var_f30 <= 700.0f) break; + var_r31->unk_02 = 1; + if (fn_1_DA64(atan2d(sp18.x, sp18.z)) != 0) { + var_r31->unk_02 = 0x78; + for (var_r28 = 0; var_r28 < 4; var_r28++) { + var_r29 = lbl_1_bss_DC4[var_r28]->data; + if ((var_r29->unk_07 != 0) && ((var_r29->unk_07 & 2) == 0)) { + omVibrate(var_r28, 0xC, 4, 2); + } + } + fn_1_28E4(0, 0x3C, 25.0f, 0.95f, 90.0f); + HuAudFXEmiterPlay(0x6FC, &var_r31->unk_10); + HuAudFXPlay(0x6FE); + } + fn_1_9634(&sp18); + var_r31->unk_10.x = 700.0f * sp18.x; + var_r31->unk_10.z = 700.0f * sp18.z; + var_r31->unk_40 = var_r31->unk_1C; + var_r31->unk_00++; + break; + case 4: + var_r31->unk_28.y += -3.0625f; + var_r31->unk_10.y += var_r31->unk_28.y; + if (var_r31->unk_10.y > 0.0f) break; + var_r31->unk_10.y = 0.0f; + var_r31->unk_34 = var_r31->unk_10; + Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP); + Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_REV); + var_r31->unk_40.y += 8.0f; + var_r31->unk_40.x = 10.0 * sind(var_r31->unk_40.y); + var_r31->unk_40.z = 10.0 * cosd(var_r31->unk_40.y); + mtxRot(sp24, 0.0f, 360.0f - var_r31->unk_04.y, var_r31->unk_40.z); + mtxRotCat(sp24, var_r31->unk_40.x, 0.0f, 0.0f); + fn_1_8164(sp24, &var_r31->unk_1C); + if (--var_r31->unk_02 == 0) { + var_r31->unk_1C.x = var_r31->unk_1C.z = 0.0f; + var_r31->unk_1C.y = var_r31->unk_04.y; + object->work[0] = 0.5f * (lbl_1_bss_DB4 / 60.0f); + object->work[1]++; + var_r31->unk_00 = 0; + } + break; + } + break; + case 8: + var_r31->unk_1C.x = var_r31->unk_1C.z = 0.0f; + Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP); + Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_REV); + break; + case 9: + var_r31->unk_1C.y = fn_1_7EDC(var_r31->unk_1C.y, 0.0f, 0.9f); + break; + case 10: + if (var_r31->unk_04s == 0) { + Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_PAUSE | HU3D_MOTATTR_REV); + Hu3DMotionSet(object->model[0], object->motion[1]); + Hu3DMotionSpeedSet(object->model[0], 1.0f); + Hu3DModelAttrSet(object->model[0], HU3D_MOTATTR_LOOP); + var_r31->unk_04s = 1; + } + break; + } + if (lbl_1_bss_DBA == 7) { + for (var_r28 = 0, var_r26 = 0; var_r28 < 4; var_r28++) { + var_r29 = lbl_1_bss_DC4[var_r28]->data; + VECSubtract(&var_r29->unk_6C, &var_r31->unk_10, &sp18); + var_f30 = VECMag(&sp18); + if (var_f30 >= 200.0f || var_r29->unk_20 == 7) continue; + omVibrate(var_r29->unk_00, 0xC, 4, 2); + var_r29->unk_07 |= 2; + var_r29->unk_0D = 0; + var_r29->unk_20 = 7; + var_r29->unk_28 = atan2d(sp18.x, sp18.z); + if (var_r29->unk_28 >= 360.0f) { + var_r29->unk_28 -= 360.0f; + } + if (fabs(fn_1_E5A4(var_r29->unk_28, var_r29->unk_7C)) > 90.0) { + var_r29->unk_7C = 180.0f + var_r29->unk_28; + var_r29->unk_14 = 0; + } else { + var_r29->unk_7C = var_r29->unk_28; + var_r29->unk_14 = 1; + } + var_r29->unk_24 = 10.0f; + var_r29->unk_88 = 53.083336f; + if (lbl_1_bss_DAA[var_r28] == 0) { + lbl_1_bss_DAA[var_r28] = lbl_1_bss_DA8--; + } + } + } + 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); } -// void fn_1_63B0(void *arg0) -// { -// float sp10; -// float spC; -// float sp8; -// float temp_f0; -// float temp_f0_2; -// float temp_f0_3; -// float var_f28; -// float var_f29; -// float var_f30; -// float var_f31; -// double var_f27; -// s16 temp_r0_2; -// s32 var_r29; -// u8 temp_r0; -// void *var_r30; -// void *var_r31; +void fn_1_5D4C(M438UnkStruct2 *arg0) { + s16 sp8; + f32 temp_f31; + f32 temp_f30; + f32 temp_f29; + f32 temp_f28; + f32 temp_f27; + s32 var_r29; + M438UnkStruct* var_r31; -// var_r30 = arg0; -// for (var_r31 = var_r30->unk_3C; var_r29 = 0; var_r31 < var_r30->unk_02; var_r29++; var_r31 += 0x98) { -// temp_r0 = var_r31->unk_5C; -// switch (temp_r0) { -// case 0: -// if ((atan2d(var_r30->unk_80, var_r30->unk_84)) < 0.0) { -// var_f27 = -(atan2d(var_r30->unk_80, var_r30->unk_84)); -// } -// else { -// var_f27 = atan2d(var_r30->unk_80, var_r30->unk_84); -// } -// var_f29 = var_f27; -// if (var_f29 > 90.0f) { -// var_f29 = 180.0f - var_f29; -// } -// var_f28 = 40.0f * (0.1f + ((0.9f * var_f29) / 90.0f)); -// var_f31 = (0.5f * var_f28) + ((var_r30->unk_88 - var_f28) * (0.000015258789f * fn_1_7DB4())); -// temp_f0 = var_f31 * var_r30->unk_80; -// sp8 = temp_f0; -// temp_f0_2 = var_f31 * var_r30->unk_84; -// sp10 = temp_f0_2; -// var_r31->unk_00 = temp_f0; -// var_r31->unk_04 = 0.0f; -// var_r31->unk_08 = temp_f0_2; -// var_f31 = 0.0f; -// spC = 0.0f; -// loop_14: -// if (var_f31 < (var_r30->unk_8C - 40.0f)) { -// temp_f0_3 = spC + 0.8f; -// spC = temp_f0_3; -// var_f31 += temp_f0_3; -// goto loop_14; -// } -// var_r31->unk_6C = 0.0f; -// var_r31->unk_70 = spC + (1.5f * (0.000015258789f * fn_1_7DB4())); -// var_r31->unk_74 = 0.0f; -// if ((fn_1_7DB4() & 7) != 0) { -// var_r31->unk_33 = 1; -// var_r31->unk_54 = 0x40; -// var_r31->unk_55 = 0x10; -// var_r31->unk_56 = 4; -// var_r31->unk_57 = 0xFF; -// var_f30 = 3.75f + (1.75f * (0.000015258789f * fn_1_7DB4())); -// var_r31->unk_60 = var_f30 * (0.1f + ((0.9f * var_f29) / 90.0f)); -// var_r31->unk_68 = var_f30; -// var_r31->unk_64 = var_f30; -// } -// else { -// var_r31->unk_33 = 0; -// var_r31->unk_54 = 0; -// var_r31->unk_55 = 0; -// var_r31->unk_56 = 0; -// var_r31->unk_57 = 0xFF; -// var_f30 = 0.25f + (0.25f * (0.000015258789f * fn_1_7DB4())); -// var_r31->unk_64 = 1.5f * var_f30; -// var_r31->unk_68 = var_f30; -// var_r31->unk_60 = var_f30; -// } -// var_r31->unk_58->unk_24 = 0; -// var_r31->unk_78 = (60.0f * (0.000015258789f * fn_1_7DB4())) + 1; -// var_r31->unk_5C = var_r31->unk_5C + 1; + sp8 = 0; + switch (arg0->unk_60) { /* irregular */ + case 0: + temp_f27 = 360.0f / arg0->unk_02; + + var_r31 = &arg0->unk_3C[0]; + for (var_r29 = 0; var_r29 < arg0->unk_02; var_r29++, var_r31++) { + var_r31->unk_6C.x = sind(temp_f27 * var_r29) * (0.8f + (0.1f * (2.0f * ((1.0f / 32768.0f) * (fn_1_7DB4() - 0x8000))))); + var_r31->unk_6C.y = 0.0f; + var_r31->unk_6C.z = cosd(temp_f27 * var_r29) * (0.8f + (0.1f * (2.0f * ((1.0f / 32768.0f) * (fn_1_7DB4() - 0x8000))))); + var_r31->unk_00.x = (40.0f * var_r31->unk_6C.x); + var_r31->unk_00.y = 6.0f; + var_r31->unk_00.z = (40.0f * var_r31->unk_6C.z); + temp_f29 = 0.01f * (100.0f * ((1.0f / 65536.0f) * fn_1_7DB4())); + var_r31->unk_54 = (80.0f + 60.0f * temp_f29); + var_r31->unk_55 = (64.0f + 60.0f * temp_f29); + var_r31->unk_56 = (56.0f + 60.0f * temp_f29); + } + arg0->unk_7C = 0x30; + arg0->unk_60++; + case 1: + arg0->unk_7C--; + temp_f31 = (48.0f - arg0->unk_7C) / 48.0f; + temp_f28 = arg0->unk_7C / 48.0f; + + var_r31 = arg0->unk_3C; + for (var_r29 = 0; var_r29 < arg0->unk_02; var_r29++, var_r31++) { + var_r31->unk_00.x += 12.5f * temp_f28 * var_r31->unk_6C.x; + var_r31->unk_00.z += 12.5f * temp_f28 * var_r31->unk_6C.z; + temp_f30 = 2.4f + (6.0f * temp_f31); + var_r31->unk_18.x = temp_f30; + var_r31->unk_18.y = temp_f30; + var_r31->unk_18.z = temp_f30; + var_r31->unk_57 = (96.0f * (1.0f - (temp_f31 * temp_f31))); + } + if (arg0->unk_7C == 0) { + arg0->unk_60++; + } + break; + case 2: + fn_1_107BC(arg0->unk_00); + return; + } +} -// case 1: -// temp_r0_2 = var_r31->unk_78 - 1; -// var_r31->unk_78 = temp_r0_2; -// if (temp_r0_2 == 0) { -// var_r31->unk_58->unk_24 = 0x11; -// var_r31->unk_58->unk_28 = 0.5f; -// var_r31->unk_58->unk_2C = 0.0f; -// var_r31->unk_58->unk_00 = 0; -// var_r31->unk_5C = var_r31->unk_5C + 1; -// } -// break; -// case 2: -// var_r31->unk_00 = var_r31->unk_00 + var_r31->unk_6C; -// var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_70; -// var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_74; -// if (var_r31->unk_04 < 0.0f) { -// var_r31->unk_04 = 0.0f; -// } -// var_r31->unk_60 = var_r31->unk_60 * 0.95f; -// var_r31->unk_64 = var_r31->unk_64 * 0.95f; -// var_r31->unk_68 = var_r31->unk_68 * 0.95f; -// var_r31->unk_70 = var_r31->unk_70 - 0.8f; -// if ((var_r31->unk_58->unk_24 & 8) != 0) { -// var_r31->unk_5C = 0; -// } -// break; -// } -// var_r31->unk_18 = var_r31->unk_60 * var_r30->unk_90; -// var_r31->unk_1C = var_r31->unk_64 * var_r30->unk_90; -// var_r31->unk_20 = var_r31->unk_68 * var_r30->unk_90; -// } -// } +void fn_1_62BC(M438UnkStruct2 *arg0) +{ + s16 sp8; -// void fn_1_6A3C(void *arg0) -// { -// float sp10; -// float spC; -// float sp8; -// float temp_f0; -// float temp_f0_2; -// float temp_f0_3; -// float temp_f0_4; -// float var_f29; -// float var_f30; -// float var_f31; -// s16 temp_r0_2; -// s16 var_r29; -// s32 var_r27; -// s32 var_r28; -// u8 temp_r0; -// void *var_r30; -// void *var_r31; + M438UnkStruct *var_r31; + + sp8 = 0; + switch (arg0->unk_60) { + case 0: + var_r31 = arg0->unk_3C; + var_r31->unk_6C.y = 5.0f; + var_r31->unk_6C.x *= -2.0f; + var_r31->unk_6C.z *= -2.0f; + arg0->unk_60++; -// var_r30 = arg0; -// var_r31 = var_r30->unk_3C; -// var_r28 = 0; -// var_r27 = 0; -// loop_35: -// if (var_r27 < var_r30->unk_02) { -// if ((var_r30->unk_7C != 0) && (var_r31->unk_7A == 0)) { -// var_r31->unk_5C = 0; -// } -// temp_r0 = var_r31->unk_5C; -// switch (temp_r0) { -// case 0: -// if (var_r30->unk_7C != 0) { -// var_f30 = (180.0f * (0.000015258789f * fn_1_7DB4())) - 90.0f; -// var_f29 = 125.0f; -// temp_f0 = sind(var_f30); -// sp8 = temp_f0; -// temp_f0_2 = cosd(var_f30); -// sp10 = temp_f0_2; -// var_r31->unk_00 = 125.0f * temp_f0; -// var_r31->unk_04 = 0.0f; -// var_r31->unk_08 = 125.0f * temp_f0_2; -// spC = 25.0f; -// var_r31->unk_6C = 100.0f * (0.1f * temp_f0); -// var_r31->unk_70 = 25.0f + (2.5f * (0.000015258789f * fn_1_7DB4())); -// var_r31->unk_74 = 100.0f * (0.1f * temp_f0_2); -// var_r31->unk_78 = (24.0f * (0.000015258789f * fn_1_7DB4())) + 1; -// var_r31->unk_7A = 1; -// } -// else { -// var_f30 = (180.0f * (0.000015258789f * fn_1_7DB4())) - 90.0f; -// var_f29 = 125.0f * (0.000015258789f * fn_1_7DB4()); -// temp_f0_3 = sind(var_f30); -// sp8 = temp_f0_3; -// temp_f0_4 = cosd(var_f30); -// sp10 = temp_f0_4; -// var_r31->unk_00 = var_f29 * temp_f0_3; -// var_r31->unk_04 = 0.0f; -// var_r31->unk_08 = var_f29 * temp_f0_4; -// spC = 5.0f; -// var_r31->unk_6C = 100.0 * (0.015 * temp_f0_3); -// var_r31->unk_70 = 5.0f + (0.000015258789f * fn_1_7DB4()); -// var_r31->unk_74 = 100.0f * (0.015f * temp_f0_4); -// var_r31->unk_78 = (60.0f * (0.000015258789f * fn_1_7DB4())) + 1; -// var_r31->unk_7A = 0; -// } -// var_r31->unk_38 = var_r31->unk_38 & 0xFFFFFFFB; -// if ((fn_1_7DB4() & 0xF) != 0) { -// var_r31->unk_33 = 1; -// var_r31->unk_54 = 0x40; -// var_r31->unk_55 = 0x10; -// var_r31->unk_56 = 4; -// var_r31->unk_57 = 0xFF; -// var_f31 = 1.8f + (0.000015258789f * fn_1_7DB4()); -// var_r31->unk_18 = var_f31; -// var_r31->unk_1C = var_f31; -// var_r31->unk_20 = var_f31; -// goto block_19; -// } -// if (var_r30->unk_7C != 0) { -// var_r31->unk_33 = 0; -// var_r31->unk_54 = 0; -// var_r31->unk_55 = 0; -// var_r31->unk_56 = 0; -// var_r31->unk_57 = 0xFF; -// var_f31 = 0.25f + (0.25f * (0.000015258789f * fn_1_7DB4())); -// var_r31->unk_18 = var_f31; -// var_r31->unk_1C = 1.5f * var_f31; -// var_r31->unk_20 = var_f31; -// block_19: -// var_r31->unk_58->unk_24 = 0; -// var_r31->unk_5C = var_r31->unk_5C + 1; -// } -// else { -// var_r29 = fn_1_10258(8, 1); -// fn_1_11018(var_r29, 0, 0x45000A); -// *(lbl_1_bss_DE4.unk_40 + ((var_r29 * 0xBC) + 0x30)) = fn_1_7300; -// fn_1_11890(var_r29, var_r30->unk_0C + var_r31->unk_00, var_r30->unk_10 + var_r31->unk_04, var_r30->unk_14 + var_r31->unk_08); -// fn_1_12100(var_r29, 4); -// fn_1_124CC(var_r29, 1); -// var_r31->unk_38 = var_r31->unk_38 | 4; -// } -// break; -// case 1: -// if (var_r31->unk_7A != 0) { -// var_r31->unk_70 = var_r31->unk_70 - 0.5f; -// } -// temp_r0_2 = var_r31->unk_78 - 1; -// var_r31->unk_78 = temp_r0_2; -// if (temp_r0_2 == 0) { -// var_r31->unk_58->unk_24 = 0x11; -// if (var_r31->unk_7A != 0) { -// var_r31->unk_58->unk_28 = 0.5f; -// } -// else { -// var_r31->unk_58->unk_28 = 0.5f; -// } -// var_r31->unk_58->unk_2C = 0.0f; -// var_r31->unk_58->unk_00 = 0; -// var_r31->unk_5C = var_r31->unk_5C + 1; -// } -// break; -// case 2: -// var_r31->unk_00 = var_r31->unk_00 + var_r31->unk_6C; -// var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_70; -// var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_74; -// if (var_r31->unk_04 < 0.0f) { -// var_r31->unk_04 = 0.0f; -// } -// var_r31->unk_18 = var_r31->unk_18 * 0.95f; -// var_r31->unk_1C = var_r31->unk_1C * 0.95f; -// var_r31->unk_20 = var_r31->unk_20 * 0.95f; -// var_r31->unk_70 = var_r31->unk_70 - 1.5f; -// if ((var_r31->unk_58->unk_24 & 8) != 0) { -// if (var_r31->unk_7A != 0) { -// var_r31->unk_5C = 3; -// } -// else { -// var_r31->unk_5C = 0; -// } -// } -// break; -// case 3: -// var_r28++; -// break; -// } -// var_r27++; -// var_r31 += 0x98; -// goto loop_35; -// } -// if (var_r28 >= var_r30->unk_02) { -// fn_1_107BC(var_r30->unk_00); -// } -// } + case 1: + var_r31 = arg0->unk_3C; + var_r31->unk_00.x += var_r31->unk_6C.x; + var_r31->unk_00.y += var_r31->unk_6C.y; + var_r31->unk_00.z += var_r31->unk_6C.z; + return; + case 2: + fn_1_107BC(arg0->unk_00); + return; + } +} -// void fn_1_7300(void *arg0) -// { -// float sp10; -// float spC; -// float sp8; -// float temp_f0; -// float temp_f0_2; -// float temp_f0_3; -// float var_f29; -// float var_f30; -// float var_f31; -// s16 temp_r0_2; -// s32 var_r28; -// s32 var_r29; -// u8 temp_r0; -// u8 temp_r0_3; -// void *var_r30; -// void *var_r31; +void fn_1_63B0(M438UnkStruct2* arg0) { + Vec sp8; + M438UnkStruct* var_r31; + f32 var_f31; + f32 temp_f30; + f32 var_f29; + f32 temp_f28; + s32 var_r29; -// var_r30 = arg0; -// var_r31 = var_r30->unk_3C; -// temp_r0 = var_r30->unk_60; -// switch (temp_r0) { -// case 0: -// var_f31 = 0.01f; -// var_r30->unk_2C = 0.01f; -// var_r30->unk_28 = 0.01f; -// var_r30->unk_24 = 0.01f; -// var_r30->unk_7C = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M438, 0x0B)); -// var_r30->unk_7E = (30.0f * (0.000015258789f * fn_1_7DB4())) + 0x1E; -// var_r29 = 0; -// loop_6: -// if (var_r29 < var_r30->unk_02) { -// var_r31->unk_38 = var_r31->unk_38 | 4; -// var_r29++; -// var_r31 += 0x98; -// goto loop_6; -// } -// var_r30->unk_60 = var_r30->unk_60 + 1; + var_r31 = arg0->unk_3C; + for (var_r29 = 0; var_r29 < arg0->unk_02; var_r29++, var_r31++) { + switch (var_r31->unk_5C) { + case 0: + var_f29 = atan2d(arg0->unk_80, arg0->unk_84) < 0 + ? -atan2d(arg0->unk_80, arg0->unk_84) + : atan2d(arg0->unk_80, arg0->unk_84); + + if (var_f29 > 90.0f) { + var_f29 = 180.0f - var_f29; + } + temp_f28 = 40.0f * (0.1f + ((0.9f * var_f29) / 90.0f)); + var_f31 = (0.5f * temp_f28) + ((arg0->unk_88 - temp_f28) * ((1.0f / 65536.0f) * fn_1_7DB4())); + sp8.x = var_f31 * arg0->unk_80; + sp8.z = var_f31 * arg0->unk_84; + var_r31->unk_00.x = sp8.x; + var_r31->unk_00.y = 0.0f; + var_r31->unk_00.z = sp8.z; + + for (var_f31 = 0.0f, sp8.y = 0.0f; var_f31 < (arg0->unk_8C - 40.0f); var_f31 += sp8.y) { + sp8.y += 0.8f; + } + var_r31->unk_6C.x = 0.0f; + var_r31->unk_6C.y = sp8.y + (1.5f * ((1.0f / 65536.0f) * fn_1_7DB4())); + var_r31->unk_6C.z = 0.0f; + if ((fn_1_7DB4() & 7) != 0) { + var_r31->unk_33 = 1; + var_r31->unk_54 = 0x40; + var_r31->unk_55 = 0x10; + var_r31->unk_56 = 4; + var_r31->unk_57 = 0xFF; + temp_f30 = 3.75f + (1.75f * ((1.0f / 65536.0f) * fn_1_7DB4())); + var_r31->unk_60.x = (temp_f30 * (0.1f + ((0.9f * var_f29) / 90.0f))); + var_r31->unk_60.y = var_r31->unk_60.z = temp_f30; + } else { + var_r31->unk_33 = 0; + var_r31->unk_54 = 0; + var_r31->unk_55 = 0; + var_r31->unk_56 = 0; + var_r31->unk_57 = 0xFF; + temp_f30 = 0.25f + (0.25f * ((1.0f / 65536.0f) * fn_1_7DB4())); + var_r31->unk_60.y = (1.5f * temp_f30); + var_r31->unk_60.x = var_r31->unk_60.z = temp_f30; + } + var_r31->unk_58->unk_24 = 0; + var_r31->unk_78 = (s32)((60.0f * ((1.0f / 65536.0f) * fn_1_7DB4()))) + 1; + var_r31->unk_5C++; + case 1: + if (--var_r31->unk_78 == 0) { + var_r31->unk_58->unk_24 = 0x11U; + var_r31->unk_58->unk_28 = 0.5f; + var_r31->unk_58->unk_2C = 0.0f; + var_r31->unk_58->unk_00 = 0; + var_r31->unk_5C++; + } + break; + case 2: + var_r31->unk_00.x += var_r31->unk_6C.x; + var_r31->unk_00.y += var_r31->unk_6C.y; + var_r31->unk_00.z += var_r31->unk_6C.z; + if (var_r31->unk_00.y < 0.0f) { + var_r31->unk_00.y = 0.0f; + } + var_r31->unk_60.x *= 0.95f; + var_r31->unk_60.y *= 0.95f; + var_r31->unk_60.z *= 0.95f; + var_r31->unk_6C.y -= 0.8f; + if ((var_r31->unk_58->unk_24 & 8) != 0) { + var_r31->unk_5C = 0; + } + break; + } + var_r31->unk_18.x = var_r31->unk_60.x * arg0->unk_90; + var_r31->unk_18.y = var_r31->unk_60.y * arg0->unk_90; + var_r31->unk_18.z = var_r31->unk_60.z * arg0->unk_90; + } +} -// case 1: -// var_r30->unk_2C = var_r30->unk_2C + 0.008f; -// temp_f0 = var_r30->unk_2C; -// var_r30->unk_28 = temp_f0; -// var_r30->unk_24 = temp_f0; -// Hu3DModelPosSetV(var_r30->unk_7C, var_r30 + 0xC); -// Hu3DModelScaleSetV(var_r30->unk_7C, var_r30 + 0x24); -// temp_r0_2 = var_r30->unk_7E - 1; -// var_r30->unk_7E = temp_r0_2; -// if (temp_r0_2 == 0) { -// Hu3DModelKill(var_r30->unk_7C); -// var_r30->unk_7C = 0; -// var_r29 = 0; -// loop_11: -// if (var_r29 < var_r30->unk_02) { -// var_r31->unk_5C = 1; -// var_r29++; -// var_r31 += 0x98; -// goto loop_11; -// } -// var_r30->unk_80 = var_r30->unk_24; -// var_r30->unk_2C = 1.0f; -// var_r30->unk_28 = 1.0f; -// var_r30->unk_24 = 1.0f; -// var_r30->unk_60 = var_r30->unk_60 + 1; -// } -// break; -// } -// var_r28 = 0; -// for (var_r31 = var_r30->unk_3C; var_r29 = 0; var_r31 < var_r30->unk_02; var_r29++; var_r31 += 0x98) { -// temp_r0_3 = var_r31->unk_5C; -// switch (temp_r0_3) { -// case 1: -// var_r31->unk_38 = var_r31->unk_38 & 0xFFFFFFFB; -// var_r31->unk_33 = 1; -// var_r31->unk_54 = 0x60; -// var_r31->unk_55 = 0x20; -// var_r31->unk_56 = 0x10; -// var_r31->unk_57 = 0xFF; -// var_f31 = 0.4f + (0.15f * (0.000015258789f * fn_1_7DB4())); -// var_r31->unk_18 = var_f31; -// var_r31->unk_1C = var_f31; -// var_r31->unk_20 = var_f31; -// var_f29 = 360.0f * (0.000015258789f * fn_1_7DB4()); -// var_f30 = 50.0f * var_r30->unk_80; -// temp_f0_2 = sind(var_f29); -// sp8 = temp_f0_2; -// temp_f0_3 = cosd(var_f29); -// sp10 = temp_f0_3; -// var_r31->unk_00 = var_f30 * temp_f0_2; -// var_r31->unk_04 = var_f30; -// var_r31->unk_08 = var_f30 * temp_f0_3; -// spC = 6.0f; -// var_r31->unk_6C = 100.0f * (0.015f * temp_f0_2); -// var_r31->unk_70 = 6.0f + (1.5f * (0.000015258789f * fn_1_7DB4())); -// var_r31->unk_74 = 100.0f * (0.015f * temp_f0_3); -// var_r31->unk_58->unk_24 = 0x11; -// var_r31->unk_58->unk_28 = 0.75f; -// var_r31->unk_5C = var_r31->unk_5C + 1; -// break; -// case 2: -// var_r31->unk_00 = var_r31->unk_00 + var_r31->unk_6C; -// var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_70; -// var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_74; -// var_r31->unk_70 = var_r31->unk_70 - 0.75f; -// if ((var_r31->unk_58->unk_24 & 8) != 0) { -// var_r31->unk_5C = var_r31->unk_5C + 1; -// } -// break; -// case 3: -// var_r28++; -// break; -// } -// } -// if (var_r28 >= var_r30->unk_02) { -// fn_1_107BC(var_r30->unk_00); -// } -// if (lbl_1_bss_DBA == 2) { -// if (var_r30->unk_7C != 0) { -// Hu3DModelKill(var_r30->unk_7C); -// } -// fn_1_107BC(var_r30->unk_00); -// } -// } +void fn_1_6A3C(M438UnkStruct2* arg0) { + Vec sp8; + M438UnkStruct* var_r31; + f32 temp_f31; + f32 temp_f30; + f32 temp_f29; + s32 var_r29; + s32 var_r28; + s32 var_r27; + + var_r31 = arg0->unk_3C; + var_r28 = 0; + + for (var_r27 = 0; var_r27 < arg0->unk_02; var_r27++, var_r31++) { + if ((arg0->unk_7C != 0) && (var_r31->unk_7A == 0)) { + var_r31->unk_5C = 0; + } + switch (var_r31->unk_5C) { + case 0: + if (arg0->unk_7C != 0) { + temp_f30 = (180.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) - 90.0f; + temp_f29 = 125.0f; + sp8.x = sind(temp_f30); + sp8.z = cosd(temp_f30); + var_r31->unk_00.x = temp_f29 * sp8.x; + var_r31->unk_00.y = 0.0f; + var_r31->unk_00.z = temp_f29 * sp8.z; + sp8.y = 25.0f; + var_r31->unk_6C.x = 100.0f * (0.1f * sp8.x); + var_r31->unk_6C.y = sp8.y + (2.5f * ((1.0f / 65536.0f) * fn_1_7DB4())); + var_r31->unk_6C.z = 100.0f * (0.1f * sp8.z); + var_r31->unk_78 = (s32)(24.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) + 1; + var_r31->unk_7A = 1; + } else { + temp_f30 = (180.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) - 90.0f; + temp_f29 = 125.0f * ((1.0f / 65536.0f) * fn_1_7DB4()); + sp8.x = sind(temp_f30); + sp8.z = cosd(temp_f30); + var_r31->unk_00.x = temp_f29 * sp8.x; + var_r31->unk_00.y = 0.0f; + var_r31->unk_00.z = temp_f29 * sp8.z; + sp8.y = 5.0f; + var_r31->unk_6C.x = (100.0 * (0.015 * sp8.x)); + var_r31->unk_6C.y = sp8.y + ((1.0f / 65536.0f) * fn_1_7DB4()); + var_r31->unk_6C.z = 100.0f * (0.015f * sp8.z); + var_r31->unk_78 = (s32)(60.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) + 1; + var_r31->unk_7A = 0; + } + var_r31->unk_38 &= ~4; + if ((fn_1_7DB4() & 0xF) != 0) { + var_r31->unk_33 = 1; + var_r31->unk_54 = 0x40; + var_r31->unk_55 = 0x10; + var_r31->unk_56 = 4; + var_r31->unk_57 = 0xFF; + temp_f31 = 1.8f + ((1.0f / 65536.0f) * fn_1_7DB4()); + var_r31->unk_18.x = temp_f31; + var_r31->unk_18.y = temp_f31; + var_r31->unk_18.z = temp_f31; + } else if (arg0->unk_7C != 0) { + var_r31->unk_33 = 0; + var_r31->unk_54 = 0; + var_r31->unk_55 = 0; + var_r31->unk_56 = 0; + var_r31->unk_57 = 0xFF; + temp_f31 = 0.25f + (0.25f * ((1.0f / 65536.0f) * fn_1_7DB4())); + var_r31->unk_18.x = temp_f31; + var_r31->unk_18.y = 1.5f * temp_f31; + var_r31->unk_18.z = temp_f31; + } else { + var_r29 = fn_1_10258(8, 1); + fn_1_11018(var_r29, 0, 0x45000A); + lbl_1_bss_DE4.unk_40[var_r29].unk_30 = (void (*)(M438UnkStruct2*)) fn_1_7300; + fn_1_11890(var_r29, arg0->unk_0C.x + var_r31->unk_00.x, arg0->unk_0C.y + var_r31->unk_00.y, arg0->unk_0C.z + var_r31->unk_00.z); + fn_1_12100(var_r29, 4); + fn_1_124CC(var_r29, 1); + var_r31->unk_38 |= 4; + break; + } + var_r31->unk_58->unk_24 = 0; + var_r31->unk_5C++; + break; + case 1: + if (var_r31->unk_7A != 0) { + var_r31->unk_6C.y -= 0.5f; + } + if (--var_r31->unk_78 == 0) { + var_r31->unk_58->unk_24 = 0x11; + if (var_r31->unk_7A != 0) { + var_r31->unk_58->unk_28 = 0.5f; + } else { + var_r31->unk_58->unk_28 = 0.5f; + } + var_r31->unk_58->unk_2C = 0.0f; + var_r31->unk_58->unk_00 = 0; + var_r31->unk_5C++; + } + break; + case 2: + var_r31->unk_00.x += var_r31->unk_6C.x; + var_r31->unk_00.y += var_r31->unk_6C.y; + var_r31->unk_00.z += var_r31->unk_6C.z; + if (var_r31->unk_00.y < 0.0f) { + var_r31->unk_00.y = 0.0f; + } + var_r31->unk_18.x *= 0.95f; + var_r31->unk_18.y *= 0.95f; + var_r31->unk_18.z *= 0.95f; + var_r31->unk_6C.y -= 1.5f; + if ((var_r31->unk_58->unk_24 & 8) != 0) { + if (var_r31->unk_7A != 0) { + var_r31->unk_5C = 3; + } else { + var_r31->unk_5C = 0; + } + } + break; + case 3: + var_r28++; + break; + } + } + if (var_r28 >= arg0->unk_02) { + fn_1_107BC(arg0->unk_00); + } +} + +void fn_1_7300(M438UnkStruct2* arg0) { + Vec sp8; + M438UnkStruct* var_r31; + f32 temp_f29; + f32 temp_f30; + f32 temp_f31; + s32 var_r28; + s32 var_r29; + + var_r31 = arg0->unk_3C; + + switch (arg0->unk_60) { + case 0: + arg0->unk_24.x = arg0->unk_24.y = arg0->unk_24.z = temp_f31 = 0.01f; + arg0->unk_7C = Hu3DModelCreateFile(0x45000B); + arg0->unk_7E = (s32)(30.0f * ((1.0f / 65536.0f) * fn_1_7DB4())) + 30; + + for (var_r29 = 0; var_r29 < arg0->unk_02; var_r29++, var_r31++) { + var_r31->unk_38 |= 4; + } + arg0->unk_60++; + case 1: + arg0->unk_24.z += 0.008f; + + arg0->unk_24.x = arg0->unk_24.y = arg0->unk_24.z; + Hu3DModelPosSetV(arg0->unk_7C, &arg0->unk_0C); + Hu3DModelScaleSetV(arg0->unk_7C, &arg0->unk_24); + if (--arg0->unk_7E == 0) { + Hu3DModelKill(arg0->unk_7C); + arg0->unk_7C = 0; + + for (var_r29 = 0; var_r29 < arg0->unk_02; var_r29++, var_r31++) { + var_r31->unk_5C = 1; + } + arg0->unk_80 = arg0->unk_24.x; + + + arg0->unk_24.x = arg0->unk_24.y = arg0->unk_24.z = 1.0f; + arg0->unk_60++; + } + break; + } + var_r28 = 0; + var_r31 = arg0->unk_3C; + + for (var_r29 = 0; var_r29 < arg0->unk_02; var_r29++, var_r31++) { + switch (var_r31->unk_5C) { + case 1: + var_r31->unk_38 &= ~4; + var_r31->unk_33 = 1; + var_r31->unk_54 = 0x60; + var_r31->unk_55 = 0x20; + var_r31->unk_56 = 0x10; + var_r31->unk_57 = 0xFF; + temp_f31 = 0.4f + (0.15f * ((1.0f / 65536.0f) * fn_1_7DB4())); + var_r31->unk_18.x = temp_f31; + var_r31->unk_18.y = temp_f31; + var_r31->unk_18.z = temp_f31; + temp_f29 = 360.0f * ((1.0f / 65536.0f) * fn_1_7DB4()); + temp_f30 = 50.0f * arg0->unk_80; + sp8.x = sind(temp_f29); + sp8.z = cosd(temp_f29); + var_r31->unk_00.x = temp_f30 * sp8.x; + var_r31->unk_00.y = temp_f30; + var_r31->unk_00.z = temp_f30 * sp8.z; + sp8.y = 6.0f; + var_r31->unk_6C.x = 100.0f * (0.015f * sp8.x); + var_r31->unk_6C.y = sp8.y + (1.5f * ((1.0f / 65536.0f) * fn_1_7DB4())); + var_r31->unk_6C.z = 100.0f * (0.015f * sp8.z); + var_r31->unk_58->unk_24 = 0x11; + var_r31->unk_58->unk_28 = 0.75f; + var_r31->unk_5C++; + break; + case 2: + var_r31->unk_00.x += var_r31->unk_6C.x; + var_r31->unk_00.y += var_r31->unk_6C.y; + var_r31->unk_00.z += var_r31->unk_6C.z; + var_r31->unk_6C.y -= 0.75f; + if ((var_r31->unk_58->unk_24 & 8) != 0) { + var_r31->unk_5C++; + } + break; + case 3: + var_r28++; + break; + } + } + if (var_r28 >= arg0->unk_02) { + fn_1_107BC(arg0->unk_00); + } + if (lbl_1_bss_DBA == 2) { + if (arg0->unk_7C != 0) { + Hu3DModelKill(arg0->unk_7C); + } + fn_1_107BC(arg0->unk_00); + } +} void fn_1_7858(omObjData *object) { @@ -2555,7 +2437,6 @@ void fn_1_7DD8(s32 arg0, s32 *arg1) float fn_1_7EDC(float arg8, float arg9, float argA) { - float var_f1; float var_f31; if (arg8 > 180.0f) { @@ -2577,14 +2458,13 @@ float fn_1_7EDC(float arg8, float arg9, float argA) else if (var_f31 <= -180.0f) { var_f31 += 360.0f; } - var_f1 = arg9 + (var_f31 * argA); - if (var_f1 > 180.0f) { - return var_f1 - 360.0f; + arg8 = arg9 + (var_f31 * argA); + if (arg8 > 180.0f) { + arg8 -= 360.0f; + } else if (arg8 <= -180.0f) { + arg8 += 360.0f; } - if (var_f1 <= -180.0f) { - var_f1 += 360.0f; - } - return var_f1; + return arg8; } // void fn_1_8044(Mtx arg0, float arg8, float arg9, float argA) From 5d834eb36dcd755972c253b0bbfc88c244189e71 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Tue, 3 Dec 2024 20:59:55 -0500 Subject: [PATCH 5/8] up to 9420 --- include/dolphin/mtx.h | 2 +- src/REL/m438Dll/main.c | 320 ++++++++++++----------------------------- 2 files changed, 91 insertions(+), 231 deletions(-) diff --git a/include/dolphin/mtx.h b/include/dolphin/mtx.h index fd975968..9aba8f15 100644 --- a/include/dolphin/mtx.h +++ b/include/dolphin/mtx.h @@ -31,7 +31,7 @@ typedef struct { } MtxStack, *MtxStackPtr; -#define MTXDegToRad(a) ((a)*0.01745329252f) +#define MTXDegToRad(a) ((a)*0.017453292f) #define MTXRadToDeg(a) ((a)*57.29577951f) #define MTXRowCol(m, r, c) ((m)[(r)][(c)]) diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index 77956add..d3bf4e10 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -12,6 +12,8 @@ #include "REL/m438Dll.h" +#define BOARD_FABS(value) ((value < 0.0f) ? -(value) : (value)) + typedef struct M438MainWork { u8 unk_00; u8 unk_01; @@ -2467,247 +2469,105 @@ float fn_1_7EDC(float arg8, float arg9, float argA) return arg8; } -// void fn_1_8044(Mtx arg0, float arg8, float arg9, float argA) -// { -// Mtx var_r31; -// float var_f29; -// float var_f30; -// float var_f31; +void fn_1_8044(Mtx arg0, f32 arg8, f32 arg9, f32 argA) { + Mtx sp38; + Mtx sp8; + + if (0.0f != argA) { + PSMTXRotRad(arg0, 0x5A, MTXDegToRad(argA)); + } else { + PSMTXIdentity(arg0); + } + if (0.0f != arg8) { + PSMTXRotRad(sp38, 0x58, MTXDegToRad(arg8)); + PSMTXConcat(sp38, arg0, arg0); + } + if (0.0f != arg9) { + PSMTXRotRad(sp8, 0x59, MTXDegToRad(arg9)); + PSMTXConcat(sp8, arg0, arg0); + } +} -// var_r31 = arg0; -// var_f29 = arg8; -// var_f30 = arg9; -// var_f31 = argA; -// if (var_f31 != 0.0f) { -// PSMTXRotRad(var_r31, 0x5A, 0.017453292f * var_f31); -// } -// else { -// PSMTXIdentity(var_r31); -// } -// if (var_f29 != 0.0f) { -// PSMTXRotRad(&sp38[0], 0x58, 0.017453292f * var_f29); -// PSMTXConcat(&sp38[0], var_r31, var_r31); -// } -// if (var_f30 != 0.0f) { -// PSMTXRotRad(&sp8[0], 0x59, 0.017453292f * var_f30); -// PSMTXConcat(&sp8[0], var_r31, var_r31); -// } -// } +void fn_1_8164(Mtx arg0, Vec* arg1) { + f32 temp_f29; + f32 var_f28; -// void fn_1_8164(float *arg0, Vec *arg1) -// { -// float sp8; -// Vec *var_r31; -// float *var_r30; -// float var_f27; -// float var_f28; -// float var_f29; -// double var_f30; -// double var_f31; + arg1->x = atan2d(arg0[1][2], arg0[2][2]); + if (arg1->x < 0.0f) { + arg1->x += 360.0f; + } + arg1->z = atan2d(arg0[0][1], arg0[0][0]); + if (arg1->z < 0.0f) { + arg1->z += 360.0f; + } + temp_f29 = -arg0[0][2]; + var_f28 = sqrtf(BOARD_FABS(1.0 - temp_f29 * temp_f29)); + if ((arg1->x > 90.0f) && (arg1->x < 270.0f) && (arg1->z > 90.0f) && (arg1->z < 270.0f)) { + arg1->x = fmod((180.0f + arg1->x), 360.0); + arg1->z = fmod((180.0f + arg1->z), 360.0); + var_f28 = -var_f28; + } + arg1->y = atan2d(temp_f29, var_f28); + if (arg1->y < 0.0f) { + arg1->y += 360.0f; + } +} -// var_r30 = arg0; -// var_r31 = arg1; -// var_r31->x = atan2d(var_r30->unk_18, var_r30->unk_28); -// if (var_r31->x < 0.0f) { -// var_r31->x += 360.0f; -// } -// var_r31->z = atan2d(var_r30->unk_04, var_r30->unk_00); -// if (var_r31->z < 0.0f) { -// var_r31->z += 360.0f; -// } -// var_f29 = -var_r30->unk_08; -// if ((1.0 - (var_f29 * var_f29)) < 0.0) { -// var_f30 = -(1.0 - (var_f29 * var_f29)); -// } -// else { -// var_f30 = 1.0 - (var_f29 * var_f29); -// } -// if (var_f30 > 0.0f) { -// var_f31 = __frsqrte(var_f30); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// sp8 = var_f30 * var_f31; -// var_f27 = sp8; -// } -// else { -// var_f27 = var_f30; -// } -// var_f28 = var_f27; -// if ((var_r31->x > 90.0f) && (var_r31->x < 270.0f) && (var_r31->z > 90.0f) && (var_r31->z < 270.0f)) { -// var_r31->x = fmod(180.0f + var_r31->x, 360.0); -// var_r31->z = fmod(180.0f + var_r31->z, 360.0); -// var_f28 = -var_f28; -// } -// var_r31->y = atan2d(var_f29, var_f28); -// if (var_r31->y < 0.0f) { -// var_r31->y += 360.0f; -// } -// } +void fn_1_8500(Mtx arg0, Vec* arg1) { + f32 temp_f29; + f32 var_f28; -// void fn_1_8500(void *arg0, void *arg1) -// { -// float sp8; -// float var_f27; -// float var_f28; -// float var_f29; -// double var_f30; -// double var_f31; -// void *var_r30; -// void *var_r31; + arg1->z = atan2d(arg0[0][1], arg0[1][1]); + arg1->y = atan2d(arg0[2][0], arg0[2][2]); + temp_f29 = -arg0[2][1]; + var_f28 = sqrtf(BOARD_FABS(1.0 - temp_f29 * temp_f29)); + arg1->x = atan2d(temp_f29, var_f28); +} -// var_r31 = arg0; -// var_r30 = arg1; -// var_r30->unk_08 = atan2d(var_r31->unk_04, var_r31->unk_14); -// var_r30->unk_04 = atan2d(var_r31->unk_20, var_r31->unk_28); -// var_f29 = -var_r31->unk_24; -// if ((1.0 - (var_f29 * var_f29)) < 0.0) { -// var_f30 = -(1.0 - (var_f29 * var_f29)); -// } -// else { -// var_f30 = 1.0 - (var_f29 * var_f29); -// } -// if (var_f30 > 0.0f) { -// var_f31 = __frsqrte(var_f30); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// sp8 = var_f30 * var_f31; -// var_f28 = sp8; -// } -// else { -// var_f28 = var_f30; -// } -// var_f27 = var_f28; -// var_r30->unk_00 = atan2d(var_f29, var_f27); -// } +f32 fn_1_8750(f32 arg8, f32 arg9, f32 argA, f32 argB) { + f32 temp_f31; + f32 var_f30; -// double fn_1_8750(double arg8, float arg9, float argA, float argB) -// { -// double var_f30; -// double var_f31; + temp_f31 = (1.0 - arg8); + var_f30 = ((temp_f31 * temp_f31) * arg9) + (temp_f31 * arg8 * argA * 2.0) + ((arg8 * arg8) * argB); + return var_f30; +} -// var_f31 = 1.0 - arg8; -// var_f31 = var_f31; -// var_f30 = (argB * (arg8 * arg8)) + ((arg9 * (var_f31 * var_f31)) + (2.0 * (argA * (var_f31 * arg8)))); -// var_f30 = var_f30; -// return var_f30; -// } +void fn_1_87C8(f32* arg0, f32* arg1, f32* arg2, f32* arg3, f32 arg8) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 3; var_r31++) { + *arg3++ = fn_1_8750(arg8, *arg0++, *arg1++, *arg2++); + } +} -// void fn_1_87C8(float *arg0, float *arg1, float *arg2, float *arg3, double arg8) -// { -// float *var_r3; -// float *var_r4; -// float *var_r5; -// float *var_r6; -// float var_f26; -// float var_f27; -// float var_f28; -// float var_f29; -// double var_f24; -// double var_f25; -// double var_f30; -// double var_f31; -// s32 var_r31; +f32 fn_1_88E4(f32 arg8, f32 arg9, f32 argA, f32 argB) { + f32 var_f31; -// var_r3 = arg0; -// var_r4 = arg1; -// var_r5 = arg2; -// var_r6 = arg3; -// for (var_r31 = 0; var_r31 < 3; var_r31++) { -// var_f27 = *var_r5; -// var_r5 += 4; -// var_f28 = *var_r4; -// var_r4 += 4; -// var_f29 = *var_r3; -// var_r3 += 4; -// var_f26 = var_f29; -// var_f31 = 1.0 - arg8; -// var_f31 = var_f31; -// var_f30 = (var_f27 * (arg8 * arg8)) + ((var_f29 * (var_f31 * var_f31)) + (2.0 * (var_f28 * (var_f31 * arg8)))); -// var_f30 = var_f30; -// var_f25 = var_f30; -// var_f24 = var_f25; -// *var_r6 = var_f24; -// var_r6 += 4; -// } -// } + var_f31 = 2.0 * ((arg8 - 1.0) * arg9 + (1.0 - (2.0 * arg8)) * argA + (arg8 * argB)); + return var_f31; +} -// double fn_1_88E4(float arg8, double arg9, double argA, float argB) -// { -// double var_f31; +void fn_1_895C(f32* arg0, f32* arg1, f32* arg2, f32* arg3, f32 arg8) { + f32 spC[3]; + f32 var_f29; + s32 var_r31; -// var_f31 = 2.0 * ((arg8 * argB) + (((arg8 - 1.0) * arg9) + ((1.0 - (2.0 * arg8)) * argA))); -// var_f31 = var_f31; -// return var_f31; -// } - -// void fn_1_895C(float *arg0, float *arg1, float *arg2, float *arg3, float arg8) -// { -// float sp8; -// float *temp_r6; -// float *var_r3; -// float *var_r4; -// float *var_r5; -// float *var_r6; -// float var_f23; -// float var_f24; -// float var_f25; -// float var_f26; -// float var_f28; -// float var_f29; -// float var_f30; -// double var_f21; -// double var_f22; -// double var_f27; -// double var_f31; -// s32 var_r31; - -// var_r3 = arg0; -// var_r4 = arg1; -// var_r5 = arg2; -// var_r6 = arg3; -// for (var_r31 = 0; var_r31 < 3; var_r31++) { -// var_f24 = *var_r5; -// var_r5 += 4; -// var_f25 = *var_r4; -// var_r4 += 4; -// var_f26 = *var_r3; -// var_r3 += 4; -// var_f23 = var_f26; -// var_f27 = 2.0 * ((arg8 * var_f24) + (((arg8 - 1.0) * var_f26) + ((1.0 - (2.0 * arg8)) * var_f25))); -// var_f27 = var_f27; -// var_f22 = var_f27; -// var_f21 = var_f22; -// (&spC[0])[var_r31] = var_f21; -// } -// var_f30 = (sp14 * sp14) + ((spC[0] * spC[0]) + (sp10 * sp10)); -// if (var_f30 > 0.0f) { -// var_f31 = __frsqrte(var_f30); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// sp8 = var_f30 * var_f31; -// var_f28 = sp8; -// } -// else { -// var_f28 = var_f30; -// } -// var_f29 = var_f28; -// if (var_f29 != 0.0f) { -// var_f29 = 1.0 / var_f29; -// var_f29 = var_f29; -// for (var_r31 = 0; var_r31 < 3; var_r31++) { -// *var_r6 = var_f29 * (&spC[0])[var_r31]; -// var_r6 += 4; -// } -// return; -// } -// *var_r6 = 0.0f; -// temp_r6 = var_r6 + 4; -// *temp_r6 = 0.0f; -// *(temp_r6 + 4) = 1.0f; -// } + for (var_r31 = 0; var_r31 < 3; var_r31++) { + spC[var_r31] = fn_1_88E4(arg8, *arg0++, *arg1++, *arg2++); + } + var_f29 = sqrtf((spC[0] * spC[0]) + (spC[1] * spC[1]) + (spC[2] * spC[2])); + if (var_f29) { + var_f29 = (1.0 / var_f29); + for (var_r31 = 0; var_r31 < 3; var_r31++) { + *arg3++ = var_f29 * spC[var_r31]; + } + return; + } + *arg3++ = 0.0f; + *arg3++ = 0.0f; + *arg3++ = 1.0f; +} void fn_1_8C34(float *arg0, float *arg1, float *arg2, s32 arg3) { From c23ff7a0966873ede0982b0f5102beb7e8a3b465 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sun, 29 Dec 2024 14:34:04 -0500 Subject: [PATCH 6/8] continued work on m438 --- .vscode/settings.json | 6 +- src/REL/m438Dll/main.c | 795 +++++++++++++++-------------------------- 2 files changed, 301 insertions(+), 500 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 233a6160..f4d558fa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,7 +23,9 @@ "object.h": "c", "executor.h": "c", "m438dll.h": "c", - "audio.h": "c" + "audio.h": "c", + "musyx.h": "c", + "math.h": "c" }, "search.useIgnoreFiles": false, "search.exclude": { @@ -96,4 +98,4 @@ "C_Cpp_Runner.showCompilationTime": false, "C_Cpp_Runner.useLinkTimeOptimization": false, "C_Cpp_Runner.msvcSecureNoWarnings": false -} \ No newline at end of file +} diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index d3bf4e10..2faac948 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -5,6 +5,7 @@ #include "game/hsfman.h" #include "game/hsfmotion.h" #include "game/minigame_seq.h" +#include "game/object.h" #include "game/objsub.h" #include "game/pad.h" #include "game/sprite.h" @@ -121,8 +122,9 @@ typedef struct M438MainWork3 { } M438MainWork3; /* size = */ typedef struct M438MainWork4 { - s8 unk_00; - char unk04[11]; + u8 unk_00; + char unk01[0x7]; + float unk_08; float unk_0C; float unk_10; float unk_14; @@ -217,6 +219,8 @@ typedef struct M438StructBssDE4 { M438UnkStruct2 *unk_40; } M438StructBssDE4; /* size = */ +typedef u8 M438UnkType[0x30]; + void fn_1_4DC(omObjData *object); void fn_1_4FC(omObjData *object); void fn_1_974(omObjData *object); @@ -259,7 +263,7 @@ float fn_1_A14C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3); void fn_1_A60C(omObjData *object); void fn_1_A688(omObjData *object); void fn_1_A68C(ModelData *model, Mtx matrix); -s32 fn_1_AE18(u32 arg0, Vec *arg1, Vec *arg2); +s32 fn_1_AE18(u32 arg0, float arg8, Vec *arg1, Vec *arg2); float fn_1_B440(Vec *arg0, Vec *arg1, Vec *arg2); Vec lbl_1_data_0 = { 1000.0f, 3000.0f, 1000.0f }; @@ -2705,357 +2709,169 @@ void fn_1_9420(float arg8, float *arg0, float *arg1, float arg2[3][3], float arg } } -// float fn_1_9634(Vec *arg0) -// { -// float sp8; -// float var_f28; -// float var_f29; -// float var_f30; -// double var_f31; +f32 fn_1_9634(Vec* arg0) { + f32 var_f30; + f32 var_f29; + var_f30 = (arg0->x * arg0->x) + (arg0->y * arg0->y) + (arg0->z * arg0->z); + var_f30 = sqrtf(var_f30); + if (var_f30 != 0.0f) { + var_f29 = 1.0f / var_f30; + arg0->x *= var_f29; + arg0->y *= var_f29; + arg0->z *= var_f29; + } else { + arg0->x = arg0->y = arg0->z = 0.0f; + } + return var_f30; +} -// var_f30 = (arg0->z * arg0->z) + ((arg0->x * arg0->x) + (arg0->y * arg0->y)); -// if (var_f30 > 0.0f) { -// var_f31 = __frsqrte(var_f30); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f30 * (var_f31 * var_f31))); -// sp8 = var_f30 * var_f31; -// var_f28 = sp8; -// } -// else { -// var_f28 = var_f30; -// } -// var_f30 = var_f28; -// if (var_f30 != 0.0f) { -// var_f29 = 1.0f / var_f30; -// arg0->x *= var_f29; -// arg0->y *= var_f29; -// arg0->z *= var_f29; -// } -// else { -// arg0->z = 0.0f; -// arg0->y = 0.0f; -// arg0->x = 0.0f; -// } -// return var_f30; -// } +f32 fn_1_97CC(Vec arg0, Vec arg1, Vec* arg2, f32 arg8) { + if (arg8 <= 0.0f) { + arg2->x = arg0.x; + arg2->y = arg0.y; + arg2->z = arg0.z; + arg8 = 0.0f; + } else if (arg8 >= 1.0f) { + arg2->x = (arg0.x + arg1.x); + arg2->y = (arg0.y + arg1.y); + arg2->z = (arg0.z + arg1.z); + arg8 = 1.0f; + } else { + arg2->x = (arg0.x + (arg8 * arg1.x)); + arg2->y = (arg0.y + (arg8 * arg1.y)); + arg2->z = (arg0.z + (arg8 * arg1.z)); + } + return arg8; +} -// float fn_1_97CC(void *arg0, void *arg1, void *arg2, float arg8) -// { -// if (arg8 <= 0.0f) { -// arg2->unk_00 = arg0->unk_00; -// arg2->unk_04 = arg0->unk_04; -// arg2->unk_08 = arg0->unk_08; -// return 0.0f; -// } -// if (arg8 >= 1.0f) { -// arg2->unk_00 = arg0->unk_00 + arg1->unk_00; -// arg2->unk_04 = arg0->unk_04 + arg1->unk_04; -// arg2->unk_08 = arg0->unk_08 + arg1->unk_08; -// return 1.0f; -// } -// arg2->unk_00 = arg0->unk_00 + (arg8 * arg1->unk_00); -// arg2->unk_04 = arg0->unk_04 + (arg8 * arg1->unk_04); -// arg2->unk_08 = arg0->unk_08 + (arg8 * arg1->unk_08); -// return arg8; -// } +f32 fn_1_98A4(Vec arg0, Vec arg1, Vec arg2) { + f32 temp_f30; + f32 var_f31; -// float fn_1_98A4(void *arg0, void *arg1, void *arg2) -// { -// float var_f30; -// float var_f31; + var_f31 = (arg2.z * (arg1.z - arg0.z)) + ((arg2.x * (arg1.x - arg0.x)) + (arg2.y * (arg1.y - arg0.y))); + temp_f30 = -((arg2.z * arg2.z) + ((arg2.x * arg2.x) + (arg2.y * arg2.y))); + if (0.0f != temp_f30) { + var_f31 /= temp_f30; + } + return var_f31; +} -// var_f31 = (arg2->unk_08 * (arg1->unk_08 - arg0->unk_08)) -// + ((arg2->unk_00 * (arg1->unk_00 - arg0->unk_00)) + (arg2->unk_04 * (arg1->unk_04 - arg0->unk_04))); -// var_f30 = -((arg2->unk_08 * arg2->unk_08) + ((arg2->unk_00 * arg2->unk_00) + (arg2->unk_04 * arg2->unk_04))); -// if (var_f30 != 0.0f) { -// var_f31 /= var_f30; -// } -// return var_f31; -// } +f32 fn_1_9960(Vec* arg0, Vec* arg1, Vec* arg2) { + Vec sp44; + f32 var_f31; + f32 var_f30; + f32 temp_f29; -// float fn_1_9960(Vec *arg0, Vec *arg1, Vec *arg2) -// { -// float sp4C; -// float sp48; -// float sp44; -// float sp40; -// float sp3C; -// float sp38; -// float sp34; -// float sp30; -// float sp2C; -// float sp28; -// float sp24; -// float sp20; -// float sp1C; -// float sp18; -// float sp14; -// float sp10; -// float spC; -// float sp8; -// float var_f27; -// float var_f28; -// float var_f29; -// float var_f30; -// float var_f31; + if (0.0f == ((arg2->z * arg2->z) + ((arg2->x * arg2->x) + (arg2->y * arg2->y)))) { + return ((arg0->z - arg1->z) * (arg0->z - arg1->z)) + (((arg0->x - arg1->x) * (arg0->x - arg1->x)) + ((arg0->y - arg1->y) * (arg0->y - arg1->y))); + } + var_f31 = fn_1_98A4(*arg0, *arg1, *arg2); + fn_1_97CC(*arg1, *arg2, &sp44, var_f31); + return ((arg0->z - sp44.z) * (arg0->z - sp44.z)) + (((arg0->x - sp44.x) * (arg0->x - sp44.x)) + ((arg0->y - sp44.y) * (arg0->y - sp44.y))); +} -// if (((arg2->z * arg2->z) + ((arg2->x * arg2->x) + (arg2->y * arg2->y))) == 0.0f) { -// return ((arg0->z - arg1->z) * (arg0->z - arg1->z)) -// + (((arg0->x - arg1->x) * (arg0->x - arg1->x)) + ((arg0->y - arg1->y) * (arg0->y - arg1->y))); -// } -// sp38 = arg0->x; -// sp3C = arg0->y; -// sp40 = arg0->z; -// sp2C = arg1->x; -// sp30 = arg1->y; -// sp34 = arg1->z; -// sp20 = arg2->x; -// sp24 = arg2->y; -// sp28 = arg2->z; -// var_f30 = (sp28 * (sp34 - sp40)) + ((sp20 * (sp2C - sp38)) + (sp24 * (sp30 - sp3C))); -// var_f29 = -((sp28 * sp28) + ((sp20 * sp20) + (sp24 * sp24))); -// if (var_f29 != 0.0f) { -// var_f30 /= var_f29; -// } -// var_f27 = var_f30; -// var_f28 = var_f27; -// var_f31 = var_f28; -// sp8 = arg2->x; -// spC = arg2->y; -// sp10 = arg2->z; -// sp14 = arg1->x; -// sp18 = arg1->y; -// sp1C = arg1->z; -// if (var_f31 <= 0.0f) { -// sp44 = sp14; -// sp48 = sp18; -// sp4C = sp1C; -// var_f31 = 0.0f; -// } -// else if (var_f31 >= 1.0f) { -// sp44 = sp14 + sp8; -// sp48 = sp18 + spC; -// sp4C = sp1C + sp10; -// var_f31 = 1.0f; -// } -// else { -// sp44 = sp14 + (var_f31 * sp8); -// sp48 = sp18 + (var_f31 * spC); -// sp4C = sp1C + (var_f31 * sp10); -// } -// return ((arg0->z - sp4C) * (arg0->z - sp4C)) + (((arg0->x - sp44) * (arg0->x - sp44)) + ((arg0->y - sp48) * (arg0->y - sp48))); -// } +f32 fn_1_9C9C(Vec* arg0, Vec* arg1, Vec* arg2, Vec* arg3, Vec* arg4) { + f32 sp44; + f32 sp40; + f32 sp3C; + f32 sp38; + f32 sp34; + f32 sp30; + f32 sp2C; + f32 sp28; + f32 sp24; + Vec sp18; + f32 sp14; + f32 sp10; + f32 spC; + f32 sp8; + f32 temp_f25; + f32 temp_f26; + f32 temp_f28; + f32 var_f24; + f32 var_f27; + f64 temp_f31; + f64 temp_f31_2; + f64 temp_f31_3; -// float fn_1_9C9C(void *arg0, void *arg1, void *arg2, void *arg3, void *arg4) -// { -// float sp44; -// float sp40; -// float sp3C; -// float sp38; -// float sp34; -// float sp30; -// float sp2C; -// float sp28; -// float sp24; -// float sp20; -// float sp1C; -// float sp18; -// float sp14; -// float sp10; -// float spC; -// float sp8; -// float var_f22; -// float var_f23; -// float var_f24; -// float var_f25; -// float var_f26; -// float var_f27; -// float var_f28; -// float var_f29; -// float var_f30; -// double var_f31; + if (0.0f == ((arg2->z * arg2->z) + ((arg2->x * arg2->x) + (arg2->y * arg2->y)))) { + return ((arg0->z - arg1->z) * (arg0->z - arg1->z)) + (((arg0->x - arg1->x) * (arg0->x - arg1->x)) + ((arg0->y - arg1->y) * (arg0->y - arg1->y))); + } + var_f27 = fn_1_98A4(*arg0, *arg1, *arg2); + fn_1_97CC(*arg1, *arg2, arg3, var_f27); + arg4->x = (arg0->x - arg3->x); + arg4->y = (arg0->y - arg3->y); + arg4->z = (arg0->z - arg3->z); -// if (((arg2->unk_08 * arg2->unk_08) + ((arg2->unk_00 * arg2->unk_00) + (arg2->unk_04 * arg2->unk_04))) == 0.0f) { -// return ((arg0->unk_08 - arg1->unk_08) * (arg0->unk_08 - arg1->unk_08)) -// + (((arg0->unk_00 - arg1->unk_00) * (arg0->unk_00 - arg1->unk_00)) + ((arg0->unk_04 - arg1->unk_04) * (arg0->unk_04 - -// arg1->unk_04))); -// } -// sp3C = arg0->unk_00; -// sp40 = arg0->unk_04; -// sp44 = arg0->unk_08; -// sp30 = arg1->unk_00; -// sp34 = arg1->unk_04; -// sp38 = arg1->unk_08; -// sp24 = arg2->unk_00; -// sp28 = arg2->unk_04; -// sp2C = arg2->unk_08; -// var_f27 = (sp2C * (sp38 - sp44)) + ((sp24 * (sp30 - sp3C)) + (sp28 * (sp34 - sp40))); -// var_f25 = -((sp2C * sp2C) + ((sp24 * sp24) + (sp28 * sp28))); -// if (var_f25 != 0.0f) { -// var_f27 /= var_f25; -// } -// var_f22 = var_f27; -// var_f23 = var_f22; -// var_f30 = var_f23; -// spC = arg2->unk_00; -// sp10 = arg2->unk_04; -// sp14 = arg2->unk_08; -// sp18 = arg1->unk_00; -// sp1C = arg1->unk_04; -// sp20 = arg1->unk_08; -// if (var_f30 <= 0.0f) { -// arg3->unk_00 = sp18; -// arg3->unk_04 = sp1C; -// arg3->unk_08 = sp20; -// var_f30 = 0.0f; -// } -// else if (var_f30 >= 1.0f) { -// arg3->unk_00 = sp18 + spC; -// arg3->unk_04 = sp1C + sp10; -// arg3->unk_08 = sp20 + sp14; -// var_f30 = 1.0f; -// } -// else { -// arg3->unk_00 = sp18 + (var_f30 * spC); -// arg3->unk_04 = sp1C + (var_f30 * sp10); -// arg3->unk_08 = sp20 + (var_f30 * sp14); -// } -// arg4->unk_00 = arg0->unk_00 - arg3->unk_00; -// arg4->unk_04 = arg0->unk_04 - arg3->unk_04; -// arg4->unk_08 = arg0->unk_08 - arg3->unk_08; -// var_f28 = (arg4->unk_08 * arg4->unk_08) + ((arg4->unk_00 * arg4->unk_00) + (arg4->unk_04 * arg4->unk_04)); -// var_f29 = var_f28; -// if (var_f29 > 0.0f) { -// var_f31 = __frsqrte(var_f29); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f29 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f29 * (var_f31 * var_f31))); -// var_f31 = 0.5 * var_f31 * (3.0 - (var_f29 * (var_f31 * var_f31))); -// sp8 = var_f29 * var_f31; -// var_f24 = sp8; -// } -// else { -// var_f24 = var_f29; -// } -// var_f28 = var_f24; -// if (var_f28 != 0.0f) { -// var_f26 = 1.0f / var_f28; -// arg4->unk_00 = arg4->unk_00 * var_f26; -// arg4->unk_04 = arg4->unk_04 * var_f26; -// arg4->unk_08 = arg4->unk_08 * var_f26; -// } -// else { -// arg4->unk_08 = 0.0f; -// arg4->unk_04 = 0.0f; -// arg4->unk_00 = 0.0f; -// } -// return var_f28; -// } + return fn_1_9634(arg4); +} -// float fn_1_A14C(Vec *arg0, Vec *arg1, Vec *arg2, Vec *arg3) -// { -// float var_f23; -// float var_f24; -// float var_f25; -// float var_f26; -// float var_f27; -// float var_f28; -// float var_f29; -// float var_f30; -// float var_f31; -// s32 var_r29; -// s32 var_r30; -// s32 var_r31; +f32 fn_1_A14C(Vec* arg0, Vec* arg1, Vec* arg2, Vec* arg3) { + f32 temp_f31; + f32 var_f30; + f32 var_f29; + f32 var_f28; + f32 var_f27; + f32 var_f26; + s32 var_r31; + s32 var_r30; + s32 var_r29; -// var_f30 = -1.0f; -// var_r31 = 0; -// if (arg3->unk_00 < 0.0f) { -// var_f25 = -arg3->unk_00; -// } -// else { -// var_f25 = arg3->unk_00; -// } -// var_f28 = var_f25; -// if (arg3->unk_04 < 0.0f) { -// var_f24 = -arg3->unk_04; -// } -// else { -// var_f24 = arg3->unk_04; -// } -// var_f27 = var_f24; -// if (arg3->unk_08 < 0.0f) { -// var_f23 = -arg3->unk_08; -// } -// else { -// var_f23 = arg3->unk_08; -// } -// var_f26 = var_f23; -// if (var_f28 >= var_f27) { -// if (var_f28 >= var_f26) { -// var_r30 = 1; -// } -// else { -// var_r30 = 0x100; -// } -// var_r31 = var_r30; -// } -// else { -// if (var_f27 >= var_f26) { -// var_r29 = 0x10; -// } -// else { -// var_r29 = 0x100; -// } -// var_r31 = var_r29; -// } -// if ((var_r31 & 3) != 0) { -// if ((arg1->x != 0.0f) || (arg1->z != 0.0f)) { -// var_f31 = (arg3->unk_00 * arg1->z) - (arg3->unk_08 * arg1->x); -// if (var_f31 == 0.0f) { -// return -1.0f; -// } -// var_f29 = ((arg3->unk_08 * (arg0->x - arg2->x)) - (arg3->unk_00 * (arg0->z - arg2->z))) / var_f31; -// goto block_44; -// } -// var_f31 = (arg3->unk_04 * arg1->x) - (arg3->unk_00 * arg1->y); -// if (var_f31 == 0.0f) { -// return -1.0f; -// } -// var_f29 = ((arg3->unk_00 * (arg0->y - arg2->y)) - (arg3->unk_04 * (arg0->x - arg2->x))) / var_f31; -// goto block_44; -// } -// if ((var_r31 & 0x30) != 0) { -// if ((arg1->x != 0.0f) || (arg1->y != 0.0f)) { -// var_f31 = (arg3->unk_04 * arg1->x) - (arg3->unk_00 * arg1->y); -// if (var_f31 == 0.0f) { -// return -1.0f; -// } -// var_f29 = ((arg3->unk_00 * (arg0->y - arg2->y)) - (arg3->unk_04 * (arg0->x - arg2->x))) / var_f31; -// goto block_44; -// } -// var_f31 = (arg3->unk_08 * arg1->y) - (arg3->unk_04 * arg1->z); -// if (var_f31 == 0.0f) { -// return -1.0f; -// } -// var_f29 = ((arg3->unk_04 * (arg0->z - arg2->z)) - (arg3->unk_08 * (arg0->y - arg2->y))) / var_f31; -// goto block_44; -// } -// if ((arg1->x != 0.0f) || (arg1->z != 0.0f)) { -// var_f31 = (arg3->unk_00 * arg1->z) - (arg3->unk_08 * arg1->x); -// if (var_f31 == 0.0f) { -// return -1.0f; -// } -// var_f29 = ((arg3->unk_08 * (arg0->x - arg2->x)) - (arg3->unk_00 * (arg0->z - arg2->z))) / var_f31; -// goto block_44; -// } -// var_f31 = (arg3->unk_08 * arg1->y) - (arg3->unk_04 * arg1->z); -// if (var_f31 == 0.0f) { -// return -1.0f; -// } -// var_f29 = ((arg3->unk_04 * (arg0->z - arg2->z)) - (arg3->unk_08 * (arg0->y - arg2->y))) / var_f31; -// block_44: -// return var_f29; -// } + var_f30 = -1.0f; + var_r31 = 0; + + var_f28 = BOARD_FABS(arg3->x); + var_f27 = BOARD_FABS(arg3->y); + var_f26 = BOARD_FABS(arg3->z); + if (var_f28 >= var_f27) { + if (var_f28 >= var_f26) { + var_r30 = 1; + } else { + var_r30 = 0x100; + } + var_r31 = var_r30; + } else { + if (var_f27 >= var_f26) { + var_r29 = 0x10; + } else { + var_r29 = 0x100; + } + var_r31 = var_r29; + } + if ((var_r31 & 3) != 0) { + if ((0.0f != arg1->x) || (0.0f != arg1->z)) { + if (0.0f == (temp_f31 = (arg3->x * arg1->z) - (arg3->z * arg1->x))) { + return var_f30; + } + var_f29 = ((arg3->z * (arg0->x - arg2->x)) - (arg3->x * (arg0->z - arg2->z))) / temp_f31; + } else if (0.0f == (temp_f31 = (arg3->y * arg1->x) - (arg3->x * arg1->y))) { + return var_f30; + } else { + var_f29 = ((arg3->x * (arg0->y - arg2->y)) - (arg3->y * (arg0->x - arg2->x))) / temp_f31; + } + } else if ((var_r31 & 0x30) != 0) { + if ((0.0f != arg1->x) || (0.0f != arg1->y)) { + if (0.0f == (temp_f31 = (arg3->y * arg1->x) - (arg3->x * arg1->y))) { + return var_f30; + } + var_f29 = ((arg3->x * (arg0->y - arg2->y)) - (arg3->y * (arg0->x - arg2->x))) / temp_f31; + } else if (0.0f == (temp_f31 = (arg3->z * arg1->y) - (arg3->y * arg1->z))) { + return var_f30; + } else { + var_f29 = ((arg3->y * (arg0->z - arg2->z)) - (arg3->z * (arg0->y - arg2->y))) / temp_f31; + } + } else if ((0.0f != arg1->x) || (0.0f != arg1->z)) { + if (0.0f == (temp_f31 = (arg3->x * arg1->z) - (arg3->z * arg1->x))) { + return var_f30; + } + var_f29 = ((arg3->z * (arg0->x - arg2->x)) - (arg3->x * (arg0->z - arg2->z))) / temp_f31; + } else if (0.0f == (temp_f31 = (arg3->z * arg1->y) - (arg3->y * arg1->z))) { + return var_f30; + } else { + var_f29 = ((arg3->y * (arg0->z - arg2->z)) - (arg3->z * (arg0->y - arg2->y))) / temp_f31; + } + return var_f29; +} void fn_1_A60C(omObjData *object) { @@ -3072,11 +2888,11 @@ void fn_1_A688(omObjData *object) { } Vec lbl_1_data_514 = { -850.0f, 0.0f, -850.0f }; s32 lbl_1_data_520[25] = { - -98, -97, -96, -95, -94, - -50, -49, -48, -47, -46, - -2, -1, 0, 1, 2, - 0x2E, 0x2F, 0x30, 0x31, 0x32, - 0x5E, 0x5F, 0x60, 0x61, 0x62, + -0x62, -0x61, -0x60, -0x5F, -0x5E, + -0x32, -0x31, -0x30, -0x2F, -0x2E, + -0x2, -0x1, 0x0, 0x1, 0x2, + 0x2E, 0x2F, 0x30, 0x31, 0x32, + 0x5E, 0x5F, 0x60, 0x61, 0x62, }; u32 lbl_1_data_584[25] = { @@ -3107,158 +2923,141 @@ u32 lbl_1_data_584[25] = { 0x50, }; -// void fn_1_A68C(ModelData *model, Mtx matrix) -// { -// Vec sp14; -// Vec sp8; -// ? *var_r30; -// float var_f31; -// omObjData *var_r27; -// s32 var_r24; -// s32 var_r28; -// s32 var_r29; -// u8 *var_r26; -// void *var_r25; -// void *var_r31; +#define getData(v, off) &( &( *OM_GET_DATA_PTR(lbl_1_bss_DBC, M438UnkType) )[ (u32)(0.028235294f * (v.x - off)) ] )[ (u32)(0.028235294f * (v.z - off)) * 0x30 ] -// if (omPauseChk() == 0) { -// memset(lbl_1_bss_DBC->data, 0, 0x900); -// if (lbl_1_bss_DBA == 7) { -// for (var_r30 = &lbl_1_bss_298; var_r29 = 0; var_r30 < 0x30; var_r29++; var_r30 += 0x30) { -// if ((var_r30->unk_00 > 1) && (var_r30->unk_00 < 5)) { -// var_f31 = 0.0f; -// for (var_f31 = 0.0f; var_f31 < (35.416668f + var_r30->unk_14); var_f31 += 35.416668f) { -// VECScale(var_r30 + 0x24, &sp8, var_f31); -// VECAdd(var_r30 + 0x18, &sp8, &sp14); -// VECSubtract(&sp14, &lbl_1_data_514, &sp14); -// var_r24 = (0.028235294f * sp14.z) * 0x30; -// var_r25 = (0.028235294f * sp14) + var_r24; -// var_r25 += lbl_1_bss_DBC->data; -// for (var_r28 = 0; var_r28 < 0x19; var_r28++) { -// var_r26 = var_r25 + lbl_1_data_520[var_r28]; -// if (*var_r26 < lbl_1_data_584[var_r28]) { -// *var_r26 = lbl_1_data_584[var_r28]; -// } -// } -// } -// } -// } -// for (var_r29 = 0; var_r29 < 4; var_r29++) { -// if (lbl_1_bss_DC4[var_r29] != NULL) { -// var_r27 = lbl_1_bss_DC4[var_r29]; -// var_r31 = var_r27->data; -// if ((var_r31 != NULL) && (var_r31->unk_68 != 0)) { -// var_r31->unk_68 = 0; -// VECAdd(var_r31 + 0x6C, var_r31 + 0x4C, &sp14); -// var_r31->unk_64 = fn_1_AE18(var_r27->work[0], &sp14, var_r31 + 0x58); -// } -// } -// } -// } -// } -// } +void fn_1_A68C(ModelData* model, Mtx matrix) { + Vec sp14; + Vec sp8; + M438StructBss298* var_r30; + f32 var_f31; + omObjData* temp_r27; + s32 var_r28; + s32 var_r29; + u8* temp_r26; + u8* var_r25; + M438MainWork *temp_r31; -// u16 fn_1_A8FC(Vec *arg0, float arg8) -// { -// s32 sp34; -// float sp30; -// s32 sp2C; -// Vec sp20; -// Vec sp14; -// float sp10; -// float spC; -// float sp8; -// Vec *var_r29; -// float var_f25; -// float var_f28; -// float var_f29; -// float var_f30; -// float var_f31; -// double var_f26; -// double var_f27; -// s32 var_r28; -// u16 var_r30; -// u8 temp_r0; -// void *var_r31; + if ((u8)omPauseChk() == 0) { + memset(lbl_1_bss_DBC->data, 0, 0x900); + if (lbl_1_bss_DBA == 7) { + var_r30 = lbl_1_bss_298; + for (var_r29 = 0; var_r29 < 0x30; var_r29++, var_r30++) { + if ((var_r30->unk_00 > 1U) && (var_r30->unk_00 < 5U)) { -// var_r29 = arg0; -// var_f25 = arg8; -// var_r30 = 0; -// var_r28 = 0; -// var_f28 = 100.0f * (4.5f - (2.0f * var_f25)); -// var_f31 = VECMag(var_r29); -// if (var_f31 > 280.0f) { -// if (var_f31 > 560.0f) { -// var_r28 = 1; -// VECNormalize(var_r29, &sp14); -// } -// var_f31 -= 280.0f; -// var_f31 *= 0.12987013f; -// if (var_f31 > 50.0f) { -// var_f31 = 500.0f; -// } -// var_r30 = var_f31; -// } -// if (lbl_1_bss_DBA == 7) { -// var_r31 = lbl_1_bss_DC0->data; -// sp2C = var_r31->unk_34; -// sp30 = var_r31->unk_38; -// sp34 = var_r31->unk_3C; -// sp30 = 0.0f; -// temp_r0 = var_r31->unk_00; -// if (temp_r0 < 4) { -// if (temp_r0 < 2) { -// goto block_18; -// } -// sp8 = sind(var_r31->unk_08); -// spC = 0.0f; -// sp10 = cosd(var_r31->unk_08); -// VECScale(&sp8, &sp20, 600.0f + (100.0f * (8.0f * var_f25))); -// var_f30 = fn_1_B440(var_r29, &sp2C, &sp20); -// if ((var_f30 > -0.2f) && (var_f30 < 1.0f)) { -// VECScale(&sp20, &sp20, var_f30); -// VECAdd(&sp2C, &sp20, &sp2C); -// VECSubtract(&sp2C, var_r29, &sp20); -// var_f31 = VECMag(&sp20); -// if (var_f31 < var_f28) { -// var_f29 = 0.0f; -// if (var_r28 != 0) { -// var_f29 = VECDotProduct(&sp14, &sp8); -// var_f27 = fabs(var_f29); -// var_f29 = 1.0 - var_f27; -// var_f29 = var_f29; -// } -// var_f31 = (1.0f / var_f28) * (var_f28 - var_f31); -// var_f31 = 0.5f * (var_f31 + (1.0f - ((1.0f - var_f31) * (1.0f - var_f31)))); -// var_f31 += (1.0f - var_f31) * var_f29; -// var_f31 = 100.0f + (50.0f * var_f31); -// var_f26 = fabs(var_f30); -// var_f30 = 0.5 + (0.5 * (1.0 - var_f26)); -// var_f30 = var_f30; -// var_f31 *= var_f30; -// if (var_f31 > 150.0f) { -// var_f31 = 150.0f; -// } -// var_r30 = var_r30 + var_f31; -// } -// } -// } -// else { -// block_18: -// VECSubtract(var_r29, &sp2C, &sp20); -// var_f31 = VECMag(&sp20); -// if (var_f31 < 600.0f) { -// var_f31 = 800.0f - var_f31; -// var_f31 = 20.0f + (0.1f * var_f31); -// if (var_f31 > 100.0f) { -// var_f31 = 100.0f; -// } -// var_r30 = var_r30 + var_f31; -// } -// } -// } -// return var_r30; -// } + var_f31 = 0.0f; + for (var_f31 = 0.0f; var_f31 < (35.416668f + var_r30->unk_14); var_f31 += 35.416668f) { + PSVECScale(&var_r30->unk_24, &sp8, var_f31); + PSVECAdd(&var_r30->unk_18, &sp8, &sp14); + PSVECSubtract(&sp14, &lbl_1_data_514, &sp14); + + // @todo make this look nicer + // var_r25 = getData(sp14, 0); + var_r25 = getData(sp14, 0); + for (var_r28 = 0; var_r28 < 0x19; var_r28++) { + temp_r26 = &var_r25[lbl_1_data_520[var_r28]]; + if (temp_r26[0] < lbl_1_data_584[var_r28]) { + temp_r26[0] = lbl_1_data_584[var_r28]; + } + } + } + } + } + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if ((omObjData* ) lbl_1_bss_DC4[var_r29]) { + temp_r27 = lbl_1_bss_DC4[var_r29]; + temp_r31 = temp_r27->data; + if ((temp_r31) && (temp_r31->unk_68 != 0)) { + temp_r31->unk_68 = 0; + PSVECAdd(&temp_r31->unk_6C, &temp_r31->unk_4C, &sp14); + temp_r31->unk_64 = fn_1_AE18(temp_r27->work[0], temp_r31->unk_7C, &sp14, &temp_r31->unk_58); + } + } + } + } + } +} + +u32 fn_1_A8FC(Vec* arg0, f32 arg8) { + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + f32 var_f31; + f32 var_f30; + f32 var_f29; + f32 temp_f28; + s32 var_r28; + u32 var_r30; + M438MainWork4 *temp_r31; + + var_r30 = 0; + var_r28 = 0; + temp_f28 = 100.0f * (4.5f - (2.0f * arg8)); + var_f31 = PSVECMag(arg0); + if (var_f31 > 280.0f) { + if (var_f31 > 560.0f) { + var_r28 = 1; + PSVECNormalize(arg0, &sp14); + } + var_f31 -= 280.0f; + var_f31 *= 0.12987013f; + if (var_f31 > 50.0f) { + var_f31 = 500.0f; + } + var_r30 = var_f31; + } + if (lbl_1_bss_DBA == 7) { + temp_r31 = lbl_1_bss_DC0->data; + sp2C = temp_r31->unk_34; + sp2C.y = 0.0f; + switch (temp_r31->unk_00) { + case 2: + case 3: + sp8.x = sind(temp_r31->unk_08); + sp8.y = 0.0f; + sp8.z = cosd(temp_r31->unk_08); + PSVECScale(&sp8, &sp20, 600.0f + (100.0f * (8.0f * arg8))); + var_f30 = fn_1_B440(arg0, &sp2C, &sp20); + if (var_f30 > -0.2f && var_f30 < 1.0f) { + PSVECScale(&sp20, &sp20, var_f30); + PSVECAdd(&sp2C, &sp20, &sp2C); + PSVECSubtract(&sp2C, arg0, &sp20); + var_f31 = PSVECMag(&sp20); + if (var_f31 < temp_f28) { + var_f29 = 0.0f; + if (var_r28 != 0) { + var_f29 = PSVECDotProduct(&sp14, &sp8); + var_f29 = 1.0 - fabs(var_f29); + } + var_f31 = (1.0f / temp_f28) * (temp_f28 - var_f31); + var_f31 = 0.5f * (var_f31 + (1.0f - ((1.0f - var_f31) * (1.0f - var_f31)))); + var_f31 += (1.0f - var_f31) * var_f29; + var_f31 = 100.0f + 50.0f * var_f31; + var_f30 = 0.5 + 0.5 * (1.0 - fabs(var_f30)); + var_f31 *= var_f30; + if (var_f31 > 150.0f) { + var_f31 = 150.0f; + } + var_r30 += var_f31; + } + } + break; + default: + PSVECSubtract(arg0, &sp2C, &sp20); + var_f31 = PSVECMag(&sp20); + if (var_f31 < 600.0f) { + var_f31 = 800.0f - var_f31; + var_f31 = 20.0f + (0.1f * var_f31); + if (var_f31 > 100.0f) { + var_f31 = 100.0f; + } + var_r30 += var_f31; + } + break; + } + } + return var_r30; +} s32 lbl_1_data_5E8[9] = { 0, -49, -48, -47, -1, 1, 0x2F, 0x30, 0x31 }; From 5886085302439c1613be719aaea52e138d132575 Mon Sep 17 00:00:00 2001 From: CreateSource <72283721+abnormalhare@users.noreply.github.com> Date: Sun, 29 Dec 2024 14:38:00 -0500 Subject: [PATCH 7/8] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 88de0b1a..f1594c57 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ Supported versions: - `GMPE01_00`: Rev 0 (USA) - `GMPE01_01`: Rev 1 (USA) - `GMPP01_00`: Rev 0 (PAL) -- `GMPP01_02`: REV 2 (PAL) -- `GMPJ01_00`: REV 0 (JP) +- `GMPP01_02`: Rev 2 (PAL) +- `GMPJ01_00`: Rev 0 (JP) Dependencies ============ From c914104198ca8604dc2a68f3e0d3ca59771e864a Mon Sep 17 00:00:00 2001 From: CreateSource Date: Sun, 29 Dec 2024 16:19:06 -0500 Subject: [PATCH 8/8] match m438Dll/main --- config/GMPE01_00/rels/m438Dll/symbols.txt | 3 +- configure.py | 2 +- src/REL/m438Dll/main.c | 305 +++++++++------------- 3 files changed, 132 insertions(+), 178 deletions(-) diff --git a/config/GMPE01_00/rels/m438Dll/symbols.txt b/config/GMPE01_00/rels/m438Dll/symbols.txt index 13ca3c7d..e1febc85 100644 --- a/config/GMPE01_00/rels/m438Dll/symbols.txt +++ b/config/GMPE01_00/rels/m438Dll/symbols.txt @@ -381,7 +381,7 @@ lbl_1_data_18 = .data:0x00000018; // type:object size:0x4 lbl_1_data_1C = .data:0x0000001C; // type:object size:0xC lbl_1_data_28 = .data:0x00000028; // type:object size:0xC lbl_1_data_34 = .data:0x00000034; // type:object size:0xC -lbl_1_data_40 = .data:0x00000040; // type:object size:0x23 data:string +lbl_1_data_40 = .data:0x00000040; // type:object size:0x23 scope:local data:string lbl_1_data_64 = .data:0x00000064; // type:object size:0x4 data:4byte lbl_1_data_68 = .data:0x00000068; // type:object size:0x420 data:float lbl_1_data_488 = .data:0x00000488; // type:object size:0x2C @@ -434,6 +434,7 @@ lbl_1_data_8C8 = .data:0x000008C8; // type:object size:0x9 data:string lbl_1_data_8D1 = .data:0x000008D1; // type:object size:0x7 data:string lbl_1_data_8D8 = .data:0x000008D8; // type:object size:0x60 lbl_1_data_938 = .data:0x00000938; // type:object size:0xB data:string +lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x288 diff --git a/configure.py b/configure.py index b761c7f8..83619991 100644 --- a/configure.py +++ b/configure.py @@ -1146,7 +1146,7 @@ config.libs = [ Rel( "m438Dll", # Chain Chomp Fever objects={ - Object(NonMatching, "REL/m438Dll/main.c"), + Object(MatchingFor("GMPE01_00"), "REL/m438Dll/main.c"), Object(NonMatching, "REL/m438Dll/map.c"), Object(NonMatching, "REL/m438Dll/fire.c"), }, diff --git a/src/REL/m438Dll/main.c b/src/REL/m438Dll/main.c index 2faac948..c7409d36 100644 --- a/src/REL/m438Dll/main.c +++ b/src/REL/m438Dll/main.c @@ -290,12 +290,13 @@ s16 lbl_1_bss_DAA[4]; s16 lbl_1_bss_DA8; s32 lbl_1_bss_DA4; void *lbl_1_bss_BA4[0x80]; -u32 lbl_1_bss_B98; +u32 lbl_1_bss_B98[3]; M438StructBss298 lbl_1_bss_298[48]; s32 lbl_1_bss_294; u16 lbl_1_bss_C[0x144]; s32 lbl_1_bss_8; s32 lbl_1_bss_4; +static u32 lbl_1_bss_0; void ObjectSetup(void) { @@ -458,7 +459,7 @@ void fn_1_974(omObjData *object) if (lbl_1_data_64 == -1 && (MGSeqStatGet(lbl_1_bss_DB6) & 0x10) != 0) { lbl_1_data_64 = HuAudSeqPlay(0x49); } - lbl_1_bss_B98 = 0x12C; + lbl_1_bss_B98[0] = 0x12C; break; case 7: var_r29 = 0; @@ -481,8 +482,8 @@ void fn_1_974(omObjData *object) } break; case 8: - if (lbl_1_bss_B98 != 0) { - lbl_1_bss_B98--; + if (lbl_1_bss_B98[0] != 0) { + lbl_1_bss_B98[0]--; } var_r24 = 0; for (var_r31 = 0; var_r31 < 4; var_r31++) { @@ -502,7 +503,7 @@ void fn_1_974(omObjData *object) } HuAudSeqFadeOut(lbl_1_data_64, 0x3C); } - else if ((MGSeqStatGet(lbl_1_bss_DB6) == 0) && (var_r24 == 0 || lbl_1_bss_B98 == 0)) { + else if ((MGSeqStatGet(lbl_1_bss_DB6) == 0) && (var_r24 == 0 || lbl_1_bss_B98[0] == 0)) { lbl_1_bss_DB6 = -1; lbl_1_bss_DB2 = 0x3C; lbl_1_bss_DBA += 1; @@ -3090,176 +3091,128 @@ Vec lbl_1_data_69C[9] = { s32 lbl_1_data_708[9] = { 0, -19, -18, -17, -1, 1, 0x11, 0x12, 0x13 }; s32 lbl_1_data_72C[9] = { 0, -38, -54, -34, -3, 3, 0x22, 0x36, 0x26 }; +s32 fn_1_AE18(u32 arg0, f32 arg8, Vec* arg1, Vec* arg2) { + s32 sp58[9]; + Vec sp4C; + Vec sp40; + Vec sp34; + Vec sp28; + Vec sp1C; + u8* sp18; + u32 sp14; + u32 sp10; + f32 var_f31; + f32 var_f30; + f32 var_f29; + f32 temp_f28; + s32 var_r31; + s32 var_r30; + u32 var_r29; + s32 var_r28; + u16* temp_r27; + s32 var_r26; + M438MainWork *var_r25; + u8* temp_r24; + s32 var_r23; + u8* var_r22; + u16* var_r21; + u32 var_r19; + u32 var_r18; + u8* temp_r17; -// s32 fn_1_AE18(u32 arg0, Vec *arg1, Vec *arg2) -// { -// Vec sp4C; -// float sp48; -// float sp44; -// float sp40; -// Vec sp34; -// float sp30; -// float sp2C; -// s32 sp28; -// Vec sp1C; -// void *sp18; -// u32 sp14; -// u32 sp10; -// Vec *spC; -// u32 sp8; -// Vec *var_r20; -// float temp_r0; -// float temp_r3; -// float var_f22; -// float var_f23; -// float var_f24; -// float var_f25; -// float var_f26; -// float var_f27; -// float var_f28; -// float var_f29; -// float var_f30; -// float var_f31; -// s32 var_r18; -// s32 var_r23; -// s32 var_r26; -// s32 var_r28; -// s32 var_r30; -// u16 *var_r21; -// u16 *var_r27; -// u16 var_r31; -// u32 temp_r3_2; -// u32 var_r19; -// u32 var_r29; -// u8 *var_r24; -// void *var_r17; -// void *var_r22; -// void *var_r25; + memset(lbl_1_bss_C, 0, 0x288); + sp40 = *arg1; + sp10 = 0.028235294f * (sp40.x - -850.0f); + sp14 = 0.028235294f * (sp40.z - -850.0f); + temp_r17 = &(&(*OM_GET_DATA_PTR(lbl_1_bss_DBC, M438UnkType))[sp10])[sp14 * 0x30]; + sp40.y = 0.0f; + *arg2 = sp40; + var_r25 = lbl_1_bss_DC4[arg0]->data; + temp_f28 = var_r25->unk_3C; + var_r19 = 0x2710; + var_r18 = 0; + + for (var_r30 = 0; var_r30 < 9; var_r30++) { + PSVECAdd(&sp40, &lbl_1_data_60C[var_r30], &sp34); + sp18 = temp_r17 + lbl_1_data_5E8[var_r30]; + (void)temp_r17; + var_r21 = &(&lbl_1_bss_C[lbl_1_data_708[var_r30]])[0xAB]; + var_f31 = 0.0f; + var_r29 = 0; + var_r22 = sp18; + sp28 = sp34; + + for (var_r23 = 0; var_r23 < 3; var_r23++) { + for (var_r28 = 0; var_r28 < 9; var_r28++) { + temp_r24 = var_r22 + lbl_1_data_5E8[var_r28]; + PSVECAdd(&sp28, &lbl_1_data_60C[var_r28], &sp4C); + if ((lbl_1_bss_DBC->data <= temp_r24) && (((u8*)lbl_1_bss_DBC->data + 0x900 > temp_r24) && (fabs(sp4C.x) < 850.0) && (fabs(sp4C.z) < 850.0))) { + var_f31++; + temp_r27 = &var_r21[lbl_1_data_708[var_r28]]; + if (*temp_r27 == 0) { + var_r31 = fn_1_A8FC(&sp4C, temp_f28); + var_r31 += *temp_r24; + var_f29 = 0.0f; + if (var_r31 < 0x3C) { + var_f29 = (1.0f / 60.0f) * (0x3C - var_r31); + } + var_f29 = 80.0f + (100.0f * (2.5f * var_f29)); + for (var_r26 = 0; var_r26 < 4; var_r26++) { + if (var_r26 != arg0) { + var_r25 = lbl_1_bss_DC4[var_r26]->data; + PSVECSubtract(&sp4C, &var_r25->unk_6C, &sp1C); + sp1C.y = 0.0f; + var_f30 = PSVECMag(&sp1C); + if (var_f30 < var_f29) { + var_f30 = var_f29 - var_f30; + var_f30 *= (40.0f / var_f29); + var_r31 += var_f30; + } + } + } + *temp_r27 = ++var_r31; + } else { + var_r31 = *temp_r27; + } + var_r29 += var_r31; + if ((var_r28 == 0) && (var_r23 == 0)) { + var_r29 += var_r31 * 3; + var_f31 += 3.0f; + } + } + } + PSVECAdd(&sp28, &lbl_1_data_69C[var_r30], &sp28); + var_r22 += lbl_1_data_678[var_r30]; + var_r21 = &var_r21[lbl_1_data_72C[var_r30]]; + var_f31 *= 2.0f; + var_r29 *= 2.0f; + } + if (var_f31 > 1.0f) { + var_r29 /= var_f31; + } + if (var_r19 > var_r29) { + var_r18 = var_r30; + var_r19 = var_r29; + *arg2 = sp34; + } + sp58[var_r30] = var_r29; + } + if (var_r18 != 0) { + return 1; + } + return 0; +} -// sp8 = arg0; -// spC = arg1; -// var_r20 = arg2; -// memset(lbl_1_bss_C, 0, 0x288); -// temp_r3 = arg1->x; -// sp40 = temp_r3; -// sp44 = arg1->y; -// temp_r0 = arg1->z; -// sp48 = temp_r0; -// temp_r3_2 = 0.028235294f * (sp40 - -850.0f); -// sp10 = temp_r3_2; -// sp14 = 0.028235294f * (sp48 - -850.0f); -// var_r17 = temp_r3_2 + (sp14 * 0x30); -// var_r17 += lbl_1_bss_DBC->data; -// sp44 = 0.0f; -// var_r20->x = temp_r3; -// var_r20->y = sp44; -// var_r20->z = temp_r0; -// var_r25 = lbl_1_bss_DC4[sp8]->data; -// var_f28 = var_r25->unk_3C; -// var_r19 = 0x2710; -// var_r18 = 0; -// for (var_r30 = 0; var_r30 < 9; var_r30++) { -// VECAdd(&sp40, &lbl_1_data_60C[var_r30], &sp34); -// sp18 = var_r17 + lbl_1_data_5E8[var_r30]; -// var_r21 = &lbl_1_bss_C[lbl_1_data_708[var_r30]] + 0x156; -// var_f31 = 0.0f; -// var_r29 = 0; -// var_r22 = sp18; -// sp28 = sp34; -// sp2C = sp34.y; -// sp30 = sp34.z; -// for (var_r23 = 0; var_r23 < 3; var_r23++) { -// for (var_r28 = 0; var_r28 < 9; var_r28++) { -// var_r24 = var_r22 + lbl_1_data_5E8[var_r28]; -// VECAdd(&sp28, &lbl_1_data_60C[var_r28], &sp4C); -// if ((lbl_1_bss_DBC->data <= var_r24) && ((lbl_1_bss_DBC->data + 0x900) > var_r24)) { -// var_f27 = sp4C; -// var_f25 = fabs(var_f27); -// var_f24 = var_f25; -// if (var_f24 < 850.0) { -// var_f26 = sp4C.z; -// var_f23 = fabs(var_f26); -// var_f22 = var_f23; -// if (var_f22 < 850.0) { -// var_f31 += 1.0f; -// var_r27 = &var_r21[lbl_1_data_708[var_r28]]; -// if (*var_r27 == 0) { -// var_r31 = fn_1_A8FC(&sp4C, var_f28); -// var_r31 += *var_r24; -// var_f29 = 0.0f; -// if (var_r31 < 0x3C) { -// var_f29 = 0.016666668f * (0x3C - var_r31); -// } -// var_f29 = 80.0f + (100.0f * (2.5f * var_f29)); -// for (var_r26 = 0; var_r26 < 4; var_r26++) { -// if (var_r26 != sp8) { -// var_r25 = lbl_1_bss_DC4[var_r26]->data; -// VECSubtract(&sp4C, var_r25 + 0x6C, &sp1C); -// sp1C.y = 0.0f; -// var_f30 = VECMag(&sp1C); -// if (var_f30 < var_f29) { -// var_f30 = var_f29 - var_f30; -// var_f30 *= 40.0f / var_f29; -// var_r31 = var_r31 + var_f30; -// } -// } -// } -// var_r31++; -// *var_r27 = var_r31; -// } -// else { -// var_r31 = *var_r27; -// } -// var_r29 += var_r31; -// if ((var_r28 == 0) && (var_r23 == 0)) { -// var_r29 += var_r31 * 3; -// var_f31 += 3.0f; -// } -// } -// } -// } -// } -// VECAdd(&sp28, &lbl_1_data_69C[var_r30], &sp28); -// var_r22 += lbl_1_data_678[var_r30]; -// var_r21 = &var_r21[lbl_1_data_72C[var_r30]]; -// var_f31 *= 2.0f; -// var_r29 = var_r29 * 2.0f; -// } -// if (var_f31 > 1.0f) { -// var_r29 = var_r29 / var_f31; -// } -// if (var_r19 > var_r29) { -// var_r18 = var_r30; -// var_r19 = var_r29; -// var_r20->x = sp34; -// var_r20->y = sp34.y; -// var_r20->z = sp34.z; -// } -// (&sp58[0])[var_r30] = var_r29; -// } -// if (var_r18 != 0) { -// return 1; -// } -// return 0; -// } - -// float fn_1_B440(Vec *arg0, Vec *arg1, Vec *arg2) -// { -// Vec sp10; -// Vec *spC; -// Vec *sp8; -// Vec *var_r31; -// float var_f30; -// float var_f31; - -// sp8 = arg0; -// spC = arg1; -// var_r31 = arg2; -// VECSubtract(spC, sp8, &sp10); -// var_f31 = VECDotProduct(&sp10, var_r31); -// var_f30 = -VECSquareMag(var_r31); -// if (var_f30 != 0.0f) { -// var_f31 /= var_f30; -// } -// return var_f31; -// } +f32 fn_1_B440(Vec* arg0, Vec* arg1, Vec* arg2) { + Vec sp10; + f32 temp_f30; + f32 var_f31; + + PSVECSubtract(arg1, arg0, &sp10); + var_f31 = PSVECDotProduct(&sp10, arg2); + temp_f30 = -PSVECSquareMag(arg2); + if (temp_f30 != 0.0f) { + var_f31 /= temp_f30; + } + return var_f31; +}