summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkData.s13
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s12
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s14
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkData.s13
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s16
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkData.s17
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s20
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkData.s17
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s16
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s16
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkData.s15
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s18
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkData.s21
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s24
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPADrawEmitterCallBackB__FP18JPAEmitterWorkData.s17
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle.s84
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXY__FPA4_fff.s20
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXZ__FPA4_fff.s20
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/basePlaneTypeX__FPA4_fff.s29
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/func_802782B4.s8
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/func_802782D0.s8
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/func_802782EC.s14
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/func_80278320.s8
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/func_8027833C.s41
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/func_80279364.s3
-rw-r--r--asm/JSystem/JParticle/JPABaseShape/func_8027936C.s3
-rw-r--r--asm/d/particle/d_particle/func_8004D988.s187
-rw-r--r--include/JSystem/JGeometry.h53
-rw-r--r--include/JSystem/JParticle/JPABaseShape.h17
-rw-r--r--include/JSystem/JParticle/JPAEmitter.h2
-rw-r--r--include/JSystem/JParticle/JPAList.h4
-rw-r--r--include/JSystem/JParticle/JPAParticle.h11
-rw-r--r--include/dolphin/mtx/vec.h18
-rw-r--r--libs/JSystem/JParticle/JPABaseShape.cpp954
-rw-r--r--src/d/particle/d_particle.cpp32
35 files changed, 850 insertions, 915 deletions
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkData.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkData.s
deleted file mode 100644
index 6a55eccdae..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkData.s
+++ /dev/null
@@ -1,13 +0,0 @@
-lbl_802771BC:
-/* 802771BC 80 83 00 04 */ lwz r4, 4(r3)
-/* 802771C0 80 A4 00 1C */ lwz r5, 0x1c(r4)
-/* 802771C4 80 83 00 00 */ lwz r4, 0(r3)
-/* 802771C8 80 C4 01 00 */ lwz r6, 0x100(r4)
-/* 802771CC 80 85 00 00 */ lwz r4, 0(r5)
-/* 802771D0 A8 04 00 24 */ lha r0, 0x24(r4)
-/* 802771D4 7C 06 00 40 */ cmplw r6, r0
-/* 802771D8 40 80 00 08 */ bge lbl_802771E0
-/* 802771DC 7C C0 07 34 */ extsh r0, r6
-lbl_802771E0:
-/* 802771E0 B0 03 02 14 */ sth r0, 0x214(r3)
-/* 802771E4 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index bcf39fe513..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,12 +0,0 @@
-lbl_802771E8:
-/* 802771E8 80 A3 00 04 */ lwz r5, 4(r3)
-/* 802771EC 80 A5 00 1C */ lwz r5, 0x1c(r5)
-/* 802771F0 A8 C4 00 80 */ lha r6, 0x80(r4)
-/* 802771F4 80 85 00 00 */ lwz r4, 0(r5)
-/* 802771F8 A8 04 00 24 */ lha r0, 0x24(r4)
-/* 802771FC 7C 06 00 00 */ cmpw r6, r0
-/* 80277200 40 80 00 08 */ bge lbl_80277208
-/* 80277204 7C C0 33 78 */ mr r0, r6
-lbl_80277208:
-/* 80277208 B0 03 02 14 */ sth r0, 0x214(r3)
-/* 8027720C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index 6d33ca55ca..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,14 +0,0 @@
-lbl_80277390:
-/* 80277390 80 A3 00 04 */ lwz r5, 4(r3)
-/* 80277394 80 A5 00 1C */ lwz r5, 0x1c(r5)
-/* 80277398 88 84 00 95 */ lbz r4, 0x95(r4)
-/* 8027739C 80 C5 00 00 */ lwz r6, 0(r5)
-/* 802773A0 88 06 00 2F */ lbz r0, 0x2f(r6)
-/* 802773A4 7C 85 00 38 */ and r5, r4, r0
-/* 802773A8 A8 86 00 24 */ lha r4, 0x24(r6)
-/* 802773AC 38 84 00 01 */ addi r4, r4, 1
-/* 802773B0 7C 05 23 D6 */ divw r0, r5, r4
-/* 802773B4 7C 00 21 D6 */ mullw r0, r0, r4
-/* 802773B8 7C 00 28 50 */ subf r0, r0, r5
-/* 802773BC B0 03 02 14 */ sth r0, 0x214(r3)
-/* 802773C0 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkData.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkData.s
deleted file mode 100644
index 6d1cc5dfb0..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkData.s
+++ /dev/null
@@ -1,13 +0,0 @@
-lbl_80277210:
-/* 80277210 80 83 00 04 */ lwz r4, 4(r3)
-/* 80277214 80 C4 00 1C */ lwz r6, 0x1c(r4)
-/* 80277218 80 83 00 00 */ lwz r4, 0(r3)
-/* 8027721C 80 A4 01 00 */ lwz r5, 0x100(r4)
-/* 80277220 80 86 00 00 */ lwz r4, 0(r6)
-/* 80277224 A8 84 00 24 */ lha r4, 0x24(r4)
-/* 80277228 38 84 00 01 */ addi r4, r4, 1
-/* 8027722C 7C 05 23 96 */ divwu r0, r5, r4
-/* 80277230 7C 00 21 D6 */ mullw r0, r0, r4
-/* 80277234 7C 00 28 50 */ subf r0, r0, r5
-/* 80277238 B0 03 02 14 */ sth r0, 0x214(r3)
-/* 8027723C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index da4bfd8aca..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,16 +0,0 @@
-lbl_80277240:
-/* 80277240 80 A3 00 04 */ lwz r5, 4(r3)
-/* 80277244 80 C5 00 1C */ lwz r6, 0x1c(r5)
-/* 80277248 88 A4 00 95 */ lbz r5, 0x95(r4)
-/* 8027724C 80 C6 00 00 */ lwz r6, 0(r6)
-/* 80277250 88 06 00 2F */ lbz r0, 0x2f(r6)
-/* 80277254 7C A5 00 38 */ and r5, r5, r0
-/* 80277258 A8 04 00 80 */ lha r0, 0x80(r4)
-/* 8027725C 7C A0 2A 14 */ add r5, r0, r5
-/* 80277260 A8 86 00 24 */ lha r4, 0x24(r6)
-/* 80277264 38 84 00 01 */ addi r4, r4, 1
-/* 80277268 7C 05 23 D6 */ divw r0, r5, r4
-/* 8027726C 7C 00 21 D6 */ mullw r0, r0, r4
-/* 80277270 7C 00 28 50 */ subf r0, r0, r5
-/* 80277274 B0 03 02 14 */ sth r0, 0x214(r3)
-/* 80277278 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkData.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkData.s
deleted file mode 100644
index 0f4274733c..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkData.s
+++ /dev/null
@@ -1,17 +0,0 @@
-lbl_8027727C:
-/* 8027727C 80 83 00 04 */ lwz r4, 4(r3)
-/* 80277280 80 84 00 1C */ lwz r4, 0x1c(r4)
-/* 80277284 80 84 00 00 */ lwz r4, 0(r4)
-/* 80277288 A8 A4 00 24 */ lha r5, 0x24(r4)
-/* 8027728C 80 83 00 00 */ lwz r4, 0(r3)
-/* 80277290 80 C4 01 00 */ lwz r6, 0x100(r4)
-/* 80277294 7C 86 2B 96 */ divwu r4, r6, r5
-/* 80277298 7C 04 29 D6 */ mullw r0, r4, r5
-/* 8027729C 7C C0 30 50 */ subf r6, r0, r6
-/* 802772A0 54 84 07 FE */ clrlwi r4, r4, 0x1f
-/* 802772A4 54 C0 08 3C */ slwi r0, r6, 1
-/* 802772A8 7C 00 28 50 */ subf r0, r0, r5
-/* 802772AC 7C 04 01 D6 */ mullw r0, r4, r0
-/* 802772B0 7C 06 02 14 */ add r0, r6, r0
-/* 802772B4 B0 03 02 14 */ sth r0, 0x214(r3)
-/* 802772B8 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index ee3ca52968..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,20 +0,0 @@
-lbl_802772BC:
-/* 802772BC 80 A3 00 04 */ lwz r5, 4(r3)
-/* 802772C0 80 C5 00 1C */ lwz r6, 0x1c(r5)
-/* 802772C4 88 A4 00 95 */ lbz r5, 0x95(r4)
-/* 802772C8 80 C6 00 00 */ lwz r6, 0(r6)
-/* 802772CC 88 06 00 2F */ lbz r0, 0x2f(r6)
-/* 802772D0 7C A5 00 38 */ and r5, r5, r0
-/* 802772D4 A8 04 00 80 */ lha r0, 0x80(r4)
-/* 802772D8 7C E0 2A 14 */ add r7, r0, r5
-/* 802772DC A8 A6 00 24 */ lha r5, 0x24(r6)
-/* 802772E0 7C 87 2B D6 */ divw r4, r7, r5
-/* 802772E4 7C 04 29 D6 */ mullw r0, r4, r5
-/* 802772E8 7C C0 38 50 */ subf r6, r0, r7
-/* 802772EC 54 84 07 FE */ clrlwi r4, r4, 0x1f
-/* 802772F0 54 C0 08 3C */ slwi r0, r6, 1
-/* 802772F4 7C 00 28 50 */ subf r0, r0, r5
-/* 802772F8 7C 04 01 D6 */ mullw r0, r4, r0
-/* 802772FC 7C 06 02 14 */ add r0, r6, r0
-/* 80277300 B0 03 02 14 */ sth r0, 0x214(r3)
-/* 80277304 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkData.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkData.s
deleted file mode 100644
index 1436a6e941..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkData.s
+++ /dev/null
@@ -1,17 +0,0 @@
-lbl_802779DC:
-/* 802779DC 80 83 00 04 */ lwz r4, 4(r3)
-/* 802779E0 80 A4 00 1C */ lwz r5, 0x1c(r4)
-/* 802779E4 80 85 00 00 */ lwz r4, 0(r5)
-/* 802779E8 88 84 00 1F */ lbz r4, 0x1f(r4)
-/* 802779EC 38 04 FF FF */ addi r0, r4, -1
-/* 802779F0 80 C3 00 00 */ lwz r6, 0(r3)
-/* 802779F4 80 86 01 00 */ lwz r4, 0x100(r6)
-/* 802779F8 7C 00 20 40 */ cmplw r0, r4
-/* 802779FC 40 80 00 08 */ bge lbl_80277A04
-/* 80277A00 7C 04 03 78 */ mr r4, r0
-lbl_80277A04:
-/* 80277A04 80 65 00 08 */ lwz r3, 8(r5)
-/* 80277A08 54 80 06 3E */ clrlwi r0, r4, 0x18
-/* 80277A0C 7C 03 00 AE */ lbzx r0, r3, r0
-/* 80277A10 98 06 01 11 */ stb r0, 0x111(r6)
-/* 80277A14 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index 40a86c6880..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,16 +0,0 @@
-lbl_80277A18:
-/* 80277A18 80 63 00 04 */ lwz r3, 4(r3)
-/* 80277A1C 80 A3 00 1C */ lwz r5, 0x1c(r3)
-/* 80277A20 80 65 00 00 */ lwz r3, 0(r5)
-/* 80277A24 88 63 00 1F */ lbz r3, 0x1f(r3)
-/* 80277A28 38 03 FF FF */ addi r0, r3, -1
-/* 80277A2C A8 C4 00 80 */ lha r6, 0x80(r4)
-/* 80277A30 7C 00 30 00 */ cmpw r0, r6
-/* 80277A34 40 80 00 08 */ bge lbl_80277A3C
-/* 80277A38 7C 06 03 78 */ mr r6, r0
-lbl_80277A3C:
-/* 80277A3C 80 65 00 08 */ lwz r3, 8(r5)
-/* 80277A40 54 C0 06 3E */ clrlwi r0, r6, 0x18
-/* 80277A44 7C 03 00 AE */ lbzx r0, r3, r0
-/* 80277A48 98 04 00 94 */ stb r0, 0x94(r4)
-/* 80277A4C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index 56ef44825a..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,16 +0,0 @@
-lbl_80277C28:
-/* 80277C28 80 63 00 04 */ lwz r3, 4(r3)
-/* 80277C2C 80 A3 00 1C */ lwz r5, 0x1c(r3)
-/* 80277C30 88 64 00 95 */ lbz r3, 0x95(r4)
-/* 80277C34 80 E5 00 00 */ lwz r7, 0(r5)
-/* 80277C38 88 07 00 30 */ lbz r0, 0x30(r7)
-/* 80277C3C 7C 66 00 38 */ and r6, r3, r0
-/* 80277C40 80 A5 00 08 */ lwz r5, 8(r5)
-/* 80277C44 88 67 00 1F */ lbz r3, 0x1f(r7)
-/* 80277C48 7C 06 1B D6 */ divw r0, r6, r3
-/* 80277C4C 7C 00 19 D6 */ mullw r0, r0, r3
-/* 80277C50 7C 00 30 50 */ subf r0, r0, r6
-/* 80277C54 54 00 06 3E */ clrlwi r0, r0, 0x18
-/* 80277C58 7C 05 00 AE */ lbzx r0, r5, r0
-/* 80277C5C 98 04 00 94 */ stb r0, 0x94(r4)
-/* 80277C60 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkData.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkData.s
deleted file mode 100644
index 9790ed816c..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkData.s
+++ /dev/null
@@ -1,15 +0,0 @@
-lbl_80277A50:
-/* 80277A50 80 83 00 04 */ lwz r4, 4(r3)
-/* 80277A54 80 C4 00 1C */ lwz r6, 0x1c(r4)
-/* 80277A58 80 A6 00 08 */ lwz r5, 8(r6)
-/* 80277A5C 80 E3 00 00 */ lwz r7, 0(r3)
-/* 80277A60 80 87 01 00 */ lwz r4, 0x100(r7)
-/* 80277A64 80 66 00 00 */ lwz r3, 0(r6)
-/* 80277A68 88 63 00 1F */ lbz r3, 0x1f(r3)
-/* 80277A6C 7C 04 1B 96 */ divwu r0, r4, r3
-/* 80277A70 7C 00 19 D6 */ mullw r0, r0, r3
-/* 80277A74 7C 00 20 50 */ subf r0, r0, r4
-/* 80277A78 54 00 06 3E */ clrlwi r0, r0, 0x18
-/* 80277A7C 7C 05 00 AE */ lbzx r0, r5, r0
-/* 80277A80 98 07 01 11 */ stb r0, 0x111(r7)
-/* 80277A84 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index 12557e432c..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,18 +0,0 @@
-lbl_80277A88:
-/* 80277A88 80 63 00 04 */ lwz r3, 4(r3)
-/* 80277A8C 80 A3 00 1C */ lwz r5, 0x1c(r3)
-/* 80277A90 88 64 00 95 */ lbz r3, 0x95(r4)
-/* 80277A94 80 E5 00 00 */ lwz r7, 0(r5)
-/* 80277A98 88 07 00 30 */ lbz r0, 0x30(r7)
-/* 80277A9C 7C 63 00 38 */ and r3, r3, r0
-/* 80277AA0 80 C5 00 08 */ lwz r6, 8(r5)
-/* 80277AA4 A8 04 00 80 */ lha r0, 0x80(r4)
-/* 80277AA8 7C A0 1A 14 */ add r5, r0, r3
-/* 80277AAC 88 67 00 1F */ lbz r3, 0x1f(r7)
-/* 80277AB0 7C 05 1B D6 */ divw r0, r5, r3
-/* 80277AB4 7C 00 19 D6 */ mullw r0, r0, r3
-/* 80277AB8 7C 00 28 50 */ subf r0, r0, r5
-/* 80277ABC 54 00 06 3E */ clrlwi r0, r0, 0x18
-/* 80277AC0 7C 06 00 AE */ lbzx r0, r6, r0
-/* 80277AC4 98 04 00 94 */ stb r0, 0x94(r4)
-/* 80277AC8 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkData.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkData.s
deleted file mode 100644
index 9eb993abcb..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkData.s
+++ /dev/null
@@ -1,21 +0,0 @@
-lbl_80277ACC:
-/* 80277ACC 80 83 00 04 */ lwz r4, 4(r3)
-/* 80277AD0 80 84 00 1C */ lwz r4, 0x1c(r4)
-/* 80277AD4 80 A3 00 00 */ lwz r5, 0(r3)
-/* 80277AD8 80 C5 01 00 */ lwz r6, 0x100(r5)
-/* 80277ADC 80 64 00 00 */ lwz r3, 0(r4)
-/* 80277AE0 88 63 00 1F */ lbz r3, 0x1f(r3)
-/* 80277AE4 38 E3 FF FF */ addi r7, r3, -1
-/* 80277AE8 7C 66 3B D6 */ divw r3, r6, r7
-/* 80277AEC 7C 03 39 D6 */ mullw r0, r3, r7
-/* 80277AF0 7C C0 30 50 */ subf r6, r0, r6
-/* 80277AF4 80 84 00 08 */ lwz r4, 8(r4)
-/* 80277AF8 54 63 07 FE */ clrlwi r3, r3, 0x1f
-/* 80277AFC 54 C0 08 3C */ slwi r0, r6, 1
-/* 80277B00 7C 00 38 50 */ subf r0, r0, r7
-/* 80277B04 7C 03 01 D6 */ mullw r0, r3, r0
-/* 80277B08 7C 06 02 14 */ add r0, r6, r0
-/* 80277B0C 54 00 06 3E */ clrlwi r0, r0, 0x18
-/* 80277B10 7C 04 00 AE */ lbzx r0, r4, r0
-/* 80277B14 98 05 01 11 */ stb r0, 0x111(r5)
-/* 80277B18 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index 3e23e8a444..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,24 +0,0 @@
-lbl_80277B1C:
-/* 80277B1C 80 63 00 04 */ lwz r3, 4(r3)
-/* 80277B20 80 A3 00 1C */ lwz r5, 0x1c(r3)
-/* 80277B24 88 64 00 95 */ lbz r3, 0x95(r4)
-/* 80277B28 80 C5 00 00 */ lwz r6, 0(r5)
-/* 80277B2C 88 06 00 30 */ lbz r0, 0x30(r6)
-/* 80277B30 7C 63 00 38 */ and r3, r3, r0
-/* 80277B34 A8 04 00 80 */ lha r0, 0x80(r4)
-/* 80277B38 7C E0 1A 14 */ add r7, r0, r3
-/* 80277B3C 88 66 00 1F */ lbz r3, 0x1f(r6)
-/* 80277B40 38 C3 FF FF */ addi r6, r3, -1
-/* 80277B44 7C 67 33 D6 */ divw r3, r7, r6
-/* 80277B48 7C 03 31 D6 */ mullw r0, r3, r6
-/* 80277B4C 7C E0 38 50 */ subf r7, r0, r7
-/* 80277B50 80 A5 00 08 */ lwz r5, 8(r5)
-/* 80277B54 54 63 07 FE */ clrlwi r3, r3, 0x1f
-/* 80277B58 54 E0 08 3C */ slwi r0, r7, 1
-/* 80277B5C 7C 00 30 50 */ subf r0, r0, r6
-/* 80277B60 7C 03 01 D6 */ mullw r0, r3, r0
-/* 80277B64 7C 07 02 14 */ add r0, r7, r0
-/* 80277B68 54 00 06 3E */ clrlwi r0, r0, 0x18
-/* 80277B6C 7C 05 00 AE */ lbzx r0, r5, r0
-/* 80277B70 98 04 00 94 */ stb r0, 0x94(r4)
-/* 80277B74 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPADrawEmitterCallBackB__FP18JPAEmitterWorkData.s b/asm/JSystem/JParticle/JPABaseShape/JPADrawEmitterCallBackB__FP18JPAEmitterWorkData.s
deleted file mode 100644
index f63f336bc4..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPADrawEmitterCallBackB__FP18JPAEmitterWorkData.s
+++ /dev/null
@@ -1,17 +0,0 @@
-lbl_8027A3D8:
-/* 8027A3D8 94 21 FF F0 */ stwu r1, -0x10(r1)
-/* 8027A3DC 7C 08 02 A6 */ mflr r0
-/* 8027A3E0 90 01 00 14 */ stw r0, 0x14(r1)
-/* 8027A3E4 80 83 00 00 */ lwz r4, 0(r3)
-/* 8027A3E8 80 64 00 EC */ lwz r3, 0xec(r4)
-/* 8027A3EC 28 03 00 00 */ cmplwi r3, 0
-/* 8027A3F0 41 82 00 14 */ beq lbl_8027A404
-/* 8027A3F4 81 83 00 00 */ lwz r12, 0(r3)
-/* 8027A3F8 81 8C 00 14 */ lwz r12, 0x14(r12)
-/* 8027A3FC 7D 89 03 A6 */ mtctr r12
-/* 8027A400 4E 80 04 21 */ bctrl
-lbl_8027A404:
-/* 8027A404 80 01 00 14 */ lwz r0, 0x14(r1)
-/* 8027A408 7C 08 03 A6 */ mtlr r0
-/* 8027A40C 38 21 00 10 */ addi r1, r1, 0x10
-/* 8027A410 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle.s b/asm/JSystem/JParticle/JPABaseShape/JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle.s
deleted file mode 100644
index 905e854ffc..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle.s
+++ /dev/null
@@ -1,84 +0,0 @@
-lbl_80278FC8:
-/* 80278FC8 94 21 FF 90 */ stwu r1, -0x70(r1)
-/* 80278FCC 7C 08 02 A6 */ mflr r0
-/* 80278FD0 90 01 00 74 */ stw r0, 0x74(r1)
-/* 80278FD4 DB E1 00 60 */ stfd f31, 0x60(r1)
-/* 80278FD8 F3 E1 00 68 */ psq_st f31, 104(r1), 0, 0 /* qr0 */
-/* 80278FDC DB C1 00 50 */ stfd f30, 0x50(r1)
-/* 80278FE0 F3 C1 00 58 */ psq_st f30, 88(r1), 0, 0 /* qr0 */
-/* 80278FE4 39 61 00 50 */ addi r11, r1, 0x50
-/* 80278FE8 48 0E 91 F5 */ bl _savegpr_29
-/* 80278FEC 7C 7D 1B 78 */ mr r29, r3
-/* 80278FF0 7C 9E 23 78 */ mr r30, r4
-/* 80278FF4 3C 60 80 3C */ lis r3, jpa_dl@ha /* 0x803C42E0@ha */
-/* 80278FF8 3B E3 42 E0 */ addi r31, r3, jpa_dl@l /* 0x803C42E0@l */
-/* 80278FFC 80 04 00 7C */ lwz r0, 0x7c(r4)
-/* 80279000 54 00 07 39 */ rlwinm. r0, r0, 0, 0x1c, 0x1c
-/* 80279004 40 82 00 E4 */ bne lbl_802790E8
-/* 80279008 A0 1E 00 88 */ lhz r0, 0x88(r30)
-/* 8027900C 54 00 04 38 */ rlwinm r0, r0, 0, 0x10, 0x1c
-/* 80279010 3C 60 80 44 */ lis r3, sincosTable___5JMath@ha /* 0x80439A20@ha */
-/* 80279014 38 63 9A 20 */ addi r3, r3, sincosTable___5JMath@l /* 0x80439A20@l */
-/* 80279018 7C 23 04 2E */ lfsx f1, r3, r0
-/* 8027901C 7C 63 02 14 */ add r3, r3, r0
-/* 80279020 C0 43 00 04 */ lfs f2, 4(r3)
-/* 80279024 C0 7D 01 44 */ lfs f3, 0x144(r29)
-/* 80279028 C0 1E 00 60 */ lfs f0, 0x60(r30)
-/* 8027902C EF E3 00 32 */ fmuls f31, f3, f0
-/* 80279030 C0 7D 01 48 */ lfs f3, 0x148(r29)
-/* 80279034 C0 1E 00 64 */ lfs f0, 0x64(r30)
-/* 80279038 EF C3 00 32 */ fmuls f30, f3, f0
-/* 8027903C 38 61 00 08 */ addi r3, r1, 8
-/* 80279040 80 1D 02 04 */ lwz r0, 0x204(r29)
-/* 80279044 54 00 10 3A */ slwi r0, r0, 2
-/* 80279048 38 9F 00 60 */ addi r4, r31, 0x60
-/* 8027904C 7D 84 00 2E */ lwzx r12, r4, r0
-/* 80279050 7D 89 03 A6 */ mtctr r12
-/* 80279054 4E 80 04 21 */ bctrl
-/* 80279058 38 61 00 08 */ addi r3, r1, 8
-/* 8027905C FC 20 F8 90 */ fmr f1, f31
-/* 80279060 FC 40 F0 90 */ fmr f2, f30
-/* 80279064 80 1D 02 08 */ lwz r0, 0x208(r29)
-/* 80279068 54 00 10 3A */ slwi r0, r0, 2
-/* 8027906C 38 9F 00 74 */ addi r4, r31, 0x74
-/* 80279070 7D 84 00 2E */ lwzx r12, r4, r0
-/* 80279074 7D 89 03 A6 */ mtctr r12
-/* 80279078 4E 80 04 21 */ bctrl
-/* 8027907C C0 1E 00 00 */ lfs f0, 0(r30)
-/* 80279080 D0 01 00 14 */ stfs f0, 0x14(r1)
-/* 80279084 C0 1E 00 04 */ lfs f0, 4(r30)
-/* 80279088 D0 01 00 24 */ stfs f0, 0x24(r1)
-/* 8027908C C0 1E 00 08 */ lfs f0, 8(r30)
-/* 80279090 D0 01 00 34 */ stfs f0, 0x34(r1)
-/* 80279094 38 7D 01 84 */ addi r3, r29, 0x184
-/* 80279098 38 81 00 08 */ addi r4, r1, 8
-/* 8027909C 7C 85 23 78 */ mr r5, r4
-/* 802790A0 48 0C D4 45 */ bl PSMTXConcat
-/* 802790A4 38 61 00 08 */ addi r3, r1, 8
-/* 802790A8 38 80 00 00 */ li r4, 0
-/* 802790AC 48 0E 71 A1 */ bl GXLoadPosMtxImm
-/* 802790B0 7F A3 EB 78 */ mr r3, r29
-/* 802790B4 38 81 00 08 */ addi r4, r1, 8
-/* 802790B8 80 1D 02 10 */ lwz r0, 0x210(r29)
-/* 802790BC 54 00 10 3A */ slwi r0, r0, 2
-/* 802790C0 38 BF 00 40 */ addi r5, r31, 0x40
-/* 802790C4 7D 85 00 2E */ lwzx r12, r5, r0
-/* 802790C8 7D 89 03 A6 */ mtctr r12
-/* 802790CC 4E 80 04 21 */ bctrl
-/* 802790D0 80 1D 02 0C */ lwz r0, 0x20c(r29)
-/* 802790D4 54 00 10 3A */ slwi r0, r0, 2
-/* 802790D8 38 6D 82 20 */ la r3, p_dl(r13) /* 804507A0-_SDA_BASE_ */
-/* 802790DC 7C 63 00 2E */ lwzx r3, r3, r0
-/* 802790E0 38 80 00 20 */ li r4, 0x20
-/* 802790E4 48 0E 6E 0D */ bl GXCallDisplayList
-lbl_802790E8:
-/* 802790E8 E3 E1 00 68 */ psq_l f31, 104(r1), 0, 0 /* qr0 */
-/* 802790EC CB E1 00 60 */ lfd f31, 0x60(r1)
-/* 802790F0 E3 C1 00 58 */ psq_l f30, 88(r1), 0, 0 /* qr0 */
-/* 802790F4 CB C1 00 50 */ lfd f30, 0x50(r1)
-/* 802790F8 39 61 00 50 */ addi r11, r1, 0x50
-/* 802790FC 48 0E 91 2D */ bl _restgpr_29
-/* 80279100 80 01 00 74 */ lwz r0, 0x74(r1)
-/* 80279104 7C 08 03 A6 */ mtlr r0
-/* 80279108 38 21 00 70 */ addi r1, r1, 0x70
-/* 8027910C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXY__FPA4_fff.s b/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXY__FPA4_fff.s
deleted file mode 100644
index bce8991b1e..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXY__FPA4_fff.s
+++ /dev/null
@@ -1,20 +0,0 @@
-lbl_802784F0:
-/* 802784F0 C0 03 00 00 */ lfs f0, 0(r3)
-/* 802784F4 EC 00 00 72 */ fmuls f0, f0, f1
-/* 802784F8 D0 03 00 00 */ stfs f0, 0(r3)
-/* 802784FC C0 03 00 10 */ lfs f0, 0x10(r3)
-/* 80278500 EC 00 00 72 */ fmuls f0, f0, f1
-/* 80278504 D0 03 00 10 */ stfs f0, 0x10(r3)
-/* 80278508 C0 03 00 20 */ lfs f0, 0x20(r3)
-/* 8027850C EC 00 00 72 */ fmuls f0, f0, f1
-/* 80278510 D0 03 00 20 */ stfs f0, 0x20(r3)
-/* 80278514 C0 03 00 04 */ lfs f0, 4(r3)
-/* 80278518 EC 00 00 B2 */ fmuls f0, f0, f2
-/* 8027851C D0 03 00 04 */ stfs f0, 4(r3)
-/* 80278520 C0 03 00 14 */ lfs f0, 0x14(r3)
-/* 80278524 EC 00 00 B2 */ fmuls f0, f0, f2
-/* 80278528 D0 03 00 14 */ stfs f0, 0x14(r3)
-/* 8027852C C0 03 00 24 */ lfs f0, 0x24(r3)
-/* 80278530 EC 00 00 B2 */ fmuls f0, f0, f2
-/* 80278534 D0 03 00 24 */ stfs f0, 0x24(r3)
-/* 80278538 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXZ__FPA4_fff.s b/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXZ__FPA4_fff.s
deleted file mode 100644
index 795bd1e94b..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXZ__FPA4_fff.s
+++ /dev/null
@@ -1,20 +0,0 @@
-lbl_8027853C:
-/* 8027853C C0 03 00 00 */ lfs f0, 0(r3)
-/* 80278540 EC 00 00 72 */ fmuls f0, f0, f1
-/* 80278544 D0 03 00 00 */ stfs f0, 0(r3)
-/* 80278548 C0 03 00 10 */ lfs f0, 0x10(r3)
-/* 8027854C EC 00 00 72 */ fmuls f0, f0, f1
-/* 80278550 D0 03 00 10 */ stfs f0, 0x10(r3)
-/* 80278554 C0 03 00 20 */ lfs f0, 0x20(r3)
-/* 80278558 EC 00 00 72 */ fmuls f0, f0, f1
-/* 8027855C D0 03 00 20 */ stfs f0, 0x20(r3)
-/* 80278560 C0 03 00 08 */ lfs f0, 8(r3)
-/* 80278564 EC 00 00 B2 */ fmuls f0, f0, f2
-/* 80278568 D0 03 00 08 */ stfs f0, 8(r3)
-/* 8027856C C0 03 00 18 */ lfs f0, 0x18(r3)
-/* 80278570 EC 00 00 B2 */ fmuls f0, f0, f2
-/* 80278574 D0 03 00 18 */ stfs f0, 0x18(r3)
-/* 80278578 C0 03 00 28 */ lfs f0, 0x28(r3)
-/* 8027857C EC 00 00 B2 */ fmuls f0, f0, f2
-/* 80278580 D0 03 00 28 */ stfs f0, 0x28(r3)
-/* 80278584 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeX__FPA4_fff.s b/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeX__FPA4_fff.s
deleted file mode 100644
index f20cc85e94..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/basePlaneTypeX__FPA4_fff.s
+++ /dev/null
@@ -1,29 +0,0 @@
-lbl_80278588:
-/* 80278588 C0 03 00 00 */ lfs f0, 0(r3)
-/* 8027858C EC 00 00 72 */ fmuls f0, f0, f1
-/* 80278590 D0 03 00 00 */ stfs f0, 0(r3)
-/* 80278594 C0 03 00 10 */ lfs f0, 0x10(r3)
-/* 80278598 EC 00 00 72 */ fmuls f0, f0, f1
-/* 8027859C D0 03 00 10 */ stfs f0, 0x10(r3)
-/* 802785A0 C0 03 00 20 */ lfs f0, 0x20(r3)
-/* 802785A4 EC 00 00 72 */ fmuls f0, f0, f1
-/* 802785A8 D0 03 00 20 */ stfs f0, 0x20(r3)
-/* 802785AC C0 03 00 04 */ lfs f0, 4(r3)
-/* 802785B0 EC 00 00 B2 */ fmuls f0, f0, f2
-/* 802785B4 D0 03 00 04 */ stfs f0, 4(r3)
-/* 802785B8 C0 03 00 14 */ lfs f0, 0x14(r3)
-/* 802785BC EC 00 00 B2 */ fmuls f0, f0, f2
-/* 802785C0 D0 03 00 14 */ stfs f0, 0x14(r3)
-/* 802785C4 C0 03 00 24 */ lfs f0, 0x24(r3)
-/* 802785C8 EC 00 00 B2 */ fmuls f0, f0, f2
-/* 802785CC D0 03 00 24 */ stfs f0, 0x24(r3)
-/* 802785D0 C0 03 00 08 */ lfs f0, 8(r3)
-/* 802785D4 EC 00 00 72 */ fmuls f0, f0, f1
-/* 802785D8 D0 03 00 08 */ stfs f0, 8(r3)
-/* 802785DC C0 03 00 18 */ lfs f0, 0x18(r3)
-/* 802785E0 EC 00 00 72 */ fmuls f0, f0, f1
-/* 802785E4 D0 03 00 18 */ stfs f0, 0x18(r3)
-/* 802785E8 C0 03 00 28 */ lfs f0, 0x28(r3)
-/* 802785EC EC 00 00 72 */ fmuls f0, f0, f1
-/* 802785F0 D0 03 00 28 */ stfs f0, 0x28(r3)
-/* 802785F4 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/func_802782B4.s b/asm/JSystem/JParticle/JPABaseShape/func_802782B4.s
deleted file mode 100644
index ac020c41d9..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/func_802782B4.s
+++ /dev/null
@@ -1,8 +0,0 @@
-lbl_802782B4:
-/* 802782B4 C0 04 00 24 */ lfs f0, 0x24(r4)
-/* 802782B8 D0 05 00 00 */ stfs f0, 0(r5)
-/* 802782BC C0 04 00 28 */ lfs f0, 0x28(r4)
-/* 802782C0 D0 05 00 04 */ stfs f0, 4(r5)
-/* 802782C4 C0 04 00 2C */ lfs f0, 0x2c(r4)
-/* 802782C8 D0 05 00 08 */ stfs f0, 8(r5)
-/* 802782CC 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/func_802782D0.s b/asm/JSystem/JParticle/JPABaseShape/func_802782D0.s
deleted file mode 100644
index 36332b01b1..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/func_802782D0.s
+++ /dev/null
@@ -1,8 +0,0 @@
-lbl_802782D0:
-/* 802782D0 C0 04 00 0C */ lfs f0, 0xc(r4)
-/* 802782D4 D0 05 00 00 */ stfs f0, 0(r5)
-/* 802782D8 C0 04 00 10 */ lfs f0, 0x10(r4)
-/* 802782DC D0 05 00 04 */ stfs f0, 4(r5)
-/* 802782E0 C0 04 00 14 */ lfs f0, 0x14(r4)
-/* 802782E4 D0 05 00 08 */ stfs f0, 8(r5)
-/* 802782E8 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/func_802782EC.s b/asm/JSystem/JParticle/JPABaseShape/func_802782EC.s
deleted file mode 100644
index edd3d87625..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/func_802782EC.s
+++ /dev/null
@@ -1,14 +0,0 @@
-lbl_802782EC:
-/* 802782EC C0 04 00 0C */ lfs f0, 0xc(r4)
-/* 802782F0 D0 05 00 00 */ stfs f0, 0(r5)
-/* 802782F4 C0 04 00 10 */ lfs f0, 0x10(r4)
-/* 802782F8 D0 05 00 04 */ stfs f0, 4(r5)
-/* 802782FC C0 04 00 14 */ lfs f0, 0x14(r4)
-/* 80278300 D0 05 00 08 */ stfs f0, 8(r5)
-/* 80278304 E0 05 00 00 */ psq_l f0, 0(r5), 0, 0 /* qr0 */
-/* 80278308 10 00 00 50 */ ps_neg f0, f0
-/* 8027830C F0 05 00 00 */ psq_st f0, 0(r5), 0, 0 /* qr0 */
-/* 80278310 C0 05 00 08 */ lfs f0, 8(r5)
-/* 80278314 FC 00 00 50 */ fneg f0, f0
-/* 80278318 D0 05 00 08 */ stfs f0, 8(r5)
-/* 8027831C 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/func_80278320.s b/asm/JSystem/JParticle/JPABaseShape/func_80278320.s
deleted file mode 100644
index 414bb4d53f..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/func_80278320.s
+++ /dev/null
@@ -1,8 +0,0 @@
-lbl_80278320:
-/* 80278320 C0 03 01 20 */ lfs f0, 0x120(r3)
-/* 80278324 D0 05 00 00 */ stfs f0, 0(r5)
-/* 80278328 C0 03 01 24 */ lfs f0, 0x124(r3)
-/* 8027832C D0 05 00 04 */ stfs f0, 4(r5)
-/* 80278330 C0 03 01 28 */ lfs f0, 0x128(r3)
-/* 80278334 D0 05 00 08 */ stfs f0, 8(r5)
-/* 80278338 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/func_8027833C.s b/asm/JSystem/JParticle/JPABaseShape/func_8027833C.s
deleted file mode 100644
index ffdd79f5fc..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/func_8027833C.s
+++ /dev/null
@@ -1,41 +0,0 @@
-lbl_8027833C:
-/* 8027833C 94 21 FF E0 */ stwu r1, -0x20(r1)
-/* 80278340 7C 08 02 A6 */ mflr r0
-/* 80278344 90 01 00 24 */ stw r0, 0x24(r1)
-/* 80278348 93 E1 00 1C */ stw r31, 0x1c(r1)
-/* 8027834C 7C BF 2B 78 */ mr r31, r5
-/* 80278350 C0 04 00 00 */ lfs f0, 0(r4)
-/* 80278354 D0 01 00 08 */ stfs f0, 8(r1)
-/* 80278358 C0 04 00 04 */ lfs f0, 4(r4)
-/* 8027835C D0 01 00 0C */ stfs f0, 0xc(r1)
-/* 80278360 C0 04 00 08 */ lfs f0, 8(r4)
-/* 80278364 D0 01 00 10 */ stfs f0, 0x10(r1)
-/* 80278368 80 83 01 E8 */ lwz r4, 0x1e8(r3)
-/* 8027836C 80 84 00 00 */ lwz r4, 0(r4)
-/* 80278370 28 04 00 00 */ cmplwi r4, 0
-/* 80278374 41 82 00 20 */ beq lbl_80278394
-/* 80278378 C0 04 00 08 */ lfs f0, 8(r4)
-/* 8027837C D0 1F 00 00 */ stfs f0, 0(r31)
-/* 80278380 C0 04 00 0C */ lfs f0, 0xc(r4)
-/* 80278384 D0 1F 00 04 */ stfs f0, 4(r31)
-/* 80278388 C0 04 00 10 */ lfs f0, 0x10(r4)
-/* 8027838C D0 1F 00 08 */ stfs f0, 8(r31)
-/* 80278390 48 00 00 10 */ b lbl_802783A0
-lbl_80278394:
-/* 80278394 80 63 00 00 */ lwz r3, 0(r3)
-/* 80278398 7F E4 FB 78 */ mr r4, r31
-/* 8027839C 48 00 6B 15 */ bl func_8027EEB0
-lbl_802783A0:
-/* 802783A0 E0 3F 00 00 */ psq_l f1, 0(r31), 0, 0 /* qr0 */
-/* 802783A4 E0 01 00 08 */ psq_l f0, 8(r1), 0, 0 /* qr0 */
-/* 802783A8 10 01 00 28 */ ps_sub f0, f1, f0
-/* 802783AC F0 1F 00 00 */ psq_st f0, 0(r31), 0, 0 /* qr0 */
-/* 802783B0 E0 3F 80 08 */ psq_l f1, 8(r31), 1, 0 /* qr0 */
-/* 802783B4 E0 01 80 10 */ psq_l f0, 16(r1), 1, 0 /* qr0 */
-/* 802783B8 10 01 00 28 */ ps_sub f0, f1, f0
-/* 802783BC F0 1F 80 08 */ psq_st f0, 8(r31), 1, 0 /* qr0 */
-/* 802783C0 83 E1 00 1C */ lwz r31, 0x1c(r1)
-/* 802783C4 80 01 00 24 */ lwz r0, 0x24(r1)
-/* 802783C8 7C 08 03 A6 */ mtlr r0
-/* 802783CC 38 21 00 20 */ addi r1, r1, 0x20
-/* 802783D0 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/func_80279364.s b/asm/JSystem/JParticle/JPABaseShape/func_80279364.s
deleted file mode 100644
index 6d9e88e9a5..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/func_80279364.s
+++ /dev/null
@@ -1,3 +0,0 @@
-lbl_80279364:
-/* 80279364 80 63 00 04 */ lwz r3, 4(r3)
-/* 80279368 4E 80 00 20 */ blr
diff --git a/asm/JSystem/JParticle/JPABaseShape/func_8027936C.s b/asm/JSystem/JParticle/JPABaseShape/func_8027936C.s
deleted file mode 100644
index 297c7e3bc9..0000000000
--- a/asm/JSystem/JParticle/JPABaseShape/func_8027936C.s
+++ /dev/null
@@ -1,3 +0,0 @@
-lbl_8027936C:
-/* 8027936C 80 63 00 00 */ lwz r3, 0(r3)
-/* 80279370 4E 80 00 20 */ blr
diff --git a/asm/d/particle/d_particle/func_8004D988.s b/asm/d/particle/d_particle/func_8004D988.s
deleted file mode 100644
index a9f1bab43a..0000000000
--- a/asm/d/particle/d_particle/func_8004D988.s
+++ /dev/null
@@ -1,187 +0,0 @@
-lbl_8004D988:
-/* 8004D988 94 21 FF 70 */ stwu r1, -0x90(r1)
-/* 8004D98C 7C 08 02 A6 */ mflr r0
-/* 8004D990 90 01 00 94 */ stw r0, 0x94(r1)
-/* 8004D994 39 61 00 90 */ addi r11, r1, 0x90
-/* 8004D998 48 31 48 09 */ bl _savegpr_14
-/* 8004D99C 7C 6F 1B 78 */ mr r15, r3
-/* 8004D9A0 7C 90 23 78 */ mr r16, r4
-/* 8004D9A4 7C B1 2B 78 */ mr r17, r5
-/* 8004D9A8 90 C1 00 20 */ stw r6, 0x20(r1)
-/* 8004D9AC 7C F2 3B 78 */ mr r18, r7
-/* 8004D9B0 91 01 00 24 */ stw r8, 0x24(r1)
-/* 8004D9B4 91 21 00 28 */ stw r9, 0x28(r1)
-/* 8004D9B8 7D 53 53 78 */ mr r19, r10
-/* 8004D9BC 8A 81 00 A3 */ lbz r20, 0xa3(r1)
-/* 8004D9C0 3A A0 00 00 */ li r21, 0
-/* 8004D9C4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */
-/* 8004D9C8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */
-/* 8004D9CC 39 C3 0F 38 */ addi r14, r3, 0xf38
-/* 8004D9D0 7D C3 73 78 */ mr r3, r14
-/* 8004D9D4 7E 24 8B 78 */ mr r4, r17
-/* 8004D9D8 48 02 6C 89 */ bl ChkPolySafe__4cBgSFRC13cBgS_PolyInfo
-/* 8004D9DC 54 60 06 3F */ clrlwi. r0, r3, 0x18
-/* 8004D9E0 40 82 00 0C */ bne lbl_8004D9EC
-/* 8004D9E4 38 60 00 00 */ li r3, 0
-/* 8004D9E8 48 00 02 28 */ b lbl_8004DC10
-lbl_8004D9EC:
-/* 8004D9EC 7D C3 73 78 */ mr r3, r14
-/* 8004D9F0 7E 24 8B 78 */ mr r4, r17
-/* 8004D9F4 48 02 74 5D */ bl GetPolyAtt0__4dBgSFRC13cBgS_PolyInfo
-/* 8004D9F8 7C 7D 1B 78 */ mr r29, r3
-/* 8004D9FC 3B 20 00 00 */ li r25, 0
-/* 8004DA00 3B E0 00 00 */ li r31, 0
-/* 8004DA04 3B C0 00 00 */ li r30, 0
-/* 8004DA08 56 7C 00 00 */ rlwinm r28, r19, 0, 0, 0
-/* 8004DA0C 56 7B 03 DE */ rlwinm r27, r19, 0, 0xf, 0xf
-/* 8004DA10 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */
-/* 8004DA14 39 C3 61 C0 */ addi r14, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */
-lbl_8004DA18:
-/* 8004DA18 7E 23 8B 78 */ mr r3, r17
-/* 8004DA1C 7F 24 CB 78 */ mr r4, r25
-/* 8004DA20 38 A1 00 34 */ addi r5, r1, 0x34
-/* 8004DA24 38 C1 00 30 */ addi r6, r1, 0x30
-/* 8004DA28 38 E1 00 2C */ addi r7, r1, 0x2c
-/* 8004DA2C 39 01 00 38 */ addi r8, r1, 0x38
-/* 8004DA30 4B FF F5 61 */ bl getPolyColor__13dPa_control_cFR13cBgS_PolyInfoiP8_GXColorP8_GXColorPUcPf
-/* 8004DA34 2C 03 00 00 */ cmpwi r3, 0
-/* 8004DA38 40 82 00 10 */ bne lbl_8004DA48
-/* 8004DA3C 3C 60 00 01 */ lis r3, 0x0001 /* 0x0000FFFF@ha */
-/* 8004DA40 38 63 FF FF */ addi r3, r3, 0xFFFF /* 0x0000FFFF@l */
-/* 8004DA44 48 00 01 CC */ b lbl_8004DC10
-lbl_8004DA48:
-/* 8004DA48 28 1C 00 00 */ cmplwi r28, 0
-/* 8004DA4C 41 82 00 38 */ beq lbl_8004DA84
-/* 8004DA50 2C 19 00 01 */ cmpwi r25, 1
-/* 8004DA54 40 82 00 28 */ bne lbl_8004DA7C
-/* 8004DA58 48 15 D8 29 */ bl dKy_camera_water_in_status_check__Fv
-/* 8004DA5C 2C 03 00 00 */ cmpwi r3, 0
-/* 8004DA60 41 82 00 1C */ beq lbl_8004DA7C
-/* 8004DA64 2C 1D 00 01 */ cmpwi r29, 1
-/* 8004DA68 41 82 00 0C */ beq lbl_8004DA74
-/* 8004DA6C 2C 1D 00 03 */ cmpwi r29, 3
-/* 8004DA70 40 82 00 0C */ bne lbl_8004DA7C
-lbl_8004DA74:
-/* 8004DA74 38 60 00 05 */ li r3, 5
-/* 8004DA78 48 00 00 40 */ b lbl_8004DAB8
-lbl_8004DA7C:
-/* 8004DA7C 38 60 00 06 */ li r3, 6
-/* 8004DA80 48 00 00 38 */ b lbl_8004DAB8
-lbl_8004DA84:
-/* 8004DA84 2C 19 00 00 */ cmpwi r25, 0
-/* 8004DA88 40 82 00 10 */ bne lbl_8004DA98
-/* 8004DA8C 7E 23 8B 78 */ mr r3, r17
-/* 8004DA90 48 15 D8 01 */ bl dKy_pol_efftype_get__FPC13cBgS_PolyInfo
-/* 8004DA94 48 00 00 24 */ b lbl_8004DAB8
-lbl_8004DA98:
-/* 8004DA98 2C 1D 00 01 */ cmpwi r29, 1
-/* 8004DA9C 41 82 00 0C */ beq lbl_8004DAA8
-/* 8004DAA0 2C 1D 00 03 */ cmpwi r29, 3
-/* 8004DAA4 40 82 00 0C */ bne lbl_8004DAB0
-lbl_8004DAA8:
-/* 8004DAA8 38 60 00 06 */ li r3, 6
-/* 8004DAAC 48 00 00 0C */ b lbl_8004DAB8
-lbl_8004DAB0:
-/* 8004DAB0 7E 23 8B 78 */ mr r3, r17
-/* 8004DAB4 48 15 D8 F5 */ bl dKy_pol_efftype2_get__FPC13cBgS_PolyInfo
-lbl_8004DAB8:
-/* 8004DAB8 54 64 06 3E */ clrlwi r4, r3, 0x18
-/* 8004DABC 28 04 00 06 */ cmplwi r4, 6
-/* 8004DAC0 40 80 00 2C */ bge lbl_8004DAEC
-/* 8004DAC4 38 00 00 01 */ li r0, 1
-/* 8004DAC8 7C 05 20 30 */ slw r5, r0, r4
-/* 8004DACC 7E 60 28 39 */ and. r0, r19, r5
-/* 8004DAD0 40 82 00 1C */ bne lbl_8004DAEC
-/* 8004DAD4 28 04 00 02 */ cmplwi r4, 2
-/* 8004DAD8 40 82 00 28 */ bne lbl_8004DB00
-/* 8004DADC 28 1B 00 00 */ cmplwi r27, 0
-/* 8004DAE0 41 82 00 20 */ beq lbl_8004DB00
-/* 8004DAE4 2C 19 00 01 */ cmpwi r25, 1
-/* 8004DAE8 40 82 00 18 */ bne lbl_8004DB00
-lbl_8004DAEC:
-/* 8004DAEC 38 00 00 FF */ li r0, 0xff
-/* 8004DAF0 7C 00 F0 30 */ slw r0, r0, r30
-/* 8004DAF4 7E A0 03 78 */ or r0, r21, r0
-/* 8004DAF8 54 15 04 3E */ clrlwi r21, r0, 0x10
-/* 8004DAFC 48 00 00 FC */ b lbl_8004DBF8
-lbl_8004DB00:
-/* 8004DB00 7C 80 F0 30 */ slw r0, r4, r30
-/* 8004DB04 7E A0 03 78 */ or r0, r21, r0
-/* 8004DB08 54 15 04 3E */ clrlwi r21, r0, 0x10
-/* 8004DB0C 54 60 06 3E */ clrlwi r0, r3, 0x18
-/* 8004DB10 28 00 00 02 */ cmplwi r0, 2
-/* 8004DB14 40 82 00 24 */ bne lbl_8004DB38
-/* 8004DB18 28 1B 00 00 */ cmplwi r27, 0
-/* 8004DB1C 41 82 00 1C */ beq lbl_8004DB38
-/* 8004DB20 54 64 1D 78 */ rlwinm r4, r3, 3, 0x15, 0x1c
-/* 8004DB24 3C 60 80 3B */ lis r3, ringID@ha /* 0x803A832C@ha */
-/* 8004DB28 38 03 83 2C */ addi r0, r3, ringID@l /* 0x803A832C@l */
-/* 8004DB2C 7F 00 22 14 */ add r24, r0, r4
-/* 8004DB30 82 E1 00 20 */ lwz r23, 0x20(r1)
-/* 8004DB34 48 00 00 3C */ b lbl_8004DB70
-lbl_8004DB38:
-/* 8004DB38 80 01 00 28 */ lwz r0, 0x28(r1)
-/* 8004DB3C 7C 00 28 39 */ and. r0, r0, r5
-/* 8004DB40 41 82 00 1C */ beq lbl_8004DB5C
-/* 8004DB44 54 64 1D 78 */ rlwinm r4, r3, 3, 0x15, 0x1c
-/* 8004DB48 3C 60 80 3B */ lis r3, ringID@ha /* 0x803A832C@ha */
-/* 8004DB4C 38 03 83 2C */ addi r0, r3, ringID@l /* 0x803A832C@l */
-/* 8004DB50 7F 00 22 14 */ add r24, r0, r4
-/* 8004DB54 7E 57 93 78 */ mr r23, r18
-/* 8004DB58 48 00 00 18 */ b lbl_8004DB70
-lbl_8004DB5C:
-/* 8004DB5C 54 64 1D 78 */ rlwinm r4, r3, 3, 0x15, 0x1c
-/* 8004DB60 3C 60 80 3B */ lis r3, normalID@ha /* 0x803A835C@ha */
-/* 8004DB64 38 03 83 5C */ addi r0, r3, normalID@l /* 0x803A835C@l */
-/* 8004DB68 7F 00 22 14 */ add r24, r0, r4
-/* 8004DB6C 7E 57 93 78 */ mr r23, r18
-lbl_8004DB70:
-/* 8004DB70 7E D0 FA 14 */ add r22, r16, r31
-/* 8004DB74 3B 40 00 00 */ li r26, 0
-lbl_8004DB78:
-/* 8004DB78 A0 D8 00 00 */ lhz r6, 0(r24)
-/* 8004DB7C 28 06 FF FF */ cmplwi r6, 0xffff
-/* 8004DB80 41 82 00 78 */ beq lbl_8004DBF8
-/* 8004DB84 80 96 00 00 */ lwz r4, 0(r22)
-/* 8004DB88 88 01 00 2C */ lbz r0, 0x2c(r1)
-/* 8004DB8C 90 01 00 08 */ stw r0, 8(r1)
-/* 8004DB90 38 60 00 00 */ li r3, 0
-/* 8004DB94 90 61 00 0C */ stw r3, 0xc(r1)
-/* 8004DB98 92 81 00 10 */ stw r20, 0x10(r1)
-/* 8004DB9C 38 01 00 34 */ addi r0, r1, 0x34
-/* 8004DBA0 90 01 00 14 */ stw r0, 0x14(r1)
-/* 8004DBA4 38 01 00 30 */ addi r0, r1, 0x30
-/* 8004DBA8 90 01 00 18 */ stw r0, 0x18(r1)
-/* 8004DBAC 90 61 00 1C */ stw r3, 0x1c(r1)
-/* 8004DBB0 7D E3 7B 78 */ mr r3, r15
-/* 8004DBB4 38 A0 00 00 */ li r5, 0
-/* 8004DBB8 7E E7 BB 78 */ mr r7, r23
-/* 8004DBBC 81 01 00 24 */ lwz r8, 0x24(r1)
-/* 8004DBC0 81 21 00 98 */ lwz r9, 0x98(r1)
-/* 8004DBC4 81 41 00 9C */ lwz r10, 0x9c(r1)
-/* 8004DBC8 C0 21 00 38 */ lfs f1, 0x38(r1)
-/* 8004DBCC 4B FF F9 01 */ bl set__13dPa_control_cFUlUcUsPC4cXyzPC12dKy_tevstr_cPC5csXyzPC4cXyzUcP18dPa_levelEcallBackScPC8_GXColorPC8_GXColorPC4cXyzf
-/* 8004DBD0 90 76 00 00 */ stw r3, 0(r22)
-/* 8004DBD4 80 6E 5D 3C */ lwz r3, 0x5d3c(r14)
-/* 8004DBD8 38 63 02 10 */ addi r3, r3, 0x210
-/* 8004DBDC 80 96 00 00 */ lwz r4, 0(r22)
-/* 8004DBE0 4B FF DC D5 */ bl forceOnEventMove__Q213dPa_control_c7level_cFUl
-/* 8004DBE4 3B 5A 00 01 */ addi r26, r26, 1
-/* 8004DBE8 2C 1A 00 04 */ cmpwi r26, 4
-/* 8004DBEC 3A D6 00 04 */ addi r22, r22, 4
-/* 8004DBF0 3B 18 00 02 */ addi r24, r24, 2
-/* 8004DBF4 41 80 FF 84 */ blt lbl_8004DB78
-lbl_8004DBF8:
-/* 8004DBF8 3B 39 00 01 */ addi r25, r25, 1
-/* 8004DBFC 2C 19 00 02 */ cmpwi r25, 2
-/* 8004DC00 3B FF 00 10 */ addi r31, r31, 0x10
-/* 8004DC04 3B DE 00 08 */ addi r30, r30, 8
-/* 8004DC08 41 80 FE 10 */ blt lbl_8004DA18
-/* 8004DC0C 7E A3 AB 78 */ mr r3, r21
-lbl_8004DC10:
-/* 8004DC10 39 61 00 90 */ addi r11, r1, 0x90
-/* 8004DC14 48 31 45 D9 */ bl _restgpr_14
-/* 8004DC18 80 01 00 94 */ lwz r0, 0x94(r1)
-/* 8004DC1C 7C 08 03 A6 */ mtlr r0
-/* 8004DC20 38 21 00 90 */ addi r1, r1, 0x90
-/* 8004DC24 4E 80 00 20 */ blr
diff --git a/include/JSystem/JGeometry.h b/include/JSystem/JGeometry.h
index 310c2c940c..3312a19cbf 100644
--- a/include/JSystem/JGeometry.h
+++ b/include/JSystem/JGeometry.h
@@ -148,7 +148,7 @@ struct TVec3<f32> {
return *this;
}
- f32 squared() {
+ f32 squared() const {
return C_VECSquareMag((Vec*)&x);
}
@@ -166,7 +166,7 @@ struct TVec3<f32> {
scale(norm);
}
- f32 length() {
+ f32 length() const {
return PSVECMag((Vec*)this);
}
@@ -184,6 +184,55 @@ struct TVec3<f32> {
psq_st zres, 8(dst), 1, 0
};
}
+
+ void negateInternal(TVec3<f32>* dst) {
+ register f32* rdst = &dst->x;
+ const register f32* src = &x;
+ register f32 x_y;
+ register f32 z;
+ asm {
+ psq_l x_y, 0(src), 0, 0
+ ps_neg x_y, x_y
+ psq_st x_y, 0(rdst), 0, 0
+ lfs z, 8(src)
+ fneg z, z
+ stfs z, 8(rdst)
+ };
+ }
+
+ void negate() {
+ negateInternal(this);
+ }
+
+ void sub(const TVec3<f32>& b) {
+ C_VECSubtract((Vec*)&x, (Vec*)&b.x, (Vec*)&x);
+ }
+
+ void sub(const TVec3<f32>& a, const TVec3<f32>& b) {
+ C_VECSubtract((Vec*)&a.x, (Vec*)&b.x, (Vec*)&x);
+ }
+
+ bool isZero() const {
+ return squared() <= 32.0f * FLT_EPSILON;
+ }
+
+ void cross(const TVec3<f32>& a, const TVec3<f32>& b) {
+ PSVECCrossProduct(a, b, *this);
+ }
+
+ void setLength(f32 len) {
+ f32 sq = squared();
+ if (sq <= FLT_EPSILON * 32.0f) {
+ return;
+ }
+ f32 norm;
+ if (sq <= 0.0f) {
+ norm = sq;
+ } else {
+ norm = fsqrt_step(sq);
+ }
+ scale(norm * len);
+ }
};
template <typename T>
diff --git a/include/JSystem/JParticle/JPABaseShape.h b/include/JSystem/JParticle/JPABaseShape.h
index cd6044ff80..fb0a2c905f 100644
--- a/include/JSystem/JParticle/JPABaseShape.h
+++ b/include/JSystem/JParticle/JPABaseShape.h
@@ -97,9 +97,26 @@ public:
bool isTexAnm() const { return !!(mpData->mTexFlg & 0x01); }
u8 getTexAnmType() const { return (mpData->mTexFlg >> 2) & 0x07; }
u32 getTexIdx() const { return mpData->mTexIdx; }
+ u8 getTexIdx(u8 idx) const { return mpTexIdxAnimTbl[idx]; }
f32 getBaseSizeX() const { return mpData->mBaseSizeX; }
f32 getBaseSizeY() const { return mpData->mBaseSizeY; }
+ u8 getClrLoopOfstMask() const { return mpData->mClrAnmRndmMask; }
+ u32 getClrLoopOfst(u32 param_1) const { return getClrLoopOfstMask() & param_1; }
+ u8 getTexLoopOfstMask() const { return mpData->mTexAnmRndmMask; }
+ u32 getTexLoopOfst(u8 param_1) const { return getTexLoopOfstMask() & param_1; }
+
+ f32 getIncTransX() const { return ((f32*)mpTexCrdMtxAnmTbl)[5]; }
+ f32 getInitTransX() const { return ((f32*)mpTexCrdMtxAnmTbl)[0]; }
+ f32 getIncTransY() const { return ((f32*)mpTexCrdMtxAnmTbl)[6]; }
+ f32 getInitTransY() const { return ((f32*)mpTexCrdMtxAnmTbl)[1]; }
+ f32 getIncScaleX() const { return ((f32*)mpTexCrdMtxAnmTbl)[7]; }
+ f32 getInitScaleX() const { return ((f32*)mpTexCrdMtxAnmTbl)[2]; }
+ f32 getIncScaleY() const { return ((f32*)mpTexCrdMtxAnmTbl)[8]; }
+ f32 getInitScaleY() const { return ((f32*)mpTexCrdMtxAnmTbl)[3]; }
+ f32 getIncRot() const { return ((f32*)mpTexCrdMtxAnmTbl)[9]; }
+ f32 getInitRot() const { return ((f32*)mpTexCrdMtxAnmTbl)[4]; }
+ u8 getTexAnmKeyNum() const { return mpData->mTexAnmNum; }
public:
/* 0x00 */ const JPABaseShapeData* mpData;
diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h
index f0c014c9e3..a6612dbc90 100644
--- a/include/JSystem/JParticle/JPAEmitter.h
+++ b/include/JSystem/JParticle/JPAEmitter.h
@@ -13,7 +13,6 @@
#include "JSystem/JParticle/JPADynamicsBlock.h"
#include "JSystem/JSupport/JSUList.h"
-struct JPABaseEmitter;
struct JPAResourceManager;
struct JPABaseEmitter;
struct JPAEmitterManager;
@@ -164,6 +163,7 @@ public:
void setParticleCallBackPtr(JPAParticleCallBack* cb) { mpPtclCallBack = cb; }
JPAParticleCallBack* getParticleCallBackPtr() { return mpPtclCallBack; }
JPAEmitterCallBack* getEmitterCallBackPtr() const { return mpEmtrCallBack; }
+ u32 getAge() const { return mTick; }
public:
/* 0x00 */ JGeometry::TVec3<f32> mLocalScl;
diff --git a/include/JSystem/JParticle/JPAList.h b/include/JSystem/JParticle/JPAList.h
index 4c2f134674..63e09937df 100644
--- a/include/JSystem/JParticle/JPAList.h
+++ b/include/JSystem/JParticle/JPAList.h
@@ -10,6 +10,9 @@ struct JPANode {
mpNext = NULL;
}
~JPANode() {}
+ JPANode<T>* getPrev() { return mpPrev; }
+ JPANode<T>* getNext() { return mpNext; }
+ T* getObject() { return &mData; }
JPANode<T>* mpPrev;
JPANode<T>* mpNext;
T mData;
@@ -23,6 +26,7 @@ struct JPAList {
JPAList() : mpFirst(NULL), mpLast(NULL), mNum() {}
+ JPANode<T>* getEnd() { return NULL; }
JPANode<T>* getFirst() const { return mpFirst; }
JPANode<T>* getLast() const { return mpLast; }
u32 getNum() const { return mNum; }
diff --git a/include/JSystem/JParticle/JPAParticle.h b/include/JSystem/JParticle/JPAParticle.h
index 5fb3a659e3..976596296f 100644
--- a/include/JSystem/JParticle/JPAParticle.h
+++ b/include/JSystem/JParticle/JPAParticle.h
@@ -32,22 +32,25 @@ public:
void setOffsetPosition(f32 x, f32 y, f32 z) { mOffsetPosition.set(x, y, z); }
void getOffsetPosition(JGeometry::TVec3<f32>& pos) { pos.set(mOffsetPosition); }
u16 getRotateAngle() const { return mRotateAngle; }
- void getGlobalPosition(JGeometry::TVec3<f32>& pos) { pos.set(mPosition); }
+ void getGlobalPosition(JGeometry::TVec3<f32>& pos) const { pos.set(mPosition); }
f32 getParticleScaleX() const { return mParticleScaleX; }
f32 getParticleScaleY() const { return mParticleScaleY; }
void setStatus(u32 flag) { mStatus |= flag; }
+ u32 checkStatus(u32 flag) { return mStatus & flag; }
void setInvisibleParticleFlag() { setStatus(8); }
void setDeleteParticleFlag() { setStatus(2); }
+ void getVelVec(JGeometry::TVec3<f32>& vec) const { vec.set(mVelocity); }
+ void getLocalPosition(JGeometry::TVec3<f32>& vec) const { vec.set(mLocalPosition); }
public:
/* 0x00 */ JGeometry::TVec3<f32> mPosition;
- /* 0x0C */ Vec mLocalPosition;
+ /* 0x0C */ JGeometry::TVec3<f32> mLocalPosition;
/* 0x18 */ JGeometry::TVec3<f32> mOffsetPosition;
- /* 0x24 */ Vec mVelocity;
+ /* 0x24 */ JGeometry::TVec3<f32> mVelocity;
/* 0x30 */ Vec mVelType1;
/* 0x3C */ Vec mVelType0;
/* 0x48 */ Vec mVelType2;
- /* 0x54 */ Vec mBaseAxis;
+ /* 0x54 */ JGeometry::TVec3<f32> mBaseAxis;
/* 0x60 */ f32 mParticleScaleX;
/* 0x64 */ f32 mParticleScaleY;
/* 0x68 */ f32 mScaleOut;
diff --git a/include/dolphin/mtx/vec.h b/include/dolphin/mtx/vec.h
index 89fa986b82..1d06e5ec12 100644
--- a/include/dolphin/mtx/vec.h
+++ b/include/dolphin/mtx/vec.h
@@ -51,6 +51,24 @@ inline void C_VECAdd(register const Vec* a, register const Vec* b, register Vec*
}
}
+inline void C_VECSubtract(register const Vec* a, register const Vec* b, register Vec* ab) {
+ register f32 axy;
+ register f32 bxy;
+ register f32 az;
+ register f32 subz;
+ register f32 bz;
+ asm {
+ psq_l axy, 0(a), 0, 0
+ psq_l bxy, 0(b), 0, 0
+ ps_sub bxy, axy, bxy
+ psq_st bxy, 0(ab), 0, 0
+ psq_l az, 8(a), 1, 0
+ psq_l bz, 8(b), 1, 0
+ ps_sub subz, az, bz
+ psq_st subz, 8(ab), 1, 0
+ }
+}
+
inline f32 C_VECSquareMag(const Vec* v) {
register f32 x_y;
register f32 z;
diff --git a/libs/JSystem/JParticle/JPABaseShape.cpp b/libs/JSystem/JParticle/JPABaseShape.cpp
index 0a6ddaa1a1..9cb3a30904 100644
--- a/libs/JSystem/JParticle/JPABaseShape.cpp
+++ b/libs/JSystem/JParticle/JPABaseShape.cpp
@@ -8,6 +8,7 @@
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAResource.h"
#include "JSystem/JParticle/JPAResourceManager.h"
+#include "JSystem/JMath/JMATrigonometric.h"
#include "dolphin/mtx/mtxvec.h"
#include "dol2asm.h"
#include "dolphin/gx/GX.h"
@@ -267,81 +268,72 @@ void JPARegistEnv(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetTevColor(GX_TEVREG1, env);
}
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-
/* 802771BC-802771E8 271AFC 002C+00 0/0 1/1 0/0 .text JPACalcClrIdxNormal__FP18JPAEmitterWorkData
*/
-#ifdef NONMATCHING
void JPACalcClrIdxNormal(JPAEmitterWorkData* work) {
JPABaseShape* bsp = work->mpRes->getBsp();
// can't get the extsh to appear in the right spot...
- work->mClrKeyFrame = MIN(work->mpEmtr->mTick, bsp->getClrAnmMaxFrm());
-}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcClrIdxNormal(JPAEmitterWorkData* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkData.s"
+ s16 keyFrame;
+ if (work->mpEmtr->mTick < bsp->getClrAnmMaxFrm()) {
+ keyFrame = work->mpEmtr->mTick;
+ } else {
+ keyFrame = bsp->getClrAnmMaxFrm();
+ }
+ work->mClrKeyFrame = keyFrame;
}
-#pragma pop
-#endif
/* 802771E8-80277210 271B28 0028+00 0/0 1/1 0/0 .text
* JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcClrIdxNormal(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPACalcClrIdxNormal(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ s16 age = param_1->mAge;
+ s16 maxFrm = shape->getClrAnmMaxFrm();
+ s16 keyFrame;
+ if (age < maxFrm) {
+ keyFrame = age;
+ } else {
+ keyFrame = maxFrm;
+ }
+ work->mClrKeyFrame = keyFrame;
}
-#pragma pop
/* 80277210-80277240 271B50 0030+00 0/0 1/1 0/0 .text JPACalcClrIdxRepeat__FP18JPAEmitterWorkData
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcClrIdxRepeat(JPAEmitterWorkData* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkData.s"
+void JPACalcClrIdxRepeat(JPAEmitterWorkData* work) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ work->mClrKeyFrame = work->mpEmtr->mTick % (shape->getClrAnmMaxFrm() + 1);
}
-#pragma pop
/* 80277240-8027727C 271B80 003C+00 0/0 1/1 0/0 .text
* JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcClrIdxRepeat(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPACalcClrIdxRepeat(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ s32 tick = shape->getClrLoopOfst(param_1->mAnmRandom);
+ tick = param_1->mAge + tick;
+ work->mClrKeyFrame = tick % (shape->getClrAnmMaxFrm() + 1);
}
-#pragma pop
/* 8027727C-802772BC 271BBC 0040+00 0/0 1/1 0/0 .text JPACalcClrIdxReverse__FP18JPAEmitterWorkData
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcClrIdxReverse(JPAEmitterWorkData* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkData.s"
+void JPACalcClrIdxReverse(JPAEmitterWorkData* work) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ int maxFrm = shape->getClrAnmMaxFrm();
+ u32 tick = work->mpEmtr->mTick;
+ u32 uVar1 = tick / maxFrm;
+ tick = tick % maxFrm;
+ uVar1 &= 1;
+ work->mClrKeyFrame = tick + (uVar1) * (maxFrm - tick * 2);
}
-#pragma pop
/* 802772BC-80277308 271BFC 004C+00 0/0 1/1 0/0 .text
* JPACalcClrIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcClrIdxReverse(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPACalcClrIdxReverse(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ s32 tick = param_1->mAge + shape->getClrLoopOfst(param_1->mAnmRandom);
+ s32 maxFrm = shape->getClrAnmMaxFrm();
+ s32 rem = tick % maxFrm;
+ work->mClrKeyFrame = rem + ((tick / maxFrm) & 1) * (maxFrm - rem * 2);
}
-#pragma pop
/* 80277308-80277314 271C48 000C+00 0/0 1/1 0/0 .text JPACalcClrIdxMerge__FP18JPAEmitterWorkData
*/
@@ -355,6 +347,15 @@ SECTION_SDATA2 static f64 lit_2623 = 4503601774854144.0 /* cast s32 to float */;
/* 80277314-80277384 271C54 0070+00 0/0 1/1 0/0 .text
* JPACalcClrIdxMerge__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPACalcClrIdxMerge(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ s32 maxFrm = shape->getClrAnmMaxFrm() + 1;
+ s32 tick = (s32)(param_1->mTime * maxFrm) + shape->getClrLoopOfst(param_1->mAnmRandom);
+ work->mClrKeyFrame = tick % maxFrm;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -363,6 +364,7 @@ asm void JPACalcClrIdxMerge(JPAEmitterWorkData* param_0, JPABaseParticle* param_
#include "asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxMerge__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80277384-80277390 271CC4 000C+00 0/0 1/1 0/0 .text JPACalcClrIdxRandom__FP18JPAEmitterWorkData
*/
@@ -372,14 +374,12 @@ void JPACalcClrIdxRandom(JPAEmitterWorkData* work) {
/* 80277390-802773C4 271CD0 0034+00 0/0 1/1 0/0 .text
* JPACalcClrIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcClrIdxRandom(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcClrIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPACalcClrIdxRandom(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ s32 tick = shape->getClrLoopOfst(param_1->mAnmRandom);
+ s32 maxFrm = shape->getClrAnmMaxFrm() + 1;
+ work->mClrKeyFrame = tick % maxFrm;
}
-#pragma pop
/* 802773C4-80277404 271D04 0040+00 0/0 1/1 0/0 .text JPACalcPrm__FP18JPAEmitterWorkData
*/
@@ -450,6 +450,39 @@ SECTION_SDATA2 static f64 lit_2744 = 4503599627370496.0 /* cast u32 to float */;
/* 802775AC-80277758 271EEC 01AC+00 0/0 1/1 0/0 .text
* JPAGenCalcTexCrdMtxAnm__FP18JPAEmitterWorkData */
+// Matches with literals
+#ifdef NONMATCHING
+void JPAGenCalcTexCrdMtxAnm(JPAEmitterWorkData* work) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ f32 dVar16 = work->mpEmtr->mTick;
+ f32 dVar15 = 0.5f * (1.0f + shape->getTilingS());
+ f32 dVar14 = 0.5f * (1.0f + shape->getTilingT());
+ f32 dVar11 = (dVar16 * shape->getIncTransX()) + shape->getInitTransX();
+ f32 dVar10 = (dVar16 * shape->getIncTransY()) + shape->getInitTransY();
+ f32 dVar13 = (dVar16 * shape->getIncScaleX()) + shape->getInitScaleX();
+ f32 dVar12 = (dVar16 * shape->getIncScaleY()) + shape->getInitScaleY();
+ s32 local_c0 = (dVar16 * shape->getIncRot()) + shape->getInitRot();
+ f32 dVar8 = JMASSin(local_c0);
+ f32 dVar9 = JMASCos(local_c0);
+ Mtx local_108;
+ local_108[0][0] = dVar13 * dVar9;
+ local_108[0][1] = -dVar13 * dVar8;
+ local_108[0][2] = 0.0f;
+ local_108[0][3] =
+ (dVar15 + (dVar13 * ((dVar8 * (dVar14 + dVar10)) - (dVar9 * (dVar15 + dVar11)))));
+ local_108[1][0] = dVar12 * dVar8;
+ local_108[1][1] = dVar12 * dVar9;
+ local_108[1][2] = 0.0f;
+ local_108[1][3] =
+ (dVar14 + (-dVar12 * ((dVar8 * (dVar15 + dVar11)) + (dVar9 * (dVar14 + dVar10)))));
+ local_108[2][0] = 0.0f;
+ local_108[2][1] = 0.0f;
+ local_108[2][2] = 1.0f;
+ local_108[2][3] = 0.0f;
+ GXLoadTexMtxImm(local_108, 0x1e, GX_MTX2x4);
+ GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x1e, false, 0x7d);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -458,9 +491,42 @@ asm void JPAGenCalcTexCrdMtxAnm(JPAEmitterWorkData* param_0) {
#include "asm/JSystem/JParticle/JPABaseShape/JPAGenCalcTexCrdMtxAnm__FP18JPAEmitterWorkData.s"
}
#pragma pop
+#endif
/* 80277758-802778EC 272098 0194+00 0/0 1/1 0/0 .text
* JPALoadCalcTexCrdMtxAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPALoadCalcTexCrdMtxAnm(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ f32 dVar16 = param_1->mAge;
+ f32 dVar15 = 0.5f * (1.0f + shape->getTilingS());
+ f32 dVar14 = 0.5f * (1.0f + shape->getTilingT());
+ f32 dVar11 = (dVar16 * shape->getIncTransX()) + shape->getInitTransX();
+ f32 dVar10 = (dVar16 * shape->getIncTransY()) + shape->getInitTransY();
+ f32 dVar13 = (dVar16 * shape->getIncScaleX()) + shape->getInitScaleX();
+ f32 dVar12 = (dVar16 * shape->getIncScaleY()) + shape->getInitScaleY();
+ s32 local_c0 = (dVar16 * shape->getIncRot()) + shape->getInitRot();
+ f32 dVar8 = JMASSin(local_c0);
+ f32 dVar9 = JMASCos(local_c0);
+ Mtx local_108;
+ local_108[0][0] = dVar13 * dVar9;
+ local_108[0][1] = -dVar13 * dVar8;
+ local_108[0][2] = 0.0f;
+ local_108[0][3] =
+ (dVar15 + (dVar13 * ((dVar8 * (dVar14 + dVar10)) - (dVar9 * (dVar15 + dVar11)))));
+ local_108[1][0] = dVar12 * dVar8;
+ local_108[1][1] = dVar12 * dVar9;
+ local_108[1][2] = 0.0f;
+ local_108[1][3] =
+ (dVar14 + (-dVar12 * ((dVar8 * (dVar15 + dVar11)) + (dVar9 * (dVar14 + dVar10)))));
+ local_108[2][0] = 0.0f;
+ local_108[2][1] = 0.0f;
+ local_108[2][2] = 1.0f;
+ local_108[2][3] = 0.0f;
+ GXLoadTexMtxImm(local_108, 0x1e, GX_MTX2x4);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -469,6 +535,7 @@ asm void JPALoadCalcTexCrdMtxAnm(JPAEmitterWorkData* param_0, JPABaseParticle* p
#include "asm/JSystem/JParticle/JPABaseShape/JPALoadCalcTexCrdMtxAnm__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 802778EC-80277940 27222C 0054+00 0/0 1/1 0/0 .text JPALoadTex__FP18JPAEmitterWorkData
*/
@@ -489,69 +556,55 @@ void JPALoadTexAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
/* 802779DC-80277A18 27231C 003C+00 0/0 1/1 0/0 .text JPACalcTexIdxNormal__FP18JPAEmitterWorkData
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcTexIdxNormal(JPAEmitterWorkData* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkData.s"
+void JPACalcTexIdxNormal(JPAEmitterWorkData* work) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ u8 tick = shape->getTexAnmKeyNum() - 1 < work->mpEmtr->mTick ? shape->getTexAnmKeyNum() - 1 : work->mpEmtr->mTick;
+ work->mpEmtr->mTexAnmIdx = shape->getTexIdx(tick);
}
-#pragma pop
/* 80277A18-80277A50 272358 0038+00 0/0 1/1 0/0 .text
* JPACalcTexIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcTexIdxNormal(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPACalcTexIdxNormal(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ u8 tick = shape->getTexAnmKeyNum() - 1 < param_1->mAge ? shape->getTexAnmKeyNum() - 1 : param_1->mAge;
+ param_1->mTexAnmIdx = shape->getTexIdx(tick);
}
-#pragma pop
/* 80277A50-80277A88 272390 0038+00 0/0 1/1 0/0 .text JPACalcTexIdxRepeat__FP18JPAEmitterWorkData
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcTexIdxRepeat(JPAEmitterWorkData* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkData.s"
+void JPACalcTexIdxRepeat(JPAEmitterWorkData* work) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ work->mpEmtr->mTexAnmIdx = shape->getTexIdx(work->mpEmtr->mTick % shape->getTexAnmKeyNum());
}
-#pragma pop
/* 80277A88-80277ACC 2723C8 0044+00 0/0 1/1 0/0 .text
* JPACalcTexIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcTexIdxRepeat(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPACalcTexIdxRepeat(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ param_1->mTexAnmIdx = shape->getTexIdx(((int)shape->getTexLoopOfst(param_1->mAnmRandom) + param_1->mAge) % shape->getTexAnmKeyNum());
}
-#pragma pop
/* 80277ACC-80277B1C 27240C 0050+00 0/0 1/1 0/0 .text JPACalcTexIdxReverse__FP18JPAEmitterWorkData
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcTexIdxReverse(JPAEmitterWorkData* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkData.s"
+void JPACalcTexIdxReverse(JPAEmitterWorkData* work) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ int tick = work->mpEmtr->mTick;
+ int keyNum = (int)shape->getTexAnmKeyNum() - 1;
+ int div = tick / keyNum;
+ int rem = tick % keyNum;
+ work->mpEmtr->mTexAnmIdx = shape->getTexIdx(rem + (div & 1) * (keyNum - rem * 2));
}
-#pragma pop
/* 80277B1C-80277B78 27245C 005C+00 0/0 1/1 0/0 .text
* JPACalcTexIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcTexIdxReverse(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPACalcTexIdxReverse(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ s32 tick = shape->getTexLoopOfst(param_1->mAnmRandom) + param_1->mAge;
+ int keyNum = (int)shape->getTexAnmKeyNum() - 1;
+ int div = tick / keyNum;
+ int rem = tick % keyNum;
+ param_1->mTexAnmIdx = shape->getTexIdx(rem + (div & 1) * (keyNum - rem * 2));
}
-#pragma pop
/* 80277B78-80277B94 2724B8 001C+00 0/0 1/1 0/0 .text JPACalcTexIdxMerge__FP18JPAEmitterWorkData
*/
@@ -561,6 +614,15 @@ void JPACalcTexIdxMerge(JPAEmitterWorkData* work) {
/* 80277B94-80277C0C 2724D4 0078+00 0/0 1/1 0/0 .text
* JPACalcTexIdxMerge__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPACalcTexIdxMerge(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ s32 maxFrm = shape->getTexAnmKeyNum();
+ s32 tick = (s32)(maxFrm * param_1->mTime) + shape->getTexLoopOfst(param_1->mAnmRandom);
+ param_1->mTexAnmIdx = shape->getTexIdx(tick % maxFrm);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -569,6 +631,7 @@ asm void JPACalcTexIdxMerge(JPAEmitterWorkData* param_0, JPABaseParticle* param_
#include "asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxMerge__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80277C0C-80277C28 27254C 001C+00 0/0 1/1 0/0 .text JPACalcTexIdxRandom__FP18JPAEmitterWorkData
*/
@@ -578,14 +641,10 @@ void JPACalcTexIdxRandom(JPAEmitterWorkData* work) {
/* 80277C28-80277C64 272568 003C+00 0/0 1/1 0/0 .text
* JPACalcTexIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPACalcTexIdxRandom(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPACalcTexIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPACalcTexIdxRandom(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ param_1->mTexAnmIdx = shape->getTexIdx(((int)shape->getTexLoopOfst(param_1->mAnmRandom)) % shape->getTexAnmKeyNum());
}
-#pragma pop
/* 80277C64-80277C8C 2725A4 0028+00 0/0 1/1 0/0 .text JPALoadPosMtxCam__FP18JPAEmitterWorkData */
void JPALoadPosMtxCam(JPAEmitterWorkData* work) {
@@ -605,6 +664,40 @@ void loadPrj(JPAEmitterWorkData const* work, const Mtx srt) {
}
/* 80277CC8-80277E88 272608 01C0+00 1/0 0/0 0/0 .text loadPrjAnm__FPC18JPAEmitterWorkDataPA4_Cf */
+// Mathces with literals
+#ifdef NONMATCHING
+static void loadPrjAnm(JPAEmitterWorkData const* work, f32 const (*param_1)[4]) {
+ JPABaseShape* shape = work->mpRes->getBsp();
+ f32 dVar16 = work->mpEmtr->getAge();
+ f32 dVar15 = 0.5f * (1.0f + shape->getTilingS());
+ f32 dVar14 = 0.5f * (1.0f + shape->getTilingT());
+ f32 dVar11 = (dVar16 * shape->getIncTransX()) + shape->getInitTransX();
+ f32 dVar10 = (dVar16 * shape->getIncTransY()) + shape->getInitTransY();
+ f32 dVar13 = (dVar16 * shape->getIncScaleX()) + shape->getInitScaleX();
+ f32 dVar12 = (dVar16 * shape->getIncScaleY()) + shape->getInitScaleY();
+ s32 local_c0 = (dVar16 * shape->getIncRot()) + shape->getInitRot();
+ f32 dVar8 = JMASSin(local_c0);
+ f32 dVar9 = JMASCos(local_c0);
+ Mtx local_108;
+ local_108[0][0] = dVar13 * dVar9;
+ local_108[0][1] = -dVar13 * dVar8;
+ local_108[0][2] =
+ (dVar15 + (dVar13 * ((dVar8 * (dVar14 + dVar10)) - (dVar9 * (dVar15 + dVar11)))));
+ local_108[0][3] = 0.0f;
+ local_108[1][0] = dVar12 * dVar8;
+ local_108[1][1] = dVar12 * dVar9;
+ local_108[1][2] =
+ (dVar14 + (-dVar12 * ((dVar8 * (dVar15 + dVar11)) + (dVar9 * (dVar14 + dVar10)))));
+ local_108[1][3] = 0.0f;
+ local_108[2][0] = 0.0f;
+ local_108[2][1] = 0.0f;
+ local_108[2][2] = 1.0f;
+ local_108[2][3] = 0.0f;
+ PSMTXConcat(local_108, work->mPrjMtx, local_108);
+ PSMTXConcat(local_108, param_1, local_108);
+ GXLoadTexMtxImm(local_108, 0x1e, GX_MTX3x4);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -613,6 +706,7 @@ static asm void loadPrjAnm(JPAEmitterWorkData const* param_0, f32 const (*param_
#include "asm/JSystem/JParticle/JPABaseShape/loadPrjAnm__FPC18JPAEmitterWorkDataPA4_Cf.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 803C42E0-803C4300 021400 0020+00 10/9 0/0 0/0 .data jpa_dl */
@@ -627,15 +721,42 @@ SECTION_DATA static u8 jpa_dl_x[32] = {
0x02, 0x4B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
+typedef void (*projectionFunc)(JPAEmitterWorkData const*, const Mtx);
+
/* 803C4320-803C432C -00001 000C+00 6/10 0/0 0/0 .data p_prj */
-SECTION_DATA static void* p_prj[3] = {
- (void*)noLoadPrj,
- (void*)loadPrj,
- (void*)loadPrjAnm__FPC18JPAEmitterWorkDataPA4_Cf,
+static projectionFunc p_prj[3] = {
+ noLoadPrj,
+ loadPrj,
+ loadPrjAnm,
};
/* 80277E88-80277F70 2727C8 00E8+00 0/0 1/1 0/0 .text
* JPADrawBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPADrawBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ JGeometry::TVec3<f32> local_48;
+ PSMTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
+ Mtx local_38;
+ local_38[0][0] = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ local_38[0][3] = local_48.x;
+ local_38[1][1] = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ local_38[1][3] = local_48.y;
+ local_38[2][2] = 1.0f;
+ local_38[2][3] = local_48.z;
+ local_38[2][1] = 0.0f;
+ local_38[2][0] = 0.0f;
+ local_38[1][2] = 0.0f;
+ local_38[1][0] = 0.0f;
+ local_38[0][2] = 0.0f;
+ local_38[0][1] = 0.0f;
+ GXLoadPosMtxImm(local_38, 0);
+ p_prj[work->mPrjType](work, local_38);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -644,9 +765,40 @@ asm void JPADrawBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* param_1)
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80277F70-80278088 2728B0 0118+00 0/0 1/1 0/0 .text
* JPADrawRotBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPADrawRotBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ JGeometry::TVec3<f32> local_48;
+ PSMTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
+ f32 sinRot = JMASSin(param_1->mRotateAngle);
+ f32 cosRot = JMASCos(param_1->mRotateAngle);
+ f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
+
+ Mtx local_38;
+ local_38[0][0] = cosRot * particleX;
+ local_38[0][1] = -sinRot * particleY;
+ local_38[0][3] = local_48.x;
+ local_38[1][0] = sinRot * particleX;
+ local_38[1][1] = cosRot * particleY;
+ local_38[1][3] = local_48.y;
+ local_38[2][2] = 1.0f;
+ local_38[2][3] = local_48.z;
+ local_38[2][1] = 0.0f;
+ local_38[2][0] = 0.0f;
+ local_38[1][2] = 0.0f;
+ local_38[0][2] = 0.0f;
+ GXLoadPosMtxImm(local_38, 0);
+ p_prj[work->mPrjType](work, local_38);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -655,9 +807,36 @@ asm void JPADrawRotBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* param
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawRotBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80278088-80278184 2729C8 00FC+00 0/0 1/1 0/0 .text
* JPADrawYBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPADrawYBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ JGeometry::TVec3<f32> local_48;
+ PSMTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
+ Mtx local_38;
+ f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ local_38[0][0] = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ local_38[0][3] = local_48.x;
+ local_38[1][1] = work->mYBBCamMtx[1][1] * particleY;
+ local_38[1][2] = work->mYBBCamMtx[1][2];
+ local_38[1][3] = local_48.y;
+ local_38[2][1] = work->mYBBCamMtx[2][1] * particleY;
+ local_38[2][2] = work->mYBBCamMtx[2][2];
+ local_38[2][3] = local_48.z;
+ local_38[2][0] = 0.0f;
+ local_38[1][0] = 0.0f;
+ local_38[0][2] = 0.0f;
+ local_38[0][1] = 0.0f;
+ GXLoadPosMtxImm(local_38, 0);
+ p_prj[work->mPrjType](work, local_38);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -666,9 +845,43 @@ asm void JPADrawYBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* param_1
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawYBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80278184-802782B4 272AC4 0130+00 0/0 1/1 0/0 .text
* JPADrawRotYBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Mathces with literals
+#ifdef NONMATCHING
+void JPADrawRotYBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ JGeometry::TVec3<f32> local_48;
+ PSMTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
+ f32 sinRot = JMASSin(param_1->mRotateAngle);
+ f32 cosRot = JMASCos(param_1->mRotateAngle);
+ Mtx local_38;
+ f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ f32 local_98 = (float)(sinRot * particleX);
+ f32 local_94 = (float)(cosRot * particleY);
+ f32 local_90 = work->mYBBCamMtx[1][1];
+ f32 fVar1 = work->mYBBCamMtx[2][1];
+ local_38[0][0] = (float)(cosRot * particleX);
+ local_38[0][1] = (float)(-sinRot * particleY);
+ local_38[0][2] = 0.0f;
+ local_38[0][3] = local_48.x;
+ local_38[1][0] = local_98 * local_90;
+ local_38[1][1] = local_94 * local_90;
+ local_38[1][2] = -fVar1;
+ local_38[1][3] = local_48.y;
+ local_38[2][0] = local_98 * fVar1;
+ local_38[2][1] = local_94 * fVar1;
+ local_38[2][2] = local_90;
+ local_38[2][3] = local_48.z;
+ GXLoadPosMtxImm(local_38, 0);
+ p_prj[work->mPrjType](work, local_38);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -677,68 +890,73 @@ asm void JPADrawRotYBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* para
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawRotYBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 802782B4-802782D0 272BF4 001C+00 1/0 0/0 0/0 .text
* dirTypeVel__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dirTypeVel(JPAEmitterWorkData const* param_0, JPABaseParticle const* param_1,
+void dirTypeVel(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
JGeometry::TVec3<f32>* param_2) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/func_802782B4.s"
+ param_1->getVelVec(*param_2);
}
-#pragma pop
/* 802782D0-802782EC 272C10 001C+00 1/0 0/0 0/0 .text
* dirTypePos__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dirTypePos(JPAEmitterWorkData const* param_0, JPABaseParticle const* param_1,
+void dirTypePos(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
JGeometry::TVec3<f32>* param_2) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/func_802782D0.s"
+ param_1->getLocalPosition(*param_2);
}
-#pragma pop
/* 802782EC-80278320 272C2C 0034+00 1/0 0/0 0/0 .text
* dirTypePosInv__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dirTypePosInv(JPAEmitterWorkData const* param_0, JPABaseParticle const* param_1,
- JGeometry::TVec3<f32>* param_2) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/func_802782EC.s"
+void dirTypePosInv(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
+ JGeometry::TVec3<f32>* param_2) {
+ param_1->getLocalPosition(*param_2);
+ param_2->negate();
}
-#pragma pop
/* 80278320-8027833C 272C60 001C+00 1/0 0/0 0/0 .text
* dirTypeEmtrDir__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dirTypeEmtrDir(JPAEmitterWorkData const* param_0, JPABaseParticle const* param_1,
- JGeometry::TVec3<f32>* param_2) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/func_80278320.s"
+void dirTypeEmtrDir(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
+ JGeometry::TVec3<f32>* param_2) {
+ param_2->set(work->mGlobalEmtrDir);
}
-#pragma pop
/* 8027833C-802783D4 272C7C 0098+00 1/0 0/0 0/0 .text
* dirTypePrevPtcl__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void dirTypePrevPtcl(JPAEmitterWorkData const* param_0, JPABaseParticle const* param_1,
- JGeometry::TVec3<f32>* param_2) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/func_8027833C.s"
+void dirTypePrevPtcl(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
+ JGeometry::TVec3<f32>* param_2) {
+ JGeometry::TVec3<f32> aTStack_24;
+ param_1->getGlobalPosition(aTStack_24);
+ JPANode<JPABaseParticle>* end = work->mpAlivePtcl->getEnd();
+ JPANode<JPABaseParticle>* prev = work->mpCurNode->getPrev();
+
+ if (end != prev) {
+ JPABaseParticle* particle = work->mpCurNode->getPrev()->getObject();
+ particle->getGlobalPosition(*param_2);
+ } else {
+ work->mpEmtr->calcEmitterGlobalPosition(param_2);
+ }
+ param_2->sub(aTStack_24);
}
-#pragma pop
/* 802783D4-80278414 272D14 0040+00 1/0 0/0 0/0 .text rotTypeY__FffRA3_A4_f */
+// Matches with literals
+#ifdef NONMATCHING
+static void rotTypeY(f32 param_0, f32 param_1, f32 (&param_2)[3][4]) {
+ param_2[0][0] = param_1;
+ param_2[0][1] = 0.0f;
+ param_2[0][2] = -param_0;
+ param_2[0][3] = 0.0f;
+ param_2[1][0] = 0.0f;
+ param_2[1][1] = 1.0f;
+ param_2[1][2] = 0.0f;
+ param_2[1][3] = 0.0f;
+ param_2[2][0] = param_0;
+ param_2[2][1] = 0.0f;
+ param_2[2][2] = param_1;
+ param_2[2][3] = 0.0f;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -747,8 +965,26 @@ static asm void rotTypeY(f32 param_0, f32 param_1, f32 (&param_2)[3][4]) {
#include "asm/JSystem/JParticle/JPABaseShape/rotTypeY__FffRA3_A4_f.s"
}
#pragma pop
+#endif
/* 80278414-80278454 272D54 0040+00 1/0 0/0 0/0 .text rotTypeX__FffRA3_A4_f */
+// Matches with literals
+#ifdef NONMATCHING
+static void rotTypeX(f32 param_0, f32 param_1, f32 (&param_2)[3][4]) {
+ param_2[0][0] = 1.0f;
+ param_2[0][1] = 0.0f;
+ param_2[0][2] = 0.0f;
+ param_2[0][3] = 0.0f;
+ param_2[1][0] = 0.0f;
+ param_2[1][1] = param_1;
+ param_2[1][2] = -param_0;
+ param_2[1][3] = 0.0f;
+ param_2[2][0] = 0.0f;
+ param_2[2][1] = param_0;
+ param_2[2][2] = param_1;
+ param_2[2][3] = 0.0f;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -757,8 +993,26 @@ static asm void rotTypeX(f32 param_0, f32 param_1, f32 (&param_2)[3][4]) {
#include "asm/JSystem/JParticle/JPABaseShape/rotTypeX__FffRA3_A4_f.s"
}
#pragma pop
+#endif
/* 80278454-80278494 272D94 0040+00 1/0 0/0 0/0 .text rotTypeZ__FffRA3_A4_f */
+// Matches with literals
+#ifdef NONMATCHING
+static void rotTypeZ(f32 param_0, f32 param_1, f32 (&param_2)[3][4]) {
+ param_2[0][0] = param_1;
+ param_2[0][1] = -param_0;
+ param_2[0][2] = 0.0f;
+ param_2[0][3] = 0.0f;
+ param_2[1][0] = param_0;
+ param_2[1][1] = param_1;
+ param_2[1][2] = 0.0f;
+ param_2[1][3] = 0.0f;
+ param_2[2][0] = 0.0f;
+ param_2[2][1] = 0.0f;
+ param_2[2][2] = 1.0f;
+ param_2[2][3] = 0.0f;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -767,6 +1021,7 @@ static asm void rotTypeZ(f32 param_0, f32 param_1, f32 (&param_2)[3][4]) {
#include "asm/JSystem/JParticle/JPABaseShape/rotTypeZ__FffRA3_A4_f.s"
}
#pragma pop
+#endif
/* ############################################################################################## */
/* 804552D0-804552D4 0038D0 0004+00 1/1 0/0 0/0 .sdata2 @3145 */
@@ -776,6 +1031,29 @@ SECTION_SDATA2 static f32 lit_3145 = 0.33333298563957214f;
SECTION_SDATA2 static f32 lit_3146 = 0.5773500204086304f;
/* 80278494-802784F0 272DD4 005C+00 1/0 0/0 0/0 .text rotTypeXYZ__FffRA3_A4_f */
+// Matches with literals
+#ifdef NONMATCHING
+static void rotTypeXYZ(f32 param_0, f32 param_1, f32 (&param_2)[3][4]) {
+ f32 f3 = 0.33333298563957214f * (1.0f - param_1);
+ f32 fVar1;
+ f32 f4;
+ f4 = f3 + 0.5773500204086304f * param_0;
+ fVar1 = f3 - 0.5773500204086304f * param_0;
+ f3 += param_1;
+ param_2[0][0] = f3;
+ param_2[0][1] = fVar1;
+ param_2[0][2] = f4;
+ param_2[0][3] = 0.0f;
+ param_2[1][0] = f4;
+ param_2[1][1] = f3;
+ param_2[1][2] = fVar1;
+ param_2[1][3] = 0.0f;
+ param_2[2][0] = fVar1;
+ param_2[2][1] = f4;
+ param_2[2][2] = f3;
+ param_2[2][3] = 0.0f;
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -784,67 +1062,73 @@ static asm void rotTypeXYZ(f32 param_0, f32 param_1, f32 (&param_2)[3][4]) {
#include "asm/JSystem/JParticle/JPABaseShape/rotTypeXYZ__FffRA3_A4_f.s"
}
#pragma pop
+#endif
/* 802784F0-8027853C 272E30 004C+00 1/0 0/0 0/0 .text basePlaneTypeXY__FPA4_fff */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void basePlaneTypeXY(f32 (*param_0)[4], f32 param_1, f32 param_2) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXY__FPA4_fff.s"
+static void basePlaneTypeXY(f32 (*param_0)[4], f32 param_1, f32 param_2) {
+ param_0[0][0] *= param_1;
+ param_0[1][0] *= param_1;
+ param_0[2][0] *= param_1;
+ param_0[0][1] *= param_2;
+ param_0[1][1] *= param_2;
+ param_0[2][1] *= param_2;
}
-#pragma pop
/* 8027853C-80278588 272E7C 004C+00 1/0 0/0 0/0 .text basePlaneTypeXZ__FPA4_fff */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void basePlaneTypeXZ(f32 (*param_0)[4], f32 param_1, f32 param_2) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/basePlaneTypeXZ__FPA4_fff.s"
+static void basePlaneTypeXZ(f32 (*param_0)[4], f32 param_1, f32 param_2) {
+ param_0[0][0] *= param_1;
+ param_0[1][0] *= param_1;
+ param_0[2][0] *= param_1;
+ param_0[0][2] *= param_2;
+ param_0[1][2] *= param_2;
+ param_0[2][2] *= param_2;
}
-#pragma pop
/* 80278588-802785F8 272EC8 0070+00 1/0 0/0 0/0 .text basePlaneTypeX__FPA4_fff */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-static asm void basePlaneTypeX(f32 (*param_0)[4], f32 param_1, f32 param_2) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/basePlaneTypeX__FPA4_fff.s"
+static void basePlaneTypeX(f32 (*param_0)[4], f32 param_1, f32 param_2) {
+ param_0[0][0] *= param_1;
+ param_0[1][0] *= param_1;
+ param_0[2][0] *= param_1;
+ param_0[0][1] *= param_2;
+ param_0[1][1] *= param_2;
+ param_0[2][1] *= param_2;
+ param_0[0][2] *= param_1;
+ param_0[1][2] *= param_1;
+ param_0[2][2] *= param_1;
}
-#pragma pop
/* ############################################################################################## */
/* 803C432C-803C4340 -00001 0014+00 2/5 0/0 0/0 .data p_direction */
-SECTION_DATA static void* p_direction[5] = {
- (void*)func_802782B4, (void*)func_802782D0, (void*)func_802782EC,
- (void*)func_80278320, (void*)func_8027833C,
+typedef void (*dirTypeFunc)(JPAEmitterWorkData const*, JPABaseParticle const*, JGeometry::TVec3<f32>*);
+static dirTypeFunc p_direction[5] = {
+ dirTypeVel, dirTypePos, dirTypePosInv,
+ dirTypeEmtrDir, dirTypePrevPtcl,
};
/* 803C4340-803C4354 -00001 0014+00 0/2 0/0 0/0 .data p_rot */
+typedef void (*rotTypeFunc)(f32, f32, f32 (&)[3][4]);
#pragma push
#pragma force_active on
-SECTION_DATA static void* p_rot[5] = {
- (void*)rotTypeY__FffRA3_A4_f, (void*)rotTypeX__FffRA3_A4_f, (void*)rotTypeZ__FffRA3_A4_f,
- (void*)rotTypeXYZ__FffRA3_A4_f, (void*)rotTypeY__FffRA3_A4_f,
+static rotTypeFunc p_rot[5] = {
+ rotTypeY, rotTypeX, rotTypeZ,
+ rotTypeXYZ, rotTypeY,
};
#pragma pop
/* 803C4354-803C4360 -00001 000C+00 0/3 0/0 0/0 .data p_plane */
-#pragma push
-#pragma force_active on
-SECTION_DATA static void* p_plane[3] = {
- (void*)basePlaneTypeXY__FPA4_fff,
- (void*)basePlaneTypeXZ__FPA4_fff,
- (void*)basePlaneTypeX__FPA4_fff,
+
+typedef void (*planeFunc)(f32 (*)[4], f32, f32);
+
+static planeFunc p_plane[3] = {
+ basePlaneTypeXY,
+ basePlaneTypeXZ,
+ basePlaneTypeX,
};
-#pragma pop
/* 804507A0-804507A8 -00001 0008+00 3/3 0/0 0/0 .sdata p_dl */
-SECTION_SDATA static void* p_dl[2] = {
- (void*)&jpa_dl,
- (void*)&jpa_dl_x,
+SECTION_SDATA static u8* p_dl[2] = {
+ jpa_dl,
+ jpa_dl_x,
};
/* 804552D8-804552DC 0038D8 0004+00 6/6 0/0 0/0 .sdata2 @3281 */
@@ -855,6 +1139,45 @@ SECTION_SDATA2 static f32 lit_3282 = 3.0f;
/* 802785F8-80278994 272F38 039C+00 0/0 1/1 0/0 .text
* JPADrawDirection__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPADrawDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ JGeometry::TVec3<f32> local_6c;
+ JGeometry::TVec3<f32> local_78;
+ p_direction[param_0->mDirType](param_0, param_1, &local_6c);
+ if (!local_6c.isZero()) {
+ local_6c.normalize();
+ local_78.cross(param_1->mBaseAxis, local_6c);
+ if (!local_78.isZero()) {
+ local_78.normalize();
+ param_1->mBaseAxis.cross(local_6c, local_78);
+ param_1->mBaseAxis.normalize();
+ Mtx local_60;
+ f32 fVar1 = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 fVar2 = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ local_60[0][0] = param_1->mBaseAxis.x;
+ local_60[0][1] = local_6c.x;
+ local_60[0][2] = local_78.x;
+ local_60[0][3] = param_1->mPosition.x;
+ local_60[1][0] = param_1->mBaseAxis.y;
+ local_60[1][1] = local_6c.y;
+ local_60[1][2] = local_78.y;
+ local_60[1][3] = param_1->mPosition.y;
+ local_60[2][0] = param_1->mBaseAxis.z;
+ local_60[2][1] = local_6c.z;
+ local_60[2][2] = local_78.z;
+ local_60[2][3] = param_1->mPosition.z;
+ p_plane[param_0->mPlaneType](local_60, fVar1, fVar2);
+ PSMTXConcat(param_0->mPosCamMtx, local_60, local_60);
+ GXLoadPosMtxImm(local_60, 0);
+ p_prj[param_0->mPrjType](param_0, local_60);
+ GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
+ }
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -863,9 +1186,54 @@ asm void JPADrawDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1)
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawDirection__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80278994-80278DA8 2732D4 0414+00 0/0 1/1 0/0 .text
* JPADrawRotDirection__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPADrawRotDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ f32 sinRot = JMASSin(param_1->mRotateAngle);
+ f32 cosRot = JMASCos(param_1->mRotateAngle);
+ JGeometry::TVec3<f32> local_6c;
+ JGeometry::TVec3<f32> local_78;
+ p_direction[param_0->mDirType](param_0, param_1, &local_6c);
+ if (!local_6c.isZero()) {
+ local_6c.normalize();
+ local_78.cross(param_1->mBaseAxis, local_6c);
+ if (!local_78.isZero()) {
+ local_78.normalize();
+ param_1->mBaseAxis.cross(local_6c, local_78);
+ param_1->mBaseAxis.normalize();
+ f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ Mtx auStack_80;
+ Mtx local_60;
+ p_rot[param_0->mRotType](sinRot, cosRot, auStack_80);
+ p_plane[param_0->mPlaneType](auStack_80, particleX, particleY);
+ local_60[0][0] = param_1->mBaseAxis.x;
+ local_60[0][1] = local_6c.x;
+ local_60[0][2] = local_78.x;
+ local_60[0][3] = param_1->mPosition.x;
+ local_60[1][0] = param_1->mBaseAxis.y;
+ local_60[1][1] = local_6c.y;
+ local_60[1][2] = local_78.y;
+ local_60[1][3] = param_1->mPosition.y;
+ local_60[2][0] = param_1->mBaseAxis.z;
+ local_60[2][1] = local_6c.z;
+ local_60[2][2] = local_78.z;
+ local_60[2][3] = param_1->mPosition.z;
+ PSMTXConcat(local_60, auStack_80, auStack_80);
+ PSMTXConcat(param_0->mPosCamMtx, auStack_80, local_60);
+ GXLoadPosMtxImm(local_60, 0);
+ p_prj[param_0->mPrjType](param_0, local_60);
+ GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
+ }
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -874,9 +1242,47 @@ asm void JPADrawRotDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawRotDirection__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80278DA8-80278FC8 2736E8 0220+00 0/0 1/1 0/0 .text
* JPADrawDBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPADrawDBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ JGeometry::TVec3<f32> local_70;
+ p_direction[param_0->mDirType](param_0, param_1, &local_70);
+ JGeometry::TVec3<f32> aTStack_7c;
+ aTStack_7c.set(param_0->mPosCamMtx[2][0], param_0->mPosCamMtx[2][1],
+ param_0->mPosCamMtx[2][2]);
+ local_70.cross(local_70, aTStack_7c);
+ if (!local_70.isZero()) {
+ local_70.normalize();
+ PSMTXMultVecSR(param_0->mPosCamMtx, local_70, local_70);
+ JGeometry::TVec3<f32> local_88;
+ PSMTXMultVec(param_0->mPosCamMtx, param_1->mPosition, local_88);
+ f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ Mtx local_60;
+ local_60[0][0] = local_70.x * particleX;
+ local_60[0][1] = -local_70.y * particleY;
+ local_60[0][3] = local_88.x;
+ local_60[1][0] = local_70.y * particleX;
+ local_60[1][1] = local_70.x * particleY;
+ local_60[1][3] = local_88.y;
+ local_60[2][2] = 1.0f;
+ local_60[2][3] = local_88.z;
+ local_60[2][1] = 0.0f;
+ local_60[2][0] = 0.0f;
+ local_60[1][2] = 0.0f;
+ local_60[0][2] = 0.0f;
+ GXLoadPosMtxImm(local_60, 0);
+ p_prj[param_0->mPrjType](param_0, local_60);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -885,17 +1291,28 @@ asm void JPADrawDBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* param_1
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawDBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80278FC8-80279110 273908 0148+00 0/0 1/1 0/0 .text
* JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPADrawRotation(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
+void JPADrawRotation(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ f32 sinRot = JMASSin(param_1->mRotateAngle);
+ f32 cosRot = JMASCos(param_1->mRotateAngle);
+ f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ Mtx auStack_88;
+ p_rot[param_0->mRotType](sinRot, cosRot, auStack_88);
+ p_plane[param_0->mPlaneType](auStack_88, particleX, particleY);
+ auStack_88[0][3] = param_1->mPosition.x;
+ auStack_88[1][3] = param_1->mPosition.y;
+ auStack_88[2][3] = param_1->mPosition.z;
+ PSMTXConcat(param_0->mPosCamMtx, auStack_88, auStack_88);
+ GXLoadPosMtxImm(auStack_88, 0);
+ p_prj[param_0->mPrjType](param_0, auStack_88);
+ GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
+ }
}
-#pragma pop
/* 80279110-802791B0 273A50 00A0+00 0/0 1/1 0/0 .text
* JPADrawPoint__FP18JPAEmitterWorkDataP15JPABaseParticle */
@@ -927,6 +1344,31 @@ asm void JPADrawPoint(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
/* 802791B0-80279364 273AF0 01B4+00 0/0 1/1 0/0 .text
* JPADrawLine__FP18JPAEmitterWorkDataP15JPABaseParticle */
+// Matches with literals
+#ifdef NONMATCHING
+void JPADrawLine(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
+ if (param_1->checkStatus(8) == 0) {
+ JGeometry::TVec3<f32> local_1c;
+ JGeometry::setTVec3f(&param_1->mPosition.x, &local_1c.x);
+ JGeometry::TVec3<f32> local_28;
+ param_1->getVelVec(local_28);
+ if (!local_28.isZero()) {
+ local_28.setLength(param_0->mGlobalPtclScl.y * (25.0f * param_1->mParticleScaleY));
+ local_28.sub(local_1c, local_28);
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXBegin(GX_LINES, GX_VTXFMT1, 2);
+ GXPosition3f32(local_1c.x, local_1c.y, local_1c.z);
+ GXTexCoord2f32(0.0f, 0.0f);
+ GXPosition3f32(local_28.x, local_28.y, local_28.z);
+ GXTexCoord2f32(0.0f, 1.0f);
+ i_GXEnd();
+ GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
+ GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
+ }
+ }
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -935,28 +1377,117 @@ asm void JPADrawLine(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawLine__FP18JPAEmitterWorkDataP15JPABaseParticle.s"
}
#pragma pop
+#endif
/* 80279364-8027936C 273CA4 0008+00 2/2 0/0 0/0 .text getNext__FP26JPANode<15JPABaseParticle> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void getNext(JPANode<JPABaseParticle>* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/func_80279364.s"
+JPANode<JPABaseParticle>* getNext(JPANode<JPABaseParticle>* param_0) {
+ return param_0->getNext();
}
-#pragma pop
/* 8027936C-80279374 273CAC 0008+00 2/2 0/0 0/0 .text getPrev__FP26JPANode<15JPABaseParticle> */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void getPrev(JPANode<JPABaseParticle>* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/func_8027936C.s"
+JPANode<JPABaseParticle>* getPrev(JPANode<JPABaseParticle>* param_0) {
+ return param_0->getPrev();
}
-#pragma pop
+
+typedef JPANode<JPABaseParticle>* (*getNodeFunc)(JPANode<JPABaseParticle>*);
/* 80279374-8027996C 273CB4 05F8+00 0/0 1/1 0/0 .text JPADrawStripe__FP18JPAEmitterWorkData */
+// local_d4 is optimized away.
+#ifdef NONMATCHING
+void JPADrawStripe(JPAEmitterWorkData* param_0) {
+ JPABaseShape* shape = param_0->mpRes->getBsp();
+ u32 uVar5 = param_0->mpAlivePtcl->getNum();
+ if (uVar5 < 2) {
+ return;
+ }
+
+ f32 dVar16 = 0.0f;
+ f32 dVar15 = 1.0f / (uVar5 - 1.0f);
+ f32 dVar14 = (1.0f + param_0->mPivot.x) *
+ (25.0f * param_0->mGlobalPtclScl.x);
+ f32 dVar13 = (1.0f - param_0->mPivot.x) *
+ (25.0f * param_0->mGlobalPtclScl.x);
+ Mtx local_c8;
+ f32 dVar11;
+ f32 dVar12;
+ JGeometry::TVec3<f32> local_ec;
+ JGeometry::TVec3<f32> local_e0;
+ JGeometry::TVec3<f32> local_d4;
+ JGeometry::TVec3<f32> local_f8;
+ JGeometry::TVec3<f32> local_104;
+ getNodeFunc pcVar9;
+ JPANode<JPABaseParticle>* startNode;
+ if (shape->isDrawFwdAhead()) {
+ startNode = param_0->mpAlivePtcl->getLast();
+ pcVar9 = getPrev;
+ dVar16 = 1.0f;
+ dVar15 = -dVar15;
+ } else {
+ startNode = param_0->mpAlivePtcl->getFirst();
+ pcVar9 = getNext;
+ }
+
+ GXLoadPosMtxImm(param_0->mPosCamMtx, 0);
+ p_prj[param_0->mPrjType](param_0, param_0->mPosCamMtx);
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT1, uVar5 << 1);
+ for (JPANode<JPABaseParticle>* this_00 = startNode; this_00 != param_0->mpAlivePtcl->getEnd();
+ this_00 = pcVar9(this_00), dVar16 += dVar15) {
+ param_0->mpCurNode = this_00;
+ JPABaseParticle* pTVar7 = this_00->getObject();
+ local_ec.set(pTVar7->mPosition);
+ dVar11 = JMASSin(pTVar7->mRotateAngle);
+ dVar12 = JMASCos(pTVar7->mRotateAngle);
+ local_e0.x = -pTVar7->mParticleScaleX * dVar14;
+ local_e0.y = 0.0f;
+ local_e0.z = 0.0f;
+ local_e0.set(local_e0.x * dVar12, 0.0f, local_e0.x * dVar11);
+ local_d4.x = pTVar7->mParticleScaleX * dVar13;
+ local_d4.y = 0.0f;
+ local_d4.z = 0.0f;
+ local_d4.set(local_d4.x * dVar12, 0.0f, local_d4.x * dVar11);
+ p_direction[param_0->mDirType](param_0, pTVar7, &local_f8);
+ if (local_f8.isZero()) {
+ local_f8.set(0.0f, 1.0f, 0.0f);
+ } else {
+ local_f8.normalize();
+ }
+ local_104.cross(pTVar7->mBaseAxis, local_f8);
+ if (local_104.isZero()) {
+ local_104.set(1.0f, 0.0f, 0.0f);
+ } else {
+ local_104.normalize();
+ }
+ pTVar7->mBaseAxis.cross(local_f8, local_104);
+ pTVar7->mBaseAxis.normalize();
+
+ local_c8[0][0] = local_104.x;
+ local_c8[0][1] = local_f8.x;
+ local_c8[0][2] = pTVar7->mBaseAxis.x;
+ local_c8[0][3] = 0.0f;
+ local_c8[1][0] = local_104.y;
+ local_c8[1][1] = local_f8.y;
+ local_c8[1][2] = pTVar7->mBaseAxis.y;
+ local_c8[1][3] = 0.0f;
+ local_c8[2][0] = local_104.z;
+ local_c8[2][1] = local_f8.z;
+ local_c8[2][2] = pTVar7->mBaseAxis.z;
+ local_c8[2][3] = 0.0f;
+ PSMTXMultVecArraySR(local_c8, local_e0, local_e0, 2);
+ GXPosition3f32(local_e0.x + local_ec.x, local_e0.y + local_ec.y,
+ local_e0.z + local_ec.z);
+ GXTexCoord2f32(0.0f, dVar16);
+ GXPosition3f32(local_d4.x + local_ec.x, local_d4.y + local_ec.y,
+ local_d4.z + local_ec.z);
+ GXTexCoord2f32(1.0f, dVar16);
+
+ }
+ i_GXEnd();
+ GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
+ GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
+}
+#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@@ -965,6 +1496,7 @@ asm void JPADrawStripe(JPAEmitterWorkData* param_0) {
#include "asm/JSystem/JParticle/JPABaseShape/JPADrawStripe__FP18JPAEmitterWorkData.s"
}
#pragma pop
+#endif
/* 8027996C-8027A3D8 2742AC 0A6C+00 0/0 1/1 0/0 .text JPADrawStripeX__FP18JPAEmitterWorkData */
#pragma push
@@ -978,14 +1510,12 @@ asm void JPADrawStripeX(JPAEmitterWorkData* param_0) {
/* 8027A3D8-8027A414 274D18 003C+00 0/0 1/1 0/0 .text
* JPADrawEmitterCallBackB__FP18JPAEmitterWorkData */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void JPADrawEmitterCallBackB(JPAEmitterWorkData* param_0) {
- nofralloc
-#include "asm/JSystem/JParticle/JPABaseShape/JPADrawEmitterCallBackB__FP18JPAEmitterWorkData.s"
+void JPADrawEmitterCallBackB(JPAEmitterWorkData* work) {
+ if (work->mpEmtr->mpEmtrCallBack == NULL)
+ return;
+
+ work->mpEmtr->mpEmtrCallBack->drawAfter(work->mpEmtr);
}
-#pragma pop
/* 8027A414-8027A454 274D54 0040+00 0/0 1/1 0/0 .text
* JPADrawParticleCallBack__FP18JPAEmitterWorkDataP15JPABaseParticle */
diff --git a/src/d/particle/d_particle.cpp b/src/d/particle/d_particle.cpp
index 780def8709..42b9dfcc4b 100644
--- a/src/d/particle/d_particle.cpp
+++ b/src/d/particle/d_particle.cpp
@@ -2617,8 +2617,6 @@ u32 dPa_control_c::setSimpleFoot(u32 param_0, u32* param_1, cBgS_PolyInfo& param
/* 8004D988-8004DC28 0482C8 02A0+00 0/0 1/1 0/0 .text
* setCommonPoly__13dPa_control_cFPUlP13cBgS_PolyInfoPC4cXyzPC4cXyzPC12dKy_tevstr_cUlUlPC5csXyzPC4cXyzSc
*/
-// Small regalloc
-#ifdef NONMATCHING
u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz const* param_2,
cXyz const* param_3, dKy_tevstr_c const* param_4, u32 param_5,
u32 param_6, csXyz const* param_7, cXyz const* param_8,
@@ -2626,18 +2624,23 @@ u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz cons
f32 local_30;
GXColor a_Stack_34;
GXColor a_Stack_38;
- u8 local_4c;
+ int j;
+ int i;
+ u8 bVar3;
+ u16* puVar7;
+ const cXyz* local_40;
+ u32* ptr;
u16 uVar5 = 0;
+ u8 local_4c;
if (dComIfG_Bgsp().ChkPolySafe(*param_1) == 0) {
return 0;
}
int local_44 = dComIfG_Bgsp().GetPolyAtt0(*param_1);
- for (int i = 0; i < 2; i++) {
+ for (i = 0; i < 2; i++) {
if (getPolyColor(*param_1, i, &a_Stack_34, &a_Stack_38, &local_4c, &local_30) == 0) {
return 0xffff;
}
- u8 bVar3;
if ((param_6 & 0x80000000) != 0) {
if (i == 1 && dKy_camera_water_in_status_check() && (local_44 == 1 || local_44 == 3)) {
bVar3 = 5;
@@ -2660,8 +2663,6 @@ u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz cons
uVar5 |= (0xff << (i << 3));
} else {
uVar5 |= bVar3 << (i << 3);
- u16* puVar7;
- const cXyz* local_40;
if (bVar3 == 2 && ((param_6 & 0x10000) != 0)) {
puVar7 = ringID[bVar3];
local_40 = param_2;
@@ -2674,8 +2675,8 @@ u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz cons
local_40 = param_3;
}
}
- u32* ptr = param_0 + 4*i;
- for (int j = 0; j < 4; j++, ptr++, puVar7++) {
+ ptr = param_0 + 4*i;
+ for ( j = 0; j < 4; j++, ptr++, puVar7++) {
if (puVar7[0] == 0xffff) {
break;
}
@@ -2688,19 +2689,6 @@ u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz cons
return uVar5;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm u16 dPa_control_c::setCommonPoly(u32* param_0, cBgS_PolyInfo* param_1, cXyz const* param_2,
- cXyz const* param_3, dKy_tevstr_c const* param_4, u32 param_5,
- u32 param_6, csXyz const* param_7, cXyz const* param_8,
- s8 param_9) {
- nofralloc
-#include "asm/d/particle/d_particle/func_8004D988.s"
-}
-#pragma pop
-#endif
/* 8004DC28-8004DCA0 048568 0078+00 1/0 0/0 0/0 .text
* execute__17dPa_wbPcallBack_cFP14JPABaseEmitterP15JPABaseParticle */