From 19e3defe5bab0ac94af7b8d836979c6becc6d499 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Sun, 14 Jul 2024 15:29:24 +0300 Subject: [PATCH] A little work on d_stage (#2178) --- Progress.md | 8 +- ...Proc__FP11dStage_dt_cP16stage_tgsc_class.s | 60 ------- ...Proc__FP11dStage_dt_cP16stage_tgsc_class.s | 67 -------- ...Stage_rpatInfoInit__FP11dStage_dt_cPviPv.s | 44 ----- .../loadRoom__20dStage_roomControl_cFiPUcb.s | 145 ----------------- include/d/d_stage.h | 8 +- src/d/d_stage.cpp | 154 +++++++++++++----- src/d/map/d_map_path_dmap.cpp | 4 +- 8 files changed, 127 insertions(+), 363 deletions(-) delete mode 100644 asm/d/d_stage/dStage_KeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s delete mode 100644 asm/d/d_stage/dStage_RoomKeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s delete mode 100644 asm/d/d_stage/dStage_rpatInfoInit__FP11dStage_dt_cPviPv.s delete mode 100644 asm/d/d_stage/loadRoom__20dStage_roomControl_cFiPUcb.s diff --git a/Progress.md b/Progress.md index b690a443a5d..e00890458bf 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 | 50.765513% | 1825804 | 3596544 +.text | 50.837804% | 1828404 | 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 | 55.954328% | 2249740 | 4020672 +Total | 56.018994% | 2252340 | 4020672 ## Total Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- -main.dol | 55.954328% | 2249740 | 4020672 +main.dol | 56.018994% | 2252340 | 4020672 RELs | 39.260076% | 4515036 | 11500324 -Total | 43.584677% | 6764776 | 15520996 +Total | 43.601429% | 6767376 | 15520996 ## RELs diff --git a/asm/d/d_stage/dStage_KeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s b/asm/d/d_stage/dStage_KeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s deleted file mode 100644 index 1adb446bbf2..00000000000 --- a/asm/d/d_stage/dStage_KeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s +++ /dev/null @@ -1,60 +0,0 @@ -lbl_80023F84: -/* 80023F84 28 04 00 00 */ cmplwi r4, 0 -/* 80023F88 40 82 00 14 */ bne lbl_80023F9C -/* 80023F8C 38 00 00 00 */ li r0, 0 -/* 80023F90 3C 60 80 3F */ lis r3, DoorInfo@ha /* 0x803F4E74@ha */ -/* 80023F94 90 03 4E 74 */ stw r0, DoorInfo@l(r3) /* 0x803F4E74@l */ -/* 80023F98 4E 80 00 20 */ blr -lbl_80023F9C: -/* 80023F9C 80 04 00 00 */ lwz r0, 0(r4) -/* 80023FA0 2C 00 00 40 */ cmpwi r0, 0x40 -/* 80023FA4 40 80 00 0C */ bge lbl_80023FB0 -/* 80023FA8 2C 00 00 00 */ cmpwi r0, 0 -/* 80023FAC 40 80 00 14 */ bge lbl_80023FC0 -lbl_80023FB0: -/* 80023FB0 38 00 00 00 */ li r0, 0 -/* 80023FB4 3C 60 80 3F */ lis r3, DoorInfo@ha /* 0x803F4E74@ha */ -/* 80023FB8 90 03 4E 74 */ stw r0, DoorInfo@l(r3) /* 0x803F4E74@l */ -/* 80023FBC 4E 80 00 20 */ blr -lbl_80023FC0: -/* 80023FC0 3C 60 80 3F */ lis r3, DoorInfo@ha /* 0x803F4E74@ha */ -/* 80023FC4 38 A3 4E 74 */ addi r5, r3, DoorInfo@l /* 0x803F4E74@l */ -/* 80023FC8 90 05 00 00 */ stw r0, 0(r5) -/* 80023FCC 4D 82 00 20 */ beqlr -/* 80023FD0 80 84 00 04 */ lwz r4, 4(r4) -/* 80023FD4 38 C5 00 04 */ addi r6, r5, 4 -/* 80023FD8 38 E0 00 00 */ li r7, 0 -/* 80023FDC 48 00 00 70 */ b lbl_8002404C -lbl_80023FE0: -/* 80023FE0 80 64 00 00 */ lwz r3, 0(r4) -/* 80023FE4 80 04 00 04 */ lwz r0, 4(r4) -/* 80023FE8 90 66 00 00 */ stw r3, 0(r6) -/* 80023FEC 90 06 00 04 */ stw r0, 4(r6) -/* 80023FF0 80 04 00 08 */ lwz r0, 8(r4) -/* 80023FF4 90 06 00 08 */ stw r0, 8(r6) -/* 80023FF8 C0 04 00 0C */ lfs f0, 0xc(r4) -/* 80023FFC D0 06 00 0C */ stfs f0, 0xc(r6) -/* 80024000 C0 04 00 10 */ lfs f0, 0x10(r4) -/* 80024004 D0 06 00 10 */ stfs f0, 0x10(r6) -/* 80024008 C0 04 00 14 */ lfs f0, 0x14(r4) -/* 8002400C D0 06 00 14 */ stfs f0, 0x14(r6) -/* 80024010 A8 04 00 18 */ lha r0, 0x18(r4) -/* 80024014 B0 06 00 18 */ sth r0, 0x18(r6) -/* 80024018 A8 04 00 1A */ lha r0, 0x1a(r4) -/* 8002401C B0 06 00 1A */ sth r0, 0x1a(r6) -/* 80024020 A8 04 00 1C */ lha r0, 0x1c(r4) -/* 80024024 B0 06 00 1C */ sth r0, 0x1c(r6) -/* 80024028 A0 04 00 1E */ lhz r0, 0x1e(r4) -/* 8002402C B0 06 00 1E */ sth r0, 0x1e(r6) -/* 80024030 A0 04 00 20 */ lhz r0, 0x20(r4) -/* 80024034 B0 06 00 20 */ sth r0, 0x20(r6) -/* 80024038 88 04 00 22 */ lbz r0, 0x22(r4) -/* 8002403C 98 06 00 22 */ stb r0, 0x22(r6) -/* 80024040 38 C6 00 24 */ addi r6, r6, 0x24 -/* 80024044 38 84 00 24 */ addi r4, r4, 0x24 -/* 80024048 38 E7 00 01 */ addi r7, r7, 1 -lbl_8002404C: -/* 8002404C 80 05 00 00 */ lwz r0, 0(r5) -/* 80024050 7C 07 00 00 */ cmpw r7, r0 -/* 80024054 41 80 FF 8C */ blt lbl_80023FE0 -/* 80024058 4E 80 00 20 */ blr diff --git a/asm/d/d_stage/dStage_RoomKeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s b/asm/d/d_stage/dStage_RoomKeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s deleted file mode 100644 index 2f231aa70bd..00000000000 --- a/asm/d/d_stage/dStage_RoomKeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s +++ /dev/null @@ -1,67 +0,0 @@ -lbl_80024078: -/* 80024078 28 04 00 00 */ cmplwi r4, 0 -/* 8002407C 4D 82 00 20 */ beqlr -/* 80024080 80 C4 00 00 */ lwz r6, 0(r4) -/* 80024084 3C A0 80 3F */ lis r5, l_RoomKeepDoorInfo@ha /* 0x803F5784@ha */ -/* 80024088 84 E5 57 84 */ lwzu r7, l_RoomKeepDoorInfo@l(r5) /* 0x803F5784@l */ -/* 8002408C 7C 06 3A 14 */ add r0, r6, r7 -/* 80024090 2C 00 00 40 */ cmpwi r0, 0x40 -/* 80024094 4C 80 00 20 */ bgelr -/* 80024098 2C 06 00 00 */ cmpwi r6, 0 -/* 8002409C 40 80 00 08 */ bge lbl_800240A4 -/* 800240A0 4E 80 00 20 */ blr -lbl_800240A4: -/* 800240A4 4D 82 00 20 */ beqlr -/* 800240A8 80 C4 00 04 */ lwz r6, 4(r4) -/* 800240AC 1C 07 00 24 */ mulli r0, r7, 0x24 -/* 800240B0 7C A5 02 14 */ add r5, r5, r0 -/* 800240B4 38 E5 00 04 */ addi r7, r5, 4 -/* 800240B8 39 00 00 00 */ li r8, 0 -/* 800240BC 39 20 00 00 */ li r9, 0 -/* 800240C0 48 00 00 94 */ b lbl_80024154 -lbl_800240C4: -/* 800240C4 80 A6 00 00 */ lwz r5, 0(r6) -/* 800240C8 80 06 00 04 */ lwz r0, 4(r6) -/* 800240CC 90 A7 00 00 */ stw r5, 0(r7) -/* 800240D0 90 07 00 04 */ stw r0, 4(r7) -/* 800240D4 80 06 00 08 */ lwz r0, 8(r6) -/* 800240D8 90 07 00 08 */ stw r0, 8(r7) -/* 800240DC C0 06 00 0C */ lfs f0, 0xc(r6) -/* 800240E0 D0 07 00 0C */ stfs f0, 0xc(r7) -/* 800240E4 C0 06 00 10 */ lfs f0, 0x10(r6) -/* 800240E8 D0 07 00 10 */ stfs f0, 0x10(r7) -/* 800240EC C0 06 00 14 */ lfs f0, 0x14(r6) -/* 800240F0 D0 07 00 14 */ stfs f0, 0x14(r7) -/* 800240F4 A8 06 00 18 */ lha r0, 0x18(r6) -/* 800240F8 B0 07 00 18 */ sth r0, 0x18(r7) -/* 800240FC A8 06 00 1A */ lha r0, 0x1a(r6) -/* 80024100 B0 07 00 1A */ sth r0, 0x1a(r7) -/* 80024104 A8 06 00 1C */ lha r0, 0x1c(r6) -/* 80024108 B0 07 00 1C */ sth r0, 0x1c(r7) -/* 8002410C A0 06 00 1E */ lhz r0, 0x1e(r6) -/* 80024110 B0 07 00 1E */ sth r0, 0x1e(r7) -/* 80024114 A0 06 00 20 */ lhz r0, 0x20(r6) -/* 80024118 B0 07 00 20 */ sth r0, 0x20(r7) -/* 8002411C 88 06 00 22 */ lbz r0, 0x22(r6) -/* 80024120 98 07 00 22 */ stb r0, 0x22(r7) -/* 80024124 A8 07 00 18 */ lha r0, 0x18(r7) -/* 80024128 54 00 00 32 */ rlwinm r0, r0, 0, 0, 0x19 -/* 8002412C B0 07 00 18 */ sth r0, 0x18(r7) -/* 80024130 A8 A7 00 18 */ lha r5, 0x18(r7) -/* 80024134 88 03 00 04 */ lbz r0, 4(r3) -/* 80024138 54 00 06 BE */ clrlwi r0, r0, 0x1a -/* 8002413C 7C A0 03 78 */ or r0, r5, r0 -/* 80024140 B0 07 00 18 */ sth r0, 0x18(r7) -/* 80024144 38 E7 00 24 */ addi r7, r7, 0x24 -/* 80024148 38 C6 00 24 */ addi r6, r6, 0x24 -/* 8002414C 39 08 00 01 */ addi r8, r8, 1 -/* 80024150 39 29 00 01 */ addi r9, r9, 1 -lbl_80024154: -/* 80024154 80 04 00 00 */ lwz r0, 0(r4) -/* 80024158 7C 09 00 00 */ cmpw r9, r0 -/* 8002415C 41 80 FF 68 */ blt lbl_800240C4 -/* 80024160 3C 60 80 3F */ lis r3, l_RoomKeepDoorInfo@ha /* 0x803F5784@ha */ -/* 80024164 84 03 57 84 */ lwzu r0, l_RoomKeepDoorInfo@l(r3) /* 0x803F5784@l */ -/* 80024168 7C 00 42 14 */ add r0, r0, r8 -/* 8002416C 90 03 00 00 */ stw r0, 0(r3) -/* 80024170 4E 80 00 20 */ blr diff --git a/asm/d/d_stage/dStage_rpatInfoInit__FP11dStage_dt_cPviPv.s b/asm/d/d_stage/dStage_rpatInfoInit__FP11dStage_dt_cPviPv.s deleted file mode 100644 index 97eff3400d8..00000000000 --- a/asm/d/d_stage/dStage_rpatInfoInit__FP11dStage_dt_cPviPv.s +++ /dev/null @@ -1,44 +0,0 @@ -lbl_80025F78: -/* 80025F78 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80025F7C 7C 08 02 A6 */ mflr r0 -/* 80025F80 90 01 00 24 */ stw r0, 0x24(r1) -/* 80025F84 39 61 00 20 */ addi r11, r1, 0x20 -/* 80025F88 48 33 C2 4D */ bl _savegpr_27 -/* 80025F8C 7C 7B 1B 78 */ mr r27, r3 -/* 80025F90 3B C4 00 04 */ addi r30, r4, 4 -/* 80025F94 83 A4 00 08 */ lwz r29, 8(r4) -/* 80025F98 7F C4 F3 78 */ mr r4, r30 -/* 80025F9C 81 83 00 00 */ lwz r12, 0(r3) -/* 80025FA0 81 8C 00 E0 */ lwz r12, 0xe0(r12) -/* 80025FA4 7D 89 03 A6 */ mtctr r12 -/* 80025FA8 4E 80 04 21 */ bctrl -/* 80025FAC 3B 80 00 00 */ li r28, 0 -/* 80025FB0 3F E0 80 00 */ lis r31, 0x8000 -/* 80025FB4 48 00 00 3C */ b lbl_80025FF0 -lbl_80025FB8: -/* 80025FB8 80 1D 00 08 */ lwz r0, 8(r29) -/* 80025FBC 7C 00 F8 40 */ cmplw r0, r31 -/* 80025FC0 40 80 00 28 */ bge lbl_80025FE8 -/* 80025FC4 7F 63 DB 78 */ mr r3, r27 -/* 80025FC8 81 9B 00 00 */ lwz r12, 0(r27) -/* 80025FCC 81 8C 00 DC */ lwz r12, 0xdc(r12) -/* 80025FD0 7D 89 03 A6 */ mtctr r12 -/* 80025FD4 4E 80 04 21 */ bctrl -/* 80025FD8 80 63 00 04 */ lwz r3, 4(r3) -/* 80025FDC 80 1D 00 08 */ lwz r0, 8(r29) -/* 80025FE0 7C 00 1A 14 */ add r0, r0, r3 -/* 80025FE4 90 1D 00 08 */ stw r0, 8(r29) -lbl_80025FE8: -/* 80025FE8 3B BD 00 0C */ addi r29, r29, 0xc -/* 80025FEC 3B 9C 00 01 */ addi r28, r28, 1 -lbl_80025FF0: -/* 80025FF0 80 1E 00 00 */ lwz r0, 0(r30) -/* 80025FF4 7C 1C 00 00 */ cmpw r28, r0 -/* 80025FF8 41 80 FF C0 */ blt lbl_80025FB8 -/* 80025FFC 38 60 00 01 */ li r3, 1 -/* 80026000 39 61 00 20 */ addi r11, r1, 0x20 -/* 80026004 48 33 C2 1D */ bl _restgpr_27 -/* 80026008 80 01 00 24 */ lwz r0, 0x24(r1) -/* 8002600C 7C 08 03 A6 */ mtlr r0 -/* 80026010 38 21 00 20 */ addi r1, r1, 0x20 -/* 80026014 4E 80 00 20 */ blr diff --git a/asm/d/d_stage/loadRoom__20dStage_roomControl_cFiPUcb.s b/asm/d/d_stage/loadRoom__20dStage_roomControl_cFiPUcb.s deleted file mode 100644 index 7decef37e82..00000000000 --- a/asm/d/d_stage/loadRoom__20dStage_roomControl_cFiPUcb.s +++ /dev/null @@ -1,145 +0,0 @@ -lbl_8002451C: -/* 8002451C 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 80024520 7C 08 02 A6 */ mflr r0 -/* 80024524 90 01 00 34 */ stw r0, 0x34(r1) -/* 80024528 39 61 00 30 */ addi r11, r1, 0x30 -/* 8002452C 48 33 DC 9D */ bl _savegpr_24 -/* 80024530 7C 9A 23 78 */ mr r26, r4 -/* 80024534 7C BB 2B 78 */ mr r27, r5 -/* 80024538 7C DC 33 78 */ mr r28, r6 -/* 8002453C 88 0D 80 70 */ lbz r0, data_804505F0(r13) -/* 80024540 7C 00 07 75 */ extsb. r0, r0 -/* 80024544 40 80 00 18 */ bge lbl_8002455C -/* 80024548 88 0D 87 E8 */ lbz r0, mNoChangeRoom__20dStage_roomControl_c(r13) -/* 8002454C 28 00 00 00 */ cmplwi r0, 0 -/* 80024550 41 82 00 0C */ beq lbl_8002455C -/* 80024554 38 60 00 00 */ li r3, 0 -/* 80024558 48 00 01 AC */ b lbl_80024704 -lbl_8002455C: -/* 8002455C 38 60 00 00 */ li r3, 0 -/* 80024560 3C 80 80 3F */ lis r4, mStatus__20dStage_roomControl_c@ha /* 0x803F6094@ha */ -/* 80024564 38 A4 60 94 */ addi r5, r4, mStatus__20dStage_roomControl_c@l /* 0x803F6094@l */ -/* 80024568 38 00 00 40 */ li r0, 0x40 -/* 8002456C 7C 09 03 A6 */ mtctr r0 -lbl_80024570: -/* 80024570 7C 85 1A 14 */ add r4, r5, r3 -/* 80024574 88 04 03 F4 */ lbz r0, 0x3f4(r4) -/* 80024578 54 00 07 7D */ rlwinm. r0, r0, 0, 0x1d, 0x1e -/* 8002457C 41 82 00 0C */ beq lbl_80024588 -/* 80024580 38 60 00 00 */ li r3, 0 -/* 80024584 48 00 01 80 */ b lbl_80024704 -lbl_80024588: -/* 80024588 38 63 04 04 */ addi r3, r3, 0x404 -/* 8002458C 42 00 FF E4 */ bdnz lbl_80024570 -/* 80024590 3B 00 00 01 */ li r24, 1 -/* 80024594 3B E0 00 00 */ li r31, 0 -/* 80024598 3B 20 00 00 */ li r25, 0 -/* 8002459C 3C 60 80 3F */ lis r3, mStatus__20dStage_roomControl_c@ha /* 0x803F6094@ha */ -/* 800245A0 3B A3 60 94 */ addi r29, r3, mStatus__20dStage_roomControl_c@l /* 0x803F6094@l */ -lbl_800245A4: -/* 800245A4 7C 7D CA 14 */ add r3, r29, r25 -/* 800245A8 3B C3 03 F4 */ addi r30, r3, 0x3f4 -/* 800245AC 88 03 03 F4 */ lbz r0, 0x3f4(r3) -/* 800245B0 54 00 07 FF */ clrlwi. r0, r0, 0x1f -/* 800245B4 41 82 00 2C */ beq lbl_800245E0 -/* 800245B8 7F 43 D3 78 */ mr r3, r26 -/* 800245BC 7F 64 DB 78 */ mr r4, r27 -/* 800245C0 7F E5 FB 78 */ mr r5, r31 -/* 800245C4 4B FF FE 69 */ bl stayRoomCheck__FiPUci -/* 800245C8 2C 03 00 00 */ cmpwi r3, 0 -/* 800245CC 40 82 00 14 */ bne lbl_800245E0 -/* 800245D0 88 1E 00 00 */ lbz r0, 0(r30) -/* 800245D4 60 00 00 0C */ ori r0, r0, 0xc -/* 800245D8 98 1E 00 00 */ stb r0, 0(r30) -/* 800245DC 3B 00 00 00 */ li r24, 0 -lbl_800245E0: -/* 800245E0 3B FF 00 01 */ addi r31, r31, 1 -/* 800245E4 2C 1F 00 40 */ cmpwi r31, 0x40 -/* 800245E8 3B 39 04 04 */ addi r25, r25, 0x404 -/* 800245EC 41 80 FF B8 */ blt lbl_800245A4 -/* 800245F0 2C 18 00 00 */ cmpwi r24, 0 -/* 800245F4 40 82 00 0C */ bne lbl_80024600 -/* 800245F8 38 60 00 00 */ li r3, 0 -/* 800245FC 48 00 01 08 */ b lbl_80024704 -lbl_80024600: -/* 80024600 3B A0 00 00 */ li r29, 0 -/* 80024604 3C 60 80 3F */ lis r3, mStatus__20dStage_roomControl_c@ha /* 0x803F6094@ha */ -/* 80024608 3B E3 60 94 */ addi r31, r3, mStatus__20dStage_roomControl_c@l /* 0x803F6094@l */ -/* 8002460C 7F 79 DB 78 */ mr r25, r27 -/* 80024610 48 00 00 E8 */ b lbl_800246F8 -lbl_80024614: -/* 80024614 88 19 00 00 */ lbz r0, 0(r25) -/* 80024618 54 03 06 BE */ clrlwi r3, r0, 0x1a -/* 8002461C 38 00 00 02 */ li r0, 2 -/* 80024620 1F 03 04 04 */ mulli r24, r3, 0x404 -/* 80024624 7C 9F C2 14 */ add r4, r31, r24 -/* 80024628 98 04 03 F6 */ stb r0, 0x3f6(r4) -/* 8002462C 3B C4 03 F4 */ addi r30, r4, 0x3f4 -/* 80024630 88 84 03 F4 */ lbz r4, 0x3f4(r4) -/* 80024634 54 80 07 FF */ clrlwi. r0, r4, 0x1f -/* 80024638 40 82 00 78 */ bne lbl_800246B0 -/* 8002463C 57 80 06 3F */ clrlwi. r0, r28, 0x18 -/* 80024640 41 82 00 2C */ beq lbl_8002466C -/* 80024644 88 19 00 00 */ lbz r0, 0(r25) -/* 80024648 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18 -/* 8002464C 41 82 00 A4 */ beq lbl_800246F0 -/* 80024650 4B FF FE 11 */ bl createRoomScene__Fi -/* 80024654 2C 03 00 00 */ cmpwi r3, 0 -/* 80024658 41 82 00 98 */ beq lbl_800246F0 -/* 8002465C 88 1E 00 00 */ lbz r0, 0(r30) -/* 80024660 60 00 00 02 */ ori r0, r0, 2 -/* 80024664 98 1E 00 00 */ stb r0, 0(r30) -/* 80024668 48 00 00 88 */ b lbl_800246F0 -lbl_8002466C: -/* 8002466C 4B FF FD F5 */ bl createRoomScene__Fi -/* 80024670 2C 03 00 00 */ cmpwi r3, 0 -/* 80024674 41 82 00 34 */ beq lbl_800246A8 -/* 80024678 7C 1B E8 AE */ lbzx r0, r27, r29 -/* 8002467C 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18 -/* 80024680 38 80 00 4A */ li r4, 0x4a -/* 80024684 41 82 00 08 */ beq lbl_8002468C -/* 80024688 38 80 00 02 */ li r4, 2 -lbl_8002468C: -/* 8002468C 3C 60 80 3F */ lis r3, mStatus__20dStage_roomControl_c@ha /* 0x803F6094@ha */ -/* 80024690 38 03 60 94 */ addi r0, r3, mStatus__20dStage_roomControl_c@l /* 0x803F6094@l */ -/* 80024694 7C A0 C2 14 */ add r5, r0, r24 -/* 80024698 88 65 03 F4 */ lbz r3, 0x3f4(r5) -/* 8002469C 54 80 06 3E */ clrlwi r0, r4, 0x18 -/* 800246A0 7C 60 03 78 */ or r0, r3, r0 -/* 800246A4 98 05 03 F4 */ stb r0, 0x3f4(r5) -lbl_800246A8: -/* 800246A8 38 60 00 01 */ li r3, 1 -/* 800246AC 48 00 00 58 */ b lbl_80024704 -lbl_800246B0: -/* 800246B0 88 19 00 00 */ lbz r0, 0(r25) -/* 800246B4 54 00 06 31 */ rlwinm. r0, r0, 0, 0x18, 0x18 -/* 800246B8 41 82 00 1C */ beq lbl_800246D4 -/* 800246BC 54 80 06 73 */ rlwinm. r0, r4, 0, 0x19, 0x19 -/* 800246C0 41 82 00 30 */ beq lbl_800246F0 -/* 800246C4 38 00 FF B7 */ li r0, -73 -/* 800246C8 7C 80 00 38 */ and r0, r4, r0 -/* 800246CC 98 1E 00 00 */ stb r0, 0(r30) -/* 800246D0 48 00 00 20 */ b lbl_800246F0 -lbl_800246D4: -/* 800246D4 54 80 06 75 */ rlwinm. r0, r4, 0, 0x19, 0x1a -/* 800246D8 40 82 00 10 */ bne lbl_800246E8 -/* 800246DC 60 80 00 48 */ ori r0, r4, 0x48 -/* 800246E0 98 1E 00 00 */ stb r0, 0(r30) -/* 800246E4 48 00 00 0C */ b lbl_800246F0 -lbl_800246E8: -/* 800246E8 60 80 00 40 */ ori r0, r4, 0x40 -/* 800246EC 98 1E 00 00 */ stb r0, 0(r30) -lbl_800246F0: -/* 800246F0 3B BD 00 01 */ addi r29, r29, 1 -/* 800246F4 3B 39 00 01 */ addi r25, r25, 1 -lbl_800246F8: -/* 800246F8 7C 1D D0 00 */ cmpw r29, r26 -/* 800246FC 41 80 FF 18 */ blt lbl_80024614 -/* 80024700 38 60 00 01 */ li r3, 1 -lbl_80024704: -/* 80024704 39 61 00 30 */ addi r11, r1, 0x30 -/* 80024708 48 33 DB 0D */ bl _restgpr_24 -/* 8002470C 80 01 00 34 */ lwz r0, 0x34(r1) -/* 80024710 7C 08 03 A6 */ mtlr r0 -/* 80024714 38 21 00 30 */ addi r1, r1, 0x30 -/* 80024718 4E 80 00 20 */ blr diff --git a/include/d/d_stage.h b/include/d/d_stage.h index ac3af99faad..d9c0c7e5d0a 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -192,8 +192,7 @@ struct stage_tgsc_data_class : public stage_actor_data_class { /* 8002847C */ ~stage_tgsc_data_class() {} /* 800284B8 */ stage_tgsc_data_class() {} - /* 0x20 */ u8 field_0x20; - /* 0x21 */ u8 field_0x21; + /* 0x20 */ u8 field_0x20[2]; /* 0x22 */ u8 field_0x22; }; // Size: 0x24 @@ -837,6 +836,7 @@ public: static void setStatusProcID(int i_roomNo, unsigned int i_id) { mStatus[i_roomNo].mProcID = i_id; } static int getStatusProcID(int i_roomNo) { return mStatus[i_roomNo].mProcID; } static void setRegionNo(int i_roomNo, u8 i_regionNo) { mStatus[i_roomNo].mRegionNo = i_regionNo; } + static void setZoneCount(int i_roomNo, int count) { mStatus[i_roomNo].mZoneCount = count; } static void setMemoryBlockID(int i_roomNo, int i_blockID) { mStatus[i_roomNo].mMemBlockID = i_blockID; @@ -926,8 +926,8 @@ struct dStage_objectNameInf { class dStage_KeepDoorInfo { public: /* 80028418 */ ~dStage_KeepDoorInfo() {} - /* 0x000 */ int unk_0x0; - /* 0x004 */ stage_tgsc_data_class unk_0x4[0x40]; + /* 0x000 */ int mNum; + /* 0x004 */ stage_tgsc_data_class mDrTgData[0x40]; }; // Size = 0x904 typedef int (*dStage_Func)(dStage_dt_c*, void*, int, void*); diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index b9f69729e64..0cbe8ba0ebc 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -453,20 +453,31 @@ static u8 dStage_isBossStage(dStage_dt_c* stageDt) { /* 80023F50-80023F84 01E890 0034+00 1/1 0/0 0/1 .text dStage_KeepDoorInfoInit__FP11dStage_dt_c */ static void dStage_KeepDoorInfoInit(dStage_dt_c* param_0) { if (dStage_isBossStage(param_0) == 0) { - DoorInfo.unk_0x0 = 0; + DoorInfo.mNum = 0; } } /* 80023F84-8002405C 01E8C4 00D8+00 1/1 0/0 0/3 .text * dStage_KeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dStage_KeepDoorInfoProc(dStage_dt_c* param_0, stage_tgsc_class* param_1) { - nofralloc -#include "asm/d/d_stage/dStage_KeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s" +static void dStage_KeepDoorInfoProc(dStage_dt_c* i_stage, stage_tgsc_class* i_drtg) { + if (i_drtg == NULL) { + DoorInfo.mNum = 0; + return; + } + if (i_drtg->mEntryNum >= (int)ARRAY_SIZE(DoorInfo.mDrTgData) || i_drtg->mEntryNum < 0) { + DoorInfo.mNum = 0; + return; + } + DoorInfo.mNum = i_drtg->mEntryNum; + if (DoorInfo.mNum == 0) { + return; + } + stage_tgsc_data_class* pSrcEntry = i_drtg->mData; + stage_tgsc_data_class* pDstEntry = DoorInfo.mDrTgData; + for (int i = 0; i < DoorInfo.mNum; pDstEntry++, pSrcEntry++, i++) { + *pDstEntry = *pSrcEntry; + } } -#pragma pop /* 803F5784-803F6088 0224A4 0904+00 3/4 0/0 0/0 .bss l_RoomKeepDoorInfo */ static dStage_KeepDoorInfo l_RoomKeepDoorInfo; @@ -476,19 +487,31 @@ dStage_KeepDoorInfo* dStage_GetRoomKeepDoorInfo() { } static void dStage_initRoomKeepDoorInfo() { - l_RoomKeepDoorInfo.unk_0x0 = 0; + l_RoomKeepDoorInfo.mNum = 0; } /* 80024078-80024174 01E9B8 00FC+00 1/1 0/0 0/0 .text * dStage_RoomKeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void dStage_RoomKeepDoorInfoProc(dStage_dt_c* param_0, stage_tgsc_class* param_1) { - nofralloc -#include "asm/d/d_stage/dStage_RoomKeepDoorInfoProc__FP11dStage_dt_cP16stage_tgsc_class.s" +static void dStage_RoomKeepDoorInfoProc(dStage_dt_c* param_1, stage_tgsc_class* param_2) { + if (param_2 == NULL || param_2->mEntryNum + l_RoomKeepDoorInfo.mNum >= 0x40 || param_2->mEntryNum < 0) { + return; + } + if (param_2->mEntryNum == 0) { + return; + } + stage_tgsc_data_class* psVar4 = param_2->mData; + stage_tgsc_data_class* pTgData = &l_RoomKeepDoorInfo.mDrTgData[l_RoomKeepDoorInfo.mNum]; + int iVar3 = 0; + for (int i = 0; i < param_2->mEntryNum; i++) { + *pTgData = *psVar4; + pTgData->mAngle.x &= ~0x3f; + pTgData->mAngle.x |= param_1->getRoomNo() & 0x3fU; + pTgData++; + psVar4++; + iVar3++; + } + l_RoomKeepDoorInfo.mNum += iVar3; } -#pragma pop /* 80024174-8002419C 01EAB4 0028+00 2/0 0/0 0/0 .text * dStage_RoomKeepDoorInit__FP11dStage_dt_cPviPv */ @@ -1553,14 +1576,67 @@ BOOL dStage_roomControl_c::checkRoomDisp(int i_roomNo) const { } /* 8002451C-8002471C 01EE5C 0200+00 2/2 0/0 0/2 .text loadRoom__20dStage_roomControl_cFiPUcb */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm int dStage_roomControl_c::loadRoom(int param_0, u8* param_1, bool param_2) { - nofralloc -#include "asm/d/d_stage/loadRoom__20dStage_roomControl_cFiPUcb.s" +int dStage_roomControl_c::loadRoom(int roomCount, u8* rooms, bool param_2) { + if (data_804505F0 < 0 && mNoChangeRoom != 0) { + return 0; + } + + for (int roomNo = 0; roomNo < ARRAY_SIZE(mStatus); roomNo++) { + if (checkStatusFlag(roomNo, 0x02 | 0x04)) { + return 0; + } + } + + BOOL r26 = TRUE; + for (int roomNo = 0; roomNo < (int)ARRAY_SIZE(mStatus); roomNo++) { + if (dStage_roomControl_c::checkStatusFlag(roomNo, 0x01)) { + if (!stayRoomCheck(roomCount, rooms, roomNo)) { + onStatusFlag(roomNo, 0xc); + r26 = FALSE; + } + } + } + if (!r26) { + return FALSE; + } + + for (int i = 0; i < roomCount; i++) { + u8 roomNo = dStage_roomRead_dt_c_GetLoadRoomIndex(rooms[i]); + dStage_roomControl_c::setZoneCount(roomNo, 2); + if (!checkStatusFlag(roomNo, 0x01)) { + if (param_2) { + if (dStage_roomRead_dt_c_ChkBg(rooms[i]) && createRoomScene(roomNo)) { + onStatusFlag(roomNo, 2); + } + } else { + if (createRoomScene(roomNo)) { + int flag; + if (dStage_roomRead_dt_c_ChkBg(rooms[i])) { + flag = 0x02; + } else { + flag = 0x4A; + } + onStatusFlag(roomNo, flag); + } + return TRUE; + } + } else { + if (dStage_roomRead_dt_c_ChkBg(rooms[i])) { + if (checkStatusFlag(roomNo, 0x40)) { + offStatusFlag(roomNo, 0x48); + } + } else { + if (!checkStatusFlag(roomNo, 0x60)) { + onStatusFlag(roomNo, 0x48); + } else { + onStatusFlag(roomNo, 0x40); + } + } + } + } + + return TRUE; } -#pragma pop /* 8002471C-8002483C 01F05C 0120+00 1/1 0/0 0/3 .text zoneCountCheck__20dStage_roomControl_cCFi */ void dStage_roomControl_c::zoneCountCheck(int i_roomNo) const { @@ -2238,8 +2314,8 @@ static int dStage_tgscCommonLayerInit(dStage_dt_c* stageDt, void* i_data, int en appen->mAngle = actor_data->mAngle; appen->mEnemyNo = actor_data->mEnemyNo; appen->mRoomNo = stageDt->getRoomNo(); - appen->mScale[0] = actor_data->field_0x20; - appen->mScale[1] = actor_data->field_0x21; + appen->mScale[0] = actor_data->field_0x20[0]; + appen->mScale[1] = actor_data->field_0x20[1]; appen->mScale[2] = actor_data->field_0x22; dStage_actorCreate(actor_data, appen); } @@ -2317,8 +2393,8 @@ static int dStage_tgscInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum, appen->mAngle = actor_data->mAngle; appen->mEnemyNo = actor_data->mEnemyNo; appen->mRoomNo = stageDt->getRoomNo(); - appen->mScale[0] = actor_data->field_0x20; - appen->mScale[1] = actor_data->field_0x21; + appen->mScale[0] = actor_data->field_0x20[0]; + appen->mScale[1] = actor_data->field_0x20[1]; appen->mScale[2] = actor_data->field_0x22; dStage_actorCreate(actor_data, appen); } @@ -2343,8 +2419,8 @@ static int dStage_doorInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum, appen->mAngle = actor_data->mAngle; appen->mEnemyNo = actor_data->mEnemyNo; appen->mRoomNo = stageDt->getRoomNo(); - appen->mScale[0] = actor_data->field_0x20; - appen->mScale[1] = actor_data->field_0x21; + appen->mScale[0] = actor_data->field_0x20[0]; + appen->mScale[1] = actor_data->field_0x20[1]; appen->mScale[2] = actor_data->field_0x22; dStage_actorCreate(actor_data, appen); } @@ -2412,15 +2488,19 @@ static int dStage_rppnInfoInit(dStage_dt_c* stageDt, void* i_data, int entryNum, } /* 80025F78-80026018 0208B8 00A0+00 2/0 0/0 0/0 .text dStage_rpatInfoInit__FP11dStage_dt_cPviPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm int dStage_rpatInfoInit(dStage_dt_c* param_0, void* param_1, int param_2, - void* param_3) { - nofralloc -#include "asm/d/d_stage/dStage_rpatInfoInit__FP11dStage_dt_cPviPv.s" +static int dStage_rpatInfoInit(dStage_dt_c* i_stage, void* i_data, int i_num, void*) { + dStage_dPath_c* pStagePath = (dStage_dPath_c*)((char*)i_data + 4); + dPath* pPath = pStagePath->m_path; + + i_stage->setPath2Info(pStagePath); + for (s32 i = 0; i < pStagePath->m_num; pPath++, i++) { + if ((u32)pPath->m_points >= 0x80000000) { + continue; + } + pPath->m_points = (dStage_dPnt_c*)((u32)*((int*)i_stage->getPnt2Inf()+1) + (u32)pPath->m_points); // TODO clean this up + } + return 1; } -#pragma pop /* 80026018-8002604C 020958 0034+00 1/0 0/0 0/0 .text dStage_soundInfoInit__FP11dStage_dt_cPviPv */ diff --git a/src/d/map/d_map_path_dmap.cpp b/src/d/map/d_map_path_dmap.cpp index 6ead3b85d82..5e6d941325a 100644 --- a/src/d/map/d_map_path_dmap.cpp +++ b/src/d/map/d_map_path_dmap.cpp @@ -1034,14 +1034,14 @@ void renderingPlusDoor_c::afterDrawPath() { */ void renderingPlusDoor_c::drawDoor1() { dStage_KeepDoorInfo* door_info = dStage_GetKeepDoorInfo(); - drawDoorCommon(door_info->unk_0x4, door_info->unk_0x0, true); + drawDoorCommon(door_info->mDrTgData, door_info->mNum, true); } /* 800405B8-800405FC 03AEF8 0044+00 1/1 0/0 0/0 .text drawDoor2__19renderingPlusDoor_cFv */ void renderingPlusDoor_c::drawDoor2() { dStage_KeepDoorInfo* door_info = dStage_GetRoomKeepDoorInfo(); - drawDoorCommon(door_info->unk_0x4, door_info->unk_0x0, false); + drawDoorCommon(door_info->mDrTgData, door_info->mNum, false); } /* ############################################################################################## */