From 89e14f9f9744cd2b47fe8dd28ee4fffafba0b716 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Sat, 13 Jul 2024 03:31:33 +0300 Subject: [PATCH] d_spline_path ok (#2176) --- .../Calc__14d2DBSplinePathFP4cXyz.s | 46 ----- .../d_spline_path/Init__14d2DBSplinePathFll.s | 39 ---- .../Spot__14d2DBSplinePathFPff.s | 67 ------- .../d_spline_path/Step__14d2DBSplinePathFv.s | 101 ---------- .../d_spline_path/bSpline2__10dPathCurveFf.s | 141 -------------- include/d/d_spline_path.h | 16 +- src/d/d_spline_path.cpp | 175 +++++++++++------- 7 files changed, 110 insertions(+), 475 deletions(-) delete mode 100644 asm/d/d_spline_path/Calc__14d2DBSplinePathFP4cXyz.s delete mode 100644 asm/d/d_spline_path/Init__14d2DBSplinePathFll.s delete mode 100644 asm/d/d_spline_path/Spot__14d2DBSplinePathFPff.s delete mode 100644 asm/d/d_spline_path/Step__14d2DBSplinePathFv.s delete mode 100644 asm/d/d_spline_path/bSpline2__10dPathCurveFf.s diff --git a/asm/d/d_spline_path/Calc__14d2DBSplinePathFP4cXyz.s b/asm/d/d_spline_path/Calc__14d2DBSplinePathFP4cXyz.s deleted file mode 100644 index 096897066d2..00000000000 --- a/asm/d/d_spline_path/Calc__14d2DBSplinePathFP4cXyz.s +++ /dev/null @@ -1,46 +0,0 @@ -lbl_80097A6C: -/* 80097A6C 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80097A70 C0 E4 00 1C */ lfs f7, 0x1c(r4) -/* 80097A74 80 04 00 28 */ lwz r0, 0x28(r4) -/* 80097A78 1C E0 00 0C */ mulli r7, r0, 0xc -/* 80097A7C 7C 05 3C 2E */ lfsx f0, r5, r7 -/* 80097A80 EC 47 00 32 */ fmuls f2, f7, f0 -/* 80097A84 C0 C4 00 14 */ lfs f6, 0x14(r4) -/* 80097A88 80 04 00 20 */ lwz r0, 0x20(r4) -/* 80097A8C 1C C0 00 0C */ mulli r6, r0, 0xc -/* 80097A90 7C 05 34 2E */ lfsx f0, r5, r6 -/* 80097A94 EC 26 00 32 */ fmuls f1, f6, f0 -/* 80097A98 C0 A4 00 18 */ lfs f5, 0x18(r4) -/* 80097A9C 80 04 00 24 */ lwz r0, 0x24(r4) -/* 80097AA0 1C 00 00 0C */ mulli r0, r0, 0xc -/* 80097AA4 7C 05 04 2E */ lfsx f0, r5, r0 -/* 80097AA8 EC 05 00 32 */ fmuls f0, f5, f0 -/* 80097AAC EC 01 00 2A */ fadds f0, f1, f0 -/* 80097AB0 EC 82 00 2A */ fadds f4, f2, f0 -/* 80097AB4 D0 81 00 08 */ stfs f4, 8(r1) -/* 80097AB8 7C E5 3A 14 */ add r7, r5, r7 -/* 80097ABC C0 07 00 04 */ lfs f0, 4(r7) -/* 80097AC0 EC 47 00 32 */ fmuls f2, f7, f0 -/* 80097AC4 7C C5 32 14 */ add r6, r5, r6 -/* 80097AC8 C0 06 00 04 */ lfs f0, 4(r6) -/* 80097ACC EC 26 00 32 */ fmuls f1, f6, f0 -/* 80097AD0 7C 85 02 14 */ add r4, r5, r0 -/* 80097AD4 C0 04 00 04 */ lfs f0, 4(r4) -/* 80097AD8 EC 05 00 32 */ fmuls f0, f5, f0 -/* 80097ADC EC 01 00 2A */ fadds f0, f1, f0 -/* 80097AE0 EC 62 00 2A */ fadds f3, f2, f0 -/* 80097AE4 D0 61 00 0C */ stfs f3, 0xc(r1) -/* 80097AE8 C0 07 00 08 */ lfs f0, 8(r7) -/* 80097AEC EC 47 00 32 */ fmuls f2, f7, f0 -/* 80097AF0 C0 06 00 08 */ lfs f0, 8(r6) -/* 80097AF4 EC 26 00 32 */ fmuls f1, f6, f0 -/* 80097AF8 C0 04 00 08 */ lfs f0, 8(r4) -/* 80097AFC EC 05 00 32 */ fmuls f0, f5, f0 -/* 80097B00 EC 01 00 2A */ fadds f0, f1, f0 -/* 80097B04 EC 02 00 2A */ fadds f0, f2, f0 -/* 80097B08 D0 01 00 10 */ stfs f0, 0x10(r1) -/* 80097B0C D0 83 00 00 */ stfs f4, 0(r3) -/* 80097B10 D0 63 00 04 */ stfs f3, 4(r3) -/* 80097B14 D0 03 00 08 */ stfs f0, 8(r3) -/* 80097B18 38 21 00 20 */ addi r1, r1, 0x20 -/* 80097B1C 4E 80 00 20 */ blr diff --git a/asm/d/d_spline_path/Init__14d2DBSplinePathFll.s b/asm/d/d_spline_path/Init__14d2DBSplinePathFll.s deleted file mode 100644 index 03b60dc4207..00000000000 --- a/asm/d/d_spline_path/Init__14d2DBSplinePathFll.s +++ /dev/null @@ -1,39 +0,0 @@ -lbl_80097878: -/* 80097878 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 8009787C 38 00 00 00 */ li r0, 0 -/* 80097880 90 03 00 00 */ stw r0, 0(r3) -/* 80097884 90 83 00 04 */ stw r4, 4(r3) -/* 80097888 38 C0 00 01 */ li r6, 1 -/* 8009788C 90 C3 00 08 */ stw r6, 8(r3) -/* 80097890 90 A3 00 0C */ stw r5, 0xc(r3) -/* 80097894 80 83 00 0C */ lwz r4, 0xc(r3) -/* 80097898 2C 04 00 00 */ cmpwi r4, 0 -/* 8009789C 41 82 00 08 */ beq lbl_800978A4 -/* 800978A0 38 C4 FF FF */ addi r6, r4, -1 -lbl_800978A4: -/* 800978A4 80 83 00 04 */ lwz r4, 4(r3) -/* 800978A8 2C 04 00 02 */ cmpwi r4, 2 -/* 800978AC 40 80 00 0C */ bge lbl_800978B8 -/* 800978B0 38 00 00 01 */ li r0, 1 -/* 800978B4 48 00 00 08 */ b lbl_800978BC -lbl_800978B8: -/* 800978B8 38 04 FF FE */ addi r0, r4, -2 -lbl_800978BC: -/* 800978BC C8 42 91 C8 */ lfd f2, lit_3632(r2) -/* 800978C0 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 800978C4 90 01 00 0C */ stw r0, 0xc(r1) -/* 800978C8 3C 80 43 30 */ lis r4, 0x4330 -/* 800978CC 90 81 00 08 */ stw r4, 8(r1) -/* 800978D0 C8 01 00 08 */ lfd f0, 8(r1) -/* 800978D4 EC 20 10 28 */ fsubs f1, f0, f2 -/* 800978D8 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 800978DC 90 01 00 14 */ stw r0, 0x14(r1) -/* 800978E0 90 81 00 10 */ stw r4, 0x10(r1) -/* 800978E4 C8 01 00 10 */ lfd f0, 0x10(r1) -/* 800978E8 EC 00 10 28 */ fsubs f0, f0, f2 -/* 800978EC EC 01 00 24 */ fdivs f0, f1, f0 -/* 800978F0 D0 03 00 10 */ stfs f0, 0x10(r3) -/* 800978F4 38 00 00 00 */ li r0, 0 -/* 800978F8 90 03 00 2C */ stw r0, 0x2c(r3) -/* 800978FC 38 21 00 20 */ addi r1, r1, 0x20 -/* 80097900 4E 80 00 20 */ blr diff --git a/asm/d/d_spline_path/Spot__14d2DBSplinePathFPff.s b/asm/d/d_spline_path/Spot__14d2DBSplinePathFPff.s deleted file mode 100644 index eeb883c5426..00000000000 --- a/asm/d/d_spline_path/Spot__14d2DBSplinePathFPff.s +++ /dev/null @@ -1,67 +0,0 @@ -lbl_80097B68: -/* 80097B68 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80097B6C 80 A3 00 04 */ lwz r5, 4(r3) -/* 80097B70 2C 05 00 02 */ cmpwi r5, 2 -/* 80097B74 40 80 00 0C */ bge lbl_80097B80 -/* 80097B78 38 00 00 01 */ li r0, 1 -/* 80097B7C 48 00 00 08 */ b lbl_80097B84 -lbl_80097B80: -/* 80097B80 38 05 FF FE */ addi r0, r5, -2 -lbl_80097B84: -/* 80097B84 C8 42 91 C8 */ lfd f2, lit_3632(r2) -/* 80097B88 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 80097B8C 90 01 00 0C */ stw r0, 0xc(r1) -/* 80097B90 3C A0 43 30 */ lis r5, 0x4330 -/* 80097B94 90 A1 00 08 */ stw r5, 8(r1) -/* 80097B98 C8 01 00 08 */ lfd f0, 8(r1) -/* 80097B9C EC 00 10 28 */ fsubs f0, f0, f2 -/* 80097BA0 EC A1 00 32 */ fmuls f5, f1, f0 -/* 80097BA4 FC 00 28 1E */ fctiwz f0, f5 -/* 80097BA8 D8 01 00 10 */ stfd f0, 0x10(r1) -/* 80097BAC 80 E1 00 14 */ lwz r7, 0x14(r1) -/* 80097BB0 6C E0 80 00 */ xoris r0, r7, 0x8000 -/* 80097BB4 90 01 00 1C */ stw r0, 0x1c(r1) -/* 80097BB8 90 A1 00 18 */ stw r5, 0x18(r1) -/* 80097BBC C8 01 00 18 */ lfd f0, 0x18(r1) -/* 80097BC0 EC 00 10 28 */ fsubs f0, f0, f2 -/* 80097BC4 EC A5 00 28 */ fsubs f5, f5, f0 -/* 80097BC8 80 63 00 04 */ lwz r3, 4(r3) -/* 80097BCC 38 C3 FF FF */ addi r6, r3, -1 -/* 80097BD0 7C 07 30 00 */ cmpw r7, r6 -/* 80097BD4 7C C5 33 78 */ mr r5, r6 -/* 80097BD8 40 80 00 08 */ bge lbl_80097BE0 -/* 80097BDC 7C E5 3B 78 */ mr r5, r7 -lbl_80097BE0: -/* 80097BE0 38 07 00 01 */ addi r0, r7, 1 -/* 80097BE4 7C 00 30 00 */ cmpw r0, r6 -/* 80097BE8 7C C3 33 78 */ mr r3, r6 -/* 80097BEC 40 80 00 08 */ bge lbl_80097BF4 -/* 80097BF0 7C 03 03 78 */ mr r3, r0 -lbl_80097BF4: -/* 80097BF4 38 07 00 02 */ addi r0, r7, 2 -/* 80097BF8 7C 00 30 00 */ cmpw r0, r6 -/* 80097BFC 40 80 00 08 */ bge lbl_80097C04 -/* 80097C00 7C 06 03 78 */ mr r6, r0 -lbl_80097C04: -/* 80097C04 C0 02 91 D0 */ lfs f0, lit_3684(r2) -/* 80097C08 EC C0 28 28 */ fsubs f6, f0, f5 -/* 80097C0C C0 82 91 D4 */ lfs f4, lit_3685(r2) -/* 80097C10 EC 05 01 72 */ fmuls f0, f5, f5 -/* 80097C14 EC 24 00 32 */ fmuls f1, f4, f0 -/* 80097C18 54 C0 10 3A */ slwi r0, r6, 2 -/* 80097C1C 7C 04 04 2E */ lfsx f0, r4, r0 -/* 80097C20 EC 61 00 32 */ fmuls f3, f1, f0 -/* 80097C24 EC 06 01 B2 */ fmuls f0, f6, f6 -/* 80097C28 EC 24 00 32 */ fmuls f1, f4, f0 -/* 80097C2C 54 A0 10 3A */ slwi r0, r5, 2 -/* 80097C30 7C 04 04 2E */ lfsx f0, r4, r0 -/* 80097C34 EC 41 00 32 */ fmuls f2, f1, f0 -/* 80097C38 EC 05 01 B2 */ fmuls f0, f5, f6 -/* 80097C3C EC 24 00 2A */ fadds f1, f4, f0 -/* 80097C40 54 60 10 3A */ slwi r0, r3, 2 -/* 80097C44 7C 04 04 2E */ lfsx f0, r4, r0 -/* 80097C48 EC 01 00 32 */ fmuls f0, f1, f0 -/* 80097C4C EC 02 00 2A */ fadds f0, f2, f0 -/* 80097C50 EC 23 00 2A */ fadds f1, f3, f0 -/* 80097C54 38 21 00 20 */ addi r1, r1, 0x20 -/* 80097C58 4E 80 00 20 */ blr diff --git a/asm/d/d_spline_path/Step__14d2DBSplinePathFv.s b/asm/d/d_spline_path/Step__14d2DBSplinePathFv.s deleted file mode 100644 index fa0ea33782a..00000000000 --- a/asm/d/d_spline_path/Step__14d2DBSplinePathFv.s +++ /dev/null @@ -1,101 +0,0 @@ -lbl_80097904: -/* 80097904 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80097908 80 83 00 00 */ lwz r4, 0(r3) -/* 8009790C 80 03 00 0C */ lwz r0, 0xc(r3) -/* 80097910 7C 04 00 00 */ cmpw r4, r0 -/* 80097914 41 80 00 0C */ blt lbl_80097920 -/* 80097918 38 00 00 00 */ li r0, 0 -/* 8009791C 90 03 00 08 */ stw r0, 8(r3) -lbl_80097920: -/* 80097920 80 03 00 08 */ lwz r0, 8(r3) -/* 80097924 2C 00 00 01 */ cmpwi r0, 1 -/* 80097928 40 82 00 0C */ bne lbl_80097934 -/* 8009792C 38 00 00 02 */ li r0, 2 -/* 80097930 90 03 00 08 */ stw r0, 8(r3) -lbl_80097934: -/* 80097934 80 03 00 08 */ lwz r0, 8(r3) -/* 80097938 2C 00 00 02 */ cmpwi r0, 2 -/* 8009793C 40 82 01 08 */ bne lbl_80097A44 -/* 80097940 80 03 00 00 */ lwz r0, 0(r3) -/* 80097944 80 83 00 0C */ lwz r4, 0xc(r3) -/* 80097948 38 84 FF FF */ addi r4, r4, -1 -/* 8009794C 7C 00 20 00 */ cmpw r0, r4 -/* 80097950 41 81 00 EC */ bgt lbl_80097A3C -/* 80097954 C0 43 00 10 */ lfs f2, 0x10(r3) -/* 80097958 C8 22 91 C8 */ lfd f1, lit_3632(r2) -/* 8009795C 6C 00 80 00 */ xoris r0, r0, 0x8000 -/* 80097960 90 01 00 0C */ stw r0, 0xc(r1) -/* 80097964 3C 80 43 30 */ lis r4, 0x4330 -/* 80097968 90 81 00 08 */ stw r4, 8(r1) -/* 8009796C C8 01 00 08 */ lfd f0, 8(r1) -/* 80097970 EC 00 08 28 */ fsubs f0, f0, f1 -/* 80097974 EC 62 00 32 */ fmuls f3, f2, f0 -/* 80097978 FC 00 18 1E */ fctiwz f0, f3 -/* 8009797C D8 01 00 10 */ stfd f0, 0x10(r1) -/* 80097980 80 A1 00 14 */ lwz r5, 0x14(r1) -/* 80097984 6C A0 80 00 */ xoris r0, r5, 0x8000 -/* 80097988 90 01 00 1C */ stw r0, 0x1c(r1) -/* 8009798C 90 81 00 18 */ stw r4, 0x18(r1) -/* 80097990 C8 01 00 18 */ lfd f0, 0x18(r1) -/* 80097994 EC 00 08 28 */ fsubs f0, f0, f1 -/* 80097998 EC 63 00 28 */ fsubs f3, f3, f0 -/* 8009799C 40 82 00 10 */ bne lbl_800979AC -/* 800979A0 38 00 00 03 */ li r0, 3 -/* 800979A4 90 03 00 08 */ stw r0, 8(r3) -/* 800979A8 C0 62 91 D0 */ lfs f3, lit_3684(r2) -lbl_800979AC: -/* 800979AC 80 83 00 04 */ lwz r4, 4(r3) -/* 800979B0 38 04 FF FF */ addi r0, r4, -1 -/* 800979B4 7C 05 00 00 */ cmpw r5, r0 -/* 800979B8 40 80 00 08 */ bge lbl_800979C0 -/* 800979BC 7C A0 2B 78 */ mr r0, r5 -lbl_800979C0: -/* 800979C0 90 03 00 20 */ stw r0, 0x20(r3) -/* 800979C4 38 05 00 01 */ addi r0, r5, 1 -/* 800979C8 80 83 00 04 */ lwz r4, 4(r3) -/* 800979CC 38 84 FF FF */ addi r4, r4, -1 -/* 800979D0 7C 00 20 00 */ cmpw r0, r4 -/* 800979D4 40 80 00 08 */ bge lbl_800979DC -/* 800979D8 7C 04 03 78 */ mr r4, r0 -lbl_800979DC: -/* 800979DC 90 83 00 24 */ stw r4, 0x24(r3) -/* 800979E0 38 05 00 02 */ addi r0, r5, 2 -/* 800979E4 80 83 00 04 */ lwz r4, 4(r3) -/* 800979E8 38 84 FF FF */ addi r4, r4, -1 -/* 800979EC 7C 00 20 00 */ cmpw r0, r4 -/* 800979F0 40 80 00 08 */ bge lbl_800979F8 -/* 800979F4 7C 04 03 78 */ mr r4, r0 -lbl_800979F8: -/* 800979F8 90 83 00 28 */ stw r4, 0x28(r3) -/* 800979FC C0 02 91 D0 */ lfs f0, lit_3684(r2) -/* 80097A00 EC 40 18 28 */ fsubs f2, f0, f3 -/* 80097A04 C0 22 91 D4 */ lfs f1, lit_3685(r2) -/* 80097A08 EC 02 00 B2 */ fmuls f0, f2, f2 -/* 80097A0C EC 01 00 32 */ fmuls f0, f1, f0 -/* 80097A10 D0 03 00 14 */ stfs f0, 0x14(r3) -/* 80097A14 EC 03 00 B2 */ fmuls f0, f3, f2 -/* 80097A18 EC 01 00 2A */ fadds f0, f1, f0 -/* 80097A1C D0 03 00 18 */ stfs f0, 0x18(r3) -/* 80097A20 EC 03 00 F2 */ fmuls f0, f3, f3 -/* 80097A24 EC 01 00 32 */ fmuls f0, f1, f0 -/* 80097A28 D0 03 00 1C */ stfs f0, 0x1c(r3) -/* 80097A2C 80 83 00 00 */ lwz r4, 0(r3) -/* 80097A30 38 04 00 01 */ addi r0, r4, 1 -/* 80097A34 90 03 00 00 */ stw r0, 0(r3) -/* 80097A38 48 00 00 0C */ b lbl_80097A44 -lbl_80097A3C: -/* 80097A3C 38 00 00 00 */ li r0, 0 -/* 80097A40 90 03 00 08 */ stw r0, 8(r3) -lbl_80097A44: -/* 80097A44 38 00 00 00 */ li r0, 0 -/* 80097A48 80 63 00 08 */ lwz r3, 8(r3) -/* 80097A4C 2C 03 00 02 */ cmpwi r3, 2 -/* 80097A50 41 82 00 0C */ beq lbl_80097A5C -/* 80097A54 2C 03 00 03 */ cmpwi r3, 3 -/* 80097A58 40 82 00 08 */ bne lbl_80097A60 -lbl_80097A5C: -/* 80097A5C 38 00 00 01 */ li r0, 1 -lbl_80097A60: -/* 80097A60 7C 03 03 78 */ mr r3, r0 -/* 80097A64 38 21 00 20 */ addi r1, r1, 0x20 -/* 80097A68 4E 80 00 20 */ blr diff --git a/asm/d/d_spline_path/bSpline2__10dPathCurveFf.s b/asm/d/d_spline_path/bSpline2__10dPathCurveFf.s deleted file mode 100644 index 8b109e55ac5..00000000000 --- a/asm/d/d_spline_path/bSpline2__10dPathCurveFf.s +++ /dev/null @@ -1,141 +0,0 @@ -lbl_80097C74: -/* 80097C74 94 21 FF C0 */ stwu r1, -0x40(r1) -/* 80097C78 7C 08 02 A6 */ mflr r0 -/* 80097C7C 90 01 00 44 */ stw r0, 0x44(r1) -/* 80097C80 93 E1 00 3C */ stw r31, 0x3c(r1) -/* 80097C84 7C 7F 1B 78 */ mr r31, r3 -/* 80097C88 80 84 00 08 */ lwz r4, 8(r4) -/* 80097C8C A0 A4 00 00 */ lhz r5, 0(r4) -/* 80097C90 2C 05 00 01 */ cmpwi r5, 1 -/* 80097C94 41 81 00 24 */ bgt lbl_80097CB8 -/* 80097C98 80 64 00 08 */ lwz r3, 8(r4) -/* 80097C9C C0 03 00 04 */ lfs f0, 4(r3) -/* 80097CA0 D0 1F 00 00 */ stfs f0, 0(r31) -/* 80097CA4 C0 03 00 08 */ lfs f0, 8(r3) -/* 80097CA8 D0 1F 00 04 */ stfs f0, 4(r31) -/* 80097CAC C0 03 00 0C */ lfs f0, 0xc(r3) -/* 80097CB0 D0 1F 00 08 */ stfs f0, 8(r31) -/* 80097CB4 48 00 01 C4 */ b lbl_80097E78 -lbl_80097CB8: -/* 80097CB8 2C 05 00 02 */ cmpwi r5, 2 -/* 80097CBC 40 82 00 70 */ bne lbl_80097D2C -/* 80097CC0 80 84 00 08 */ lwz r4, 8(r4) -/* 80097CC4 C0 44 00 14 */ lfs f2, 0x14(r4) -/* 80097CC8 C0 04 00 04 */ lfs f0, 4(r4) -/* 80097CCC EC 02 00 28 */ fsubs f0, f2, f0 -/* 80097CD0 EC 01 00 32 */ fmuls f0, f1, f0 -/* 80097CD4 D0 01 00 08 */ stfs f0, 8(r1) -/* 80097CD8 C0 44 00 18 */ lfs f2, 0x18(r4) -/* 80097CDC C0 04 00 08 */ lfs f0, 8(r4) -/* 80097CE0 EC 02 00 28 */ fsubs f0, f2, f0 -/* 80097CE4 EC 01 00 32 */ fmuls f0, f1, f0 -/* 80097CE8 D0 01 00 0C */ stfs f0, 0xc(r1) -/* 80097CEC C0 44 00 1C */ lfs f2, 0x1c(r4) -/* 80097CF0 C0 04 00 0C */ lfs f0, 0xc(r4) -/* 80097CF4 EC 02 00 28 */ fsubs f0, f2, f0 -/* 80097CF8 EC 01 00 32 */ fmuls f0, f1, f0 -/* 80097CFC D0 01 00 10 */ stfs f0, 0x10(r1) -/* 80097D00 38 61 00 08 */ addi r3, r1, 8 -/* 80097D04 38 84 00 04 */ addi r4, r4, 4 -/* 80097D08 7C 65 1B 78 */ mr r5, r3 -/* 80097D0C 48 2A F3 85 */ bl PSVECAdd -/* 80097D10 C0 01 00 08 */ lfs f0, 8(r1) -/* 80097D14 D0 1F 00 00 */ stfs f0, 0(r31) -/* 80097D18 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 80097D1C D0 1F 00 04 */ stfs f0, 4(r31) -/* 80097D20 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 80097D24 D0 1F 00 08 */ stfs f0, 8(r31) -/* 80097D28 48 00 01 50 */ b lbl_80097E78 -lbl_80097D2C: -/* 80097D2C C8 42 91 C8 */ lfd f2, lit_3632(r2) -/* 80097D30 6C A0 80 00 */ xoris r0, r5, 0x8000 -/* 80097D34 90 01 00 1C */ stw r0, 0x1c(r1) -/* 80097D38 3C 60 43 30 */ lis r3, 0x4330 -/* 80097D3C 90 61 00 18 */ stw r3, 0x18(r1) -/* 80097D40 C8 01 00 18 */ lfd f0, 0x18(r1) -/* 80097D44 EC 00 10 28 */ fsubs f0, f0, f2 -/* 80097D48 EC 60 00 72 */ fmuls f3, f0, f1 -/* 80097D4C FC 00 18 1E */ fctiwz f0, f3 -/* 80097D50 D8 01 00 20 */ stfd f0, 0x20(r1) -/* 80097D54 80 C1 00 24 */ lwz r6, 0x24(r1) -/* 80097D58 6C C0 80 00 */ xoris r0, r6, 0x8000 -/* 80097D5C 90 01 00 2C */ stw r0, 0x2c(r1) -/* 80097D60 90 61 00 28 */ stw r3, 0x28(r1) -/* 80097D64 C8 01 00 28 */ lfd f0, 0x28(r1) -/* 80097D68 EC 00 10 28 */ fsubs f0, f0, f2 -/* 80097D6C EC 63 00 28 */ fsubs f3, f3, f0 -/* 80097D70 C0 02 91 D0 */ lfs f0, lit_3684(r2) -/* 80097D74 EC 40 18 28 */ fsubs f2, f0, f3 -/* 80097D78 C0 22 91 D4 */ lfs f1, lit_3685(r2) -/* 80097D7C EC 02 00 B2 */ fmuls f0, f2, f2 -/* 80097D80 EC 81 00 32 */ fmuls f4, f1, f0 -/* 80097D84 EC 03 00 B2 */ fmuls f0, f3, f2 -/* 80097D88 EC A1 00 2A */ fadds f5, f1, f0 -/* 80097D8C EC 03 00 F2 */ fmuls f0, f3, f3 -/* 80097D90 EC C1 00 32 */ fmuls f6, f1, f0 -/* 80097D94 2C 06 00 00 */ cmpwi r6, 0 -/* 80097D98 41 81 00 14 */ bgt lbl_80097DAC -/* 80097D9C 38 60 00 00 */ li r3, 0 -/* 80097DA0 38 A0 00 00 */ li r5, 0 -/* 80097DA4 38 C0 00 01 */ li r6, 1 -/* 80097DA8 48 00 00 28 */ b lbl_80097DD0 -lbl_80097DAC: -/* 80097DAC 7C 06 28 00 */ cmpw r6, r5 -/* 80097DB0 41 80 00 14 */ blt lbl_80097DC4 -/* 80097DB4 38 65 FF FE */ addi r3, r5, -2 -/* 80097DB8 38 A5 FF FF */ addi r5, r5, -1 -/* 80097DBC 7C A6 2B 78 */ mr r6, r5 -/* 80097DC0 48 00 00 10 */ b lbl_80097DD0 -lbl_80097DC4: -/* 80097DC4 38 66 FF FF */ addi r3, r6, -1 -/* 80097DC8 7C C5 33 78 */ mr r5, r6 -/* 80097DCC 38 C6 00 01 */ addi r6, r6, 1 -lbl_80097DD0: -/* 80097DD0 80 04 00 08 */ lwz r0, 8(r4) -/* 80097DD4 54 63 20 36 */ slwi r3, r3, 4 -/* 80097DD8 38 83 00 04 */ addi r4, r3, 4 -/* 80097DDC 7C 80 22 14 */ add r4, r0, r4 -/* 80097DE0 54 A3 20 36 */ slwi r3, r5, 4 -/* 80097DE4 38 A3 00 04 */ addi r5, r3, 4 -/* 80097DE8 7C A0 2A 14 */ add r5, r0, r5 -/* 80097DEC 54 C3 20 36 */ slwi r3, r6, 4 -/* 80097DF0 38 63 00 04 */ addi r3, r3, 4 -/* 80097DF4 7C 60 1A 14 */ add r3, r0, r3 -/* 80097DF8 C0 03 00 00 */ lfs f0, 0(r3) -/* 80097DFC EC 40 01 B2 */ fmuls f2, f0, f6 -/* 80097E00 C0 04 00 00 */ lfs f0, 0(r4) -/* 80097E04 EC 20 01 32 */ fmuls f1, f0, f4 -/* 80097E08 C0 05 00 00 */ lfs f0, 0(r5) -/* 80097E0C EC 00 01 72 */ fmuls f0, f0, f5 -/* 80097E10 EC 01 00 2A */ fadds f0, f1, f0 -/* 80097E14 EC 62 00 2A */ fadds f3, f2, f0 -/* 80097E18 D0 61 00 08 */ stfs f3, 8(r1) -/* 80097E1C C0 03 00 04 */ lfs f0, 4(r3) -/* 80097E20 EC 40 01 B2 */ fmuls f2, f0, f6 -/* 80097E24 C0 04 00 04 */ lfs f0, 4(r4) -/* 80097E28 EC 20 01 32 */ fmuls f1, f0, f4 -/* 80097E2C C0 05 00 04 */ lfs f0, 4(r5) -/* 80097E30 EC 00 01 72 */ fmuls f0, f0, f5 -/* 80097E34 EC 01 00 2A */ fadds f0, f1, f0 -/* 80097E38 EC 02 00 2A */ fadds f0, f2, f0 -/* 80097E3C D0 01 00 0C */ stfs f0, 0xc(r1) -/* 80097E40 C0 03 00 08 */ lfs f0, 8(r3) -/* 80097E44 EC 40 01 B2 */ fmuls f2, f0, f6 -/* 80097E48 C0 04 00 08 */ lfs f0, 8(r4) -/* 80097E4C EC 20 01 32 */ fmuls f1, f0, f4 -/* 80097E50 C0 05 00 08 */ lfs f0, 8(r5) -/* 80097E54 EC 00 01 72 */ fmuls f0, f0, f5 -/* 80097E58 EC 01 00 2A */ fadds f0, f1, f0 -/* 80097E5C EC 02 00 2A */ fadds f0, f2, f0 -/* 80097E60 D0 01 00 10 */ stfs f0, 0x10(r1) -/* 80097E64 D0 7F 00 00 */ stfs f3, 0(r31) -/* 80097E68 C0 01 00 0C */ lfs f0, 0xc(r1) -/* 80097E6C D0 1F 00 04 */ stfs f0, 4(r31) -/* 80097E70 C0 01 00 10 */ lfs f0, 0x10(r1) -/* 80097E74 D0 1F 00 08 */ stfs f0, 8(r31) -lbl_80097E78: -/* 80097E78 83 E1 00 3C */ lwz r31, 0x3c(r1) -/* 80097E7C 80 01 00 44 */ lwz r0, 0x44(r1) -/* 80097E80 7C 08 03 A6 */ mtlr r0 -/* 80097E84 38 21 00 40 */ addi r1, r1, 0x40 -/* 80097E88 4E 80 00 20 */ blr diff --git a/include/d/d_spline_path.h b/include/d/d_spline_path.h index b5c0b6836d8..7e011ed099e 100644 --- a/include/d/d_spline_path.h +++ b/include/d/d_spline_path.h @@ -7,7 +7,7 @@ struct dPath; struct dPathCurve { /* 80097C5C */ void Init(dPath*); - /* 80097C74 */ void bSpline2(f32); + /* 80097C74 */ cXyz bSpline2(f32); /* 0x00 */ int field_0x00; /* 0x00 */ int field_0x04; @@ -17,22 +17,18 @@ struct dPathCurve { class d2DBSplinePath { public: /* 80097878 */ void Init(s32, s32); - /* 80097904 */ void Step(); + /* 80097904 */ bool Step(); /* 80097B20 */ f32 Calc(f32*); - /* 80097A6C */ void Calc(cXyz*); - /* 80097B68 */ void Spot(f32*, f32); + /* 80097A6C */ cXyz Calc(cXyz*); + /* 80097B68 */ f32 Spot(f32*, f32); /* 0x00 */ s32 field_0x00; /* 0x04 */ s32 field_0x04; /* 0x08 */ s32 field_0x08; /* 0x0C */ s32 field_0x0c; /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; - /* 0x1C */ f32 field_0x1c; - /* 0x20 */ u32 field_0x20; - /* 0x24 */ int field_0x24; - /* 0x28 */ int field_0x28; + /* 0x14 */ f32 mCurveWeight[3]; + /* 0x20 */ int mCurveKey[3]; /* 0x2C */ int field_0x2c; /* 0x30 */ void* field_0x30; }; diff --git a/src/d/d_spline_path.cpp b/src/d/d_spline_path.cpp index 919bb735018..a9b4b733306 100644 --- a/src/d/d_spline_path.cpp +++ b/src/d/d_spline_path.cpp @@ -4,31 +4,10 @@ */ #include "d/d_spline_path.h" -#include "dol2asm.h" - -// -// Forward References: -// - -extern "C" void Init__14d2DBSplinePathFll(); -extern "C" void Step__14d2DBSplinePathFv(); -extern "C" void Calc__14d2DBSplinePathFP4cXyz(); -extern "C" void Calc__14d2DBSplinePathFPf(); -extern "C" void Spot__14d2DBSplinePathFPff(); -extern "C" void Init__10dPathCurveFP5dPath(); -extern "C" void bSpline2__10dPathCurveFf(); - -// -// Declarations: -// - -/* ############################################################################################## */ -/* 80452BC8-80452BD0 0011C8 0008+00 4/4 0/0 0/0 .sdata2 @3632 */ -SECTION_SDATA2 static f64 lit_3632 = 4503601774854144.0 /* cast s32 to float */; +#include "d/d_path.h" +#include "d/d_stage.h" /* 80097878-80097904 0921B8 008C+00 0/0 7/7 0/0 .text Init__14d2DBSplinePathFll */ -#ifdef NONMATCHING -// matches with literals void d2DBSplinePath::Init(s32 param_0, s32 param_1) { s32 tmp; s32 tmp2; @@ -44,60 +23,74 @@ void d2DBSplinePath::Init(s32 param_0, s32 param_1) { field_0x2c = 0; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void d2DBSplinePath::Init(s32 param_0, s32 param_1) { - nofralloc -#include "asm/d/d_spline_path/Init__14d2DBSplinePathFll.s" -} -#pragma pop -#endif - -/* ############################################################################################## */ -/* 80452BD0-80452BD4 0011D0 0004+00 3/3 0/0 0/0 .sdata2 @3684 */ -SECTION_SDATA2 static f32 lit_3684 = 1.0f; - -/* 80452BD4-80452BD8 0011D4 0004+00 3/3 0/0 0/0 .sdata2 @3685 */ -SECTION_SDATA2 static f32 lit_3685 = 0.5f; /* 80097904-80097A6C 092244 0168+00 0/0 5/5 0/0 .text Step__14d2DBSplinePathFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void d2DBSplinePath::Step() { - nofralloc -#include "asm/d/d_spline_path/Step__14d2DBSplinePathFv.s" +bool d2DBSplinePath::Step() { + if (field_0x00 >= field_0x0c) { + field_0x08 = 0; + } + if (field_0x08 == 1) { + field_0x08 = 2; + } + if (field_0x08 == 2) { + if (field_0x00 <= field_0x0c - 1) { + f32 fVar2 = field_0x10 * field_0x00; + int uVar1 = fVar2; + fVar2 -= uVar1; + if (field_0x00 == field_0x0c - 1) { + field_0x08 = 3; + fVar2 = 1.0f; + } + mCurveKey[0] = (uVar1 < field_0x04 - 1) ? uVar1 : field_0x04 - 1; + mCurveKey[1] = (uVar1 + 1 < field_0x04 - 1) ? uVar1 + 1 : field_0x04 - 1; + mCurveKey[2] = (uVar1 + 2 < field_0x04 - 1) ? uVar1 + 2 : field_0x04 - 1; + f32 fVar7 = 1.0f - fVar2; + mCurveWeight[0] = fVar7 * fVar7 * 0.5f; + mCurveWeight[1] = (fVar2 * (1.0f - fVar2)) + 0.5f; + mCurveWeight[2] = fVar2 * fVar2 * 0.5f; + field_0x00++; + } else { + field_0x08 = 0; + } + } + return field_0x08 == 2 || field_0x08 == 3; } -#pragma pop /* 80097A6C-80097B20 0923AC 00B4+00 0/0 1/1 0/0 .text Calc__14d2DBSplinePathFP4cXyz */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void d2DBSplinePath::Calc(cXyz* param_0) { - nofralloc -#include "asm/d/d_spline_path/Calc__14d2DBSplinePathFP4cXyz.s" +cXyz d2DBSplinePath::Calc(cXyz* v) { + cXyz ret; + ret.x = mCurveWeight[0] * v[mCurveKey[0]].x + mCurveWeight[1] * v[mCurveKey[1]].x + mCurveWeight[2] * v[mCurveKey[2]].x; + ret.y = mCurveWeight[0] * v[mCurveKey[0]].y + mCurveWeight[1] * v[mCurveKey[1]].y + mCurveWeight[2] * v[mCurveKey[2]].y; + ret.z = mCurveWeight[0] * v[mCurveKey[0]].z + mCurveWeight[1] * v[mCurveKey[1]].z + mCurveWeight[2] * v[mCurveKey[2]].z; + return ret; } -#pragma pop /* 80097B20-80097B68 092460 0048+00 0/0 5/5 0/0 .text Calc__14d2DBSplinePathFPf */ f32 d2DBSplinePath::Calc(f32* param_0) { - return field_0x14 * param_0[field_0x20] + - field_0x18 * param_0[field_0x24] + - field_0x1c * param_0[field_0x28]; + return mCurveWeight[0] * param_0[mCurveKey[0]] + + mCurveWeight[1] * param_0[mCurveKey[1]] + + mCurveWeight[2] * param_0[mCurveKey[2]]; } /* 80097B68-80097C5C 0924A8 00F4+00 0/0 1/1 0/0 .text Spot__14d2DBSplinePathFPff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void d2DBSplinePath::Spot(f32* param_0, f32 param_1) { - nofralloc -#include "asm/d/d_spline_path/Spot__14d2DBSplinePathFPff.s" +f32 d2DBSplinePath::Spot(f32* param_1, f32 param_2) { + int uVar10; + if (field_0x04 < 2) { + uVar10 = 1; + } else { + uVar10 = field_0x04 - 2; + } + f32 fVar5 = param_2 * uVar10; + int uVar11 = fVar5; + fVar5 = fVar5 - uVar11; + + int iVar9 = (uVar11 < field_0x04 - 1) ? uVar11 : field_0x04 - 1; + int iVar8 = (uVar11 + 1 < field_0x04 - 1) ? uVar11 + 1 : field_0x04 - 1; + int iVar7 = (uVar11 + 2 < field_0x04 - 1) ? uVar11 + 2 : field_0x04 - 1; + f32 fVar6 = 1.0f - fVar5; + return fVar6 * fVar6 * 0.5f * param_1[iVar9] + (fVar5 * fVar6 + 0.5f) * param_1[iVar8] + + fVar5 * fVar5 * 0.5f * param_1[iVar7]; } -#pragma pop /* 80097C5C-80097C74 09259C 0018+00 0/0 0/0 1/1 .text Init__10dPathCurveFP5dPath */ void dPathCurve::Init(dPath* i_path) { @@ -107,11 +100,51 @@ void dPathCurve::Init(dPath* i_path) { } /* 80097C74-80097E8C 0925B4 0218+00 0/0 0/0 1/1 .text bSpline2__10dPathCurveFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dPathCurve::bSpline2(f32 param_0) { - nofralloc -#include "asm/d/d_spline_path/bSpline2__10dPathCurveFf.s" +cXyz dPathCurve::bSpline2(f32 param_0) { + cXyz local_7c; + int uVar12 = mpPath->m_num; + if (uVar12 <= 1) { + return mpPath->m_points[0].m_position; + } else if (uVar12 == 2) { + local_7c.x = param_0 * (mpPath->m_points[1].m_position.x - + mpPath->m_points[0].m_position.x); + local_7c.y = param_0 * (mpPath->m_points[1].m_position.y - + mpPath->m_points[0].m_position.y); + local_7c.z = param_0 * (mpPath->m_points[1].m_position.z - + mpPath->m_points[0].m_position.z); + local_7c += mpPath->m_points[0].m_position; + return local_7c; + } else { + f32 fVar2 = uVar12 * param_0; + int uVar4 = fVar2; + fVar2 -= uVar4; + f32 fVar8 = 1.0f - fVar2; + f32 fVar7 = fVar8 * fVar8 * 0.5f; + f32 fVar6 = fVar2 * fVar8 + 0.5f; + f32 fVar5 = fVar2 * fVar2 * 0.5f; + + int iVar10; + int uVar9; + int iVar8; + if (uVar4 <= 0) { + iVar10 = 0; + uVar9 = 0; + iVar8 = 1; + } else if (uVar4 >= uVar12) { + iVar10 = uVar12 - 2; + uVar9 = uVar12 - 1; + iVar8 = uVar12 - 1; + } else { + iVar10 = uVar4 - 1; + uVar9 = uVar4; + iVar8 = uVar4 + 1; + } + Vec* point11 = &mpPath->m_points[iVar10].m_position; + Vec* point10 = &mpPath->m_points[uVar9].m_position; + Vec* point8 = &mpPath->m_points[iVar8].m_position; + local_7c.x = point11->x * fVar7 + point10->x * fVar6 + point8->x * fVar5; + local_7c.y = point11->y * fVar7 + point10->y * fVar6 + point8->y * fVar5; + local_7c.z = point11->z * fVar7 + point10->z * fVar6 + point8->z * fVar5; + return local_7c; + } } -#pragma pop