From 411a832fbb90e6c61a6b5d982b9380533683c301 Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Fri, 24 May 2024 19:47:15 -0700 Subject: [PATCH] d_a_e_vt mostly done (#2158) --- Progress.md | 8 +- .../d_a_e_vt/CreateHeap__8daE_VA_cFv.s | 4 +- .../DemoSkipCallBack__8daE_VA_cFPvi.s | 16 - .../JointCallBack__8daE_VA_cFP8J3DJointi.s | 21 - .../d_a_e_vt/d_a_e_vt/_delete__8daE_VA_cFv.s | 54 - .../d_a_e_vt/calcJointNeck__8daE_VA_cFv.s | 120 - .../d_a_e_vt/calcOpRopePos__8daE_VA_cFv.s | 4 +- .../d_a_e_vt/calcTagAngle__8daE_VA_cFv.s | 4 +- .../d_a_e_vt/d_a_e_vt/checkBck__8daE_VA_cFi.s | 24 - .../d_a_e_vt/daE_VA_Create__FP8daE_VA_c.s | 9 - .../d_a_e_vt/daE_VA_Delete__FP8daE_VA_c.s | 9 - .../d_a_e_vt/daE_VA_Draw__FP8daE_VA_c.s | 9 - .../d_a_e_vt/daE_VA_Execute__FP8daE_VA_c.s | 9 - .../d_a_e_vt/getWolfCutType__8daE_VA_cFv.s | 28 - .../d_a_e_vt/d_a_e_vt/mtx_set__8daE_VA_cFv.s | 8 +- .../d_a_e_vt/offSwordShield__8daE_VA_cFv.s | 26 - .../d_a_e_vt/onRopeCutStatus__8daE_VA_cFiii.s | 71 - .../d_a_e_vt/onSwordAtBit__8daE_VA_cFv.s | 14 - .../d_a_e_vt/setActionMode__8daE_VA_cFii.s | 45 - .../d_a_e_vt/useHeapInit__FP10fopAc_ac_c.s | 9 - include/JSystem/J3DGraphBase/J3DMatBlock.h | 18 +- include/JSystem/J3DGraphBase/J3DMaterial.h | 4 + include/JSystem/JGeometry.h | 4 + include/d/a/d_a_player.h | 40 +- include/d/com/d_com_inf_game.h | 8 + include/d/d_drawlist.h | 6 + include/d/save/d_save.h | 1 + include/f_op/f_op_actor.h | 1 + include/f_op/f_op_actor_mng.h | 72 + include/m_Do/m_Do_ext.h | 4 +- include/rel/d/a/e/d_a_e_vt/d_a_e_vt.h | 259 +- libs/JSystem/J3DGraphBase/J3DMatBlock.cpp | 4 +- rel/d/a/e/d_a_e_vt/d_a_e_vt.cpp | 4348 +++++++++++++++-- src/m_Do/m_Do_ext.cpp | 6 +- 34 files changed, 4392 insertions(+), 875 deletions(-) delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/DemoSkipCallBack__8daE_VA_cFPvi.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/JointCallBack__8daE_VA_cFP8J3DJointi.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/_delete__8daE_VA_cFv.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcJointNeck__8daE_VA_cFv.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/checkBck__8daE_VA_cFi.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Create__FP8daE_VA_c.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Delete__FP8daE_VA_c.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Draw__FP8daE_VA_c.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Execute__FP8daE_VA_c.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/getWolfCutType__8daE_VA_cFv.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/offSwordShield__8daE_VA_cFv.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onRopeCutStatus__8daE_VA_cFiii.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onSwordAtBit__8daE_VA_cFv.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setActionMode__8daE_VA_cFii.s delete mode 100644 asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/useHeapInit__FP10fopAc_ac_c.s diff --git a/Progress.md b/Progress.md index e1ab55edc6f..0c6cec9ad3e 100644 --- a/Progress.md +++ b/Progress.md @@ -21,8 +21,8 @@ Total | 54.954197% | 2209528 | 4020672 Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- main.dol | 54.954197% | 2209528 | 4020672 -RELs | 38.671676% | 4447368 | 11500324 -Total | 42.889619% | 6656896 | 15520996 +RELs | 38.686284% | 4449048 | 11500324 +Total | 42.900443% | 6658576 | 15520996 ## RELs @@ -162,7 +162,7 @@ d_a_e_tk | 32.077326% | 3916 | 12208 d_a_e_tk2 | 33.419577% | 3100 | 9276 d_a_e_tk_ball | 33.349562% | 2740 | 8216 d_a_e_tt | 27.836991% | 7104 | 25520 -d_a_e_vt | 24.313702% | 16332 | 67172 +d_a_e_vt | 26.814744% | 18012 | 67172 d_a_e_warpappear | 28.864569% | 4220 | 14620 d_a_e_wb | 23.058129% | 20008 | 86772 d_a_e_ws | 29.700483% | 6148 | 20700 @@ -785,4 +785,4 @@ d_a_vrbox2 | 44.907111% | 2804 | 6244 d_a_warp_bug | 100.000000% | 2024 | 2024 d_a_ykgr | 44.400631% | 2252 | 5072 f_pc_profile_lst | 100.000000% | 28156 | 28156 -Total | 38.671676% | 4447368 | 11500324 +Total | 38.686284% | 4449048 | 11500324 diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/CreateHeap__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/CreateHeap__8daE_VA_cFv.s index 25f70ee01d8..5128c1b6532 100644 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/CreateHeap__8daE_VA_cFv.s +++ b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/CreateHeap__8daE_VA_cFv.s @@ -328,8 +328,8 @@ lbl_807CD4DC: /* 807CD4F4 41 80 FF D4 */ blt lbl_807CD4C8 /* 807CD4F8 3B 80 00 00 */ li r28, 0 /* 807CD4FC 3B A0 00 00 */ li r29, 0 -/* 807CD500 3C 60 80 7D */ lis r3, data_807CF084@ha /* 0x807CF084@ha */ -/* 807CD504 38 03 F0 84 */ addi r0, r3, data_807CF084@l /* 0x807CF084@l */ +/* 807CD500 3C 60 80 7D */ lis r3, va_tag_set_size@ha /* 0x807CF084@ha */ +/* 807CD504 38 03 F0 84 */ addi r0, r3, va_tag_set_size@l /* 0x807CF084@l */ /* 807CD508 3F 20 11 00 */ lis r25, 0x1100 /* 807CD50C 7C 1A 03 78 */ mr r26, r0 lbl_807CD510: diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/DemoSkipCallBack__8daE_VA_cFPvi.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/DemoSkipCallBack__8daE_VA_cFPvi.s deleted file mode 100644 index 10e803459ba..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/DemoSkipCallBack__8daE_VA_cFPvi.s +++ /dev/null @@ -1,16 +0,0 @@ -lbl_807C53A8: -/* 807C53A8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807C53AC 7C 08 02 A6 */ mflr r0 -/* 807C53B0 90 01 00 14 */ stw r0, 0x14(r1) -/* 807C53B4 28 03 00 00 */ cmplwi r3, 0 -/* 807C53B8 41 82 00 10 */ beq lbl_807C53C8 -/* 807C53BC 4B FF FF 7D */ bl demo_skip__8daE_VA_cFi -/* 807C53C0 38 60 00 01 */ li r3, 1 -/* 807C53C4 48 00 00 08 */ b lbl_807C53CC -lbl_807C53C8: -/* 807C53C8 38 60 00 00 */ li r3, 0 -lbl_807C53CC: -/* 807C53CC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807C53D0 7C 08 03 A6 */ mtlr r0 -/* 807C53D4 38 21 00 10 */ addi r1, r1, 0x10 -/* 807C53D8 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/JointCallBack__8daE_VA_cFP8J3DJointi.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/JointCallBack__8daE_VA_cFP8J3DJointi.s deleted file mode 100644 index 36581f3ed98..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/JointCallBack__8daE_VA_cFP8J3DJointi.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_807C284C: -/* 807C284C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807C2850 7C 08 02 A6 */ mflr r0 -/* 807C2854 90 01 00 14 */ stw r0, 0x14(r1) -/* 807C2858 7C 60 1B 78 */ mr r0, r3 -/* 807C285C 2C 04 00 00 */ cmpwi r4, 0 -/* 807C2860 40 82 00 24 */ bne lbl_807C2884 -/* 807C2864 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */ -/* 807C2868 38 63 4A C8 */ addi r3, r3, j3dSys@l /* 0x80434AC8@l */ -/* 807C286C 80 A3 00 38 */ lwz r5, 0x38(r3) -/* 807C2870 80 65 00 14 */ lwz r3, 0x14(r5) -/* 807C2874 28 03 00 00 */ cmplwi r3, 0 -/* 807C2878 41 82 00 0C */ beq lbl_807C2884 -/* 807C287C 7C 04 03 78 */ mr r4, r0 -/* 807C2880 4B FF FD FD */ bl ctrlJoint__8daE_VA_cFP8J3DJointP8J3DModel -lbl_807C2884: -/* 807C2884 38 60 00 01 */ li r3, 1 -/* 807C2888 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807C288C 7C 08 03 A6 */ mtlr r0 -/* 807C2890 38 21 00 10 */ addi r1, r1, 0x10 -/* 807C2894 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/_delete__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/_delete__8daE_VA_cFv.s deleted file mode 100644 index 8290366536b..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/_delete__8daE_VA_cFv.s +++ /dev/null @@ -1,54 +0,0 @@ -lbl_807CCF64: -/* 807CCF64 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 807CCF68 7C 08 02 A6 */ mflr r0 -/* 807CCF6C 90 01 00 24 */ stw r0, 0x24(r1) -/* 807CCF70 39 61 00 20 */ addi r11, r1, 0x20 -/* 807CCF74 4B B9 52 65 */ bl _savegpr_28 -/* 807CCF78 7C 7C 1B 78 */ mr r28, r3 -/* 807CCF7C 38 7C 05 AC */ addi r3, r28, 0x5ac -/* 807CCF80 3C 80 80 7D */ lis r4, d_a_e_vt__stringBase0@ha /* 0x807CEEFC@ha */ -/* 807CCF84 38 84 EE FC */ addi r4, r4, d_a_e_vt__stringBase0@l /* 0x807CEEFC@l */ -/* 807CCF88 4B 86 00 81 */ bl dComIfG_resDelete__FP30request_of_phase_process_classPCc -/* 807CCF8C 3C 7C 00 01 */ addis r3, r28, 1 -/* 807CCF90 88 03 0F F8 */ lbz r0, 0xff8(r3) -/* 807CCF94 28 00 00 00 */ cmplwi r0, 0 -/* 807CCF98 41 82 00 10 */ beq lbl_807CCFA8 -/* 807CCF9C 38 00 00 00 */ li r0, 0 -/* 807CCFA0 3C 60 80 7D */ lis r3, struct_807CF4B4+0x1@ha /* 0x807CF4B5@ha */ -/* 807CCFA4 98 03 F4 B5 */ stb r0, struct_807CF4B4+0x1@l(r3) /* 0x807CF4B5@l */ -lbl_807CCFA8: -/* 807CCFA8 3B A0 00 00 */ li r29, 0 -/* 807CCFAC 3B E0 00 00 */ li r31, 0 -/* 807CCFB0 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 807CCFB4 3B C3 61 C0 */ addi r30, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -lbl_807CCFB8: -/* 807CCFB8 80 7E 5D 3C */ lwz r3, 0x5d3c(r30) -/* 807CCFBC 38 63 02 10 */ addi r3, r3, 0x210 -/* 807CCFC0 3C 9F 00 01 */ addis r4, r31, 1 -/* 807CCFC4 38 84 0F 78 */ addi r4, r4, 0xf78 -/* 807CCFC8 7C 9C 20 2E */ lwzx r4, r28, r4 -/* 807CCFCC 4B 87 E9 4D */ bl getEmitter__Q213dPa_control_c7level_cFUl -/* 807CCFD0 28 03 00 00 */ cmplwi r3, 0 -/* 807CCFD4 41 82 00 08 */ beq lbl_807CCFDC -/* 807CCFD8 4B AB 1C 89 */ bl deleteAllParticle__14JPABaseEmitterFv -lbl_807CCFDC: -/* 807CCFDC 3B BD 00 01 */ addi r29, r29, 1 -/* 807CCFE0 2C 1D 00 02 */ cmpwi r29, 2 -/* 807CCFE4 3B FF 00 04 */ addi r31, r31, 4 -/* 807CCFE8 41 80 FF D0 */ blt lbl_807CCFB8 -/* 807CCFEC 80 1C 00 F0 */ lwz r0, 0xf0(r28) -/* 807CCFF0 28 00 00 00 */ cmplwi r0, 0 -/* 807CCFF4 41 82 00 18 */ beq lbl_807CD00C -/* 807CCFF8 38 7C 12 54 */ addi r3, r28, 0x1254 -/* 807CCFFC 81 9C 12 54 */ lwz r12, 0x1254(r28) -/* 807CD000 81 8C 00 08 */ lwz r12, 8(r12) -/* 807CD004 7D 89 03 A6 */ mtctr r12 -/* 807CD008 4E 80 04 21 */ bctrl -lbl_807CD00C: -/* 807CD00C 38 60 00 01 */ li r3, 1 -/* 807CD010 39 61 00 20 */ addi r11, r1, 0x20 -/* 807CD014 4B B9 52 11 */ bl _restgpr_28 -/* 807CD018 80 01 00 24 */ lwz r0, 0x24(r1) -/* 807CD01C 7C 08 03 A6 */ mtlr r0 -/* 807CD020 38 21 00 20 */ addi r1, r1, 0x20 -/* 807CD024 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcJointNeck__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcJointNeck__8daE_VA_cFv.s deleted file mode 100644 index 215aea937fc..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcJointNeck__8daE_VA_cFv.s +++ /dev/null @@ -1,120 +0,0 @@ -lbl_807C2898: -/* 807C2898 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807C289C 7C 08 02 A6 */ mflr r0 -/* 807C28A0 90 01 00 14 */ stw r0, 0x14(r1) -/* 807C28A4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 807C28A8 93 C1 00 08 */ stw r30, 8(r1) -/* 807C28AC 7C 7E 1B 78 */ mr r30, r3 -/* 807C28B0 88 03 13 91 */ lbz r0, 0x1391(r3) -/* 807C28B4 28 00 00 00 */ cmplwi r0, 0 -/* 807C28B8 41 82 01 2C */ beq lbl_807C29E4 -/* 807C28BC 3C 80 80 40 */ lis r4, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 807C28C0 3B E4 61 C0 */ addi r31, r4, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 807C28C4 80 9F 5D AC */ lwz r4, 0x5dac(r31) -/* 807C28C8 4B 85 7E 49 */ bl fopAcM_searchActorAngleY__FPC10fopAc_ac_cPC10fopAc_ac_c -/* 807C28CC A8 1E 04 E6 */ lha r0, 0x4e6(r30) -/* 807C28D0 7C 00 18 50 */ subf r0, r0, r3 -/* 807C28D4 7C 04 07 34 */ extsh r4, r0 -/* 807C28D8 2C 04 30 00 */ cmpwi r4, 0x3000 -/* 807C28DC 40 81 00 08 */ ble lbl_807C28E4 -/* 807C28E0 38 80 30 00 */ li r4, 0x3000 -lbl_807C28E4: -/* 807C28E4 7C 80 07 34 */ extsh r0, r4 -/* 807C28E8 2C 00 D0 00 */ cmpwi r0, -12288 -/* 807C28EC 40 80 00 08 */ bge lbl_807C28F4 -/* 807C28F0 38 80 D0 00 */ li r4, -12288 -lbl_807C28F4: -/* 807C28F4 38 7E 13 94 */ addi r3, r30, 0x1394 -/* 807C28F8 38 A0 00 08 */ li r5, 8 -/* 807C28FC 38 C0 08 00 */ li r6, 0x800 -/* 807C2900 38 E0 00 40 */ li r7, 0x40 -/* 807C2904 4B AA DC 3D */ bl cLib_addCalcAngleS__FPsssss -/* 807C2908 7F C3 F3 78 */ mr r3, r30 -/* 807C290C 80 9F 5D AC */ lwz r4, 0x5dac(r31) -/* 807C2910 4B 85 7E 29 */ bl fopAcM_searchActorAngleX__FPC10fopAc_ac_cPC10fopAc_ac_c -/* 807C2914 20 03 14 00 */ subfic r0, r3, 0x1400 -/* 807C2918 7C 04 07 34 */ extsh r4, r0 -/* 807C291C 2C 04 30 00 */ cmpwi r4, 0x3000 -/* 807C2920 40 81 00 08 */ ble lbl_807C2928 -/* 807C2924 38 80 30 00 */ li r4, 0x3000 -lbl_807C2928: -/* 807C2928 7C 80 07 34 */ extsh r0, r4 -/* 807C292C 2C 00 D0 00 */ cmpwi r0, -12288 -/* 807C2930 40 80 00 08 */ bge lbl_807C2938 -/* 807C2934 38 80 D0 00 */ li r4, -12288 -lbl_807C2938: -/* 807C2938 38 7E 13 96 */ addi r3, r30, 0x1396 -/* 807C293C 38 A0 00 08 */ li r5, 8 -/* 807C2940 38 C0 08 00 */ li r6, 0x800 -/* 807C2944 38 E0 00 40 */ li r7, 0x40 -/* 807C2948 4B AA DB F9 */ bl cLib_addCalcAngleS__FPsssss -/* 807C294C 7F C3 F3 78 */ mr r3, r30 -/* 807C2950 38 80 00 1F */ li r4, 0x1f -/* 807C2954 48 00 0F 69 */ bl checkBck__8daE_VA_cFi -/* 807C2958 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 807C295C 40 82 00 18 */ bne lbl_807C2974 -/* 807C2960 7F C3 F3 78 */ mr r3, r30 -/* 807C2964 38 80 00 20 */ li r4, 0x20 -/* 807C2968 48 00 0F 55 */ bl checkBck__8daE_VA_cFi -/* 807C296C 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 807C2970 41 82 00 20 */ beq lbl_807C2990 -lbl_807C2974: -/* 807C2974 38 7E 13 98 */ addi r3, r30, 0x1398 -/* 807C2978 38 80 F8 00 */ li r4, -2048 -/* 807C297C 38 A0 00 08 */ li r5, 8 -/* 807C2980 38 C0 00 80 */ li r6, 0x80 -/* 807C2984 38 E0 00 40 */ li r7, 0x40 -/* 807C2988 4B AA DB B9 */ bl cLib_addCalcAngleS__FPsssss -/* 807C298C 48 00 00 4C */ b lbl_807C29D8 -lbl_807C2990: -/* 807C2990 7F C3 F3 78 */ mr r3, r30 -/* 807C2994 38 80 00 21 */ li r4, 0x21 -/* 807C2998 48 00 0F 25 */ bl checkBck__8daE_VA_cFi -/* 807C299C 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 807C29A0 41 82 00 20 */ beq lbl_807C29C0 -/* 807C29A4 38 7E 13 98 */ addi r3, r30, 0x1398 -/* 807C29A8 38 80 E8 00 */ li r4, -6144 -/* 807C29AC 38 A0 00 08 */ li r5, 8 -/* 807C29B0 38 C0 00 80 */ li r6, 0x80 -/* 807C29B4 38 E0 00 40 */ li r7, 0x40 -/* 807C29B8 4B AA DB 89 */ bl cLib_addCalcAngleS__FPsssss -/* 807C29BC 48 00 00 1C */ b lbl_807C29D8 -lbl_807C29C0: -/* 807C29C0 38 7E 13 98 */ addi r3, r30, 0x1398 -/* 807C29C4 38 80 E8 00 */ li r4, -6144 -/* 807C29C8 38 A0 00 08 */ li r5, 8 -/* 807C29CC 38 C0 01 00 */ li r6, 0x100 -/* 807C29D0 38 E0 00 40 */ li r7, 0x40 -/* 807C29D4 4B AA DB 6D */ bl cLib_addCalcAngleS__FPsssss -lbl_807C29D8: -/* 807C29D8 88 1E 13 91 */ lbz r0, 0x1391(r30) -/* 807C29DC 98 1E 13 92 */ stb r0, 0x1392(r30) -/* 807C29E0 48 00 00 54 */ b lbl_807C2A34 -lbl_807C29E4: -/* 807C29E4 88 1E 13 92 */ lbz r0, 0x1392(r30) -/* 807C29E8 98 1E 13 91 */ stb r0, 0x1391(r30) -/* 807C29EC 38 7E 13 94 */ addi r3, r30, 0x1394 -/* 807C29F0 38 80 00 00 */ li r4, 0 -/* 807C29F4 38 A0 00 08 */ li r5, 8 -/* 807C29F8 38 C0 01 00 */ li r6, 0x100 -/* 807C29FC 38 E0 00 40 */ li r7, 0x40 -/* 807C2A00 4B AA DB 41 */ bl cLib_addCalcAngleS__FPsssss -/* 807C2A04 38 7E 13 96 */ addi r3, r30, 0x1396 -/* 807C2A08 38 80 00 00 */ li r4, 0 -/* 807C2A0C 38 A0 00 08 */ li r5, 8 -/* 807C2A10 38 C0 01 00 */ li r6, 0x100 -/* 807C2A14 38 E0 00 40 */ li r7, 0x40 -/* 807C2A18 4B AA DB 29 */ bl cLib_addCalcAngleS__FPsssss -/* 807C2A1C 38 7E 13 98 */ addi r3, r30, 0x1398 -/* 807C2A20 38 80 00 00 */ li r4, 0 -/* 807C2A24 38 A0 00 08 */ li r5, 8 -/* 807C2A28 38 C0 01 00 */ li r6, 0x100 -/* 807C2A2C 38 E0 00 40 */ li r7, 0x40 -/* 807C2A30 4B AA DB 11 */ bl cLib_addCalcAngleS__FPsssss -lbl_807C2A34: -/* 807C2A34 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 807C2A38 83 C1 00 08 */ lwz r30, 8(r1) -/* 807C2A3C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807C2A40 7C 08 03 A6 */ mtlr r0 -/* 807C2A44 38 21 00 10 */ addi r1, r1, 0x10 -/* 807C2A48 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcOpRopePos__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcOpRopePos__8daE_VA_cFv.s index 5774eb02471..9689539e8ff 100644 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcOpRopePos__8daE_VA_cFv.s +++ b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcOpRopePos__8daE_VA_cFv.s @@ -554,8 +554,8 @@ lbl_807C5C1C: /* 807C5C34 41 80 FD 94 */ blt lbl_807C59C8 /* 807C5C38 39 C0 00 00 */ li r14, 0 /* 807C5C3C 39 E0 00 00 */ li r15, 0 -/* 807C5C40 3C 60 80 7D */ lis r3, data_807CF0AC@ha /* 0x807CF0AC@ha */ -/* 807C5C44 38 03 F0 AC */ addi r0, r3, data_807CF0AC@l /* 0x807CF0AC@l */ +/* 807C5C40 3C 60 80 7D */ lis r3, va_tag_set_num@ha /* 0x807CF0AC@ha */ +/* 807C5C44 38 03 F0 AC */ addi r0, r3, va_tag_set_num@l /* 0x807CF0AC@l */ /* 807C5C48 7C 10 03 78 */ mr r16, r0 lbl_807C5C4C: /* 807C5C4C 88 B0 00 00 */ lbz r5, 0(r16) diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcTagAngle__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcTagAngle__8daE_VA_cFv.s index 0b6f4f3357d..6506d7974bc 100644 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcTagAngle__8daE_VA_cFv.s +++ b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcTagAngle__8daE_VA_cFv.s @@ -36,8 +36,8 @@ lbl_807C61D4: lbl_807C61DC: /* 807C61DC C3 FF 00 70 */ lfs f31, 0x70(r31) lbl_807C61E0: -/* 807C61E0 3C 60 80 7D */ lis r3, data_807CF0AC@ha /* 0x807CF0AC@ha */ -/* 807C61E4 38 63 F0 AC */ addi r3, r3, data_807CF0AC@l /* 0x807CF0AC@l */ +/* 807C61E0 3C 60 80 7D */ lis r3, va_tag_set_num@ha /* 0x807CF0AC@ha */ +/* 807C61E4 38 63 F0 AC */ addi r3, r3, va_tag_set_num@l /* 0x807CF0AC@l */ /* 807C61E8 7C 03 E0 AE */ lbzx r0, r3, r28 /* 807C61EC 1C 60 00 0C */ mulli r3, r0, 0xc /* 807C61F0 38 03 09 98 */ addi r0, r3, 0x998 diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/checkBck__8daE_VA_cFi.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/checkBck__8daE_VA_cFi.s deleted file mode 100644 index f9dc6c7d6bb..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/checkBck__8daE_VA_cFi.s +++ /dev/null @@ -1,24 +0,0 @@ -lbl_807C38BC: -/* 807C38BC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807C38C0 7C 08 02 A6 */ mflr r0 -/* 807C38C4 90 01 00 14 */ stw r0, 0x14(r1) -/* 807C38C8 93 E1 00 0C */ stw r31, 0xc(r1) -/* 807C38CC 7C 7F 1B 78 */ mr r31, r3 -/* 807C38D0 3C 60 80 7D */ lis r3, d_a_e_vt__stringBase0@ha /* 0x807CEEFC@ha */ -/* 807C38D4 38 63 EE FC */ addi r3, r3, d_a_e_vt__stringBase0@l /* 0x807CEEFC@l */ -/* 807C38D8 3C A0 80 40 */ lis r5, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 807C38DC 38 A5 61 C0 */ addi r5, r5, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 807C38E0 3C A5 00 02 */ addis r5, r5, 2 -/* 807C38E4 38 C0 00 80 */ li r6, 0x80 -/* 807C38E8 38 A5 C2 F8 */ addi r5, r5, -15624 -/* 807C38EC 4B 87 8A 01 */ bl getRes__14dRes_control_cFPCclP11dRes_info_ci -/* 807C38F0 80 9F 05 B4 */ lwz r4, 0x5b4(r31) -/* 807C38F4 80 04 00 08 */ lwz r0, 8(r4) -/* 807C38F8 7C 00 18 50 */ subf r0, r0, r3 -/* 807C38FC 7C 00 00 34 */ cntlzw r0, r0 -/* 807C3900 54 03 DE 3E */ rlwinm r3, r0, 0x1b, 0x18, 0x1f -/* 807C3904 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 807C3908 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807C390C 7C 08 03 A6 */ mtlr r0 -/* 807C3910 38 21 00 10 */ addi r1, r1, 0x10 -/* 807C3914 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Create__FP8daE_VA_c.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Create__FP8daE_VA_c.s deleted file mode 100644 index 55b488e644d..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Create__FP8daE_VA_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_807CE244: -/* 807CE244 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807CE248 7C 08 02 A6 */ mflr r0 -/* 807CE24C 90 01 00 14 */ stw r0, 0x14(r1) -/* 807CE250 4B FF F4 19 */ bl create__8daE_VA_cFv -/* 807CE254 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807CE258 7C 08 03 A6 */ mtlr r0 -/* 807CE25C 38 21 00 10 */ addi r1, r1, 0x10 -/* 807CE260 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Delete__FP8daE_VA_c.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Delete__FP8daE_VA_c.s deleted file mode 100644 index b7bac9868c8..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Delete__FP8daE_VA_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_807CD028: -/* 807CD028 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807CD02C 7C 08 02 A6 */ mflr r0 -/* 807CD030 90 01 00 14 */ stw r0, 0x14(r1) -/* 807CD034 4B FF FF 31 */ bl _delete__8daE_VA_cFv -/* 807CD038 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807CD03C 7C 08 03 A6 */ mtlr r0 -/* 807CD040 38 21 00 10 */ addi r1, r1, 0x10 -/* 807CD044 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Draw__FP8daE_VA_c.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Draw__FP8daE_VA_c.s deleted file mode 100644 index 06323d568df..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Draw__FP8daE_VA_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_807C37F8: -/* 807C37F8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807C37FC 7C 08 02 A6 */ mflr r0 -/* 807C3800 90 01 00 14 */ stw r0, 0x14(r1) -/* 807C3804 4B FF FA 61 */ bl draw__8daE_VA_cFv -/* 807C3808 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807C380C 7C 08 03 A6 */ mtlr r0 -/* 807C3810 38 21 00 10 */ addi r1, r1, 0x10 -/* 807C3814 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Execute__FP8daE_VA_c.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Execute__FP8daE_VA_c.s deleted file mode 100644 index b1943ec31ed..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Execute__FP8daE_VA_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_807CCF3C: -/* 807CCF3C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807CCF40 7C 08 02 A6 */ mflr r0 -/* 807CCF44 90 01 00 14 */ stw r0, 0x14(r1) -/* 807CCF48 4B FF FD DD */ bl execute__8daE_VA_cFv -/* 807CCF4C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807CCF50 7C 08 03 A6 */ mtlr r0 -/* 807CCF54 38 21 00 10 */ addi r1, r1, 0x10 -/* 807CCF58 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/getWolfCutType__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/getWolfCutType__8daE_VA_cFv.s deleted file mode 100644 index 7073f2f50fd..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/getWolfCutType__8daE_VA_cFv.s +++ /dev/null @@ -1,28 +0,0 @@ -lbl_807C39C4: -/* 807C39C4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 807C39C8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 807C39CC 80 63 5D AC */ lwz r3, 0x5dac(r3) -/* 807C39D0 88 03 05 68 */ lbz r0, 0x568(r3) -/* 807C39D4 2C 00 00 37 */ cmpwi r0, 0x37 -/* 807C39D8 40 80 00 18 */ bge lbl_807C39F0 -/* 807C39DC 2C 00 00 2E */ cmpwi r0, 0x2e -/* 807C39E0 40 80 00 2C */ bge lbl_807C3A0C -/* 807C39E4 2C 00 00 2C */ cmpwi r0, 0x2c -/* 807C39E8 40 80 00 14 */ bge lbl_807C39FC -/* 807C39EC 48 00 00 28 */ b lbl_807C3A14 -lbl_807C39F0: -/* 807C39F0 2C 00 00 39 */ cmpwi r0, 0x39 -/* 807C39F4 41 82 00 10 */ beq lbl_807C3A04 -/* 807C39F8 48 00 00 1C */ b lbl_807C3A14 -lbl_807C39FC: -/* 807C39FC 38 60 00 01 */ li r3, 1 -/* 807C3A00 4E 80 00 20 */ blr -lbl_807C3A04: -/* 807C3A04 38 60 00 02 */ li r3, 2 -/* 807C3A08 4E 80 00 20 */ blr -lbl_807C3A0C: -/* 807C3A0C 38 60 00 03 */ li r3, 3 -/* 807C3A10 4E 80 00 20 */ blr -lbl_807C3A14: -/* 807C3A14 38 60 00 00 */ li r3, 0 -/* 807C3A18 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/mtx_set__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/mtx_set__8daE_VA_cFv.s index d3cf3bebae2..012f4cb1376 100644 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/mtx_set__8daE_VA_cFv.s +++ b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/mtx_set__8daE_VA_cFv.s @@ -145,10 +145,10 @@ lbl_807CC6F8: /* 807CC6F8 3B C0 00 00 */ li r30, 0 /* 807CC6FC 3B 80 00 00 */ li r28, 0 /* 807CC700 3B 60 00 00 */ li r27, 0 -/* 807CC704 3C 60 80 7D */ lis r3, data_807CF0AC@ha /* 0x807CF0AC@ha */ -/* 807CC708 3B 03 F0 AC */ addi r24, r3, data_807CF0AC@l /* 0x807CF0AC@l */ -/* 807CC70C 3C 60 80 7D */ lis r3, data_807CF0D4@ha /* 0x807CF0D4@ha */ -/* 807CC710 3B 23 F0 D4 */ addi r25, r3, data_807CF0D4@l /* 0x807CF0D4@l */ +/* 807CC704 3C 60 80 7D */ lis r3, va_tag_set_num@ha /* 0x807CF0AC@ha */ +/* 807CC708 3B 03 F0 AC */ addi r24, r3, va_tag_set_num@l /* 0x807CF0AC@l */ +/* 807CC70C 3C 60 80 7D */ lis r3, va_tag_offset@ha /* 0x807CF0D4@ha */ +/* 807CC710 3B 23 F0 D4 */ addi r25, r3, va_tag_offset@l /* 0x807CF0D4@l */ /* 807CC714 3C 60 80 3E */ lis r3, now__14mDoMtx_stack_c@ha /* 0x803DD470@ha */ /* 807CC718 3B 43 D4 70 */ addi r26, r3, now__14mDoMtx_stack_c@l /* 0x803DD470@l */ lbl_807CC71C: diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/offSwordShield__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/offSwordShield__8daE_VA_cFv.s deleted file mode 100644 index 3260c5622b0..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/offSwordShield__8daE_VA_cFv.s +++ /dev/null @@ -1,26 +0,0 @@ -lbl_807C3A50: -/* 807C3A50 3C 80 80 40 */ lis r4, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 807C3A54 38 84 61 C0 */ addi r4, r4, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 807C3A58 80 84 5D AC */ lwz r4, 0x5dac(r4) -/* 807C3A5C 88 04 05 68 */ lbz r0, 0x568(r4) -/* 807C3A60 28 00 00 39 */ cmplwi r0, 0x39 -/* 807C3A64 4C 82 00 20 */ bnelr -/* 807C3A68 38 00 00 03 */ li r0, 3 -/* 807C3A6C B0 03 13 3E */ sth r0, 0x133e(r3) -/* 807C3A70 38 80 00 00 */ li r4, 0 -/* 807C3A74 38 00 00 04 */ li r0, 4 -/* 807C3A78 7C 09 03 A6 */ mtctr r0 -lbl_807C3A7C: -/* 807C3A7C 7C A3 22 14 */ add r5, r3, r4 -/* 807C3A80 80 05 20 90 */ lwz r0, 0x2090(r5) -/* 807C3A84 54 00 00 3C */ rlwinm r0, r0, 0, 0, 0x1e -/* 807C3A88 90 05 20 90 */ stw r0, 0x2090(r5) -/* 807C3A8C 80 05 21 00 */ lwz r0, 0x2100(r5) -/* 807C3A90 54 00 00 3C */ rlwinm r0, r0, 0, 0, 0x1e -/* 807C3A94 90 05 21 00 */ stw r0, 0x2100(r5) -/* 807C3A98 80 05 21 00 */ lwz r0, 0x2100(r5) -/* 807C3A9C 60 00 00 04 */ ori r0, r0, 4 -/* 807C3AA0 90 05 21 00 */ stw r0, 0x2100(r5) -/* 807C3AA4 38 84 01 38 */ addi r4, r4, 0x138 -/* 807C3AA8 42 00 FF D4 */ bdnz lbl_807C3A7C -/* 807C3AAC 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onRopeCutStatus__8daE_VA_cFiii.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onRopeCutStatus__8daE_VA_cFiii.s deleted file mode 100644 index d814b538189..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onRopeCutStatus__8daE_VA_cFiii.s +++ /dev/null @@ -1,71 +0,0 @@ -lbl_807C5CF0: -/* 807C5CF0 94 21 FF D0 */ stwu r1, -0x30(r1) -/* 807C5CF4 7C 08 02 A6 */ mflr r0 -/* 807C5CF8 90 01 00 34 */ stw r0, 0x34(r1) -/* 807C5CFC 39 61 00 30 */ addi r11, r1, 0x30 -/* 807C5D00 4B B9 C4 C9 */ bl _savegpr_24 -/* 807C5D04 7C 7B 1B 78 */ mr r27, r3 -/* 807C5D08 7C BC 2B 78 */ mr r28, r5 -/* 807C5D0C 7C DD 33 78 */ mr r29, r6 -/* 807C5D10 1F E4 00 0A */ mulli r31, r4, 0xa -/* 807C5D14 3B C0 00 00 */ li r30, 0 -lbl_807C5D18: -/* 807C5D18 7F 1F F2 14 */ add r24, r31, r30 -/* 807C5D1C 2C 1D 00 00 */ cmpwi r29, 0 -/* 807C5D20 40 82 00 14 */ bne lbl_807C5D34 -/* 807C5D24 38 78 10 9C */ addi r3, r24, 0x109c -/* 807C5D28 7C 1B 18 AE */ lbzx r0, r27, r3 -/* 807C5D2C 60 00 00 10 */ ori r0, r0, 0x10 -/* 807C5D30 7C 1B 19 AE */ stbx r0, r27, r3 -lbl_807C5D34: -/* 807C5D34 7C 1E E0 00 */ cmpw r30, r28 -/* 807C5D38 40 80 00 6C */ bge lbl_807C5DA4 -/* 807C5D3C 38 78 10 9C */ addi r3, r24, 0x109c -/* 807C5D40 7C 1B 18 AE */ lbzx r0, r27, r3 -/* 807C5D44 60 00 00 02 */ ori r0, r0, 2 -/* 807C5D48 7C 1B 19 AE */ stbx r0, r27, r3 -/* 807C5D4C 2C 1D 00 00 */ cmpwi r29, 0 -/* 807C5D50 40 82 00 80 */ bne lbl_807C5DD0 -/* 807C5D54 38 18 FF FF */ addi r0, r24, -1 -/* 807C5D58 1C 60 00 0C */ mulli r3, r0, 0xc -/* 807C5D5C 3B 23 09 94 */ addi r25, r3, 0x994 -/* 807C5D60 7F 3B CA 14 */ add r25, r27, r25 -/* 807C5D64 7F 23 CB 78 */ mr r3, r25 -/* 807C5D68 1C 98 00 0C */ mulli r4, r24, 0xc -/* 807C5D6C 3B 44 09 94 */ addi r26, r4, 0x994 -/* 807C5D70 7F 5B D2 14 */ add r26, r27, r26 -/* 807C5D74 7F 44 D3 78 */ mr r4, r26 -/* 807C5D78 4B AA AE FD */ bl cLib_targetAngleX__FPC4cXyzPC4cXyz -/* 807C5D7C 1C 18 00 06 */ mulli r0, r24, 6 -/* 807C5D80 7F 1B 02 14 */ add r24, r27, r0 -/* 807C5D84 B0 78 0E 44 */ sth r3, 0xe44(r24) -/* 807C5D88 7F 23 CB 78 */ mr r3, r25 -/* 807C5D8C 7F 44 D3 78 */ mr r4, r26 -/* 807C5D90 4B AA AE 75 */ bl cLib_targetAngleY__FPC3VecPC3Vec -/* 807C5D94 B0 78 0E 46 */ sth r3, 0xe46(r24) -/* 807C5D98 38 00 00 00 */ li r0, 0 -/* 807C5D9C B0 18 0E 48 */ sth r0, 0xe48(r24) -/* 807C5DA0 48 00 00 30 */ b lbl_807C5DD0 -lbl_807C5DA4: -/* 807C5DA4 2C 1D 00 00 */ cmpwi r29, 0 -/* 807C5DA8 40 82 00 18 */ bne lbl_807C5DC0 -/* 807C5DAC 38 78 10 9C */ addi r3, r24, 0x109c -/* 807C5DB0 7C 1B 18 AE */ lbzx r0, r27, r3 -/* 807C5DB4 60 00 00 04 */ ori r0, r0, 4 -/* 807C5DB8 7C 1B 19 AE */ stbx r0, r27, r3 -/* 807C5DBC 48 00 00 14 */ b lbl_807C5DD0 -lbl_807C5DC0: -/* 807C5DC0 38 78 10 9C */ addi r3, r24, 0x109c -/* 807C5DC4 7C 1B 18 AE */ lbzx r0, r27, r3 -/* 807C5DC8 60 00 00 08 */ ori r0, r0, 8 -/* 807C5DCC 7C 1B 19 AE */ stbx r0, r27, r3 -lbl_807C5DD0: -/* 807C5DD0 3B DE 00 01 */ addi r30, r30, 1 -/* 807C5DD4 2C 1E 00 0A */ cmpwi r30, 0xa -/* 807C5DD8 41 80 FF 40 */ blt lbl_807C5D18 -/* 807C5DDC 39 61 00 30 */ addi r11, r1, 0x30 -/* 807C5DE0 4B B9 C4 35 */ bl _restgpr_24 -/* 807C5DE4 80 01 00 34 */ lwz r0, 0x34(r1) -/* 807C5DE8 7C 08 03 A6 */ mtlr r0 -/* 807C5DEC 38 21 00 30 */ addi r1, r1, 0x30 -/* 807C5DF0 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onSwordAtBit__8daE_VA_cFv.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onSwordAtBit__8daE_VA_cFv.s deleted file mode 100644 index b01bbc252a4..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onSwordAtBit__8daE_VA_cFv.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_807C3A1C: -/* 807C3A1C 80 03 20 64 */ lwz r0, 0x2064(r3) -/* 807C3A20 60 00 00 01 */ ori r0, r0, 1 -/* 807C3A24 90 03 20 64 */ stw r0, 0x2064(r3) -/* 807C3A28 80 03 21 9C */ lwz r0, 0x219c(r3) -/* 807C3A2C 60 00 00 01 */ ori r0, r0, 1 -/* 807C3A30 90 03 21 9C */ stw r0, 0x219c(r3) -/* 807C3A34 80 03 22 D4 */ lwz r0, 0x22d4(r3) -/* 807C3A38 60 00 00 01 */ ori r0, r0, 1 -/* 807C3A3C 90 03 22 D4 */ stw r0, 0x22d4(r3) -/* 807C3A40 80 03 24 0C */ lwz r0, 0x240c(r3) -/* 807C3A44 60 00 00 01 */ ori r0, r0, 1 -/* 807C3A48 90 03 24 0C */ stw r0, 0x240c(r3) -/* 807C3A4C 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setActionMode__8daE_VA_cFii.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setActionMode__8daE_VA_cFii.s deleted file mode 100644 index 9aab96298fe..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setActionMode__8daE_VA_cFii.s +++ /dev/null @@ -1,45 +0,0 @@ -lbl_807C3918: -/* 807C3918 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 807C391C 7C 08 02 A6 */ mflr r0 -/* 807C3920 90 01 00 24 */ stw r0, 0x24(r1) -/* 807C3924 39 61 00 20 */ addi r11, r1, 0x20 -/* 807C3928 4B B9 E8 B5 */ bl _savegpr_29 -/* 807C392C 7C 7D 1B 78 */ mr r29, r3 -/* 807C3930 7C 9E 23 78 */ mr r30, r4 -/* 807C3934 7C BF 2B 78 */ mr r31, r5 -/* 807C3938 38 60 00 06 */ li r3, 6 -/* 807C393C 88 1D 04 E2 */ lbz r0, 0x4e2(r29) -/* 807C3940 7C 04 07 74 */ extsb r4, r0 -/* 807C3944 4B 86 A2 21 */ bl dComIfGs_isOneZoneSwitch__Fii -/* 807C3948 2C 03 00 00 */ cmpwi r3, 0 -/* 807C394C 41 82 00 4C */ beq lbl_807C3998 -/* 807C3950 2C 1E 00 0D */ cmpwi r30, 0xd -/* 807C3954 41 82 00 44 */ beq lbl_807C3998 -/* 807C3958 2C 1E 00 0E */ cmpwi r30, 0xe -/* 807C395C 41 82 00 3C */ beq lbl_807C3998 -/* 807C3960 38 60 00 06 */ li r3, 6 -/* 807C3964 88 1D 04 E2 */ lbz r0, 0x4e2(r29) -/* 807C3968 7C 04 07 74 */ extsb r4, r0 -/* 807C396C 4B 86 A1 95 */ bl dComIfGs_offOneZoneSwitch__Fii -/* 807C3970 38 60 00 07 */ li r3, 7 -/* 807C3974 88 1D 04 E2 */ lbz r0, 0x4e2(r29) -/* 807C3978 7C 04 07 74 */ extsb r4, r0 -/* 807C397C 4B 86 A1 E9 */ bl dComIfGs_isOneZoneSwitch__Fii -/* 807C3980 2C 03 00 00 */ cmpwi r3, 0 -/* 807C3984 40 82 00 14 */ bne lbl_807C3998 -/* 807C3988 38 60 00 07 */ li r3, 7 -/* 807C398C 88 1D 04 E2 */ lbz r0, 0x4e2(r29) -/* 807C3990 7C 04 07 74 */ extsb r4, r0 -/* 807C3994 4B 86 A1 09 */ bl dComIfGs_onOneZoneSwitch__Fii -lbl_807C3998: -/* 807C3998 38 00 00 00 */ li r0, 0 -/* 807C399C 98 1D 13 81 */ stb r0, 0x1381(r29) -/* 807C39A0 93 DD 13 1C */ stw r30, 0x131c(r29) -/* 807C39A4 93 FD 13 20 */ stw r31, 0x1320(r29) -/* 807C39A8 98 1D 13 7F */ stb r0, 0x137f(r29) -/* 807C39AC 39 61 00 20 */ addi r11, r1, 0x20 -/* 807C39B0 4B B9 E8 79 */ bl _restgpr_29 -/* 807C39B4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 807C39B8 7C 08 03 A6 */ mtlr r0 -/* 807C39BC 38 21 00 20 */ addi r1, r1, 0x20 -/* 807C39C0 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/useHeapInit__FP10fopAc_ac_c.s b/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/useHeapInit__FP10fopAc_ac_c.s deleted file mode 100644 index dba5ab0bd67..00000000000 --- a/asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/useHeapInit__FP10fopAc_ac_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_807CD648: -/* 807CD648 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 807CD64C 7C 08 02 A6 */ mflr r0 -/* 807CD650 90 01 00 14 */ stw r0, 0x14(r1) -/* 807CD654 4B FF F9 F5 */ bl CreateHeap__8daE_VA_cFv -/* 807CD658 80 01 00 14 */ lwz r0, 0x14(r1) -/* 807CD65C 7C 08 03 A6 */ mtlr r0 -/* 807CD660 38 21 00 10 */ addi r1, r1, 0x10 -/* 807CD664 4E 80 00 20 */ blr diff --git a/include/JSystem/J3DGraphBase/J3DMatBlock.h b/include/JSystem/J3DGraphBase/J3DMatBlock.h index 9634fb3b091..c2b125c2ac8 100644 --- a/include/JSystem/J3DGraphBase/J3DMatBlock.h +++ b/include/JSystem/J3DGraphBase/J3DMatBlock.h @@ -617,6 +617,8 @@ struct J3DZModeInfo { /* 0x3 */ u8 pad; }; +extern u8 j3dZModeTable[96]; + /** * @ingroup jsystem-j3d * @@ -629,6 +631,14 @@ struct J3DZMode { mZModeID = calcZModeID(info.field_0x0, info.field_0x1, info.field_0x2); } + void setCompareEnable(u8 i_compare) { + mZModeID = calcZModeID(i_compare, j3dZModeTable[mZModeID * 3 + 1], j3dZModeTable[mZModeID * 3 + 2]); + } + + void setUpdateEnable(u8 i_enable) { + mZModeID = calcZModeID(j3dZModeTable[mZModeID * 3], j3dZModeTable[mZModeID * 3 + 1], i_enable); + } + /* 0x0 */ u16 mZModeID; }; @@ -655,6 +665,8 @@ extern const J3DBlendInfo j3dDefaultBlendInfo; struct J3DBlend : public J3DBlendInfo { J3DBlend() : J3DBlendInfo(j3dDefaultBlendInfo) {} J3DBlend(J3DBlendInfo const& info) : J3DBlendInfo(info) {} + + void setDstFactor(u8 i_factor) { mDstFactor = i_factor; } }; extern const J3DFogInfo j3dDefaultFogInfo; @@ -746,7 +758,7 @@ class J3DPEBlock { /* 8000DF54 */ virtual J3DAlphaComp* getAlphaComp(); /* 80317370 */ virtual void setBlend(J3DBlend const*); /* 8000E018 */ virtual void setBlend(J3DBlend const&); - /* 8000DF4C */ virtual bool getBlend(); + /* 8000DF4C */ virtual J3DBlend* getBlend(); /* 80317374 */ virtual void setZMode(J3DZMode const*); /* 8000E014 */ virtual void setZMode(J3DZMode); /* 8000DF44 */ virtual J3DZMode* getZMode(); @@ -834,7 +846,7 @@ class J3DPEBlockFull : public J3DPEBlock { /* 803219E0 */ virtual J3DAlphaComp* getAlphaComp(); /* 803219F4 */ virtual void setBlend(J3DBlend const*); /* 803219E8 */ virtual void setBlend(J3DBlend const&); - /* 80321A00 */ virtual bool getBlend(); + /* 80321A00 */ virtual J3DBlend* getBlend(); /* 80321A14 */ virtual void setZMode(J3DZMode const*); /* 80321A08 */ virtual void setZMode(J3DZMode); /* 80321A20 */ virtual J3DZMode* getZMode(); @@ -879,7 +891,7 @@ class J3DPEBlockFogOff : public J3DPEBlock { /* 80321B44 */ virtual J3DAlphaComp* getAlphaComp(); /* 80321B58 */ virtual void setBlend(J3DBlend const*); /* 80321B4C */ virtual void setBlend(J3DBlend const&); - /* 80321B64 */ virtual bool getBlend(); + /* 80321B64 */ virtual J3DBlend* getBlend(); /* 80321B78 */ virtual void setZMode(J3DZMode const*); /* 80321B6C */ virtual void setZMode(J3DZMode); /* 80321B84 */ virtual J3DZMode* getZMode(); diff --git a/include/JSystem/J3DGraphBase/J3DMaterial.h b/include/JSystem/J3DGraphBase/J3DMaterial.h index 79545e01e8c..94a4ee3fec5 100644 --- a/include/JSystem/J3DGraphBase/J3DMaterial.h +++ b/include/JSystem/J3DGraphBase/J3DMaterial.h @@ -76,12 +76,16 @@ class J3DMaterial { u32 getTexGenNum() const { return mTexGenBlock->getTexGenNum(); } u8 getTevStageNum() const { return mTevBlock->getTevStageNum(); } J3DTexCoord* getTexCoord(u32 idx) { return mTexGenBlock->getTexCoord(idx); } + J3DZMode* getZMode() { return mPEBlock->getZMode(); } + J3DBlend* getBlend() { return mPEBlock->getBlend(); } void setTevColor(u32 i, const J3DGXColorS10* i_color) { mTevBlock->setTevColor(i, i_color); } void setTevKColor(u32 i, const J3DGXColor* i_color) { mTevBlock->setTevKColor(i, i_color); } void setMaterialAnm(J3DMaterialAnm* i_anm) { mMaterialAnm = i_anm; } void setCullMode(u8 i_mode) { mColorBlock->setCullMode(i_mode); } void setTexMtx(u32 idx, J3DTexMtx* mtx) { mTexGenBlock->setTexMtx(idx, mtx); } + void setZCompLoc(u8 i_comploc) { mPEBlock->setZCompLoc(i_comploc); } + void setMaterialMode(u32 i_mode) { mMaterialMode = i_mode; } public: /* 0x04 */ J3DMaterial* mNext; diff --git a/include/JSystem/JGeometry.h b/include/JSystem/JGeometry.h index 9e920f4a1a2..bbc4eae9038 100644 --- a/include/JSystem/JGeometry.h +++ b/include/JSystem/JGeometry.h @@ -100,6 +100,10 @@ struct TVec3 : public Vec { setTVec3f(&i_vec.x, &x); } + TVec3(f32 x, f32 y, f32 z) { + set(x, y, z); + } + TVec3() {} operator Vec*() { return (Vec*)&x; } diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index 5cc382ba633..b286c50cbba 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -449,11 +449,14 @@ class daPy_py_c : public fopAc_ac_c { /* 0x06 */ CUT_TYPE_FINISH_LEFT, /* 0x07 */ CUT_TYPE_FINISH_VERTICAL, /* 0x08 */ CUT_TYPE_TURN_RIGHT, - /* 0x0A */ CUT_TYPE_JUMP = 10, + /* 0x09 */ CUT_TYPE_UNK_9, + /* 0x0A */ CUT_TYPE_JUMP, /* 0x0B */ CUT_TYPE_DASH_UNK_B, /* 0x0C */ CUT_TYPE_DASH_UNK_C, /* 0x0D */ CUT_TYPE_DASH_UNK_D, - /* 0x10 */ CUT_TYPE_AIR = 0x10, + /* 0x0E */ CUT_TYPE_UNK_E, + /* 0x0F */ CUT_TYPE_UNK_F, + /* 0x10 */ CUT_TYPE_AIR, /* 0x11 */ CUT_TYPE_DASH_UNK_11, /* 0x12 */ CUT_TYPE_LARGE_JUMP_INIT, /* 0x13 */ CUT_TYPE_LARGE_JUMP, @@ -462,30 +465,39 @@ class daPy_py_c : public fopAc_ac_c { /* 0x16 */ CUT_TYPE_TURN_LEFT, /* 0x17 */ CUT_TYPE_LARGE_TURN_LEFT, /* 0x18 */ CUT_TYPE_LARGE_TURN_RIGHT, - /* 0x1A */ CUT_TYPE_MORTAL_DRAW_A = 0x1A, - /* 0x1E */ CUT_TYPE_TWIRL = 0x1E, // Back Slice + /* 0x19 */ CUT_TYPE_UNK_19, + /* 0x1A */ CUT_TYPE_MORTAL_DRAW_A, + /* 0x1B */ CUT_TYPE_UNK_1B, + /* 0x1C */ CUT_TYPE_UNK_1C, + /* 0x1D */ CUT_TYPE_UNK_1D, + /* 0x1E */ CUT_TYPE_TWIRL, // Back Slice /* 0x1F */ CUT_TYPE_MORTAL_DRAW_B, /* 0x20 */ CUT_TYPE_FINISH_STAB, /* 0x21 */ CUT_TYPE_COMBO_STAB, /* 0x22 */ CUT_TYPE_HORSE_UNK_22, /* 0x23 */ CUT_TYPE_HORSE_UNK_23, - /* 0x25 */ CUT_TYPE_DASH_UNK_25 = 0x25, - /* 0x26 */ CUT_TYPE_DASH_UNK_26 = 0x26, + /* 0x24 */ CUT_TYPE_UNK_24, + /* 0x25 */ CUT_TYPE_DASH_UNK_25, + /* 0x26 */ CUT_TYPE_DASH_UNK_26, /* 0x27 */ CUT_TYPE_DOWN, - /* 0x29 */ CUT_TYPE_GUARD_ATTACK = 0x29, + /* 0x28 */ CUT_TYPE_UNK_28, + /* 0x29 */ CUT_TYPE_GUARD_ATTACK, /* 0x2A */ CUT_TYPE_HORSE_UNK_2A, /* 0x2B */ CUT_TYPE_HORSE_TURN, /* 0x2C */ CUT_TYPE_WOLF_B_LEFT, /* 0x2D */ CUT_TYPE_WOLF_B_RIGHT, /* 0x2E */ CUT_TYPE_WOLF_B_FRONT, /* 0x2F */ CUT_TYPE_WOLF_B_BACK, - /* 0x31 */ CUT_TYPE_WOLF_UNK_31 = 0x31, - /* 0x32 */ CUT_TYPE_WOLF_UNK_32, + /* 0x30 */ CUT_TYPE_WOLF_UNK_30, + /* 0x31 */ CUT_TYPE_WOLF_JUMP_S, + /* 0x32 */ CUT_TYPE_WOLF_JUMP_S_FINISH, /* 0x33 */ CUT_TYPE_WOLF_TURN_LEFT, /* 0x34 */ CUT_TYPE_WOLF_TURN_RIGHT, - /* 0x36 */ CUT_TYPE_WOLF_LOCK = 0x36, - /* 0x38 */ CUT_TYPE_DASH_UNK_38 = 0x38, - /* 0x39 */ CUT_TYPE_WOLF_UNK_39, + /* 0x35 */ CUT_TYPE_WOLF_UNK_35, + /* 0x36 */ CUT_TYPE_WOLF_LOCK, + /* 0x37 */ CUT_TYPE_WOLF_UNK_37, + /* 0x38 */ CUT_TYPE_DASH_UNK_38, + /* 0x39 */ CUT_TYPE_WOLF_JUMP, }; static u32 setParamData(int, int, int, int); @@ -754,6 +766,7 @@ class daPy_py_c : public fopAc_ac_c { BOOL checkStickArrowReset() const { return checkResetFlg0(RFLG0_UNK_1); } void offWolfEnemyHangBite() { offNoResetFlg2(FLG2_WOLF_ENEMY_HANG_BITE); } + bool onWolfEnemyHangBite(fopAc_ac_c* param_0) { return onWolfEnemyBiteAll(param_0, FLG2_WOLF_ENEMY_HANG_BITE); } void setCanoeSlider() { mSpecialMode = 0x2D; } @@ -863,7 +876,7 @@ class daPy_py_c : public fopAc_ac_c { inline BOOL i_checkSwordGet(); inline bool i_checkShieldGet() const; inline static BOOL checkNowWolf(); - inline static BOOL i_checkNowWolf() { return dComIfGp_getLinkPlayer()->checkWolf(); } + inline static u32 i_checkNowWolf() { return dComIfGp_getLinkPlayer()->checkWolf(); } inline bool checkZoraWearFlg() const; inline bool checkMagicArmorWearFlg() const; inline static BOOL i_checkFirstMidnaDemo() { return dComIfGs_isEventBit(0xc10); } @@ -875,6 +888,7 @@ class daPy_py_c : public fopAc_ac_c { // static void onWolfEnemyCatch(fopAc_ac_c* i_actorP) { onWolfEnemyBiteAll(i_actorP,8);} bool checkWolfEnemyCatchOwn(fopAc_ac_c* i_actorP) { return checkWolfEnemyBiteAllOwn(i_actorP); } + bool checkWolfEnemyHangBiteOwn(fopAc_ac_c* i_actorP) const { return checkWolfEnemyBiteAllOwn(i_actorP); } bool checkWolfEnemyLeftThrow() const { return checkNoResetFlg2(FLG2_WOLF_ENEMY_LEFT_THROW); } static daMidna_c* m_midnaActor; diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index 72f55ba6ca3..b7b745a8bd7 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -1365,6 +1365,10 @@ inline void dComIfGs_onStageBossEnemy() { g_dComIfG_gameInfo.info.getMemory().getBit().onStageBossEnemy(); } +inline void dComIfGs_onStageMiddleBoss() { + g_dComIfG_gameInfo.info.getMemory().getBit().onStageBossEnemy2(); +} + inline s32 dComIfGs_isDungeonItemWarp() { return g_dComIfG_gameInfo.info.getMemory().getBit().isDungeonItemWarp(); } @@ -3996,6 +4000,10 @@ inline void dComIfGd_set3DlineMat(mDoExt_3DlineMat_c *param_0) { g_dComIfG_gameInfo.drawlist.set3DlineMat(param_0); } +inline void dComIfGd_set3DlineMatDark(mDoExt_3DlineMat_c *param_0) { + g_dComIfG_gameInfo.drawlist.set3DlineMatDark(param_0); +} + inline daPy_py_c* daPy_getLinkPlayerActorClass() { return dComIfGp_getLinkPlayer(); } diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index f8311e2468c..da554aa11c8 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -348,6 +348,12 @@ class dDlst_list_c { #endif } + void set3DlineMatDark(mDoExt_3DlineMat_c *param_1) { + #ifndef NON_VIRTUAL_3DLINEMAT + m3DLineMatSortPacket[param_1->getMaterialID()].setMatDark(param_1); + #endif + } + void peekZdata() { mPeekZ.peekData(); } void entryZSortListZxlu(J3DPacket* i_packet, cXyz& param_1) { entryZSortXluDrawList(mDrawBuffers[DB_LIST_Z_XLU], i_packet, param_1); diff --git a/include/d/save/d_save.h b/include/d/save/d_save.h index 70740c8fd6a..03747572272 100644 --- a/include/d/save/d_save.h +++ b/include/d/save/d_save.h @@ -856,6 +856,7 @@ class dSv_memBit_c { onDungeonItem(STAGE_BOSS_ENEMY); onDungeonItem(OOCCOO_NOTE); } + void onStageBossEnemy2() { onDungeonItem(STAGE_BOSS_ENEMY_2); } s32 isStageBossEnemy() const { return isDungeonItem(STAGE_BOSS_ENEMY); } s32 isStageBossEnemy2() const { return isDungeonItem(STAGE_BOSS_ENEMY_2); } s32 isStageLife() const { return isDungeonItem(STAGE_LIFE); } diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 38fd93e00ac..b85b9e99f10 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -273,6 +273,7 @@ class fopEn_enemy_c : public fopAc_ac_c { void offWolfBiteDamage() { mFlags &= ~0x40; } void offCutDownHitFlg() { mFlags &= ~0x2; } void offDownFlg() { mFlags &= ~0x17; } + void offWolfNoLock() { mFlags &= ~0x200; } void setMidnaBindMode(u8 i_bindMode) { mMidnaBindMode = i_bindMode; } void setMidnaBindID(u8 i_idx, u32 i_bindID) { mMidnaBindID[i_idx] = i_bindID; } diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 66a7ecb317f..cf4421bd07c 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -727,4 +727,76 @@ inline bool fopAcM_CheckFoodStatus(const fopAc_ac_c* actor, fopAcM_FOOD status) return actor->field_0x567 == status; } +/* static inline int setMidnaBindEffect(fopEn_enemy_c* i_actorP, Z2CreatureEnemy* i_creatureP, cXyz* param_2, + cXyz* param_3) { + static GXColor e_prim[] = { + {0xFF, 0x78, 0x00, 0x00}, + {0xFF, 0x64, 0x78, 0x00}, + }; + static GXColor e_env[] = { + {0x5A, 0x2D, 0x2D, 0x00}, + {0x3C, 0x1E, 0x1E, 0x00}, + }; + + daPy_py_c* player = daPy_getPlayerActorClass(); + fopAc_ac_c* a_this = (fopAc_ac_c*)i_actorP; + + if (player->getMidnaActor() && player->checkWolfLock(a_this)) { + cXyz sp48; + + BOOL darkworld_check; + if (dKy_darkworld_check()) { + darkworld_check = 1; + } else { + darkworld_check = 0; + } + + if (i_actorP->getMidnaBindMode() == 0) { + i_actorP->setMidnaBindMode(1); + + csXyz sp68; + MTXCopy(player->getMidnaActor()->getMtxHairTop(), mDoMtx_stack_c::get()); + + cXyz sp54(nREG_F(8) + 100.0f, nREG_F(9), nREG_F(10)); + mDoMtx_stack_c::multVec(&sp54, &sp48); + + cXyz sp60 = sp48 - *param_2; + + sp68.y = cM_atan2s(sp60.x, sp60.z); + sp68.x = -cM_atan2s(sp60.y, JMAFastSqrt(sp60.x * sp60.x + sp60.z * sp60.z)); + sp68.z = 0; + + JPABaseEmitter* emitter = dComIfGp_particle_set( + 0x29B, param_2, &a_this->tevStr, &sp68, param_3, 0xFF, NULL, fopAcM_GetRoomNo(a_this), + &e_prim[darkworld_check], &e_env[darkworld_check], NULL); + + if (emitter != NULL) { + emitter->setGlobalParticleHeightScale((JREG_F(7) + 0.01f) * sp60.abs()); + } + + dComIfGp_particle_set(0x29C, param_2, &a_this->tevStr, &a_this->shape_angle, + param_3, 0xFF, NULL, fopAcM_GetRoomNo(a_this), &e_prim[darkworld_check], + &e_env[darkworld_check], NULL); + + i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_ON, 0, -1); + } + + for (int i = 0; i < 3; i++) { + static u16 eff_id[] = {0x29D, 0x29E, 0x29F}; + + u32* bind_id = i_actorP->getMidnaBindID(i); + *bind_id = dComIfGp_particle_set(*bind_id, eff_id[i], param_2, &a_this->tevStr, + &a_this->shape_angle, param_3, 0xFF, NULL, fopAcM_GetRoomNo(a_this), + &e_prim[darkworld_check], &e_env[darkworld_check], NULL); + + } + + i_creatureP->startCreatureSound(Z2SE_MIDNA_BIND_LOCK_SUS, 0, -1); + return 1; + } + + i_actorP->setMidnaBindMode(0); + return 0; +} */ + #endif diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 996f68a2f13..55b5dc3a93d 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -485,6 +485,7 @@ class mDoExt_3DlineMatSortPacket : public J3DPacket { mDoExt_3DlineMatSortPacket() { mp3DlineMat = NULL; } void reset() { mp3DlineMat = NULL; } + void setMatDark(mDoExt_3DlineMat_c* i_mat) { setMat(i_mat); } /* 80014738 */ void setMat(mDoExt_3DlineMat_c*); virtual void draw(); @@ -497,7 +498,7 @@ class mDoExt_3DlineMatSortPacket : public J3DPacket { class dKy_tevstr_c; class mDoExt_3DlineMat1_c : public mDoExt_3DlineMat_c { public: - /* 80013360 */ void init(u16, u16, ResTIMG*, int); + /* 80013360 */ int init(u16, u16, ResTIMG*, int); /* 80013FB0 */ void update(int, GXColor&, dKy_tevstr_c*); /* 8001373C */ void update(int, f32, GXColor&, u16, dKy_tevstr_c*); /* 80014E7C */ int getMaterialID(); @@ -505,6 +506,7 @@ class mDoExt_3DlineMat1_c : public mDoExt_3DlineMat_c { /* 800135D0 */ void draw(); cXyz* getPos(int i_idx) { return field_0x38[i_idx].field_0x0; } + f32* getSize(int i_idx) { return field_0x38[i_idx].field_0x4; } private: /* 0x08 */ GXTexObj field_0x8; diff --git a/include/rel/d/a/e/d_a_e_vt/d_a_e_vt.h b/include/rel/d/a/e/d_a_e_vt/d_a_e_vt.h index 6adfd6ed305..e94b2cb4763 100644 --- a/include/rel/d/a/e/d_a_e_vt/d_a_e_vt.h +++ b/include/rel/d/a/e/d_a_e_vt/d_a_e_vt.h @@ -1,27 +1,97 @@ #ifndef D_A_E_VT_H #define D_A_E_VT_H -#include "dolphin/types.h" +#include "Z2AudioLib/Z2Creature.h" +#include "d/bg/d_bg_s_acch.h" +#include "d/cc/d_cc_d.h" +#include "d/cc/d_cc_uty.h" #include "f_op/f_op_actor_mng.h" /** * @ingroup actors-enemies * @class daE_VA_c - * @brief ??? - * - * @details - * + * @brief Death Sword + * + * @details + * */ class daE_VA_c : public fopEn_enemy_c { - /* 807C267C */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 807C284C */ void JointCallBack(J3DJoint*, int); +public: + enum daE_VA_ACTION { + ACTION_DEMO_OP_WAIT_e, + ACTION_DEMO_OP_e, + ACTION_CLEAR_WAIT_e, + ACTION_CLEAR_CHASE_e, + ACTION_CLEAR_ATTACK_e, + ACTION_TRANS_WAIT_e, + ACTION_TRANS_ATTACK_e, + ACTION_TRANS_CHASE_e, + ACTION_TRANS_DAMAGE_e, + ACTION_TRANS_BITE_DAMAGE_e, + ACTION_TRANS_THROUGH_e, + ACTION_OPACI_WAIT_e, + ACTION_OPACI_FLY_e, + ACTION_OPACI_DOWN_e, + ACTION_OPACI_DOWN_DAMAGE_e, + ACTION_OPACI_CHASE_e, + ACTION_OPACI_ATTACK_e, + ACTION_OPACI_DAMAGE_e, + ACTION_OPACI_FLIP_e, + ACTION_OPACI_FADE_AWAY_e, + ACTION_OPACI_DEATH_e, + }; + + enum daE_ANM_e { + ANM_END_EF_e = 7, + ANM_FLOAT_ATTACK_e, + ANM_FLOAT_DMG_A_e, + ANM_FLOAT_DMG_B_e, + ANM_FLOAT_DMG_C_e, + ANM_FLOAT_WAIT_e, + ANM_INVI_ATTACK_A_e, + ANM_INVI_NOTICE_e, + ANM_INVI_WAIT_e, + ANM_INVI_WALK_e, + ANM_OP_ATTACK_A_e, + ANM_SUBS_ATTACK_A1_e, + ANM_SUBS_ATTACK_A3_e, + ANM_SUBS_ATTACK_B_e, + ANM_SUBS_AVOID_e, + ANM_SUBS_DOWN_e, + ANM_SUBS_DOWN_DMG_A1_e, + ANM_SUBS_DOWN_DMG_A2_e, + ANM_SUBS_DOWN_DIE_e, + ANM_SUBS_DOWN_D_STAND_e, + ANM_SUBS_DOWN_STAGGER_e, + ANM_SUBS_DOWN_STAND_e, + ANM_SUBS_DOWN_WAIT_e, + ANM_SUBS_FLY_e, + ANM_SUBS_INVITE_A_e, + ANM_SUBS_INVITE_B_e, + ANM_SUBS_INVITE_C_e, + ANM_SUBS_STAGGER_e, + ANM_SUBS_TO_TRANS_e, + ANM_SUBS_WAIT_e, + ANM_TRANS_ATTACK_A1_e, + ANM_TRANS_ATTACK_A2_e, + ANM_TRANS_ATTACK_A3_e, + ANM_TRANS_NECK_DMG_e, + ANM_TRANS_NECK_PAT_e, + ANM_TRANS_STRUGGLE_e, + ANM_TRANS_THROUGH_e, + ANM_TRANS_WAIT_e, + ANM_TRANS_WALK_e, + }; + + /* 807C267C */ int ctrlJoint(J3DJoint*, J3DModel*); + /* 807C284C */ static int JointCallBack(J3DJoint*, int); /* 807C2898 */ void calcJointNeck(); /* 807C2A4C */ void calcJointSleeve(); - /* 807C3264 */ void draw(); + /* 807C3264 */ int draw(); /* 807C3818 */ void setBck(int, u8, f32, f32); - /* 807C38BC */ void checkBck(int); + /* 807C38BC */ bool checkBck(int); /* 807C3918 */ void setActionMode(int, int); - /* 807C39C4 */ void getWolfCutType(); + /* 807C39C4 */ int getWolfCutType(); /* 807C3A1C */ void onSwordAtBit(); /* 807C3A50 */ void offSwordShield(); /* 807C3AB0 */ void setTransDamage(cXyz*); @@ -36,8 +106,8 @@ class daE_VA_c : public fopEn_enemy_c { /* 807C5188 */ void setMagicEffect(int); /* 807C5258 */ void setMagicHitEffect(int); /* 807C5338 */ void demo_skip(int); - /* 807C53A8 */ void DemoSkipCallBack(void*, int); - /* 807C53DC */ void getRopeLength(int); + /* 807C53A8 */ static int DemoSkipCallBack(void*, int); + /* 807C53DC */ f32 getRopeLength(int); /* 807C53FC */ void calcOpRopePos(); /* 807C5CF0 */ void onRopeCutStatus(int, int, int); /* 807C5DF4 */ void setVibRope(f32, f32); @@ -70,20 +140,167 @@ class daE_VA_c : public fopEn_enemy_c { /* 807CC004 */ void action(); /* 807CC4D0 */ void mtx_set(); /* 807CC864 */ void cc_set(); - /* 807CCD24 */ void execute(); - /* 807CCF64 */ void _delete(); - /* 807CD048 */ void CreateHeap(); - /* 807CD668 */ void create(); + /* 807CCD24 */ int execute(); + /* 807CCF64 */ int _delete(); + /* 807CD048 */ int CreateHeap(); + /* 807CD668 */ int create(); /* 807CDAD8 */ daE_VA_c(); -private: - /* 0x5ac */ u8 field_0x5ac[0x10ffc - 0x5ac]; + + /* 0x005AC */ request_of_phase_process_class mPhase; + /* 0x005B4 */ mDoExt_McaMorfSO* mpMorf; + /* 0x005B8 */ mDoExt_McaMorfSO* mpEndEfMorf; + /* 0x005BC */ J3DModel* mpWeaponModel; + /* 0x005C0 */ J3DModel* mpCardModels[40]; + /* 0x00660 */ csXyz field_0x660[40]; + /* 0x00750 */ csXyz field_0x750[40]; + /* 0x00840 */ csXyz field_0x840[40]; + /* 0x00930 */ u8 mCardFlags[40]; + /* 0x00958 */ mDoExt_3DlineMat1_c mRope; + /* 0x00994 */ cXyz field_0x994[100]; + /* 0x00E44 */ csXyz field_0xe44[100]; + /* 0x0109C */ u8 mRopeCutStatus[10]; + /* 0x010A6 */ u8 field_0x10A6[0x01100 - 0x010A6]; + /* 0x01100 */ u8 mDrawRopes; + /* 0x01101 */ u8 field_0x1101[0x01104 - 0x01101]; + /* 0x01104 */ f32 field_0x1104[10]; + /* 0x0112C */ s16 field_0x112c[10]; + /* 0x01140 */ cXyz field_0x1140[10]; + /* 0x011B8 */ f32 field_0x11b8[10]; + /* 0x011E0 */ cXyz mMagicPos[2]; + /* 0x011F8 */ cXyz mMagicOldPos[2]; + /* 0x01210 */ cXyz mMagicSpeed[2]; + /* 0x01228 */ u8 field_0x1228[3]; + /* 0x0122C */ cXyz field_0x122c; + /* 0x01238 */ csXyz field_0x1238; + /* 0x0123E */ s16 field_0x123e; + /* 0x01240 */ u8 field_0x1240; + /* 0x01244 */ mDoExt_invisibleModel mInvisModel; + /* 0x0124C */ mDoExt_brkAnm* mpWeaponBrk; + /* 0x01250 */ mDoExt_brkAnm* mpEndEfBrk; + /* 0x01254 */ Z2CreatureEnemy mSound; + /* 0x012F8 */ cXyz field_0x12f8; + /* 0x01304 */ csXyz field_0x1304; + /* 0x0130A */ u8 field_0x130A[0x0130C - 0x0130A]; + /* 0x0130C */ s16 field_0x130c; + /* 0x0130E */ s16 field_0x130e; + /* 0x01310 */ f32 field_0x1310; + /* 0x01314 */ f32 mKankyoColBlend; + /* 0x01318 */ f32 field_0x1318; + /* 0x0131C */ int mAction; + /* 0x01320 */ int mMode; + /* 0x01324 */ int field_0x1324; + /* 0x01328 */ u8 field_0x1328[0x0132C - 0x01328]; + /* 0x0132C */ u32 mShadowKey; + /* 0x01330 */ s16 field_0x1330; + /* 0x01332 */ s16 field_0x1332; + /* 0x01334 */ s16 field_0x1334; + /* 0x01336 */ s16 field_0x1336; + /* 0x01338 */ s16 mAttackSphIFrameTimer; + /* 0x0133A */ s16 mNeckSphIFrameTimer; + /* 0x0133C */ s16 mBodyCylIFrameTimer; + /* 0x0133E */ s16 mOffTgTimer; + /* 0x01340 */ int mDemoModeTimer; + /* 0x01344 */ int mDownTimer; + /* 0x01348 */ int field_0x1348; + /* 0x0134C */ int mFadeAwayTimer; + /* 0x01350 */ int field_0x1350; + /* 0x01354 */ int field_0x1354; + /* 0x01358 */ int field_0x1358; + /* 0x0135C */ int field_0x135c; + /* 0x01360 */ u8 field_0x1360[0x01364 - 0x01360]; + /* 0x01364 */ int field_0x1364; + /* 0x01368 */ int field_0x1368; + /* 0x0136C */ u8 field_0x136C[0x01370 - 0x0136C]; + /* 0x01370 */ int mAlphaType; + /* 0x01374 */ int mKankyoColType; + /* 0x01378 */ u8 mGlowLightA; + /* 0x01379 */ u8 mFootSmokeAlpha; + /* 0x0137A */ u8 mEyeAlpha; + /* 0x0137B */ u8 field_0x137b; + /* 0x0137C */ u8 mGlowLightR; + /* 0x0137D */ u8 mGlowLightG; + /* 0x0137E */ u8 mGlowLightB; + /* 0x0137F */ u8 mGlowBody; + /* 0x01380 */ u8 field_0x1380; + /* 0x01381 */ u8 field_0x1381; + /* 0x01382 */ u8 field_0x1382; + /* 0x01383 */ u8 field_0x1383; + /* 0x01384 */ u8 field_0x1384; + /* 0x01385 */ u8 field_0x1385; + /* 0x01386 */ u8 field_0x1386; + /* 0x01387 */ u8 mRopesEnabled; + /* 0x01388 */ u8 field_0x1388; + /* 0x01389 */ u8 mWeponEfMode; + /* 0x0138A */ u8 mPlayEndEf; + /* 0x0138B */ u8 field_0x138b; + /* 0x0138C */ u8 mSwNo; + /* 0x0138D */ u8 field_0x138d; + /* 0x0138E */ u8 field_0x138e; + /* 0x0138F */ u8 field_0x138f; + /* 0x01390 */ u8 field_0x1390; + /* 0x01391 */ u8 field_0x1391; + /* 0x01392 */ u8 field_0x1392; + /* 0x01393 */ u8 field_0x1393; + /* 0x01394 */ s16 field_0x1394; + /* 0x01396 */ s16 field_0x1396; + /* 0x01398 */ s16 field_0x1398; + /* 0x0139C */ mDoExt_3DlineMat0_c field_0x139c; + /* 0x013B8 */ cXyz field_0x13b8; + /* 0x013C4 */ cXyz field_0x13c4; + /* 0x013D0 */ cXyz field_0x13d0[5]; + /* 0x0140C */ cXyz field_0x140c[5]; + /* 0x01448 */ csXyz field_0x1448[5]; + /* 0x01466 */ csXyz field_0x1466[5]; + /* 0x01484 */ u8 field_0x1484; + /* 0x01485 */ u8 field_0x1485; + /* 0x01486 */ u8 field_0x1486; + /* 0x01488 */ cXyz mDemoCamCenter; + /* 0x01494 */ cXyz mDemoCamEye; + /* 0x014A0 */ f32 mDemoCamBank; + /* 0x014A4 */ f32 field_0x14a4; + /* 0x014A8 */ f32 field_0x14a8; + /* 0x014AC */ s16 field_0x14ac; + /* 0x014B0 */ f32 field_0x14b0; + /* 0x014B4 */ u8 field_0x14B4[0x014B8 - 0x014B4]; + /* 0x014B8 */ dBgS_AcchCir mAcchCir; + /* 0x014F8 */ dBgS_ObjAcch mAcch; + /* 0x016D0 */ dBgS_AcchCir mMagicAcchCir[2]; + /* 0x01750 */ dBgS_ObjAcch mMagicAcch[2]; + /* 0x01B00 */ dCcD_Stts mBodyCcStts; + /* 0x01B3C */ dCcD_Stts field_0x1b3c; + /* 0x01B78 */ dCcD_Sph mNeckSph; + /* 0x01CB0 */ dCcD_Cyl mBodyCyls[3]; + /* 0x02064 */ dCcD_Sph mAttackSphs[4]; + /* 0x02544 */ dCcD_Sph mLineSphs[190]; + /* 0x10CD4 */ dCcD_Sph mMagicSphs[2]; + /* 0x10F44 */ dCcU_AtInfo mAtInfo; + /* 0x10F68 */ u32 mWeponEffEmtrIDs[3]; + /* 0x10F74 */ u32 field_0x10f74; + /* 0x10F78 */ u32 mFootSmokeEmtrIDs[2]; + /* 0x10F80 */ u32 field_0x10f80[30]; + /* 0x10FF8 */ u8 mInitHIO; }; -STATIC_ASSERT(sizeof(daE_VA_c) == 0x10ffc); class daE_VA_HIO_c { +public: /* 807C25EC */ daE_VA_HIO_c(); - /* 807CE2AC */ ~daE_VA_HIO_c(); -}; + /* 807CE2AC */ virtual ~daE_VA_HIO_c(); + /* 0x04 */ s8 field_0x04; + /* 0x08 */ f32 mModelSize; + /* 0x0C */ f32 mAttackRange; + /* 0x10 */ f32 mBiteCount; + /* 0x14 */ f32 mCircleAttackRadius; + /* 0x18 */ f32 mFadeAwayTime; + /* 0x1C */ f32 mDownTime; + /* 0x20 */ f32 mDownHP; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 mKRegLightR; + /* 0x34 */ f32 mKRegLightG; + /* 0x38 */ f32 mKRegLightB; + /* 0x3C */ f32 mKRegLightA; +}; #endif /* D_A_E_VT_H */ diff --git a/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp b/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp index 852c27b4db8..097a4c8b674 100644 --- a/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp +++ b/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp @@ -2177,7 +2177,7 @@ asm void J3DPEBlockFull::setBlend(J3DBlend const* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm bool J3DPEBlockFull::getBlend() { +asm J3DBlend* J3DPEBlockFull::getBlend() { nofralloc #include "asm/JSystem/J3DGraphBase/J3DMatBlock/getBlend__14J3DPEBlockFullFv.s" } @@ -2399,7 +2399,7 @@ asm void J3DPEBlockFogOff::setBlend(J3DBlend const* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm bool J3DPEBlockFogOff::getBlend() { +asm J3DBlend* J3DPEBlockFogOff::getBlend() { nofralloc #include "asm/JSystem/J3DGraphBase/J3DMatBlock/getBlend__16J3DPEBlockFogOffFv.s" } diff --git a/rel/d/a/e/d_a_e_vt/d_a_e_vt.cpp b/rel/d/a/e/d_a_e_vt/d_a_e_vt.cpp index 86d4fd41d31..076884e4d2c 100644 --- a/rel/d/a/e/d_a_e_vt/d_a_e_vt.cpp +++ b/rel/d/a/e/d_a_e_vt/d_a_e_vt.cpp @@ -1,14 +1,79 @@ /** * @file d_a_e_vt.cpp - * -*/ + * Variant Enemy (Death Sword) + */ #include "rel/d/a/e/d_a_e_vt/d_a_e_vt.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "SSystem/SComponent/c_math.h" +#include "c/c_damagereaction.h" +#include "cmath.h" +#include "d/a/d_a_player.h" +#include "d/com/d_com_inf_game.h" +#include "d/s/d_s_play.h" #include "dol2asm.h" -#include "d/d_camera.h" - - +static void setMidnaBindEffect(fopEn_enemy_c*, Z2CreatureEnemy*, cXyz*, cXyz*); + +#define WL_CUT_TYPE_SMALL 1 +#define WL_CUT_TYPE_JUMP 2 +#define WL_CUT_TYPE_LARGE 3 + +enum daE_VA_JOINT { + JNT_ROOT, + JNT_BACKBONE_01, + JNT_BACKBONE_02, + JNT_ARM_L01, + JNT_ARM_L02, + JNT_ARM_L03, + JNT_ARM_L04, + JNT_ARM_L05, + JNT_FINGER_LB, + JNT_FINGER_LC, + JNT_FINGER_LA, + JNT_LEFT_COTH_01, + JNT_LEFT_COTH_02, + JNT_LEFT_COTH_03, + JNT_LEFT_COTH_04, + JNT_ARM_R01, + JNT_ARM_R02, + JNT_ARM_R03, + JNT_ARM_R04, + JNT_ARM_R05, + JNT_FINGER_RB, + JNT_FINGER_RC, + JNT_KEN_1, + JNT_KEN_2, + JNT_FINGER_RA, + JNT_BUST, + JNT_NECK_CLOTH, + JNT_NECK_01, + JNT_HEAD_CLOTH_01, + JNT_HEAD_CLOTH_02, + JNT_HEAD_CLOTH_03, + JNT_HEAD_CLOTH_04, + JNT_HEAD_CLOTH_05, + JNT_NECK_02, + JNT_HEAD, + JNT_JOE, + JNT_WAIST, + JNT_BACK_CLOTH_01, + JNT_BACK_CLOTH_02, + JNT_BACK_CLOTH_03, + JNT_FRONT_CLOTH_01, + JNT_FRONT_CLOTH_02, + JNT_FRONT_CLOTH_03, + JNT_LEG_L01, + JNT_LEG_L02, + JNT_LEG_L03, + JNT_LEG_R01, + JNT_LEG_R02, + JNT_LEG_R03, + JNT_TAIL_CLOTH_01, + JNT_TAIL_CLOTH_02, + JNT_TAIL_CLOTH_03, + JNT_TAIL_CLOTH_04, +}; // // Forward References: @@ -290,7 +355,6 @@ extern "C" extern void* __vt__12cCcD_CylAttr[25]; extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" u8 mSimpleTexObj__21dDlst_shadowControl_c[32]; extern "C" u8 mCurrentMtx__6J3DSys[48]; extern "C" extern u8 j3dZModeTable[96]; @@ -501,23 +565,34 @@ SECTION_DATA static u8 eff_id[6 + 2 /* padding */] = { /* 807CEF40-807CEF80 000038 0040+00 0/1 0/0 0/0 .data cc_vt_neck_src__22@unnamed@d_a_e_vt_cpp@ */ #pragma push #pragma force_active on -SECTION_DATA static u8 data_807CEF40[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, +static dCcD_SrcSph cc_vt_neck_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0x80000000, 0x3}, 0x0}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x4}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr }; #pragma pop /* 807CEF80-807CEFC4 000078 0044+00 0/1 0/0 0/0 .data cc_vt_body_src__22@unnamed@d_a_e_vt_cpp@ */ #pragma push #pragma force_active on -SECTION_DATA static u8 data_807CEF80[68] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x75, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0x43, 0x1E, 0x00, 0x00, +static dCcD_SrcCyl cc_vt_body_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x43}, 0x75}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x6}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {0.0f, 0.0f, 0.0f}, // mCenter + 150.0f, // mRadius + 158.0f // mHeight + } // mCyl }; #pragma pop @@ -525,138 +600,70 @@ SECTION_DATA static u8 data_807CEF80[68] = { */ #pragma push #pragma force_active on -SECTION_DATA static u8 data_807CEFC4[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, +static dCcD_SrcSph cc_vt_attack_src = { + { + {0x0, {{0x100000, 0x2, 0xD}, {0xD8FBFDFF, 0x43}, 0x75}}, // mObj + {dCcD_SE_METAL, 0x0, 0x1, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x2, 0x0, 0x0, 0x2}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr }; #pragma pop /* 807CF004-807CF044 0000FC 0040+00 0/1 0/0 0/0 .data cc_vt_line_src__22@unnamed@d_a_e_vt_cpp@ */ #pragma push #pragma force_active on -SECTION_DATA static u8 data_807CF004[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x75, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, +static dCcD_SrcSph cc_vt_line_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0xD8FBFDFF, 0x43}, 0x75}}, // mObj + {dCcD_SE_METAL, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x6}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr }; #pragma pop /* 807CF044-807CF084 00013C 0040+00 0/1 0/0 0/0 .data cc_vt_magic_src__22@unnamed@d_a_e_vt_cpp@ */ #pragma push #pragma force_active on -SECTION_DATA static u8 data_807CF044[64] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, - 0xD8, 0xFB, 0xFD, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, +static dCcD_SrcSph cc_vt_magic_src = { + { + {0x0, {{0x400, 0x2, 0xD}, {0xD8FBFDFF, 0x0}, 0x0}}, // mObj + {0xD, 0x0, 0x1, 0x0, 0x0}, // mGObjAt + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x6}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {{0.0f, 0.0f, 0.0f}, 40.0f} // mSph + } // mSphAttr }; #pragma pop /* 807CF084-807CF0AC 00017C 0027+01 1/1 0/0 0/0 .data va_tag_set_size__22@unnamed@d_a_e_vt_cpp@ */ -SECTION_DATA static u8 data_807CF084[39 + 1 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x01, - 0x01, - 0x01, - 0x01, - 0x01, - 0x01, - 0x01, - 0x01, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - 0x00, - 0x00, - 0x00, - 0x01, - 0x01, - 0x01, - 0x01, - 0x02, - 0x02, - 0x02, - 0x02, - 0x02, - /* padding */ - 0x00, +SECTION_DATA static u8 va_tag_set_size[39] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, }; /* 807CF0AC-807CF0D4 0001A4 0027+01 3/4 0/0 0/0 .data va_tag_set_num__22@unnamed@d_a_e_vt_cpp@ */ -SECTION_DATA static u8 data_807CF0AC[39 + 1 /* padding */] = { - 0x01, - 0x0C, - 0x16, - 0x1F, - 0x21, - 0x2A, - 0x2B, - 0x02, - 0x04, - 0x0D, - 0x0F, - 0x15, - 0x18, - 0x20, - 0x2C, - 0x03, - 0x05, - 0x06, - 0x0B, - 0x10, - 0x17, - 0x19, - 0x1A, - 0x22, - 0x24, - 0x29, - 0x2D, - 0x34, - 0x49, - 0x52, - 0x36, - 0x3E, - 0x54, - 0x5C, - 0x39, - 0x41, - 0x4C, - 0x56, - 0x5E, - /* padding */ - 0x00, +SECTION_DATA static u8 va_tag_set_num[39] = { + 0x01, 0x0C, 0x16, 0x1F, 0x21, 0x2A, 0x2B, 0x02, 0x04, 0x0D, 0x0F, 0x15, 0x18, + 0x20, 0x2C, 0x03, 0x05, 0x06, 0x0B, 0x10, 0x17, 0x19, 0x1A, 0x22, 0x24, 0x29, + 0x2D, 0x34, 0x49, 0x52, 0x36, 0x3E, 0x54, 0x5C, 0x39, 0x41, 0x4C, 0x56, 0x5E, }; /* 807CF0D4-807CF170 0001CC 009C+00 1/1 0/0 0/0 .data va_tag_offset__22@unnamed@d_a_e_vt_cpp@ */ -SECTION_DATA static u8 data_807CF0D4[156] = { - 0x41, 0xA0, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, - 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x41, 0xF0, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, - 0x42, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, - 0x41, 0xA0, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, - 0x41, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x20, 0x00, 0x00, - 0x41, 0xA0, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +SECTION_DATA static f32 va_tag_offset[39] = { + 20.0f, 20.0f, 20.0f, 20.0f, 20.0f, 0.0f, 40.0f, 0.0f, 30.0f, 10.0f, 0.0f, 0.0f, 20.0f, + 0.0f, 10.0f, 20.0f, 40.0f, 0.0f, 20.0f, 0.0f, 0.0f, 20.0f, 0.0f, 10.0f, 0.0f, 0.0f, + 20.0f, 10.0f, 20.0f, 30.0f, 0.0f, 10.0f, 20.0f, 0.0f, 0.0f, 10.0f, 20.0f, 30.0f, 0.0f, }; /* 807CF170-807CF174 000268 0004+00 1/1 0/0 0/0 .data l_color$4364 */ @@ -673,86 +680,61 @@ SECTION_DATA static u8 va_foot_smoke_id[8] = { }; /* 807CF17C-807CF184 000274 0006+02 1/1 0/0 0/0 .data va_wepon_eff_id1 */ -SECTION_DATA static u8 va_wepon_eff_id1[6 + 2 /* padding */] = { - 0x85, - 0xD8, - 0x85, - 0xD9, - 0x85, - 0xDA, - /* padding */ - 0x00, - 0x00, +SECTION_DATA static u16 va_wepon_eff_id1[] = { + 0x85D8, + 0x85D9, + 0x85DA, }; /* 807CF184-807CF18C 00027C 0006+02 1/1 0/0 0/0 .data va_wepon_eff_id2 */ -SECTION_DATA static u8 va_wepon_eff_id2[6 + 2 /* padding */] = { - 0x85, - 0xC6, - 0x85, - 0xC7, - 0x85, - 0xC8, - /* padding */ - 0x00, - 0x00, +SECTION_DATA static u16 va_wepon_eff_id2[] = { + 0x85C6, + 0x85C7, + 0x85C8, }; /* 807CF18C-807CF1A4 000284 0018+00 1/1 0/0 0/0 .data va_bugs_eff_jnt */ -SECTION_DATA static u8 va_bugs_eff_jnt[24] = { - 0x00, 0x01, 0x00, 0x02, 0x00, 0x22, 0x00, 0x04, 0x00, 0x05, 0x00, 0x07, - 0x00, 0x10, 0x00, 0x11, 0x00, 0x13, 0x00, 0x2C, 0x00, 0x2F, 0x00, 0x32, +SECTION_DATA static u16 va_bugs_eff_jnt[] = { + 0x01, 0x02, 0x22, 0x04, 0x05, 0x07, 0x10, 0x11, 0x13, 0x2C, 0x2F, 0x32, }; /* 807CF1A4-807CF1BC 00029C 0018+00 1/1 0/0 0/0 .data va_bugs_eff_id */ -SECTION_DATA static u8 va_bugs_eff_id[24] = { - 0x85, 0xE1, 0x85, 0xE2, 0x85, 0xE3, 0x85, 0xDB, 0x85, 0xDC, 0x85, 0xDD, - 0x85, 0xDE, 0x85, 0xDF, 0x85, 0xE0, 0x85, 0xE4, 0x85, 0xE5, 0x85, 0xE6, +SECTION_DATA static u16 va_bugs_eff_id[] = { + 0x85E1, 0x85E2, 0x85E3, 0x85DB, 0x85DC, 0x85DD, 0x85DE, 0x85DF, 0x85E0, 0x85E4, 0x85E5, 0x85E6, }; /* 807CF1BC-807CF1C4 0002B4 0006+02 1/1 0/0 0/0 .data va_weapon_land_eff_id */ -SECTION_DATA static u8 va_weapon_land_eff_id[6 + 2 /* padding */] = { - 0x85, - 0xC9, - 0x85, - 0xCA, - 0x85, - 0xCB, - /* padding */ - 0x00, - 0x00, +SECTION_DATA static u16 va_weapon_land_eff_id[] = { + 0x85C9, + 0x85CA, + 0x85CB, }; /* 807CF1C4-807CF1CC 0002BC 0006+02 1/1 0/0 0/0 .data va_magic_eff_id */ -SECTION_DATA static u8 va_magic_eff_id[6 + 2 /* padding */] = { - 0x88, - 0x48, - 0x88, - 0x49, - 0x88, - 0x4A, - /* padding */ - 0x00, - 0x00, +SECTION_DATA static u16 va_magic_eff_id[] = { + 0x8848, + 0x8849, + 0x884A, }; /* 807CF1CC-807CF1F8 0002C4 002C+00 1/1 0/0 0/0 .data line_pull_power */ -SECTION_DATA static u8 line_pull_power[44] = { - 0x00, 0x00, 0x00, 0x00, 0x3D, 0xCC, 0xCC, 0xCD, 0x3E, 0x4C, 0xCC, 0xCD, 0x3E, 0x99, 0x99, - 0x9A, 0x3E, 0xCC, 0xCC, 0xCD, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x19, 0x99, 0x9A, 0x3F, 0x33, - 0x33, 0x33, 0x3F, 0x4C, 0xCC, 0xCD, 0x3F, 0x66, 0x66, 0x66, 0x3F, 0x80, 0x00, 0x00, +SECTION_DATA static f32 line_pull_power[] = { + 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, }; /* 807CF1F8-807CF200 0002F0 0008+00 1/2 0/0 0/0 .data TAG_VIB_ANGLE */ -SECTION_DATA static u8 TAG_VIB_ANGLE[8] = { - 0xF8, 0x00, 0x08, 0x00, 0xF0, 0x00, 0x10, 0x00, +SECTION_DATA static s16 TAG_VIB_ANGLE[] = { + -0x800, + 0x800, + -0x1000, + 0x1000, }; /* 807CF200-807CF210 0002F8 0010+00 0/1 0/0 0/0 .data TAG_VIB_WIDTH */ #pragma push #pragma force_active on -SECTION_DATA static u8 TAG_VIB_WIDTH[16] = { - 0x01, 0xC0, 0x02, 0x80, 0x01, 0x80, 0x02, 0x40, 0x03, 0x80, 0x05, 0x00, 0x03, 0x00, 0x04, 0x80, +SECTION_DATA static s16 TAG_VIB_WIDTH[] = { + 0x1C0, 0x280, 0x180, 0x240, 0x380, 0x500, 0x300, 0x480, }; #pragma pop @@ -874,20 +856,20 @@ static actor_method_class l_daE_VA_Method = { /* 807CF3A4-807CF3D4 -00001 0030+00 0/0 0/0 1/0 .data g_profile_E_VT */ extern actor_process_profile_definition g_profile_E_VT = { - fpcLy_CURRENT_e, // mLayerID - 7, // mListID - fpcPi_CURRENT_e, // mListPrio - PROC_E_VT, // mProcName - &g_fpcLf_Method.mBase, // sub_method - sizeof(daE_VA_c), // mSize - 0, // mSizeOther - 0, // mParameters - &g_fopAc_Method.base, // sub_method - 756, // mPriority - &l_daE_VA_Method, // sub_method - 0x00040000, // mStatus - fopAc_ENEMY_e, // mActorType - fopAc_CULLBOX_CUSTOM_e, // cullType + fpcLy_CURRENT_e, // mLayerID + 7, // mListID + fpcPi_CURRENT_e, // mListPrio + PROC_E_VT, // mProcName + &g_fpcLf_Method.mBase, // sub_method + sizeof(daE_VA_c), // mSize + 0, // mSizeOther + 0, // mParameters + &g_fopAc_Method.base, // sub_method + 756, // mPriority + &l_daE_VA_Method, // sub_method + 0x00040000, // mStatus + fopAc_ENEMY_e, // mActorType + fopAc_CULLBOX_CUSTOM_e, // cullType }; /* 807CF3D4-807CF3E0 0004CC 000C+00 1/1 0/0 0/0 .data __vt__12dBgS_AcchCir */ @@ -965,6 +947,27 @@ SECTION_DATA extern void* __vt__12daE_VA_HIO_c[3] = { }; /* 807C25EC-807C267C 0000EC 0090+00 1/1 0/0 0/0 .text __ct__12daE_VA_HIO_cFv */ +// matches with literals +#ifdef NONMATCHING +daE_VA_HIO_c::daE_VA_HIO_c() { + field_0x04 = -1; + mModelSize = 1.2f; + mAttackRange = 500.0f; + mBiteCount = 7.0f; + mFadeAwayTime = 2500.0f; + mCircleAttackRadius = 1000.0f; + mDownTime = 100.0f; + mDownHP = 800.0f; + field_0x24 = 0.5f; + field_0x28 = 3.0f; + field_0x2c = -50.0f; + + mKRegLightR = 40.0f; + mKRegLightG = 35.0f; + mKRegLightB = 82.0f; + mKRegLightA = 210.0f; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -973,6 +976,7 @@ asm daE_VA_HIO_c::daE_VA_HIO_c() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/__ct__12daE_VA_HIO_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CF478-807CF47C 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ @@ -1065,7 +1069,15 @@ static u8 lit_1010[1 + 3 /* padding */]; /* 807CF4B4-807CF4B8 -00001 0004+00 2/2 0/0 0/0 .bss None */ /* 807CF4B4 0001+00 data_807CF4B4 @1009 */ /* 807CF4B5 0003+00 data_807CF4B5 None */ -static u8 struct_807CF4B4[4]; +#pragma push +#pragma force_active on +static u8 struct_807CF4B4; +#pragma pop + +#pragma push +#pragma force_active on +static u8 init_hio; +#pragma pop /* 807CF4B8-807CF4C4 000048 000C+00 0/1 0/0 0/0 .bss @3923 */ #pragma push @@ -1074,37 +1086,121 @@ static u8 lit_3923[12]; #pragma pop /* 807CF4C4-807CF504 000054 0040+00 17/18 0/0 0/0 .bss l_HIO */ +#ifdef NONMATCHING +static daE_VA_HIO_c l_HIO; +#else static u8 l_HIO[64]; +#endif /* 807C267C-807C284C 00017C 01D0+00 1/1 0/0 0/0 .text ctrlJoint__8daE_VA_cFP8J3DJointP8J3DModel */ +// matches with HIO +#ifdef NONMATCHING +int daE_VA_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { + int joint_no = i_joint->getJntNo(); + mDoMtx_stack_c::copy(i_model->getAnmMtx(joint_no)); + + switch (joint_no) { + case JNT_LEFT_COTH_01: + case JNT_LEFT_COTH_02: + case JNT_LEFT_COTH_03: + case JNT_LEFT_COTH_04: + if (field_0x138b) { + mDoMtx_stack_c::transS(field_0x140c[joint_no - JNT_LEFT_COTH_01]); + mDoMtx_stack_c::YrotM(field_0x130c); + mDoMtx_stack_c::ZrotM(field_0x130e); + mDoMtx_stack_c::ZrotM(field_0x1448[joint_no - JNT_LEFT_COTH_01].z); + mDoMtx_stack_c::YrotM(field_0x1448[joint_no - JNT_LEFT_COTH_01].y); + mDoMtx_stack_c::scaleM(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); + } + break; + case JNT_NECK_01: + mDoMtx_stack_c::YrotM(field_0x1398); + if (field_0x1391 == 1) { + mDoMtx_stack_c::XrotM(field_0x1394); + mDoMtx_stack_c::ZrotM(field_0x1396); + } + break; + case JNT_NECK_02: + mDoMtx_stack_c::YrotM(field_0x1398); + if (field_0x1391 == 2) { + mDoMtx_stack_c::XrotM(field_0x1394); + } + break; + case JNT_HEAD: + if (field_0x1391 == 2) { + mDoMtx_stack_c::ZrotM(field_0x1396); + } + break; + } + + i_model->setAnmMtx(joint_no, mDoMtx_stack_c::get()); + cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { +asm int daE_VA_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/ctrlJoint__8daE_VA_cFP8J3DJointP8J3DModel.s" } #pragma pop +#endif /* 807C284C-807C2898 00034C 004C+00 1/1 0/0 0/0 .text JointCallBack__8daE_VA_cFP8J3DJointi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::JointCallBack(J3DJoint* param_0, int param_1) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/JointCallBack__8daE_VA_cFP8J3DJointi.s" +int daE_VA_c::JointCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + J3DModel* model = j3dSys.getModel(); + daE_VA_c* a_this = (daE_VA_c*)model->getUserArea(); + + if (a_this != NULL) { + a_this->ctrlJoint(i_joint, model); + } + } + + return 1; } -#pragma pop /* 807C2898-807C2A4C 000398 01B4+00 1/1 0/0 0/0 .text calcJointNeck__8daE_VA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::calcJointNeck() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcJointNeck__8daE_VA_cFv.s" +void daE_VA_c::calcJointNeck() { + csXyz sp18; + + if (field_0x1391 != 0) { + s16 angleY_to_player = fopAcM_searchPlayerAngleY(this) - shape_angle.y; + if (angleY_to_player > 0x3000) { + angleY_to_player = 0x3000; + } + if (angleY_to_player < -0x3000) { + angleY_to_player = -0x3000; + } + cLib_addCalcAngleS(&field_0x1394, angleY_to_player, 8, 0x800, 0x40); + + s16 angleX_to_player = 0x1400 - fopAcM_searchPlayerAngleX(this); + if (angleX_to_player > 0x3000) { + angleX_to_player = 0x3000; + } + if (angleX_to_player < -0x3000) { + angleX_to_player = -0x3000; + } + cLib_addCalcAngleS(&field_0x1396, angleX_to_player, 8, 0x800, 0x40); + + if (checkBck(ANM_SUBS_INVITE_A_e) || checkBck(ANM_SUBS_INVITE_B_e)) { + cLib_addCalcAngleS(&field_0x1398, -0x800, 8, 0x80, 0x40); + } else if (checkBck(ANM_SUBS_INVITE_C_e)) { + cLib_addCalcAngleS(&field_0x1398, -0x1800, 8, 0x80, 0x40); + } else { + cLib_addCalcAngleS(&field_0x1398, -0x1800, 8, 0x100, 0x40); + } + + field_0x1392 = field_0x1391; + } else { + field_0x1391 = field_0x1392; + cLib_addCalcAngleS(&field_0x1394, 0, 8, 0x100, 0x40); + cLib_addCalcAngleS(&field_0x1396, 0, 8, 0x100, 0x40); + cLib_addCalcAngleS(&field_0x1398, 0, 8, 0x100, 0x40); + } } -#pragma pop /* ############################################################################################## */ /* 807CED08-807CED0C 000060 0004+00 0/1 0/0 0/0 .rodata @4314 */ @@ -1165,14 +1261,151 @@ COMPILER_STRIP_GATE(0x807CED28, &lit_4322); #pragma pop /* 807C2A4C-807C3264 00054C 0818+00 1/1 0/0 0/0 .text calcJointSleeve__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::calcJointSleeve() { + csXyz sp128; + cXyz sp90(field_0x13b8); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_LEFT_COTH_01)); + mDoMtx_stack_c::multVecZero(&field_0x13b8); + mDoMtx_MtxToRot(mDoMtx_stack_c::get(), &sp128); + + f32 anm_frame = mpMorf->getFrame(); + if ((checkBck(ANM_SUBS_ATTACK_A1_e) && anm_frame >= 74.0f) || + (checkBck(ANM_SUBS_ATTACK_A3_e) && anm_frame <= 11.0f) || + (checkBck(ANM_TRANS_ATTACK_A1_e) && anm_frame >= 60.0f) || + checkBck(ANM_TRANS_ATTACK_A2_e) || (checkBck(ANM_TRANS_ATTACK_A3_e) && anm_frame <= 60.0f)) + { + sp128.y = field_0x1466[0].y; + } + + field_0x13c4 = field_0x13b8 - sp90; + + cXyz sp9C; + cXyz spA8; + cXyz spB4; + + field_0x13d0[0] = field_0x13c4; + field_0x140c[0] = field_0x13b8; + cXyz* line_pos = field_0x139c.getPos(0); + *line_pos = field_0x140c[0]; + field_0x1466[0].set(-0x8000, sp128.y, -0x8000); + line_pos++; + for (int i = 1; i < 5; i++, line_pos++) { + f32 var_f29; + if (i == 1) { + var_f29 = ZREG_F(0) + 80.0f; + } + if (i == 2) { + var_f29 = ZREG_F(1) + 80.0f; + } + if (i == 3) { + var_f29 = ZREG_F(2) + 50.0f; + } + if (i == 4) { + var_f29 = ZREG_F(3) + 50.0f; + } + + if (field_0x140c[i].abs(field_0x140c[i - 1]) > (var_f29 + 30.0f) + nREG_F(3)) { + spA8 = field_0x140c[i - 1] - field_0x140c[i]; + f32 temp_f28 = spA8.abs(); + + spA8.normalizeZP(); + spA8 = spA8 * (temp_f28 - var_f29); + + field_0x13d0[i].x = spA8.x; + field_0x13d0[i].z = spA8.z; + + if (std::abs(field_0x140c[i].y - field_0x140c[i - 1].y) > var_f29) { + field_0x13d0[i].y = spA8.y; + } else if (spA8.y >= 0.0f) { + if (field_0x13d0[i].y < spA8.y) { + field_0x13d0[i].y = spA8.y; + } + } else { + field_0x13d0[i].y -= l_HIO.field_0x28; + + if (field_0x140c[i].y < field_0x140c[i - 1].y - (var_f29 * 0.8f)) { + if (field_0x13d0[i].y <= -10.0f) { + field_0x13d0[i].y = -10.0f; + } + } else if (field_0x13d0[i].y <= l_HIO.field_0x2c) { + field_0x13d0[i].y = l_HIO.field_0x2c; + } + } + } else { + field_0x13d0[i].x *= l_HIO.field_0x24; + field_0x13d0[i].z *= l_HIO.field_0x24; + field_0x13d0[i].y -= l_HIO.field_0x28; + + if (field_0x140c[i].y < field_0x140c[i - 1].y - (var_f29 * 0.8f)) { + if (field_0x13d0[i].y <= -10.0f) { + field_0x13d0[i].y = -10.0f; + } + } else if (field_0x13d0[i].y <= l_HIO.field_0x2c) { + field_0x13d0[i].y = l_HIO.field_0x2c; + } + } + + if (field_0x1354 != 0) { + field_0x13d0[i].y -= l_HIO.field_0x28; + + if (field_0x13d0[i].y <= l_HIO.field_0x2c) { + field_0x13d0[i].y = l_HIO.field_0x2c; + } + } + + field_0x140c[i] += field_0x13d0[i]; + if (field_0x140c[i].y < 0.0f) { + field_0x13d0[i] *= 0.1f; + field_0x13d0[i].y = 0.0f; + field_0x140c[i].y = 0.0f; + } + + spA8 = field_0x140c[i] - field_0x140c[i - 1]; + spA8.normalizeZP(); + + field_0x140c[i] = field_0x140c[i - 1] + (spA8 * var_f29); + + line_pos[0] = field_0x140c[i]; + spA8 = line_pos[0] - line_pos[-1]; + + mDoMtx_stack_c::YrotS(-sp128.y); + mDoMtx_stack_c::transM(spA8); + mDoMtx_stack_c::multVecZero(&spA8); + + field_0x1466[i].x = cM_atan2s(spA8.z, spA8.y); + field_0x1466[i].y = cM_atan2s(spA8.x, spA8.z); + field_0x1466[i].z = cM_atan2s(spA8.x, spA8.y); + } + + field_0x130c = sp128.y; + field_0x130e = -0x4000; + + cXyz sp80; + cXyz sp74; + cXyz sp68; + cXyz sp5C; + + for (int i = 0; i < 4; i++) { + field_0x1448[i].y = field_0x1466[i + 1].x - field_0x1466[0].x; + field_0x1448[i].z = field_0x1466[0].z - field_0x1466[i + 1].z; + + if (abs(field_0x1448[i].z) >= 0x4000) { + field_0x1448[i].y = 0x8000 - field_0x1448[i].y; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::calcJointSleeve() { - nofralloc +asm void daE_VA_c::calcJointSleeve(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcJointSleeve__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CED2C-807CED30 000084 0004+00 0/1 0/0 0/0 .rodata @4452 */ @@ -1206,24 +1439,132 @@ COMPILER_STRIP_GATE(0x807CED38, &lit_4458); #pragma pop /* 807C3264-807C37F8 000D64 0594+00 1/1 0/0 0/0 .text draw__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +int daE_VA_c::draw() { + J3DModel* model = mpMorf->getModel(); + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + + if (!mPlayEndEf) { + if (!mRopesEnabled) { + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + + J3DModelData* modelData = model->getModelData(); + for (u16 i = 0; i < modelData->getMaterialNum(); i++) { + J3DMaterial* material = modelData->getMaterialNodePointer(i); + + material->getZMode()->setUpdateEnable(1); + material->setZCompLoc(1); + material->setMaterialMode(4); + + if (i == 0) { + material->getTevKColor(3)->a = mEyeAlpha; + } else { + material->getTevKColor(0)->r = mGlowLightR; + material->getTevKColor(0)->g = mGlowLightG; + material->getTevKColor(0)->b = mGlowLightB; + + if (!field_0x1318) { + material->getTevColor(0)->r = field_0x1380; + material->getTevColor(0)->g = field_0x1380; + material->getTevColor(0)->b = field_0x1380; + } else { + material->getTevColor(0)->r = field_0x1318; + material->getTevColor(0)->g = field_0x1318; + material->getTevColor(0)->b = field_0x1318; + } + + material->getTevKColor(3)->a = mGlowLightA; + } + + J3DBlend* blend = material->getBlend(); + if (mAlphaType >= 2) { + blend->setDstFactor(5); + } else { + blend->setDstFactor(1); + } + } + + mInvisModel.entryDL(NULL); + } + } else { + model = mpEndEfMorf->getModel(); + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + mpEndEfBrk->entry(model->getModelData()); + mpEndEfMorf->entryDL(); + } + + f32 var_f31 = tevStr.field_0x344; + if (mAlphaType == 2) { + f32 temp_f2 = (1000.0f - current.pos.y) / 1000.0f; + if (temp_f2 < 0.0f) { + temp_f2 = 0.0f; + } + + if (temp_f2 > 1.0f) { + temp_f2 = 1.0f; + } + + tevStr.field_0x344 = temp_f2 * ((var_f31 * (f32)mGlowLightA) / 255.0f); + if (tevStr.field_0x344 > 0.4f) { + tevStr.field_0x344 = 0.4f; + } + + mShadowKey = dComIfGd_setShadow(mShadowKey, 0, model, ¤t.pos, nREG_F(19) + 2000.0f, + 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, + &tevStr, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + } + + if (mpWeaponModel != NULL && field_0x1240 != 2) { + g_env_light.setLightTevColorType_MAJI(mpWeaponModel, &tevStr); + mpWeaponBrk->entry(mpWeaponModel->getModelData()); + fopAcM_setEffectMtx(this, mpWeaponModel->getModelData()); + mDoExt_modelUpdateDL(mpWeaponModel); + + if (mAlphaType == 2) { + dComIfGd_addRealShadow(mShadowKey, mpWeaponModel); + } else { + tevStr.field_0x344 = var_f31; + mShadowKey = + dComIfGd_setShadow(mShadowKey, 1, mpWeaponModel, ¤t.pos, nREG_F(19) + 2000.0f, + 0.0f, current.pos.y, mAcch.GetGroundH(), mAcch.m_gnd, &tevStr, 0, + 1.0f, dDlst_shadowControl_c::getSimpleTex()); + } + } + + if (mRopesEnabled) { + if (mDrawRopes) { + static GXColor l_color = {0x64, 0x46, 0x00, 0xFF}; + + mRope.update(110, l_color, &tevStr); + dComIfGd_set3DlineMatDark(&mRope); + } + + for (int i = 0; i < 40; i++) { + if (!(mCardFlags[i] & 0x80)) { + g_env_light.setLightTevColorType_MAJI(mpCardModels[i], &tevStr); + mDoExt_modelUpdateDL(mpCardModels[i]); + } + } + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::draw() { +asm int daE_VA_c::draw() { nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/draw__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C37F8-807C3818 0012F8 0020+00 1/0 0/0 0/0 .text daE_VA_Draw__FP8daE_VA_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daE_VA_Draw(daE_VA_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Draw__FP8daE_VA_c.s" +static int daE_VA_Draw(daE_VA_c* i_this) { + return i_this->draw(); } -#pragma pop /* ############################################################################################## */ /* 807CED40-807CED44 000098 0004+00 1/3 0/0 0/0 .rodata @4473 */ @@ -1237,6 +1578,13 @@ SECTION_DEAD static char const* const stringBase_807CEEFC = "E_VA"; #pragma pop /* 807C3818-807C38BC 001318 00A4+00 19/19 0/0 0/0 .text setBck__8daE_VA_cFiUcff */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setBck(int i_anmID, u8 i_attr, f32 i_morf, f32 i_rate) { + mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("E_VA", i_anmID), i_attr, i_morf, i_rate, + 0.0f, -1.0f); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1245,58 +1593,91 @@ asm void daE_VA_c::setBck(int param_0, u8 param_1, f32 param_2, f32 param_3) { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setBck__8daE_VA_cFiUcff.s" } #pragma pop +#endif /* 807C38BC-807C3918 0013BC 005C+00 8/8 0/0 0/0 .text checkBck__8daE_VA_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::checkBck(int param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/checkBck__8daE_VA_cFi.s" +bool daE_VA_c::checkBck(int i_anmID) { + J3DAnmTransform* pbck = (J3DAnmTransform*)dComIfG_getObjectRes("E_VA", i_anmID); + return mpMorf->getAnm() == pbck ? TRUE : FALSE; } -#pragma pop /* 807C3918-807C39C4 001418 00AC+00 21/21 0/0 0/0 .text setActionMode__8daE_VA_cFii */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::setActionMode(int param_0, int param_1) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setActionMode__8daE_VA_cFii.s" +void daE_VA_c::setActionMode(int i_action, int i_mode) { + if (dComIfGs_isOneZoneSwitch(6, fopAcM_GetRoomNo(this)) && i_action != ACTION_OPACI_DOWN_e && + i_action != ACTION_OPACI_DOWN_DAMAGE_e) + { + dComIfGs_offOneZoneSwitch(6, fopAcM_GetRoomNo(this)); + + if (!dComIfGs_isOneZoneSwitch(7, fopAcM_GetRoomNo(this))) { + dComIfGs_onOneZoneSwitch(7, fopAcM_GetRoomNo(this)); + } + } + + field_0x1381 = 0; + mAction = i_action; + mMode = i_mode; + mGlowBody = 0; } -#pragma pop /* 807C39C4-807C3A1C 0014C4 0058+00 1/1 0/0 0/0 .text getWolfCutType__8daE_VA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::getWolfCutType() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/getWolfCutType__8daE_VA_cFv.s" +int daE_VA_c::getWolfCutType() { + switch (daPy_getPlayerActorClass()->getCutType()) { + case daPy_py_c::CUT_TYPE_WOLF_B_LEFT: + case daPy_py_c::CUT_TYPE_WOLF_B_RIGHT: + return WL_CUT_TYPE_SMALL; + case daPy_py_c::CUT_TYPE_WOLF_JUMP: + return WL_CUT_TYPE_JUMP; + case daPy_py_c::CUT_TYPE_WOLF_B_FRONT: + case daPy_py_c::CUT_TYPE_WOLF_B_BACK: + case daPy_py_c::CUT_TYPE_WOLF_UNK_30: + case daPy_py_c::CUT_TYPE_WOLF_JUMP_S: + case daPy_py_c::CUT_TYPE_WOLF_JUMP_S_FINISH: + case daPy_py_c::CUT_TYPE_WOLF_TURN_LEFT: + case daPy_py_c::CUT_TYPE_WOLF_TURN_RIGHT: + case daPy_py_c::CUT_TYPE_WOLF_UNK_35: + case daPy_py_c::CUT_TYPE_WOLF_LOCK: + return WL_CUT_TYPE_LARGE; + } + + return 0; } -#pragma pop /* 807C3A1C-807C3A50 00151C 0034+00 3/3 0/0 0/0 .text onSwordAtBit__8daE_VA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::onSwordAtBit() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onSwordAtBit__8daE_VA_cFv.s" +void daE_VA_c::onSwordAtBit() { + mAttackSphs[0].OnAtSetBit(); + mAttackSphs[1].OnAtSetBit(); + mAttackSphs[2].OnAtSetBit(); + mAttackSphs[3].OnAtSetBit(); } -#pragma pop /* 807C3A50-807C3AB0 001550 0060+00 3/3 0/0 0/0 .text offSwordShield__8daE_VA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::offSwordShield() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/offSwordShield__8daE_VA_cFv.s" +void daE_VA_c::offSwordShield() { + if (daPy_getPlayerActorClass()->getCutType() == daPy_py_c::CUT_TYPE_WOLF_JUMP) { + mOffTgTimer = 3; + + for (int i = 0; i < 4; i++) { + mAttackSphs[i].OffCoSetBit(); + mAttackSphs[i].OffTgShield(); + mAttackSphs[i].OnTgNoHitMark(); + } + } } -#pragma pop /* 807C3AB0-807C3B58 0015B0 00A8+00 1/1 0/0 0/0 .text setTransDamage__8daE_VA_cFP4cXyz */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setTransDamage(cXyz* param_0) { + u16 hitmark; + if (field_0x138f >= 4) + hitmark = 3; + else + hitmark = 1; + + dComIfGp_setHitMark(hitmark, this, param_0, NULL, NULL, 0); + dComIfGp_getVibration().StartShock(4, 31, cXyz(0.0f, 1.0f, 0.0f)); + setActionMode(ACTION_TRANS_DAMAGE_e, 0); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1305,8 +1686,235 @@ asm void daE_VA_c::setTransDamage(cXyz* param_0) { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setTransDamage__8daE_VA_cFP4cXyz.s" } #pragma pop +#endif /* 807C3B58-807C440C 001658 08B4+00 1/1 0/0 0/0 .text damage_check__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::damage_check() { + daPy_py_c* player = daPy_getPlayerActorClass(); + int cut_type = getWolfCutType(); + mBodyCcStts.Move(); + + if (mAttackSphIFrameTimer == 0) { + for (int i = 0; i < 4; i++) { + if (mAttackSphs[i].ChkTgHit()) { + if (mAttackSphs[i].GetTgHitObj()->ChkAtType(0xD8000000)) { + mAttackSphIFrameTimer = 20; + } else { + mAttackSphIFrameTimer = 10; + } + + def_se_set(&mSound, mAttackSphs[i].GetTgHitObj(), 0x2A, this); + mAttackSphs[i].ClrTgHit(); + } + } + } + + if (mRopesEnabled) { + if (mAction == ACTION_DEMO_OP_WAIT_e) { + for (int i = 0; i < 190; i++) { + if (mLineSphs[i].ChkTgHit()) { + if (mLineSphs[i].GetTgHitObj()->ChkAtType(AT_TYPE_NORMAL_SWORD)) { + setActionMode(ACTION_DEMO_OP_e, 0); + } else { + int var_r24 = i / 19; + field_0x1104[var_r24] = nREG_F(17) + 1.0f; + field_0x112c[var_r24] = 0; + setVibTag(0, var_r24); + } + } + } + } + } else { + if (mNeckSphIFrameTimer == 0 && mNeckSph.ChkTgHit()) { + mAtInfo.mpCollider = mNeckSph.GetTgHitObj(); + + if (mAtInfo.mpCollider->ChkAtType(0xD8000000)) { + if (cut_type == WL_CUT_TYPE_SMALL) { + mNeckSphIFrameTimer = 15; + } else { + mNeckSphIFrameTimer = 20; + } + } else { + mNeckSphIFrameTimer = 10; + } + + if (mAtInfo.mAttackPower <= 1) { + mNeckSphIFrameTimer = KREG_S(8) + 10; + } + + mOffTgTimer = mNeckSphIFrameTimer; + + if (cut_type != WL_CUT_TYPE_SMALL && + mAtInfo.mpCollider->ChkAtType(AT_TYPE_WOLF_ATTACK) && + player->onWolfEnemyHangBite(this)) + { + setActionMode(ACTION_TRANS_BITE_DAMAGE_e, 0); + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 31); + mBodyCylIFrameTimer = 20; + return; + } + + if (mAlphaType == 1 && mGlowBody != 0) { + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 32); + setTransDamage(mNeckSph.GetTgHitPosP()); + return; + } + + if (cut_type == WL_CUT_TYPE_JUMP) { + setActionMode(ACTION_TRANS_THROUGH_e, 0); + mNeckSph.ClrTgHit(); + return; + } + + mNeckSphIFrameTimer = 0; + mOffTgTimer = 0; + } + + if (mBodyCylIFrameTimer == 0) { + BOOL body_hit = false; + dCcD_Cyl hit_cyl; + + if (mBodyCyls[0].ChkTgHit()) { + mAtInfo.mpCollider = mBodyCyls[0].GetTgHitObj(); + body_hit = true; + hit_cyl = mBodyCyls[0]; + } + + if (mBodyCyls[1].ChkTgHit()) { + mAtInfo.mpCollider = mBodyCyls[1].GetTgHitObj(); + body_hit = true; + hit_cyl = mBodyCyls[1]; + } + + if (body_hit) { + if (mAlphaType != 2 && mAtInfo.mpCollider->ChkAtType(0xD8000000) && mGlowBody == 0) + { + mBodyCyls[0].ClrTgHit(); + mBodyCyls[1].ClrTgHit(); + return; + } + + mAtInfo.field_0x18 = 0; + health = 100; + cc_at_check(this, &mAtInfo); + field_0x1368 = 100 - health; + + if (mAtInfo.mpCollider->ChkAtType(0xD8000000)) { + mBodyCylIFrameTimer = 20; + } else { + mBodyCylIFrameTimer = 10; + } + + if (mAtInfo.mAttackPower <= 1) { + mBodyCylIFrameTimer = KREG_S(8) + 10; + } + + mOffTgTimer = mBodyCylIFrameTimer; + + if (mAlphaType == 1) { + setTransDamage(hit_cyl.GetTgHitPosP()); + } else if (mAlphaType == 2) { + if (field_0x1381 == 0) { + field_0x1385 = 0; + + if (mAction == ACTION_OPACI_FLY_e) { + if (mAtInfo.mpCollider->ChkAtType(0x16060)) { + setActionMode(ACTION_OPACI_DAMAGE_e, 0); + } + } else if (mAtInfo.mpCollider->ChkAtType(0x14050)) { + if (field_0x1386 != 0) { + setActionMode(ACTION_OPACI_DOWN_DAMAGE_e, 2); + mDownTimer = l_HIO.mDownTime; + field_0x1381 = 1; + } else { + dComIfGp_getVibration().StopQuake(31); + setActionMode(ACTION_OPACI_DAMAGE_e, 10); + } + } else if (mAtInfo.mAttackPower != 0) { + setActionMode(ACTION_OPACI_DOWN_e, 0); + field_0x1381 = 1; + } + } else { + BOOL var_r26 = false; + + if (player->getCutCount() >= 4) { + if (field_0x1383 != 0) { + var_r26 = true; + } + } else if (((dCcD_GObjInf*)mAtInfo.mpCollider)->GetAtSpl() == 1) { + field_0x1385++; + + if (field_0x1385 >= 2) { + var_r26 = true; + } + } + + int var_r29 = 0; + + if (mAtInfo.mpCollider->ChkAtType(AT_TYPE_NORMAL_SWORD)) { + if (mAtInfo.mpCollider->GetAtAtp() >= 4) { + if (player->checkMasterSwordEquip()) { + if (player->getSwordAtUpTime() != 0) { + var_r29 = 6; + } else { + var_r29 = 2; + } + } else if (player->getSwordAtUpTime() != 0) { + var_r29 = 2; + } else { + var_r29 = 1; + } + } else if (player->checkMasterSwordEquip()) { + if (player->getSwordAtUpTime() != 0 || var_r26) { + var_r29 = 2; + } + } else if (var_r26) { + if (player->getSwordAtUpTime() != 0) { + var_r29 = 2; + } else { + var_r29 = 1; + } + } + } else if (mAtInfo.mpCollider->ChkAtType(0xD8000000) && + (((dCcD_GObjInf*)mAtInfo.mpCollider)->GetAtSpl() == 1 || + mAtInfo.mpCollider->GetAtAtp() >= 4)) + { + var_r29 = 1; + } + + field_0x1383++; + + if (var_r29 != 0) { + field_0x1385 = 0; + field_0x1384 += var_r29; + setActionMode(ACTION_OPACI_DOWN_e, 5); + } else if (mAtInfo.mpCollider->ChkAtType(0x4050)) { + setActionMode(ACTION_OPACI_DOWN_DAMAGE_e, 2); + } else { + if (player->getCutCount() > 1) { + field_0x1382 ^= 1; + } else if (cM_rnd() < 0.5f) { + field_0x1382 = 0; + } else { + field_0x1382 = 1; + } + + setActionMode(ACTION_OPACI_DOWN_DAMAGE_e, field_0x1382); + } + + field_0x1381 = 1; + } + } + + mBodyCyls[0].ClrTgHit(); + mBodyCyls[1].ClrTgHit(); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1315,6 +1923,7 @@ asm void daE_VA_c::damage_check() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/damage_check__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C440C-807C44A0 001F0C 0094+00 1/1 0/0 0/0 .text __as__8dCcD_CylFRC8dCcD_Cyl */ #pragma push @@ -1372,14 +1981,28 @@ extern "C" asm void __dt__8cM3dGAabFv() { #pragma pop /* 807C4844-807C49B4 002344 0170+00 1/1 0/0 0/0 .text setFireEffect__8daE_VA_cFi */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setFireEffect(int param_0) { + cXyz scale(1.0f, 1.0f, 1.0f); + int idx = param_0 * 3; + + field_0x10f80[idx] = + dComIfGp_particle_set(field_0x10f80[idx], 0x3AD, &field_0x1140[param_0], NULL, &scale); + field_0x10f80[idx + 1] = + dComIfGp_particle_set(field_0x10f80[idx + 1], 0x3AF, &field_0x1140[param_0], NULL, &scale); + field_0x10f80[idx + 2] = + dComIfGp_particle_set(field_0x10f80[idx + 2], 0x3AE, &field_0x1140[param_0], NULL, &scale); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::setFireEffect(int param_0) { - nofralloc +asm void daE_VA_c::setFireEffect(int param_0){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setFireEffect__8daE_VA_cFi.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CED44-807CED48 00009C 0004+00 0/0 0/0 0/0 .rodata @5085 */ @@ -1394,14 +2017,46 @@ SECTION_RODATA static f32 const lit_5146 = 10.0f; COMPILER_STRIP_GATE(0x807CED48, &lit_5146); /* 807C49B4-807C4B54 0024B4 01A0+00 1/1 0/0 0/0 .text setFootEffect__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setFootEffect() { + if (!field_0x1388) { + int var_r6 = 0; + if (current.pos.y < 10.0f) { + var_r6 = 2; + } + + cXyz pos(current.pos); + cXyz scale(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); + + static u16 va_foot_smoke_id[] = {0x8891, 0x8892, 0x85C4, 0x85C5}; + mFootSmokeEmtrIDs[0] = + dComIfGp_particle_set(mFootSmokeEmtrIDs[0], va_foot_smoke_id[var_r6], &pos, &tevStr, + &shape_angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + mFootSmokeEmtrIDs[1] = + dComIfGp_particle_set(mFootSmokeEmtrIDs[1], va_foot_smoke_id[var_r6 + 1], &pos, &tevStr, + &shape_angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mFootSmokeEmtrIDs[0]); + if (emitter != NULL) { + emitter->setGlobalAlpha(mFootSmokeAlpha); + } + + emitter = dComIfGp_particle_getEmitter(mFootSmokeEmtrIDs[1]); + if (emitter != NULL) { + emitter->setGlobalAlpha(mFootSmokeAlpha); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::setFootEffect() { - nofralloc +asm void daE_VA_c::setFootEffect(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setFootEffect__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CED4C-807CED50 0000A4 0004+00 0/1 0/0 0/0 .rodata @5224 */ @@ -1412,6 +2067,45 @@ COMPILER_STRIP_GATE(0x807CED4C, &lit_5224); #pragma pop /* 807C4B54-807C4DFC 002654 02A8+00 1/1 0/0 0/0 .text setWeponEffect__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setWeponEffect() { + cXyz pos; + cXyz scale(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); + + switch (mWeponEfMode) { + case 1: + pos.set(11.0f, 0.0f, -7.0f); + for (int i = 0; i < 3; i++) { + mWeponEffEmtrIDs[i] = + dComIfGp_particle_set(mWeponEffEmtrIDs[i], va_wepon_eff_id1[i], &pos, &tevStr, + &shape_angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + } + break; + case 2: + pos.set(11.0f, 0.0f, -7.0f); + field_0x10f74 = dComIfGp_particle_set(field_0x10f74, 0x8601, &pos, &tevStr, &shape_angle, + &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + /* fallthrough */ + case 3: + pos = current.pos; + MtxP model_mtx = mpWeaponModel->getBaseTRMtx(); + mSound.startCreatureSoundLevel(Z2SE_EN_VA_SWD_FLY, 0, -1); + + for (int i = 0; i < 3; i++) { + mWeponEffEmtrIDs[i] = + dComIfGp_particle_set(mWeponEffEmtrIDs[i], va_wepon_eff_id2[i], &pos, &tevStr, + &shape_angle, &scale, 0xFF, NULL, -1, NULL, NULL, NULL); + + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mWeponEffEmtrIDs[i]); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model_mtx); + } + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1420,8 +2114,25 @@ asm void daE_VA_c::setWeponEffect() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setWeponEffect__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C4DFC-807C4F10 0028FC 0114+00 1/1 0/0 0/0 .text setBugsEffect__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setBugsEffect() { + J3DModel* model = mpMorf->getModel(); + JGeometry::TVec3 scale(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); + + for (int i = 0; i < 12; i++) { + JPABaseEmitter* emitter = + dComIfGp_particle_set(va_bugs_eff_id[i], ¤t.pos, NULL, NULL); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(model->getAnmMtx(va_bugs_eff_jnt[i])); + emitter->setGlobalParticleScale(scale); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1430,8 +2141,20 @@ asm void daE_VA_c::setBugsEffect() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setBugsEffect__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C4F10-807C4FCC 002A10 00BC+00 4/4 0/0 0/0 .text setWeponLandEffect__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setWeponLandEffect() { + cXyz scale(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); + + for (int i = 0; i < 3; i++) { + dComIfGp_particle_set(va_weapon_land_eff_id[i], ¤t.pos, &tevStr, &shape_angle, + &scale); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1440,8 +2163,20 @@ asm void daE_VA_c::setWeponLandEffect() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setWeponLandEffect__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C4FCC-807C50A4 002ACC 00D8+00 1/1 0/0 0/0 .text setWeponGlow__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setWeponGlow() { + mWeponEffEmtrIDs[0] = dComIfGp_particle_set(mWeponEffEmtrIDs[0], 0x8600, ¤t.pos, &tevStr); + + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mWeponEffEmtrIDs[0]); + if (emitter != NULL) { + emitter->setGlobalSRTMatrix(mpWeaponModel->getBaseTRMtx()); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1450,8 +2185,17 @@ asm void daE_VA_c::setWeponGlow() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setWeponGlow__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C50A4-807C5188 002BA4 00E4+00 1/1 0/0 0/0 .text setWeponFlashScreen__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setWeponFlashScreen() { + cXyz pos(0.0f, 0.0f, 0.0f); + dComIfGp_particle_set(0x85FE, &pos, &tevStr, NULL, NULL); + dComIfGp_particle_set(0x85FF, &pos, &tevStr, NULL, NULL); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1460,8 +2204,20 @@ asm void daE_VA_c::setWeponFlashScreen() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setWeponFlashScreen__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C5188-807C5258 002C88 00D0+00 1/1 0/0 0/0 .text setMagicEffect__8daE_VA_cFi */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setMagicEffect(int param_0) { + int idx = param_0 * 3; + + for (int i = 0; i < 3; i++) { + field_0x10f80[idx + i] = dComIfGp_particle_set(field_0x10f80[idx + i], va_magic_eff_id[i], + &mMagicPos[param_0], NULL, NULL); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1470,8 +2226,16 @@ asm void daE_VA_c::setMagicEffect(int param_0) { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setMagicEffect__8daE_VA_cFi.s" } #pragma pop +#endif /* 807C5258-807C5338 002D58 00E0+00 1/1 0/0 0/0 .text setMagicHitEffect__8daE_VA_cFi */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setMagicHitEffect(int param_0) { + dComIfGp_particle_set(0x8846, &mMagicPos[param_0], NULL, NULL); + dComIfGp_particle_set(0x8847, &mMagicPos[param_0], NULL, NULL); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1480,8 +2244,17 @@ asm void daE_VA_c::setMagicHitEffect(int param_0) { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setMagicHitEffect__8daE_VA_cFi.s" } #pragma pop +#endif /* 807C5338-807C53A8 002E38 0070+00 1/1 0/0 0/0 .text demo_skip__8daE_VA_cFi */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::demo_skip(int param_0) { + Z2GetAudioMgr()->bgmStreamStop(30); + cDmr_SkipInfo = 1; + dStage_changeScene(1, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1490,16 +2263,17 @@ asm void daE_VA_c::demo_skip(int param_0) { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/demo_skip__8daE_VA_cFi.s" } #pragma pop +#endif /* 807C53A8-807C53DC 002EA8 0034+00 1/1 0/0 0/0 .text DemoSkipCallBack__8daE_VA_cFPvi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::DemoSkipCallBack(void* param_0, int param_1) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/DemoSkipCallBack__8daE_VA_cFPvi.s" +int daE_VA_c::DemoSkipCallBack(void* i_this, int param_1) { + if (i_this != NULL) { + ((daE_VA_c*)i_this)->demo_skip(param_1); + return 1; + } + + return 0; } -#pragma pop /* ############################################################################################## */ /* 807CED50-807CED54 0000A8 0004+00 1/1 0/0 0/0 .rodata @5407 */ @@ -1511,14 +2285,24 @@ SECTION_RODATA static f32 const lit_5408 = 65.0f; COMPILER_STRIP_GATE(0x807CED54, &lit_5408); /* 807C53DC-807C53FC 002EDC 0020+00 2/2 0/0 0/0 .text getRopeLength__8daE_VA_cFi */ +// matches with literals +#ifdef NONMATCHING +f32 daE_VA_c::getRopeLength(int param_0) { + if (param_0 < 5) { + return nREG_F(18) + 115.0f; + } else { + return nREG_F(19) + 65.0f; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::getRopeLength(int param_0) { - nofralloc +asm f32 daE_VA_c::getRopeLength(int param_0){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/getRopeLength__8daE_VA_cFi.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CED58-807CED5C 0000B0 0004+00 0/2 0/0 0/0 .rodata @5833 */ @@ -1655,7 +2439,16 @@ static u8 lit_5418[12]; #pragma pop /* 807CF57C-807CF5F4 00010C 0078+00 1/2 0/0 0/0 .bss line_end_pos */ +#ifdef NONMATCHING +static cXyz line_end_pos[] = { + cXyz(0.0f, 5.0f, 990.0f), cXyz(971.0f, 5.0f, 326.0f), cXyz(582.0f, 5.0f, -801.0f), + cXyz(-582.0f, 5.0f, -801.0f), cXyz(-942.0f, 5.0f, 306.0f), cXyz(202.0f, 5.0f, 501.0f), + cXyz(559.0f, 5.0f, -17.0f), cXyz(458.0f, 5.0f, -306.0f), cXyz(-131.0f, 5.0f, -524.0f), + cXyz(-414.0f, 5.0f, 347.0f), +}; +#else static u8 line_end_pos[120]; +#endif /* 807CF5F4-807CF600 000184 000C+00 0/1 0/0 0/0 .bss @5419 */ #pragma push @@ -1718,9 +2511,193 @@ static u8 lit_5428[12]; #pragma pop /* 807CF66C-807CF6E4 0001FC 0078+00 1/2 0/0 0/0 .bss line_start_pos */ +#ifdef NONMATCHING +static cXyz line_start_pos[] = { + cXyz(-5.0f, -10.0f, -15.0f), cXyz(0.0f, 0.0f, -10.0f), cXyz(0.0f, -10.0f, -10.0f), + cXyz(0.0f, 0.0f, -5.0f), cXyz(0.0f, -5.0f, -5.0f), cXyz(0.0f, 25.0f, -15.0f), + cXyz(0.0f, 5.0f, -10.0f), cXyz(3.0f, 25.0f, -3.0f), cXyz(8.0f, 25.0f, 0.0f), + cXyz(-8.0f, 23.0f, 8.0f), +}; +#else static u8 line_start_pos[120]; +#endif /* 807C53FC-807C5CF0 002EFC 08F4+00 2/2 0/0 0/0 .text calcOpRopePos__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::calcOpRopePos() { + cXyz sp60; + cXyz sp6C; + cXyz sp78; + cXyz sp84; + cXyz sp90; + + int idx; + s16 var_r30; + + for (int i = 0; i < 10; i++) { + int temp_3C = i * 10; + mDoMtx_stack_c::transS(field_0x122c); + mDoMtx_stack_c::transM(0.0f, 150.0f, 0.0f); + mDoMtx_stack_c::ZXYrotM(field_0x1238); + mDoMtx_stack_c::transM(0.0f, -150.0f, 0.0f); + mDoMtx_stack_c::transM(0.0f, 400.0f, 0.0f); + mDoMtx_stack_c::XrotM(field_0x123e); + mDoMtx_stack_c::transM(0.0f, -400.0f, 0.0f); + mDoMtx_stack_c::transM(line_start_pos[i]); + mDoMtx_stack_c::multVecZero(&sp60); + + sp6C = line_end_pos[i]; + if (i == nREG_S(0)) { + sp6C.x += nREG_F(8); + sp6C.z += nREG_F(9); + } + + f32 var_f31 = 0.0f; + + if (field_0x1104[i]) { + field_0x112c[i] += nREG_S(0) + 0x800; + cLib_chaseF(&field_0x1104[i], 0.0f, nREG_F(19) + 0.01f); + + var_r30 = (s16)cLib_targetAngleY(&sp60, &sp6C); + var_f31 = field_0x1104[i] * cM_ssin(field_0x112c[i]); + } + + for (int j = 0; j < 10; j++) { + idx = temp_3C + j; + + if (mRopeCutStatus[idx] & 2) { + if (j == 0) { + field_0x994[idx] = sp60; + } else { + field_0xe44[idx].y = 0x3130; + + if (abs(field_0xe44[idx].z) <= 0x20 && abs(field_0xe44[idx].x + 0x4000) <= 0x20) + { + field_0xe44[idx].x = -0x4000; + field_0xe44[idx].z = 0; + } else if (field_0xe44[idx].x < -0x4000) { + field_0xe44[idx].z += 0x20; + } else { + field_0xe44[idx].z -= 0x20; + } + + cLib_chaseAngleS(&field_0xe44[idx].z, 0, 8); + field_0xe44[idx].x += field_0xe44[idx].z; + + f32 rope_len = getRopeLength(i); + sp84.y = rope_len * cM_ssin(field_0xe44[idx].x); + + f32 temp_f31_2 = rope_len * cM_scos(field_0xe44[idx].x); + sp84.x = temp_f31_2 * cM_scos(field_0xe44[idx].y); + sp84.z = temp_f31_2 * cM_ssin(field_0xe44[idx].y); + + sp78 = field_0x994[idx - 1] + sp84; + cLib_chasePos(&field_0x994[idx], sp78, 10.0f); + } + } else if (mRopeCutStatus[idx] & 4) { + field_0x994[idx].y += -5.0f; + if (field_0x994[idx].y < 5.0f) { + field_0x994[idx].y = 5.0f; + } + } else if (mRopeCutStatus[idx] & 8) { + field_0x994[idx].y += -3.0f; + if (field_0x994[idx].y < 5.0f) { + field_0x994[idx].y = 5.0f; + } + } else { + if (j == 0) { + field_0x994[idx] = sp60; + } else if (j == 9) { + field_0x994[idx] = sp6C; + } else { + sp84 = field_0x994[idx] - sp60; + sp84.normalizeZP(); + + sp90 = sp6C - field_0x994[idx]; + sp90.normalizeZP(); + + sp78 = (sp84 * line_pull_power[10 - j]) * (nREG_F(12) + 300.0f); + sp78 += (sp90 * line_pull_power[j]) * (nREG_F(13) + 300.0f); + sp78.y += -5.0f; + sp78.normalizeZP(); + + field_0x994[idx] = field_0x994[idx - 1] + (sp78 * getRopeLength(i)); + if (field_0x994[idx].y < 5.0f) { + field_0x994[idx].y = 5.0f; + } + + if (var_f31) { + f32 temp_f29 = (nREG_F(16) + 0.2f) * ((f32)(10 - j) * var_f31); + field_0x994[idx].x += temp_f29 * cM_scos(var_r30); + field_0x994[idx].z += temp_f29 * cM_ssin(var_r30); + } + } + } + } + } + + cXyz* pos; + for (int i = 0; i < 11; i++) { + pos = mRope.getPos(i); + int temp_r5_2; + if (i != 10) { + int temp_r5 = i * 10; + int sp68 = field_0x11b8[i] / getRopeLength(i); + + for (int j = 0; j < 10; j++, pos++) { + temp_r5_2 = temp_r5 + j; + *pos = field_0x994[temp_r5_2]; + + if (sp68 >= 4) { + if (j <= sp68 && field_0x11b8[i]) { + *pos = field_0x1140[i]; + mRopeCutStatus[temp_r5_2] |= 1; + } else if ((mRopeCutStatus[temp_r5_2] & 0x10) && j < 4) { + *pos = field_0x994[temp_r5 + 4]; + } + } else if ((mRopeCutStatus[temp_r5_2] & 0x10) && j < 4) { + *pos = field_0x994[temp_r5 + 4]; + } else if (j <= sp68 && field_0x11b8[i]) { + *pos = field_0x1140[i]; + mRopeCutStatus[temp_r5_2] |= 1; + } + } + + } else { + int temp_r5 = 50; + int sp68 = field_0x11b8[5] / getRopeLength(5); + + for (int j = 0; j < 10; j++, pos++) { + temp_r5_2 = temp_r5 + j; + *pos = field_0x994[temp_r5_2]; + + if (sp68 > 3) { + *pos = field_0x994[temp_r5 + 9]; + } else if (j <= sp68 && field_0x11b8[5]) { + *pos = field_0x1140[5]; + } else if ((mRopeCutStatus[temp_r5_2] & 0x10) && j >= 3) { + *pos = field_0x994[temp_r5 + 3]; + } + } + } + } + + for (int i = 0; i < 40; i++) { + int idx = va_tag_set_num[i]; + + if (mRopeCutStatus[idx] & 1) { + mCardFlags[i] |= 0x80; + } + + if (mRopeCutStatus[idx] & 0xC) { + mCardFlags[i] |= 0x8; + } + + field_0x660[i].y = cLib_targetAngleY(&field_0x994[idx - 1], &field_0x994[idx + 1]) + 0x4000; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1729,16 +2706,36 @@ asm void daE_VA_c::calcOpRopePos() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcOpRopePos__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C5CF0-807C5DF4 0037F0 0104+00 1/1 0/0 0/0 .text onRopeCutStatus__8daE_VA_cFiii */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::onRopeCutStatus(int param_0, int param_1, int param_2) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/onRopeCutStatus__8daE_VA_cFiii.s" +void daE_VA_c::onRopeCutStatus(int param_0, int param_1, int param_2) { + int var_r31 = param_0 * 10; + + for (int i = 0; i < 10; i++) { + int var_r24 = var_r31 + i; + + if (param_2 == 0) { + mRopeCutStatus[var_r24] |= 0x10; + } + + if (i < param_1) { + mRopeCutStatus[var_r24] |= 2; + + if (param_2 == 0) { + field_0xe44[var_r24].x = + cLib_targetAngleX(&field_0x994[var_r24 - 1], &field_0x994[var_r24]); + field_0xe44[var_r24].y = + cLib_targetAngleY(&field_0x994[var_r24 - 1], &field_0x994[var_r24]); + field_0xe44[var_r24].z = 0; + } + } else if (param_2 == 0) { + mRopeCutStatus[var_r24] |= 4; + } else { + mRopeCutStatus[var_r24] |= 8; + } + } } -#pragma pop /* ############################################################################################## */ /* 807CED88-807CED8C 0000E0 0004+00 1/1 0/0 0/0 .rodata @5877 */ @@ -1746,14 +2743,22 @@ SECTION_RODATA static f32 const lit_5877 = 7168.0f; COMPILER_STRIP_GATE(0x807CED88, &lit_5877); /* 807C5DF4-807C5EAC 0038F4 00B8+00 1/1 0/0 0/0 .text setVibRope__8daE_VA_cFff */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setVibRope(f32 param_0, f32 param_1) { + field_0x1336 += (s16)(param_1 * 7168.0f); + field_0x122c.y += (s16)(param_0 * cM_ssin(field_0x1336)); + field_0x123e += (s16)(param_0 * 50.0f * cM_ssin(field_0x1336)); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::setVibRope(f32 param_0, f32 param_1) { - nofralloc +asm void daE_VA_c::setVibRope(f32 param_0, f32 param_1){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setVibRope__8daE_VA_cFff.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CED8C-807CED90 0000E4 0004+00 1/1 0/0 0/0 .rodata @5913 */ @@ -1765,14 +2770,50 @@ SECTION_RODATA static f32 const lit_5914 = 4.0f; COMPILER_STRIP_GATE(0x807CED90, &lit_5914); /* 807C5EAC-807C6164 0039AC 02B8+00 2/2 0/0 0/0 .text setVibTag__8daE_VA_cFii */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setVibTag(int param_0, int param_1) { + for (int i = 0; i < 40; i++) { + if (param_1 == -1 || param_1 == va_tag_set_num[i] / 10) { + mCardFlags[i] |= 4; + + if (!(mCardFlags[i] & 8)) { + switch (param_0) { + case 0: + field_0x750[i].x += TAG_VIB_ANGLE[(int)cM_rndF(3.9f)]; + field_0x750[i].z += TAG_VIB_ANGLE[(int)cM_rndF(3.9f)]; + field_0x840[i].x = TAG_VIB_WIDTH[(int)(cM_rndF(3.9f) + 4.0f)]; + field_0x840[i].z = TAG_VIB_WIDTH[(int)(cM_rndF(3.9f) + 4.0f)]; + break; + case 1: + field_0x750[i].x += TAG_VIB_ANGLE[i & 3]; + field_0x750[i].z += TAG_VIB_ANGLE[(i >> 1) & 3]; + field_0x840[i].x = TAG_VIB_WIDTH[i & 3]; + field_0x840[i].z = TAG_VIB_WIDTH[(i >> 2) & 3]; + break; + case 2: + field_0x750[i].x += TAG_VIB_ANGLE[(i & 1) + 2]; + field_0x750[i].z += TAG_VIB_ANGLE[((i >> 1) & 1) + 2]; + field_0x840[i].x = TAG_VIB_WIDTH[(i & 3) + 4]; + field_0x840[i].z = TAG_VIB_WIDTH[((i >> 2) & 3) + 4]; + break; + } + + field_0x660[i].x = field_0x840[i].x * cM_ssin(field_0x750[i].x); + field_0x660[i].z = field_0x840[i].z * cM_ssin(field_0x750[i].z); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::setVibTag(int param_0, int param_1) { - nofralloc +asm void daE_VA_c::setVibTag(int param_0, int param_1){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setVibTag__8daE_VA_cFii.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CED94-807CED98 0000EC 0004+00 0/1 0/0 0/0 .rodata @5960 */ @@ -1783,6 +2824,55 @@ COMPILER_STRIP_GATE(0x807CED94, &lit_5960); #pragma pop /* 807C6164-807C638C 003C64 0228+00 2/2 0/0 0/0 .text calcTagAngle__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::calcTagAngle() { + for (int i = 0; i < 40; i++) { + if (mCardFlags[i] & 8) { + f32 var_f30; + switch (mCardFlags[i] & 3) { + case 0: + var_f30 = 160.0f; + break; + case 1: + var_f30 = 100.0f; + break; + case 2: + var_f30 = 50.0f; + break; + } + + f32 var_f31 = field_0x994[va_tag_set_num[i]].y - 5.0f; + if (var_f31 < var_f30) { + if (var_f31) { + f32 var_f29 = JMAFastSqrt(var_f30 * var_f30 - var_f31 * var_f31); + if (field_0x660[i].x < 0) { + field_0x660[i].x = -cM_atan2s(var_f29, var_f31); + } else { + field_0x660[i].x = cM_atan2s(var_f29, var_f31); + } + } + + field_0x660[i].z = 0; + mCardFlags[i] |= 4; + } + } + + if (!(mCardFlags[i] & 4)) { + field_0x750[i].x += TAG_VIB_ANGLE[i & 1]; + field_0x750[i].z += TAG_VIB_ANGLE[(i >> 1) & 1]; + + cLib_chaseAngleS(&field_0x840[i].x, 0, 4); + cLib_chaseAngleS(&field_0x840[i].z, 0, 4); + + field_0x660[i].x = field_0x840[i].x * cM_ssin(field_0x750[i].x); + field_0x660[i].z = field_0x840[i].z * cM_ssin(field_0x750[i].z); + } + + mCardFlags[i] &= ~4; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1791,16 +2881,48 @@ asm void daE_VA_c::calcTagAngle() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcTagAngle__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C638C-807C6564 003E8C 01D8+00 1/1 0/0 0/0 .text calcRopeFirePos__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::calcRopeFirePos() { + int temp_r28; + int var_r24; + f32 var_f29; + BOOL var_r31; + + cXyz sp48; + for (int i = 0; i < 10; i++) { + field_0x11b8[i] += nREG_F(15) + 60.0f; + + var_r24 = field_0x11b8[i] / getRopeLength(i); + var_f29 = field_0x11b8[i] - ((f32)var_r24 * getRopeLength(i)); + var_r31 = 1; + + if (var_r24 < 9) { + temp_r28 = var_r24 + (i * 10); + sp48 = field_0x994[temp_r28 + 1] - field_0x994[temp_r28]; + sp48.normalizeZP(); + field_0x1140[i] = field_0x994[temp_r28] + (sp48 * var_f29); + } else if (cLib_chasePos(&field_0x1140[i], field_0x994[(i * 10) + 9], nREG_F(15) + 60.0f)) { + var_r31 = 0; + } + + if (var_r31) { + setFireEffect(i); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::calcRopeFirePos() { - nofralloc +asm void daE_VA_c::calcRopeFirePos(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcRopeFirePos__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CED98-807CED9C 0000F0 0004+00 0/1 0/0 0/0 .rodata @6069 */ @@ -1825,14 +2947,59 @@ COMPILER_STRIP_GATE(0x807CEDA0, &lit_6071); #pragma pop /* 807C6564-807C67A4 004064 0240+00 1/1 0/0 0/0 .text executeDemoOpWait__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeDemoOpWait() { + cXyz sp34; + + switch (mMode) { + case 0: + mRopesEnabled = true; + mpWeaponBrk->setPlaySpeed(0.0f); + mpWeaponBrk->setFrame(0.0f); + + for (int i = 0; i < 10; i++) { + for (int j = 0; j < 10; j++) { + if (i < 5) { + field_0x994[j + i * 10].x = j * 110.0f * cM_ssin(i * 0x3333); + field_0x994[j + i * 10].z = j * 110.0f * cM_scos(i * 0x3333); + field_0x994[j + i * 10].y = 275.0f - j * 30.0f; + } else { + field_0x994[j + i * 10].x = j * 60.0f * cM_ssin(i * 0x3333); + field_0x994[j + i * 10].z = j * 60.0f * cM_scos(i * 0x3333); + field_0x994[j + i * 10].y = 275.0f - j * 30.0f; + } + } + } + + field_0x122c.set(51.0f, 0.0f, 0.0f); + field_0x1238.set(0, -0x5000, -0x8000); + field_0x123e = 0; + mMode = 1; + mDrawRopes = true; + case 1: + for (int i = 0; i < 190; i++) { + if (!daPy_getPlayerActorClass()->i_checkNowWolf()) { + mLineSphs[i].OffTgShield(); + } else { + mLineSphs[i].OnTgShield(); + } + } + calcOpRopePos(); + break; + } + + calcTagAngle(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeDemoOpWait() { - nofralloc +asm void daE_VA_c::executeDemoOpWait(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeDemoOpWait__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEDA4-807CEDA8 0000FC 0004+00 0/1 0/0 0/0 .rodata @6345 */ @@ -1871,14 +3038,309 @@ COMPILER_STRIP_GATE(0x807CEDB4, &lit_6349); #pragma pop /* 807C67A4-807C7534 0042A4 0D90+00 2/1 0/0 0/0 .text executeDemoOp__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeDemoOp() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + cXyz sp2C; + cXyz sp38; + daPy_py_c* player = daPy_getPlayerActorClass(); + + calcOpRopePos(); + + switch (mMode) { + case 0: + if (!eventInfo.i_checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.i_onCondition(2); + return; + } + + dComIfGs_onOneZoneSwitch(9, fopAcM_GetRoomNo(this)); + player->changeOriginalDemo(); + + sp38.set(270.0f, 0.0f, 210.0f); + player->setPlayerPosAndAngle(&sp38, -0x6000, 0); + player->changeDemoMode(1, 0, 0, 0); + + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + + mDemoCamEye.set(300.0f, 300.0f, 600.0f); + mDemoCamCenter.set(100.0f, 180.0f, 200.0f); + mDemoCamBank = 60.0f; + mDemoModeTimer = nREG_S(4) + 60; + field_0x14a8 = 2.5f; + + onRopeCutStatus(5, 4, 0); + + Z2GetAudioMgr()->seStart(Z2SE_EN_VA_OPENING1, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + mMode = 1; + Z2GetAudioMgr()->bgmStreamPrepare(0x200000A); + Z2GetAudioMgr()->bgmStreamPlay(); + return; + case 1: + sp38.set(270.0f, 0.0f, 210.0f); + player->setPlayerPosAndAngle(&sp38, -0x6000, 0); + sp38.set(-50.0f, 90.0f, -100.0f); + + cLib_chasePos(&mDemoCamEye, sp38, field_0x14a8); + cLib_chasePos(&mDemoCamCenter, sp38, field_0x14a8); + + if (mDemoModeTimer == 0) { + mDownTimer = 98; + mpWeaponBrk->setPlaySpeed(nREG_F(1) + 1.0f); + mpWeaponBrk->setFrame(0.0f); + field_0x1336 = 0; + mMode = 2; + mDemoModeTimer = 60 - nREG_S(4); + } + break; + case 2: + if (mpWeaponBrk->checkFrame(48.0f)) { + mpWeaponBrk->setPlaySpeed(0.0f); + } + + if (mDemoModeTimer != 0) { + sp38.set(-50.0f, 90.0f, -100.0f); + cLib_chasePos(&mDemoCamEye, sp38, field_0x14a8); + cLib_chasePos(&mDemoCamCenter, sp38, field_0x14a8); + + if (mDemoModeTimer < 25) { + cLib_chaseF(&field_0x14a8, 0.0f, 0.1f); + + if (mDemoModeTimer > 15 && mDemoModeTimer < 25) { + setVibRope(1.0f, 1.0f); + } + + if (mDemoModeTimer > 12 && mDemoModeTimer < 22) { + setVibTag(1, -1); + } + + if (mDemoModeTimer == 0) { + mMode = 3; + } + } + } else if (mDownTimer == 0) { + mMode = 4; + mDemoModeTimer = 75; + } + break; + case 4: + setWeponGlow(); + + if (mDemoModeTimer < 50) { + setVibRope(1.0f, 1.3f); + + if (mDemoModeTimer < 45) { + setVibTag(2, -1); + } + + if (mDemoModeTimer == 0) { + setWeponFlashScreen(); + mMode = 5; + mDemoModeTimer = 50; + + for (int i = 0; i < 10; i++) { + field_0x1140[i] = field_0x994[i * 10]; + onRopeCutStatus(i, 0, 1); + } + + field_0x14a8 = 50.0f; + + dComIfGp_getVibration().StartQuake(6, 31, cXyz(0.0f, 1.0f, 0.0f)); + sp38.set(400.0f, 0.0f, 300.0f); + player->setPlayerPosAndAngle(&sp38, -0x6000, 0); + player->changeDemoMode(0x17, 0, 0, 0); + return; + } + } + break; + case 5: + sp38.set(459.0f, 394.0f, 920.0f); + cLib_chasePos(&mDemoCamEye, sp38, field_0x14a8); + + sp38.set(259.0f, 275.0f, 519.0f); + cLib_chasePos(&mDemoCamCenter, sp38, field_0x14a8); + cLib_chaseF(&field_0x14a8, 0.0f, 1.0f); + + if (mDemoModeTimer == 20) { + dComIfGp_getVibration().StopQuake(31); + } + + setVibRope(1.0f, 1.3f); + setVibTag(2, -1); + calcRopeFirePos(); + + if (mDemoModeTimer == 0) { + sp38.set(800.0f, 0.0f, 380.0f); + player->setPlayerPosAndAngle(&sp38, -0x5000, 0); + mMode = 6; + + mpWeaponBrk->setPlaySpeed(1.0f); + mDemoCamCenter.set(field_0x122c.x, 150.0f, field_0x122c.z); + field_0x14ac = 0x1800; + cLib_chaseAngleS(&field_0x14ac, 0x2800, 0x20); + + sp38.set(0.0f, 150.0f, 0.0f); + sp2C.set(0.0f, 50.0f, 400.0f); + cLib_offsetPos(&mDemoCamEye, &sp38, field_0x14ac, &sp2C); + mDemoCamBank = 60.0f; + mWeponEfMode = 1; + mDemoModeTimer = 130; + + if (!player->i_checkNowWolf()) { + player->changeDemoMode(0x17, 0, 0, 0); + } + + Z2GetAudioMgr()->seStart(Z2SE_EN_VA_OPENING2, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + return; + } + break; + case 6: + mMode = 7; + field_0x122c.y = -100.0f; + case 7: + if (mDemoModeTimer > 115 || (mDemoModeTimer < 90 && mDemoModeTimer > 60)) { + field_0x122c.y += 1.0f; + setVibRope(2.0f, 1.0f); + } else if (mDemoModeTimer < 10) { + field_0x122c.y += 1.0f; + setVibRope(2.0f, 1.3f); + } else if (mDemoModeTimer < 30) { + field_0x122c.y += nREG_F(1) + 5.0f; + setVibRope(2.0f, 1.0f); + } else { + field_0x122c.y += 0.2f; + setVibRope(1.0f, 1.0f); + } + + mDemoCamCenter.set(field_0x122c.x, 150.0f, field_0x122c.z); + cLib_chaseAngleS(&field_0x14ac, 0x2800, 0x20); + + sp38.set(0.0f, 150.0f, 0.0f); + sp2C.set(0.0f, 50.0f, 400.0f); + cLib_offsetPos(&mDemoCamEye, &sp38, field_0x14ac, &sp2C); + + if (mDemoModeTimer == 0) { + mMode = 8; + mDemoModeTimer = 300; + field_0x14a4 = 600.0f; + mWeponEfMode = 2; + field_0x1336 = 0x1400; + field_0x1334 = 0xA00; + field_0x1310 = 28.0f; + field_0x123e = 0; + mDrawRopes = false; + mKankyoColType = 4; + } + break; + case 8: + mDemoCamCenter.set(field_0x122c.x, field_0x122c.y + 150.0f, field_0x122c.z); + sp38.set(950.0f, 50.0f, 550.0f); + cLib_chasePos(&mDemoCamEye, sp38, 15.0f); + + field_0x1310--; + if (field_0x1310 < -10.0f) { + field_0x1310 = -10.0f; + } + + field_0x122c.y += field_0x1310; + + if (mDemoModeTimer < 267) { + cLib_chaseAngleS(&field_0x1336, 0, 0x100); + } + + if (mDemoModeTimer < 254) { + cLib_chaseAngleS(&field_0x1334, 0, 0x100); + } + + field_0x1238.z += field_0x1336; + field_0x1238.x += field_0x1334; + + if (mDemoModeTimer < 270) { + cLib_addCalcAngleS(&field_0x1238.x, -0x0C03, 4, 0x200, 0x100); + cLib_addCalcAngleS(&field_0x1238.y, -0x43B1, 4, 0x200, 0x100); + cLib_addCalcAngleS(&field_0x1238.z, -0x195D, 4, 0x200, 0x100); + } + + sp38.set(26.0f, 187.0f, 236.0f); + f32 old = field_0x122c.y; + + if (cLib_chasePosXZ(&field_0x122c, sp38, 4.2f)) { + field_0x122c.y = old; + } + + if (field_0x1310 < 0.0f && field_0x122c.y < 192.0f) { + field_0x122c = sp38; + field_0x1238.set(-0x0C03, -0x43B1, -0x195D); + + setBck(ANM_INVI_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 3.0f, 1.0f); + mMode = 9; + field_0x1240 = 1; + mDemoModeTimer = 60; + mWeponEfMode = 3; + } + break; + case 9: + cLib_chaseAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 0x98); + current.angle.y = shape_angle.y; + + sp38.set(field_0x122c.x, field_0x122c.y + 150.0f, field_0x122c.z); + cLib_chasePos(&mDemoCamCenter, sp38, 5.0f); + + sp38.set(950.0f, 50.0f, 550.0f); + cLib_chasePos(&mDemoCamEye, sp38, 15.0f); + + if (mDemoModeTimer == 0) { + setBck(ANM_OP_ATTACK_A_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mMode = 10; + } + break; + case 10: + mDemoCamCenter.set(field_0x122c.x, field_0x122c.y + 150.0f, field_0x122c.z); + sp38.set(950.0f, 50.0f, 550.0f); + cLib_chasePos(&mDemoCamEye, sp38, nREG_F(19) + 15.0f); + + if (mpMorf->checkFrame(50.0f)) { + player->changeDemoMode(0x22, 0, 0, 0); + } + + if (mpMorf->checkFrame(67.0f)) { + setWeponLandEffect(); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_IMPACT, 0, -1); + dComIfGp_getVibration().StartShock(5, 31, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (mpMorf->isStop()) { + camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye, mDemoCamBank, 0); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + + mRopesEnabled = false; + setActionMode(ACTION_CLEAR_WAIT_e, 0); + mDemoModeTimer = 60; + Z2GetAudioMgr()->subBgmStart(Z2BGM_VARIANT); + Z2GetAudioMgr()->changeSubBgmStatus(1); + return; + } + } + + calcTagAngle(); + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamBank, 0); + dComIfGp_getEvent().onSkipFade(); + dComIfGp_getEvent().setSkipProc(this, DemoSkipCallBack, 0); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeDemoOp() { - nofralloc +asm void daE_VA_c::executeDemoOp(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeDemoOp__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEDB8-807CEDBC 000110 0004+00 0/0 0/0 0/0 .rodata @6350 */ @@ -2036,6 +3498,33 @@ COMPILER_STRIP_GATE(0x807CEE0C, &lit_6394); #pragma pop /* 807C7534-807C7640 005034 010C+00 1/1 0/0 0/0 .text executeClearWait__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeClearWait() { + switch (mMode) { + case 1: + mDemoModeTimer = 60; + /* fallthrough */ + case 0: + setBck(ANM_INVI_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 20.0f, 1.0f); + attention_info.flags = 4; + mMode = 2; + /* fallthrough */ + case 2: + cLib_addCalc(¤t.pos.y, 0.0f, 0.1f, 10.0f, 1.0f); + + if (mDemoModeTimer == 0) { + if (fopAcM_searchPlayerDistance(this) < 2000.0f) { + setActionMode(ACTION_CLEAR_CHASE_e, 0); + } + } + + if (daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + setActionMode(ACTION_TRANS_WAIT_e, 0); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2044,16 +3533,60 @@ asm void daE_VA_c::executeClearWait() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeClearWait__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C7640-807C783C 005140 01FC+00 1/1 0/0 0/0 .text executeClearChase__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeClearChase() { + cLib_addCalc(¤t.pos.y, 0.0f, 0.1f, 10.0f, 1.0f); + + switch (mMode) { + case 0: + setBck(ANM_INVI_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 3.0f, 1.0f); + mMode = 1; + /* fallthrough */ + case 1: + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 8, 0x400, 0x40); + current.angle.y = shape_angle.y; + + if (fopAcM_searchPlayerDistance(this) > l_HIO.mAttackRange) { + cLib_chaseF(&speedF, 10.0f, 1.0f); + } else if (fopAcM_searchPlayerDistance(this) < l_HIO.mAttackRange - 200.0f) { + cLib_chaseF(&speedF, -10.0f, 1.0f); + } else { + cLib_chaseF(&speedF, 0.0f, 1.0f); + + if (speedF == 0.0f && mDemoModeTimer == 0) { + setActionMode(ACTION_CLEAR_ATTACK_e, 0); + return; + } + } + + if (speedF != 0.0f) { + if (!checkBck(ANM_INVI_WALK_e)) { + setBck(ANM_INVI_WALK_e, J3DFrameCtrl::LOOP_REPEAT_e, 10.0f, 1.0f); + } + } else { + if (!checkBck(ANM_INVI_WAIT_e)) { + setBck(ANM_INVI_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 10.0f, 1.0f); + } + } + } + + if (daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + setActionMode(ACTION_TRANS_WAIT_e, 0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeClearChase() { - nofralloc +asm void daE_VA_c::executeClearChase(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeClearChase__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE10-807CEE14 000168 0004+00 0/1 0/0 0/0 .rodata @6485 */ @@ -2085,6 +3618,47 @@ COMPILER_STRIP_GATE(0x807CEE1C, &lit_6488); #pragma pop /* 807C783C-807C7A8C 00533C 0250+00 1/1 0/0 0/0 .text executeClearAttack__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeClearAttack() { + f32 anm_frame = mpMorf->getFrame(); + cLib_addCalc(¤t.pos.y, 0.0f, 0.1f, 10.0f, 1.0f); + + switch (mMode) { + case 0: + setBck(ANM_INVI_ATTACK_A_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK_T, 0, -1); + mMode = 1; + return; + case 1: + if (mpMorf->checkFrame(32.0f)) { + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK1, 0, -1); + } + + if (mpMorf->checkFrame(36.0f)) { + setWeponLandEffect(); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_IMPACT, 0, -1); + dComIfGp_getVibration().StartShock(5, 31, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (30.0f <= anm_frame && anm_frame <= 43.0f) { + onSwordAtBit(); + } else if (anm_frame > 43.0f && anm_frame < 85.0f) { + offSwordShield(); + } + + if (mpMorf->isStop()) { + setActionMode(ACTION_CLEAR_CHASE_e, 0); + mDemoModeTimer = 150; + } + break; + } + + if (daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + setActionMode(ACTION_TRANS_WAIT_e, 0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2093,8 +3667,50 @@ asm void daE_VA_c::executeClearAttack() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeClearAttack__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C7A8C-807C7C74 00558C 01E8+00 1/1 0/0 0/0 .text executeTransWait__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeTransWait() { + switch (mMode) { + case 0: + Z2GetAudioMgr()->changeSubBgmStatus(2); + mAlphaType = 1; + attention_info.flags = 4; + speedF = 0.0f; + mMode = 1; + setBck(ANM_TRANS_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 10.0f, 1.0f); + mDemoModeTimer = 5; + + if (!dComIfGs_isOneZoneSwitch(5, fopAcM_GetRoomNo(this))) { + dComIfGs_onOneZoneSwitch(5, fopAcM_GetRoomNo(this)); + } + /* fallthrough */ + case 1: + cLib_addCalc(¤t.pos.y, 0.0f, 0.1f, 10.0f, 1.0f); + if (mDemoModeTimer == 0) { + setBck(ANM_INVI_NOTICE_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_FOUND, -1); + mMode = 2; + } + break; + case 2: + cLib_addCalc(¤t.pos.y, 0.0f, 0.1f, 10.0f, 1.0f); + field_0x1391 = 1; + + if (mpMorf->isStop()) { + setActionMode(ACTION_TRANS_CHASE_e, 0); + } + break; + } + + if (!daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + setActionMode(ACTION_OPACI_FADE_AWAY_e, 0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2103,16 +3719,71 @@ asm void daE_VA_c::executeTransWait() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeTransWait__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C7C74-807C7ED4 005774 0260+00 1/1 0/0 0/0 .text executeTransChase__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeTransChase() { + f32 dist_to_player = fopAcM_searchPlayerDistanceXZ(this); + s16 angleY_to_player = fopAcM_searchPlayerAngleY(this); + + switch (mMode) { + case 0: + setBck(ANM_TRANS_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 10.0f, 1.0f); + mMode = 1; + /* fallthrough */ + case 1: + if (abs((s16)(shape_angle.y - angleY_to_player)) > 0x6000) { + shape_angle.y += 0x400; + } else { + cLib_addCalcAngleS(&shape_angle.y, angleY_to_player, 8, 0x400, 0x40); + } + + current.angle.y = shape_angle.y; + + if (dist_to_player > l_HIO.mAttackRange) { + cLib_chaseF(&speedF, 15.0f, 1.0f); + } else if (dist_to_player < l_HIO.mAttackRange - 200.0f) { + if (mDemoModeTimer == 0) { + cLib_chaseF(&speedF, 0.0f, 1.0f); + } else { + cLib_chaseF(&speedF, -10.0f, 1.0f); + } + } else { + cLib_chaseF(&speedF, 0.0f, 1.0f); + } + + if (speedF == 0.0f && mDemoModeTimer == 0 && dist_to_player <= l_HIO.mAttackRange && + abs((s16)(shape_angle.y - angleY_to_player)) < 0x2000) + { + setActionMode(ACTION_TRANS_ATTACK_e, 0); + return; + } + + if (speedF) { + if (!checkBck(ANM_TRANS_WALK_e)) { + setBck(ANM_TRANS_WALK_e, J3DFrameCtrl::LOOP_REPEAT_e, 10.0f, 1.0f); + } + } else { + setBck(ANM_TRANS_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 10.0f, 1.0f); + } + } + + if (!daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + setActionMode(ACTION_OPACI_FADE_AWAY_e, 0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeTransChase() { - nofralloc +asm void daE_VA_c::executeTransChase(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeTransChase__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE20-807CEE24 000178 0004+00 0/3 0/0 0/0 .rodata @6686 */ @@ -2137,6 +3808,91 @@ COMPILER_STRIP_GATE(0x807CEE28, &lit_6688); #pragma pop /* 807C7ED4-807C839C 0059D4 04C8+00 1/1 0/0 0/0 .text executeTransAttack__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeTransAttack() { + f32 anm_frame = mpMorf->getFrame(); + + switch (mMode) { + case 0: + setBck(ANM_TRANS_ATTACK_A1_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK_T, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK1, -1); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK1, 0, -1); + mMode = 2; + break; + case 2: + if (mpMorf->checkFrame(22.0f)) { + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK1, 0, -1); + } + + if (mpMorf->checkFrame(26.0f)) { + setWeponLandEffect(); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_IMPACT, 0, -1); + dComIfGp_getVibration().StartShock(5, 31, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (20.0f <= anm_frame && anm_frame <= 33.0f) { + onSwordAtBit(); + } else if (anm_frame > 33.0f) { + offSwordShield(); + } + + if (mpMorf->checkFrame(20.0f)) { + mGlowBody = 1; + mBodyCyls[0].OnTgSetBit(); + mBodyCyls[1].OnTgSetBit(); + mBodyCyls[0].SetTgType(0xD8FBFDFF); + mBodyCyls[1].SetTgType(0xD8FBFDFF); + } + + if (mpMorf->isStop()) { + setBck(ANM_TRANS_ATTACK_A3_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK3, -1); + mMode = 4; + } + break; + case 4: + if (mpMorf->checkFrame(20.0f)) { + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK2, 0, -1); + } + + if (mpMorf->checkFrame(53.0f)) { + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK3, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK3, -1); + } + + if (anm_frame <= 20.0f) { + offSwordShield(); + } + + if (mpMorf->checkFrame(40.0f)) { + mGlowBody = 0; + mBodyCyls[0].OffTgSetBit(); + mBodyCyls[1].OffTgSetBit(); + } + + if (mpMorf->isStop()) { + setActionMode(ACTION_TRANS_CHASE_e, 0); + mDemoModeTimer = 90; + } + break; + } + + if (!daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + + if (!checkBck(ANM_TRANS_ATTACK_A3_e)) { + setBck(ANM_TRANS_ATTACK_A3_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK3, -1); + } + + setActionMode(ACTION_OPACI_FADE_AWAY_e, 10); + mBodyCyls[0].OffTgSetBit(); + mBodyCyls[1].OffTgSetBit(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2145,9 +3901,103 @@ asm void daE_VA_c::executeTransAttack() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeTransAttack__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C839C-807C8860 005E9C 04C4+00 1/1 0/0 0/0 .text executeTransBiteDamage__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeTransBiteDamage() { + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp38; + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_NECK_02)); + mDoMtx_stack_c::multVecZero(&sp38); + + switch (mMode) { + case 0: + speedF = 0.0f; + setBck(ANM_TRANS_NECK_DMG_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_BITED, -1); + mMode = 1; + field_0x1324 = 0; + field_0x135c = 0; + mGlowBody = 1; + + mBodyCyls[0].OffTgSetBit(); + mBodyCyls[1].OffTgSetBit(); + + if ((s16)(cLib_targetAngleY(&sp38, &player->current.pos) - shape_angle.y) < 0) { + field_0x1390 = 0; + } else { + field_0x1390 = 1; + } + /* fallthrough */ + case 1: + s16 var_r4; + if (field_0x1390 != 0) { + var_r4 = shape_angle.y - 0x4000; + } else { + var_r4 = shape_angle.y + 0x4000; + } + + player->setWolfEnemyHangBiteAngle(var_r4); + + if (checkWolfBiteDamage()) { + offWolfBiteDamage(); + field_0x135c++; + field_0x1324++; + + if (field_0x135c >= l_HIO.mBiteCount) { + field_0x135c = 0; + player->offWolfEnemyHangBite(); + setActionMode(ACTION_OPACI_WAIT_e, 0); + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x20); + attention_info.flags = 0; + return; + } + + setBck(ANM_TRANS_NECK_DMG_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_BITED, -1); + mSound.startCollisionSE(Z2SE_HIT_WOLFBITE, 0x1E); + } + + if (checkBck(ANM_TRANS_NECK_DMG_e)) { + if (mpMorf->isStop()) { + setBck(ANM_TRANS_ATTACK_A2_e, J3DFrameCtrl::LOOP_REPEAT_e, 3.0f, 1.0f); + } + } else if (checkBck(ANM_TRANS_ATTACK_A2_e) && mpMorf->checkFrame(22.0f)) { + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK2, -1); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK2, 0, -1); + } + + if (!daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + player->offWolfEnemyHangBite(); + Z2GetAudioMgr()->changeSubBgmStatus(1); + setActionMode(ACTION_OPACI_FADE_AWAY_e, 0); + return; + } + + if (!player->checkWolfEnemyHangBiteOwn(this)) { + setBck(ANM_TRANS_NECK_PAT_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mMode = 3; + mGlowBody = 0; + } + break; + case 3: + if (mpMorf->isStop()) { + setActionMode(ACTION_TRANS_CHASE_e, 0); + return; + } + } + + setDownPos(&sp38); + if (!daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + setActionMode(ACTION_OPACI_FADE_AWAY_e, 0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2156,8 +4006,58 @@ asm void daE_VA_c::executeTransBiteDamage() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeTransBiteDamage__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C8860-807C8A84 006360 0224+00 1/1 0/0 0/0 .text executeTransDamage__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeTransDamage() { + if (checkWolfBiteDamage()) { + offWolfBiteDamage(); + daPy_getPlayerActorClass()->offWolfEnemyHangBite(); + } + + switch (mMode) { + case 0: + field_0x138f++; + if (field_0x138f >= 5) { + setActionMode(ACTION_OPACI_WAIT_e, 0); + attention_info.flags = 0; + mBodyCyls[0].OffTgSetBit(); + mBodyCyls[1].OffTgSetBit(); + return; + } + + speedF = 0.0f; + setBck(ANM_TRANS_NECK_DMG_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_BITED, -1); + + mMode = 1; + mGlowBody = 1; + mBodyCyls[0].OnTgSetBit(); + mBodyCyls[1].OnTgSetBit(); + mBodyCyls[0].SetTgType(0xD8FBFDFF); + mBodyCyls[1].SetTgType(0xD8FBFDFF); + /* fallthrough */ + case 1: + if (mpMorf->isStop()) { + setBck(ANM_TRANS_NECK_PAT_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mMode = 2; + } + break; + case 2: + if (mpMorf->checkFrame(30.0f)) { + mGlowBody = 0; + mBodyCyls[0].OffTgSetBit(); + mBodyCyls[1].OffTgSetBit(); + } + + if (mpMorf->isStop()) { + setActionMode(ACTION_TRANS_CHASE_e, 0); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2166,8 +4066,31 @@ asm void daE_VA_c::executeTransDamage() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeTransDamage__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C8A84-807C8B78 006584 00F4+00 1/1 0/0 0/0 .text executeTransThrough__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeTransThrough() { + switch (mMode) { + case 0: + speedF = 0.0f; + setBck(ANM_TRANS_THROUGH_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mMode = 1; + break; + case 1: + if (mpMorf->isStop()) { + setActionMode(ACTION_TRANS_CHASE_e, 0); + } + break; + } + + if (!daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + setActionMode(ACTION_OPACI_FADE_AWAY_e, 0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2176,8 +4099,133 @@ asm void daE_VA_c::executeTransThrough() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeTransThrough__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C8B78-807C915C 006678 05E4+00 2/1 0/0 0/0 .text executeOpaciWait__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciWait() { + dCamera_c* camera = dCam_getBody(); + cXyz sp24; + cXyz sp30; + + switch (mMode) { + case 0: + if (field_0x1486 == 0) { + field_0x1486 = 1; + mMode = 10; + + if (!dComIfGs_isOneZoneSwitch(8, fopAcM_GetRoomNo(this))) { + dComIfGs_onOneZoneSwitch(8, fopAcM_GetRoomNo(this)); + } + } else { + mAlphaType = 2; + field_0x1380 = 30; + mGlowLightB = 0; + mGlowLightG = 0; + mGlowLightR = 0; + mKankyoColBlend = 1.0f; + mKankyoColType = 1; + field_0x1354 = 10; + attention_info.flags = 4; + mFadeAwayTimer = l_HIO.mFadeAwayTime; + + speedF = 0.0f; + setActionMode(ACTION_OPACI_FLY_e, 22); + } + + Z2GetAudioMgr()->changeSubBgmStatus(3); + break; + case 10: + if (!eventInfo.i_checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.i_onCondition(2); + } else { + mAlphaType = 2; + field_0x1380 = 30; + mGlowLightB = 0; + mGlowLightG = 0; + mGlowLightR = 0; + mKankyoColBlend = 1.0f; + mKankyoColType = 1; + + setBck(ANM_TRANS_STRUGGLE_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_VISUAL, -1); + field_0x1354 = 10; + speedF = 0.0f; + mMode = 12; + + sp24.set(200.0f, 0.0f, 100.0f); + daPy_getPlayerActorClass()->setPlayerPosAndAngle(&sp24, 0x8000, 0); + daPy_getPlayerActorClass()->changeOriginalDemo(); + daPy_getPlayerActorClass()->changeDemoMode(0x17, 1, 0, 0); + + camera->Stop(); + camera->SetTrimSize(3); + field_0x14ac = -0x1000; + mDemoCamCenter.set(15.0f, 291.0f, 201.0f); + sp30.set(0.0f, 50.0f, 700.0f); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, field_0x14ac, &sp30); + mDemoCamBank = 70.0f; + field_0x14a4 = 0.0f; + } + break; + case 12: + current.pos.set(0.0f, 0.0f, 0.0f); + eyePos.set(15.0f, 291.0f, 201.0f); + current.angle.y = 0; + shape_angle.y = 0; + mMode = 13; + /* fallthrough */ + case 13: + field_0x14a4++; + mDemoCamCenter = eyePos; + + sp30.set(0.0f, field_0x14a4 + 50.0f, 700.0f); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, field_0x14ac, &sp30); + field_0x14ac += 80; + + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamBank, 0); + cLib_addCalcAngleS(&shape_angle.y, -0x1000, 8, 0x100, 0x100); + + if (mpMorf->checkFrame(90.0f)) { + mMode = 14; + dComIfGp_getVibration().StartQuake(2, 31, cXyz(0.0f, 1.0f, 0.0f)); + field_0x14b0 = 180.0f; + } + break; + case 14: + cLib_addCalc2(&field_0x14b0, 0.0f, 1.0f, 6.0f); + mDemoCamCenter = eyePos; + cLib_chaseF(&mDemoCamBank, 30.0f, 5.0f); + + camera->Set(mDemoCamCenter, mDemoCamEye, mDemoCamBank, 0); + + if (mpMorf->checkFrame(120.0f)) { + dComIfGp_getVibration().StopQuake(31); + } + + if (mpMorf->isStop()) { + camera->Reset(mDemoCamCenter, mDemoCamEye); + camera->Start(); + camera->SetTrimSize(0); + dComIfGp_event_reset(); + + mFadeAwayTimer = l_HIO.mFadeAwayTime; + attention_info.flags = 4; + setBck(ANM_SUBS_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 3.0f, 1.0f); + mMode = 15; + mDemoModeTimer = 30; + } + break; + case 15: + if (mDemoModeTimer == 0) { + setActionMode(ACTION_OPACI_FLY_e, 0); + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2186,16 +4234,175 @@ asm void daE_VA_c::executeOpaciWait() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciWait__8daE_VA_cFv.s" } #pragma pop +#endif /* 807C915C-807C9A40 006C5C 08E4+00 2/1 0/0 0/0 .text executeOpaciFly__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciFly() { + daPy_py_c* player = daPy_getPlayerActorClass(); + s16 var_r31 = cM_atan2s(current.pos.x, current.pos.z); + + mBodyCyls[0].OnTgSetBit(); + mBodyCyls[1].OnTgSetBit(); + mBodyCyls[0].SetTgType(0x16060); + mBodyCyls[1].SetTgType(0x16060); + + switch (mMode) { + case 0: + case 20: + case 21: + case 22: + attention_info.flags = 0; + + if (mMode == 0) { + setBck(ANM_FLOAT_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 3.0f, 1.0f); + } else if (mMode == 20) { + setBck(ANM_SUBS_DOWN_D_STAND_e, J3DFrameCtrl::LOOP_ONCE_e, 10.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_DMG_L, -1); + } else if (mMode == 21) { + setBck(ANM_SUBS_DOWN_STAND_e, J3DFrameCtrl::LOOP_ONCE_e, 10.0f, 1.0f); + } else if (mMode == 22) { + setBck(ANM_TRANS_NECK_DMG_e, J3DFrameCtrl::LOOP_ONCE_e, 10.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_BITED, -1); + } + + mMode = 1; + gravity = 0.0f; + + s16 temp_r0 = shape_angle.y + 0x8000; + f32 temp_f29 = cM_scos(temp_r0) * 1000.0f; + f32 temp_f1 = cM_ssin(temp_r0) * 1000.0f; + field_0x12f8.set(temp_f1, 500.0f, temp_f29); + current.angle.y = temp_r0; + + mDemoModeTimer = nREG_S(0) + 15; + /* fallthrough */ + case 1: + if (mDemoModeTimer == 0 && !checkBck(ANM_FLOAT_WAIT_e)) { + setBck(ANM_FLOAT_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, nREG_F(19) + 30.0f, 1.0f); + } + + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 8, 0x800, 0x80); + + s16 temp_r3 = cLib_targetAngleX(¤t.pos, &field_0x12f8); + f32 temp_f31 = std::abs(cM_scos(temp_r3) * 20.0f); + f32 temp_f30 = cM_ssin(temp_r3) * 20.0f; + + if (current.pos.y >= 500.0f) { + cLib_chaseF(&speed.y, 0.0f, 3.0f); + cLib_chaseF(¤t.pos.y, 500.0f, 1.0f); + } else { + cLib_chaseF(&speed.y, temp_f30, 1.0f); + } + + if (current.pos.absXZ() > 950.0f) { + field_0x12f8.set(current.pos.x, 500.0f, current.pos.z); + cLib_chaseF(&speedF, 0.0f, 3.0f); + } else { + cLib_chaseF(&speedF, temp_f31, 1.0f); + } + + if (speed.y == 0.0f && speedF == 0.0f) { + mMode = 2; + } + break; + case 2: + mMode = 3; + mDemoModeTimer = 30; + field_0x1324 = 0; + mDownTimer = cM_rndF(60.0f) + 150.0f; + field_0x1348 = cM_rndF(30.0f) + 90.0f; + /* fallthrough */ + case 3: + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 8, 0x800, 0x80); + + if (field_0x1324 != 0) { + current.angle.y = var_r31 + 0x4000; + } else { + current.angle.y = var_r31 - 0x4000; + } + + cLib_chaseF(&speedF, 30.0f, 1.0f); + + if (mDemoModeTimer == 0) { + mMode = 4; + } + break; + case 4: + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 8, 0x800, 0x80); + + if (field_0x1324 != 0) { + current.angle.y = var_r31 + 0x4000; + } else { + current.angle.y = var_r31 - 0x4000; + } + + cLib_chaseF(&speedF, 0.0f, 1.0f); + + if (!speedF) { + if (mFadeAwayTimer == 0) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + setActionMode(ACTION_OPACI_FADE_AWAY_e, 1); + } else if (mDownTimer == 0 && current.pos.absXZ(player->current.pos) > 500.0f) { + mMode = 10; + } else { + mDemoModeTimer = 30; + mMode = 3; + + if ((s16)(var_r31 - fopAcM_searchPlayerAngleY(this)) < 0) { + field_0x1324 = 0; + } else { + field_0x1324 = 1; + } + } + } + break; + case 10: + mDemoModeTimer = 30; + mMode = 11; + /* fallthrough */ + case 11: + if (mDemoModeTimer == 0) { + setBck(ANM_FLOAT_ATTACK_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mMode = 12; + } + break; + case 12: + if (mpMorf->checkFrame(42.0f)) { + mSound.startCreatureSound(Z2SE_EN_VA_ATK_FLY, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK_FLY, -1); + } + + if (mpMorf->checkFrame(62.0f)) { + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK_FLY2, -1); + mSound.startCreatureSound(Z2SE_EN_VA_ATK_FLY2, 0, -1); + } + + if (mpMorf->checkFrame(47.0f)) { + field_0x1228[0] = 1; + } + + if (mpMorf->checkFrame(67.0f)) { + field_0x1228[1] = 1; + } + + if (mpMorf->isStop()) { + setBck(ANM_FLOAT_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 3.0f, 1.0f); + mMode = 2; + field_0x1348 = cM_rndF(30.0f) + 90.0f; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeOpaciFly() { - nofralloc +asm void daE_VA_c::executeOpaciFly(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciFly__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE2C-807CEE30 000184 0004+00 0/0 0/0 0/0 .rodata @6999 */ @@ -2269,14 +4476,58 @@ COMPILER_STRIP_GATE(0x807CEE50, &lit_7291); #pragma pop /* 807C9A40-807C9C8C 007540 024C+00 1/1 0/0 0/0 .text executeOpaciDamage__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciDamage() { + switch (mMode) { + case 0: + attention_info.flags = 0; + mBodyCyls[0].SetTgType(0xD8FBFDFF); + mBodyCyls[1].SetTgType(0xD8FBFDFF); + + setBck(ANM_FLOAT_DMG_A_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_DOWN, -1); + mSound.startCreatureVoice(Z2SE_EN_VA_V_DMG, -1); + mSound.startCreatureSound(Z2SE_EN_VA_DOWN, 0, -1); + + mMode = 1; + speedF = 0.0f; + /* fallthrough */ + case 1: + if (mpMorf->isStop()) { + gravity = -5.0f; + maxFallSpeed = -50.0f; + mMode = 2; + setBck(ANM_FLOAT_DMG_B_e, J3DFrameCtrl::LOOP_ONCE_e, 10.0f, 1.0f); + } + break; + case 2: + if (mAcch.i_ChkGroundHit() || speed.y <= nREG_F(4) + -30.0f) { + setActionMode(ACTION_OPACI_CHASE_e, 0); + } + break; + case 10: + attention_info.flags = 0; + setBck(ANM_SUBS_STAGGER_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_NO_DMG, -1); + mMode = 11; + /* fallthrough */ + case 11: + if (mpMorf->isStop()) { + setActionMode(ACTION_OPACI_FLY_e, 0); + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeOpaciDamage() { - nofralloc +asm void daE_VA_c::executeOpaciDamage(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciDamage__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE54-807CEE58 0001AC 0004+00 0/1 0/0 0/0 .rodata @7421 */ @@ -2301,14 +4552,153 @@ COMPILER_STRIP_GATE(0x807CEE5C, &lit_7423); #pragma pop /* 807C9C8C-807CA364 00778C 06D8+00 1/1 0/0 0/0 .text executeOpaciChase__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciChase() { + cXyz sp44; + daPy_py_c* player = daPy_getPlayerActorClass(); + s16 angleY_to_player = fopAcM_searchPlayerAngleY(this); + s16 angle_to_home = cLib_targetAngleY(&home.pos, ¤t.pos); + + switch (mMode) { + case 0: + attention_info.flags = 0; + field_0x1330 = angle_to_home; + field_0x1332 = field_0x1330; + field_0x1334 = (f32)field_0x1332 + cM_rndF(3.0f) * 16384.0f; + + if (cM_rnd() < 0.5f) { + field_0x1336 = -0x400; + } else { + field_0x1336 = 0x400; + } + + field_0x1330 += field_0x1336; + mMode = 10; + mDownTimer = 30; + + setBck(ANM_SUBS_FLY_e, J3DFrameCtrl::LOOP_REPEAT_e, 30.0f, 1.0f); + gravity = 0.0f; + field_0x1324 = 0; + + sp44.set(0.0f, 0.0f, l_HIO.mCircleAttackRadius); + cLib_offsetPos(&field_0x12f8, &home.pos, field_0x1330, &sp44); + current.angle.y = cLib_targetAngleY(¤t.pos, &field_0x12f8); + /* fallthrough */ + case 10: + case 11: + field_0x1388 = 1; + mSound.startCreatureVoiceLevel(Z2SE_EN_VA_V_ROTATE, -1); + + if (mDownTimer == 0 && !player->i_checkNowWolf()) { + mBodyCyls[0].OnTgSetBit(); + mBodyCyls[1].OnTgSetBit(); + } + + switch (field_0x1324) { + case 0: + if (cLib_chaseF(&speed.y, nREG_F(0) + 25.0f, nREG_F(1) + 3.0f)) { + field_0x1324 = 1; + } + break; + case 1: + if (cLib_chaseF(&speed.y, nREG_F(3) + -40.0f, nREG_F(2) + 3.0f)) { + field_0x1324 = 0; + } + + if (mAcch.i_ChkGroundHit()) { + field_0x1324 = 2; + gravity = -5.0f; + } + break; + case 2: + break; + } + + cLib_chaseF(&speedF, 100.0f, 3.0f); + + sp44.set(0.0f, 0.0f, l_HIO.mCircleAttackRadius); + cLib_offsetPos(&field_0x12f8, &home.pos, field_0x1330, &sp44); + + if (current.pos.absXZ() > nREG_F(19) + 1200.0f) { + s16 temp_r26 = cM_atan2s(current.pos.x, current.pos.z); + + current.pos.x = (nREG_F(19) + 1200.0f) * cM_ssin(temp_r26); + current.pos.z = (nREG_F(19) + 1200.0f) * cM_scos(temp_r26); + } + + cLib_addCalcAngleS(&shape_angle.y, angleY_to_player, 8, 0x800, 0x80); + cLib_addCalcAngleS(¤t.angle.y, (s16)cLib_targetAngleY(¤t.pos, &field_0x12f8), 8, + 0x800, 0x80); + + if (abs((s16)(field_0x1330 - angle_to_home)) < 0x2000) { + s16 var_r29 = field_0x1330; + field_0x1330 += field_0x1336; + + if (mMode == 10) { + if (abs((s16)(field_0x1332 - field_0x1330)) <= abs(field_0x1336)) { + if (abs((s16)(field_0x1332 - var_r29)) <= abs(field_0x1336)) { + if (field_0x1332 == field_0x1334) { + mMode = 12; + } else { + mMode = 11; + } + } + } + } else { + if (abs((s16)(field_0x1334 - field_0x1330)) <= abs(field_0x1336)) { + mMode = 12; + attention_info.flags = 4; + } + } + } + break; + case 12: + mSound.startCreatureVoiceLevel(Z2SE_EN_VA_V_ROTATE, -1); + + if (!player->i_checkNowWolf()) { + mBodyCyls[0].OnTgSetBit(); + mBodyCyls[1].OnTgSetBit(); + } + + field_0x1388 = 1; + cLib_addCalcAngleS(&shape_angle.y, angleY_to_player, 8, 0x800, 0x80); + cLib_addCalcAngleS(¤t.angle.y, angleY_to_player, 8, 0x800, 0x80); + + if (fopAcM_searchPlayerDistance(this) > l_HIO.mAttackRange) { + cLib_chaseF(&speedF, 100.0f, 3.0f); + } else if (fopAcM_searchPlayerDistance(this) < l_HIO.mAttackRange - 300.0f) { + cLib_chaseF(&speedF, -30.0f, 3.0f); + } else { + mMode = 13; + } + break; + case 13: + mSound.startCreatureVoiceLevel(Z2SE_EN_VA_V_ROTATE, -1); + + if (!player->i_checkNowWolf()) { + mBodyCyls[0].OnTgSetBit(); + mBodyCyls[1].OnTgSetBit(); + } + + cLib_addCalcAngleS(&shape_angle.y, angleY_to_player, 8, 0x800, 0x80); + cLib_addCalcAngleS(¤t.angle.y, angleY_to_player, 8, 0x800, 0x80); + + if (cLib_chaseF(&speedF, 0.0f, 3.0f)) { + setActionMode(ACTION_OPACI_ATTACK_e, 0); + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeOpaciChase() { - nofralloc +asm void daE_VA_c::executeOpaciChase(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciChase__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE60-807CEE64 0001B8 0004+00 0/0 0/0 0/0 .rodata @7424 */ @@ -2340,6 +4730,75 @@ COMPILER_STRIP_GATE(0x807CEE6C, &lit_7511); #pragma pop /* 807CA364-807CA73C 007E64 03D8+00 1/1 0/0 0/0 .text executeOpaciAttack__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciAttack() { + f32 anm_frame = mpMorf->getFrame(); + + mBodyCyls[0].OnTgSetBit(); + mBodyCyls[1].OnTgSetBit(); + + switch (mMode) { + case 0: + speedF = 0.0f; + setBck(ANM_SUBS_ATTACK_A1_e, J3DFrameCtrl::LOOP_ONCE_e, 10.0f, 1.0f); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK_T, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK1, -1); + mMode = 1; + /* fallthrough */ + case 1: + if (mpMorf->checkFrame(22.0f)) { + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK1, 0, -1); + } + + if (mpMorf->checkFrame(27.0f)) { + setWeponLandEffect(); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_IMPACT, 0, -1); + dComIfGp_getVibration().StartShock(5, 31, cXyz(0.0f, 1.0f, 0.0f)); + } + + if (anm_frame < 16.0f) { + cLib_addCalcAngleS(&shape_angle.y, fopAcM_searchPlayerAngleY(this), 8, 0x800, 0x80); + current.angle.y = shape_angle.y; + } + + if (20.0f <= anm_frame && anm_frame <= 33.0f) { + onSwordAtBit(); + } else if (anm_frame > 33.0f) { + offSwordShield(); + field_0x1386 = 1; + } + + if (mpMorf->isStop()) { + setBck(ANM_SUBS_ATTACK_A3_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK3, -1); + mMode = 2; + } + break; + case 2: + if (mpMorf->checkFrame(12.0f)) { + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK3, -1); + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK3, 0, -1); + } + + if (mpMorf->getFrame() <= 15.0f) { + offSwordShield(); + field_0x1386 = 1; + } + + if (mpMorf->isStop()) { + if (mFadeAwayTimer == 0) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + setActionMode(ACTION_OPACI_FADE_AWAY_e, 1); + return; + } + + setActionMode(ACTION_OPACI_FLY_e, 0); + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2348,8 +4807,84 @@ asm void daE_VA_c::executeOpaciAttack() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciAttack__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CA73C-807CAA80 00823C 0344+00 1/1 0/0 0/0 .text executeOpaciDown__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciDown() { + daPy_py_c* player = daPy_getPlayerActorClass(); + mBodyCyls[1].OnTgSetBit(); + + switch (mMode) { + case 0: + setBck(ANM_SUBS_DOWN_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mDownTimer = l_HIO.mDownTime; + mMode = 2; + speedF = 0.0f; + field_0x1383 = 0; + attention_info.flags = 4; + mSound.startCreatureVoice(Z2SE_EN_VA_V_DMG_L, -1); + dComIfGs_onOneZoneSwitch(6, fopAcM_GetRoomNo(this)); + /* fallthrough */ + case 2: + if (mpMorf->getFrame() < 40.0f) { + mBodyCyls[1].OffTgSetBit(); + } + + if (mpMorf->isStop()) { + setBck(ANM_SUBS_DOWN_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 3.0f, 1.0f); + mMode = 3; + } + break; + case 1: + setBck(ANM_SUBS_DOWN_WAIT_e, J3DFrameCtrl::LOOP_REPEAT_e, 3.0f, 1.0f); + mMode = 3; + /* fallthrough */ + case 3: + if (mpMorf->checkFrame(1.0f)) { + mSound.startCreatureVoice(Z2SE_EN_VA_V_DYING, -1); + } + + if (mFadeAwayTimer == 0) { + Z2GetAudioMgr()->changeSubBgmStatus(1); + setActionMode(ACTION_OPACI_FADE_AWAY_e, 2); + } else if (mDownTimer == 0) { + setActionMode(ACTION_OPACI_FLY_e, 21); + } + break; + case 5: + field_0x1364 += field_0x1368; + + if ((f32)field_0x1364 > l_HIO.mDownHP || field_0x1384 >= 6) { + setActionMode(ACTION_OPACI_DEATH_e, 0); + field_0x1381 = 1; + return; + } + + setActionMode(ACTION_OPACI_FLY_e, 20); + break; + case 4: + mBodyCyls[1].OffTgSetBit(); + + if (mpMorf->isStop()) { + setActionMode(ACTION_OPACI_FLY_e, 0); + return; + } + break; + } + + if (player->getCutCount() > 1 || player->getCutType() == 10) { + if (mFadeAwayTimer < 30) { + mFadeAwayTimer = 30; + } + + if (mDownTimer < 30) { + mDownTimer = 30; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2358,9 +4893,63 @@ asm void daE_VA_c::executeOpaciDown() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciDown__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CAA80-807CACE0 008580 0260+00 1/1 0/0 0/0 .text executeOpaciDownDamage__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciDownDamage() { + daPy_py_c* player = daPy_getPlayerActorClass(); + + if (player->getCutCount() > 1 || player->getCutType() == 10) { + if (mFadeAwayTimer < 30) { + mFadeAwayTimer = 30; + } + + if (mDownTimer < 30) { + mDownTimer = 30; + } + } + + if (mFadeAwayTimer != 0 && mDownTimer != 0) { + mBodyCyls[1].OnTgSetBit(); + } + + switch (mMode) { + case 0: + case 1: + case 2: + speedF = 0.0f; + field_0x1364 += field_0x1368; + + if ((f32)field_0x1364 > l_HIO.mDownHP) { + setActionMode(ACTION_OPACI_DEATH_e, 0); + field_0x1381 = 1; + return; + } + + if (mMode == 0) { + setBck(ANM_SUBS_DOWN_DMG_A1_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_DMG, -1); + } else if (mMode == 1) { + setBck(ANM_SUBS_DOWN_DMG_A2_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_DMG, -1); + } else { + setBck(ANM_SUBS_DOWN_STAGGER_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_NO_DMG, -1); + } + + mMode = 5; + case 5: + if (mpMorf->isStop()) { + setActionMode(ACTION_OPACI_DOWN_e, 1); + field_0x1381 = 1; + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2369,8 +4958,25 @@ asm void daE_VA_c::executeOpaciDownDamage() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciDownDamage__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CACE0-807CADB8 0087E0 00D8+00 1/1 0/0 0/0 .text executeOpaciFlip__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciFlip() { + switch (mMode) { + case 0: + speedF = 0.0f; + mMode = 1; + daPy_getPlayerActorClass()->setThrowDamage(shape_angle.y, 20.0f, 40.0f, 1, 0, 0); + /* fallthrough */ + case 1: + if (mpMorf->isStop()) { + setActionMode(ACTION_OPACI_CHASE_e, 0); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2379,17 +4985,101 @@ asm void daE_VA_c::executeOpaciFlip() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciFlip__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CADB8-807CB1C4 0088B8 040C+00 2/1 0/0 0/0 .text executeOpaciFadeAway__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciFadeAway() { + attention_info.flags = 0; + mBodyCylIFrameTimer = 3; + mNeckSphIFrameTimer = 3; + mAttackSphIFrameTimer = 3; + + switch (mMode) { + case 10: + if (checkBck(ANM_TRANS_ATTACK_A3_e)) { + if (mpMorf->checkFrame(20.0f)) { + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK2, 0, -1); + } + + if (mpMorf->checkFrame(53.0f)) { + mSound.startCreatureSound(Z2SE_EN_VA_SWD_ATK3, 0, -1); + mSound.startCreatureVoice(Z2SE_EN_VA_V_ATK3, -1); + } + } + + mAlphaType = 0; + speedF = 0.0f; + + if (mpMorf->isStop()) { + setActionMode(ACTION_CLEAR_WAIT_e, 0); + } + break; + case 0: + mAlphaType = 0; + speedF = 0.0f; + setActionMode(ACTION_CLEAR_WAIT_e, 0); + break; + case 1: + if (checkBck(ANM_SUBS_INVITE_B_e)) { + setBck(ANM_SUBS_INVITE_C_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mMode = 5; + } else { + setBck(ANM_SUBS_TO_TRANS_e, J3DFrameCtrl::LOOP_ONCE_e, 10.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_VANISH, -1); + mSound.startCreatureSound(Z2SE_EN_VA_VANISH, 0, -1); + mAlphaType = 3; + mMode = 4; + mKankyoColType = 2; + } + + speed.y = 0.0f; + speedF = 0.0f; + break; + case 2: + setBck(ANM_SUBS_DOWN_STAND_e, J3DFrameCtrl::LOOP_ONCE_e, 10.0f, 1.0f); + mMode = 3; + speedF = 0.0f; + break; + case 3: + if (mpMorf->isStop()) { + setBck(ANM_SUBS_TO_TRANS_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_VANISH, -1); + mSound.startCreatureSound(Z2SE_EN_VA_VANISH, 0, -1); + mMode = 4; + mAlphaType = 3; + mKankyoColType = 2; + } + break; + case 4: + cLib_addCalc(¤t.pos.y, 0.0f, 0.1f, 10.0f, 1.0f); + if (mpMorf->isStop()) { + setActionMode(ACTION_CLEAR_WAIT_e, 1); + current.pos.y = 0.0f; + } + break; + case 5: + if (mpMorf->isStop()) { + mMode = 1; + } + break; + } + + if (daPy_getPlayerActorClass()->checkNowWolfEyeUp() && field_0x1358 == 0) { + setActionMode(ACTION_TRANS_WAIT_e, 0); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeOpaciFadeAway() { - nofralloc +asm void daE_VA_c::executeOpaciFadeAway(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciFadeAway__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE70-807CEE74 0001C8 0004+00 0/2 0/0 0/0 .rodata @7919 */ @@ -2421,14 +5111,161 @@ COMPILER_STRIP_GATE(0x807CEE7C, &lit_7922); #pragma pop /* 807CB1C4-807CB8CC 008CC4 0708+00 2/1 0/0 0/0 .text executeOpaciDeath__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::executeOpaciDeath() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz sp24; + cXyz sp30; + + mBodyCyls[0].OffTgSetBit(); + mBodyCyls[1].OffTgSetBit(); + + switch (mMode) { + case 0: + if (!eventInfo.i_checkCommandDemoAccrpt()) { + fopAcM_orderPotentialEvent(this, 2, 0xFFFF, 0); + eventInfo.i_onCondition(2); + return; + } + + Z2GetAudioMgr()->subBgmStop(); + Z2GetAudioMgr()->i_muteSceneBgm(0, 0.0f); + + dComIfGs_onStageMiddleBoss(); + field_0x1364 = 0; + + setBck(ANM_SUBS_DOWN_DIE_e, J3DFrameCtrl::LOOP_ONCE_e, 3.0f, 1.0f); + mSound.startCreatureVoice(Z2SE_EN_VA_V_DEAD, -1); + mMode = 10; + + player->changeOriginalDemo(); + + sp30.set(0.0f, 0.0f, 350.0f); + player->setPlayerPosAndAngle(&sp30, 0x8000, 0); + player->changeDemoMode(4, 1, 0, 0); + + camera->mCamera.Stop(); + camera->mCamera.SetTrimSize(3); + + mDemoCamCenter.set(-54.0f, 168.0f, 207.0f); + field_0x14ac = -0x1800; + field_0x14a4 = 600.0f; + + sp24.set(0.0f, 0.0f, field_0x14a4); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x14ac, &sp24); + mDemoCamEye.y = 50.0f; + mDemoCamBank = 70.0f; + return; + case 10: + current.pos.set(0.0f, 0.0f, 0.0f); + eyePos.set(-54.0f, 168.0f, 207.0f); + shape_angle.y = 0; + current.angle.y = 0; + mMode = 1; + case 1: + mDemoCamCenter = eyePos; + mDemoCamCenter.y -= 50.0f; + field_0x14ac += 0x40; + + sp24.set(0.0f, 0.0f, field_0x14a4); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x14ac, &sp24); + mDemoCamEye.y = 50.0f; + + if (mpMorf->checkFrame(155.0f)) { + mMode = 2; + mDemoModeTimer = 60; + + sp30.set(0.0f, 0.0f, 350.0f); + player->setPlayerPosAndAngle(&sp30, 0x8000, 0); + + field_0x14a4 = 400.0f; + sp24.set(0.0f, 0.0f, field_0x14a4); + cLib_offsetPos(&mDemoCamEye, ¤t.pos, shape_angle.y + field_0x14ac, &sp24); + mDemoCamEye.y = 50.0f; + } + break; + case 2: + mDemoCamCenter = eyePos; + mDemoCamCenter.y -= 50.0f; + + if (mpMorf->isStop()) { + mDoMtx_stack_c::copy(mpWeaponModel->getBaseTRMtx()); + mDoMtx_stack_c::transM(-10.0f, 160.0f, 15.0f); + mDoMtx_stack_c::multVecZero(&sp30); + + fopAcM_createDisappear(this, &sp30, 20, 0, 0xFF); + mDemoModeTimer = 120; + mMode = 3; + mPlayEndEf = true; + + mpEndEfMorf->setFrame(0.0f); + mpEndEfBrk->setFrame(0.0f); + mpEndEfBrk->setPlaySpeed(1.0f); + mDownTimer = 100; + + setBugsEffect(); + mSound.startCreatureSound(Z2SE_EN_VA_END, 0, -1); + mKankyoColBlend = 0.0f; + mKankyoColType = 3; + } + break; + case 3: + mDemoCamCenter = eyePos; + mDemoCamCenter.y -= 50.0f; + + if (mDownTimer == 0) { + field_0x1388 = 1; + } + + if (mDownTimer == 80) { + field_0x1240 = 2; + mWeponEfMode = 0; + } + + if (mDemoModeTimer == 0) { + field_0x122c = mDemoCamCenter; + mMode = 4; + mDemoModeTimer = 150; + } + break; + case 4: + if (mDownTimer == 0) { + field_0x1388 = 1; + } + + mDemoCamCenter = field_0x122c; + mDemoCamCenter.y += 10.0f; + + if (mDemoModeTimer == 0) { + camera->mCamera.Reset(mDemoCamCenter, mDemoCamEye, mDemoCamBank, 0); + camera->mCamera.Start(); + camera->mCamera.SetTrimSize(0); + dComIfGp_event_reset(); + + if (mSwNo != 0xFF && !dComIfGs_isSwitch(mSwNo, fopAcM_GetRoomNo(this))) { + dComIfGs_onSwitch(mSwNo, fopAcM_GetRoomNo(this)); + } + + Z2GetAudioMgr()->i_unMuteSceneBgm(45); + fopAcM_delete(this); + return; + } + break; + } + + camera->mCamera.Set(mDemoCamCenter, mDemoCamEye, mDemoCamBank, 0); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::executeOpaciDeath() { - nofralloc +asm void daE_VA_c::executeOpaciDeath(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/executeOpaciDeath__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE80-807CEE84 0001D8 0004+00 0/0 0/0 0/0 .rodata @7923 */ @@ -2446,14 +5283,70 @@ COMPILER_STRIP_GATE(0x807CEE84, &lit_8008); #pragma pop /* 807CB8CC-807CBC00 0093CC 0334+00 1/1 0/0 0/0 .text calcMagicMove__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::calcMagicMove() { + for (int i = 0; i < 2; i++) { + switch (field_0x1228[i]) { + case 0: + mMagicSphs[i].OffAtSetBit(); + break; + case 1: + mMagicSphs[i].OnAtSetBit(); + field_0x1228[i] = 2; + + mDoMtx_stack_c::copy(mpWeaponModel->getBaseTRMtx()); + mDoMtx_stack_c::transM(-30.0f, 320.0f, 65.0f); + mDoMtx_stack_c::multVecZero(&mMagicPos[i]); + mMagicOldPos[i] = mMagicPos[i]; + + mMagicAcch[i].i_ClrGroundHit(); + mMagicAcch[i].ClrWallHit(); + mMagicSphs[i].ClrAtHit(); + + cXyz sp5C(daPy_getPlayerActorClass()->current.pos); + + s16 spA = cLib_targetAngleY(&mMagicPos[i], &sp5C); + s16 sp8 = cLib_targetAngleX(&mMagicPos[i], &sp5C); + + f32 temp_f31 = std::abs(cM_scos(sp8) * 50.0f); + mMagicSpeed[i].set(temp_f31 * cM_ssin(spA), cM_ssin(sp8) * 50.0f, + temp_f31 * cM_scos(spA)); + /* fallthrough */ + case 2: + Z2GetAudioMgr()->seStartLevel(Z2SE_EN_VA_ATK_BALL, &mMagicPos[i], 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + setMagicEffect(i); + mMagicSphs[i].SetC(mMagicPos[i]); + mMagicSphs[i].SetR(50.0f); + dComIfG_Ccsp()->Set(&mMagicSphs[i]); + + if (mMagicAcch[i].i_ChkGroundHit() || mMagicAcch[i].ChkWallHit() || + mMagicSphs[i].ChkAtHit()) + { + Z2GetAudioMgr()->seStart(Z2SE_EN_VA_FIRE_BURST, &mMagicPos[i], 0, 0, 1.0f, 1.0f, + -1.0f, -1.0f, 0); + mMagicPos[i].y = 0.0f; + setMagicHitEffect(i); + field_0x1228[i] = 0; + } + + mMagicOldPos[i] = mMagicPos[i]; + mMagicPos[i] += mMagicSpeed[i]; + mMagicAcch[i].CrrPos(dComIfG_Bgsp()); + break; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::calcMagicMove() { - nofralloc +asm void daE_VA_c::calcMagicMove(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/calcMagicMove__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE88-807CEE8C 0001E0 0004+00 0/1 0/0 0/0 .rodata @8089 */ @@ -2464,6 +5357,85 @@ COMPILER_STRIP_GATE(0x807CEE88, &lit_8089); #pragma pop /* 807CBC00-807CC004 009700 0404+00 1/1 0/0 0/0 .text setAlphaType__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::setAlphaType() { + switch (mAlphaType) { + case 0: + case 3: + cLib_chaseUC(&mGlowLightA, 0, 4); + cLib_chaseUC(&mEyeAlpha, 0, 4); + field_0x1380 = 0; + + if (mAlphaType == 3 && mGlowLightA == 0) { + mAlphaType = 0; + } + + cLib_chaseUC(&mGlowLightR, 0, 8); + cLib_chaseUC(&mGlowLightG, 0, 8); + cLib_chaseUC(&mGlowLightB, 0, 8); + + if (mAlphaType == 0) { + cLib_chaseUC(&mFootSmokeAlpha, 0, 27); + } else if (mFootSmokeAlpha < 33) { + cLib_chaseUC(&mFootSmokeAlpha, 0, 1); + } else { + cLib_chaseUC(&mFootSmokeAlpha, 0, 10); + } + + field_0x138f = 0; + + mNeckSph.OffTgSetBit(); + for (int i = 0; i < 3; i++) { + mBodyCyls[i].OffCoSetBit(); + mBodyCyls[i].OffTgSetBit(); + mBodyCyls[i].OnTgNoHitMark(); + } + break; + case 1: + if (mGlowBody) { + cLib_chaseUC(&mGlowLightR, l_HIO.mKRegLightR, (u8)(l_HIO.mKRegLightR / 10.0f)); + cLib_chaseUC(&mGlowLightG, l_HIO.mKRegLightG, (u8)(l_HIO.mKRegLightG / 10.0f)); + cLib_chaseUC(&mGlowLightB, l_HIO.mKRegLightB, (u8)(l_HIO.mKRegLightB / 10.0f)); + cLib_chaseUC(&mGlowLightA, l_HIO.mKRegLightA, + (u8)((l_HIO.mKRegLightA - 128.0f) / 10.0f)); + } else { + cLib_chaseUC(&mGlowLightR, 0, (u8)(l_HIO.mKRegLightR / 20.0f)); + cLib_chaseUC(&mGlowLightG, 0, (u8)(l_HIO.mKRegLightG / 20.0f)); + cLib_chaseUC(&mGlowLightB, 0, (u8)(l_HIO.mKRegLightB / 20.0f)); + cLib_chaseUC(&mGlowLightA, 0x80, 8); + } + + cLib_chaseUC(&mEyeAlpha, 0, 4); + field_0x1380 = 0; + cLib_chaseUC(&mFootSmokeAlpha, 180, 8); + + mNeckSph.OnTgSetBit(); + mBodyCyls[0].OnTgSetBit(); + mBodyCyls[1].OffTgSetBit(); + mBodyCyls[2].OffTgSetBit(); + + for (int i = 0; i < 3; i++) { + mBodyCyls[i].OffCoSetBit(); + mBodyCyls[i].OnTgNoHitMark(); + } + break; + case 2: + cLib_chaseUC(&mGlowLightA, 0xFF, 4); + cLib_chaseUC(&mEyeAlpha, 0xFF, 8); + cLib_chaseUC(&field_0x1380, 0, 1); + cLib_chaseUC(&mFootSmokeAlpha, 0xFF, 4); + + mNeckSph.OffTgSetBit(); + for (int i = 0; i < 3; i++) { + mBodyCyls[i].OnCoSetBit(); + mBodyCyls[i].OffTgNoHitMark(); + mBodyCyls[i].OffTgSetBit(); + } + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2472,16 +5444,190 @@ asm void daE_VA_c::setAlphaType() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setAlphaType__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CC004-807CC4D0 009B04 04CC+00 2/1 0/0 0/0 .text action__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::action() { + field_0x1391 = 0; + setAlphaType(); + damage_check(); + + for (int i = 0; i < 4; i++) { + mAttackSphs[i].OffAtSetBit(); + + if (mGlowBody && i == 0) { + mAttackSphs[i].OffCoSetBit(); + mAttackSphs[i].OffTgShield(); + mAttackSphs[i].OnTgNoHitMark(); + } else { + mAttackSphs[i].OnCoSetBit(); + + if (mOffTgTimer != 0) { + mAttackSphs[i].OffTgShield(); + mAttackSphs[i].OnTgNoHitMark(); + } else { + mAttackSphs[i].OnTgShield(); + mAttackSphs[i].OffTgNoHitMark(); + } + } + } + + BOOL var_r29 = true; + field_0x1386 = 0; + field_0x1388 = 0; + + switch (mAction) { + case ACTION_DEMO_OP_WAIT_e: + executeDemoOpWait(); + var_r29 = false; + break; + case ACTION_DEMO_OP_e: + executeDemoOp(); + var_r29 = false; + break; + case ACTION_CLEAR_WAIT_e: + executeClearWait(); + break; + case ACTION_CLEAR_CHASE_e: + executeClearChase(); + break; + case ACTION_CLEAR_ATTACK_e: + executeClearAttack(); + break; + case ACTION_TRANS_WAIT_e: + executeTransWait(); + break; + case ACTION_TRANS_CHASE_e: + executeTransChase(); + break; + case ACTION_TRANS_ATTACK_e: + executeTransAttack(); + break; + case ACTION_TRANS_BITE_DAMAGE_e: + executeTransBiteDamage(); + break; + case ACTION_TRANS_DAMAGE_e: + executeTransDamage(); + break; + case ACTION_TRANS_THROUGH_e: + executeTransThrough(); + break; + case ACTION_OPACI_WAIT_e: + executeOpaciWait(); + break; + case ACTION_OPACI_FLY_e: + executeOpaciFly(); + break; + case ACTION_OPACI_DOWN_e: + executeOpaciDown(); + break; + case ACTION_OPACI_DOWN_DAMAGE_e: + executeOpaciDownDamage(); + break; + case ACTION_OPACI_CHASE_e: + executeOpaciChase(); + break; + case ACTION_OPACI_ATTACK_e: + executeOpaciAttack(); + break; + case ACTION_OPACI_DAMAGE_e: + executeOpaciDamage(); + break; + case ACTION_OPACI_FLIP_e: + executeOpaciFlip(); + break; + case ACTION_OPACI_FADE_AWAY_e: + executeOpaciFadeAway(); + break; + case ACTION_OPACI_DEATH_e: + executeOpaciDeath(); + break; + } + + if (var_r29) { + daPy_getPlayerActorClass()->onBossRoomWait(); + } + + if (!field_0x138e) { + if (daPy_getPlayerActorClass()->checkNowWolfEyeUp()) { + field_0x1358 = 20; + field_0x138e = 1; + } + } else { + if (!daPy_getPlayerActorClass()->checkNowWolfEyeUp()) { + field_0x1358 = 20; + field_0x138e = 0; + } + } + + fopAcM_posMoveF(this, mBodyCcStts.GetCCMoveP()); + mAcch.CrrPos(dComIfG_Bgsp()); + + switch (mKankyoColType) { + case 0: + if (daPy_getPlayerActorClass()->checkNowWolfEyeUp()) { + cLib_chaseF(&mKankyoColBlend, 1.0f, 0.1f); + } else { + cLib_chaseF(&mKankyoColBlend, 0.0f, 0.1f); + } + + dKy_custom_colset(2, 0, mKankyoColBlend); + break; + case 1: + cLib_chaseF(&mKankyoColBlend, 1.0f, 0.1f); + dKy_custom_colset(0, 1, mKankyoColBlend); + break; + case 2: + cLib_chaseF(&mKankyoColBlend, 0.0f, 0.1f); + dKy_custom_colset(2, 1, mKankyoColBlend); + + if (!mKankyoColBlend) { + mKankyoColType = 0; + } + break; + case 3: + cLib_chaseF(&mKankyoColBlend, 1.0f, 0.01f); + dKy_custom_colset(1, 4, mKankyoColBlend); + break; + case 4: + cLib_chaseF(&mKankyoColBlend, 1.0f, 0.01f); + /* fallthrough */ + case 5: + dKy_custom_colset(3, 2, mKankyoColBlend); + + if (mKankyoColBlend == 1.0f) { + mKankyoColType = 0; + mKankyoColBlend = 0.0f; + } + break; + } + + s16 spC = shape_angle.y - current.angle.y; + s16 target_x = (speedF * 128.0f) * cM_scos(spC); + s16 target_z = (speedF * 128.0f) * cM_ssin(spC); + + cLib_addCalcAngleS(&field_0x1304.x, target_x, 8, 0x400, 0x40); + cLib_addCalcAngleS(&field_0x1304.z, target_z, 8, 0x400, 0x40); + + mpMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + if (mPlayEndEf) { + mpEndEfMorf->play(0, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); + } + + mpWeaponBrk->play(); + mpEndEfBrk->play(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::action() { - nofralloc +asm void daE_VA_c::action(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/action__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE8C-807CEE90 0001E4 0004+00 0/1 0/0 0/0 .rodata @8318 */ @@ -2492,14 +5638,95 @@ COMPILER_STRIP_GATE(0x807CEE8C, &lit_8318); #pragma pop /* 807CC4D0-807CC864 009FD0 0394+00 1/1 0/0 0/0 .text mtx_set__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::mtx_set() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(shape_angle); + mDoMtx_stack_c::transM(0.0f, 300.0f, 0.0f); + mDoMtx_stack_c::ZXYrotM(field_0x1304); + mDoMtx_stack_c::transM(0.0f, -300.0f, 0.0f); + mDoMtx_stack_c::scaleM(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); + + J3DModel* model = mpMorf->getModel(); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + + if (mPlayEndEf) { + mpEndEfMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + mpEndEfMorf->modelCalc(); + } + + field_0x138b = 0; + mpMorf->modelCalc(); + calcJointSleeve(); + + field_0x138b = 1; + mpMorf->modelCalc(); + + if (!mRopesEnabled) { + if (mpWeaponModel != NULL) { + mpWeaponModel->setBaseTRMtx(model->getAnmMtx(JNT_KEN_2)); + } + } else { + if (mpWeaponModel != NULL) { + switch (field_0x1240) { + case 0: + mDoMtx_stack_c::transS(field_0x122c); + mDoMtx_stack_c::transM(0.0f, 150.0f, 0.0f); + mDoMtx_stack_c::ZXYrotM(field_0x1238); + mDoMtx_stack_c::transM(0.0f, -150.0f, 0.0f); + mDoMtx_stack_c::transM(0.0f, 400.0f, 0.0f); + mDoMtx_stack_c::XrotM(field_0x123e); + mDoMtx_stack_c::transM(0.0f, -400.0f, 0.0f); + mDoMtx_stack_c::scaleM(l_HIO.mModelSize, l_HIO.mModelSize, l_HIO.mModelSize); + mpWeaponModel->setBaseTRMtx(mDoMtx_stack_c::get()); + break; + case 1: + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_KEN_2)); + mpWeaponModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoMtx_stack_c::multVecZero(&field_0x122c); + break; + } + } + + cXyz sp34; + cXyz sp40; + for (int i = 0; i < 40; i++) { + f32 var_f31; + switch (mCardFlags[i] & 3) { + case 0: + var_f31 = 80.0f; + break; + case 1: + var_f31 = 50.0f; + break; + case 2: + var_f31 = 25.0f; + break; + } + + int idx = va_tag_set_num[i]; + sp34 = field_0x994[idx + 1] - field_0x994[idx]; + sp34.normalizeZP(); + sp40 = field_0x994[idx] + (sp34 * va_tag_offset[i]); + + mDoMtx_stack_c::transS(sp40); + mDoMtx_stack_c::ZXYrotM(field_0x660[i]); + mDoMtx_stack_c::transM(0.0f, -var_f31, 0.0f); + mDoMtx_stack_c::XrotM(0x4000); + mpCardModels[i]->setBaseTRMtx(mDoMtx_stack_c::get()); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::mtx_set() { - nofralloc +asm void daE_VA_c::mtx_set(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/mtx_set__8daE_VA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 807CEE90-807CEE94 0001E8 0004+00 0/1 0/0 0/0 .rodata @8471 */ @@ -2524,6 +5751,107 @@ COMPILER_STRIP_GATE(0x807CEE98, &lit_8473); #pragma pop /* 807CC864-807CCD24 00A364 04C0+00 1/1 0/0 0/0 .text cc_set__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +void daE_VA_c::cc_set() { + cXyz sp24; + + if (mGlowLightA != 0) { + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&eyePos); + attention_info.position = eyePos; + attention_info.position.y += 50.0f; + } else { + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_KEN_2)); + mDoMtx_stack_c::transM(-20.0f, 350.0f, 50.0f); + mDoMtx_stack_c::multVecZero(&eyePos); + attention_info.position = eyePos; + attention_info.position.y += 30.0f; + } + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_NECK_02)); + mDoMtx_stack_c::transM(0.0f, 40.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&sp24); + + mNeckSph.SetC(sp24); + if (mGlowBody) { + mNeckSph.SetR(nREG_F(7) + 70.0f); + } else { + mNeckSph.SetR(50.0f); + } + + dComIfG_Ccsp()->Set(&mNeckSph); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_ROOT)); + mDoMtx_stack_c::transM(0.0f, 0.0f, 0.0f); + mDoMtx_stack_c::multVecZero(&sp24); + mBodyCyls[0].SetC(sp24); + mBodyCyls[0].SetH(200.0f); + + if (mGlowBody) { + mBodyCyls[0].SetR(75.0f); + } else { + mBodyCyls[0].SetR(100.0f); + } + + dComIfG_Ccsp()->Set(&mBodyCyls[0]); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_NECK_02)); + mDoMtx_stack_c::multVecZero(&sp24); + sp24.y -= 50.0f; + + mBodyCyls[1].SetC(sp24); + mBodyCyls[1].SetH(100.0f); + mBodyCyls[1].SetR(80.0f); + dComIfG_Ccsp()->Set(&mBodyCyls[1]); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_NECK_02)); + mDoMtx_stack_c::multVecZero(&sp24); + sp24.y -= 200.0f; + + mBodyCyls[2].SetC(sp24); + mBodyCyls[2].SetH(200.0f); + mBodyCyls[2].SetR(80.0f); + dComIfG_Ccsp()->Set(&mBodyCyls[2]); + + mDoMtx_stack_c::copy(mpWeaponModel->getBaseTRMtx()); + mDoMtx_stack_c::transM(10.0f, 0.0f, -25.0f); + for (int i = 0; i < 4; i++) { + mDoMtx_stack_c::transM(-10.0f, 80.0f, 20.0f); + mDoMtx_stack_c::multVecZero(&sp24); + mAttackSphs[i].SetC(sp24); + + if (mAttackSphs[i].ChkAtSet()) { + mAttackSphs[i].SetR(70.0f); + } else { + mAttackSphs[i].SetR(50.0f); + } + + dComIfG_Ccsp()->Set(&mAttackSphs[i]); + } + + if (mRopesEnabled) { + for (int i = 0; i < 10; i++) { + for (int j = 0; j < 19; j++) { + int sp14 = i * 19; + sp14 += j; + + int sp10 = i * 10; + sp10 += (j >> 1); + + if (!(j & 1)) { + mLineSphs[sp14].SetC(field_0x994[sp10]); + } else { + mLineSphs[sp14].SetC((field_0x994[sp10] + field_0x994[sp10 + 1]) / 2.0f); + } + + mLineSphs[sp14].SetR(20.0f); + dComIfG_Ccsp()->Set(&mLineSphs[sp14]); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2532,61 +5860,265 @@ asm void daE_VA_c::cc_set() { #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/cc_set__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CCD24-807CCF3C 00A824 0218+00 1/1 0/0 0/0 .text execute__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +int daE_VA_c::execute() { + if (mDemoModeTimer != 0) { + mDemoModeTimer--; + } + + if (mDownTimer != 0) { + mDownTimer--; + } + + if (mFadeAwayTimer != 0) { + mFadeAwayTimer--; + } + + if (field_0x1350 != 0) { + field_0x1350--; + } + + if (mAttackSphIFrameTimer != 0) { + mAttackSphIFrameTimer--; + } + + if (mNeckSphIFrameTimer != 0) { + mNeckSphIFrameTimer--; + } + + if (mBodyCylIFrameTimer != 0) { + mBodyCylIFrameTimer--; + } + + if (mOffTgTimer != 0) { + mOffTgTimer--; + } + + if (field_0x1348 != 0) { + field_0x1348--; + } + + if (field_0x1354 != 0) { + field_0x1354--; + } + + if (field_0x1358 != 0) { + field_0x1358--; + } + + action(); + calcJointNeck(); + mtx_set(); + setFootEffect(); + setWeponEffect(); + calcMagicMove(); + cc_set(); + + if (mAlphaType < 2) { + if (daPy_getPlayerActorClass()->checkWolfLock(this)) { + daPy_getPlayerActorClass()->cancelWolfLock(this); + } + + onWolfNoLock(); + } else { + offWolfNoLock(); + } + + cXyz bind_pos; + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(JNT_HEAD)); + mDoMtx_stack_c::multVecZero(&bind_pos); + + cXyz bind_scale(1.0f, 1.0f, 1.0f); + setMidnaBindEffect(this, &mSound, &bind_pos, &bind_scale); + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::execute() { +asm int daE_VA_c::execute() { nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/execute__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CCF3C-807CCF5C 00AA3C 0020+00 2/1 0/0 0/0 .text daE_VA_Execute__FP8daE_VA_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daE_VA_Execute(daE_VA_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Execute__FP8daE_VA_c.s" +static int daE_VA_Execute(daE_VA_c* i_this) { + return i_this->execute(); } -#pragma pop /* 807CCF5C-807CCF64 00AA5C 0008+00 1/0 0/0 0/0 .text daE_VA_IsDelete__FP8daE_VA_c */ -static bool daE_VA_IsDelete(daE_VA_c* param_0) { - return true; +static int daE_VA_IsDelete(daE_VA_c* i_this) { + return 1; } /* 807CCF64-807CD028 00AA64 00C4+00 1/1 0/0 0/0 .text _delete__8daE_VA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daE_VA_c::_delete() { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/_delete__8daE_VA_cFv.s" +int daE_VA_c::_delete() { + dComIfG_resDelete(&mPhase, "E_VA"); + + if (mInitHIO) { + init_hio = false; + } + + for (int i = 0; i < 2; i++) { + JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mFootSmokeEmtrIDs[i]); + if (emitter != NULL) { + emitter->deleteAllParticle(); + } + } + + if (heap != NULL) { + mSound.deleteObject(); + } + + return 1; } -#pragma pop /* 807CD028-807CD048 00AB28 0020+00 1/0 0/0 0/0 .text daE_VA_Delete__FP8daE_VA_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daE_VA_Delete(daE_VA_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Delete__FP8daE_VA_c.s" +static int daE_VA_Delete(daE_VA_c* i_this) { + return i_this->_delete(); } -#pragma pop /* 807CD048-807CD600 00AB48 05B8+00 1/1 0/0 0/0 .text CreateHeap__8daE_VA_cFv */ +// weird data issue / reg alloc (probably related) +#ifdef NONMATCHING +int daE_VA_c::CreateHeap() { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("E_VA", 0x33); + JUT_ASSERT(modelData != 0); + + mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("E_VA", 15), 0, 1.0f, 0, + -1, &mSound, 0x80000, 0x31000084); + if (mpMorf == NULL || mpMorf->getModel() == NULL) { + return 0; + } + + if (!mInvisModel.create(mpMorf->getModel(), 1)) { + return 0; + } + + J3DModel* model = mpMorf->getModel(); + model->setUserArea((u32)this); + + for (u16 i = 1; i < model->getModelData()->getJointNum(); i++) { + if (i == 11 || i == 12 || i == 13 || i == 14 || i == 27 || i == 33 || i == 34) { + model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); + } + } + + modelData = (J3DModelData*)dComIfG_getObjectRes("E_VA", 0x30); + JUT_ASSERT(modelData != 0); + + mpWeaponModel = mDoExt_J3DModel__create(modelData, 0, 0x11000084); + if (mpWeaponModel == NULL) { + return 0; + } + + mpWeaponBrk = new mDoExt_brkAnm(); + if (mpWeaponBrk == NULL) { + return 0; + } + + if (!mpWeaponBrk->init(mpWeaponModel->getModelData(), + (J3DAnmTevRegKey*)dComIfG_getObjectRes("E_VA", 0x3B), TRUE, + J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1)) + { + return 0; + } + + modelData = (J3DModelData*)dComIfG_getObjectRes("E_VA", 0x37); + JUT_ASSERT(modelData != 0); + + mpEndEfMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, + (J3DAnmTransform*)dComIfG_getObjectRes("E_VA", 7), 0, 1.0f, + 0, -1, &mSound, 0x80000, 0x31000084); + if (mpEndEfMorf == NULL || mpEndEfMorf->getModel() == NULL) { + return 0; + } + + model = mpEndEfMorf->getModel(); + model->setUserArea((u32)this); + + for (u16 i = 1; i < model->getModelData()->getJointNum(); i++) { + if (i == 11 || i == 12 || i == 13 || i == 14 || i == 27 || i == 33 || i == 34) { + model->getModelData()->getJointNodePointer(i)->setCallBack(JointCallBack); + } + } + + mpEndEfBrk = new mDoExt_brkAnm(); + if (mpEndEfBrk == NULL) { + return 0; + } + + if (!mpEndEfBrk->init(model->getModelData(), + (J3DAnmTevRegKey*)dComIfG_getObjectRes("E_VA", 0x3A), TRUE, + J3DFrameCtrl::LOOP_ONCE_e, 1.0f, 0, -1)) + { + return 0; + } + + if (!field_0x139c.init(1, 5, 1)) { + return 0; + } + + f32* size_p = field_0x139c.getSize(0); + for (int i = 0; i < 5; i++) { + *size_p = 5.0f; + size_p++; + } + + if (!mRope.init(11, 10, (ResTIMG*)dComIfG_getObjectRes("E_VA", 0x3E), 1)) { + return 0; + } + + for (int i = 0; i < 11; i++) { + f32* size_p = mRope.getSize(i); + + for (int j = 0; j < 10; j++) { + *size_p = 5.0f; + size_p++; + } + } + + for (int i = 0; i < 40; i++) { + J3DModelData* modelData; + + switch (va_tag_set_size[i]) { + case 0: + modelData = (J3DModelData*)dComIfG_getObjectRes("E_VA", 0x34); + mCardFlags[i] = 0; + break; + case 1: + modelData = (J3DModelData*)dComIfG_getObjectRes("E_VA", 0x35); + mCardFlags[i] = 1; + break; + case 2: + modelData = (J3DModelData*)dComIfG_getObjectRes("E_VA", 0x36); + mCardFlags[i] = 2; + break; + } + + JUT_ASSERT(modelData != 0); + mpCardModels[i] = mDoExt_J3DModel__create(modelData, 0, 0x11000084); + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::CreateHeap() { +asm int daE_VA_c::CreateHeap() { nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/CreateHeap__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CD600-807CD648 00B100 0048+00 1/0 0/0 0/0 .text __dt__12J3DFrameCtrlFv */ #pragma push @@ -2600,14 +6132,9 @@ extern "C" asm void __dt__12J3DFrameCtrlFv() { #pragma pop /* 807CD648-807CD668 00B148 0020+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void useHeapInit(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/useHeapInit__FP10fopAc_ac_c.s" +static int useHeapInit(fopAc_ac_c* i_this) { + return ((daE_VA_c*)i_this)->CreateHeap(); } -#pragma pop /* ############################################################################################## */ /* 807CEE9C-807CEEA0 0001F4 0004+00 0/1 0/0 0/0 .rodata @8890 */ @@ -2631,14 +6158,132 @@ SECTION_DEAD static char const* const stringBase_807CEF01 = "E_va"; #pragma pop /* 807CD668-807CDAD8 00B168 0470+00 1/1 0/0 0/0 .text create__8daE_VA_cFv */ +// matches with literals +#ifdef NONMATCHING +int daE_VA_c::create() { + fopAcM_SetupActor(this, daE_VA_c); + + int phase_state = dComIfG_resLoad(&mPhase, "E_VA"); + if (phase_state == cPhs_COMPLEATE_e) { + OS_REPORT("E_VA PARAM %x\n", fopAcM_GetParam(this)); + + if (!fopAcM_entrySolidHeap(this, useHeapInit, 0x216A0)) { + return cPhs_ERROR_e; + } + + if (!init_hio) { + init_hio = true; + mInitHIO = true; + l_HIO.field_0x04 = -1; + } + + attention_info.flags = 0; + mSwNo = fopAcM_GetParam(this); + + if (mSwNo != 0xFF && dComIfGs_isSwitch(mSwNo, fopAcM_GetRoomNo(this))) { + g_env_light.mColpatWeather = 4; + g_env_light.mColPatPrev = 4; + g_env_light.mColPatCurr = 4; + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + fopAcM_SetMin(this, -500.0f, -500.0f, -500.0f); + fopAcM_SetMax(this, 500.0f, 500.0f, 500.0f); + + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), NULL, NULL); + mAcchCir.SetWall(40.0f, 500.0f); + + for (int i = 0; i < 2; i++) { + mMagicAcch[i].Set(&mMagicPos[i], &mMagicOldPos[i], this, 1, &mMagicAcchCir[i], + &mMagicSpeed[i], NULL, NULL); + mMagicAcchCir[i].SetWall(0.0f, 120.0f); + } + + health = 100; + field_0x560 = 100; + + mBodyCcStts.Init(0xFF, 0, this); + mNeckSph.Set(cc_vt_neck_src); + mNeckSph.SetStts(&mBodyCcStts); + + for (int i = 0; i < 3; i++) { + mBodyCyls[i].Set(cc_vt_body_src); + mBodyCyls[i].SetStts(&mBodyCcStts); + } + + for (int i = 0; i < 4; i++) { + mAttackSphs[i].Set(cc_vt_attack_src); + mAttackSphs[i].SetStts(&mBodyCcStts); + } + + field_0x1b3c.Init(0xFF, 0, this); + + for (int i = 0; i < 190; i++) { + mLineSphs[i].Set(cc_vt_line_src); + mLineSphs[i].SetStts(&field_0x1b3c); + } + + mMagicSphs[0].Set(cc_vt_magic_src); + mMagicSphs[0].SetStts(&field_0x1b3c); + mMagicSphs[1].Set(cc_vt_magic_src); + mMagicSphs[1].SetStts(&field_0x1b3c); + + mSound.init(¤t.pos, &eyePos, 3, 1); + mSound.setEnemyName("E_va"); + + mAtInfo.mpSound = &mSound; + mAtInfo.mPowerType = 1; + mFootSmokeAlpha = 0; + mEyeAlpha = 0; + mGlowLightA = 0; + + attention_info.distances[fopAc_attn_BATTLE_e] = 62; + g_env_light.mColpatWeather = 2; + g_env_light.mColPatPrev = 2; + g_env_light.mColPatCurr = 2; + + if (daPy_getPlayerActorClass()->current.pos.z >= 1850.0f) { + cDmr_SkipInfo = 0; + } + + if (cDmr_SkipInfo != 0) { + dComIfGs_onOneZoneSwitch(9, fopAcM_GetRoomNo(this)); + cDmr_SkipInfo = 0; + mWeponEfMode = 3; + mAction = ACTION_CLEAR_WAIT_e; + + Z2GetAudioMgr()->subBgmStart(Z2BGM_VARIANT); + Z2GetAudioMgr()->changeSubBgmStatus(1); + mKankyoColType = 0; + + g_env_light.mColpatWeather = 2; + g_env_light.mColPatPrev = 2; + g_env_light.mColPatCurr = 2; + } else { + mAction = ACTION_DEMO_OP_WAIT_e; + mKankyoColType = 5; + g_env_light.mColpatWeather = 3; + g_env_light.mColPatPrev = 3; + g_env_light.mColPatCurr = 3; + } + + daE_VA_Execute(this); + } + + return phase_state; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daE_VA_c::create() { +asm int daE_VA_c::create() { nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/create__8daE_VA_cFv.s" } #pragma pop +#endif /* 807CDAD8-807CDE90 00B5D8 03B8+00 1/1 0/0 0/0 .text __ct__8daE_VA_cFv */ #pragma push @@ -2740,25 +6385,20 @@ extern "C" asm void __dt__12dBgS_AcchCirFv() { /* 807CE23C-807CE240 00BD3C 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ // cXyz::cXyz() { -extern "C" asm void __ct__4cXyzFv() { +extern "C" void __ct__4cXyzFv() { /* empty function */ } /* 807CE240-807CE244 00BD40 0004+00 1/1 0/0 0/0 .text __ct__5csXyzFv */ // csXyz::csXyz() { -extern "C" asm void __ct__5csXyzFv() { +extern "C" void __ct__5csXyzFv() { /* empty function */ } /* 807CE244-807CE264 00BD44 0020+00 1/0 0/0 0/0 .text daE_VA_Create__FP8daE_VA_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daE_VA_Create(daE_VA_c* param_0) { - nofralloc -#include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/daE_VA_Create__FP8daE_VA_c.s" +static int daE_VA_Create(daE_VA_c* i_this) { + return i_this->create(); } -#pragma pop /* 807CE264-807CE2AC 00BD64 0048+00 1/0 0/0 0/0 .text __dt__10cCcD_GSttsFv */ #pragma push @@ -2775,8 +6415,8 @@ extern "C" asm void __dt__10cCcD_GSttsFv() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daE_VA_HIO_c::~daE_VA_HIO_c() { - nofralloc +// asm daE_VA_HIO_c::~daE_VA_HIO_c() { +extern "C" asm void __dt__12daE_VA_HIO_cFv(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/__dt__12daE_VA_HIO_cFv.s" } #pragma pop @@ -2940,8 +6580,7 @@ COMPILER_STRIP_GATE(0x807CEEF8, &lit_9225); #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void __sinit_d_a_e_vt_cpp() { - nofralloc +asm void __sinit_d_a_e_vt_cpp(){nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/__sinit_d_a_e_vt_cpp.s" } #pragma pop @@ -2976,8 +6615,9 @@ static asm void func_807CE7E8() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -static asm void setMidnaBindEffect(fopEn_enemy_c* param_0, Z2CreatureEnemy* param_1, cXyz* param_2, - cXyz* param_3) { +/* static asm void setMidnaBindEffect(fopEn_enemy_c* param_0, Z2CreatureEnemy* param_1, cXyz* + param_2, cXyz* param_3) { */ +extern "C" asm void setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz() { nofralloc #include "asm/rel/d/a/e/d_a_e_vt/d_a_e_vt/setMidnaBindEffect__FP13fopEn_enemy_cP15Z2CreatureEnemyP4cXyzP4cXyz.s" } diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 15b42adaf59..97855c5e451 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -1686,8 +1686,8 @@ J3DZMode* J3DPEBlock::getZMode() { } /* 8000DF4C-8000DF54 00888C 0008+00 0/0 5/0 0/0 .text getBlend__10J3DPEBlockFv */ -bool J3DPEBlock::getBlend() { - return false; +J3DBlend* J3DPEBlock::getBlend() { + return NULL; } /* 8000DF54-8000DF5C 008894 0008+00 0/0 5/0 0/0 .text getAlphaComp__10J3DPEBlockFv */ @@ -3823,7 +3823,7 @@ SECTION_SDATA2 static f32 lit_7625 = 1.0f / 100.0f; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void mDoExt_3DlineMat1_c::init(u16 param_0, u16 param_1, ResTIMG* param_2, int param_3) { +asm int mDoExt_3DlineMat1_c::init(u16 param_0, u16 param_1, ResTIMG* param_2, int param_3) { nofralloc #include "asm/m_Do/m_Do_ext/init__19mDoExt_3DlineMat1_cFUsUsP7ResTIMGi.s" }