A little work on d_stage (#2178)

This commit is contained in:
hatal175 2024-07-14 15:29:24 +03:00 committed by GitHub
parent ca1ece683b
commit 19e3defe5b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 127 additions and 363 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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*);

View File

@ -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
*/

View File

@ -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);
}
/* ############################################################################################## */