J3DShape / J3DShapeDraw: More OK

This commit is contained in:
Jasper St. Pierre 2022-04-24 01:25:34 -07:00
parent f1f9cc713d
commit 9bee853ab4
16 changed files with 221 additions and 711 deletions

View File

@ -1,73 +0,0 @@
lbl_80314BB8:
/* 80314BB8 94 21 FF D0 */ stwu r1, -0x30(r1)
/* 80314BBC 7C 08 02 A6 */ mflr r0
/* 80314BC0 90 01 00 34 */ stw r0, 0x34(r1)
/* 80314BC4 39 61 00 30 */ addi r11, r1, 0x30
/* 80314BC8 48 04 D6 0D */ bl _savegpr_27
/* 80314BCC 7C 7F 1B 78 */ mr r31, r3
/* 80314BD0 3C 60 80 3A */ lis r3, lit_697@ha /* 0x803A1E98@ha */
/* 80314BD4 38 C3 1E 98 */ addi r6, r3, lit_697@l /* 0x803A1E98@l */
/* 80314BD8 80 66 00 00 */ lwz r3, 0(r6)
/* 80314BDC 80 06 00 04 */ lwz r0, 4(r6)
/* 80314BE0 90 61 00 08 */ stw r3, 8(r1)
/* 80314BE4 90 01 00 0C */ stw r0, 0xc(r1)
/* 80314BE8 80 66 00 08 */ lwz r3, 8(r6)
/* 80314BEC 80 06 00 0C */ lwz r0, 0xc(r6)
/* 80314BF0 90 61 00 10 */ stw r3, 0x10(r1)
/* 80314BF4 90 01 00 14 */ stw r0, 0x14(r1)
/* 80314BF8 38 C0 FF FF */ li r6, -1
/* 80314BFC 38 E0 FF FF */ li r7, -1
/* 80314C00 39 00 00 00 */ li r8, 0
/* 80314C04 39 20 00 00 */ li r9, 0
/* 80314C08 81 5F 00 30 */ lwz r10, 0x30(r31)
/* 80314C0C 38 61 00 08 */ addi r3, r1, 8
/* 80314C10 48 00 00 3C */ b lbl_80314C4C
lbl_80314C14:
/* 80314C14 2C 00 00 00 */ cmpwi r0, 0
/* 80314C18 40 82 00 08 */ bne lbl_80314C20
/* 80314C1C 7D 06 43 78 */ mr r6, r8
lbl_80314C20:
/* 80314C20 7C 04 00 00 */ cmpw r4, r0
/* 80314C24 40 80 00 14 */ bge lbl_80314C38
/* 80314C28 55 20 06 3F */ clrlwi. r0, r9, 0x18
/* 80314C2C 40 82 00 0C */ bne lbl_80314C38
/* 80314C30 7D 07 43 78 */ mr r7, r8
/* 80314C34 39 20 00 01 */ li r9, 1
lbl_80314C38:
/* 80314C38 80 0A 00 04 */ lwz r0, 4(r10)
/* 80314C3C 54 00 10 3A */ slwi r0, r0, 2
/* 80314C40 7C 03 00 2E */ lwzx r0, r3, r0
/* 80314C44 7D 08 02 14 */ add r8, r8, r0
/* 80314C48 39 4A 00 08 */ addi r10, r10, 8
lbl_80314C4C:
/* 80314C4C 80 0A 00 00 */ lwz r0, 0(r10)
/* 80314C50 2C 00 00 FF */ cmpwi r0, 0xff
/* 80314C54 40 82 FF C0 */ bne lbl_80314C14
/* 80314C58 2C 06 FF FF */ cmpwi r6, -1
/* 80314C5C 41 82 00 48 */ beq lbl_80314CA4
/* 80314C60 3B 60 00 00 */ li r27, 0
/* 80314C64 7C BE 2B 78 */ mr r30, r5
/* 80314C68 7C FD 3B 78 */ mr r29, r7
/* 80314C6C 7D 1C 43 78 */ mr r28, r8
/* 80314C70 48 00 00 24 */ b lbl_80314C94
lbl_80314C74:
/* 80314C74 80 7F 00 3C */ lwz r3, 0x3c(r31)
/* 80314C78 57 60 13 BA */ rlwinm r0, r27, 2, 0xe, 0x1d
/* 80314C7C 7C 63 00 2E */ lwzx r3, r3, r0
/* 80314C80 7F 84 E3 78 */ mr r4, r28
/* 80314C84 7F A5 EB 78 */ mr r5, r29
/* 80314C88 7F C6 F3 78 */ mr r6, r30
/* 80314C8C 4B FF FC E9 */ bl addTexMtxIndexInDL__12J3DShapeDrawFUlUlUl
/* 80314C90 3B 7B 00 01 */ addi r27, r27, 1
lbl_80314C94:
/* 80314C94 57 63 04 3E */ clrlwi r3, r27, 0x10
/* 80314C98 A0 1F 00 0A */ lhz r0, 0xa(r31)
/* 80314C9C 7C 03 00 40 */ cmplw r3, r0
/* 80314CA0 41 80 FF D4 */ blt lbl_80314C74
lbl_80314CA4:
/* 80314CA4 39 61 00 30 */ addi r11, r1, 0x30
/* 80314CA8 48 04 D5 79 */ bl _restgpr_27
/* 80314CAC 80 01 00 34 */ lwz r0, 0x34(r1)
/* 80314CB0 7C 08 03 A6 */ mtlr r0
/* 80314CB4 38 21 00 30 */ addi r1, r1, 0x30
/* 80314CB8 4E 80 00 20 */ blr

View File

@ -1,29 +0,0 @@
lbl_80314B48:
/* 80314B48 38 A0 00 00 */ li r5, 0
/* 80314B4C 90 A3 00 04 */ stw r5, 4(r3)
/* 80314B50 3C 80 00 01 */ lis r4, 0x0001 /* 0x0000FFFF@ha */
/* 80314B54 38 04 FF FF */ addi r0, r4, 0xFFFF /* 0x0000FFFF@l */
/* 80314B58 B0 03 00 08 */ sth r0, 8(r3)
/* 80314B5C B0 A3 00 0A */ sth r5, 0xa(r3)
/* 80314B60 90 A3 00 0C */ stw r5, 0xc(r3)
/* 80314B64 C0 02 C9 A0 */ lfs f0, lit_687(r2)
/* 80314B68 D0 03 00 10 */ stfs f0, 0x10(r3)
/* 80314B6C D0 03 00 14 */ stfs f0, 0x14(r3)
/* 80314B70 D0 03 00 18 */ stfs f0, 0x18(r3)
/* 80314B74 D0 03 00 1C */ stfs f0, 0x1c(r3)
/* 80314B78 D0 03 00 20 */ stfs f0, 0x20(r3)
/* 80314B7C D0 03 00 24 */ stfs f0, 0x24(r3)
/* 80314B80 D0 03 00 28 */ stfs f0, 0x28(r3)
/* 80314B84 90 A3 00 30 */ stw r5, 0x30(r3)
/* 80314B88 90 A3 00 38 */ stw r5, 0x38(r3)
/* 80314B8C 90 A3 00 3C */ stw r5, 0x3c(r3)
/* 80314B90 90 A3 00 4C */ stw r5, 0x4c(r3)
/* 80314B94 90 A3 00 50 */ stw r5, 0x50(r3)
/* 80314B98 90 A3 00 54 */ stw r5, 0x54(r3)
/* 80314B9C 90 A3 00 58 */ stw r5, 0x58(r3)
/* 80314BA0 90 A3 00 5C */ stw r5, 0x5c(r3)
/* 80314BA4 38 0D 90 18 */ la r0, j3dDefaultViewNo(r13) /* 80451598-_SDA_BASE_ */
/* 80314BA8 90 03 00 60 */ stw r0, 0x60(r3)
/* 80314BAC 98 A3 00 34 */ stb r5, 0x34(r3)
/* 80314BB0 98 A3 00 48 */ stb r5, 0x48(r3)
/* 80314BB4 4E 80 00 20 */ blr

View File

@ -1,40 +0,0 @@
lbl_80315300:
/* 80315300 94 21 FF F0 */ stwu r1, -0x10(r1)
/* 80315304 7C 08 02 A6 */ mflr r0
/* 80315308 90 01 00 14 */ stw r0, 0x14(r1)
/* 8031530C 93 E1 00 0C */ stw r31, 0xc(r1)
/* 80315310 7C 7F 1B 78 */ mr r31, r3
/* 80315314 80 0D 90 50 */ lwz r0, sOldVcdVatCmd__8J3DShape(r13)
/* 80315318 80 63 00 2C */ lwz r3, 0x2c(r3)
/* 8031531C 7C 00 18 40 */ cmplw r0, r3
/* 80315320 41 82 00 14 */ beq lbl_80315334
/* 80315324 38 80 00 C0 */ li r4, 0xc0
/* 80315328 48 04 AB C9 */ bl GXCallDisplayList
/* 8031532C 80 1F 00 2C */ lwz r0, 0x2c(r31)
/* 80315330 90 0D 90 50 */ stw r0, sOldVcdVatCmd__8J3DShape(r13)
lbl_80315334:
/* 80315334 80 BF 00 40 */ lwz r5, 0x40(r31)
/* 80315338 38 80 00 08 */ li r4, 8
/* 8031533C 3C 60 CC 01 */ lis r3, 0xCC01 /* 0xCC008000@ha */
/* 80315340 98 83 80 00 */ stb r4, 0x8000(r3) /* 0xCC008000@l */
/* 80315344 38 00 00 30 */ li r0, 0x30
/* 80315348 98 03 80 00 */ stb r0, -0x8000(r3)
/* 8031534C 90 A3 80 00 */ stw r5, -0x8000(r3)
/* 80315350 80 DF 00 44 */ lwz r6, 0x44(r31)
/* 80315354 98 83 80 00 */ stb r4, -0x8000(r3)
/* 80315358 38 00 00 40 */ li r0, 0x40
/* 8031535C 98 03 80 00 */ stb r0, -0x8000(r3)
/* 80315360 90 C3 80 00 */ stw r6, -0x8000(r3)
/* 80315364 38 00 00 10 */ li r0, 0x10
/* 80315368 98 03 80 00 */ stb r0, -0x8000(r3)
/* 8031536C 38 00 00 01 */ li r0, 1
/* 80315370 B0 03 80 00 */ sth r0, -0x8000(r3)
/* 80315374 38 00 10 18 */ li r0, 0x1018
/* 80315378 B0 03 80 00 */ sth r0, -0x8000(r3)
/* 8031537C 90 A3 80 00 */ stw r5, -0x8000(r3)
/* 80315380 90 C3 80 00 */ stw r6, -0x8000(r3)
/* 80315384 83 E1 00 0C */ lwz r31, 0xc(r1)
/* 80315388 80 01 00 14 */ lwz r0, 0x14(r1)
/* 8031538C 7C 08 03 A6 */ mtlr r0
/* 80315390 38 21 00 10 */ addi r1, r1, 0x10
/* 80315394 4E 80 00 20 */ blr

View File

@ -1,201 +0,0 @@
lbl_80314F98:
/* 80314F98 94 21 FF A0 */ stwu r1, -0x60(r1)
/* 80314F9C 7C 08 02 A6 */ mflr r0
/* 80314FA0 90 01 00 64 */ stw r0, 0x64(r1)
/* 80314FA4 39 61 00 60 */ addi r11, r1, 0x60
/* 80314FA8 48 04 D2 2D */ bl _savegpr_27
/* 80314FAC 80 83 00 4C */ lwz r4, 0x4c(r3)
/* 80314FB0 80 84 00 14 */ lwz r4, 0x14(r4)
/* 80314FB4 38 A0 00 00 */ li r5, 0
/* 80314FB8 39 00 00 00 */ li r8, 0
/* 80314FBC 38 E1 00 14 */ addi r7, r1, 0x14
/* 80314FC0 38 C1 00 08 */ addi r6, r1, 8
/* 80314FC4 38 00 00 0C */ li r0, 0xc
/* 80314FC8 7C 09 03 A6 */ mtctr r0
lbl_80314FCC:
/* 80314FCC 99 06 00 00 */ stb r8, 0(r6)
/* 80314FD0 7D 07 29 2E */ stwx r8, r7, r5
/* 80314FD4 38 A5 00 04 */ addi r5, r5, 4
/* 80314FD8 38 C6 00 01 */ addi r6, r6, 1
/* 80314FDC 42 00 FF F0 */ bdnz lbl_80314FCC
/* 80314FE0 48 00 01 90 */ b lbl_80315170
lbl_80314FE4:
/* 80314FE4 2C 07 00 0A */ cmpwi r7, 0xa
/* 80314FE8 41 82 00 8C */ beq lbl_80315074
/* 80314FEC 40 80 00 10 */ bge lbl_80314FFC
/* 80314FF0 2C 07 00 09 */ cmpwi r7, 9
/* 80314FF4 40 80 00 1C */ bge lbl_80315010
/* 80314FF8 48 00 01 74 */ b lbl_8031516C
lbl_80314FFC:
/* 80314FFC 2C 07 00 15 */ cmpwi r7, 0x15
/* 80315000 40 80 01 6C */ bge lbl_8031516C
/* 80315004 2C 07 00 0D */ cmpwi r7, 0xd
/* 80315008 40 80 01 0C */ bge lbl_80315114
/* 8031500C 48 00 00 CC */ b lbl_803150D8
lbl_80315010:
/* 80315010 80 04 00 08 */ lwz r0, 8(r4)
/* 80315014 2C 00 00 04 */ cmpwi r0, 4
/* 80315018 40 82 00 18 */ bne lbl_80315030
/* 8031501C 38 C0 00 0C */ li r6, 0xc
/* 80315020 38 A1 00 08 */ addi r5, r1, 8
/* 80315024 38 07 FF F7 */ addi r0, r7, -9
/* 80315028 7C C5 01 AE */ stbx r6, r5, r0
/* 8031502C 48 00 00 14 */ b lbl_80315040
lbl_80315030:
/* 80315030 38 C0 00 06 */ li r6, 6
/* 80315034 38 A1 00 08 */ addi r5, r1, 8
/* 80315038 38 07 FF F7 */ addi r0, r7, -9
/* 8031503C 7C C5 01 AE */ stbx r6, r5, r0
lbl_80315040:
/* 80315040 80 E3 00 4C */ lwz r7, 0x4c(r3)
/* 80315044 81 07 00 18 */ lwz r8, 0x18(r7)
/* 80315048 80 04 00 00 */ lwz r0, 0(r4)
/* 8031504C 54 06 10 3A */ slwi r6, r0, 2
/* 80315050 38 A1 00 14 */ addi r5, r1, 0x14
/* 80315054 38 06 FF DC */ addi r0, r6, -36
/* 80315058 7D 05 01 2E */ stwx r8, r5, r0
/* 8031505C 88 04 00 0C */ lbz r0, 0xc(r4)
/* 80315060 98 07 00 4C */ stb r0, 0x4c(r7)
/* 80315064 80 04 00 08 */ lwz r0, 8(r4)
/* 80315068 80 A3 00 4C */ lwz r5, 0x4c(r3)
/* 8031506C 90 05 00 50 */ stw r0, 0x50(r5)
/* 80315070 48 00 00 FC */ b lbl_8031516C
lbl_80315074:
/* 80315074 80 04 00 08 */ lwz r0, 8(r4)
/* 80315078 2C 00 00 04 */ cmpwi r0, 4
/* 8031507C 40 82 00 18 */ bne lbl_80315094
/* 80315080 38 C0 00 0C */ li r6, 0xc
/* 80315084 38 A1 00 08 */ addi r5, r1, 8
/* 80315088 38 07 FF F7 */ addi r0, r7, -9
/* 8031508C 7C C5 01 AE */ stbx r6, r5, r0
/* 80315090 48 00 00 14 */ b lbl_803150A4
lbl_80315094:
/* 80315094 38 C0 00 06 */ li r6, 6
/* 80315098 38 A1 00 08 */ addi r5, r1, 8
/* 8031509C 38 07 FF F7 */ addi r0, r7, -9
/* 803150A0 7C C5 01 AE */ stbx r6, r5, r0
lbl_803150A4:
/* 803150A4 80 E3 00 4C */ lwz r7, 0x4c(r3)
/* 803150A8 81 07 00 1C */ lwz r8, 0x1c(r7)
/* 803150AC 80 04 00 00 */ lwz r0, 0(r4)
/* 803150B0 54 06 10 3A */ slwi r6, r0, 2
/* 803150B4 38 A1 00 14 */ addi r5, r1, 0x14
/* 803150B8 38 06 FF DC */ addi r0, r6, -36
/* 803150BC 7D 05 01 2E */ stwx r8, r5, r0
/* 803150C0 88 04 00 0C */ lbz r0, 0xc(r4)
/* 803150C4 98 07 00 54 */ stb r0, 0x54(r7)
/* 803150C8 80 04 00 08 */ lwz r0, 8(r4)
/* 803150CC 80 A3 00 4C */ lwz r5, 0x4c(r3)
/* 803150D0 90 05 00 58 */ stw r0, 0x58(r5)
/* 803150D4 48 00 00 98 */ b lbl_8031516C
lbl_803150D8:
/* 803150D8 38 C0 00 04 */ li r6, 4
/* 803150DC 38 A1 00 08 */ addi r5, r1, 8
/* 803150E0 38 07 FF F7 */ addi r0, r7, -9
/* 803150E4 7C C5 01 AE */ stbx r6, r5, r0
/* 803150E8 80 C3 00 4C */ lwz r6, 0x4c(r3)
/* 803150EC 81 04 00 00 */ lwz r8, 0(r4)
/* 803150F0 38 08 FF F5 */ addi r0, r8, -11
/* 803150F4 54 05 15 BA */ rlwinm r5, r0, 2, 0x16, 0x1d
/* 803150F8 38 05 00 24 */ addi r0, r5, 0x24
/* 803150FC 7C E6 00 2E */ lwzx r7, r6, r0
/* 80315100 55 06 10 3A */ slwi r6, r8, 2
/* 80315104 38 A1 00 14 */ addi r5, r1, 0x14
/* 80315108 38 06 FF DC */ addi r0, r6, -36
/* 8031510C 7C E5 01 2E */ stwx r7, r5, r0
/* 80315110 48 00 00 5C */ b lbl_8031516C
lbl_80315114:
/* 80315114 80 04 00 08 */ lwz r0, 8(r4)
/* 80315118 2C 00 00 04 */ cmpwi r0, 4
/* 8031511C 40 82 00 18 */ bne lbl_80315134
/* 80315120 38 C0 00 08 */ li r6, 8
/* 80315124 38 A1 00 08 */ addi r5, r1, 8
/* 80315128 38 07 FF F7 */ addi r0, r7, -9
/* 8031512C 7C C5 01 AE */ stbx r6, r5, r0
/* 80315130 48 00 00 14 */ b lbl_80315144
lbl_80315134:
/* 80315134 38 C0 00 04 */ li r6, 4
/* 80315138 38 A1 00 08 */ addi r5, r1, 8
/* 8031513C 38 07 FF F7 */ addi r0, r7, -9
/* 80315140 7C C5 01 AE */ stbx r6, r5, r0
lbl_80315144:
/* 80315144 80 C3 00 4C */ lwz r6, 0x4c(r3)
/* 80315148 81 04 00 00 */ lwz r8, 0(r4)
/* 8031514C 38 08 FF F3 */ addi r0, r8, -13
/* 80315150 54 05 15 BA */ rlwinm r5, r0, 2, 0x16, 0x1d
/* 80315154 38 05 00 2C */ addi r0, r5, 0x2c
/* 80315158 7C E6 00 2E */ lwzx r7, r6, r0
/* 8031515C 55 06 10 3A */ slwi r6, r8, 2
/* 80315160 38 A1 00 14 */ addi r5, r1, 0x14
/* 80315164 38 06 FF DC */ addi r0, r6, -36
/* 80315168 7C E5 01 2E */ stwx r7, r5, r0
lbl_8031516C:
/* 8031516C 38 84 00 10 */ addi r4, r4, 0x10
lbl_80315170:
/* 80315170 80 E4 00 00 */ lwz r7, 0(r4)
/* 80315174 2C 07 00 FF */ cmpwi r7, 0xff
/* 80315178 40 82 FE 6C */ bne lbl_80314FE4
/* 8031517C 80 A3 00 30 */ lwz r5, 0x30(r3)
/* 80315180 38 00 00 00 */ li r0, 0
/* 80315184 98 03 00 48 */ stb r0, 0x48(r3)
/* 80315188 48 00 00 5C */ b lbl_803151E4
lbl_8031518C:
/* 8031518C 2C 04 00 19 */ cmpwi r4, 0x19
/* 80315190 40 82 00 34 */ bne lbl_803151C4
/* 80315194 80 05 00 04 */ lwz r0, 4(r5)
/* 80315198 2C 00 00 00 */ cmpwi r0, 0
/* 8031519C 41 82 00 28 */ beq lbl_803151C4
/* 803151A0 38 00 00 01 */ li r0, 1
/* 803151A4 98 03 00 34 */ stb r0, 0x34(r3)
/* 803151A8 88 01 00 09 */ lbz r0, 9(r1)
/* 803151AC 1C 00 00 03 */ mulli r0, r0, 3
/* 803151B0 98 01 00 09 */ stb r0, 9(r1)
/* 803151B4 80 83 00 4C */ lwz r4, 0x4c(r3)
/* 803151B8 80 04 00 20 */ lwz r0, 0x20(r4)
/* 803151BC 90 01 00 18 */ stw r0, 0x18(r1)
/* 803151C0 48 00 00 20 */ b lbl_803151E0
lbl_803151C4:
/* 803151C4 2C 04 00 00 */ cmpwi r4, 0
/* 803151C8 40 82 00 18 */ bne lbl_803151E0
/* 803151CC 80 05 00 04 */ lwz r0, 4(r5)
/* 803151D0 2C 00 00 00 */ cmpwi r0, 0
/* 803151D4 41 82 00 0C */ beq lbl_803151E0
/* 803151D8 38 00 00 01 */ li r0, 1
/* 803151DC 98 03 00 48 */ stb r0, 0x48(r3)
lbl_803151E0:
/* 803151E0 38 A5 00 08 */ addi r5, r5, 8
lbl_803151E4:
/* 803151E4 80 85 00 00 */ lwz r4, 0(r5)
/* 803151E8 2C 04 00 FF */ cmpwi r4, 0xff
/* 803151EC 40 82 FF A0 */ bne lbl_8031518C
/* 803151F0 3B 60 00 00 */ li r27, 0
/* 803151F4 3B A0 00 00 */ li r29, 0
/* 803151F8 3B 81 00 14 */ addi r28, r1, 0x14
/* 803151FC 3B C1 00 08 */ addi r30, r1, 8
/* 80315200 7F DF F3 78 */ mr r31, r30
lbl_80315204:
/* 80315204 7C 9C E8 2E */ lwzx r4, r28, r29
/* 80315208 28 04 00 00 */ cmplwi r4, 0
/* 8031520C 41 82 00 14 */ beq lbl_80315220
/* 80315210 38 7B 00 09 */ addi r3, r27, 9
/* 80315214 88 BE 00 00 */ lbz r5, 0(r30)
/* 80315218 48 04 C4 E9 */ bl GDSetArray
/* 8031521C 48 00 00 14 */ b lbl_80315230
lbl_80315220:
/* 80315220 38 7B 00 09 */ addi r3, r27, 9
/* 80315224 38 80 00 00 */ li r4, 0
/* 80315228 88 BF 00 00 */ lbz r5, 0(r31)
/* 8031522C 48 04 C6 E1 */ bl GDSetArrayRaw
lbl_80315230:
/* 80315230 3B 7B 00 01 */ addi r27, r27, 1
/* 80315234 28 1B 00 0C */ cmplwi r27, 0xc
/* 80315238 3B FF 00 01 */ addi r31, r31, 1
/* 8031523C 3B DE 00 01 */ addi r30, r30, 1
/* 80315240 3B BD 00 04 */ addi r29, r29, 4
/* 80315244 41 80 FF C0 */ blt lbl_80315204
/* 80315248 39 61 00 60 */ addi r11, r1, 0x60
/* 8031524C 48 04 CF D5 */ bl _restgpr_27
/* 80315250 80 01 00 64 */ lwz r0, 0x64(r1)
/* 80315254 7C 08 03 A6 */ mtlr r0
/* 80315258 38 21 00 60 */ addi r1, r1, 0x60
/* 8031525C 4E 80 00 20 */ blr

View File

@ -1,25 +0,0 @@
lbl_80314924:
/* 80314924 38 A0 00 00 */ li r5, 0
/* 80314928 80 C3 00 08 */ lwz r6, 8(r3)
/* 8031492C 7C C7 33 78 */ mr r7, r6
/* 80314930 80 63 00 04 */ lwz r3, 4(r3)
/* 80314934 48 00 00 2C */ b lbl_80314960
lbl_80314938:
/* 80314938 88 07 00 00 */ lbz r0, 0(r7)
/* 8031493C 28 00 00 A0 */ cmplwi r0, 0xa0
/* 80314940 41 82 00 0C */ beq lbl_8031494C
/* 80314944 28 00 00 98 */ cmplwi r0, 0x98
/* 80314948 40 82 00 24 */ bne lbl_8031496C
lbl_8031494C:
/* 8031494C A0 07 00 01 */ lhz r0, 1(r7)
/* 80314950 7C A5 02 14 */ add r5, r5, r0
/* 80314954 7C 04 01 D6 */ mullw r0, r4, r0
/* 80314958 7C E7 02 14 */ add r7, r7, r0
/* 8031495C 38 E7 00 03 */ addi r7, r7, 3
lbl_80314960:
/* 80314960 7C 06 38 50 */ subf r0, r6, r7
/* 80314964 7C 00 18 40 */ cmplw r0, r3
/* 80314968 41 80 FF D0 */ blt lbl_80314938
lbl_8031496C:
/* 8031496C 7C A3 2B 78 */ mr r3, r5
/* 80314970 4E 80 00 20 */ blr

View File

@ -1,45 +0,0 @@
lbl_8031396C:
/* 8031396C 94 21 FF C0 */ stwu r1, -0x40(r1)
/* 80313970 7C 08 02 A6 */ mflr r0
/* 80313974 90 01 00 44 */ stw r0, 0x44(r1)
/* 80313978 93 E1 00 3C */ stw r31, 0x3c(r1)
/* 8031397C 93 C1 00 38 */ stw r30, 0x38(r1)
/* 80313980 7C 9E 23 78 */ mr r30, r4
/* 80313984 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */
/* 80313988 3B E3 4A C8 */ addi r31, r3, j3dSys@l /* 0x80434AC8@l */
/* 8031398C 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 80313990 80 63 00 30 */ lwz r3, 0x30(r3)
/* 80313994 80 9F 01 04 */ lwz r4, 0x104(r31)
/* 80313998 54 A0 04 3E */ clrlwi r0, r5, 0x10
/* 8031399C 1C 00 00 30 */ mulli r0, r0, 0x30
/* 803139A0 7C 84 02 14 */ add r4, r4, r0
/* 803139A4 38 A1 00 08 */ addi r5, r1, 8
/* 803139A8 48 03 2B 3D */ bl PSMTXConcat
/* 803139AC 80 0D 90 40 */ lwz r0, sTexGenBlock__17J3DDifferedTexMtx(r13)
/* 803139B0 28 00 00 00 */ cmplwi r0, 0
/* 803139B4 41 82 00 0C */ beq lbl_803139C0
/* 803139B8 38 61 00 08 */ addi r3, r1, 8
/* 803139BC 4B FF F8 71 */ bl loadExecute__17J3DDifferedTexMtxFPA4_Cf
lbl_803139C0:
/* 803139C0 38 61 00 08 */ addi r3, r1, 8
/* 803139C4 1F DE 00 03 */ mulli r30, r30, 3
/* 803139C8 7F C4 F3 78 */ mr r4, r30
/* 803139CC 4B FF C1 15 */ bl J3DFifoLoadPosMtxImm__FPA4_fUl
/* 803139D0 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 803139D4 80 63 00 30 */ lwz r3, 0x30(r3)
/* 803139D8 7F C4 F3 78 */ mr r4, r30
/* 803139DC 4B FF C1 85 */ bl J3DFifoLoadNrmMtxImm__FPA4_fUl
/* 803139E0 80 0D 90 34 */ lwz r0, sTexMtxLoadType__11J3DShapeMtx(r13)
/* 803139E4 28 00 20 00 */ cmplwi r0, 0x2000
/* 803139E8 40 82 00 14 */ bne lbl_803139FC
/* 803139EC 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 803139F0 80 63 00 30 */ lwz r3, 0x30(r3)
/* 803139F4 38 9E 00 1E */ addi r4, r30, 0x1e
/* 803139F8 4B FF C2 41 */ bl J3DFifoLoadNrmMtxToTexMtx__FPA4_fUl
lbl_803139FC:
/* 803139FC 83 E1 00 3C */ lwz r31, 0x3c(r1)
/* 80313A00 83 C1 00 38 */ lwz r30, 0x38(r1)
/* 80313A04 80 01 00 44 */ lwz r0, 0x44(r1)
/* 80313A08 7C 08 03 A6 */ mtlr r0
/* 80313A0C 38 21 00 40 */ addi r1, r1, 0x40
/* 80313A10 4E 80 00 20 */ blr

View File

@ -1,43 +0,0 @@
lbl_803138C8:
/* 803138C8 94 21 FF B0 */ stwu r1, -0x50(r1)
/* 803138CC 7C 08 02 A6 */ mflr r0
/* 803138D0 90 01 00 54 */ stw r0, 0x54(r1)
/* 803138D4 39 61 00 50 */ addi r11, r1, 0x50
/* 803138D8 48 04 E9 01 */ bl _savegpr_28
/* 803138DC 7C 7C 1B 78 */ mr r28, r3
/* 803138E0 7C 9D 23 78 */ mr r29, r4
/* 803138E4 7C BE 2B 78 */ mr r30, r5
/* 803138E8 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */
/* 803138EC 3B E3 4A C8 */ addi r31, r3, j3dSys@l /* 0x80434AC8@l */
/* 803138F0 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 803138F4 80 63 00 30 */ lwz r3, 0x30(r3)
/* 803138F8 80 9F 01 04 */ lwz r4, 0x104(r31)
/* 803138FC 54 A0 04 3E */ clrlwi r0, r5, 0x10
/* 80313900 1C 00 00 30 */ mulli r0, r0, 0x30
/* 80313904 7C 84 02 14 */ add r4, r4, r0
/* 80313908 38 A1 00 08 */ addi r5, r1, 8
/* 8031390C 48 03 2B D9 */ bl PSMTXConcat
/* 80313910 80 0D 90 40 */ lwz r0, sTexGenBlock__17J3DDifferedTexMtx(r13)
/* 80313914 28 00 00 00 */ cmplwi r0, 0
/* 80313918 41 82 00 0C */ beq lbl_80313924
/* 8031391C 38 61 00 08 */ addi r3, r1, 8
/* 80313920 4B FF F9 0D */ bl loadExecute__17J3DDifferedTexMtxFPA4_Cf
lbl_80313924:
/* 80313924 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 80313928 80 63 00 30 */ lwz r3, 0x30(r3)
/* 8031392C 1C 9D 00 03 */ mulli r4, r29, 3
/* 80313930 4B FF C1 B1 */ bl J3DFifoLoadPosMtxImm__FPA4_fUl
/* 80313934 7F 83 E3 78 */ mr r3, r28
/* 80313938 7F A4 EB 78 */ mr r4, r29
/* 8031393C 7F C5 F3 78 */ mr r5, r30
/* 80313940 38 C1 00 08 */ addi r6, r1, 8
/* 80313944 81 9C 00 00 */ lwz r12, 0(r28)
/* 80313948 81 8C 00 24 */ lwz r12, 0x24(r12)
/* 8031394C 7D 89 03 A6 */ mtctr r12
/* 80313950 4E 80 04 21 */ bctrl
/* 80313954 39 61 00 50 */ addi r11, r1, 0x50
/* 80313958 48 04 E8 CD */ bl _restgpr_28
/* 8031395C 80 01 00 54 */ lwz r0, 0x54(r1)
/* 80313960 7C 08 03 A6 */ mtlr r0
/* 80313964 38 21 00 50 */ addi r1, r1, 0x50
/* 80313968 4E 80 00 20 */ blr

View File

@ -1,48 +0,0 @@
lbl_80313A14:
/* 80313A14 94 21 FF C0 */ stwu r1, -0x40(r1)
/* 80313A18 7C 08 02 A6 */ mflr r0
/* 80313A1C 90 01 00 44 */ stw r0, 0x44(r1)
/* 80313A20 93 E1 00 3C */ stw r31, 0x3c(r1)
/* 80313A24 93 C1 00 38 */ stw r30, 0x38(r1)
/* 80313A28 7C 9E 23 78 */ mr r30, r4
/* 80313A2C 80 0D 90 40 */ lwz r0, sTexGenBlock__17J3DDifferedTexMtx(r13)
/* 80313A30 28 00 00 00 */ cmplwi r0, 0
/* 80313A34 41 82 00 34 */ beq lbl_80313A68
/* 80313A38 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */
/* 80313A3C 38 83 4A C8 */ addi r4, r3, j3dSys@l /* 0x80434AC8@l */
/* 80313A40 80 64 00 40 */ lwz r3, 0x40(r4)
/* 80313A44 80 63 00 30 */ lwz r3, 0x30(r3)
/* 80313A48 80 84 01 04 */ lwz r4, 0x104(r4)
/* 80313A4C 54 A0 04 3E */ clrlwi r0, r5, 0x10
/* 80313A50 1C 00 00 30 */ mulli r0, r0, 0x30
/* 80313A54 7C 84 02 14 */ add r4, r4, r0
/* 80313A58 38 A1 00 08 */ addi r5, r1, 8
/* 80313A5C 48 03 2A 89 */ bl PSMTXConcat
/* 80313A60 38 61 00 08 */ addi r3, r1, 8
/* 80313A64 4B FF F7 C9 */ bl loadExecute__17J3DDifferedTexMtxFPA4_Cf
lbl_80313A68:
/* 80313A68 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */
/* 80313A6C 3B E3 4A C8 */ addi r31, r3, j3dSys@l /* 0x80434AC8@l */
/* 80313A70 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 80313A74 80 63 00 30 */ lwz r3, 0x30(r3)
/* 80313A78 1F DE 00 03 */ mulli r30, r30, 3
/* 80313A7C 7F C4 F3 78 */ mr r4, r30
/* 80313A80 4B FF C0 61 */ bl J3DFifoLoadPosMtxImm__FPA4_fUl
/* 80313A84 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 80313A88 80 63 00 30 */ lwz r3, 0x30(r3)
/* 80313A8C 7F C4 F3 78 */ mr r4, r30
/* 80313A90 4B FF C0 D1 */ bl J3DFifoLoadNrmMtxImm__FPA4_fUl
/* 80313A94 80 0D 90 34 */ lwz r0, sTexMtxLoadType__11J3DShapeMtx(r13)
/* 80313A98 28 00 20 00 */ cmplwi r0, 0x2000
/* 80313A9C 40 82 00 14 */ bne lbl_80313AB0
/* 80313AA0 80 7F 00 40 */ lwz r3, 0x40(r31)
/* 80313AA4 80 63 00 30 */ lwz r3, 0x30(r3)
/* 80313AA8 38 9E 00 1E */ addi r4, r30, 0x1e
/* 80313AAC 4B FF C1 8D */ bl J3DFifoLoadNrmMtxToTexMtx__FPA4_fUl
lbl_80313AB0:
/* 80313AB0 83 E1 00 3C */ lwz r31, 0x3c(r1)
/* 80313AB4 83 C1 00 38 */ lwz r30, 0x38(r1)
/* 80313AB8 80 01 00 44 */ lwz r0, 0x44(r1)
/* 80313ABC 7C 08 03 A6 */ mtlr r0
/* 80313AC0 38 21 00 40 */ addi r1, r1, 0x40
/* 80313AC4 4E 80 00 20 */ blr

View File

@ -1,53 +0,0 @@
lbl_80313AC8:
/* 80313AC8 94 21 FF B0 */ stwu r1, -0x50(r1)
/* 80313ACC 7C 08 02 A6 */ mflr r0
/* 80313AD0 90 01 00 54 */ stw r0, 0x54(r1)
/* 80313AD4 39 61 00 50 */ addi r11, r1, 0x50
/* 80313AD8 48 04 E7 05 */ bl _savegpr_29
/* 80313ADC 7C 7D 1B 78 */ mr r29, r3
/* 80313AE0 7C 9E 23 78 */ mr r30, r4
/* 80313AE4 7C BF 2B 78 */ mr r31, r5
/* 80313AE8 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */
/* 80313AEC 38 83 4A C8 */ addi r4, r3, j3dSys@l /* 0x80434AC8@l */
/* 80313AF0 80 64 00 40 */ lwz r3, 0x40(r4)
/* 80313AF4 80 63 00 30 */ lwz r3, 0x30(r3)
/* 80313AF8 80 84 01 04 */ lwz r4, 0x104(r4)
/* 80313AFC 54 A0 04 3E */ clrlwi r0, r5, 0x10
/* 80313B00 1C 00 00 30 */ mulli r0, r0, 0x30
/* 80313B04 7C 84 02 14 */ add r4, r4, r0
/* 80313B08 38 A1 00 08 */ addi r5, r1, 8
/* 80313B0C 48 03 29 D9 */ bl PSMTXConcat
/* 80313B10 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */
/* 80313B14 38 63 4A C8 */ addi r3, r3, j3dSys@l /* 0x80434AC8@l */
/* 80313B18 80 63 00 38 */ lwz r3, 0x38(r3)
/* 80313B1C 80 63 00 04 */ lwz r3, 4(r3)
/* 80313B20 80 63 00 3C */ lwz r3, 0x3c(r3)
/* 80313B24 57 E0 04 3E */ clrlwi r0, r31, 0x10
/* 80313B28 1C 00 00 30 */ mulli r0, r0, 0x30
/* 80313B2C 7C 83 02 14 */ add r4, r3, r0
/* 80313B30 38 61 00 08 */ addi r3, r1, 8
/* 80313B34 7C 65 1B 78 */ mr r5, r3
/* 80313B38 48 03 29 AD */ bl PSMTXConcat
/* 80313B3C 80 0D 90 40 */ lwz r0, sTexGenBlock__17J3DDifferedTexMtx(r13)
/* 80313B40 28 00 00 00 */ cmplwi r0, 0
/* 80313B44 41 82 00 0C */ beq lbl_80313B50
/* 80313B48 38 61 00 08 */ addi r3, r1, 8
/* 80313B4C 4B FF F6 E1 */ bl loadExecute__17J3DDifferedTexMtxFPA4_Cf
lbl_80313B50:
/* 80313B50 38 61 00 08 */ addi r3, r1, 8
/* 80313B54 1C 9E 00 03 */ mulli r4, r30, 3
/* 80313B58 4B FF BF 89 */ bl J3DFifoLoadPosMtxImm__FPA4_fUl
/* 80313B5C 7F A3 EB 78 */ mr r3, r29
/* 80313B60 7F C4 F3 78 */ mr r4, r30
/* 80313B64 7F E5 FB 78 */ mr r5, r31
/* 80313B68 38 C1 00 08 */ addi r6, r1, 8
/* 80313B6C 81 9D 00 00 */ lwz r12, 0(r29)
/* 80313B70 81 8C 00 24 */ lwz r12, 0x24(r12)
/* 80313B74 7D 89 03 A6 */ mtctr r12
/* 80313B78 4E 80 04 21 */ bctrl
/* 80313B7C 39 61 00 50 */ addi r11, r1, 0x50
/* 80313B80 48 04 E6 A9 */ bl _restgpr_29
/* 80313B84 80 01 00 54 */ lwz r0, 0x54(r1)
/* 80313B88 7C 08 03 A6 */ mtlr r0
/* 80313B8C 38 21 00 50 */ addi r1, r1, 0x50
/* 80313B90 4E 80 00 20 */ blr

View File

@ -1,42 +0,0 @@
lbl_80313828:
/* 80313828 94 21 FF B0 */ stwu r1, -0x50(r1)
/* 8031382C 7C 08 02 A6 */ mflr r0
/* 80313830 90 01 00 54 */ stw r0, 0x54(r1)
/* 80313834 39 61 00 50 */ addi r11, r1, 0x50
/* 80313838 48 04 E9 A5 */ bl _savegpr_29
/* 8031383C 7C 7D 1B 78 */ mr r29, r3
/* 80313840 7C 9E 23 78 */ mr r30, r4
/* 80313844 7C BF 2B 78 */ mr r31, r5
/* 80313848 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */
/* 8031384C 38 83 4A C8 */ addi r4, r3, j3dSys@l /* 0x80434AC8@l */
/* 80313850 80 64 00 40 */ lwz r3, 0x40(r4)
/* 80313854 80 63 00 30 */ lwz r3, 0x30(r3)
/* 80313858 80 84 01 04 */ lwz r4, 0x104(r4)
/* 8031385C 54 A0 04 3E */ clrlwi r0, r5, 0x10
/* 80313860 1C 00 00 30 */ mulli r0, r0, 0x30
/* 80313864 7C 84 02 14 */ add r4, r4, r0
/* 80313868 38 A1 00 08 */ addi r5, r1, 8
/* 8031386C 48 03 2C 79 */ bl PSMTXConcat
/* 80313870 80 0D 90 40 */ lwz r0, sTexGenBlock__17J3DDifferedTexMtx(r13)
/* 80313874 28 00 00 00 */ cmplwi r0, 0
/* 80313878 41 82 00 0C */ beq lbl_80313884
/* 8031387C 38 61 00 08 */ addi r3, r1, 8
/* 80313880 4B FF F9 AD */ bl loadExecute__17J3DDifferedTexMtxFPA4_Cf
lbl_80313884:
/* 80313884 38 61 00 08 */ addi r3, r1, 8
/* 80313888 1C 9E 00 03 */ mulli r4, r30, 3
/* 8031388C 4B FF C2 55 */ bl J3DFifoLoadPosMtxImm__FPA4_fUl
/* 80313890 7F A3 EB 78 */ mr r3, r29
/* 80313894 7F C4 F3 78 */ mr r4, r30
/* 80313898 7F E5 FB 78 */ mr r5, r31
/* 8031389C 38 C1 00 08 */ addi r6, r1, 8
/* 803138A0 81 9D 00 00 */ lwz r12, 0(r29)
/* 803138A4 81 8C 00 24 */ lwz r12, 0x24(r12)
/* 803138A8 7D 89 03 A6 */ mtctr r12
/* 803138AC 4E 80 04 21 */ bctrl
/* 803138B0 39 61 00 50 */ addi r11, r1, 0x50
/* 803138B4 48 04 E9 75 */ bl _restgpr_29
/* 803138B8 80 01 00 54 */ lwz r0, 0x54(r1)
/* 803138BC 7C 08 03 A6 */ mtlr r0
/* 803138C0 38 21 00 50 */ addi r1, r1, 0x50
/* 803138C4 4E 80 00 20 */ blr

View File

@ -90,6 +90,9 @@ public:
inline J3DMaterial* getMaterial() const { return mMaterial; }
inline u32 getPipeline() const { return (mFlags >> 2) & 0x07; }
inline u32 getTexMtxLoadType() const { return mFlags & 0xF000; }
inline u32 getMtxGroupNum() const { return mMtxGroupNum; }
inline J3DShapeDraw* getShapeDraw(u32 idx) const { return mShapeDraw[idx]; }
inline J3DShapeMtx* getShapeMtx(u32 idx) const { return mShapeMtx[idx]; }
static void resetVcdVatCache() { sOldVcdVatCmd = NULL; }
static void* sOldVcdVatCmd;

View File

@ -5,13 +5,16 @@
class J3DShapeDraw {
public:
/* 80314924 */ void countVertex(u32);
/* 80314924 */ u32 countVertex(u32);
/* 80314974 */ void addTexMtxIndexInDL(u32, u32, u32);
/* 80314ABC */ J3DShapeDraw(u8 const*, u32);
/* 80314AD4 */ void draw() const;
/* 80314B00 */ virtual ~J3DShapeDraw();
u8* getDisplayList() const { return (u8*)mDisplayList; }
u32 getDisplayListSize() const { return mDisplayListSize; }
private:
/* 0x04 */ u32 mDisplayListSize;
/* 0x08 */ void* mDisplayList;

View File

@ -21,17 +21,19 @@ public:
J3DVertexData();
void* getVtxPosArray() const { return mVtxPosArray; }
void* getVtxNrmArray() const { return mVtxNrmArray; }
_GXColor* getVtxColorArray(u8 idx) const { return mVtxColorArray[idx]; }
GXColor* getVtxColorArray(u8 idx) const { return mVtxColorArray[idx]; }
void* getVtxTexCoordArray(u8 idx) const { return mVtxTexCoordArray[idx]; }
void* getVtxNBTArray() const { return mVtxNBTArray; }
u32 getNrmNum() const { return mNrmNum; }
u32 getVtxNum() const { return mVtxNum; }
GXVtxAttrFmtList* getVtxAttrFmtList() { return mVtxAttrFmtList; }
void setVtxPosFrac(u8 frac) { mVtxPosFrac = frac; }
void setVtxPosType(GXCompType type) { mVtxPosType = type; }
void setVtxNrmFrac(u8 frac) { mVtxNrmFrac = frac; }
void setVtxNrmType(GXCompType type) { mVtxNrmType = type; }
private:
/* 0x00 */ u32 mVtxNum;
/* 0x04 */ u32 mNrmNum;

View File

@ -85,13 +85,6 @@ typedef struct _GXTexRegion {
/* 0x00 */ u8 dummy[0x10];
} GXTexRegion; // Size: 0x10
typedef struct _GXVtxAttrFmtList {
/* 0x00 */ u32 mAttrib; // GXAttr
/* 0x04 */ u32 mCompCnt; // GXCompCnt
/* 0x08 */ u32 mCompType; // GXCompType
/* 0x0C */ u8 mCompShift;
} GXVtxAttrFmtList; // Size: 0x10
typedef enum _GXPrimitive {
/* 0x80 */ GX_QUADS = 0x80,
/* 0x90 */ GX_TRIANGLES = 0x90,
@ -830,6 +823,13 @@ typedef struct _GXVtxDescList {
/* 0x4 */ GXAttrType type;
} GXVtxDescList; // Size: 0x08
typedef struct _GXVtxAttrFmtList {
/* 0x00 */ GXAttr mAttrib;
/* 0x04 */ GXCompCnt mCompCnt;
/* 0x08 */ GXCompType mCompType;
/* 0x0C */ u8 mCompShift;
} GXVtxAttrFmtList; // Size: 0x10
typedef enum _GXFBClamp {
/* 0x0 */ GX_CLAMP_NONE,
/* 0x1 */ GX_CLAMP_TOP,

View File

@ -58,7 +58,7 @@ extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern u8 j3dDefaultViewNo[4 + 4 /* padding */];
extern "C" extern u32 j3dDefaultViewNo;
extern "C" u32 sCurrentPipeline__11J3DShapeMtx;
extern "C" u32 sCurrentScaleFlag__11J3DShapeMtx;
extern "C" extern u8 struct_804515B0[4];
@ -72,32 +72,38 @@ enum {
kVcdVatDLSize = 0xC0,
};
/* ############################################################################################## */
/* 804563A0-804563A8 0049A0 0004+04 1/1 0/0 0/0 .sdata2 @687 */
SECTION_SDATA2 static f32 lit_687[1 + 1 /* padding */] = {
0.0f,
/* padding */
0.0f,
};
/* 80314B48-80314BB8 30F488 0070+00 0/0 1/1 0/0 .text initialize__8J3DShapeFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShape::initialize() {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShape/initialize__8J3DShapeFv.s"
void J3DShape::initialize() {
mMaterial = NULL;
mIndex = -1;
mMtxGroupNum = 0;
mFlags = 0;
mRadius = 0.0f;
mMin.x = 0.0f;
mMin.y = 0.0f;
mMin.z = 0.0f;
mMax.x = 0.0f;
mMax.y = 0.0f;
mMax.z = 0.0f;
mVtxDesc = NULL;
mShapeMtx = NULL;
mShapeDraw = NULL;
mVertexData = NULL;
mDrawMtxData = NULL;
mScaleFlagArray = NULL;
mDrawMtx = NULL;
mNrmMtx = NULL;
mCurrentViewNo = &j3dDefaultViewNo;
mHasNBT = false;
mHasPNMTXIdx = false;
}
#pragma pop
/* 80314BB8-80314CBC 30F4F8 0104+00 0/0 1/1 0/0 .text addTexMtxIndexInDL__8J3DShapeF7_GXAttrUl */
#ifdef NONMATCHING
void J3DShape::addTexMtxIndexInDL(GXAttr attr, u32 param_1) {
void J3DShape::addTexMtxIndexInDL(GXAttr attr, u32 valueBase) {
u32 kSize[] = { 0, 1, 1, 2 };
s32 pnmtxidxOffs = -1;
s32 attrOffs = -1;
u32 stride = 0;
s32 stride = 0;
bool found = false;
for (GXVtxDescList* vtxDesc = mVtxDesc; vtxDesc->attr != GX_VA_NULL; vtxDesc++) {
@ -115,28 +121,9 @@ void J3DShape::addTexMtxIndexInDL(GXAttr attr, u32 param_1) {
if (pnmtxidxOffs == -1)
return;
for (u16 i = 0; i < mMtxGroupNum; i++)
mShapeDraw[i]->addTexMtxIndexInDL(stride, attrOffs, param_1);
for (u16 i = 0; i < getMtxGroupNum(); i++)
getShapeDraw(i)->addTexMtxIndexInDL(stride, attrOffs, (s32)valueBase);
}
#else
/* ############################################################################################## */
/* 803A1E98-803A1EA8 02E4F8 0010+00 1/1 0/0 0/0 .rodata @697 */
SECTION_RODATA static u8 const lit_697[16] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
};
COMPILER_STRIP_GATE(0x803A1E98, &lit_697);
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShape::addTexMtxIndexInDL(_GXAttr param_0, u32 param_1) {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShape/addTexMtxIndexInDL__8J3DShapeF7_GXAttrUl.s"
}
#pragma pop
#endif
/* 80314CBC-80314DA8 30F5FC 00EC+00 0/0 1/1 0/0 .text addTexMtxIndexInVcd__8J3DShapeF7_GXAttr */
void J3DShape::addTexMtxIndexInVcd(GXAttr attr) {
@ -177,15 +164,15 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) {
/* 80314DA8-80314E28 30F6E8 0080+00 0/0 1/1 0/0 .text
* calcNBTScale__8J3DShapeFRC3VecPA3_A3_fPA3_A3_f */
void J3DShape::calcNBTScale(Vec const& param_0, f32 (*param_1)[3][3], f32 (*param_2)[3][3]) {
for (u16 i = 0; i < mMtxGroupNum; i++)
mShapeMtx[i]->calcNBTScale(param_0, param_1, param_2);
for (u16 i = 0; i < getMtxGroupNum(); i++)
getShapeMtx(i)->calcNBTScale(param_0, param_1, param_2);
}
/* 80314E28-80314E98 30F768 0070+00 0/0 1/1 0/0 .text countBumpMtxNum__8J3DShapeCFv */
u32 J3DShape::countBumpMtxNum() const {
u32 num = 0;
for (u16 i = 0; i < mMtxGroupNum; i++)
num += mShapeMtx[i]->getUseMtxNum();
for (u16 i = 0; i < getMtxGroupNum(); i++)
num += getShapeMtx(i)->getUseMtxNum();
return num;
}
@ -222,14 +209,87 @@ bool J3DShape::isSameVcdVatCmd(J3DShape* other) {
}
/* 80314F98-80315260 30F8D8 02C8+00 1/1 0/0 0/0 .text makeVtxArrayCmd__8J3DShapeFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShape::makeVtxArrayCmd() {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShape/makeVtxArrayCmd__8J3DShapeFv.s"
void J3DShape::makeVtxArrayCmd() {
GXVtxAttrFmtList *vtxAttr = mVertexData->getVtxAttrFmtList();
u8 stride[0x0C];
void* array[0x0C];
for (u32 i = 0; i < 0x0C; i++) {
stride[i] = 0;
array[i] = 0;
}
for (; vtxAttr->mAttrib != GX_VA_NULL; vtxAttr++) {
switch (vtxAttr->mAttrib) {
case GX_VA_POS:
{
if (vtxAttr->mCompType == GX_F32)
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x0C;
else
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x06;
array[vtxAttr->mAttrib - GX_VA_POS] = mVertexData->getVtxPosArray();
mVertexData->setVtxPosFrac(vtxAttr->mCompShift);
mVertexData->setVtxPosType((GXCompType) vtxAttr->mCompType);
}
break;
case GX_VA_NRM:
{
if (vtxAttr->mCompType == GX_F32)
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x0C;
else
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x06;
array[vtxAttr->mAttrib - GX_VA_POS] = mVertexData->getVtxNrmArray();
mVertexData->setVtxNrmFrac(vtxAttr->mCompShift);
mVertexData->setVtxNrmType((GXCompType) vtxAttr->mCompType);
}
break;
case GX_VA_CLR0:
case GX_VA_CLR1:
{
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x04;
array[vtxAttr->mAttrib - GX_VA_POS] = mVertexData->getVtxColorArray(vtxAttr->mAttrib - GX_VA_CLR0);
}
break;
case GX_VA_TEX0:
case GX_VA_TEX1:
case GX_VA_TEX2:
case GX_VA_TEX3:
case GX_VA_TEX4:
case GX_VA_TEX5:
case GX_VA_TEX6:
case GX_VA_TEX7:
{
if (vtxAttr->mCompType == GX_F32)
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x08;
else
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x04;
array[vtxAttr->mAttrib - GX_VA_POS] = mVertexData->getVtxTexCoordArray(vtxAttr->mAttrib - GX_VA_TEX0);
}
break;
default:
break;
}
}
GXVtxDescList* vtxDesc = mVtxDesc;
mHasPNMTXIdx = false;
for (; vtxDesc->attr != GX_VA_NULL; vtxDesc++) {
if (vtxDesc->attr == GX_VA_NBT && vtxDesc->type != GX_NONE) {
mHasNBT = true;
stride[GX_VA_NRM - GX_VA_POS] *= 3;
array[GX_VA_NRM - GX_VA_POS] = mVertexData->getVtxNBTArray();
} else if (vtxDesc->attr == GX_VA_PNMTXIDX && vtxDesc->type != GX_NONE) {
mHasPNMTXIdx = true;
}
}
for (u32 i = 0; i < 0x0C; i++) {
if (array[i] != 0)
GDSetArray((GXAttr)(i + GX_VA_POS), array[i], stride[i]);
else
GDSetArrayRaw((GXAttr)(i + GX_VA_POS), NULL, stride[i]);
}
}
#pragma pop
/* ############################################################################################## */
/* 804515C8-804515CC 000AC8 0004+00 1/1 0/0 0/0 .sbss sInterruptFlag$903 */
@ -264,14 +324,14 @@ void J3DShape::makeVcdVatCmd() {
void* J3DShape::sOldVcdVatCmd;
/* 80315300-80315398 30FC40 0098+00 2/2 6/6 3/3 .text loadPreDrawSetting__8J3DShapeCFv */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShape::loadPreDrawSetting() const {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShape/loadPreDrawSetting__8J3DShapeCFv.s"
void J3DShape::loadPreDrawSetting() const {
if (sOldVcdVatCmd != mVcdVatCmd) {
GXCallDisplayList(mVcdVatCmd, kVcdVatDLSize);
sOldVcdVatCmd = mVcdVatCmd;
}
mCurrentMtx.load();
}
#pragma pop
/* ############################################################################################## */
/* 804515D4-804515D8 000AD4 0004+00 3/3 0/0 0/0 .sbss None */
@ -308,18 +368,18 @@ void J3DShape::drawFast() const {
if (J3DShapeMtx::getLODFlag() != 0)
J3DShapeMtx::resetMtxLoadCache();
for (u16 n = mMtxGroupNum, i = 0; i < n; i++) {
if (mShapeMtx[i] != NULL)
mShapeMtx[i]->load();
if (mShapeDraw[i] != NULL)
mShapeDraw[i]->draw();
for (u16 n = getMtxGroupNum(), i = 0; i < n; i++) {
if (getShapeMtx(i) != NULL)
getShapeMtx(i)->load();
if (getShapeDraw(i) != NULL)
getShapeDraw(i)->draw();
}
} else {
J3DFifoLoadPosMtxImm(*j3dSys.mShapePacket->getBaseMtxPtr(), GX_PNMTX0);
J3DFifoLoadNrmMtxImm(*j3dSys.mShapePacket->getBaseMtxPtr(), GX_PNMTX0);
for (u16 n = mMtxGroupNum, i = 0; i < n; i++)
if (mShapeDraw[i] != NULL)
mShapeDraw[i]->draw();
J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), GX_PNMTX0);
J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), GX_PNMTX0);
for (u16 n = getMtxGroupNum(), i = 0; i < n; i++)
if (getShapeDraw(i) != NULL)
getShapeDraw(i)->draw();
}
}
#else
@ -348,9 +408,9 @@ void J3DShape::simpleDraw() const {
loadPreDrawSetting();
J3DShapeMtx::setCurrentPipeline(getPipeline());
loadVtxArray();
for (u16 n = mMtxGroupNum, i = 0; i < n; i++) {
if (mShapeDraw[i] != NULL) {
mShapeDraw[i]->draw();
for (u16 n = getMtxGroupNum(), i = 0; i < n; i++) {
if (getShapeDraw(i) != NULL) {
getShapeDraw(i)->draw();
}
}
}
@ -366,7 +426,7 @@ void J3DShape::simpleDrawCache() const {
mCurrentMtx.load();
loadVtxArray();
for (u16 n = mMtxGroupNum, i = 0; i < n; i++)
if (mShapeDraw[i] != NULL)
mShapeDraw[i]->draw();
for (u16 n = getMtxGroupNum(), i = 0; i < n; i++)
if (getShapeDraw(i) != NULL)
getShapeDraw(i)->draw();
}

View File

@ -4,46 +4,85 @@
//
#include "JSystem/J3DGraphBase/J3DShapeDraw.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dol2asm.h"
#include "dolphin/os/OSCache.h"
#include "dolphin/gx/GX.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void countVertex__12J3DShapeDrawFUl();
extern "C" void addTexMtxIndexInDL__12J3DShapeDrawFUlUlUl();
extern "C" void __ct__12J3DShapeDrawFPCUcUl();
extern "C" void draw__12J3DShapeDrawCFv();
extern "C" void __dt__12J3DShapeDrawFv();
#include "MSL_C/MSL_Common/Src/string.h"
//
// External References:
//
SECTION_INIT void memcpy();
extern "C" void countVertex__12J3DShapeDrawFUl();
extern "C" void* __nwa__FUli();
extern "C" void __dl__FPv();
extern "C" void DCStoreRange();
extern "C" void _savegpr_18();
extern "C" void _restgpr_18();
//
// Declarations:
//
/* 80314924-80314974 30F264 0050+00 1/1 0/0 0/0 .text countVertex__12J3DShapeDrawFUl */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DShapeDraw::countVertex(u32 param_0) {
nofralloc
#include "asm/JSystem/J3DGraphBase/J3DShapeDraw/countVertex__12J3DShapeDrawFUl.s"
u32 J3DShapeDraw::countVertex(u32 stride) {
u32 count = 0;
u32 dlStart = (u32)getDisplayList();
for (u8* dl = (u8*)dlStart; ((u32)dl - dlStart) < getDisplayListSize();) {
if (*dl != 0xA0 && *dl != 0x98)
break;
u16 vtxNum = *((u16*)(dl + 1));
count += vtxNum;
dl += stride * vtxNum;
dl += 3;
}
return count;
}
#pragma pop
#ifdef NONMATCHING
/* 80314974-80314ABC 30F2B4 0148+00 0/0 1/1 0/0 .text addTexMtxIndexInDL__12J3DShapeDrawFUlUlUl */
void J3DShapeDraw::addTexMtxIndexInDL(u32 stride, u32 attrOffs, u32 valueBase) {
u32 byteNum = countVertex(stride);
u32 newSize = ALIGN_NEXT(mDisplayListSize + byteNum, 0x20);
u8* newDLStart = new (0x20) u8[newSize];
u8* oldDLStart = getDisplayList();
u8* oldDL = oldDLStart;
u8* newDL = newDLStart;
for (; (oldDL - oldDLStart) < mDisplayListSize;) {
// Copy command
u8 h = *oldDL;
*newDL++ = h;
if (h != 0xA0 && h != 0x98)
break;
// Copy count
// regalloc (I suspect there's a way to shove this in a u16 temp without an mr)
u32 vtxNum = *((u16*)(oldDL + 1));
*((u16*)newDL) = vtxNum;
newDL += 2;
for (s32 i = 0; i < (u16)vtxNum; i++) {
// mul arg swap
u8* oldDLVtx = (&oldDL[stride * i + 3]);
u8 pnmtxidx = *oldDLVtx;
memcpy(newDL, oldDLVtx, attrOffs);
u8* newDL1 = &newDL[attrOffs];
*newDL1++ = valueBase + pnmtxidx;
memcpy(newDL1, oldDLVtx + attrOffs, stride - attrOffs);
newDL = newDL1 + (stride - attrOffs);
}
oldDL += stride * vtxNum;
oldDL += 3;
}
u32 realSize = ALIGN_NEXT((u32)newDL - (u32)newDLStart, 0x20);
for (; (newDL - newDLStart) < newSize; newDL++)
*newDL = 0;
mDisplayListSize = realSize;
mDisplayList = newDLStart;
DCStoreRange(newDLStart, mDisplayListSize);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -53,6 +92,8 @@ asm void J3DShapeDraw::addTexMtxIndexInDL(u32 param_0, u32 param_1, u32 param_2)
}
#pragma pop
#endif
/* 80314ABC-80314AD4 30F3FC 0018+00 0/0 1/1 0/0 .text __ct__12J3DShapeDrawFPCUcUl */
J3DShapeDraw::J3DShapeDraw(u8 const* displayList, u32 displayListSize) {
mDisplayList = (void*)displayList;