From d5f5d4c3b334ee1d0390196f3a781350b41f84ad Mon Sep 17 00:00:00 2001 From: jdflyer Date: Fri, 10 Feb 2023 23:02:39 -0700 Subject: [PATCH] m_Do_lib OK (#278) --- Progress.md | 8 +- .../m_Do_lib/mDoLib_pos2camera__FP3VecP3Vec.s | 25 --- .../m_Do_lib/mDoLib_project__FP3VecP3Vec.s | 131 ----------- ...j__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj.s | 87 ------- include/d/com/d_com_inf_game.h | 8 + include/d/d_drawlist.h | 4 + include/f_op/f_op_camera_mng.h | 2 +- include/m_Do/m_Do_lib.h | 6 +- include/m_Do/m_Do_mtx.h | 7 +- src/d/s/d_s_name.cpp | 2 +- src/m_Do/m_Do_lib.cpp | 212 +++++++----------- 11 files changed, 114 insertions(+), 378 deletions(-) delete mode 100644 asm/m_Do/m_Do_lib/mDoLib_pos2camera__FP3VecP3Vec.s delete mode 100644 asm/m_Do/m_Do_lib/mDoLib_project__FP3VecP3Vec.s delete mode 100644 asm/m_Do/m_Do_lib/mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj.s diff --git a/Progress.md b/Progress.md index d8e1940b209..c69e82882d4 100644 --- a/Progress.md +++ b/Progress.md @@ -7,22 +7,22 @@ Section | Percentage | Decompiled (bytes) | Total (bytes) .init | 97.972973% | 9280 | 9472 .extab | 100.000000% | 96 | 96 .extabindex | 100.000000% | 96 | 96 -.text | 24.311561% | 874376 | 3596544 +.text | 24.340478% | 875416 | 3596544 .ctors | 100.000000% | 448 | 448 .dtors | 100.000000% | 32 | 32 .rodata | 100.000000% | 193856 | 193856 .data | 100.000000% | 197632 | 197632 .sdata | 100.000000% | 1408 | 1408 .sdata2 | 100.000000% | 20832 | 20832 -Total | 32.290921% | 1298312 | 4020672 +Total | 32.316787% | 1299352 | 4020672 ## Total Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- -main.dol | 32.290921% | 1298312 | 4020672 +main.dol | 32.316787% | 1299352 | 4020672 RELs | 33.179309% | 3815728 | 11500324 -Total | 32.949174% | 5114040 | 15520996 +Total | 32.955875% | 5115080 | 15520996 ## RELs diff --git a/asm/m_Do/m_Do_lib/mDoLib_pos2camera__FP3VecP3Vec.s b/asm/m_Do/m_Do_lib/mDoLib_pos2camera__FP3VecP3Vec.s deleted file mode 100644 index afdaa6aa98d..00000000000 --- a/asm/m_Do/m_Do_lib/mDoLib_pos2camera__FP3VecP3Vec.s +++ /dev/null @@ -1,25 +0,0 @@ -lbl_800154EC: -/* 800154EC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 800154F0 7C 08 02 A6 */ mflr r0 -/* 800154F4 90 01 00 14 */ stw r0, 0x14(r1) -/* 800154F8 7C 60 1B 78 */ mr r0, r3 -/* 800154FC 7C 85 23 78 */ mr r5, r4 -/* 80015500 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80015504 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80015508 80 63 61 B0 */ lwz r3, 0x61b0(r3) -/* 8001550C 28 03 00 00 */ cmplwi r3, 0 -/* 80015510 40 82 00 18 */ bne lbl_80015528 -/* 80015514 C0 02 81 84 */ lfs f0, lit_3784(r2) -/* 80015518 D0 05 00 00 */ stfs f0, 0(r5) -/* 8001551C D0 05 00 04 */ stfs f0, 4(r5) -/* 80015520 D0 05 00 08 */ stfs f0, 8(r5) -/* 80015524 48 00 00 10 */ b lbl_80015534 -lbl_80015528: -/* 80015528 38 63 01 40 */ addi r3, r3, 0x140 -/* 8001552C 7C 04 03 78 */ mr r4, r0 -/* 80015530 48 33 18 3D */ bl PSMTXMultVec -lbl_80015534: -/* 80015534 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80015538 7C 08 03 A6 */ mtlr r0 -/* 8001553C 38 21 00 10 */ addi r1, r1, 0x10 -/* 80015540 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_lib/mDoLib_project__FP3VecP3Vec.s b/asm/m_Do/m_Do_lib/mDoLib_project__FP3VecP3Vec.s deleted file mode 100644 index 55156a1fc2b..00000000000 --- a/asm/m_Do/m_Do_lib/mDoLib_project__FP3VecP3Vec.s +++ /dev/null @@ -1,131 +0,0 @@ -lbl_80015310: -/* 80015310 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80015314 7C 08 02 A6 */ mflr r0 -/* 80015318 90 01 00 34 */ stw r0, 0x34(r1) -/* 8001531C 39 61 00 30 */ addi r11, r1, 0x30 -/* 80015320 48 34 CE BD */ bl _savegpr_29 -/* 80015324 7C 7D 1B 78 */ mr r29, r3 -/* 80015328 7C 9E 23 78 */ mr r30, r4 -/* 8001532C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80015330 3B E3 61 C0 */ addi r31, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80015334 80 7F 61 B0 */ lwz r3, 0x61b0(r31) -/* 80015338 28 03 00 00 */ cmplwi r3, 0 -/* 8001533C 40 82 00 18 */ bne lbl_80015354 -/* 80015340 C0 02 81 84 */ lfs f0, lit_3784(r2) -/* 80015344 D0 1E 00 00 */ stfs f0, 0(r30) -/* 80015348 D0 1E 00 04 */ stfs f0, 4(r30) -/* 8001534C D0 1E 00 08 */ stfs f0, 8(r30) -/* 80015350 48 00 01 84 */ b lbl_800154D4 -lbl_80015354: -/* 80015354 38 63 01 A0 */ addi r3, r3, 0x1a0 -/* 80015358 7F A4 EB 78 */ mr r4, r29 -/* 8001535C 38 A1 00 08 */ addi r5, r1, 8 -/* 80015360 48 33 1A 0D */ bl PSMTXMultVec -/* 80015364 80 7F 61 B0 */ lwz r3, 0x61b0(r31) -/* 80015368 C0 83 01 DC */ lfs f4, 0x1dc(r3) -/* 8001536C C0 3D 00 08 */ lfs f1, 8(r29) -/* 80015370 C0 03 01 D8 */ lfs f0, 0x1d8(r3) -/* 80015374 EC 61 00 32 */ fmuls f3, f1, f0 -/* 80015378 C0 3D 00 00 */ lfs f1, 0(r29) -/* 8001537C C0 03 01 D0 */ lfs f0, 0x1d0(r3) -/* 80015380 EC 41 00 32 */ fmuls f2, f1, f0 -/* 80015384 C0 3D 00 04 */ lfs f1, 4(r29) -/* 80015388 C0 03 01 D4 */ lfs f0, 0x1d4(r3) -/* 8001538C EC 01 00 32 */ fmuls f0, f1, f0 -/* 80015390 EC 02 00 2A */ fadds f0, f2, f0 -/* 80015394 EC 03 00 2A */ fadds f0, f3, f0 -/* 80015398 EC 44 00 2A */ fadds f2, f4, f0 -/* 8001539C C0 21 00 10 */ lfs f1, 0x10(r1) -/* 800153A0 C0 02 81 84 */ lfs f0, lit_3784(r2) -/* 800153A4 FC 01 00 40 */ fcmpo cr0, f1, f0 -/* 800153A8 4C 41 13 82 */ cror 2, 1, 2 -/* 800153AC 40 82 00 08 */ bne lbl_800153B4 -/* 800153B0 D0 01 00 10 */ stfs f0, 0x10(r1) -lbl_800153B4: -/* 800153B4 C0 02 81 84 */ lfs f0, lit_3784(r2) -/* 800153B8 FC 02 00 40 */ fcmpo cr0, f2, f0 -/* 800153BC 4C 40 13 82 */ cror 2, 0, 2 -/* 800153C0 40 82 00 3C */ bne lbl_800153FC -/* 800153C4 FC 00 10 00 */ fcmpu cr0, f0, f2 -/* 800153C8 40 82 00 18 */ bne lbl_800153E0 -/* 800153CC C0 22 81 88 */ lfs f1, lit_3785(r2) -/* 800153D0 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 800153D4 EC 01 00 32 */ fmuls f0, f1, f0 -/* 800153D8 D0 1E 00 08 */ stfs f0, 8(r30) -/* 800153DC 48 00 00 18 */ b lbl_800153F4 -lbl_800153E0: -/* 800153E0 C0 21 00 10 */ lfs f1, 0x10(r1) -/* 800153E4 C0 02 81 8C */ lfs f0, lit_3786(r2) -/* 800153E8 EC 00 10 24 */ fdivs f0, f0, f2 -/* 800153EC EC 01 00 32 */ fmuls f0, f1, f0 -/* 800153F0 D0 1E 00 08 */ stfs f0, 8(r30) -lbl_800153F4: -/* 800153F4 C0 62 81 88 */ lfs f3, lit_3785(r2) -/* 800153F8 48 00 00 18 */ b lbl_80015410 -lbl_800153FC: -/* 800153FC C0 02 81 8C */ lfs f0, lit_3786(r2) -/* 80015400 EC 60 10 24 */ fdivs f3, f0, f2 -/* 80015404 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 80015408 EC 00 00 F2 */ fmuls f0, f0, f3 -/* 8001540C D0 1E 00 08 */ stfs f0, 8(r30) -lbl_80015410: -/* 80015410 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80015414 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80015418 80 63 61 AC */ lwz r3, 0x61ac(r3) -/* 8001541C C0 02 81 84 */ lfs f0, lit_3784(r2) -/* 80015420 C0 23 00 00 */ lfs f1, 0(r3) -/* 80015424 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 80015428 41 82 00 2C */ beq lbl_80015454 -/* 8001542C C0 42 81 8C */ lfs f2, lit_3786(r2) -/* 80015430 C0 02 81 90 */ lfs f0, lit_3787(r2) -/* 80015434 EC 20 00 72 */ fmuls f1, f0, f1 -/* 80015438 C0 03 00 08 */ lfs f0, 8(r3) -/* 8001543C EC 01 00 2A */ fadds f0, f1, f0 -/* 80015440 EC 22 00 32 */ fmuls f1, f2, f0 -/* 80015444 C0 02 81 94 */ lfs f0, lit_3788(r2) -/* 80015448 EC 81 00 28 */ fsubs f4, f1, f0 -/* 8001544C C0 C2 81 98 */ lfs f6, lit_3789(r2) -/* 80015450 48 00 00 0C */ b lbl_8001545C -lbl_80015454: -/* 80015454 FC 80 08 90 */ fmr f4, f1 -/* 80015458 C0 C3 00 08 */ lfs f6, 8(r3) -lbl_8001545C: -/* 8001545C C0 02 81 84 */ lfs f0, lit_3784(r2) -/* 80015460 C0 23 00 04 */ lfs f1, 4(r3) -/* 80015464 FC 00 08 00 */ fcmpu cr0, f0, f1 -/* 80015468 41 82 00 2C */ beq lbl_80015494 -/* 8001546C C0 42 81 8C */ lfs f2, lit_3786(r2) -/* 80015470 C0 02 81 90 */ lfs f0, lit_3787(r2) -/* 80015474 EC 20 00 72 */ fmuls f1, f0, f1 -/* 80015478 C0 03 00 0C */ lfs f0, 0xc(r3) -/* 8001547C EC 01 00 2A */ fadds f0, f1, f0 -/* 80015480 EC 22 00 32 */ fmuls f1, f2, f0 -/* 80015484 C0 02 81 9C */ lfs f0, lit_3790(r2) -/* 80015488 EC A1 00 28 */ fsubs f5, f1, f0 -/* 8001548C C0 E2 81 A0 */ lfs f7, lit_3791(r2) -/* 80015490 48 00 00 0C */ b lbl_8001549C -lbl_80015494: -/* 80015494 FC A0 08 90 */ fmr f5, f1 -/* 80015498 C0 E3 00 0C */ lfs f7, 0xc(r3) -lbl_8001549C: -/* 8001549C C0 42 81 8C */ lfs f2, lit_3786(r2) -/* 800154A0 C0 01 00 08 */ lfs f0, 8(r1) -/* 800154A4 EC 00 00 F2 */ fmuls f0, f0, f3 -/* 800154A8 EC 02 00 2A */ fadds f0, f2, f0 -/* 800154AC EC 06 00 32 */ fmuls f0, f6, f0 -/* 800154B0 EC 04 00 2A */ fadds f0, f4, f0 -/* 800154B4 D0 1E 00 00 */ stfs f0, 0(r30) -/* 800154B8 C0 21 00 0C */ lfs f1, 0xc(r1) -/* 800154BC FC 00 18 50 */ fneg f0, f3 -/* 800154C0 EC 01 00 32 */ fmuls f0, f1, f0 -/* 800154C4 EC 02 00 2A */ fadds f0, f2, f0 -/* 800154C8 EC 07 00 32 */ fmuls f0, f7, f0 -/* 800154CC EC 05 00 2A */ fadds f0, f5, f0 -/* 800154D0 D0 1E 00 04 */ stfs f0, 4(r30) -lbl_800154D4: -/* 800154D4 39 61 00 30 */ addi r11, r1, 0x30 -/* 800154D8 48 34 CD 51 */ bl _restgpr_29 -/* 800154DC 80 01 00 34 */ lwz r0, 0x34(r1) -/* 800154E0 7C 08 03 A6 */ mtlr r0 -/* 800154E4 38 21 00 30 */ addi r1, r1, 0x30 -/* 800154E8 4E 80 00 20 */ blr diff --git a/asm/m_Do/m_Do_lib/mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj.s b/asm/m_Do/m_Do_lib/mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj.s deleted file mode 100644 index 8bbe509c383..00000000000 --- a/asm/m_Do/m_Do_lib/mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj.s +++ /dev/null @@ -1,87 +0,0 @@ -lbl_8001513C: -/* 8001513C 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 80015140 7C 08 02 A6 */ mflr r0 -/* 80015144 90 01 00 44 */ stw r0, 0x44(r1) -/* 80015148 39 61 00 40 */ addi r11, r1, 0x40 -/* 8001514C 48 34 D0 91 */ bl _savegpr_29 -/* 80015150 7C 7F 1B 78 */ mr r31, r3 -/* 80015154 7C 9D 23 78 */ mr r29, r4 -/* 80015158 7C BE 2B 78 */ mr r30, r5 -/* 8001515C 88 03 00 08 */ lbz r0, 8(r3) -/* 80015160 28 00 00 00 */ cmplwi r0, 0 -/* 80015164 41 82 00 54 */ beq lbl_800151B8 -/* 80015168 7C C3 33 78 */ mr r3, r6 -/* 8001516C 80 1F 00 0C */ lwz r0, 0xc(r31) -/* 80015170 7C 9F 02 14 */ add r4, r31, r0 -/* 80015174 88 BF 00 09 */ lbz r5, 9(r31) -/* 80015178 A0 DF 00 0A */ lhz r6, 0xa(r31) -/* 8001517C 48 34 92 ED */ bl GXInitTlutObj -/* 80015180 93 C1 00 08 */ stw r30, 8(r1) -/* 80015184 7F A3 EB 78 */ mr r3, r29 -/* 80015188 80 1F 00 1C */ lwz r0, 0x1c(r31) -/* 8001518C 7C 9F 02 14 */ add r4, r31, r0 -/* 80015190 A0 BF 00 02 */ lhz r5, 2(r31) -/* 80015194 A0 DF 00 04 */ lhz r6, 4(r31) -/* 80015198 88 FF 00 00 */ lbz r7, 0(r31) -/* 8001519C 89 1F 00 06 */ lbz r8, 6(r31) -/* 800151A0 89 3F 00 07 */ lbz r9, 7(r31) -/* 800151A4 88 1F 00 18 */ lbz r0, 0x18(r31) -/* 800151A8 20 00 00 01 */ subfic r0, r0, 1 -/* 800151AC 54 0A 0F FE */ srwi r10, r0, 0x1f -/* 800151B0 48 34 8E DD */ bl GXInitTexObjCI -/* 800151B4 48 00 00 34 */ b lbl_800151E8 -lbl_800151B8: -/* 800151B8 7F A3 EB 78 */ mr r3, r29 -/* 800151BC 80 1F 00 1C */ lwz r0, 0x1c(r31) -/* 800151C0 7C 9F 02 14 */ add r4, r31, r0 -/* 800151C4 A0 BF 00 02 */ lhz r5, 2(r31) -/* 800151C8 A0 DF 00 04 */ lhz r6, 4(r31) -/* 800151CC 88 FF 00 00 */ lbz r7, 0(r31) -/* 800151D0 89 1F 00 06 */ lbz r8, 6(r31) -/* 800151D4 89 3F 00 07 */ lbz r9, 7(r31) -/* 800151D8 88 1F 00 18 */ lbz r0, 0x18(r31) -/* 800151DC 20 00 00 01 */ subfic r0, r0, 1 -/* 800151E0 54 0A 0F FE */ srwi r10, r0, 0x1f -/* 800151E4 48 34 8C 5D */ bl GXInitTexObj -lbl_800151E8: -/* 800151E8 7F A3 EB 78 */ mr r3, r29 -/* 800151EC 88 9F 00 14 */ lbz r4, 0x14(r31) -/* 800151F0 88 BF 00 15 */ lbz r5, 0x15(r31) -/* 800151F4 C0 42 81 70 */ lfs f2, lit_3634(r2) -/* 800151F8 88 1F 00 16 */ lbz r0, 0x16(r31) -/* 800151FC 7C 00 07 74 */ extsb r0, r0 -/* 80015200 C8 82 81 78 */ lfd f4, lit_3638(r2) -/* 80015204 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 80015208 90 01 00 14 */ stw r0, 0x14(r1) -/* 8001520C 3C C0 43 30 */ lis r6, 0x4330 -/* 80015210 90 C1 00 10 */ stw r6, 0x10(r1) -/* 80015214 C8 01 00 10 */ lfd f0, 0x10(r1) -/* 80015218 EC 00 20 28 */ fsubs f0, f0, f4 -/* 8001521C EC 22 00 32 */ fmuls f1, f2, f0 -/* 80015220 88 1F 00 17 */ lbz r0, 0x17(r31) -/* 80015224 7C 00 07 74 */ extsb r0, r0 -/* 80015228 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 8001522C 90 01 00 1C */ stw r0, 0x1c(r1) -/* 80015230 90 C1 00 18 */ stw r6, 0x18(r1) -/* 80015234 C8 01 00 18 */ lfd f0, 0x18(r1) -/* 80015238 EC 00 20 28 */ fsubs f0, f0, f4 -/* 8001523C EC 42 00 32 */ fmuls f2, f2, f0 -/* 80015240 C0 62 81 74 */ lfs f3, lit_3635(r2) -/* 80015244 A8 1F 00 1A */ lha r0, 0x1a(r31) -/* 80015248 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 8001524C 90 01 00 24 */ stw r0, 0x24(r1) -/* 80015250 90 C1 00 20 */ stw r6, 0x20(r1) -/* 80015254 C8 01 00 20 */ lfd f0, 0x20(r1) -/* 80015258 EC 00 20 28 */ fsubs f0, f0, f4 -/* 8001525C EC 63 00 32 */ fmuls f3, f3, f0 -/* 80015260 88 DF 00 12 */ lbz r6, 0x12(r31) -/* 80015264 88 FF 00 11 */ lbz r7, 0x11(r31) -/* 80015268 89 1F 00 13 */ lbz r8, 0x13(r31) -/* 8001526C 48 34 8E 69 */ bl GXInitTexObjLOD -/* 80015270 88 7F 00 08 */ lbz r3, 8(r31) -/* 80015274 39 61 00 40 */ addi r11, r1, 0x40 -/* 80015278 48 34 CF B1 */ bl _restgpr_29 -/* 8001527C 80 01 00 44 */ lwz r0, 0x44(r1) -/* 80015280 7C 08 03 A6 */ mtlr r0 -/* 80015284 38 21 00 40 */ addi r1, r1, 0x40 -/* 80015288 4E 80 00 20 */ blr diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index e520e4639b3..6e8f6ebd0fc 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -2800,6 +2800,14 @@ inline view_class* dComIfGd_getView() { return g_dComIfG_gameInfo.drawlist.getView(); } +inline Mtx44* dComIfGd_getProjViewMtx() { + return &(((camera_class*)g_dComIfG_gameInfo.drawlist.getView())->mProjViewMtx); +} + +inline view_port_class* dComIfGd_getViewport() { + return g_dComIfG_gameInfo.drawlist.getViewport(); +} + inline MtxP dComIfGd_getViewRotMtx() { return ((camera_process_class*)g_dComIfG_gameInfo.drawlist.getView())->mViewMtxNoTrans; } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 51bea81b875..11384960ec7 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -331,6 +331,10 @@ public: mPeekZ.newData(param_0, param_1, param_2); } + view_port_class* getViewport() { + return mViewport; + } + static void offWipe() { mWipe = 0; } static f32 getWipeRate() { return mWipeRate; } diff --git a/include/f_op/f_op_camera_mng.h b/include/f_op/f_op_camera_mng.h index f8aa17bf876..2105e2e087a 100644 --- a/include/f_op/f_op_camera_mng.h +++ b/include/f_op/f_op_camera_mng.h @@ -13,7 +13,7 @@ class camera_process_class : public view_class { public: /* 0x170 */ Mtx mInvViewMtx; - /* 0x1A0 */ Mtx44 field_0x1a0; + /* 0x1A0 */ Mtx44 mProjViewMtx; /* 0x1E0 */ Mtx mViewMtxNoTrans; /* 0x210 */ create_tag_class mCreateTag; /* 0x224 */ leafdraw_method_class* mpMtd; diff --git a/include/m_Do/m_Do_lib.h b/include/m_Do/m_Do_lib.h index 568000f1b4e..66923702f9d 100644 --- a/include/m_Do/m_Do_lib.h +++ b/include/m_Do/m_Do_lib.h @@ -22,9 +22,9 @@ struct mDoLib_clipper { static f32 mFovyRate; }; -void mDoLib_project(Vec* param_0, Vec* param_1); -bool mDoLib_setResTimgObj(ResTIMG const* res, GXTexObj* o_texObj, u32 param_2, +void mDoLib_project(Vec* src, Vec* dst); +u8 mDoLib_setResTimgObj(ResTIMG const* res, GXTexObj* o_texObj, u32 tlut_name, GXTlutObj* o_tlutObj); -void mDoLib_pos2camera(Vec* param_0, Vec* param_1); +void mDoLib_pos2camera(Vec* src, Vec* dst); #endif /* M_DO_M_DO_LIB_H */ diff --git a/include/m_Do/m_Do_mtx.h b/include/m_Do/m_Do_mtx.h index a2612c24980..a415fd414d4 100644 --- a/include/m_Do/m_Do_mtx.h +++ b/include/m_Do/m_Do_mtx.h @@ -53,6 +53,9 @@ inline void cMtx_ZrotM(Mtx mtx, s16 z) { mDoMtx_ZrotM(mtx, z); } +inline void cMtx_multVec(Mtx mtx, const Vec* src, Vec* dst) { + mDoMtx_multVec(mtx, src, dst); +} inline void mDoMtx_multVecZero(MtxP param_0, Vec* param_1) { param_1->x = param_0[0][3]; @@ -83,7 +86,9 @@ public: static void multVec(const Vec* a, Vec* b) { PSMTXMultVec(now, a, b); } static void multVecSR(const Vec* a, Vec* b) { PSMTXMultVecSR(now, a, b); } static void multVecZero(Vec* v) { mDoMtx_multVecZero(now, v); } - static void multVecArray(const Vec* src, Vec* dst, u32 count) { PSMTXMultVecArray(now, src, dst, count); } + static void multVecArray(const Vec* src, Vec* dst, u32 count) { + PSMTXMultVecArray(now, src, dst, count); + } static void XYZrotS(s16 x, s16 y, s16 z) { mDoMtx_XYZrotS(now, x, y, z); } static void XYZrotM(s16 x, s16 y, s16 z) { mDoMtx_XYZrotM(now, x, y, z); } static void ZXYrotS(s16 x, s16 y, s16 z) { mDoMtx_ZXYrotS(now, x, y, z); } diff --git a/src/d/s/d_s_name.cpp b/src/d/s/d_s_name.cpp index 375268dfd77..b181e2470d2 100644 --- a/src/d/s/d_s_name.cpp +++ b/src/d/s/d_s_name.cpp @@ -398,7 +398,7 @@ void dScnName_c::setView() { mCamera.mViewMtxNoTrans[1][3] = tmp_0; mCamera.mViewMtxNoTrans[2][3] = tmp_0; PSMTXCopy(mCamera.mViewMtx, j3dSys.mViewMtx); - mDoMtx_concatProjView(mCamera.mProjMtx, mCamera.mViewMtx, mCamera.field_0x1a0); + mDoMtx_concatProjView(mCamera.mProjMtx, mCamera.mViewMtx, mCamera.mProjViewMtx); } /* 80258BC8-80258C5C 253508 0094+00 1/1 0/0 0/0 .text execute__10dScnName_cFv */ diff --git a/src/m_Do/m_Do_lib.cpp b/src/m_Do/m_Do_lib.cpp index 6a313f6314d..83ddd09d4aa 100644 --- a/src/m_Do/m_Do_lib.cpp +++ b/src/m_Do/m_Do_lib.cpp @@ -1,89 +1,40 @@ -// -// Generated By: dol2asm -// Translation Unit: m_Do/m_Do_lib -// +/** + * m_Do_lib.cpp + * View and Projection Matrix Helper Functions + */ #include "m_Do/m_Do_lib.h" #include "JSystem/JMath/JMATrigonometric.h" #include "JSystem/JUtility/JUTTexture.h" #include "SSystem/SComponent/c_math.h" +#include "d/com/d_com_inf_game.h" #include "dol2asm.h" #include "dolphin/types.h" -// -// Forward References: -// - -extern "C" void mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj(); -extern "C" void setup__14mDoLib_clipperFffff(); -extern "C" void mDoLib_project__FP3VecP3Vec(); -extern "C" void mDoLib_pos2camera__FP3VecP3Vec(); -extern "C" void __sinit_m_Do_lib_cpp(); -extern "C" void __dt__11J3DUClipperFv(); -extern "C" u8 mClipper__14mDoLib_clipper[92]; -extern "C" f32 mSystemFar__14mDoLib_clipper; -extern "C" f32 mFovyRate__14mDoLib_clipper; - -// -// External References: -// - -extern "C" void init__11J3DUClipperFv(); -extern "C" void calcViewFrustum__11J3DUClipperFv(); -extern "C" void __dl__FPv(); -extern "C" void __register_global_object(); -extern "C" void _savegpr_29(); -extern "C" void _restgpr_29(); -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80451B70-80451B74 000170 0004+00 1/1 0/0 0/0 .sdata2 @3634 */ -SECTION_SDATA2 static f32 lit_3634 = 0.125f; - -/* 80451B74-80451B78 000174 0004+00 1/1 0/0 0/0 .sdata2 @3635 */ -SECTION_SDATA2 static f32 lit_3635 = 1.0f / 100.0f; - -/* 80451B78-80451B80 000178 0008+00 1/1 0/0 0/0 .sdata2 @3638 */ -SECTION_SDATA2 static f64 lit_3638 = 4503601774854144.0 /* cast s32 to float */; - /* 8001513C-8001528C 00FA7C 0150+00 0/0 3/3 2/2 .text * mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj */ -#ifdef NONMATCHING -bool mDoLib_setResTimgObj(ResTIMG const* res, _GXTexObj* o_texObj, u32 param_2, - _GXTlutObj* o_tlutObj) { - if (res->indexTexture) { - GXInitTlutObj(o_tlutObj, (void*)(res + res->paletteOffset), (GXTlutFmt)res->colorFormat, - res->numColors); - GXInitTexObjCI(o_texObj, (void*)(res + res->imageOffset), res->width, res->height, - (GXCITexFmt)res->format, (GXTexWrapMode)res->wrapS, - (GXTexWrapMode)res->wrapT, 1 - res->mipmapCount, param_2); - } else { - GXInitTexObj(o_texObj, (void*)(res + res->imageOffset), res->width, res->height, - (GXTexFmt)res->format, (GXTexWrapMode)res->wrapS, (GXTexWrapMode)res->wrapT, - (s32)1 - res->mipmapCount); - } - GXInitTexObjLOD(o_texObj, (GXTexFilter)res->minFilter, (GXTexFilter)res->magFilter, - (f32)res->minLOD * 0.125f, (f32)res->maxLOD * 0.125f, (f32)res->LODBias * 0.01f, - (s32)res->biasClamp, (s32)res->doEdgeLOD, (GXAnisotropy)res->maxAnisotropy); +u8 mDoLib_setResTimgObj(ResTIMG const* res, _GXTexObj* o_texObj, u32 tlut_name, + _GXTlutObj* o_tlutObj) { + ResTIMG* _res = (ResTIMG*)res; - return res->indexTexture; + if (_res->indexTexture) { + GXInitTlutObj(o_tlutObj, (void*)((u8*)_res + _res->paletteOffset), + (GXTlutFmt)_res->colorFormat, _res->numColors); + GXInitTexObjCI(o_texObj, (void*)((u8*)_res + _res->imageOffset), _res->width, _res->height, + (GXCITexFmt)_res->format, (GXTexWrapMode)_res->wrapS, + (GXTexWrapMode)_res->wrapT, _res->mipmapCount > 1, tlut_name); + } else { + GXInitTexObj(o_texObj, (void*)((u8*)_res + _res->imageOffset), _res->width, _res->height, + (GXTexFmt)_res->format, (GXTexWrapMode)_res->wrapS, (GXTexWrapMode)_res->wrapT, + _res->mipmapCount > 1); + } + GXInitTexObjLOD(o_texObj, (GXTexFilter)_res->minFilter, (GXTexFilter)_res->magFilter, + (f32)_res->minLOD * 0.125f, (f32)_res->maxLOD * 0.125f, + (f32)_res->LODBias * 0.01f, (s32)_res->biasClamp, (s32)_res->doEdgeLOD, + (GXAnisotropy)_res->maxAnisotropy); + + return _res->indexTexture; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool mDoLib_setResTimgObj(ResTIMG const* param_0, _GXTexObj* param_1, u32 param_2, - _GXTlutObj* param_3) { - nofralloc -#include "asm/m_Do/m_Do_lib/mDoLib_setResTimgObj__FPC7ResTIMGP9_GXTexObjUlP10_GXTlutObj.s" -} -#pragma pop -#endif /* 803DD8E4-803DD940 00A604 005C+00 2/2 5/5 5/5 .bss mClipper__14mDoLib_clipper */ J3DUClipper mDoLib_clipper::mClipper; @@ -94,9 +45,6 @@ f32 mDoLib_clipper::mSystemFar; /* 80450C74-80450C78 000174 0004+00 1/1 1/1 0/0 .sbss mFovyRate__14mDoLib_clipper */ f32 mDoLib_clipper::mFovyRate; -/* 80451B80-80451B84 000180 0004+00 1/1 0/0 0/0 .sdata2 @3739 */ -SECTION_SDATA2 static f32 lit_3739 = 182.04444885253906f; - /* 8001528C-80015310 00FBCC 0084+00 0/0 1/1 0/0 .text setup__14mDoLib_clipperFffff */ void mDoLib_clipper::setup(f32 fovy, f32 aspect, f32 near, f32 far) { mClipper.setFovy(fovy); @@ -111,56 +59,70 @@ void mDoLib_clipper::setup(f32 fovy, f32 aspect, f32 near, f32 far) { mFovyRate = cM_scos(tmp) / cM_ssin(tmp); } -/* ############################################################################################## */ -/* 80451B84-80451B88 000184 0004+00 2/2 0/0 0/0 .sdata2 @3784 */ -SECTION_SDATA2 static u8 lit_3784[4] = { - 0x00, - 0x00, - 0x00, - 0x00, -}; - -/* 80451B88-80451B8C 000188 0004+00 1/1 0/0 0/0 .sdata2 @3785 */ -SECTION_SDATA2 static f32 lit_3785 = 500000.0f; - -/* 80451B8C-80451B90 00018C 0004+00 1/1 0/0 0/0 .sdata2 @3786 */ -SECTION_SDATA2 static f32 lit_3786 = 0.5f; - -/* 80451B90-80451B94 000190 0004+00 1/1 0/0 0/0 .sdata2 @3787 */ -SECTION_SDATA2 static f32 lit_3787 = 2.0f; - -/* 80451B94-80451B98 000194 0004+00 1/1 0/0 0/0 .sdata2 @3788 */ -SECTION_SDATA2 static f32 lit_3788 = 304.0f; - -/* 80451B98-80451B9C 000198 0004+00 1/1 0/0 0/0 .sdata2 @3789 */ -SECTION_SDATA2 static f32 lit_3789 = 608.0f; - -/* 80451B9C-80451BA0 00019C 0004+00 1/1 0/0 0/0 .sdata2 @3790 */ -SECTION_SDATA2 static f32 lit_3790 = 224.0f; - -/* 80451BA0-80451BA8 0001A0 0004+04 1/1 0/0 0/0 .sdata2 @3791 */ -SECTION_SDATA2 static f32 lit_3791[1 + 1 /* padding */] = { - 448.0f, - /* padding */ - 0.0f, -}; - /* 80015310-800154EC 00FC50 01DC+00 0/0 21/21 23/23 .text mDoLib_project__FP3VecP3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoLib_project(Vec* param_0, Vec* param_1) { - nofralloc -#include "asm/m_Do/m_Do_lib/mDoLib_project__FP3VecP3Vec.s" +void mDoLib_project(Vec* src, Vec* dst) { + if (dComIfGd_getView() == NULL) { + dst->x = 0.0f; + dst->y = 0.0f; + dst->z = 0.0f; + return; + } + Mtx44* projMtx = dComIfGd_getProjViewMtx(); + Vec multVec; + cMtx_multVec(*projMtx, src, &multVec); + + float calcFloat = (src->x * (*dComIfGd_getProjViewMtx())[3][0]) + + (src->y * (*dComIfGd_getProjViewMtx())[3][1]) + + (src->z * (*dComIfGd_getProjViewMtx())[3][2]) + + (*dComIfGd_getProjViewMtx())[3][3]; + if (multVec.z >= 0.0f) { + multVec.z = 0.0f; + } + float f3; + if (calcFloat <= 0.0f) { + if (calcFloat == 0.0f) { + dst->z = multVec.z * 500000.0f; + } else { + dst->z = multVec.z * (0.5f / calcFloat); + } + f3 = 500000.0f; + } else { + f3 = 0.5f / calcFloat; + dst->z = multVec.z * f3; + } + + view_port_class* viewPort = dComIfGd_getViewport(); + float xOffset; + float yOffset; + float xSize; + float ySize; + if (viewPort->mXOrig != 0.0f) { + xOffset = (0.5f * ((2.0f * viewPort->mXOrig) + viewPort->mWidth)) - 304.0f; + xSize = 608.0f; + } else { + xOffset = viewPort->mXOrig; + xSize = viewPort->mWidth; + } + + if (viewPort->mYOrig != 0.0f) { + yOffset = (0.5f * ((2.0f * viewPort->mYOrig) + viewPort->mHeight)) - 224.0f; + ySize = 448.0f; + } else { + yOffset = viewPort->mYOrig; + ySize = viewPort->mHeight; + } + + dst->x = ((0.5f + (multVec.x * f3)) * xSize) + xOffset; + dst->y = ((0.5f + (multVec.y * (-f3))) * ySize) + yOffset; } -#pragma pop /* 800154EC-80015544 00FE2C 0058+00 0/0 2/2 9/9 .text mDoLib_pos2camera__FP3VecP3Vec */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void mDoLib_pos2camera(Vec* param_0, Vec* param_1) { - nofralloc -#include "asm/m_Do/m_Do_lib/mDoLib_pos2camera__FP3VecP3Vec.s" +void mDoLib_pos2camera(Vec* src, Vec* dst) { + if (dComIfGd_getView() == NULL) { + dst->x = 0.0f; + dst->y = 0.0f; + dst->z = 0.0f; + return; + } + cMtx_multVec(dComIfGd_getView()->mViewMtx, src, dst); } -#pragma pop \ No newline at end of file