From 669c7d920b196d8f1b998420014bcc9397abaa32 Mon Sep 17 00:00:00 2001 From: Caroline Madsen <69010899+randomsalience@users.noreply.github.com> Date: Fri, 26 Apr 2024 22:20:26 -0400 Subject: [PATCH] d_a_npc_zra mostly done, misc npc work (#2140) --- .../clrRotAngle__15daNpcF_Lookat_cFv.s | 15 - asm/d/a/d_a_npc/setAngle__8daNpcF_cFs.s | 11 - .../setRotAngle__15daNpcF_Lookat_cFv.s | 41 - .../d_a_npc_zra/Delete__11daNpc_zrA_cFv.s | 14 - .../d_a_npc_zra/Execute__11daNpc_zrA_cFv.s | 9 - .../calcBank__11daNpc_zrA_cFssRsRs.s | 40 - ...wimAngle__11daNpc_zrA_cFR5csXyzR5csXyzss.s | 37 - .../calcWaistAngleCheck__11daNpc_zrA_cFv.s | 12 - .../calcWaistAngleStop__11daNpc_zrA_cFv.s | 4 - ...__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s | 12 - .../chkFindPlayer__11daNpc_zrA_cFv.s | 49 - ...eapCallBack__11daNpc_zrA_cFP10fopAc_ac_c.s | 9 - ...JointCallBack__11daNpc_zrA_cFP8J3DJointi.s | 21 - .../d_a_npc_zra/daNpc_zrA_Create__FPv.s | 9 - .../d_a_npc_zra/daNpc_zrA_Delete__FPv.s | 9 - .../d_a_npc_zra/daNpc_zrA_Draw__FPv.s | 9 - .../d_a_npc_zra/daNpc_zrA_Execute__FPv.s | 9 - .../getActionTypeFromParam__11daNpc_zrA_cFv.s | 62 - .../getGameModeFromParam__11daNpc_zrA_cFv.s | 12 - .../getMultiModeFromParam__11daNpc_zrA_cFv.s | 15 - .../getMultiNoFromParam__11daNpc_zrA_cFv.s | 14 - ...getSoldierTypeFromParam__11daNpc_zrA_cFv.s | 25 - .../d_a_npc_zra/d_a_npc_zra/s_subHoz__FPvPv.s | 22 - .../d_a_npc_zra/s_subMark__FPvPv.s | 31 - .../d_a_npc_zra/s_subMulti__FPvPv.s | 47 - .../d_a_npc_zra/d_a_npc_zra/s_subSP__FPvPv.s | 35 - .../d_a_npc_zra/d_a_npc_zra/s_sub__FPvPv.s | 22 - ...__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s | 45 - .../setExpression__11daNpc_zrA_cFif.s | 12 - .../setLookMode__11daNpc_zrA_cFi.s | 10 - .../setMotion__11daNpc_zrA_cFifi.s | 19 - .../d_a_npc_zra/setParam__11daNpc_zrA_cFv.s | 136 - .../setSkipZev__11daNpc_zrA_cFii.s | 38 - .../d_a_npc_zra/waitSwim__11daNpc_zrA_cFv.s | 107 - include/d/a/d_a_npc.h | 554 +- include/d/a/d_a_player.h | 8 + include/d/com/d_com_inf_game.h | 4 + include/d/d_attention.h | 14 +- include/d/d_drawlist.h | 4 + include/d/d_path.h | 4 +- include/d/d_stage.h | 2 +- include/d/meter/d_meter2_info.h | 8 +- include/m_Do/m_Do_ext.h | 1 + include/rel/d/a/d_a_canoe/d_a_canoe.h | 11 +- .../d/a/d_a_formation_mng/d_a_formation_mng.h | 2 +- include/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.h | 155 +- include/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.h | 87 +- include/rel/d/a/npc/d_a_npc_the/d_a_npc_the.h | 128 +- include/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.h | 456 +- .../d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.h | 20 +- rel/d/a/d_a_talk/d_a_talk.cpp | 2 +- rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp | 10 +- rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.cpp | 1095 +-- rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.cpp | 512 +- rel/d/a/npc/d_a_npc_the/d_a_npc_the.cpp | 490 +- rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.cpp | 7448 ++++++++++++++--- .../obj/d_a_obj_digplace/d_a_obj_digplace.cpp | 2 +- .../a/obj/d_a_obj_zraMark/d_a_obj_zraMark.cpp | 92 +- src/d/a/d_a_npc.cpp | 935 ++- src/d/d_attention.cpp | 16 +- src/m_Do/m_Do_ext.cpp | 136 + 61 files changed, 9187 insertions(+), 3971 deletions(-) delete mode 100644 asm/d/a/d_a_npc/clrRotAngle__15daNpcF_Lookat_cFv.s delete mode 100644 asm/d/a/d_a_npc/setAngle__8daNpcF_cFs.s delete mode 100644 asm/d/a/d_a_npc/setRotAngle__15daNpcF_Lookat_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Delete__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Execute__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcBank__11daNpc_zrA_cFssRsRs.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcSwimAngle__11daNpc_zrA_cFR5csXyzR5csXyzss.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleCheck__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleStop__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkFindPlayer__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/createHeapCallBack__11daNpc_zrA_cFP10fopAc_ac_c.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ctrlJointCallBack__11daNpc_zrA_cFP8J3DJointi.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Create__FPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Delete__FPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Draw__FPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Execute__FPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getActionTypeFromParam__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getGameModeFromParam__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiModeFromParam__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiNoFromParam__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getSoldierTypeFromParam__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subHoz__FPvPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMark__FPvPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMulti__FPvPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subSP__FPvPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_sub__FPvPv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpression__11daNpc_zrA_cFif.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setLookMode__11daNpc_zrA_cFi.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMotion__11daNpc_zrA_cFifi.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setParam__11daNpc_zrA_cFv.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setSkipZev__11daNpc_zrA_cFii.s delete mode 100644 asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitSwim__11daNpc_zrA_cFv.s diff --git a/asm/d/a/d_a_npc/clrRotAngle__15daNpcF_Lookat_cFv.s b/asm/d/a/d_a_npc/clrRotAngle__15daNpcF_Lookat_cFv.s deleted file mode 100644 index a3963634f65..00000000000 --- a/asm/d/a/d_a_npc/clrRotAngle__15daNpcF_Lookat_cFv.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_80151FE0: -/* 80151FE0 38 80 00 00 */ li r4, 0 -/* 80151FE4 7C 87 23 78 */ mr r7, r4 -/* 80151FE8 7C 86 23 78 */ mr r6, r4 -/* 80151FEC 7C 85 23 78 */ mr r5, r4 -/* 80151FF0 38 00 00 04 */ li r0, 4 -/* 80151FF4 7C 09 03 A6 */ mtctr r0 -lbl_80151FF8: -/* 80151FF8 7D 03 22 14 */ add r8, r3, r4 -/* 80151FFC B0 E8 00 7C */ sth r7, 0x7c(r8) -/* 80152000 B0 C8 00 7E */ sth r6, 0x7e(r8) -/* 80152004 B0 A8 00 80 */ sth r5, 0x80(r8) -/* 80152008 38 84 00 06 */ addi r4, r4, 6 -/* 8015200C 42 00 FF EC */ bdnz lbl_80151FF8 -/* 80152010 4E 80 00 20 */ blr diff --git a/asm/d/a/d_a_npc/setAngle__8daNpcF_cFs.s b/asm/d/a/d_a_npc/setAngle__8daNpcF_cFs.s deleted file mode 100644 index 1a7685126b2..00000000000 --- a/asm/d/a/d_a_npc/setAngle__8daNpcF_cFs.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_80154250: -/* 80154250 B0 83 04 DE */ sth r4, 0x4de(r3) -/* 80154254 A8 03 04 DE */ lha r0, 0x4de(r3) -/* 80154258 B0 03 04 E6 */ sth r0, 0x4e6(r3) -/* 8015425C A8 03 04 DE */ lha r0, 0x4de(r3) -/* 80154260 B0 03 08 F2 */ sth r0, 0x8f2(r3) -/* 80154264 A8 03 08 F2 */ lha r0, 0x8f2(r3) -/* 80154268 B0 03 08 F8 */ sth r0, 0x8f8(r3) -/* 8015426C A8 03 04 DE */ lha r0, 0x4de(r3) -/* 80154270 B0 03 04 CA */ sth r0, 0x4ca(r3) -/* 80154274 4E 80 00 20 */ blr diff --git a/asm/d/a/d_a_npc/setRotAngle__15daNpcF_Lookat_cFv.s b/asm/d/a/d_a_npc/setRotAngle__15daNpcF_Lookat_cFv.s deleted file mode 100644 index 042f87826b2..00000000000 --- a/asm/d/a/d_a_npc/setRotAngle__15daNpcF_Lookat_cFv.s +++ /dev/null @@ -1,41 +0,0 @@ -lbl_80151F54: -/* 80151F54 38 E0 00 00 */ li r7, 0 -/* 80151F58 39 00 00 00 */ li r8, 0 -/* 80151F5C 38 80 00 00 */ li r4, 0 -/* 80151F60 38 00 00 04 */ li r0, 4 -/* 80151F64 7C 09 03 A6 */ mtctr r0 -lbl_80151F68: -/* 80151F68 7C C3 22 14 */ add r6, r3, r4 -/* 80151F6C A8 06 00 34 */ lha r0, 0x34(r6) -/* 80151F70 7C E7 02 14 */ add r7, r7, r0 -/* 80151F74 2C 07 80 00 */ cmpwi r7, -32768 -/* 80151F78 40 80 00 0C */ bge lbl_80151F84 -/* 80151F7C 38 A0 80 00 */ li r5, -32768 -/* 80151F80 48 00 00 14 */ b lbl_80151F94 -lbl_80151F84: -/* 80151F84 2C 07 7F FF */ cmpwi r7, 0x7fff -/* 80151F88 38 A0 7F FF */ li r5, 0x7fff -/* 80151F8C 41 81 00 08 */ bgt lbl_80151F94 -/* 80151F90 7C E5 3B 78 */ mr r5, r7 -lbl_80151F94: -/* 80151F94 7C A7 2B 78 */ mr r7, r5 -/* 80151F98 A8 06 00 36 */ lha r0, 0x36(r6) -/* 80151F9C 7D 08 02 14 */ add r8, r8, r0 -/* 80151FA0 2C 08 80 00 */ cmpwi r8, -32768 -/* 80151FA4 40 80 00 0C */ bge lbl_80151FB0 -/* 80151FA8 38 00 80 00 */ li r0, -32768 -/* 80151FAC 48 00 00 14 */ b lbl_80151FC0 -lbl_80151FB0: -/* 80151FB0 2C 08 7F FF */ cmpwi r8, 0x7fff -/* 80151FB4 38 00 7F FF */ li r0, 0x7fff -/* 80151FB8 41 81 00 08 */ bgt lbl_80151FC0 -/* 80151FBC 7D 00 43 78 */ mr r0, r8 -lbl_80151FC0: -/* 80151FC0 7C 08 03 78 */ mr r8, r0 -/* 80151FC4 B0 A6 00 7C */ sth r5, 0x7c(r6) -/* 80151FC8 B0 06 00 7E */ sth r0, 0x7e(r6) -/* 80151FCC 38 00 00 00 */ li r0, 0 -/* 80151FD0 B0 06 00 80 */ sth r0, 0x80(r6) -/* 80151FD4 38 84 00 06 */ addi r4, r4, 6 -/* 80151FD8 42 00 FF 90 */ bdnz lbl_80151F68 -/* 80151FDC 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Delete__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Delete__11daNpc_zrA_cFv.s deleted file mode 100644 index 8facedd4181..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Delete__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_80B7A51C: -/* 80B7A51C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7A520 7C 08 02 A6 */ mflr r0 -/* 80B7A524 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7A528 38 80 FF FF */ li r4, -1 -/* 80B7A52C 81 83 0B 44 */ lwz r12, 0xb44(r3) -/* 80B7A530 81 8C 00 08 */ lwz r12, 8(r12) -/* 80B7A534 7D 89 03 A6 */ mtctr r12 -/* 80B7A538 4E 80 04 21 */ bctrl -/* 80B7A53C 38 60 00 01 */ li r3, 1 -/* 80B7A540 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7A544 7C 08 03 A6 */ mtlr r0 -/* 80B7A548 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7A54C 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Execute__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Execute__11daNpc_zrA_cFv.s deleted file mode 100644 index b8d7481beac..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Execute__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80B7A550: -/* 80B7A550 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7A554 7C 08 02 A6 */ mflr r0 -/* 80B7A558 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7A55C 4B 5D 7A B9 */ bl execute__8daNpcF_cFv -/* 80B7A560 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7A564 7C 08 03 A6 */ mtlr r0 -/* 80B7A568 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7A56C 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcBank__11daNpc_zrA_cFssRsRs.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcBank__11daNpc_zrA_cFssRsRs.s deleted file mode 100644 index 7e3fecd9e49..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcBank__11daNpc_zrA_cFssRsRs.s +++ /dev/null @@ -1,40 +0,0 @@ -lbl_80B81FB8: -/* 80B81FB8 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80B81FBC 7C 08 02 A6 */ mflr r0 -/* 80B81FC0 90 01 00 24 */ stw r0, 0x24(r1) -/* 80B81FC4 39 61 00 20 */ addi r11, r1, 0x20 -/* 80B81FC8 4B 7E 02 11 */ bl _savegpr_28 -/* 80B81FCC 7C 7C 1B 78 */ mr r28, r3 -/* 80B81FD0 7C 9D 23 78 */ mr r29, r4 -/* 80B81FD4 7C BE 2B 78 */ mr r30, r5 -/* 80B81FD8 7C FF 3B 78 */ mr r31, r7 -/* 80B81FDC A8 63 04 DE */ lha r3, 0x4de(r3) -/* 80B81FE0 A8 06 00 00 */ lha r0, 0(r6) -/* 80B81FE4 7C 03 00 50 */ subf r0, r3, r0 -/* 80B81FE8 7C 04 07 34 */ extsh r4, r0 -/* 80B81FEC 2C 04 40 00 */ cmpwi r4, 0x4000 -/* 80B81FF0 41 80 00 0C */ blt lbl_80B81FFC -/* 80B81FF4 38 80 40 00 */ li r4, 0x4000 -/* 80B81FF8 48 00 00 10 */ b lbl_80B82008 -lbl_80B81FFC: -/* 80B81FFC 2C 04 C0 00 */ cmpwi r4, -16384 -/* 80B82000 41 81 00 08 */ bgt lbl_80B82008 -/* 80B82004 38 80 C0 00 */ li r4, -16384 -lbl_80B82008: -/* 80B82008 38 7C 15 3A */ addi r3, r28, 0x153a -/* 80B8200C 7F C0 07 34 */ extsh r0, r30 -/* 80B82010 54 00 08 3C */ slwi r0, r0, 1 -/* 80B82014 7C 05 07 34 */ extsh r5, r0 -/* 80B82018 7F A6 EB 78 */ mr r6, r29 -/* 80B8201C 4B 6E E5 ED */ bl cLib_addCalcAngleS2__FPssss -/* 80B82020 7F E3 FB 78 */ mr r3, r31 -/* 80B82024 A8 9C 15 3A */ lha r4, 0x153a(r28) -/* 80B82028 7F C5 07 34 */ extsh r5, r30 -/* 80B8202C 7F A6 EB 78 */ mr r6, r29 -/* 80B82030 4B 6E E5 D9 */ bl cLib_addCalcAngleS2__FPssss -/* 80B82034 39 61 00 20 */ addi r11, r1, 0x20 -/* 80B82038 4B 7E 01 ED */ bl _restgpr_28 -/* 80B8203C 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80B82040 7C 08 03 A6 */ mtlr r0 -/* 80B82044 38 21 00 20 */ addi r1, r1, 0x20 -/* 80B82048 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcSwimAngle__11daNpc_zrA_cFR5csXyzR5csXyzss.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcSwimAngle__11daNpc_zrA_cFR5csXyzR5csXyzss.s deleted file mode 100644 index 1f952725a30..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcSwimAngle__11daNpc_zrA_cFR5csXyzR5csXyzss.s +++ /dev/null @@ -1,37 +0,0 @@ -lbl_80B824F4: -/* 80B824F4 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80B824F8 7C 08 02 A6 */ mflr r0 -/* 80B824FC 90 01 00 24 */ stw r0, 0x24(r1) -/* 80B82500 39 61 00 20 */ addi r11, r1, 0x20 -/* 80B82504 4B 7D FC D1 */ bl _savegpr_27 -/* 80B82508 7C 7B 1B 78 */ mr r27, r3 -/* 80B8250C 7C 9C 23 78 */ mr r28, r4 -/* 80B82510 7C BD 2B 78 */ mr r29, r5 -/* 80B82514 7C DE 33 78 */ mr r30, r6 -/* 80B82518 7C FF 3B 78 */ mr r31, r7 -/* 80B8251C 7F A3 EB 78 */ mr r3, r29 -/* 80B82520 A8 84 00 00 */ lha r4, 0(r4) -/* 80B82524 7F C5 F3 78 */ mr r5, r30 -/* 80B82528 7F E6 FB 78 */ mr r6, r31 -/* 80B8252C 4B 6E E0 DD */ bl cLib_addCalcAngleS2__FPssss -/* 80B82530 38 7B 04 DC */ addi r3, r27, 0x4dc -/* 80B82534 A8 9D 00 00 */ lha r4, 0(r29) -/* 80B82538 7F C5 F3 78 */ mr r5, r30 -/* 80B8253C 7F E6 FB 78 */ mr r6, r31 -/* 80B82540 4B 6E E0 C9 */ bl cLib_addCalcAngleS2__FPssss -/* 80B82544 38 7D 00 02 */ addi r3, r29, 2 -/* 80B82548 A8 9C 00 02 */ lha r4, 2(r28) -/* 80B8254C 7F C5 F3 78 */ mr r5, r30 -/* 80B82550 7F E6 FB 78 */ mr r6, r31 -/* 80B82554 4B 6E E0 B5 */ bl cLib_addCalcAngleS2__FPssss -/* 80B82558 38 7B 04 DE */ addi r3, r27, 0x4de -/* 80B8255C A8 9D 00 02 */ lha r4, 2(r29) -/* 80B82560 7F C5 F3 78 */ mr r5, r30 -/* 80B82564 7F E6 FB 78 */ mr r6, r31 -/* 80B82568 4B 6E E0 A1 */ bl cLib_addCalcAngleS2__FPssss -/* 80B8256C 39 61 00 20 */ addi r11, r1, 0x20 -/* 80B82570 4B 7D FC B1 */ bl _restgpr_27 -/* 80B82574 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80B82578 7C 08 03 A6 */ mtlr r0 -/* 80B8257C 38 21 00 20 */ addi r1, r1, 0x20 -/* 80B82580 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleCheck__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleCheck__11daNpc_zrA_cFv.s deleted file mode 100644 index d7af700ebc4..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleCheck__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_80B822D8: -/* 80B822D8 88 03 15 20 */ lbz r0, 0x1520(r3) -/* 80B822DC 28 00 00 00 */ cmplwi r0, 0 -/* 80B822E0 41 82 00 18 */ beq lbl_80B822F8 -/* 80B822E4 88 03 15 90 */ lbz r0, 0x1590(r3) -/* 80B822E8 28 00 00 00 */ cmplwi r0, 0 -/* 80B822EC 40 82 00 0C */ bne lbl_80B822F8 -/* 80B822F0 38 60 00 01 */ li r3, 1 -/* 80B822F4 4E 80 00 20 */ blr -lbl_80B822F8: -/* 80B822F8 38 60 00 00 */ li r3, 0 -/* 80B822FC 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleStop__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleStop__11daNpc_zrA_cFv.s deleted file mode 100644 index d7cc6dc1d8f..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleStop__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,4 +0,0 @@ -lbl_80B822CC: -/* 80B822CC 38 00 00 01 */ li r0, 1 -/* 80B822D0 98 03 15 90 */ stb r0, 0x1590(r3) -/* 80B822D4 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s deleted file mode 100644 index 5fc81b6375c..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_80B7DAF4: -/* 80B7DAF4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7DAF8 7C 08 02 A6 */ mflr r0 -/* 80B7DAFC 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7DB00 38 63 14 80 */ addi r3, r3, 0x1480 -/* 80B7DB04 4B 7E 45 45 */ bl __ptmf_cmpr -/* 80B7DB08 7C 60 00 34 */ cntlzw r0, r3 -/* 80B7DB0C 54 03 D9 7E */ srwi r3, r0, 5 -/* 80B7DB10 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7DB14 7C 08 03 A6 */ mtlr r0 -/* 80B7DB18 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7DB1C 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkFindPlayer__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkFindPlayer__11daNpc_zrA_cFv.s deleted file mode 100644 index dcae7d193fb..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkFindPlayer__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,49 +0,0 @@ -lbl_80B7E9E0: -/* 80B7E9E0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7E9E4 7C 08 02 A6 */ mflr r0 -/* 80B7E9E8 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7E9EC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80B7E9F0 93 C1 00 08 */ stw r30, 8(r1) -/* 80B7E9F4 7C 7E 1B 78 */ mr r30, r3 -/* 80B7E9F8 38 7E 13 1C */ addi r3, r30, 0x131c -/* 80B7E9FC 4B 5D 1C F1 */ bl getActorP__18daNpcF_ActorMngr_cFv -/* 80B7EA00 28 03 00 00 */ cmplwi r3, 0 -/* 80B7EA04 40 82 00 28 */ bne lbl_80B7EA2C -/* 80B7EA08 7F C3 F3 78 */ mr r3, r30 -/* 80B7EA0C 3C 80 80 40 */ lis r4, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80B7EA10 38 84 61 C0 */ addi r4, r4, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80B7EA14 80 84 5D AC */ lwz r4, 0x5dac(r4) -/* 80B7EA18 7F C5 F3 78 */ mr r5, r30 -/* 80B7EA1C 88 DE 05 47 */ lbz r6, 0x547(r30) -/* 80B7EA20 4B 5D 51 BD */ bl chkActorInAttnArea__8daNpcF_cFP10fopAc_ac_cP10fopAc_ac_ci -/* 80B7EA24 7C 7F 1B 78 */ mr r31, r3 -/* 80B7EA28 48 00 00 24 */ b lbl_80B7EA4C -lbl_80B7EA2C: -/* 80B7EA2C 7F C3 F3 78 */ mr r3, r30 -/* 80B7EA30 3C 80 80 40 */ lis r4, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80B7EA34 38 84 61 C0 */ addi r4, r4, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80B7EA38 80 84 5D AC */ lwz r4, 0x5dac(r4) -/* 80B7EA3C 7F C5 F3 78 */ mr r5, r30 -/* 80B7EA40 88 DE 05 45 */ lbz r6, 0x545(r30) -/* 80B7EA44 4B 5D 51 99 */ bl chkActorInAttnArea__8daNpcF_cFP10fopAc_ac_cP10fopAc_ac_ci -/* 80B7EA48 7C 7F 1B 78 */ mr r31, r3 -lbl_80B7EA4C: -/* 80B7EA4C 2C 1F 00 00 */ cmpwi r31, 0 -/* 80B7EA50 41 82 00 1C */ beq lbl_80B7EA6C -/* 80B7EA54 38 7E 13 1C */ addi r3, r30, 0x131c -/* 80B7EA58 3C 80 80 40 */ lis r4, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80B7EA5C 38 84 61 C0 */ addi r4, r4, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80B7EA60 80 84 5D AC */ lwz r4, 0x5dac(r4) -/* 80B7EA64 4B 5D 1C 59 */ bl entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c -/* 80B7EA68 48 00 00 0C */ b lbl_80B7EA74 -lbl_80B7EA6C: -/* 80B7EA6C 38 7E 13 1C */ addi r3, r30, 0x131c -/* 80B7EA70 4B 5D 1C 71 */ bl remove__18daNpcF_ActorMngr_cFv -lbl_80B7EA74: -/* 80B7EA74 7F E3 FB 78 */ mr r3, r31 -/* 80B7EA78 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80B7EA7C 83 C1 00 08 */ lwz r30, 8(r1) -/* 80B7EA80 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7EA84 7C 08 03 A6 */ mtlr r0 -/* 80B7EA88 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7EA8C 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/createHeapCallBack__11daNpc_zrA_cFP10fopAc_ac_c.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/createHeapCallBack__11daNpc_zrA_cFP10fopAc_ac_c.s deleted file mode 100644 index 576a4d8d98a..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/createHeapCallBack__11daNpc_zrA_cFP10fopAc_ac_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80B7AB9C: -/* 80B7AB9C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7ABA0 7C 08 02 A6 */ mflr r0 -/* 80B7ABA4 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7ABA8 4B FF F3 91 */ bl CreateHeap__11daNpc_zrA_cFv -/* 80B7ABAC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7ABB0 7C 08 03 A6 */ mtlr r0 -/* 80B7ABB4 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7ABB8 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ctrlJointCallBack__11daNpc_zrA_cFP8J3DJointi.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ctrlJointCallBack__11daNpc_zrA_cFP8J3DJointi.s deleted file mode 100644 index 689ebe8be9b..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ctrlJointCallBack__11daNpc_zrA_cFP8J3DJointi.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_80B7ABBC: -/* 80B7ABBC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7ABC0 7C 08 02 A6 */ mflr r0 -/* 80B7ABC4 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7ABC8 7C 60 1B 78 */ mr r0, r3 -/* 80B7ABCC 2C 04 00 00 */ cmpwi r4, 0 -/* 80B7ABD0 40 82 00 24 */ bne lbl_80B7ABF4 -/* 80B7ABD4 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */ -/* 80B7ABD8 38 63 4A C8 */ addi r3, r3, j3dSys@l /* 0x80434AC8@l */ -/* 80B7ABDC 80 A3 00 38 */ lwz r5, 0x38(r3) -/* 80B7ABE0 80 65 00 14 */ lwz r3, 0x14(r5) -/* 80B7ABE4 28 03 00 00 */ cmplwi r3, 0 -/* 80B7ABE8 41 82 00 0C */ beq lbl_80B7ABF4 -/* 80B7ABEC 7C 04 03 78 */ mr r4, r0 -/* 80B7ABF0 4B FF FC 75 */ bl ctrlJoint__11daNpc_zrA_cFP8J3DJointP8J3DModel -lbl_80B7ABF4: -/* 80B7ABF4 38 60 00 01 */ li r3, 1 -/* 80B7ABF8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7ABFC 7C 08 03 A6 */ mtlr r0 -/* 80B7AC00 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7AC04 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Create__FPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Create__FPv.s deleted file mode 100644 index 4312b1033c8..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Create__FPv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80B7ED38: -/* 80B7ED38 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7ED3C 7C 08 02 A6 */ mflr r0 -/* 80B7ED40 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7ED44 4B FF AE 15 */ bl create__11daNpc_zrA_cFv -/* 80B7ED48 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7ED4C 7C 08 03 A6 */ mtlr r0 -/* 80B7ED50 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7ED54 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Delete__FPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Delete__FPv.s deleted file mode 100644 index 7d4acc09b89..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Delete__FPv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80B7ED58: -/* 80B7ED58 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7ED5C 7C 08 02 A6 */ mflr r0 -/* 80B7ED60 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7ED64 4B FF B7 B9 */ bl Delete__11daNpc_zrA_cFv -/* 80B7ED68 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7ED6C 7C 08 03 A6 */ mtlr r0 -/* 80B7ED70 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7ED74 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Draw__FPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Draw__FPv.s deleted file mode 100644 index 42ed82dc27a..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Draw__FPv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80B7ED98: -/* 80B7ED98 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7ED9C 7C 08 02 A6 */ mflr r0 -/* 80B7EDA0 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7EDA4 4B FF B7 CD */ bl Draw__11daNpc_zrA_cFv -/* 80B7EDA8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7EDAC 7C 08 03 A6 */ mtlr r0 -/* 80B7EDB0 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7EDB4 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Execute__FPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Execute__FPv.s deleted file mode 100644 index 12d21eec6cd..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Execute__FPv.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80B7ED78: -/* 80B7ED78 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7ED7C 7C 08 02 A6 */ mflr r0 -/* 80B7ED80 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7ED84 4B FF B7 CD */ bl Execute__11daNpc_zrA_cFv -/* 80B7ED88 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7ED8C 7C 08 03 A6 */ mtlr r0 -/* 80B7ED90 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7ED94 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getActionTypeFromParam__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getActionTypeFromParam__11daNpc_zrA_cFv.s deleted file mode 100644 index b016cdc1466..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getActionTypeFromParam__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,62 +0,0 @@ -lbl_80B7C524: -/* 80B7C524 80 03 00 B0 */ lwz r0, 0xb0(r3) -/* 80B7C528 54 00 87 3E */ rlwinm r0, r0, 0x10, 0x1c, 0x1f -/* 80B7C52C 88 63 14 E8 */ lbz r3, 0x14e8(r3) -/* 80B7C530 28 03 00 00 */ cmplwi r3, 0 -/* 80B7C534 40 82 00 70 */ bne lbl_80B7C5A4 -/* 80B7C538 2C 00 00 04 */ cmpwi r0, 4 -/* 80B7C53C 41 82 00 48 */ beq lbl_80B7C584 -/* 80B7C540 40 80 00 1C */ bge lbl_80B7C55C -/* 80B7C544 2C 00 00 02 */ cmpwi r0, 2 -/* 80B7C548 41 82 00 2C */ beq lbl_80B7C574 -/* 80B7C54C 40 80 00 30 */ bge lbl_80B7C57C -/* 80B7C550 2C 00 00 01 */ cmpwi r0, 1 -/* 80B7C554 40 80 00 18 */ bge lbl_80B7C56C -/* 80B7C558 48 00 00 44 */ b lbl_80B7C59C -lbl_80B7C55C: -/* 80B7C55C 2C 00 00 06 */ cmpwi r0, 6 -/* 80B7C560 41 82 00 34 */ beq lbl_80B7C594 -/* 80B7C564 40 80 00 38 */ bge lbl_80B7C59C -/* 80B7C568 48 00 00 24 */ b lbl_80B7C58C -lbl_80B7C56C: -/* 80B7C56C 38 60 00 01 */ li r3, 1 -/* 80B7C570 4E 80 00 20 */ blr -lbl_80B7C574: -/* 80B7C574 38 60 00 02 */ li r3, 2 -/* 80B7C578 4E 80 00 20 */ blr -lbl_80B7C57C: -/* 80B7C57C 38 60 00 03 */ li r3, 3 -/* 80B7C580 4E 80 00 20 */ blr -lbl_80B7C584: -/* 80B7C584 38 60 00 04 */ li r3, 4 -/* 80B7C588 4E 80 00 20 */ blr -lbl_80B7C58C: -/* 80B7C58C 38 60 00 05 */ li r3, 5 -/* 80B7C590 4E 80 00 20 */ blr -lbl_80B7C594: -/* 80B7C594 38 60 00 06 */ li r3, 6 -/* 80B7C598 4E 80 00 20 */ blr -lbl_80B7C59C: -/* 80B7C59C 38 60 00 00 */ li r3, 0 -/* 80B7C5A0 4E 80 00 20 */ blr -lbl_80B7C5A4: -/* 80B7C5A4 28 03 00 06 */ cmplwi r3, 6 -/* 80B7C5A8 40 82 00 34 */ bne lbl_80B7C5DC -/* 80B7C5AC 2C 00 00 02 */ cmpwi r0, 2 -/* 80B7C5B0 41 82 00 1C */ beq lbl_80B7C5CC -/* 80B7C5B4 40 80 00 20 */ bge lbl_80B7C5D4 -/* 80B7C5B8 2C 00 00 01 */ cmpwi r0, 1 -/* 80B7C5BC 40 80 00 08 */ bge lbl_80B7C5C4 -/* 80B7C5C0 48 00 00 14 */ b lbl_80B7C5D4 -lbl_80B7C5C4: -/* 80B7C5C4 38 60 00 02 */ li r3, 2 -/* 80B7C5C8 4E 80 00 20 */ blr -lbl_80B7C5CC: -/* 80B7C5CC 38 60 00 03 */ li r3, 3 -/* 80B7C5D0 4E 80 00 20 */ blr -lbl_80B7C5D4: -/* 80B7C5D4 38 60 00 00 */ li r3, 0 -/* 80B7C5D8 4E 80 00 20 */ blr -lbl_80B7C5DC: -/* 80B7C5DC 7C 03 03 78 */ mr r3, r0 -/* 80B7C5E0 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getGameModeFromParam__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getGameModeFromParam__11daNpc_zrA_cFv.s deleted file mode 100644 index b7a41b11cb0..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getGameModeFromParam__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_80B7C500: -/* 80B7C500 80 03 00 B0 */ lwz r0, 0xb0(r3) -/* 80B7C504 54 00 67 3E */ rlwinm r0, r0, 0xc, 0x1c, 0x1f -/* 80B7C508 2C 00 00 01 */ cmpwi r0, 1 -/* 80B7C50C 41 82 00 08 */ beq lbl_80B7C514 -/* 80B7C510 48 00 00 0C */ b lbl_80B7C51C -lbl_80B7C514: -/* 80B7C514 38 60 00 03 */ li r3, 3 -/* 80B7C518 4E 80 00 20 */ blr -lbl_80B7C51C: -/* 80B7C51C 38 60 00 00 */ li r3, 0 -/* 80B7C520 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiModeFromParam__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiModeFromParam__11daNpc_zrA_cFv.s deleted file mode 100644 index 7b8b01f2ded..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiModeFromParam__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_80B7C5E4: -/* 80B7C5E4 80 03 00 B0 */ lwz r0, 0xb0(r3) -/* 80B7C5E8 54 04 67 3E */ rlwinm r4, r0, 0xc, 0x1c, 0x1f -/* 80B7C5EC 88 03 14 E8 */ lbz r0, 0x14e8(r3) -/* 80B7C5F0 28 00 00 00 */ cmplwi r0, 0 -/* 80B7C5F4 41 82 00 0C */ beq lbl_80B7C600 -/* 80B7C5F8 38 60 00 00 */ li r3, 0 -/* 80B7C5FC 4E 80 00 20 */ blr -lbl_80B7C600: -/* 80B7C600 28 04 00 0F */ cmplwi r4, 0xf -/* 80B7C604 40 82 00 08 */ bne lbl_80B7C60C -/* 80B7C608 38 80 00 00 */ li r4, 0 -lbl_80B7C60C: -/* 80B7C60C 7C 83 23 78 */ mr r3, r4 -/* 80B7C610 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiNoFromParam__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiNoFromParam__11daNpc_zrA_cFv.s deleted file mode 100644 index 6806b5088a3..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiNoFromParam__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,14 +0,0 @@ -lbl_80B7C614: -/* 80B7C614 80 03 00 B0 */ lwz r0, 0xb0(r3) -/* 80B7C618 54 04 47 3E */ rlwinm r4, r0, 8, 0x1c, 0x1f -/* 80B7C61C 88 03 14 E8 */ lbz r0, 0x14e8(r3) -/* 80B7C620 28 00 00 00 */ cmplwi r0, 0 -/* 80B7C624 41 82 00 0C */ beq lbl_80B7C630 -/* 80B7C628 38 60 00 00 */ li r3, 0 -/* 80B7C62C 4E 80 00 20 */ blr -lbl_80B7C630: -/* 80B7C630 38 04 FF F1 */ addi r0, r4, -15 -/* 80B7C634 30 00 FF FF */ addic r0, r0, -1 -/* 80B7C638 7C 00 01 10 */ subfe r0, r0, r0 -/* 80B7C63C 7C 83 00 78 */ andc r3, r4, r0 -/* 80B7C640 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getSoldierTypeFromParam__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getSoldierTypeFromParam__11daNpc_zrA_cFv.s deleted file mode 100644 index a85b8b0bc08..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getSoldierTypeFromParam__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,25 +0,0 @@ -lbl_80B7C4B4: -/* 80B7C4B4 88 03 14 E8 */ lbz r0, 0x14e8(r3) -/* 80B7C4B8 28 00 00 02 */ cmplwi r0, 2 -/* 80B7C4BC 41 82 00 0C */ beq lbl_80B7C4C8 -/* 80B7C4C0 28 00 00 05 */ cmplwi r0, 5 -/* 80B7C4C4 40 82 00 0C */ bne lbl_80B7C4D0 -lbl_80B7C4C8: -/* 80B7C4C8 38 60 00 01 */ li r3, 1 -/* 80B7C4CC 4E 80 00 20 */ blr -lbl_80B7C4D0: -/* 80B7C4D0 28 00 00 04 */ cmplwi r0, 4 -/* 80B7C4D4 40 82 00 0C */ bne lbl_80B7C4E0 -/* 80B7C4D8 38 60 00 02 */ li r3, 2 -/* 80B7C4DC 4E 80 00 20 */ blr -lbl_80B7C4E0: -/* 80B7C4E0 80 03 00 B0 */ lwz r0, 0xb0(r3) -/* 80B7C4E4 54 00 06 3F */ clrlwi. r0, r0, 0x18 -/* 80B7C4E8 41 82 00 08 */ beq lbl_80B7C4F0 -/* 80B7C4EC 48 00 00 0C */ b lbl_80B7C4F8 -lbl_80B7C4F0: -/* 80B7C4F0 38 60 00 00 */ li r3, 0 -/* 80B7C4F4 4E 80 00 20 */ blr -lbl_80B7C4F8: -/* 80B7C4F8 38 60 00 02 */ li r3, 2 -/* 80B7C4FC 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subHoz__FPvPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subHoz__FPvPv.s deleted file mode 100644 index 0c0653c25ea..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subHoz__FPvPv.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_80B84200: -/* 80B84200 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B84204 7C 08 02 A6 */ mflr r0 -/* 80B84208 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B8420C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80B84210 7C 7F 1B 78 */ mr r31, r3 -/* 80B84214 4B 49 4A CD */ bl fopAc_IsActor__FPv -/* 80B84218 2C 03 00 00 */ cmpwi r3, 0 -/* 80B8421C 41 82 00 18 */ beq lbl_80B84234 -/* 80B84220 A8 1F 00 08 */ lha r0, 8(r31) -/* 80B84224 2C 00 02 57 */ cmpwi r0, 0x257 -/* 80B84228 40 82 00 0C */ bne lbl_80B84234 -/* 80B8422C 7F E3 FB 78 */ mr r3, r31 -/* 80B84230 48 00 00 08 */ b lbl_80B84238 -lbl_80B84234: -/* 80B84234 38 60 00 00 */ li r3, 0 -lbl_80B84238: -/* 80B84238 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80B8423C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B84240 7C 08 03 A6 */ mtlr r0 -/* 80B84244 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B84248 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMark__FPvPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMark__FPvPv.s deleted file mode 100644 index 1a05fe760de..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMark__FPvPv.s +++ /dev/null @@ -1,31 +0,0 @@ -lbl_80B8A3CC: -/* 80B8A3CC 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B8A3D0 7C 08 02 A6 */ mflr r0 -/* 80B8A3D4 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B8A3D8 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80B8A3DC 93 C1 00 08 */ stw r30, 8(r1) -/* 80B8A3E0 7C 7E 1B 78 */ mr r30, r3 -/* 80B8A3E4 7C 9F 23 78 */ mr r31, r4 -/* 80B8A3E8 4B 48 E8 F9 */ bl fopAc_IsActor__FPv -/* 80B8A3EC 2C 03 00 00 */ cmpwi r3, 0 -/* 80B8A3F0 41 82 00 30 */ beq lbl_80B8A420 -/* 80B8A3F4 A8 1E 00 08 */ lha r0, 8(r30) -/* 80B8A3F8 2C 00 02 85 */ cmpwi r0, 0x285 -/* 80B8A3FC 40 82 00 24 */ bne lbl_80B8A420 -/* 80B8A400 80 1E 00 B0 */ lwz r0, 0xb0(r30) -/* 80B8A404 54 03 06 3E */ clrlwi r3, r0, 0x18 -/* 80B8A408 80 1F 00 B0 */ lwz r0, 0xb0(r31) -/* 80B8A40C 54 00 06 3E */ clrlwi r0, r0, 0x18 -/* 80B8A410 7C 03 00 40 */ cmplw r3, r0 -/* 80B8A414 40 82 00 0C */ bne lbl_80B8A420 -/* 80B8A418 7F C3 F3 78 */ mr r3, r30 -/* 80B8A41C 48 00 00 08 */ b lbl_80B8A424 -lbl_80B8A420: -/* 80B8A420 38 60 00 00 */ li r3, 0 -lbl_80B8A424: -/* 80B8A424 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80B8A428 83 C1 00 08 */ lwz r30, 8(r1) -/* 80B8A42C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B8A430 7C 08 03 A6 */ mtlr r0 -/* 80B8A434 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B8A438 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMulti__FPvPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMulti__FPvPv.s deleted file mode 100644 index dd836ec3d9f..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMulti__FPvPv.s +++ /dev/null @@ -1,47 +0,0 @@ -lbl_80B8064C: -/* 80B8064C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B80650 7C 08 02 A6 */ mflr r0 -/* 80B80654 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B80658 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80B8065C 93 C1 00 08 */ stw r30, 8(r1) -/* 80B80660 7C 7E 1B 78 */ mr r30, r3 -/* 80B80664 7C 9F 23 78 */ mr r31, r4 -/* 80B80668 4B 49 86 79 */ bl fopAc_IsActor__FPv -/* 80B8066C 2C 03 00 00 */ cmpwi r3, 0 -/* 80B80670 41 82 00 70 */ beq lbl_80B806E0 -/* 80B80674 A8 1E 00 08 */ lha r0, 8(r30) -/* 80B80678 2C 00 00 E5 */ cmpwi r0, 0xe5 -/* 80B8067C 40 82 00 64 */ bne lbl_80B806E0 -/* 80B80680 7C 1E F8 40 */ cmplw r30, r31 -/* 80B80684 41 82 00 5C */ beq lbl_80B806E0 -/* 80B80688 88 1E 14 E8 */ lbz r0, 0x14e8(r30) -/* 80B8068C 2C 00 00 00 */ cmpwi r0, 0 -/* 80B80690 40 82 00 50 */ bne lbl_80B806E0 -/* 80B80694 7F C3 F3 78 */ mr r3, r30 -/* 80B80698 4B FF BF 4D */ bl getMultiModeFromParam__11daNpc_zrA_cFv -/* 80B8069C 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 80B806A0 41 82 00 40 */ beq lbl_80B806E0 -/* 80B806A4 7F E3 FB 78 */ mr r3, r31 -/* 80B806A8 4B FF BF 3D */ bl getMultiModeFromParam__11daNpc_zrA_cFv -/* 80B806AC 54 7F 06 3E */ clrlwi r31, r3, 0x18 -/* 80B806B0 7F C3 F3 78 */ mr r3, r30 -/* 80B806B4 4B FF BF 31 */ bl getMultiModeFromParam__11daNpc_zrA_cFv -/* 80B806B8 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 80B806BC 7C 00 F8 40 */ cmplw r0, r31 -/* 80B806C0 40 82 00 20 */ bne lbl_80B806E0 -/* 80B806C4 7F C3 F3 78 */ mr r3, r30 -/* 80B806C8 4B FF BF 4D */ bl getMultiNoFromParam__11daNpc_zrA_cFv -/* 80B806CC 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 80B806D0 28 00 00 02 */ cmplwi r0, 2 -/* 80B806D4 40 82 00 0C */ bne lbl_80B806E0 -/* 80B806D8 7F C3 F3 78 */ mr r3, r30 -/* 80B806DC 48 00 00 08 */ b lbl_80B806E4 -lbl_80B806E0: -/* 80B806E0 38 60 00 00 */ li r3, 0 -lbl_80B806E4: -/* 80B806E4 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80B806E8 83 C1 00 08 */ lwz r30, 8(r1) -/* 80B806EC 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B806F0 7C 08 03 A6 */ mtlr r0 -/* 80B806F4 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B806F8 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subSP__FPvPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subSP__FPvPv.s deleted file mode 100644 index a829f2ced57..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subSP__FPvPv.s +++ /dev/null @@ -1,35 +0,0 @@ -lbl_80B8B3A0: -/* 80B8B3A0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B8B3A4 7C 08 02 A6 */ mflr r0 -/* 80B8B3A8 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B8B3AC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80B8B3B0 93 C1 00 08 */ stw r30, 8(r1) -/* 80B8B3B4 7C 7E 1B 78 */ mr r30, r3 -/* 80B8B3B8 7C 9F 23 78 */ mr r31, r4 -/* 80B8B3BC 4B 48 D9 25 */ bl fopAc_IsActor__FPv -/* 80B8B3C0 2C 03 00 00 */ cmpwi r3, 0 -/* 80B8B3C4 41 82 00 40 */ beq lbl_80B8B404 -/* 80B8B3C8 A8 1E 00 08 */ lha r0, 8(r30) -/* 80B8B3CC 2C 00 00 E5 */ cmpwi r0, 0xe5 -/* 80B8B3D0 40 82 00 34 */ bne lbl_80B8B404 -/* 80B8B3D4 88 7E 14 E8 */ lbz r3, 0x14e8(r30) -/* 80B8B3D8 88 1F 14 E8 */ lbz r0, 0x14e8(r31) -/* 80B8B3DC 7C 03 00 00 */ cmpw r3, r0 -/* 80B8B3E0 40 82 00 24 */ bne lbl_80B8B404 -/* 80B8B3E4 80 1E 00 B0 */ lwz r0, 0xb0(r30) -/* 80B8B3E8 54 03 06 3E */ clrlwi r3, r0, 0x18 -/* 80B8B3EC 80 1F 00 B0 */ lwz r0, 0xb0(r31) -/* 80B8B3F0 54 00 06 3E */ clrlwi r0, r0, 0x18 -/* 80B8B3F4 7C 03 00 40 */ cmplw r3, r0 -/* 80B8B3F8 41 82 00 0C */ beq lbl_80B8B404 -/* 80B8B3FC 7F C3 F3 78 */ mr r3, r30 -/* 80B8B400 48 00 00 08 */ b lbl_80B8B408 -lbl_80B8B404: -/* 80B8B404 38 60 00 00 */ li r3, 0 -lbl_80B8B408: -/* 80B8B408 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80B8B40C 83 C1 00 08 */ lwz r30, 8(r1) -/* 80B8B410 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B8B414 7C 08 03 A6 */ mtlr r0 -/* 80B8B418 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B8B41C 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_sub__FPvPv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_sub__FPvPv.s deleted file mode 100644 index dd225607831..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_sub__FPvPv.s +++ /dev/null @@ -1,22 +0,0 @@ -lbl_80B8424C: -/* 80B8424C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B84250 7C 08 02 A6 */ mflr r0 -/* 80B84254 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B84258 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80B8425C 7C 7F 1B 78 */ mr r31, r3 -/* 80B84260 4B 49 4A 81 */ bl fopAc_IsActor__FPv -/* 80B84264 2C 03 00 00 */ cmpwi r3, 0 -/* 80B84268 41 82 00 18 */ beq lbl_80B84280 -/* 80B8426C A8 1F 00 08 */ lha r0, 8(r31) -/* 80B84270 2C 00 00 ED */ cmpwi r0, 0xed -/* 80B84274 40 82 00 0C */ bne lbl_80B84280 -/* 80B84278 7F E3 FB 78 */ mr r3, r31 -/* 80B8427C 48 00 00 08 */ b lbl_80B84284 -lbl_80B84280: -/* 80B84280 38 60 00 00 */ li r3, 0 -lbl_80B84284: -/* 80B84284 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80B84288 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B8428C 7C 08 03 A6 */ mtlr r0 -/* 80B84290 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B84294 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s deleted file mode 100644 index ff5535fa3a3..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s +++ /dev/null @@ -1,45 +0,0 @@ -lbl_80B7DB20: -/* 80B7DB20 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B7DB24 7C 08 02 A6 */ mflr r0 -/* 80B7DB28 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B7DB2C 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80B7DB30 93 C1 00 08 */ stw r30, 8(r1) -/* 80B7DB34 7C 7E 1B 78 */ mr r30, r3 -/* 80B7DB38 7C 9F 23 78 */ mr r31, r4 -/* 80B7DB3C 38 00 00 03 */ li r0, 3 -/* 80B7DB40 B0 03 14 E6 */ sth r0, 0x14e6(r3) -/* 80B7DB44 38 7E 14 80 */ addi r3, r30, 0x1480 -/* 80B7DB48 4B 7E 44 D1 */ bl __ptmf_test -/* 80B7DB4C 2C 03 00 00 */ cmpwi r3, 0 -/* 80B7DB50 41 82 00 18 */ beq lbl_80B7DB68 -/* 80B7DB54 7F C3 F3 78 */ mr r3, r30 -/* 80B7DB58 38 80 00 00 */ li r4, 0 -/* 80B7DB5C 39 9E 14 80 */ addi r12, r30, 0x1480 -/* 80B7DB60 4B 7E 45 25 */ bl __ptmf_scall -/* 80B7DB64 60 00 00 00 */ nop -lbl_80B7DB68: -/* 80B7DB68 38 00 00 00 */ li r0, 0 -/* 80B7DB6C B0 1E 14 E6 */ sth r0, 0x14e6(r30) -/* 80B7DB70 80 7F 00 00 */ lwz r3, 0(r31) -/* 80B7DB74 80 1F 00 04 */ lwz r0, 4(r31) -/* 80B7DB78 90 7E 14 80 */ stw r3, 0x1480(r30) -/* 80B7DB7C 90 1E 14 84 */ stw r0, 0x1484(r30) -/* 80B7DB80 80 1F 00 08 */ lwz r0, 8(r31) -/* 80B7DB84 90 1E 14 88 */ stw r0, 0x1488(r30) -/* 80B7DB88 38 7E 14 80 */ addi r3, r30, 0x1480 -/* 80B7DB8C 4B 7E 44 8D */ bl __ptmf_test -/* 80B7DB90 2C 03 00 00 */ cmpwi r3, 0 -/* 80B7DB94 41 82 00 18 */ beq lbl_80B7DBAC -/* 80B7DB98 7F C3 F3 78 */ mr r3, r30 -/* 80B7DB9C 38 80 00 00 */ li r4, 0 -/* 80B7DBA0 39 9E 14 80 */ addi r12, r30, 0x1480 -/* 80B7DBA4 4B 7E 44 E1 */ bl __ptmf_scall -/* 80B7DBA8 60 00 00 00 */ nop -lbl_80B7DBAC: -/* 80B7DBAC 38 60 00 01 */ li r3, 1 -/* 80B7DBB0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80B7DBB4 83 C1 00 08 */ lwz r30, 8(r1) -/* 80B7DBB8 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B7DBBC 7C 08 03 A6 */ mtlr r0 -/* 80B7DBC0 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B7DBC4 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpression__11daNpc_zrA_cFif.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpression__11daNpc_zrA_cFif.s deleted file mode 100644 index e187126aad0..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpression__11daNpc_zrA_cFif.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_80B7BE74: -/* 80B7BE74 2C 04 00 00 */ cmpwi r4, 0 -/* 80B7BE78 4D 80 00 20 */ bltlr -/* 80B7BE7C 2C 04 00 15 */ cmpwi r4, 0x15 -/* 80B7BE80 4C 80 00 20 */ bgelr -/* 80B7BE84 B0 83 09 DE */ sth r4, 0x9de(r3) -/* 80B7BE88 D0 23 09 74 */ stfs f1, 0x974(r3) -/* 80B7BE8C 38 00 FF FF */ li r0, -1 -/* 80B7BE90 B0 03 09 D8 */ sth r0, 0x9d8(r3) -/* 80B7BE94 38 00 00 00 */ li r0, 0 -/* 80B7BE98 B0 03 09 D6 */ sth r0, 0x9d6(r3) -/* 80B7BE9C 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setLookMode__11daNpc_zrA_cFi.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setLookMode__11daNpc_zrA_cFi.s deleted file mode 100644 index 39e4ef6c4ba..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setLookMode__11daNpc_zrA_cFi.s +++ /dev/null @@ -1,10 +0,0 @@ -lbl_80B7E6F4: -/* 80B7E6F4 2C 04 00 00 */ cmpwi r4, 0 -/* 80B7E6F8 4D 80 00 20 */ bltlr -/* 80B7E6FC 2C 04 00 06 */ cmpwi r4, 6 -/* 80B7E700 4C 80 00 20 */ bgelr -/* 80B7E704 A8 03 14 E4 */ lha r0, 0x14e4(r3) -/* 80B7E708 7C 04 00 00 */ cmpw r4, r0 -/* 80B7E70C 4D 82 00 20 */ beqlr -/* 80B7E710 B0 83 14 E4 */ sth r4, 0x14e4(r3) -/* 80B7E714 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMotion__11daNpc_zrA_cFifi.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMotion__11daNpc_zrA_cFifi.s deleted file mode 100644 index df2f1bebfca..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMotion__11daNpc_zrA_cFifi.s +++ /dev/null @@ -1,19 +0,0 @@ -lbl_80B7C308: -/* 80B7C308 7C 86 07 34 */ extsh r6, r4 -/* 80B7C30C 2C 05 00 00 */ cmpwi r5, 0 -/* 80B7C310 40 82 00 10 */ bne lbl_80B7C320 -/* 80B7C314 A8 03 09 E0 */ lha r0, 0x9e0(r3) -/* 80B7C318 7C 00 30 00 */ cmpw r0, r6 -/* 80B7C31C 4D 82 00 20 */ beqlr -lbl_80B7C320: -/* 80B7C320 2C 04 00 00 */ cmpwi r4, 0 -/* 80B7C324 4D 80 00 20 */ bltlr -/* 80B7C328 2C 04 00 24 */ cmpwi r4, 0x24 -/* 80B7C32C 4C 80 00 20 */ bgelr -/* 80B7C330 B0 C3 09 E0 */ sth r6, 0x9e0(r3) -/* 80B7C334 D0 23 09 7C */ stfs f1, 0x97c(r3) -/* 80B7C338 38 00 FF FF */ li r0, -1 -/* 80B7C33C B0 03 09 DC */ sth r0, 0x9dc(r3) -/* 80B7C340 38 00 00 00 */ li r0, 0 -/* 80B7C344 B0 03 09 DA */ sth r0, 0x9da(r3) -/* 80B7C348 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setParam__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setParam__11daNpc_zrA_cFv.s deleted file mode 100644 index 59127552696..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setParam__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,136 +0,0 @@ -lbl_80B7AC08: -/* 80B7AC08 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80B7AC0C 7C 08 02 A6 */ mflr r0 -/* 80B7AC10 90 01 00 24 */ stw r0, 0x24(r1) -/* 80B7AC14 39 61 00 20 */ addi r11, r1, 0x20 -/* 80B7AC18 4B 7E 75 C5 */ bl _savegpr_29 -/* 80B7AC1C 7C 7D 1B 78 */ mr r29, r3 -/* 80B7AC20 3B C0 00 0A */ li r30, 0xa -/* 80B7AC24 80 03 05 FC */ lwz r0, 0x5fc(r3) -/* 80B7AC28 54 1F A7 FE */ rlwinm r31, r0, 0x14, 0x1f, 0x1f -/* 80B7AC2C 88 03 09 F4 */ lbz r0, 0x9f4(r3) -/* 80B7AC30 28 00 00 00 */ cmplwi r0, 0 -/* 80B7AC34 41 82 00 0C */ beq lbl_80B7AC40 -/* 80B7AC38 3C 60 00 80 */ lis r3, 0x0080 /* 0x0080000A@ha */ -/* 80B7AC3C 3B C3 00 0A */ addi r30, r3, 0x000A /* 0x0080000A@l */ -lbl_80B7AC40: -/* 80B7AC40 7F A3 EB 78 */ mr r3, r29 -/* 80B7AC44 48 00 2F 85 */ bl selectAction__11daNpc_zrA_cFv -/* 80B7AC48 88 1D 09 F4 */ lbz r0, 0x9f4(r29) -/* 80B7AC4C 28 00 00 00 */ cmplwi r0, 0 -/* 80B7AC50 40 82 00 20 */ bne lbl_80B7AC70 -/* 80B7AC54 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80B7AC58 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80B7AC5C 80 63 5D B4 */ lwz r3, 0x5db4(r3) -/* 80B7AC60 80 03 05 74 */ lwz r0, 0x574(r3) -/* 80B7AC64 54 00 01 8D */ rlwinm. r0, r0, 0, 6, 6 -/* 80B7AC68 41 82 00 08 */ beq lbl_80B7AC70 -/* 80B7AC6C 3B C0 00 00 */ li r30, 0 -lbl_80B7AC70: -/* 80B7AC70 88 1D 15 21 */ lbz r0, 0x1521(r29) -/* 80B7AC74 28 00 00 00 */ cmplwi r0, 0 -/* 80B7AC78 41 82 00 68 */ beq lbl_80B7ACE0 -/* 80B7AC7C 38 00 00 00 */ li r0, 0 -/* 80B7AC80 90 1D 14 D0 */ stw r0, 0x14d0(r29) -/* 80B7AC84 90 1D 14 D4 */ stw r0, 0x14d4(r29) -/* 80B7AC88 3B C0 00 02 */ li r30, 2 -/* 80B7AC8C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80B7AC90 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80B7AC94 80 63 5D AC */ lwz r3, 0x5dac(r3) -/* 80B7AC98 80 03 05 70 */ lwz r0, 0x570(r3) -/* 80B7AC9C 54 00 05 EF */ rlwinm. r0, r0, 0, 0x17, 0x17 -/* 80B7ACA0 41 82 00 08 */ beq lbl_80B7ACA8 -/* 80B7ACA4 3B C0 00 00 */ li r30, 0 -lbl_80B7ACA8: -/* 80B7ACA8 88 1D 15 3C */ lbz r0, 0x153c(r29) -/* 80B7ACAC 28 00 00 01 */ cmplwi r0, 1 -/* 80B7ACB0 41 82 00 10 */ beq lbl_80B7ACC0 -/* 80B7ACB4 88 1D 15 20 */ lbz r0, 0x1520(r29) -/* 80B7ACB8 28 00 00 02 */ cmplwi r0, 2 -/* 80B7ACBC 40 82 00 08 */ bne lbl_80B7ACC4 -lbl_80B7ACC0: -/* 80B7ACC0 3B C0 00 00 */ li r30, 0 -lbl_80B7ACC4: -/* 80B7ACC4 38 00 00 40 */ li r0, 0x40 -/* 80B7ACC8 98 1D 05 44 */ stb r0, 0x544(r29) -/* 80B7ACCC 88 1D 05 44 */ lbz r0, 0x544(r29) -/* 80B7ACD0 98 1D 05 45 */ stb r0, 0x545(r29) -/* 80B7ACD4 38 00 00 3F */ li r0, 0x3f -/* 80B7ACD8 98 1D 05 47 */ stb r0, 0x547(r29) -/* 80B7ACDC 48 00 00 74 */ b lbl_80B7AD50 -lbl_80B7ACE0: -/* 80B7ACE0 88 1D 14 E8 */ lbz r0, 0x14e8(r29) -/* 80B7ACE4 28 00 00 00 */ cmplwi r0, 0 -/* 80B7ACE8 41 82 00 2C */ beq lbl_80B7AD14 -/* 80B7ACEC 28 00 00 06 */ cmplwi r0, 6 -/* 80B7ACF0 41 82 00 24 */ beq lbl_80B7AD14 -/* 80B7ACF4 28 00 00 05 */ cmplwi r0, 5 -/* 80B7ACF8 41 82 00 1C */ beq lbl_80B7AD14 -/* 80B7ACFC 28 00 00 02 */ cmplwi r0, 2 -/* 80B7AD00 40 82 00 10 */ bne lbl_80B7AD10 -/* 80B7AD04 88 1D 15 94 */ lbz r0, 0x1594(r29) -/* 80B7AD08 28 00 00 00 */ cmplwi r0, 0 -/* 80B7AD0C 41 82 00 08 */ beq lbl_80B7AD14 -lbl_80B7AD10: -/* 80B7AD10 3B C0 00 00 */ li r30, 0 -lbl_80B7AD14: -/* 80B7AD14 38 00 00 00 */ li r0, 0 -/* 80B7AD18 90 1D 14 D0 */ stw r0, 0x14d0(r29) -/* 80B7AD1C 90 1D 14 D4 */ stw r0, 0x14d4(r29) -/* 80B7AD20 7F A3 EB 78 */ mr r3, r29 -/* 80B7AD24 38 80 00 05 */ li r4, 5 -/* 80B7AD28 38 A0 00 06 */ li r5, 6 -/* 80B7AD2C 4B 5D 95 4D */ bl getDistTableIdx__8daNpcF_cFii -/* 80B7AD30 98 7D 05 44 */ stb r3, 0x544(r29) -/* 80B7AD34 88 1D 05 44 */ lbz r0, 0x544(r29) -/* 80B7AD38 98 1D 05 45 */ stb r0, 0x545(r29) -/* 80B7AD3C 7F A3 EB 78 */ mr r3, r29 -/* 80B7AD40 38 80 00 03 */ li r4, 3 -/* 80B7AD44 38 A0 00 06 */ li r5, 6 -/* 80B7AD48 4B 5D 95 31 */ bl getDistTableIdx__8daNpcF_cFii -/* 80B7AD4C 98 7D 05 47 */ stb r3, 0x547(r29) -lbl_80B7AD50: -/* 80B7AD50 93 DD 05 5C */ stw r30, 0x55c(r29) -/* 80B7AD54 3C 60 80 B9 */ lis r3, m__17daNpc_zrA_Param_c@ha /* 0x80B8C458@ha */ -/* 80B7AD58 38 63 C4 58 */ addi r3, r3, m__17daNpc_zrA_Param_c@l /* 0x80B8C458@l */ -/* 80B7AD5C C0 03 00 08 */ lfs f0, 8(r3) -/* 80B7AD60 D0 1D 04 EC */ stfs f0, 0x4ec(r29) -/* 80B7AD64 D0 1D 04 F0 */ stfs f0, 0x4f0(r29) -/* 80B7AD68 D0 1D 04 F4 */ stfs f0, 0x4f4(r29) -/* 80B7AD6C 88 1D 15 20 */ lbz r0, 0x1520(r29) -/* 80B7AD70 28 00 00 00 */ cmplwi r0, 0 -/* 80B7AD74 41 82 00 14 */ beq lbl_80B7AD88 -/* 80B7AD78 38 7D 04 EC */ addi r3, r29, 0x4ec -/* 80B7AD7C 7C 64 1B 78 */ mr r4, r3 -/* 80B7AD80 C0 3D 15 6C */ lfs f1, 0x156c(r29) -/* 80B7AD84 4B 7C C3 55 */ bl PSVECScale -lbl_80B7AD88: -/* 80B7AD88 38 7D 07 E4 */ addi r3, r29, 0x7e4 -/* 80B7AD8C 3C 80 80 B9 */ lis r4, m__17daNpc_zrA_Param_c@ha /* 0x80B8C458@ha */ -/* 80B7AD90 38 84 C4 58 */ addi r4, r4, m__17daNpc_zrA_Param_c@l /* 0x80B8C458@l */ -/* 80B7AD94 C0 24 00 1C */ lfs f1, 0x1c(r4) -/* 80B7AD98 4B 4F B1 A9 */ bl SetWallR__12dBgS_AcchCirFf -/* 80B7AD9C 3C 60 80 B9 */ lis r3, m__17daNpc_zrA_Param_c@ha /* 0x80B8C458@ha */ -/* 80B7ADA0 38 63 C4 58 */ addi r3, r3, m__17daNpc_zrA_Param_c@l /* 0x80B8C458@l */ -/* 80B7ADA4 C0 03 00 18 */ lfs f0, 0x18(r3) -/* 80B7ADA8 D0 1D 08 14 */ stfs f0, 0x814(r29) -/* 80B7ADAC 88 1D 14 E8 */ lbz r0, 0x14e8(r29) -/* 80B7ADB0 28 00 00 00 */ cmplwi r0, 0 -/* 80B7ADB4 40 82 00 0C */ bne lbl_80B7ADC0 -/* 80B7ADB8 2C 1F 00 00 */ cmpwi r31, 0 -/* 80B7ADBC 41 82 00 0C */ beq lbl_80B7ADC8 -lbl_80B7ADC0: -/* 80B7ADC0 28 00 00 06 */ cmplwi r0, 6 -/* 80B7ADC4 40 82 00 14 */ bne lbl_80B7ADD8 -lbl_80B7ADC8: -/* 80B7ADC8 3C 60 80 B9 */ lis r3, m__17daNpc_zrA_Param_c@ha /* 0x80B8C458@ha */ -/* 80B7ADCC 38 63 C4 58 */ addi r3, r3, m__17daNpc_zrA_Param_c@l /* 0x80B8C458@l */ -/* 80B7ADD0 C0 03 00 04 */ lfs f0, 4(r3) -/* 80B7ADD4 D0 1D 05 30 */ stfs f0, 0x530(r29) -lbl_80B7ADD8: -/* 80B7ADD8 39 61 00 20 */ addi r11, r1, 0x20 -/* 80B7ADDC 4B 7E 74 4D */ bl _restgpr_29 -/* 80B7ADE0 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80B7ADE4 7C 08 03 A6 */ mtlr r0 -/* 80B7ADE8 38 21 00 20 */ addi r1, r1, 0x20 -/* 80B7ADEC 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setSkipZev__11daNpc_zrA_cFii.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setSkipZev__11daNpc_zrA_cFii.s deleted file mode 100644 index 35b06334f26..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setSkipZev__11daNpc_zrA_cFii.s +++ /dev/null @@ -1,38 +0,0 @@ -lbl_80B7E668: -/* 80B7E668 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 80B7E66C 7C 08 02 A6 */ mflr r0 -/* 80B7E670 90 01 00 24 */ stw r0, 0x24(r1) -/* 80B7E674 39 61 00 20 */ addi r11, r1, 0x20 -/* 80B7E678 4B 7E 3B 61 */ bl _savegpr_28 -/* 80B7E67C 7C 7C 1B 78 */ mr r28, r3 -/* 80B7E680 7C 9D 23 78 */ mr r29, r4 -/* 80B7E684 7C BE 2B 78 */ mr r30, r5 -/* 80B7E688 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80B7E68C 3B E3 61 C0 */ addi r31, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80B7E690 38 7F 4F F8 */ addi r3, r31, 0x4ff8 -/* 80B7E694 4B 4C 9D 55 */ bl getRunEventName__16dEvent_manager_cFv -/* 80B7E698 57 A0 10 3A */ slwi r0, r29, 2 -/* 80B7E69C 3C 80 80 B9 */ lis r4, l_evtNames@ha /* 0x80B8D1C4@ha */ -/* 80B7E6A0 38 84 D1 C4 */ addi r4, r4, l_evtNames@l /* 0x80B8D1C4@l */ -/* 80B7E6A4 7C 84 00 2E */ lwzx r4, r4, r0 -/* 80B7E6A8 4B 7E A2 ED */ bl strcmp -/* 80B7E6AC 2C 03 00 00 */ cmpwi r3, 0 -/* 80B7E6B0 40 82 00 28 */ bne lbl_80B7E6D8 -/* 80B7E6B4 38 7F 4E C8 */ addi r3, r31, 0x4ec8 -/* 80B7E6B8 7F 84 E3 78 */ mr r4, r28 -/* 80B7E6BC 57 C0 10 3A */ slwi r0, r30, 2 -/* 80B7E6C0 3C A0 80 B9 */ lis r5, l_evtNames@ha /* 0x80B8D1C4@ha */ -/* 80B7E6C4 38 A5 D1 C4 */ addi r5, r5, l_evtNames@l /* 0x80B8D1C4@l */ -/* 80B7E6C8 7C A5 00 2E */ lwzx r5, r5, r0 -/* 80B7E6CC 4B 4C 42 8D */ bl setSkipZev__14dEvt_control_cFPvPc -/* 80B7E6D0 38 60 00 01 */ li r3, 1 -/* 80B7E6D4 48 00 00 08 */ b lbl_80B7E6DC -lbl_80B7E6D8: -/* 80B7E6D8 38 60 00 00 */ li r3, 0 -lbl_80B7E6DC: -/* 80B7E6DC 39 61 00 20 */ addi r11, r1, 0x20 -/* 80B7E6E0 4B 7E 3B 45 */ bl _restgpr_28 -/* 80B7E6E4 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80B7E6E8 7C 08 03 A6 */ mtlr r0 -/* 80B7E6EC 38 21 00 20 */ addi r1, r1, 0x20 -/* 80B7E6F0 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitSwim__11daNpc_zrA_cFv.s b/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitSwim__11daNpc_zrA_cFv.s deleted file mode 100644 index 3344fbdcd11..00000000000 --- a/asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitSwim__11daNpc_zrA_cFv.s +++ /dev/null @@ -1,107 +0,0 @@ -lbl_80B81788: -/* 80B81788 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80B8178C 7C 08 02 A6 */ mflr r0 -/* 80B81790 90 01 00 14 */ stw r0, 0x14(r1) -/* 80B81794 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80B81798 93 C1 00 08 */ stw r30, 8(r1) -/* 80B8179C 7C 7F 1B 78 */ mr r31, r3 -/* 80B817A0 48 00 0B 61 */ bl calcModulation__11daNpc_zrA_cFv -/* 80B817A4 80 1F 09 54 */ lwz r0, 0x954(r31) -/* 80B817A8 2C 00 00 00 */ cmpwi r0, 0 -/* 80B817AC 40 82 01 50 */ bne lbl_80B818FC -/* 80B817B0 38 7F 13 1C */ addi r3, r31, 0x131c -/* 80B817B4 4B 5C EF 39 */ bl getActorP__18daNpcF_ActorMngr_cFv -/* 80B817B8 30 03 FF FF */ addic r0, r3, -1 -/* 80B817BC 7C 00 19 10 */ subfe r0, r0, r3 -/* 80B817C0 54 1E 06 3E */ clrlwi r30, r0, 0x18 -/* 80B817C4 7F E3 FB 78 */ mr r3, r31 -/* 80B817C8 7F C4 F3 78 */ mr r4, r30 -/* 80B817CC A8 BF 04 E6 */ lha r5, 0x4e6(r31) -/* 80B817D0 4B 5D 32 11 */ bl chkFindPlayer2__8daNpcF_cFis -/* 80B817D4 2C 03 00 00 */ cmpwi r3, 0 -/* 80B817D8 41 82 00 2C */ beq lbl_80B81804 -/* 80B817DC 2C 1E 00 00 */ cmpwi r30, 0 -/* 80B817E0 40 82 00 3C */ bne lbl_80B8181C -/* 80B817E4 38 7F 13 1C */ addi r3, r31, 0x131c -/* 80B817E8 3C 80 80 40 */ lis r4, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80B817EC 38 84 61 C0 */ addi r4, r4, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80B817F0 80 84 5D AC */ lwz r4, 0x5dac(r4) -/* 80B817F4 4B 5C EE C9 */ bl entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c -/* 80B817F8 38 00 00 00 */ li r0, 0 -/* 80B817FC 90 1F 09 6C */ stw r0, 0x96c(r31) -/* 80B81800 48 00 00 1C */ b lbl_80B8181C -lbl_80B81804: -/* 80B81804 2C 1E 00 00 */ cmpwi r30, 0 -/* 80B81808 41 82 00 14 */ beq lbl_80B8181C -/* 80B8180C 38 7F 13 1C */ addi r3, r31, 0x131c -/* 80B81810 4B 5C EE D1 */ bl remove__18daNpcF_ActorMngr_cFv -/* 80B81814 38 00 00 00 */ li r0, 0 -/* 80B81818 90 1F 09 6C */ stw r0, 0x96c(r31) -lbl_80B8181C: -/* 80B8181C 38 7F 13 1C */ addi r3, r31, 0x131c -/* 80B81820 4B 5C EE CD */ bl getActorP__18daNpcF_ActorMngr_cFv -/* 80B81824 28 03 00 00 */ cmplwi r3, 0 -/* 80B81828 41 82 00 14 */ beq lbl_80B8183C -/* 80B8182C 7F E3 FB 78 */ mr r3, r31 -/* 80B81830 38 80 00 02 */ li r4, 2 -/* 80B81834 4B FF CE C1 */ bl setLookMode__11daNpc_zrA_cFi -/* 80B81838 48 00 00 44 */ b lbl_80B8187C -lbl_80B8183C: -/* 80B8183C 7F E3 FB 78 */ mr r3, r31 -/* 80B81840 38 80 00 00 */ li r4, 0 -/* 80B81844 4B FF CE B1 */ bl setLookMode__11daNpc_zrA_cFi -/* 80B81848 A8 9F 04 B6 */ lha r4, 0x4b6(r31) -/* 80B8184C A8 1F 08 F2 */ lha r0, 0x8f2(r31) -/* 80B81850 7C 04 00 00 */ cmpw r4, r0 -/* 80B81854 41 82 00 28 */ beq lbl_80B8187C -/* 80B81858 7F E3 FB 78 */ mr r3, r31 -/* 80B8185C 38 A0 FF FF */ li r5, -1 -/* 80B81860 38 C0 FF FF */ li r6, -1 -/* 80B81864 38 E0 00 0F */ li r7, 0xf -/* 80B81868 4B 5D 28 3D */ bl step__8daNpcF_cFsiii -/* 80B8186C 2C 03 00 00 */ cmpwi r3, 0 -/* 80B81870 41 82 00 0C */ beq lbl_80B8187C -/* 80B81874 38 00 00 00 */ li r0, 0 -/* 80B81878 B0 1F 14 E6 */ sth r0, 0x14e6(r31) -lbl_80B8187C: -/* 80B8187C A8 7F 04 B6 */ lha r3, 0x4b6(r31) -/* 80B81880 A8 1F 08 F2 */ lha r0, 0x8f2(r31) -/* 80B81884 7C 03 00 00 */ cmpw r3, r0 -/* 80B81888 40 82 00 6C */ bne lbl_80B818F4 -/* 80B8188C 38 7F 13 1C */ addi r3, r31, 0x131c -/* 80B81890 4B 5C EE 5D */ bl getActorP__18daNpcF_ActorMngr_cFv -/* 80B81894 30 03 FF FF */ addic r0, r3, -1 -/* 80B81898 7C 00 19 10 */ subfe r0, r0, r3 -/* 80B8189C 54 04 06 3E */ clrlwi r4, r0, 0x18 -/* 80B818A0 7F E3 FB 78 */ mr r3, r31 -/* 80B818A4 3C A0 80 15 */ lis r5, srchAttnActor1__8daNpcF_cFPvPv@ha /* 0x80152654@ha */ -/* 80B818A8 38 A5 26 54 */ addi r5, r5, srchAttnActor1__8daNpcF_cFPvPv@l /* 0x80152654@l */ -/* 80B818AC 3C C0 80 B9 */ lis r6, m__17daNpc_zrA_Param_c@ha /* 0x80B8C458@ha */ -/* 80B818B0 38 C6 C4 58 */ addi r6, r6, m__17daNpc_zrA_Param_c@l /* 0x80B8C458@l */ -/* 80B818B4 C0 26 00 54 */ lfs f1, 0x54(r6) -/* 80B818B8 C0 46 00 58 */ lfs f2, 0x58(r6) -/* 80B818BC C0 66 00 5C */ lfs f3, 0x5c(r6) -/* 80B818C0 C0 86 00 50 */ lfs f4, 0x50(r6) -/* 80B818C4 A8 DF 04 E6 */ lha r6, 0x4e6(r31) -/* 80B818C8 38 E0 00 78 */ li r7, 0x78 -/* 80B818CC 39 00 00 01 */ li r8, 1 -/* 80B818D0 4B 5D 2A 9D */ bl getAttnActorP__8daNpcF_cFiPFPvPv_Pvffffsii -/* 80B818D4 7C 64 1B 79 */ or. r4, r3, r3 -/* 80B818D8 41 82 00 24 */ beq lbl_80B818FC -/* 80B818DC 38 7F 13 24 */ addi r3, r31, 0x1324 -/* 80B818E0 4B 5C ED DD */ bl entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c -/* 80B818E4 7F E3 FB 78 */ mr r3, r31 -/* 80B818E8 38 80 00 05 */ li r4, 5 -/* 80B818EC 4B FF CE 09 */ bl setLookMode__11daNpc_zrA_cFi -/* 80B818F0 48 00 00 0C */ b lbl_80B818FC -lbl_80B818F4: -/* 80B818F4 38 00 00 00 */ li r0, 0 -/* 80B818F8 90 1F 09 38 */ stw r0, 0x938(r31) -lbl_80B818FC: -/* 80B818FC 38 60 00 01 */ li r3, 1 -/* 80B81900 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80B81904 83 C1 00 08 */ lwz r30, 8(r1) -/* 80B81908 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80B8190C 7C 08 03 A6 */ mtlr r0 -/* 80B81910 38 21 00 10 */ addi r1, r1, 0x10 -/* 80B81914 4E 80 00 20 */ blr diff --git a/include/d/a/d_a_npc.h b/include/d/a/d_a_npc.h index 63afb943ee5..70c4d898dd6 100644 --- a/include/d/a/d_a_npc.h +++ b/include/d/a/d_a_npc.h @@ -20,7 +20,7 @@ struct daNpc_GetParam2 { // name unknown /* 0x8 */ int arcIdx; }; -struct dPnt {}; +struct dPnt : public dStage_dPnt_c {}; class daNpcT_ActorMngr_c { private: @@ -421,248 +421,6 @@ STATIC_ASSERT(sizeof(daNpcT_c) == 0xE40); BOOL daNpcT_chkEvtBit(u32 i_idx); BOOL daNpcT_chkPointInArea(cXyz param_0, cXyz param_1, cXyz param_2, s16 param_3, int param_4); -BOOL daNpcF_chkPointInArea(cXyz, cXyz, cXyz, s16); - -class daNpcF_ActorMngr_c { -private: - /* 0x0 */ u32 mActorID; - -public: - daNpcF_ActorMngr_c() { initialize(); } - - /* 801506B0 */ void initialize(); - /* 801506D8 */ void entry(unsigned int); - /* 801506BC */ void entry(fopAc_ac_c*); - /* 801506E0 */ void remove(); - /* 801506EC */ fopAc_ac_c* getActorP(); - - /* 80155E40 */ virtual ~daNpcF_ActorMngr_c(); -}; - -class daNpcF_c : public fopAc_ac_c { -protected: - /* 0x568 */ mDoExt_McaMorfSO* mpMorf; - /* 0x56C */ mDoExt_bckAnm mBckAnm; - /* 0x588 */ mDoExt_btpAnm mBtpAnm; - /* 0x5A0 */ mDoExt_btkAnm mBtkAnm; - /* 0x5B8 */ mDoExt_brkAnm mBrkAnm; - /* 0x5D0 */ dBgS_ObjAcch mAcch; - /* 0x7A8 */ dCcD_Stts mCcStts; - /* 0x7E4 */ dBgS_AcchCir mAcchCir; - /* 0x824 */ daNpcF_ActorMngr_c field_0x824; - /* 0x82C */ daNpcF_ActorMngr_c mAttnActor[5]; - /* 0x854 */ cXyz mLookatPos[3]; - /* 0x878 */ cXyz mLookPos; - /* 0x884 */ cXyz field_0x884; - /* 0x890 */ cXyz field_0x890; - /* 0x89C */ cXyz field_0x89c; - /* 0x8A8 */ cXyz field_0x8a8; - /* 0x8B4 */ cXyz field_0x8b4; - /* 0x8C0 */ cXyz field_0x8c0; - /* 0x8CC */ cXyz field_0x8cc; - /* 0x8D8 */ cXyz field_0x8d8; - /* 0x8E4 */ cXyz mHeadPos; - /* 0x8F0 */ csXyz field_0x8f0; - /* 0x8F6 */ csXyz field_0x8f6; - /* 0x8FC */ csXyz mEyeAngle; - /* 0x902 */ csXyz mHeadAngle; - /* 0x908 */ csXyz field_0x908[3]; - /* 0x91A */ csXyz field_0x91a[3]; - /* 0x92C */ int mCutIndex; - /* 0x930 */ u32 field_0x930; - /* 0x934 */ int mAttnIdx; - /* 0x938 */ int mAttnChangeTimer; - /* 0x93C */ int mAttnActorTimer[5]; - /* 0x950 */ int field_0x950; - /* 0x954 */ int field_0x954; - /* 0x958 */ int field_0x958; - /* 0x95C */ int field_0x95c; - /* 0x960 */ int field_0x960; - /* 0x964 */ int field_0x964; - /* 0x968 */ int field_0x968; - /* 0x96C */ int field_0x96c; - /* 0x970 */ f32 field_0x970; - /* 0x974 */ f32 mExpressionMorfOverride; - /* 0x978 */ f32 mExpressionMorf; - /* 0x97C */ f32 mMotionMorfOverride; - /* 0x980 */ f32 field_0x980; - /* 0x984 */ f32 field_0x984[3]; - /* 0x990 */ u16 field_0x990; - /* 0x992 */ u16 field_0x992; - /* 0x994 */ u16 field_0x994; - /* 0x996 */ s16 field_0x996; - /* 0x998 */ u16 field_0x998; - /* 0x99C */ u32 mAnmFlags; - /* 0x9A0 */ u32 field_0x9a0; - /* 0x9A4 */ u32 field_0x9a4; - /* 0x9A8 */ u32 mHitodamaParticleKey[2]; - /* 0x9B0 */ u32 field_0x9b0; - /* 0x9B4 */ int mFlowNodeNo; - /* 0x9B8 */ cXyz field_0x9b8; - /* 0x9C4 */ cXyz field_0x9c4; - /* 0x9D0 */ s16 field_0x9d0; - /* 0x9D2 */ s16 field_0x9d2; - /* 0x9D4 */ s16 mEventIdx; - /* 0x9D6 */ s16 mExpressionPhase; - /* 0x9D8 */ s16 mExpressionPrevPhase; - /* 0x9DA */ s16 mMotionPhase; - /* 0x9DC */ s16 mMotionPrevPhase; - /* 0x9DE */ s16 mExpression; - /* 0x9E0 */ s16 mMotion; - /* 0x9E2 */ u16 mMotionLoops; - /* 0x9E4 */ u16 mExpressionLoops; - /* 0x9E6 */ u16 mOrderEvtNo; - /* 0x9E8 */ s8 field_0x9e8; - /* 0x9E9 */ u8 field_0x9e9; - /* 0x9EA */ u8 field_0x9ea; - /* 0x9EB */ bool field_0x9eb; - /* 0x9EC */ u8 field_0x9ec; - /* 0x9ED */ bool field_0x9ed; - /* 0x9EE */ bool field_0x9ee; - /* 0x9EF */ u8 field_0x9ef; - /* 0x9F0 */ u8 field_0x9f0; - /* 0x9F1 */ u8 field_0x9f1; - /* 0x9F2 */ bool mHide; - /* 0x9f3 */ u8 field_0x9f3; - /* 0x9F4 */ bool mTwilight; - /* 0x9F5 */ u8 field_0x9f5; - /* 0x9F6 */ u8 field_0x9f6; - /* 0x9F8 */ dMsgFlow_c mFlow; - /* 0xA44 */ cBgS_GndChk field_0xa44; - /* 0xA80 */ dBgS_GndChk field_0xa80; - /* 0xAD4 */ dBgS_LinChk field_0xad4; - -public: - struct daNpcF_anmPlayData { - u16 idx; - f32 morf; - s32 numLoops; - }; - - enum AnmFlags { - ANM_PAUSE_MORF = 0x0001, - ANM_PAUSE_BTK = 0x0002, - ANM_PAUSE_BRK = 0x0004, - ANM_PLAY_MORF = 0x0008, - ANM_PLAY_BTK = 0x0010, - ANM_PLAY_BRK = 0x0020, - ANM_PAUSE_BCK = 0x0040, - ANM_PAUSE_BTP = 0x0080, - ANM_PLAY_BCK = 0x0100, - ANM_PLAY_BTP = 0x0200, - ANM_FLAG_400 = 0x0400, - ANM_FLAG_800 = 0x0800, - ANM_PAUSE_EXPRESSION = 0x1000, - ANM_MOTION_FLAGS = ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PLAY_MORF | - ANM_PLAY_BTK | ANM_PLAY_BRK, - ANM_EXPRESSION_FLAGS = ANM_PAUSE_BCK | ANM_PAUSE_BTP | ANM_PLAY_BCK | ANM_PLAY_BTP | - ANM_FLAG_400 | ANM_FLAG_800 | ANM_PAUSE_EXPRESSION, - ANM_PAUSE_ALL = ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BCK | - ANM_PAUSE_BTP | ANM_PAUSE_EXPRESSION, - }; - - /* 80152014 */ BOOL execute(); - /* 801522AC */ BOOL draw(int, int, f32, _GXColorS10*, int); - /* 80152614 */ void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); - /* 80152654 */ static void* srchAttnActor1(void*, void*); - /* 801526E8 */ static void* srchActor(void*, void*); - - /* 801528C8 */ void initialize(); - /* 80152B2C */ J3DAnmTransformKey* getTrnsfrmKeyAnmP(char*, int); - /* 80152B68 */ J3DAnmTexPattern* getTexPtrnAnmP(char*, int); - /* 80152BA4 */ J3DAnmTextureSRTKey* getTexSRTKeyAnmP(char*, int); - /* 80152BE0 */ J3DAnmTevRegKey* getTevRegKeyAnmP(char*, int); - /* 80152C1C */ BOOL setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf, int i_attr, - int i_start, int i_end); - /* 80152C80 */ BOOL setBckAnm(J3DAnmTransform* i_bck, f32 i_rate, int i_attr, int i_start, - int i_end, bool i_modify); - /* 80152CC4 */ BOOL setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_rate, - int i_attr); - /* 80152D04 */ BOOL setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_rate, - int i_attr); - /* 80152D44 */ BOOL setBrkAnm(J3DAnmTevRegKey* i_brk, J3DModelData* i_modelData, f32 i_rate, - int i_attr); - /* 80152D84 */ void setEnvTevColor(); - /* 80152DE0 */ void setRoomNo(); - /* 80152E24 */ BOOL chkEndAnm(f32); - /* 80152EC4 */ BOOL chkEndAnm(J3DFrameCtrl*, f32); - /* 80152F40 */ BOOL playAllAnm(); - /* 80153150 */ void playExpressionAnm(daNpcF_c::daNpcF_anmPlayData***); - /* 80153264 */ void playMotionAnm(daNpcF_c::daNpcF_anmPlayData***); - /* 8015337C */ void setLookatMtx(int, int*, f32); - /* 80153578 */ void hitChk2(dCcD_Cyl*, int, int); - /* 80153658 */ void setDamage(int, int, int); - /* 80153718 */ int ctrlMsgAnm(int&, int&, fopAc_ac_c*, int); - /* 8015387C */ void orderEvent(int, char*, u16, u16, u8, u16); - /* 80153954 */ void changeEvent(char*, char*, u16, u16); - /* 801539F0 */ BOOL chkActorInSight(fopAc_ac_c*, f32); - /* 80153A78 */ BOOL chkActorInArea(fopAc_ac_c*, cXyz, cXyz, s16); - /* 80153BDC */ BOOL chkActorInAttnArea(fopAc_ac_c*, fopAc_ac_c*, int); - /* 80153D1C */ int initTalk(int, fopAc_ac_c**); - /* 80153D84 */ BOOL talkProc(int*, BOOL, fopAc_ac_c**); - /* 80153EF4 */ BOOL turn(s16, f32, int); - /* 801540A4 */ BOOL step(s16, int, int, int); - /* 80154250 */ void setAngle(s16); - /* 80154278 */ u8 getDistTableIdx(int, int); - /* 801542A0 */ fopAc_ac_c* getEvtAreaTagP(int, int); - /* 8015436C */ fopAc_ac_c* getAttnActorP(int, fpcLyIt_JudgeFunc, f32, f32, f32, f32, s16, - int, int); - /* 80154730 */ BOOL chkActorInSight2(fopAc_ac_c*, f32, s16); - /* 80154834 */ BOOL chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); - /* 801548F4 */ BOOL chkPointInArea(cXyz, cXyz, cXyz, s16); - /* 8015496C */ cXyz getAttentionPos(fopAc_ac_c*); - /* 801549E0 */ BOOL chkFindPlayer2(int, s16); - /* 80154BD8 */ void setHitodamaPrtcl(); - - /* 80155BF4 */ virtual ~daNpcF_c(); - /* 80155BC8 */ virtual void setParam(); - /* 80155BC0 */ virtual BOOL main(); - /* 80155BD8 */ virtual BOOL ctrlBtk(); - /* 80155BBC */ virtual void adjustShapeAngle(); - /* 8015276C */ virtual void setMtx(); - /* 801527FC */ virtual void setMtx2(); - /* 80155BB8 */ virtual void setAttnPos(); - /* 80155BB4 */ virtual void setCollisions(); - /* 80155BE0 */ virtual bool setExpressionAnm(int i_idx, bool i_modify); - /* 80155EC8 */ virtual bool setExpressionBtp(int i_idx); - /* 80155BF0 */ virtual void setExpression(int i_expression, f32 i_morf); - /* 80155BE8 */ virtual void setMotionAnm(int i_idx, f32 i_morf); - /* 80155BEC */ virtual void setMotion(int i_motion, f32 i_morf, int i_restart); - /* 80155BD0 */ virtual BOOL drawDbgInfo(); - /* 80155BCC */ virtual void drawOtherMdls(); - - BOOL chkActorInSpeakArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) { - return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.field_0x0[3]); - } - BOOL chkPlayerInSpeakArea(fopAc_ac_c* i_actor) { - return chkActorInSpeakArea(daPy_getPlayerActorClass(), i_actor); - } - BOOL chkActorInTalkArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) { - return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.field_0x0[1]); - } - BOOL chkPlayerInTalkArea(fopAc_ac_c* i_actor) { - return chkActorInTalkArea(daPy_getPlayerActorClass(), i_actor); - } - BOOL checkHide() { return mHide || (mTwilight && !dComIfGs_wolfeye_effect_check()); } - void setIntDemander(fopAc_ac_c* i_actor) { field_0x824.entry(i_actor); } - void setIntFlowNodeNo(int i_flowNodeNo) { mFlowNodeNo = i_flowNodeNo; } - void onInterrupt(u8 param_0) { field_0x9ef = param_0; } - - static u8 const mCcDObjInfo[48]; - static dCcD_SrcCyl mCcDCyl; - static dCcD_SrcSph mCcDSph; - static fopAc_ac_c* mFindActorPList[100]; - static s32 mFindCount; - static s16 mSrchActorName; -}; - -STATIC_ASSERT(sizeof(daNpcF_c) == 0xB48); - -BOOL daNpcF_chkEvtBit(u32 i_idx); -BOOL daNpcF_chkTmpBit(u32 i_idx); -void daNpcF_offTmpBit(u32 i_idx); -int daNpcF_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz& param_2, csXyz& param_3); -s16 daNpcF_getGroundAngle(cBgS_PolyInfo*, s16); struct daBaseNpc_matAnm_c { /* 8014D884 */ void calc(J3DMaterial*) const; @@ -830,6 +588,266 @@ public: static u8 m_set_func[4]; }; +class daNpcF_ActorMngr_c { +private: + /* 0x0 */ u32 mActorID; + +public: + daNpcF_ActorMngr_c() { initialize(); } + + /* 801506B0 */ void initialize(); + /* 801506D8 */ void entry(unsigned int); + /* 801506BC */ void entry(fopAc_ac_c*); + /* 801506E0 */ void remove(); + /* 801506EC */ fopAc_ac_c* getActorP(); + + /* 80155E40 */ virtual ~daNpcF_ActorMngr_c(); +}; + +class daNpcF_c : public fopAc_ac_c { +protected: + /* 0x568 */ mDoExt_McaMorfSO* mpMorf; + /* 0x56C */ mDoExt_bckAnm mBckAnm; + /* 0x588 */ mDoExt_btpAnm mBtpAnm; + /* 0x5A0 */ mDoExt_btkAnm mBtkAnm; + /* 0x5B8 */ mDoExt_brkAnm mBrkAnm; + /* 0x5D0 */ dBgS_ObjAcch mAcch; + /* 0x7A8 */ dCcD_Stts mCcStts; + /* 0x7E4 */ dBgS_AcchCir mAcchCir; + /* 0x824 */ daNpcF_ActorMngr_c field_0x824; + /* 0x82C */ daNpcF_ActorMngr_c mAttnActor[5]; + /* 0x854 */ cXyz mLookatPos[3]; + /* 0x878 */ cXyz mLookPos; + /* 0x884 */ cXyz field_0x884; + /* 0x890 */ cXyz field_0x890; + /* 0x89C */ cXyz field_0x89c; + /* 0x8A8 */ cXyz field_0x8a8; + /* 0x8B4 */ cXyz field_0x8b4; + /* 0x8C0 */ cXyz field_0x8c0; + /* 0x8CC */ cXyz field_0x8cc; + /* 0x8D8 */ cXyz field_0x8d8; + /* 0x8E4 */ cXyz mHeadPos; + /* 0x8F0 */ csXyz mCurAngle; + /* 0x8F6 */ csXyz mOldAngle; + /* 0x8FC */ csXyz mEyeAngle; + /* 0x902 */ csXyz mHeadAngle; + /* 0x908 */ csXyz field_0x908[3]; + /* 0x91A */ csXyz mLookatAngle[3]; + /* 0x92C */ int mCutIndex; + /* 0x930 */ u32 field_0x930; + /* 0x934 */ int mAttnIdx; + /* 0x938 */ int mAttnChangeTimer; + /* 0x93C */ int mAttnActorTimer[5]; + /* 0x950 */ int mMsgTimer; + /* 0x954 */ int field_0x954; + /* 0x958 */ int field_0x958; + /* 0x95C */ int field_0x95c; + /* 0x960 */ int mEventTimer; + /* 0x964 */ int mBtpTimer; + /* 0x968 */ int mTurnAmount; + /* 0x96C */ int mTurnMode; + /* 0x970 */ f32 mTurnStepNum; + /* 0x974 */ f32 mExpressionMorfOverride; + /* 0x978 */ f32 mExpressionMorf; + /* 0x97C */ f32 mMotionMorfOverride; + /* 0x980 */ f32 mGroundH; + /* 0x984 */ f32 field_0x984[3]; + /* 0x990 */ s16 field_0x990; + /* 0x992 */ s16 field_0x992; + /* 0x994 */ s16 mTurnStartAngle; + /* 0x996 */ s16 mTurnTargetAngle; + /* 0x998 */ u16 field_0x998; + /* 0x99C */ u32 mAnmFlags; + /* 0x9A0 */ u32 mShadowKey; + /* 0x9A4 */ u32 field_0x9a4; + /* 0x9A8 */ u32 mHitodamaParticleKey[2]; + /* 0x9B0 */ u32 mPolySound; + /* 0x9B4 */ int mFlowNodeNo; + /* 0x9B8 */ cXyz field_0x9b8; + /* 0x9C4 */ cXyz field_0x9c4; + /* 0x9D0 */ s16 field_0x9d0; + /* 0x9D2 */ s16 field_0x9d2; + /* 0x9D4 */ s16 mEventIdx; + /* 0x9D6 */ s16 mExpressionPhase; + /* 0x9D8 */ s16 mExpressionPrevPhase; + /* 0x9DA */ s16 mMotionPhase; + /* 0x9DC */ s16 mMotionPrevPhase; + /* 0x9DE */ s16 mExpression; + /* 0x9E0 */ s16 mMotion; + /* 0x9E2 */ u16 mMotionLoops; + /* 0x9E4 */ u16 mExpressionLoops; + /* 0x9E6 */ u16 mOrderEvtNo; + /* 0x9E8 */ s8 mReverb; + /* 0x9E9 */ bool mOrderSpeakEvt; + /* 0x9EA */ bool field_0x9ea; + /* 0x9EB */ bool field_0x9eb; + /* 0x9EC */ bool field_0x9ec; + /* 0x9ED */ bool mOrderNewEvt; + /* 0x9EE */ bool field_0x9ee; + /* 0x9EF */ u8 field_0x9ef; + /* 0x9F0 */ u8 field_0x9f0; + /* 0x9F1 */ u8 field_0x9f1; + /* 0x9F2 */ bool mHide; + /* 0x9f3 */ u8 field_0x9f3; + /* 0x9F4 */ bool mTwilight; + /* 0x9F5 */ u8 field_0x9f5; + /* 0x9F6 */ u8 field_0x9f6; + /* 0x9F8 */ dMsgFlow_c mFlow; + /* 0xA44 */ cBgS_GndChk mGndChk; + /* 0xA80 */ dBgS_GndChk field_0xa80; + /* 0xAD4 */ dBgS_LinChk field_0xad4; + +public: + struct daNpcF_anmPlayData { + u16 idx; + f32 morf; + s32 numLoops; + }; + + enum AnmFlags { + ANM_PAUSE_MORF = 0x0001, + ANM_PAUSE_BTK = 0x0002, + ANM_PAUSE_BRK = 0x0004, + ANM_PLAY_MORF = 0x0008, + ANM_PLAY_BTK = 0x0010, + ANM_PLAY_BRK = 0x0020, + ANM_PAUSE_BCK = 0x0040, + ANM_PAUSE_BTP = 0x0080, + ANM_PLAY_BCK = 0x0100, + ANM_PLAY_BTP = 0x0200, + ANM_FLAG_400 = 0x0400, + ANM_FLAG_800 = 0x0800, + ANM_PAUSE_EXPRESSION = 0x1000, + ANM_PAUSE_BPK = 0x2000, + ANM_PLAY_BPK = 0x4000, + ANM_MOTION_FLAGS = ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PLAY_MORF | + ANM_PLAY_BTK | ANM_PLAY_BRK, + ANM_EXPRESSION_FLAGS = ANM_PAUSE_BCK | ANM_PAUSE_BTP | ANM_PLAY_BCK | ANM_PLAY_BTP | + ANM_FLAG_400 | ANM_FLAG_800 | ANM_PAUSE_EXPRESSION, + ANM_PAUSE_ALL = ANM_PAUSE_MORF | ANM_PAUSE_BTK | ANM_PAUSE_BRK | ANM_PAUSE_BCK | + ANM_PAUSE_BTP | ANM_PAUSE_EXPRESSION, + }; + + enum LookMode { + /* 0 */ LOOK_NONE, + /* 1 */ LOOK_RESET, + /* 2 */ LOOK_PLAYER, + /* 3 */ LOOK_PLAYER_TALK, + /* 4 */ LOOK_ACTOR, + /* 5 */ LOOK_ATTN, + }; + + /* 80152014 */ BOOL execute(); + /* 801522AC */ BOOL draw(BOOL, BOOL, f32, _GXColorS10*, BOOL); + /* 80152614 */ static void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, + dCcD_GObjInf*); + /* 80152654 */ static void* srchAttnActor1(void*, void*); + /* 801526E8 */ static void* srchActor(void*, void*); + + /* 801528C8 */ void initialize(); + /* 80152B2C */ J3DAnmTransformKey* getTrnsfrmKeyAnmP(char*, int); + /* 80152B68 */ J3DAnmTexPattern* getTexPtrnAnmP(char*, int); + /* 80152BA4 */ J3DAnmTextureSRTKey* getTexSRTKeyAnmP(char*, int); + /* 80152BE0 */ J3DAnmTevRegKey* getTevRegKeyAnmP(char*, int); + /* 80152C1C */ BOOL setMcaMorfAnm(J3DAnmTransformKey* i_anm, f32 i_rate, f32 i_morf, int i_attr, + int i_start, int i_end); + /* 80152C80 */ BOOL setBckAnm(J3DAnmTransform* i_bck, f32 i_rate, int i_attr, int i_start, + int i_end, bool i_modify); + /* 80152CC4 */ BOOL setBtpAnm(J3DAnmTexPattern* i_btp, J3DModelData* i_modelData, f32 i_rate, + int i_attr); + /* 80152D04 */ BOOL setBtkAnm(J3DAnmTextureSRTKey* i_btk, J3DModelData* i_modelData, f32 i_rate, + int i_attr); + /* 80152D44 */ BOOL setBrkAnm(J3DAnmTevRegKey* i_brk, J3DModelData* i_modelData, f32 i_rate, + int i_attr); + /* 80152D84 */ void setEnvTevColor(); + /* 80152DE0 */ void setRoomNo(); + /* 80152E24 */ BOOL chkEndAnm(f32); + /* 80152EC4 */ BOOL chkEndAnm(J3DFrameCtrl*, f32); + /* 80152F40 */ BOOL playAllAnm(); + /* 80153150 */ void playExpressionAnm(daNpcF_c::daNpcF_anmPlayData***); + /* 80153264 */ void playMotionAnm(daNpcF_c::daNpcF_anmPlayData***); + /* 8015337C */ void setLookatMtx(int, int*, f32); + /* 80153578 */ void hitChk2(dCcD_Cyl*, int, int); + /* 80153658 */ void setDamage(int, int, int); + /* 80153718 */ int ctrlMsgAnm(int&, int&, fopAc_ac_c*, BOOL); + /* 8015387C */ void orderEvent(int, char*, u16, u16, u8, u16); + /* 80153954 */ void changeEvent(char*, char*, u16, u16); + /* 801539F0 */ BOOL chkActorInSight(fopAc_ac_c*, f32); + /* 80153A78 */ BOOL chkActorInArea(fopAc_ac_c*, cXyz, cXyz, s16); + /* 80153BDC */ BOOL chkActorInAttnArea(fopAc_ac_c*, fopAc_ac_c*, int); + /* 80153D1C */ BOOL initTalk(int, fopAc_ac_c**); + /* 80153D84 */ BOOL talkProc(int*, BOOL, fopAc_ac_c**); + /* 80153EF4 */ BOOL turn(s16, f32, int); + /* 801540A4 */ BOOL step(s16, int, int, int); + /* 80154250 */ void setAngle(s16); + /* 80154278 */ u8 getDistTableIdx(int, int); + /* 801542A0 */ fopAc_ac_c* getEvtAreaTagP(int, int); + /* 8015436C */ fopAc_ac_c* getAttnActorP(BOOL, fpcLyIt_JudgeFunc, f32, f32, f32, f32, s16, + int, BOOL); + /* 80154730 */ BOOL chkActorInSight2(fopAc_ac_c*, f32, s16); + /* 80154834 */ BOOL chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); + /* 801548F4 */ BOOL chkPointInArea(cXyz, cXyz, cXyz, s16); + /* 8015496C */ cXyz getAttentionPos(fopAc_ac_c*); + /* 801549E0 */ BOOL chkFindPlayer2(BOOL, s16); + /* 80154BD8 */ void setHitodamaPrtcl(); + + /* 80155BF4 */ virtual ~daNpcF_c(); + /* 80155BC8 */ virtual void setParam(); + /* 80155BC0 */ virtual BOOL main(); + /* 80155BD8 */ virtual BOOL ctrlBtk(); + /* 80155BBC */ virtual void adjustShapeAngle(); + /* 8015276C */ virtual void setMtx(); + /* 801527FC */ virtual void setMtx2(); + /* 80155BB8 */ virtual void setAttnPos(); + /* 80155BB4 */ virtual void setCollisions(); + /* 80155BE0 */ virtual bool setExpressionAnm(int i_idx, bool i_modify); + /* 80155EC8 */ virtual bool setExpressionBtp(int i_idx); + /* 80155BF0 */ virtual void setExpression(int i_expression, f32 i_morf); + /* 80155BE8 */ virtual void setMotionAnm(int i_idx, f32 i_morf); + /* 80155BEC */ virtual void setMotion(int i_motion, f32 i_morf, int i_restart); + /* 80155BD0 */ virtual BOOL drawDbgInfo(); + /* 80155BCC */ virtual void drawOtherMdls(); + + BOOL chkActorInSpeakArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) { + return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.field_0x0[3]); + } + BOOL chkPlayerInSpeakArea(fopAc_ac_c* i_actor) { + return chkActorInSpeakArea(daPy_getPlayerActorClass(), i_actor); + } + BOOL chkActorInTalkArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorArea) { + return chkActorInAttnArea(i_actorCheck, i_actorArea, attention_info.field_0x0[1]); + } + BOOL chkPlayerInTalkArea(fopAc_ac_c* i_actor) { + return chkActorInTalkArea(daPy_getPlayerActorClass(), i_actor); + } + BOOL checkHide() { return mHide || (mTwilight && !dComIfGs_wolfeye_effect_check()); } + void setIntDemander(fopAc_ac_c* i_actor) { field_0x824.entry(i_actor); } + void setIntFlowNodeNo(int i_flowNodeNo) { mFlowNodeNo = i_flowNodeNo; } + void onInterrupt(u8 param_0) { field_0x9ef = param_0; } + + static u8 const mCcDObjInfo[48]; + static dCcD_SrcCyl mCcDCyl; + static dCcD_SrcSph mCcDSph; + static fopAc_ac_c* mFindActorPList[100]; + static s32 mFindCount; + static s16 mSrchActorName; +}; + +STATIC_ASSERT(sizeof(daNpcF_c) == 0xB48); + +BOOL daNpcF_chkEvtBit(u32 i_idx); +void daNpcF_onEvtBit(u32 i_idx); +BOOL daNpcF_chkTmpBit(u32 i_idx); +void daNpcF_offTmpBit(u32 i_idx); +BOOL daNpcF_chkPointInArea(cXyz, cXyz, cXyz, s16); +int daNpcF_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz& param_2, csXyz& param_3); +s16 daNpcF_getGroundAngle(cBgS_PolyInfo*, s16); +BOOL daNpcF_pntVsLineSegmentLengthSquare2D(f32 i_pntX, f32 i_pntZ, f32 i_startX, f32 i_startZ, + f32 i_endX, f32 i_endZ, f32* o_projX, f32* o_projZ, + f32* o_dist2); +BOOL daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_isClosed, + BOOL i_isReversed); + class daNpcF_MatAnm_c : public J3DMaterialAnm { private: /* 0x0F4 */ mutable f32 field_0xF4; @@ -854,7 +872,7 @@ class daNpcF_SPCurve_c { private: /* 0x00 */ u16 mNurbs; /* 0x02 */ u16 field_0x02; - /* 0x04 */ u8 field_0x04; + /* 0x04 */ bool mIsReversed; /* 0x05 */ bool mIsClosed; /* 0x08 */ dStage_dPnt_c mPoints[96]; @@ -869,13 +887,13 @@ public: }; // Size: 0x60C class daNpcF_Path_c { -private: +protected: /* 0x00 */ u16 mIdx; - /* 0x02 */ u8 field_0x02; - /* 0x03 */ u8 mIsClosed; + /* 0x02 */ u8 mIsReversed; + /* 0x03 */ bool mIsClosed; /* 0x04 */ dPath* mpRoomPath; - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0C; + /* 0x08 */ f32 mRange; + /* 0x0C */ f32 mPosDst; /* 0x10 */ f32 field_0x10; /* 0x14 */ cXyz mPosition; /* 0x20 */ daNpcF_SPCurve_c mSPCurve; @@ -883,15 +901,15 @@ private: public: /* 80150900 */ void initialize(); /* 8015095C */ int setPathInfo(u8, s8, u8); - /* 80150A24 */ int chkPassed(cXyz); - /* 80150A7C */ void chkPassedDst(cXyz); + /* 80150A24 */ BOOL chkPassed(cXyz); + /* 80150A7C */ BOOL chkPassedDst(cXyz); /* 80150BBC */ void reverse(); - /* 80150BE0 */ int setNextIdx(); + /* 80150BE0 */ BOOL setNextIdx(); /* 80150C18 */ int getNextIdx(); - /* 80150C60 */ u16 getBeforeIdx(); - /* 80150CA8 */ int getBeforePos(cXyz&); - /* 80150D44 */ int getNextPos(cXyz&); - /* 80150DE0 */ int getDstPos(cXyz, cXyz&); + /* 80150C60 */ int getBeforeIdx(); + /* 80150CA8 */ BOOL getBeforePos(cXyz&); + /* 80150D44 */ BOOL getNextPos(cXyz&); + /* 80150DE0 */ BOOL getDstPos(cXyz, cXyz&); /* 80150EB4 */ void setNextIdxDst(cXyz); daNpcF_Path_c() { @@ -901,30 +919,36 @@ public: virtual ~daNpcF_Path_c() {} int getIdx() { return mIdx; }; + void setIdx(int i_idx) { mIdx = i_idx; } + u8 getArg0(int i_idx) { return mpRoomPath->m_points[i_idx].mArg0; } Vec getPntPos(int i_idx) { return mpRoomPath->m_points[i_idx].m_position; } - int chkClose() { return dPath_ChkClose(mpRoomPath); } + BOOL chkClose() { return dPath_ChkClose(mpRoomPath); } + BOOL chkReverse() { return mIsReversed == true; } + void onReverse() { mIsReversed = true; } + dPath* getPathInfo() { return mpRoomPath; } + void setRange(f32 i_range) { mRange = i_range; } }; // Size: 0x630 class daNpcF_Lookat_c { private: - /* 0x00 */ cXyz field_0x00[4]; + /* 0x00 */ cXyz mJointPos[4]; /* 0x30 */ cXyz* mAttnPos; - /* 0x34 */ csXyz field_0x34[4]; - /* 0x4C */ csXyz field_0x4c[4]; - /* 0x64 */ csXyz field_0x64[4]; + /* 0x34 */ csXyz mAngularMoveDis[4]; + /* 0x4C */ csXyz mMinAngle[4]; + /* 0x64 */ csXyz mMaxAngle[4]; /* 0x7C */ csXyz mRotAngle[4]; - /* 0x94 */ u8 field_0x94[4]; + /* 0x94 */ bool field_0x94[4]; /* 0x98 vtable */ public: /* 80151038 */ void initialize(); /* 801510B8 */ void setParam(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, s16, cXyz*); - /* 80151350 */ void calc(fopAc_ac_c*, f32 (*)[4], csXyz**, int, int, int); + /* 80151350 */ void calc(fopAc_ac_c*, Mtx, csXyz**, BOOL, int, BOOL); /* 801515D4 */ void adjustMoveDisAngle(s16&, s16, s16, s16); - /* 80151648 */ void initCalc(fopAc_ac_c*, f32 (*)[4], cXyz*, csXyz*, f32*, cXyz&, int); + /* 80151648 */ void initCalc(fopAc_ac_c*, Mtx, cXyz*, csXyz*, f32*, cXyz&, BOOL); /* 80151A54 */ void update(cXyz*, csXyz*, f32*); - /* 80151B68 */ void calcMoveDisAngle(int, cXyz*, csXyz*, cXyz, int, int); + /* 80151B68 */ void calcMoveDisAngle(int, cXyz*, csXyz*, cXyz, int, BOOL); /* 80151F54 */ void setRotAngle(); /* 80151FE0 */ void clrRotAngle(); daNpcF_Lookat_c() { initialize(); } diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index 6d551c2e6f0..955f2fb15bd 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -753,6 +753,14 @@ public: void onFogFade() { onNoResetFlg2(FLG2_UNK_4000); } BOOL checkStickArrowReset() const { return checkResetFlg0(RFLG0_UNK_1); } + void setCanoeSlider() { mSpecialMode = 0x2D; } + + void offCanoeSlider() { + if (checkCanoeSlider()) { + mSpecialMode = 0; + } + } + void offCargoCarry() { if (checkCargoCarry()) { mSpecialMode = 0; diff --git a/include/d/com/d_com_inf_game.h b/include/d/com/d_com_inf_game.h index c88d73544bf..3d75d8aa37d 100644 --- a/include/d/com/d_com_inf_game.h +++ b/include/d/com/d_com_inf_game.h @@ -3676,6 +3676,10 @@ inline int dComIfGd_setSimpleShadow(cXyz* pos, f32 param_1, f32 param_2, cXyz* p param_5, tex); } +inline bool dComIfGd_addRealShadow(u32 key, J3DModel* model) { + return g_dComIfG_gameInfo.drawlist.addRealShadow(key, model); +} + inline void dComIfGd_drawListItem3d() { g_dComIfG_gameInfo.drawlist.drawOpaListItem3d(); g_dComIfG_gameInfo.drawlist.drawXluListItem3d(); diff --git a/include/d/d_attention.h b/include/d/d_attention.h index 79c2839697b..27a8a9a34ef 100644 --- a/include/d/d_attention.h +++ b/include/d/d_attention.h @@ -141,13 +141,13 @@ public: }; struct dist_entry { - f32 field_0x0; - f32 field_0x4; - f32 field_0x8; - f32 field_0xc; - f32 field_0x10; - f32 field_0x14; - u32 field_0x18; + /* 0x00 */ f32 mRadius1; + /* 0x04 */ f32 mRadius2; + /* 0x08 */ f32 mDistanceAdjust; + /* 0x0C */ f32 mUpperY; + /* 0x10 */ f32 mLowerY; + /* 0x14 */ f32 mWeight; + /* 0x18 */ u32 mAngleSelect; }; // Size: 0x1C struct type_tbl_entry { diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index cbc9de6d051..f8311e2468c 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -369,6 +369,10 @@ public: param_6); } + bool addRealShadow(u32 key, J3DModel* model) { + return mShadowControl.addReal(key, model); + } + void newPeekZdata(s16 param_0, s16 param_1, u32* param_2) { mPeekZ.newData(param_0, param_1, param_2); } diff --git a/include/d/d_path.h b/include/d/d_path.h index 6906646b5f9..82e25d6b5c9 100644 --- a/include/d/d_path.h +++ b/include/d/d_path.h @@ -11,12 +11,12 @@ struct dPath { /* 0x0 */ u16 m_num; /* 0x2 */ u16 m_nextID; /* 0x4 */ u8 field_0x4; - /* 0x5 */ u8 m_closed; + /* 0x5 */ bool m_closed; /* 0x6 */ u8 field_0x6; /* 0x8 */ dStage_dPnt_c* m_points; }; -inline int dPath_ChkClose(dPath* i_path) { return (i_path->m_closed & 1); } +inline BOOL dPath_ChkClose(dPath* i_path) { return i_path->m_closed & 1; } dPath* dPath_GetRoomPath(int path_index, int room_no); dPath* dPath_GetNextRoomPath(dPath const* i_path, int room_no); diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 2ccdb8412dd..caf818306be 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -290,7 +290,7 @@ struct dStage_dPnt_c { /* 0x0 */ u8 field_0x0; /* 0x1 */ u8 field_0x1; /* 0x2 */ u8 field_0x2; - /* 0x3 */ u8 field_0x3; + /* 0x3 */ u8 mArg0; /* 0x4 */ Vec m_position; }; // Size: 0x10 diff --git a/include/d/meter/d_meter2_info.h b/include/d/meter/d_meter2_info.h index 7884dc3f4ec..b0306825615 100644 --- a/include/d/meter/d_meter2_info.h +++ b/include/d/meter/d_meter2_info.h @@ -154,8 +154,8 @@ public: void setMsgTimeMs(u32 msgTime) { mMsgTimeMs = msgTime; } void setTimeMs(s32 i_time) { mTimeMs = i_time; } u32 getTimeMs() { return mTimeMs; } - u8 getNowCount() { return mNowCount; } - u8 getMaxCount() { return mMaxCount; } + int getNowCount() { return mNowCount; } + int getMaxCount() { return mMaxCount; } void setScopeZoomPointer(u8 param_0) { mScopeZoomPointer = param_0; } u8 getItemExplainWindowStatus() { return mItemExplainWindowStatus; } void setItemExplainWindowStatus(u8 i_value) { mItemExplainWindowStatus = i_value; } @@ -611,11 +611,11 @@ inline void dMeter2Info_setTimeMs(s32 i_time) { g_meter2_info.setTimeMs(i_time); } -inline u8 dMeter2Info_getNowCount() { +inline int dMeter2Info_getNowCount() { return g_meter2_info.getNowCount(); } -inline u8 dMeter2Info_getMaxCount() { +inline int dMeter2Info_getMaxCount() { return g_meter2_info.getMaxCount(); } diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 866d255f054..996f68a2f13 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -128,6 +128,7 @@ public: } int remove(J3DModelData* i_modelData) { return i_modelData->removeMatColorAnimator(mpAnm); } + J3DAnmColor* getBpkAnm() { return mpAnm; } private: /* 0x14 */ J3DAnmColor* mpAnm; diff --git a/include/rel/d/a/d_a_canoe/d_a_canoe.h b/include/rel/d/a/d_a_canoe/d_a_canoe.h index 64cdab8bc6a..48df9bd069b 100644 --- a/include/rel/d/a/d_a_canoe/d_a_canoe.h +++ b/include/rel/d/a/d_a_canoe/d_a_canoe.h @@ -30,6 +30,13 @@ public: void incShapeOffsetY(f32 offset) { mShapeOffsetY += offset; } void incShapeAngleZ(s16 incZ) { shape_angle.z += incZ; } void onRodID(unsigned int i_rodID) { mRodID = i_rodID; } + void setWaterFallDownSe() { field_0x141c.startSound(Z2SE_AL_CANOE_FALL_DW, 0, -1); } + + void setPosAndAngle(cXyz const* i_pos, s16 i_angle) { + field_0x14d0 = *i_pos; + field_0x144a = i_angle; + field_0x1446 = 1; + } /* 0x0568 */ request_of_phase_process_class mPhaseReq; /* 0x0570 */ J3DModel* mpModel; @@ -48,9 +55,9 @@ public: /* 0x1443 */ u8 mJumpRideFlg; /* 0x1444 */ u8 field_0x1444; /* 0x1445 */ u8 mReverb; - /* 0x1446 */ u8 field_0x1446[0x1448 - 0x1446]; + /* 0x1446 */ u8 field_0x1446; /* 0x1448 */ s16 field_0x1448; - /* 0x144A */ u8 field_0x144a[0x144C - 0x144A]; + /* 0x144A */ s16 field_0x144a; /* 0x144C */ s16 mAimAngle; /* 0x144E */ s16 field_0x144e; /* 0x1450 */ s16 field_0x1450; diff --git a/include/rel/d/a/d_a_formation_mng/d_a_formation_mng.h b/include/rel/d/a/d_a_formation_mng/d_a_formation_mng.h index 5fc0bc43260..6e31be08b52 100644 --- a/include/rel/d/a/d_a_formation_mng/d_a_formation_mng.h +++ b/include/rel/d/a/d_a_formation_mng/d_a_formation_mng.h @@ -12,7 +12,7 @@ struct daFmtMng_Path_c { /* 8083665C */ bool checkPoint(cXyz, f32); bool isPathClose() { return dPath_ChkClose(mPath); } - s8 getArg0() { return mPath->m_points[field_0x4].field_0x3; } + s8 getArg0() { return mPath->m_points[field_0x4].mArg0; } s8 getArg1() { return mPath->m_points[field_0x4].field_0x0; } void chgDir() { diff --git a/include/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.h b/include/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.h index f8501594281..be2bc7bb44f 100644 --- a/include/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.h +++ b/include/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.h @@ -3,19 +3,68 @@ #include "d/a/d_a_npc.h" -class daNpcAsh_c; - -typedef bool (daNpcAsh_c::*daNpcAsh_actionFn)(void*); -typedef BOOL (daNpcAsh_c::*daNpcAsh_eventFn)(int); - /** * @ingroup actors-npcs * @brief Ashei * */ class daNpcAsh_c : public daNpcF_c { +public: + typedef bool (daNpcAsh_c::*ActionFn)(void*); + typedef BOOL (daNpcAsh_c::*EventFn)(int); + + enum Type { + /* 0 */ TYPE_BAR, + /* 1 */ TYPE_CASTLE, + }; + + enum Animation { + /* 0x00 */ ANM_NONE, + /* 0x01 */ ANM_F_TALK_A, + /* 0x02 */ ANM_F_TALK_B, + /* 0x03 */ ANM_F_SILENT, + /* 0x04 */ ANM_F_COOL, + /* 0x05 */ ANM_F_ASK, + /* 0x06 */ ANM_F_EXPLAIN_A, + /* 0x07 */ ANM_F_EXPLAIN_B, + /* 0x08 */ ANM_WAIT_A, + /* 0x09 */ ANM_WAIT_B, + /* 0x0A */ ANM_WAIT_C, + /* 0x0B */ ANM_STEP, + /* 0x0C */ ANM_COOL, + /* 0x0D */ ANM_ASK, + /* 0x0E */ ANM_EXPLAIN_A, + /* 0x0F */ ANM_EXPLAIN_B, + /* 0x10 */ ANM_BOWWAIT, + /* 0x11 */ ANM_BOWRUN, + }; + + enum Expression { + /* 0x0 */ EXPR_TALK_A, + /* 0x1 */ EXPR_TALK_B, + /* 0x2 */ EXPR_SILENT, + /* 0x3 */ EXPR_COOL, + /* 0x4 */ EXPR_ASK, + /* 0x5 */ EXPR_EXPLAIN_A, + /* 0x6 */ EXPR_EXPLAIN_B, + /* 0x7 */ EXPR_NONE, + }; + + enum Motion { + /* 0x0 */ MOT_WAIT_A, + /* 0x1 */ MOT_WAIT_B, + /* 0x2 */ MOT_WAIT_C, + /* 0x3 */ MOT_COOL, + /* 0x4 */ MOT_ASK, + /* 0x5 */ MOT_EXPLAIN_A, + /* 0x6 */ MOT_EXPLAIN_B, + /* 0x7 */ MOT_BOWWAIT, + /* 0x8 */ MOT_BOWRUN, + /* 0x9 */ MOT_STEP, + }; + private: - /* 0xB48 */ Z2Creature mZ2; + /* 0xB48 */ Z2Creature mCreatureSound; /* 0xBD8 */ J3DModel* mModelBow; /* 0xBDC */ J3DModel* mModelQuiver; /* 0xBE0 */ daNpcF_MatAnm_c* mpMatAnm; @@ -24,17 +73,17 @@ private: /* 0xCB0 */ fopAc_ac_c* mTalkPartner; /* 0xCB4 */ u32 field_0xcb4; // unused /* 0xCB8 */ dCcD_Cyl mCcCyl[2]; - /* 0xF30 */ daNpcAsh_actionFn mpActionFn; + /* 0xF30 */ ActionFn mpActionFn; /* 0xF3C */ request_of_phase_process_class mPhase[2]; /* 0xF4C */ u32 mItemPartnerId; /* 0xF50 */ u32 field_0xf50; // unused /* 0xF54 */ u32 field_0xf54; - /* 0xF58 */ s16 mMessageNo; + /* 0xF58 */ s16 mFlowID; /* 0xF5A */ s16 mLookMode; - /* 0xF5C */ u16 field_0xf5c; + /* 0xF5C */ u16 mMode; /* 0xF5E */ u8 mMapToolId; /* 0xF5F */ u8 field_0xf5f; - /* 0xF60 */ u8 field_0xf60; + /* 0xF60 */ u8 mType; public: /* 809582EC */ daNpcAsh_c(); @@ -51,8 +100,13 @@ public: /* 809596E0 */ bool setExpressionBtp(int); /* 809597C0 */ void setMotionAnm(int i_idx, f32 i_morf); /* 80959910 */ void reset(); - /* 80959B28 */ /* inline */ bool setAction(daNpcAsh_actionFn); - /* 80959BD0 */ /* inline */ bool isSneaking(); +#ifdef NONMATCHING + /* 80959B28 */ inline bool setAction(ActionFn); + /* 80959BD0 */ inline bool isSneaking(); +#else + /* 80959B28 */ bool setAction(ActionFn); + /* 80959BD0 */ bool isSneaking(); +#endif /* 80959C40 */ bool wait_type0(void*); /* 8095A67C */ void setMotion(int, f32, int); /* 8095A6C0 */ void setExpression(int, f32); @@ -60,13 +114,17 @@ public: /* 8095A8EC */ bool talk(void*); /* 8095AD28 */ bool demo(void*); /* 8095B164 */ bool leave(void*); - /* 8095B48C */ BOOL EvCut_Introduction(int cutIndex); - /* 8095B58C */ BOOL EvCut_Meeting(int cutIndex); - /* 8095B83C */ BOOL EvCut_WiretapSponsor(int cutIndex); - /* 8095BA80 */ BOOL EvCut_WiretapEntrant(int cutIndex); + /* 8095B48C */ BOOL EvCut_Introduction(int i_cutIndex); + /* 8095B58C */ BOOL EvCut_Meeting(int i_cutIndex); + /* 8095B83C */ BOOL EvCut_WiretapSponsor(int i_cutIndex); + /* 8095BA80 */ BOOL EvCut_WiretapEntrant(int i_cutIndex); /* 8095BCF0 */ void setParam(); /* 8095BF6C */ BOOL main(); - /* 8095C200 */ /* inline */ void playMotion(); +#ifdef NONMATCHING + /* 8095C200 */ inline void playMotion(); +#else + /* 8095C200 */ void playMotion(); +#endif /* 8095C520 */ BOOL ctrlBtk(); /* 8095C5C4 */ void setAttnPos(); /* 8095C9BC */ void lookat(); @@ -81,11 +139,11 @@ public: inline bool step(s16, bool); inline void playExpression(); - #ifdef NONMATCHING - static daNpcAsh_eventFn mEvtSeqList[6]; - #else +#ifdef NONMATCHING + static EventFn mEvtSeqList[6]; +#else static u8 mEvtSeqList[72]; - #endif +#endif }; STATIC_ASSERT(sizeof(daNpcAsh_c) == 0xF64); @@ -95,31 +153,38 @@ public: /* 8095D5D4 */ virtual ~daNpcAsh_Param_c(); struct param { - /* 0x00 */ f32 m00; + /* 0x00 */ f32 mAttnOffsetY; /* 0x04 */ f32 mGravity; - /* 0x08 */ f32 m08; - /* 0x0C */ f32 mShadow; - /* 0x10 */ f32 mCcSttsWeight; - /* 0x14 */ f32 m14; - /* 0x18 */ f32 m18; - /* 0x1C */ f32 m1C; - /* 0x20 */ f32 m20; - /* 0x24 */ f32 m24; - /* 0x28 */ f32 m28; - /* 0x2C */ f32 m2C; - /* 0x30 */ f32 m30; - /* 0x34 */ f32 m34; - /* 0x38 */ f32 m38; - /* 0x3C */ f32 m3C; - /* 0x40 */ f32 mLookatScl; - /* 0x44 */ f32 m44; - /* 0x48 */ s16 m48; - /* 0x4A */ s16 m4A; - /* 0x4C */ s16 m4C; - /* 0x4E */ s16 m4E; - /* 0x50 */ f32 mSightAngle; - /* 0x54 */ f32 m54[3]; - /* 0x60 */ u16 m60[6]; + /* 0x08 */ f32 mScale; + /* 0x0C */ f32 mShadowDepth; + /* 0x10 */ f32 mCcWeight; + /* 0x14 */ f32 mCylH; + /* 0x18 */ f32 mWallH; + /* 0x1C */ f32 mWallR; + /* 0x20 */ f32 mBodyUpAngle; + /* 0x24 */ f32 mBodyDownAngle; + /* 0x28 */ f32 mBodyLeftAngle; + /* 0x2C */ f32 mBodyRightAngle; + /* 0x30 */ f32 mHeadUpAngle; + /* 0x34 */ f32 mHeadDownAngle; + /* 0x38 */ f32 mHeadLeftAngle; + /* 0x3C */ f32 mHeadRightAngle; + /* 0x40 */ f32 mNeckAngleScl; + /* 0x44 */ f32 mMorfFrames; + /* 0x48 */ s16 mSpeakDistIdx; + /* 0x4A */ s16 mSpeakAngleIdx; + /* 0x4C */ s16 mTalkDistIdx; + /* 0x4E */ s16 mTalkAngleIdx; + /* 0x50 */ f32 mAttnFovY; + /* 0x54 */ f32 mAttnRadius; + /* 0x58 */ f32 mAttnUpperY; + /* 0x5C */ f32 mAttnLowerY; + /* 0x60 */ u16 field_0x60; + /* 0x62 */ u16 field_0x62; + /* 0x64 */ u16 mTestExpression; + /* 0x66 */ u16 mTestMotion; + /* 0x68 */ u16 mTestLookMode; + /* 0x6A */ bool mTest; }; static param const m; diff --git a/include/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.h b/include/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.h index f0fb5f363a5..69be9985ec9 100644 --- a/include/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.h +++ b/include/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.h @@ -1,6 +1,91 @@ #ifndef D_A_NPC_HOZ_H #define D_A_NPC_HOZ_H -#include "dolphin/types.h" +#include "d/a/d_a_npc.h" + +class daNpc_Hoz_c : public daNpcT_c { +public: + enum Type { + /* 0 */ TYPE_0, + /* 1 */ TYPE_1, + /* 2 */ TYPE_2, + /* 3 */ TYPE_3, + /* 4 */ TYPE_4, + /* 5 */ TYPE_5, + /* 6 */ TYPE_6, + }; + + /* 80A0150C */ ~daNpc_Hoz_c(); + /* 80A01658 */ void create(); + /* 80A01904 */ void CreateHeap(); + /* 80A01D54 */ void Delete(); + /* 80A01D88 */ void Execute(); + /* 80A01DA8 */ void Draw(); + /* 80A01E44 */ void createHeapCallBack(fopAc_ac_c*); + /* 80A01E64 */ void ctrlJointCallBack(J3DJoint*, int); + /* 80A01F54 */ u8 getType(); + /* 80A01FC8 */ void getFlowNodeNo(); + /* 80A01FE4 */ bool isDelete(); + /* 80A01FEC */ void reset(); + /* 80A021DC */ void setParam(); + /* 80A0236C */ void setAfterTalkMotion(); + /* 80A02370 */ void srchActors(); + /* 80A02374 */ bool checkChangeEvt(); + /* 80A023EC */ bool evtTalk(); + /* 80A024D0 */ bool evtEndProc(); + /* 80A0260C */ bool evtCutProc(); + /* 80A026D4 */ int evtProc(); + /* 80A02918 */ void action(); + /* 80A029A0 */ void beforeMove(); + /* 80A02A18 */ void setAttnPos(); + /* 80A02C50 */ void setCollision(); + /* 80A02DD4 */ void evtOrder(); + /* 80A02F78 */ int drawDbgInfo(); + /* 80A02F80 */ void selectAction(); + /* 80A030A8 */ void chkAction(int (daNpc_Hoz_c::*)(void*)); + /* 80A030D4 */ void setAction(int (daNpc_Hoz_c::*)(void*)); + /* 80A0317C */ void wait(void*); + /* 80A03304 */ void waitBattle(void*); + /* 80A03578 */ void waitTwilightBattle(void*); + /* 80A037E4 */ void waitBoat(void*); + /* 80A03BDC */ void waitBoat2(void*); + /* 80A03F8C */ void waitBoat1_5(void*); + /* 80A04400 */ void waitTw(void*); + /* 80A045FC */ void talk(void*); + /* 80A0487C */ void ECut_boatRace(int); + /* 80A04BE4 */ void ECut_beforeBattle(int); + /* 80A04CDC */ void ECut_afterBattle(int); + /* 80A04E24 */ void ECut_beforeBlast(int); + /* 80A04F6C */ void ECut_afterBlast(int); + /* 80A050B4 */ void ECut_yMushi(int); + /* 80A051C8 */ void ECut_talkBreak(int); + /* 80A064E4 */ daNpc_Hoz_c(daNpcT_faceMotionAnmData_c const*, daNpcT_motionAnmData_c const*, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, + daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, + daNpcT_evtData_c const*, char**); + /* 80A065A4 */ bool getEyeballMaterialNo(); + /* 80A065AC */ s32 getHeadJointNo(); + /* 80A065B4 */ s32 getNeckJointNo(); + /* 80A065BC */ s32 getBackboneJointNo(); + /* 80A065C4 */ bool checkChangeJoint(int); + /* 80A065D4 */ bool checkRemoveJoint(int); + + bool getGameStartFlag() { return mGameStartFlag; } + + static void* mCutNameList[8]; + static u8 mCutList[96]; + + /* 0xE40 */ u8 field_0xe40[0x14d]; + /* 0xF8D */ bool mGameStartFlag; + /* 0xF8E */ u8 field_0xf8e[0x3a]; +}; + +STATIC_ASSERT(sizeof(daNpc_Hoz_c) == 0xFC8); + +struct daNpc_Hoz_Param_c { + /* 80A065E4 */ ~daNpc_Hoz_Param_c(); + + static u8 const m[144]; +}; #endif /* D_A_NPC_HOZ_H */ diff --git a/include/rel/d/a/npc/d_a_npc_the/d_a_npc_the.h b/include/rel/d/a/npc/d_a_npc_the/d_a_npc_the.h index f167e1f506e..5bdb9357c14 100644 --- a/include/rel/d/a/npc/d_a_npc_the/d_a_npc_the.h +++ b/include/rel/d/a/npc/d_a_npc_the/d_a_npc_the.h @@ -3,13 +3,78 @@ #include "d/a/d_a_npc.h" -// #define NONMATCHING - class daNpcThe_c : public daNpcF_c { public: typedef BOOL (daNpcThe_c::*ActionFn)(void*); typedef BOOL (daNpcThe_c::*EventFn)(int); + enum Type { + /* 0 */ TYPE_BAR, + /* 1 */ TYPE_1, + /* 2 */ TYPE_KAKARIKO, + }; + + enum Animation { + /* 0x00 */ ANM_NONE, + /* 0x01 */ ANM_F_TALK_A, + /* 0x02 */ ANM_F_SMILE, + /* 0x03 */ ANM_F_CHUCKLE, + /* 0x04 */ ANM_F_TALK_B, + /* 0x05 */ ANM_F_TALK_C, + /* 0x06 */ ANM_F_LAUGH, + /* 0x07 */ ANM_F_TALK_R, + /* 0x08 */ ANM_FH_SMILE, + /* 0x09 */ ANM_FH_CHUCKLE, + /* 0x0A */ ANM_FH_TALK_B, + /* 0x0B */ ANM_FH_TALK_C, + /* 0x0C */ ANM_FH_LAUGH, + /* 0x0D */ ANM_FH_TALK_R, + /* 0x0E */ ANM_WAIT_A, + /* 0x0F */ ANM_WAIT_LOOKING, + /* 0x10 */ ANM_TO_WAIT_B, + /* 0x11 */ ANM_WAIT_B, + /* 0x12 */ ANM_WAIT_LOOKUP, + /* 0x13 */ ANM_TALK_R, + /* 0x14 */ ANM_TALKING_R, + /* 0x15 */ ANM_LOOK_A, + /* 0x16 */ ANM_LOOK, + /* 0x17 */ ANM_KUNE_WAIT_A, + /* 0x18 */ ANM_KUNE_TALK, + /* 0x19 */ ANM_KUNE_WAIT_B, + /* 0x1A */ ANM_KUNE_SHISHI, + }; + + enum Expression { + /* 0x0 */ EXPR_TALK_A, + /* 0x1 */ EXPR_SMILE, + /* 0x2 */ EXPR_CHUCKLE, + /* 0x3 */ EXPR_TALK_B, + /* 0x4 */ EXPR_TALK_C, + /* 0x5 */ EXPR_LAUGH, + /* 0x6 */ EXPR_TALK_R, + /* 0x7 */ EXPR_H_TALK_R, + /* 0x8 */ EXPR_H_SMILE, + /* 0x9 */ EXPR_H_CHUCKLE, + /* 0xA */ EXPR_H_TALK_B, + /* 0xB */ EXPR_H_TALK_C, + /* 0xC */ EXPR_H_LAUGH, + /* 0xD */ EXPR_NONE, + }; + + enum Motion { + /* 0x0 */ MOT_WAIT_A, + /* 0x1 */ MOT_LOOK_A, + /* 0x2 */ MOT_TO_WAIT_B, + /* 0x3 */ MOT_WAIT_LOOKUP, + /* 0x4 */ MOT_KUNE_TALK, + /* 0x5 */ MOT_KUNE_WAIT_A, + /* 0x6 */ MOT_KUNE_SHISHI, + /* 0x7 */ MOT_WAIT_B, + /* 0x8 */ MOT_KUNE_WAIT_B, + /* 0x9 */ MOT_TALK_R, + /* 0xA */ MOT_LOOK, + }; + /* 80AF76CC */ daNpcThe_c(); /* 80AF78E0 */ ~daNpcThe_c(); /* inline */ inline BOOL CreateHeap(); @@ -45,18 +110,18 @@ public: u8 getTypeFromParam() { switch (fopAcM_GetParam(this) & 0xff) { case 0: - return 0; + return TYPE_BAR; case 1: - return 1; + return TYPE_1; case 2: - return 2; + return TYPE_KAKARIKO; default: - return 0; + return TYPE_BAR; } } bool isDelete() { - if (mType == 0 || mType == 1 || mType == 2) { + if (mType == TYPE_BAR || mType == TYPE_1 || mType == TYPE_KAKARIKO) { return false; } else { return true; @@ -83,12 +148,12 @@ public: BOOL setAction(ActionFn action) { if (mpActionFn != NULL) { - mState = 3; + mMode = 3; (this->*mpActionFn)(NULL); } if (action != NULL) { mpActionFn = action; - mState = 0; + mMode = 0; (this->*mpActionFn)(NULL); } return true; @@ -106,6 +171,7 @@ public: } } +private: /* 0xB48 */ Z2Creature mSound; /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; /* 0xBDC */ daNpcF_Lookat_c mLookat; @@ -123,7 +189,7 @@ public: /* 0xE10 */ u32 field_0xe10; /* 0xE14 */ int mFlowID; /* 0xE18 */ s16 mLookMode; - /* 0xE1A */ u16 mState; + /* 0xE1A */ u16 mMode; /* 0xE1C */ bool field_0xe1c; /* 0xE1D */ bool field_0xe1d; /* 0xE1E */ u8 mType; @@ -141,32 +207,32 @@ STATIC_ASSERT(sizeof(daNpcThe_c) == 0xE20); class daNpcThe_Param_c { public: struct param { - /* 0x00 */ f32 field_0x00; + /* 0x00 */ f32 mAttnOffsetY; /* 0x04 */ f32 mGravity; /* 0x08 */ f32 mScale; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 field_0x10; + /* 0x0C */ f32 mShadowDepth; + /* 0x10 */ f32 mCcWeight; /* 0x14 */ f32 mCylH; /* 0x18 */ f32 mWallH; /* 0x1C */ f32 mWallR; - /* 0x20 */ f32 field_0x20; - /* 0x24 */ f32 field_0x24; - /* 0x28 */ f32 field_0x28; - /* 0x2C */ f32 field_0x2c; - /* 0x30 */ f32 field_0x30; - /* 0x34 */ f32 field_0x34; - /* 0x38 */ f32 field_0x38; - /* 0x3C */ f32 field_0x3c; - /* 0x40 */ f32 mLookatScl; - /* 0x44 */ f32 field_0x44; - /* 0x48 */ s16 field_0x48; - /* 0x4A */ s16 field_0x4a; - /* 0x4C */ s16 field_0x4c; - /* 0x4E */ s16 field_0x4e; - /* 0x50 */ f32 field_0x50; - /* 0x54 */ f32 field_0x54; - /* 0x58 */ f32 field_0x58; - /* 0x5C */ f32 field_0x5c; + /* 0x20 */ f32 mBodyUpAngle; + /* 0x24 */ f32 mBodyDownAngle; + /* 0x28 */ f32 mBodyLeftAngle; + /* 0x2C */ f32 mBodyRightAngle; + /* 0x30 */ f32 mHeadUpAngle; + /* 0x34 */ f32 mHeadDownAngle; + /* 0x38 */ f32 mHeadLeftAngle; + /* 0x3C */ f32 mHeadRightAngle; + /* 0x40 */ f32 mNeckAngleScl; + /* 0x44 */ f32 mMorfFrames; + /* 0x48 */ s16 mSpeakDistIdx; + /* 0x4A */ s16 mSpeakAngleIdx; + /* 0x4C */ s16 mTalkDistIdx; + /* 0x4E */ s16 mTalkAngleIdx; + /* 0x50 */ f32 mAttnFovY; + /* 0x54 */ f32 mAttnRadius; + /* 0x58 */ f32 mAttnUpperY; + /* 0x5C */ f32 mAttnLowerY; /* 0x60 */ s16 field_0x60; /* 0x62 */ s16 field_0x62; /* 0x64 */ s16 mTestExpression; diff --git a/include/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.h b/include/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.h index f92d0c08adb..7ec9c9424c1 100644 --- a/include/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.h +++ b/include/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.h @@ -1,6 +1,460 @@ #ifndef D_A_NPC_ZRA_H #define D_A_NPC_ZRA_H -#include "dolphin/types.h" +#include "d/a/d_a_npc.h" + +class daNpc_zrA_Path_c : public daNpcF_Path_c { +public: + /* 80B7850C */ BOOL getDstPosDst2(cXyz, cXyz&); + /* 80B7876C */ void setNextIdxDst(cXyz); + /* 80B788F8 */ BOOL chkPassedDstXZ(cXyz); + /* 80B78A60 */ BOOL getDstPosDstXZ(cXyz, cXyz&); + /* 80B78CA0 */ BOOL chkPassedChase(u16, cXyz); + /* 80B78CFC */ int getDstPosChase(u16, cXyz, cXyz&); + /* 80B78E08 */ f32 chkPassDst(u16, cXyz); + /* 80B7EF88 */ ~daNpc_zrA_Path_c() {} + int getEndIdx() { return mpRoomPath->m_num - 1; } +}; + +STATIC_ASSERT(sizeof(daNpc_zrA_Path_c) == 0x630); + +class daNpc_zrA_c : public daNpcF_c { +public: + typedef BOOL (daNpc_zrA_c::*ActionFn)(void*); + typedef BOOL (daNpc_zrA_c::*EventFn)(int); + + enum Type { + /* 0 */ TYPE_WAIT, + /* 1 */ TYPE_SWIM, + /* 2 */ TYPE_WATERFALL, + /* 3 */ TYPE_RIVER, + /* 4 */ TYPE_TOBIKOMI, + /* 5 */ TYPE_SEARCH, + /* 6 */ TYPE_SPA, + }; + + enum SoldierType { + /* 0 */ SOLDIER_SPEAR, + /* 1 */ SOLDIER_NOSPEAR, + /* 2 */ SOLDIER_NONE, + }; + + enum ActionType { + /* 0 */ ACT_TYPE_0, + /* 1 */ ACT_TYPE_1, + /* 2 */ ACT_TYPE_2, + /* 3 */ ACT_TYPE_3, + /* 4 */ ACT_TYPE_4, + /* 5 */ ACT_TYPE_5, + /* 6 */ ACT_TYPE_6, + }; + + enum GameMode { + /* 0 */ GAME_MODE_0, + /* 1 */ GAME_MODE_1, + /* 2 */ GAME_MODE_2, + /* 3 */ GAME_MODE_3, + }; + + enum SwimMode { + /* 0 */ SWIM_WAIT, + /* 1 */ SWIM_RAIL, + /* 2 */ SWIM_TURN, + /* 3 */ SWIM_3, + }; + + enum Animation { + /* 0x00 */ ANM_NONE, + /* 0x01 */ ANM_F_TALK_A, + /* 0x02 */ ANM_F_TALK_A_SP, + /* 0x03 */ ANM_F_WAIT_SWIM, + /* 0x04 */ ANM_F_TALK_NOMAL, + /* 0x05 */ ANM_FH_TALK_NOMAL, + /* 0x06 */ ANM_FH_SADSIT_A, + /* 0x07 */ ANM_FH_SADSIT_B, + /* 0x08 */ ANM_FH_SADSIT_C, + /* 0x09 */ ANM_FH_SADSIT_D, + /* 0x0A */ ANM_FH_SADSIT_E, + /* 0x0B */ ANM_F_LOOKING_SP, + /* 0x0C */ ANM_FH_LOOKING_SP, + /* 0x0D */ ANM_F_LOOKUP, + /* 0x0E */ ANM_FH_LOOKUP, + /* 0x0F */ ANM_F_TALK_SWIM_SP, + /* 0x10 */ ANM_F_TALK_B_SP, + /* 0x11 */ ANM_F_SPA_TALK_A, + /* 0x12 */ ANM_FH_SPA_WAIT_A, + /* 0x13 */ ANM_F_SPA_TALK_B, + /* 0x14 */ ANM_FH_SPA_WAIT_B, + /* 0x15 */ ANM_SWIM_TURN, + /* 0x16 */ ANM_STILL, + /* 0x17 */ ANM_FALLSWIM, + /* 0x18 */ ANM_SWIM_TALK, + /* 0x19 */ ANM_SADSIT_A, + /* 0x1A */ ANM_SADSIT_B, + /* 0x1B */ ANM_SADSIT_C, + /* 0x1C */ ANM_SADSIT_D, + /* 0x1D */ ANM_SADSIT_E, + /* 0x1E */ ANM_TOBIKOMI_S, + /* 0x1F */ ANM_TOBIKOMI_T, + /* 0x20 */ ANM_TOBIKOMI_E, + /* 0x21 */ ANM_LOOKING_SP, + /* 0x22 */ ANM_TALK_SWIM_SP, + /* 0x23 */ ANM_TALK_B_SP, + /* 0x24 */ ANM_LOOKUP, + /* 0x25 */ ANM_SPA_WAIT_B, + /* 0x26 */ ANM_SPA_TALK_B, + /* 0x27 */ ANM_SPA_WAIT_A, + /* 0x28 */ ANM_SPA_TALK_A, + /* 0x29 */ ANM_WAIT_A, + /* 0x2A */ ANM_WALK_A, + /* 0x2B */ ANM_TALK_A, + /* 0x2C */ ANM_SWIM_A, + /* 0x2D */ ANM_SWIM_B, + /* 0x2E */ ANM_WAIT_SWIM, + /* 0x2F */ ANM_DIVE, + /* 0x30 */ ANM_DIVE_B, + /* 0x31 */ ANM_FLOAT, + /* 0x32 */ ANM_FLOAT_B, + /* 0x33 */ ANM_STEP, + /* 0x34 */ ANM_WAIT_SP, + /* 0x35 */ ANM_WALK_A_SP, + /* 0x36 */ ANM_TALK_A_SP, + /* 0x37 */ ANM_SWIM_A_SP, + /* 0x38 */ ANM_SWIM_B_SP, + /* 0x39 */ ANM_WAIT_SWIM_SP, + /* 0x3A */ ANM_DIVE_SP, + /* 0x3B */ ANM_DIVE_B_SP, + /* 0x3C */ ANM_FLOAT_SP, + /* 0x3D */ ANM_FLOAT_B_SP, + /* 0x3E */ ANM_STEP_SP, + }; + + enum Expression { + /* 0x00 */ EXPR_TALK_NOMAL, + /* 0x01 */ EXPR_SADSIT_A, + /* 0x02 */ EXPR_SADSIT_B, + /* 0x03 */ EXPR_SADSIT_C, + /* 0x04 */ EXPR_SADSIT_D, + /* 0x05 */ EXPR_SADSIT_E, + /* 0x06 */ EXPR_LOOKING_SP, + /* 0x07 */ EXPR_LOOKUP, + /* 0x08 */ EXPR_SPA_TALK_A, + /* 0x09 */ EXPR_SPA_TALK_B, + /* 0x0A */ EXPR_TALK_SWIM_SP, + /* 0x0B */ EXPR_TALK_B_SP, + /* 0x0C */ EXPR_TALK_A, + /* 0x0D */ EXPR_WAIT_SWIM, + /* 0x0E */ EXPR_TALK_A_SP, + /* 0x0F */ EXPR_TALK_NOMAL_2, + /* 0x10 */ EXPR_LOOKING_SP_2, + /* 0x11 */ EXPR_LOOKUP_2, + /* 0x12 */ EXPR_SPA_WAIT_A, + /* 0x13 */ EXPR_SPA_WAIT_B, + /* 0x14 */ EXPR_NONE, + }; + + enum Motion { + /* 0x00 */ MOT_WAIT_A, + /* 0x01 */ MOT_WAIT_SWIM, + /* 0x02 */ MOT_SWIM_TALK, + /* 0x03 */ MOT_WAIT_A_2, + /* 0x04 */ MOT_WAIT_SWIM_2, + /* 0x05 */ MOT_TALK_A, + /* 0x06 */ MOT_SADSIT_A, + /* 0x07 */ MOT_SADSIT_B, + /* 0x08 */ MOT_SADSIT_C, + /* 0x09 */ MOT_SADSIT_D, + /* 0x0A */ MOT_SADSIT_E, + /* 0x0B */ MOT_LOOKING_SP, + /* 0x0C */ MOT_LOOKUP, + /* 0x0D */ MOT_SPA_TALK_A, + /* 0x0E */ MOT_SPA_TALK_B, + /* 0x0F */ MOT_TALK_SWIM_SP, + /* 0x10 */ MOT_TALK_B_SP, + /* 0x11 */ MOT_TALK_A_2, + /* 0x12 */ MOT_SPA_WAIT_A, + /* 0x13 */ MOT_SPA_WAIT_B, + /* 0x14 */ MOT_WALK_A, + /* 0x16 */ MOT_SWIM_A = 0x16, + /* 0x17 */ MOT_SWIM_B, + /* 0x18 */ MOT_DIVE_SWIM_A, + /* 0x19 */ MOT_DIVE_B_SWIM_A, + /* 0x1A */ MOT_DIVE_SWIM_B, + /* 0x1B */ MOT_DIVE_B_SWIM_B, + /* 0x1C */ MOT_STEP, + /* 0x1D */ MOT_FLOAT, + /* 0x1E */ MOT_FLOAT_B, + /* 0x1F */ MOT_SWIM_TURN, + /* 0x20 */ MOT_TOBIKOMI_S, + /* 0x21 */ MOT_TOBIKOMI_T, + /* 0x22 */ MOT_TOBIKOMI_E, + /* 0x23 */ MOT_FALLSWIM, + }; + + enum Event { + /* 0x0 */ EVT_NONE, + /* 0x1 */ EVT_TALK_SWIM, + /* 0x2 */ EVT_BEFORE_BLAST_ZRR, + /* 0x3 */ EVT_AFTER_BLAST_ZRR, + /* 0x4 */ EVT_THANKS_BLAST, + /* 0x5 */ EVT_RESULT_ANNOUNCE, + /* 0x6 */ EVT_CARRY_WATERFALL, + /* 0x7 */ EVT_CARRY_WATERFALL_NIGHT, + /* 0x8 */ EVT_CARRY_WATERFALL_SKIP, + /* 0x9 */ EVT_CARRY_WATERFALL_NIGHT_SKIP, + /* 0xA */ EVT_SEARCH_PRINCE, + /* 0xB */ EVT_TALK_MULTI, + /* 0xC */ EVT_TALK_MULTI2, + }; + + /* 80B7956C */ daNpc_zrA_c(); + /* 80B79828 */ ~daNpc_zrA_c(); + /* 80B79B58 */ cPhs__Step create(); + /* 80B79F38 */ int CreateHeap(); + /* 80B7A51C */ int Delete(); + /* 80B7A550 */ int Execute(); + /* 80B7A570 */ int Draw(); + /* 80B7A864 */ int ctrlJoint(J3DJoint*, J3DModel*); + /* 80B7AB9C */ static int createHeapCallBack(fopAc_ac_c*); + /* 80B7ABBC */ static int ctrlJointCallBack(J3DJoint*, int); + /* 80B7AC08 */ void setParam(); + /* 80B7ADF0 */ BOOL main(); + /* 80B7B0A4 */ BOOL ctrlBtk(); + /* 80B7B1DC */ void setAttnPos(); + /* 80B7B91C */ void setMtx(); + /* 80B7B9D4 */ bool setExpressionAnm(int, bool); + /* 80B7BD60 */ bool setExpressionBtp(int); + /* 80B7BE74 */ void setExpression(int, f32); + /* 80B7BEA0 */ void setMotionAnm(int, f32); + /* 80B7C070 */ void setMotionWaterAnm(int); + /* 80B7C308 */ void setMotion(int, f32, BOOL); + /* 80B7C34C */ BOOL drawDbgInfo(); + /* 80B7C354 */ void drawOtherMdls(); + /* 80B7C44C */ Type getTypeFromArgument(); + /* 80B7C4B4 */ SoldierType getSoldierTypeFromParam(); + /* 80B7C500 */ GameMode getGameModeFromParam(); + /* 80B7C524 */ ActionType getActionTypeFromParam(); + /* 80B7C5E4 */ u8 getMultiModeFromParam(); + /* 80B7C614 */ u8 getMultiNoFromParam(); + /* inline */ u8 getNoFromParam() { return (u8)fopAcM_GetParam(this); } + /* inline */ u8 getPathNoFromParam() { return (u8)(fopAcM_GetParam(this) >> 8); } + /* 80B7C644 */ BOOL isDelete(); + /* 80B7C71C */ void reset(); + /* 80B7CA8C */ void playExpression(); + /* 80B7D0FC */ void playMotion(); + /* 80B7DAF4 */ BOOL chkAction(ActionFn); + /* 80B7DB20 */ bool setAction(ActionFn); + /* 80B7DBC8 */ bool selectAction(); + /* 80B7DF40 */ BOOL doEvent(); + /* 80B7E668 */ BOOL setSkipZev(int, int); + /* 80B7E6F4 */ void setLookMode(int); + /* 80B7E718 */ void lookat(); + /* 80B7E9E0 */ BOOL chkFindPlayer(); + /* 80B7EA90 */ void setExpressionTalkAfter(); + /* 80B7EBA0 */ void setPrtcl(); + /* 80B7EC54 */ BOOL test(void*); + /* 80B7F8C4 */ BOOL wait(void*); + /* 80B7FD10 */ void walkCalc(); + /* 80B7FE18 */ void waitCalc(); + /* 80B800A4 */ BOOL waitSpa(void*); + /* 80B80228 */ BOOL waitLake(void*); + /* 80B80418 */ BOOL talk(void*); + /* 80B806FC */ BOOL ECut_talkMulti(int); + /* 80B80860 */ BOOL swim(void*); + /* 80B80A94 */ BOOL railSwim(); + /* 80B81788 */ BOOL waitSwim(); + /* 80B81918 */ BOOL turnSwimInit(); + /* 80B81A18 */ BOOL turnSwim(); + /* 80B81CC8 */ BOOL turnSwimCheck(); + /* 80B81D68 */ BOOL evasionCalc(cXyz&, csXyz&); + /* 80B81FB8 */ void calcBank(s16, s16, s16&, s16&); + /* 80B8204C */ void calcWaistAngle(); + /* 80B82238 */ void calcWaistAngleInit(); + /* 80B822CC */ void calcWaistAngleStop(); + /* 80B822D8 */ BOOL calcWaistAngleCheck(); + /* 80B82300 */ void calcModulation(); + /* 80B8247C */ void resetModulation(); + /* 80B824F4 */ void calcSwimAngle(csXyz&, csXyz&, s16, s16); + /* 80B82584 */ void calcSwimPos(cXyz&); + /* 80B825FC */ void calcWaitSwim(BOOL); + /* 80B826F0 */ BOOL ECut_talkSwim(int); + /* 80B82C54 */ BOOL waitWaterfall(void*); + /* 80B82E88 */ BOOL swimWaterfall(void*); + /* 80B833C8 */ BOOL diveWaterfall(void*); + /* 80B83548 */ BOOL talkSwim(void*); + /* 80B837E8 */ BOOL ECut_carryWaterfall(int); + /* 80B83D08 */ BOOL ECut_carryWaterfallSkip(int); + /* 80B83FA4 */ BOOL diveCalc(s16, s16, BOOL); + /* 80B84298 */ BOOL waitRiverDescend(void*); + /* 80B84B74 */ BOOL swimRiverDescend(void*); + /* 80B85B14 */ BOOL swimRiverDescend2(void*); + /* 80B8601C */ BOOL diveRiverDescend(void*); + /* 80B86440 */ BOOL swimGoalRiverDescend(void*); + /* 80B86A2C */ BOOL returnRiverDescend(void*); + /* 80B86D9C */ void moveRiverPosCalc(cXyz&); + /* 80B86E78 */ void createRuppi(); + /* 80B86FAC */ BOOL ECut_beforeBlastzrR(int); + /* 80B872F0 */ BOOL ECut_afterBlastzrR(int); + /* 80B87510 */ BOOL ECut_thanksBlast(int); + /* 80B88B04 */ BOOL ECut_resultAnnounce(int); + /* 80B8A064 */ void calcCanoeMove(BOOL); + /* 80B8A43C */ BOOL tobiSearch(void*); + /* 80B8A54C */ BOOL tobiWait(void*); + /* 80B8A648 */ BOOL tobikomi1(void*); + /* 80B8A7F8 */ BOOL tobikomi2(void*); + /* 80B8AA1C */ BOOL tobikomi3(void*); + /* 80B8AB78 */ BOOL tobiJump(void*); + /* 80B8B1FC */ BOOL tobiEnd(void*); + /* 80B8B420 */ BOOL waitSearch(void*); + /* 80B8B530 */ BOOL ECut_searchPrince1(int); + /* 80B8BCE8 */ BOOL ECut_searchPrince2(int); + /* 80B8C3E8 */ void adjustShapeAngle(); + int getType() { return mType; } + u32 getAngleNoFromParam() { return (u8)(fopAcM_GetParam(this) >> 8); } + + /* 0x0B48 */ Z2Creature mCreatureSound; + /* 0x0BD8 */ J3DModel* mpObjectModel[3]; + /* 0x0BE4 */ daNpcF_MatAnm_c* mpMatAnm; + /* 0x0BE8 */ mDoExt_btkAnm mWaterBtkAnm; + /* 0x0C00 */ mDoExt_bpkAnm mWaterBpkAnm; + /* 0x0C18 */ daNpc_zrA_Path_c mPath; + /* 0x1248 */ daNpcF_Lookat_c mLookat; + /* 0x12E4 */ dPaPo_c mPaPo; + /* 0x131C */ daNpcF_ActorMngr_c mActorMngr[3]; + /* 0x1334 */ u8 field_0x1334[4]; + /* 0x1338 */ dCcD_Cyl mCcCyl; + /* 0x1474 */ ActionFn mpNextActionFn; + /* 0x1480 */ ActionFn mpActionFn; + /* 0x148C */ request_of_phase_process_class mPhase[8]; + /* 0x14CC */ u32 mItemID; + /* 0x14D0 */ int field_0x14d0; + /* 0x14D4 */ int field_0x14d4; + /* 0x14D8 */ int mSwimTurnTimer; + /* 0x14DC */ int field_0x14dc; + /* 0x14E0 */ int mFlowID; + /* 0x14E4 */ s16 mLookMode; + /* 0x14E6 */ u16 mMode; + /* 0x14E8 */ u8 mType; + /* 0x14E9 */ u8 mSoldierType; + /* 0x14EC */ int mBaseMotionAnm; + /* 0x14F0 */ int mBtkID; + /* 0x14F4 */ int mBpkID; + /* 0x14F8 */ u32 mWaterAnmFlags; + /* 0x14FC */ char* mStaffName; + /* 0x1500 */ cXyz field_0x1500; + /* 0x150C */ u8 mMeterCount; + /* 0x150D */ u8 mGameMode; + /* 0x150E */ u8 mSwitch1; + /* 0x150F */ u8 mSwitch2; + /* 0x1510 */ int field_0x1510; + /* 0x1514 */ int mSpinAngle; + /* 0x1518 */ s16 field_0x1518; + /* 0x151C */ int mSpinTimer; + /* 0x1520 */ u8 mSwimMode; + /* 0x1521 */ bool field_0x1521; + /* 0x1524 */ f32 mSwimSpeedF; + /* 0x1528 */ f32 mSwimSpeedScale; + /* 0x152C */ u8 field_0x152c[4]; + /* 0x1530 */ csXyz mWaistAngle; + /* 0x1536 */ csXyz mSwimAngleCalc; + /* 0x153C */ bool field_0x153c; + /* 0x153D */ bool field_0x153d; + /* 0x153E */ bool field_0x153e; + /* 0x1540 */ int mSwimFastTurnTimer; + /* 0x1544 */ cXyz mSwimSpeed; + /* 0x1550 */ bool field_0x1550; + /* 0x1554 */ int field_0x1554; + /* 0x1558 */ int field_0x1558; + /* 0x155C */ int mModulationParam; + /* 0x1560 */ cXyz mModulationOffset; + /* 0x156C */ f32 mScaleFactor; + /* 0x1570 */ int mEvasionTimer; + /* 0x1574 */ s16 mEvasionAngle; + /* 0x1576 */ u8 mActionType; + /* 0x1577 */ bool mIsAboveWater; + /* 0x1578 */ cXyz field_0x1578; + /* 0x1584 */ cXyz field_0x1584; + /* 0x1590 */ bool mResetWaistAngle; + /* 0x1591 */ bool mIsTurning; + /* 0x1592 */ u8 mCheckSwimTurnTimer; + /* 0x1593 */ bool mCheckSwimTurn; + /* 0x1594 */ u8 mActionSelect; + /* 0x1595 */ int mRiverPathIdx; + /* 0x159C */ cXyz field_0x159c[3]; + /* 0x15C0 */ u8 field_0x15c0; + /* 0x15C1 */ bool field_0x15c1; + +#ifdef NONMATCHING + static char* mEvtCutNameList[11]; + static EventFn mEvtCutList[11]; +#else + static void* mEvtCutNameList[11]; + static u8 mEvtCutList[132]; +#endif +}; + +STATIC_ASSERT(sizeof(daNpc_zrA_c) == 0x15C4); + +class daNpc_zrA_Param_c { +public: + struct param { + /* 0x00 */ f32 mAttnOffsetY; + /* 0x04 */ f32 mGravity; + /* 0x08 */ f32 mScale; + /* 0x0C */ f32 mShadowDepth; + /* 0x10 */ f32 mCcWeight; + /* 0x14 */ f32 mCylH; + /* 0x18 */ f32 mWallH; + /* 0x1C */ f32 mWallR; + /* 0x20 */ f32 mBodyUpAngle; + /* 0x24 */ f32 mBodyDownAngle; + /* 0x28 */ f32 mBodyLeftAngle; + /* 0x2C */ f32 mBodyRightAngle; + /* 0x30 */ f32 mHeadUpAngle; + /* 0x34 */ f32 mHeadDownAngle; + /* 0x38 */ f32 mHeadLeftAngle; + /* 0x3C */ f32 mHeadRightAngle; + /* 0x40 */ f32 mNeckAngleScl; + /* 0x44 */ f32 mMorfFrames; + /* 0x48 */ s16 mSpeakDistIdx; + /* 0x4A */ s16 mSpeakAngleIdx; + /* 0x4C */ s16 mTalkDistIdx; + /* 0x4E */ s16 mTalkAngleIdx; + /* 0x50 */ f32 mAttnFovY; + /* 0x54 */ f32 mAttnRadius; + /* 0x58 */ f32 mAttnUpperY; + /* 0x5C */ f32 mAttnLowerY; + /* 0x60 */ s16 field_0x60; + /* 0x62 */ s16 field_0x62; + /* 0x64 */ s16 mTestExpression; + /* 0x66 */ s16 mTestMotion; + /* 0x68 */ s16 mTestLookMode; + /* 0x6A */ bool mTest; + /* 0x6C */ f32 mSwimSpeed; + /* 0x70 */ f32 mMinSwimSpeedScale; + /* 0x74 */ s16 mSwimAngleSpeed; + /* 0x78 */ f32 mSwimAnmRate; + /* 0x7C */ f32 field_0x7c; + /* 0x80 */ f32 field_0x80; + /* 0x84 */ f32 mMaxScaleFactor; + /* 0x88 */ f32 mMinDepth; + /* 0x8C */ f32 field_0x8c; + /* 0x90 */ f32 field_0x90; + /* 0x94 */ f32 mWalkSpeed; + /* 0x98 */ s16 mWalkAngleSpeed; + /* 0x9A */ s16 mWalkAngleScale; + /* 0x9C */ f32 mWalkAnmRate; + /* 0xA0 */ f32 field_0xa0; + /* 0xA4 */ f32 field_0xa4; + /* 0xA8 */ f32 field_0xa8; + /* 0xAC */ f32 field_0xac; + }; + + /* 80B8C3EC */ virtual ~daNpc_zrA_Param_c(); + + static param const m; +}; + +STATIC_ASSERT(sizeof(daNpc_zrA_Param_c::param) == 0xB0); #endif /* D_A_NPC_ZRA_H */ diff --git a/include/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.h b/include/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.h index 4235ef04da1..0ad5de021f3 100644 --- a/include/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.h +++ b/include/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.h @@ -1,6 +1,24 @@ #ifndef D_A_OBJ_ZRAMARK_H #define D_A_OBJ_ZRAMARK_H -#include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" + +class daObjZraMark_c : public fopAc_ac_c { +public: + /* 80D42678 */ void Create(); + /* 80D4287C */ void CreateHeap(); + /* 80D42A7C */ void Execute(); + /* 80D42B0C */ void Draw(); + /* 80D42C98 */ void Delete(); + /* 80D42CE0 */ void getType(); + /* 80D42D2C */ void setBaseMtx(); + /* 80D42EE0 */ void col_init(); + /* 80D42F5C */ void col_set(); + /* 80D432C8 */ void schHoz(); + /* 80D43314 */ void entryPointer(fopAc_ac_c*); + /* 80D43370 */ void informBlast(); + + u8 getMarkNo() { return fopAcM_GetParam(this) & 0xff; } +}; #endif /* D_A_OBJ_ZRAMARK_H */ diff --git a/rel/d/a/d_a_talk/d_a_talk.cpp b/rel/d/a/d_a_talk/d_a_talk.cpp index 24bb4dba320..6f7d3a558ee 100644 --- a/rel/d/a/d_a_talk/d_a_talk.cpp +++ b/rel/d/a/d_a_talk/d_a_talk.cpp @@ -46,7 +46,7 @@ int daTalk_c::execute() { } } else { if (fopAcM_searchPlayerDistanceXZ(this) > - dAttention_c::i_getDistTable(attention_info.field_0x0[1]).field_0x4) + dAttention_c::i_getDistTable(attention_info.field_0x0[1]).mRadius2) { mMessageID = -1; fopAcM_delete(this); diff --git a/rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp b/rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp index f6058a2b837..f612a4bfb2b 100644 --- a/rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp +++ b/rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp @@ -1014,16 +1014,16 @@ static int daKytag06_Execute(kytag06_class* i_this) { int target2 = 0; dStage_dPnt_c* pnt = near_rail_get(i_this, &camera->mLookat.mEye); - if (pnt != NULL && pnt->field_0x3 != 0xFF) { - dKy_change_colpat(pnt->field_0x3); + if (pnt != NULL && pnt->mArg0 != 0xFF) { + dKy_change_colpat(pnt->mArg0); - if (pnt->field_0x3 == 0) { + if (pnt->mArg0 == 0) { target1 = 250; target2 = 25; - } else if (pnt->field_0x3 == 1) { + } else if (pnt->mArg0 == 1) { target1 = 500; target2 = 50; - } else if (pnt->field_0x3 == 2) { + } else if (pnt->mArg0 == 2) { target1 = 125; target2 = 12; } diff --git a/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.cpp b/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.cpp index e278faf8312..1eebc5998ff 100644 --- a/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.cpp +++ b/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.cpp @@ -1,13 +1,13 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_npc_ash -// +/** + * d_a_npc_ash.cpp + * NPC - Ashei + */ #include "rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "SSystem/SComponent/c_math.h" +#include "rel/d/a/tag/d_a_tag_evtarea/d_a_tag_evtarea.h" #include "dol2asm.h" -#include "dolphin/types.h" // // Forward References: @@ -271,7 +271,7 @@ void daNpcAsh_c::searchActors() { BOOL daNpcAsh_c::chkFindPlayer() { BOOL ret; - if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcAsh_Param_c::m.mSightAngle)) { + if (!chkActorInSight(daPy_getPlayerActorClass(), daNpcAsh_Param_c::m.mAttnFovY)) { mActorMngr[0].remove(); ret = false; } else { @@ -290,33 +290,33 @@ BOOL daNpcAsh_c::chkFindPlayer() { } bool daNpcAsh_c::step(s16 i_angY, bool i_animate) { - if (field_0x96c == 0) { + if (mTurnMode == 0) { if (i_animate) { - if ((s32)fabsf(cM_sht2d((f32)(s16)(i_angY - field_0x8f0.y))) > 40) { - setExpression(7, -1.0f); - setMotion(9, -1.0f, false); + if ((s32)fabsf(cM_sht2d((f32)(s16)(i_angY - mCurAngle.y))) > 40) { + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_STEP, -1.0f, false); } } - field_0x996 = i_angY; - field_0x968 = 0; - if (field_0x8f0.y == field_0x996) { - field_0x96c++; + mTurnTargetAngle = i_angY; + mTurnAmount = 0; + if (mCurAngle.y == mTurnTargetAngle) { + mTurnMode++; } - current.angle.y = field_0x8f0.y; + current.angle.y = mCurAngle.y; shape_angle.y = current.angle.y; - field_0x96c++; - } else if (field_0x96c == 1) { - if (turn(field_0x996, 15.0, 0)) { + mTurnMode++; + } else if (mTurnMode == 1) { + if (turn(mTurnTargetAngle, 15.0f, 0)) { shape_angle.y = current.angle.y; - field_0x8f0.y = current.angle.y; - field_0x8f6.y = current.angle.y; - field_0x96c++; + mCurAngle.y = current.angle.y; + mOldAngle.y = current.angle.y; + mTurnMode++; } else { shape_angle.y = current.angle.y; - field_0x8f0.y = current.angle.y; + mCurAngle.y = current.angle.y; } } - return field_0x96c > 1; + return mTurnMode > 1; } /* ############################################################################################## */ @@ -457,7 +457,7 @@ SECTION_DATA static char* l_myName = (char*)&d_a_npc_ash__stringBase0; #ifdef NONMATCHING -daNpcAsh_eventFn daNpcAsh_c::mEvtSeqList[6] = { +daNpcAsh_c::EventFn daNpcAsh_c::mEvtSeqList[6] = { NULL, &EvCut_Introduction, &EvCut_Meeting, @@ -831,38 +831,38 @@ asm void __dt__10daNpcAsh_cFv() { /* ############################################################################################## */ /* 8095D640-8095D6AC 000000 006C+00 14/14 0/0 0/0 .rodata m__16daNpcAsh_Param_c */ SECTION_RODATA daNpcAsh_Param_c::param const daNpcAsh_Param_c::m = { - 35.0f, + 35.0f, // mAttnOffsetY -3.0f, // mGravity - 1.0f, - 400.0f, // mShadow - 255.0f, // mCcSttsWeight - 200.0f, - 35.0f, - 30.0f, - 0.0f, - 0.0f, - 0.0f, - 0.0f, - 30.0f, - 0.0f, - 30.0f, - -30.0f, - 0.8f, // mLookatScl - 12.0f, - 3, - 6, - 5, - 6, - 120.0f, // mSightAngle - 500.0f, - 300.0f, - -300.0f, + 1.0f, // mScale + 400.0f, // mShadowDepth + 255.0f, // mCcWeight + 200.0f, // mCylH + 35.0f, // mWallH + 30.0f, // mWallR + 0.0f, // mBodyUpAngle + 0.0f, // mBodyDownAngle + 0.0f, // mBodyLeftAngle + 0.0f, // mBodyRightAngle + 30.0f, // mHeadUpAngle + 0.0f, // mHeadDownAngle + 30.0f, // mHeadLeftAngle + -30.0f, // mHeadRightAngle + 0.8f, // mNeckAngleScl + 12.0f, // mMorfFrames + 3, // mSpeakDistIdx + 6, // mSpeakAngleIdx + 5, // mTalkDistIdx + 6, // mTalkAngleIdx + 120.0f, // mAttnFovY + 500.0f, // mAttnRadius + 300.0f, // mAttnUpperY + -300.0f, // mAttnLowerY 60, 8, - 0, - 0, - 0, - 0, + 0, // mTestExpression + 0, // mTestMotion + 0, // mTestLookMode + false, // mTest }; COMPILER_STRIP_GATE(0x8095D640, &daNpcAsh_Param_c::m); @@ -879,21 +879,21 @@ cPhs__Step daNpcAsh_c::Create() { if (dComIfGs_isStageSwitch(0x18, 0x4b)) { return cPhs_ERROR_e; } - field_0xf60 = 0; + mType = TYPE_BAR; } else if (!strcmp(dComIfGp_getStartStageName(), "D_MN09")) { if (dComIfGs_isSaveSwitch(0x14)) { return cPhs_ERROR_e; } fopAcM_OnStatus(this, 0x4000); - field_0xf60 = 1; + mType = TYPE_CASTLE; } - mMessageNo = getMessageNo(); + mFlowID = getMessageNo(); step = cPhs_ERROR_e; u32 i = 0; int arcIndex; - while (arcIndex = l_loadRes_list[field_0xf60][i], arcIndex >= 0) { + while (arcIndex = l_loadRes_list[mType][i], arcIndex >= 0) { step = (cPhs__Step)dComIfG_resLoad(&mPhase[i], l_arcNames[arcIndex]); if (step != cPhs_COMPLEATE_e) { return step; @@ -903,13 +903,13 @@ cPhs__Step daNpcAsh_c::Create() { if (step == cPhs_COMPLEATE_e) { u32 heapSize = 0; - switch (field_0xf60) { - case 0: - heapSize = 0x4210; - break; - case 1: - heapSize = 0x58b0; - break; + switch (mType) { + case TYPE_BAR: + heapSize = 0x4210; + break; + case TYPE_CASTLE: + heapSize = 0x58b0; + break; } if (!fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize)) { @@ -918,26 +918,27 @@ cPhs__Step daNpcAsh_c::Create() { fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -100.0f, -50.0f, -100.0f, 100.0f, 220.0f, 100.0f); - mZ2.init(¤t.pos, &eyePos, 3, 1); - mAcchCir.SetWall(daNpcAsh_Param_c::m.m1C, daNpcAsh_Param_c::m.m18); - mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + mCreatureSound.init(¤t.pos, &eyePos, 3, 1); + mAcchCir.SetWall(daNpcAsh_Param_c::m.mWallR, daNpcAsh_Param_c::m.mWallH); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); mAcch.SetRoofNone(); mAcch.SetWaterNone(); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init((int)daNpcAsh_Param_c::m.mCcSttsWeight, 0, this); + mCcStts.Init((int)daNpcAsh_Param_c::m.mCcWeight, 0, this); mCcCyl[0].Set(daNpcF_c::mCcDCyl); mCcCyl[0].SetStts(&mCcStts); mCcCyl[0].SetTgType(0); mCcCyl[0].SetTgSPrm(0); - if (field_0xf60 == 0) { + if (mType == TYPE_BAR) { mCcCyl[1].Set(daNpcF_c::mCcDCyl); mCcCyl[1].SetStts(&mCcStts); mCcCyl[1].SetTgType(0); mCcCyl[1].SetTgSPrm(0); mCcCyl[1].SetCoSPrm(0x19); } - field_0xa44 = mAcch.m_gnd; - field_0x980 = mAcch.GetGroundH(); + mGndChk = mAcch.m_gnd; + mGroundH = mAcch.GetGroundH(); setEnvTevColor(); setRoomNo(); mpMorf->modelCalc(); @@ -959,9 +960,11 @@ COMPILER_STRIP_GATE(0x8095D6C0, &lit_4301); /* 80958B68-80958F08 000968 03A0+00 1/1 0/0 0/0 .text CreateHeap__10daNpcAsh_cFv */ #ifdef NONMATCHING +// matches with literals BOOL daNpcAsh_c::CreateHeap() { - J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcNames[0], 11); - mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, &mZ2, 0x80000, 0x11020284); + J3DModelData* modelData = static_cast(dComIfG_getObjectRes(l_arcNames[0], 11)); + mpMorf = new mDoExt_McaMorfSO(modelData, NULL, NULL, NULL, -1, 1.0f, 0, -1, + &mCreatureSound, 0x80000, 0x11020284); if (mpMorf != NULL && mpMorf->mpModel == NULL) { mpMorf->stopZelAnime(); mpMorf = NULL; @@ -983,32 +986,34 @@ BOOL daNpcAsh_c::CreateHeap() { mModelQuiver = NULL; mModelBow = NULL; - if (field_0xf60 == 1) { - mModelBow = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes(l_arcNames[2], 8), 0x80000, 0x11000084); + if (mType == TYPE_CASTLE) { + mModelBow = mDoExt_J3DModel__create(static_cast( + dComIfG_getObjectRes(l_arcNames[2], 8)), 0x80000, 0x11000084); if (mModelBow == NULL) { return false; } - mModelQuiver = mDoExt_J3DModel__create((J3DModelData*)dComIfG_getObjectRes(l_arcNames[2], 9), 0x80000, 0x11000084); + mModelQuiver = mDoExt_J3DModel__create(static_cast( + dComIfG_getObjectRes(l_arcNames[2], 9)), 0x80000, 0x11000084); if (mModelQuiver == NULL) { return false; } } - if (!setExpressionAnm(1, false)) { + if (!setExpressionAnm(ANM_F_TALK_A, false)) { return false; } - switch (field_0xf60) { - case 0: - if (isMap()) { - setMotionAnm(9, 0.0f); - } else { - setMotionAnm(8, 0.0f); - } - break; - case 1: - setMotionAnm(16, 0.0f); - break; + switch (mType) { + case TYPE_BAR: + if (isMap()) { + setMotionAnm(ANM_WAIT_B, 0.0f); + } else { + setMotionAnm(ANM_WAIT_A, 0.0f); + } + break; + case TYPE_CASTLE: + setMotionAnm(ANM_BOWWAIT, 0.0f); + break; } return true; } @@ -1148,17 +1153,20 @@ int daNpcAsh_c::Execute() { /* 8095911C-80959238 000F1C 011C+00 1/1 0/0 0/0 .text Draw__10daNpcAsh_cFv */ int daNpcAsh_c::Draw() { mpMorf->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); - draw(0, 0, daNpcAsh_Param_c::m.mShadow, NULL, 0); - if (field_0xf60 == 1) { + draw(false, false, daNpcAsh_Param_c::m.mShadowDepth, NULL, false); + + if (mType == TYPE_CASTLE) { g_env_light.setLightTevColorType_MAJI(mModelBow, &tevStr); mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(16)); mModelBow->setBaseTRMtx(mDoMtx_stack_c::get()); mDoExt_modelUpdateDL(mModelBow); + g_env_light.setLightTevColorType_MAJI(mModelQuiver, &tevStr); mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(2)); mModelQuiver->setBaseTRMtx(mDoMtx_stack_c::get()); mDoExt_modelUpdateDL(mModelQuiver); } + return 1; } @@ -1169,6 +1177,7 @@ int daNpcAsh_c::Draw() { bool daNpcAsh_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { int jointNo = i_joint->getJntNo(); int lookatJoints[3] = {1, 3, 4}; + if (jointNo == 0) { mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1)); mDoMtx_stack_c::multVecZero(&mLookatPos[0]); @@ -1177,21 +1186,24 @@ bool daNpcAsh_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); mDoMtx_stack_c::multVecZero(&mLookatPos[2]); } + mDoMtx_stack_c::copy(i_model->getAnmMtx(jointNo)); switch (jointNo) { - case 1: - case 3: - case 4: - setLookatMtx(jointNo, lookatJoints, daNpcAsh_Param_c::m.mLookatScl); - break; + case 1: + case 3: + case 4: + setLookatMtx(jointNo, lookatJoints, daNpcAsh_Param_c::m.mNeckAngleScl); + break; } i_model->setAnmMtx(jointNo, mDoMtx_stack_c::get()); cMtx_copy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); - if ((jointNo == 4 || jointNo == 12) && (mAnmFlags & 0x100) != 0) { + + if ((jointNo == 4 || jointNo == 12) && (mAnmFlags & ANM_PLAY_BCK)) { J3DAnmTransform* bckAnm = mBckAnm.getBckAnm(); mBckAnm.changeBckOnly(mpMorf->getAnm()); mpMorf->changeAnm(bckAnm); } + if (cM3d_IsZero_inverted(mExpressionMorf)) { if (jointNo == 12) { mpMorf->onMorfNone(); @@ -1199,6 +1211,7 @@ bool daNpcAsh_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { mpMorf->offMorfNone(); } } + return true; } @@ -1211,13 +1224,11 @@ BOOL daNpcAsh_c::createHeapCallBack(fopAc_ac_c* i_this) { /* 80959478-809594C4 001278 004C+00 1/1 0/0 0/0 .text ctrlJointCallBack__10daNpcAsh_cFP8J3DJointi */ BOOL daNpcAsh_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) { - J3DModel* model; - daNpcAsh_c* self; if (param_1 == 0) { - model = j3dSys.getModel(); - self = (daNpcAsh_c*)model->getUserArea(); - if (self != NULL) { - self->ctrlJoint(i_joint, model); + J3DModel* model = j3dSys.getModel(); + daNpcAsh_c* _this = (daNpcAsh_c*)model->getUserArea(); + if (_this != NULL) { + _this->ctrlJoint(i_joint, model); } } return true; @@ -1228,58 +1239,65 @@ BOOL daNpcAsh_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) { #ifdef NONMATCHING // literals bool daNpcAsh_c::setExpressionAnm(int i_idx, bool i_modify) { - J3DAnmTransform* bckAnm; if (i_idx < 0 || i_idx > 7) { return false; } mAnmFlags &= ~ANM_EXPRESSION_FLAGS; + + J3DAnmTransform* bckAnm; if (l_bckGetParamList[i_idx].fileIdx >= 0) { - bckAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], l_bckGetParamList[i_idx].fileIdx); + bckAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], + l_bckGetParamList[i_idx].fileIdx); } else { bckAnm = NULL; } + s32 attr = l_bckGetParamList[i_idx].attr; bool res = false; switch (i_idx) { - case 0: - res = setExpressionBtp(0); - break; - case 1: - res = setExpressionBtp(0); - break; - case 2: - res = setExpressionBtp(0); - break; - case 3: - res = setExpressionBtp(0); - break; - case 4: - res = setExpressionBtp(0); - break; - case 5: - res = setExpressionBtp(0); - break; - case 6: - res = setExpressionBtp(0); - break; - case 7: - res = setExpressionBtp(0); - break; - default: - bckAnm = NULL; - break; + case ANM_NONE: + res = setExpressionBtp(0); + break; + case ANM_F_TALK_A: + res = setExpressionBtp(0); + break; + case ANM_F_TALK_B: + res = setExpressionBtp(0); + break; + case ANM_F_SILENT: + res = setExpressionBtp(0); + break; + case ANM_F_COOL: + res = setExpressionBtp(0); + break; + case ANM_F_ASK: + res = setExpressionBtp(0); + break; + case ANM_F_EXPLAIN_A: + res = setExpressionBtp(0); + break; + case ANM_F_EXPLAIN_B: + res = setExpressionBtp(0); + break; + default: + bckAnm = NULL; + break; } + if (!res) { return false; } + if (bckAnm == NULL) { return true; } + if (setBckAnm(bckAnm, 1.0f, attr, 0, -1, i_modify)) { mAnmFlags |= ANM_PAUSE_BCK | ANM_PLAY_BCK; mExpressionLoops = 0; return true; } + return false; } #else @@ -1297,7 +1315,8 @@ asm bool daNpcAsh_c::setExpressionAnm(int param_0, bool param_1) { #ifdef NONMATCHING // literals bool daNpcAsh_c::setExpressionBtp(int i_idx) { - J3DAnmTexPattern* btpAnm = getTexPtrnAnmP(l_arcNames[l_btpGetParamList[i_idx].arcIdx], l_btpGetParamList[i_idx].fileIdx); + J3DAnmTexPattern* btpAnm = getTexPtrnAnmP(l_arcNames[l_btpGetParamList[i_idx].arcIdx], + l_btpGetParamList[i_idx].fileIdx); s32 attr = l_btpGetParamList[i_idx].attr; mAnmFlags &= ~(ANM_PAUSE_BTP | ANM_PLAY_BTP | ANM_FLAG_800); if (btpAnm == NULL) { @@ -1327,24 +1346,25 @@ asm bool daNpcAsh_c::setExpressionBtp(int param_0) { #ifdef NONMATCHING // literals void daNpcAsh_c::setMotionAnm(int i_idx, f32 i_morf) { - J3DAnmTransformKey* morfAnm; - J3DAnmTextureSRTKey* btkAnm; - s32 morfAttr; - s32 btkAttr; if (i_idx < 8 || i_idx >= 18) { return; } - morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], l_bckGetParamList[i_idx].fileIdx); - btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], l_btkGetParamList[0].fileIdx); - morfAttr = l_bckGetParamList[i_idx].attr; - btkAttr = l_btkGetParamList[0].attr; + + J3DAnmTransformKey* morfAnm = getTrnsfrmKeyAnmP(l_arcNames[l_bckGetParamList[i_idx].arcIdx], + l_bckGetParamList[i_idx].fileIdx); + J3DAnmTextureSRTKey* btkAnm = getTexSRTKeyAnmP(l_arcNames[l_btkGetParamList[0].arcIdx], + l_btkGetParamList[0].fileIdx); + s32 morfAttr = l_bckGetParamList[i_idx].attr; + s32 btkAttr = l_btkGetParamList[0].attr; mAnmFlags &= ~ANM_MOTION_FLAGS; + if (morfAnm != NULL) { if (setMcaMorfAnm(morfAnm, 1.0f, i_morf, morfAttr, 0, -1)) { mAnmFlags |= ANM_PAUSE_MORF | ANM_PLAY_MORF; mMotionLoops = 0; } } + if (btkAnm != NULL) { if (setBtkAnm(btkAnm, mpMorf->getModel()->getModelData(), 1.0f, btkAttr)) { mAnmFlags |= ANM_PAUSE_BTK | ANM_PLAY_BTK; @@ -1377,15 +1397,15 @@ void daNpcAsh_c::reset() { field_0xf54 = 0; mpActionFn = NULL; mLookMode = -1; - field_0xf5c = 0; - mGravity = daNpcAsh_Param_c::m.mGravity; + mMode = 0; + gravity = daNpcAsh_Param_c::m.mGravity; current.pos = home.pos; old.pos = current.pos; current.angle.set(0, home.angle.y, 0); old.angle = current.angle; shape_angle = current.angle; - field_0x8f0 = current.angle; - field_0x8f6 = field_0x8f0; + mCurAngle = current.angle; + mOldAngle = mCurAngle; speedF = 0.0f; speed.setall(0.0f); mItemPartnerId = -1; @@ -1393,7 +1413,7 @@ void daNpcAsh_c::reset() { mExpressionMorfOverride = 0; mMotionMorfOverride = 0; - if (mMessageNo == 0x42d) { + if (mFlowID == 0x42d) { field_0xf5f = 0; } else { field_0xf5f = 3; @@ -1403,7 +1423,7 @@ void daNpcAsh_c::reset() { fopAcM_OnStatus(this, 0x4000); } - if (field_0xf60 == 0) { + if (mType == TYPE_BAR) { setAction(&wait_type0); } else { setAction(&wait_type1); @@ -1422,12 +1442,12 @@ asm void daNpcAsh_c::reset() { /* 80959B28-80959BD0 001928 00A8+00 1/1 0/0 0/0 .text * setAction__10daNpcAsh_cFM10daNpcAsh_cFPCvPvPv_b */ -bool daNpcAsh_c::setAction(daNpcAsh_actionFn i_actionFn) { - field_0xf5c = 3; +bool daNpcAsh_c::setAction(daNpcAsh_c::ActionFn i_actionFn) { + mMode = 3; if (mpActionFn != NULL) { (this->*mpActionFn)(NULL); } - field_0xf5c = 0; + mMode = 0; this->mpActionFn = i_actionFn; if (mpActionFn != NULL) { (this->*mpActionFn)(NULL); @@ -1437,7 +1457,9 @@ bool daNpcAsh_c::setAction(daNpcAsh_actionFn i_actionFn) { /* 80959BD0-80959C40 0019D0 0070+00 1/1 0/0 0/0 .text isSneaking__10daNpcAsh_cFv */ bool daNpcAsh_c::isSneaking() { - if (!strcmp(dComIfGp_getStartStageName(), ((char*)&d_a_npc_ash__stringBase0) + 0x6C) && dComIfGp_getStartStageRoomNo() == 5 && dComIfG_play_c::getLayerNo(0) == 2) { // "R_SP116" + if (!strcmp(dComIfGp_getStartStageName(), "R_SP116") + && dComIfGp_getStartStageRoomNo() == 5 && dComIfG_play_c::getLayerNo(0) == 2) + { return true; } else { return false; @@ -1445,21 +1467,21 @@ bool daNpcAsh_c::isSneaking() { } void daNpcAsh_c::playExpression() { - daNpcF_anmPlayData dat0 = {1, daNpcAsh_Param_c::m.m44, 0}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcAsh_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {2, daNpcAsh_Param_c::m.m44, 0}; + daNpcF_anmPlayData dat1 = {ANM_F_TALK_B, daNpcAsh_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {3, daNpcAsh_Param_c::m.m44, 0}; + daNpcF_anmPlayData dat2 = {ANM_F_SILENT, daNpcAsh_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3 = {4, daNpcAsh_Param_c::m.m44, 0}; + daNpcF_anmPlayData dat3 = {ANM_F_COOL, daNpcAsh_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4 = {5, daNpcAsh_Param_c::m.m44, 0}; + daNpcF_anmPlayData dat4 = {ANM_F_ASK, daNpcAsh_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat4[1] = {&dat4}; - daNpcF_anmPlayData dat5 = {6, daNpcAsh_Param_c::m.m44, 0}; + daNpcF_anmPlayData dat5 = {ANM_F_EXPLAIN_A, daNpcAsh_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6 = {7, daNpcAsh_Param_c::m.m44, 0}; + daNpcF_anmPlayData dat6 = {ANM_F_EXPLAIN_B, daNpcAsh_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat6[1] = {&dat6}; - daNpcF_anmPlayData dat7 = {0, daNpcAsh_Param_c::m.m44, 0}; + daNpcF_anmPlayData dat7 = {ANM_NONE, daNpcAsh_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; daNpcF_anmPlayData** ppDat[8] = { pDat0, @@ -1476,52 +1498,6 @@ void daNpcAsh_c::playExpression() { } } -#ifdef NONMATCHING -// inlining -void daNpcAsh_c::playMotion() { - daNpcF_anmPlayData dat0 = {8, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1 = {9, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat1[1] = {&dat1}; - daNpcF_anmPlayData dat2 = {10, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat2[1] = {&dat2}; - daNpcF_anmPlayData dat3a = {12, daNpcAsh_Param_c::m.m44, 1}; - daNpcF_anmPlayData dat3b = {10, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; - daNpcF_anmPlayData dat4a = {13, daNpcAsh_Param_c::m.m44, 1}; - daNpcF_anmPlayData dat4b = {10, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5a = {14, daNpcAsh_Param_c::m.m44, 1}; - daNpcF_anmPlayData dat5b = {10, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; - daNpcF_anmPlayData dat6a = {15, daNpcAsh_Param_c::m.m44, 1}; - daNpcF_anmPlayData dat6b = {8, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7 = {16, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {17, daNpcAsh_Param_c::m.m44, 0}; - daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9 = {11, 4.0, 1}; - daNpcF_anmPlayData* pDat9[1] = {&dat9}; - daNpcF_anmPlayData** ppDat[10] = { - pDat0, - pDat1, - pDat2, - pDat3, - pDat4, - pDat5, - pDat6, - pDat7, - pDat8, - pDat9, - }; - if (mMotion >= 0 && mMotion < 10) { - playMotionAnm(ppDat); - } -} - -#else - /* 8095D770-8095D77C 000130 000C+00 0/1 0/0 0/0 .rodata @4658 */ #pragma push #pragma force_active on @@ -1767,8 +1743,6 @@ SECTION_RODATA static u8 const lit_4682[40] = { COMPILER_STRIP_GATE(0x8095D850, &lit_4682); #pragma pop -#endif - /* 8095D878-8095D884 000238 000C+00 0/1 0/0 0/0 .rodata @4697 */ #pragma push #pragma force_active on @@ -1808,95 +1782,103 @@ COMPILER_STRIP_GATE(0x8095D890, &lit_4980); /* 80959C40-8095A67C 001A40 0A3C+00 4/0 0/0 0/0 .text wait_type0__10daNpcAsh_cFPv */ #ifdef NONMATCHING bool daNpcAsh_c::wait_type0(void* param_0) { - switch (field_0xf5c) { - case 0: - setExpression(7, -1.0f); - if (!isMap()) { - setMotion(0, -1.0f, false); - } else if (field_0x8f0.y == home.angle.y) { - setMotion(1, -1.0f, false); - } - field_0x96c = 0; - speedF = 0.0f; - field_0xf5c = 2; - break; - case 2: - if (isSneaking()) { - setLookMode(0, NULL); + switch (mMode) { + case 0: + setExpression(EXPR_NONE, -1.0f); + if (!isMap()) { + setMotion(MOT_WAIT_A, -1.0f, false); + } else if (mCurAngle.y == home.angle.y) { + setMotion(MOT_WAIT_B, -1.0f, false); + } + + mTurnMode = 0; + speedF = 0.0f; + mMode = 2; + break; + + case 2: + if (isSneaking()) { + setLookMode(LOOK_NONE, NULL); + } else { + if (mActorMngr[0].getActorP() != NULL) { + if (!chkFindPlayer()) { + mTurnMode = 0; + } } else { - if (mActorMngr[0].getActorP() != NULL) { - if (!chkFindPlayer()) { - field_0x96c = 0; - } - } else { - if (chkFindPlayer()) { - field_0x96c = 0; - } - } - if (mActorMngr[0].getActorP() != NULL) { - setLookMode(2, NULL); - } else { - if (isMap()) { - setLookMode(4, NULL); - } else { - setLookMode(0, NULL); - } - if (home.angle.y != field_0x8f0.y) { - if (step(home.angle.y, true)) { - setExpression(7, -1.0f); - if (!isMap()) { - setMotion(0, -1.0f, false); - } else { - setMotion(1, -1.0f, false); - } - field_0x96c = 0; - } - } - daTag_EvtArea_c* evtArea = (daTag_EvtArea_c*)mActorMngr[5].getActorP(); - if (evtArea != NULL) { - if (evtArea->chkPointInArea(*fopAcM_GetPosition_p(daPy_getPlayerActorClass()))) { - daNpcF_offTmpBit(11); - mOrderEvtNo = 2; - fopAcM_delete(evtArea); - } - } + if (chkFindPlayer()) { + mTurnMode = 0; } } - if (field_0x8f0.y != home.angle.y) { - if (step(home.angle.y, true)) { + + if (mActorMngr[0].getActorP() != NULL) { + setLookMode(LOOK_PLAYER, NULL); + } else { + if (isMap()) { + setLookMode(LOOK_ACTOR, NULL); + } else { + setLookMode(LOOK_NONE, NULL); + } + + if (home.angle.y != mCurAngle.y && step(home.angle.y, true)) { + setExpression(EXPR_NONE, -1.0f); if (!isMap()) { - setMotion(0, -1.0f, false); + setMotion(MOT_WAIT_A, -1.0f, false); } else { - setMotion(1, -1.0f, false); + setMotion(MOT_WAIT_B, -1.0f, false); } - field_0x96c = 0; + mTurnMode = 0; + } + + daTag_EvtArea_c* evtArea = static_cast(mActorMngr[5].getActorP()); + if (evtArea != NULL + && evtArea->chkPointInArea(*fopAcM_GetPosition_p(daPy_getPlayerActorClass()))) + { + daNpcF_offTmpBit(11); + mOrderEvtNo = 2; + fopAcM_delete(evtArea); } } - if (dComIfGp_event_runCheck()) { - if (eventInfo.checkCommandTalk()) { - if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { - if (isSneaking()) { - mOrderEvtNo = 3; - changeEvent(l_arcNames[0], l_evtNames[mOrderEvtNo], 1, -1); - } else { - setAction(&talk); - } - } + } + + if (mCurAngle.y != home.angle.y) { + if (step(home.angle.y, true)) { + if (!isMap()) { + setMotion(MOT_WAIT_A, -1.0f, false); } else { - if (dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0) != -1) { - setAction(&demo); + setMotion(MOT_WAIT_B, -1.0f, false); + } + mTurnMode = 0; + } + } + + if (dComIfGp_event_runCheck()) { + if (eventInfo.checkCommandTalk()) { + if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { + if (isSneaking()) { + mOrderEvtNo = 3; + changeEvent(l_arcNames[0], l_evtNames[mOrderEvtNo], 1, -1); + } else { + setAction(&talk); } } } else { - if (mOrderEvtNo != 0) { - eventInfo.setArchiveName("Ash"); + if (dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0) != -1) { + setAction(&demo); } - orderEvent(mMapToolId, mOrderEvtNo != 0 ? l_evtNames[mOrderEvtNo] : NULL, -1, 40, -1, 1); } - break; - case 3: - break; + } else { + if (mOrderEvtNo != 0) { + eventInfo.setArchiveName("Ash"); + } + orderEvent(mMapToolId, mOrderEvtNo != 0 ? l_evtNames[mOrderEvtNo] : NULL, + -1, 40, -1, 1); + } + break; + + case 3: + break; } + return true; } #else @@ -1952,36 +1934,41 @@ COMPILER_STRIP_GATE(0x8095D89C, &lit_5034); #ifdef NONMATCHING // literals bool daNpcAsh_c::wait_type1(void* param_0) { - switch (field_0xf5c) { + switch (mMode) { + case 0: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_BOWWAIT, -1.0f, false); + mTurnMode = 0; + speedF = 0.0f; + mActorMngr[0].entry(daPy_getPlayerActorClass()); + setLookMode(LOOK_NONE, NULL); + mMode = 2; + break; + + case 2: + switch (field_0xf54) { case 0: - setExpression(7, -1.0f); - setMotion(7, -1.0f, false); - field_0x96c = 0; - speedF = 0.0f; - mActorMngr[0].entry(daPy_getPlayerActorClass()); - setLookMode(0, NULL); - field_0xf5c = 2; - break; - case 2: - switch (field_0xf54) { - case 0: - if (daNpcF_chkTmpBit(0x76)) { - current.pos.set(-4300.0f, 0.0f, 8627.657f); - old.pos = current.pos; - setAngle(-0x6000); - field_0xf54++; - } - break; - case 1: - if (daNpcF_chkTmpBit(0x74)) { - setAction(&leave); - } - break; + if (daNpcF_chkTmpBit(0x76)) { + current.pos.set(-4300.0f, 0.0f, 8627.657f); + old.pos = current.pos; + setAngle(-0x6000); + field_0xf54++; } break; - case 3: + + case 1: + if (daNpcF_chkTmpBit(0x74)) { + setAction(&leave); + } break; + } + + break; + + case 3: + break; } + return true; } #else @@ -1999,53 +1986,57 @@ asm bool daNpcAsh_c::wait_type1(void* param_0) { #ifdef NONMATCHING // literals bool daNpcAsh_c::talk(void* param_0) { - int expression, motion; bool ret = false; - switch (field_0xf5c) { - case 0: - initTalk(mMessageNo, NULL); - field_0x96c = 0; - field_0x950 = 0; - if (mMessageNo == 0x42d) { - field_0xf5f++; - } - mMapToolId = 0; - speedF = 0.0f; - setLookMode(3, NULL); - setMotion(0, -1.0f, false); - field_0xf5c = 2; - break; - case 2: - if (field_0xf5f <= 2 || field_0x8f0.y == fopAcM_searchPlayerAngleY(this)) { - if (talkProc(NULL, 1, NULL)) { - mActorMngr[0].entry(daPy_getPlayerActorClass()); - setAction(&wait_type0); - ret = true; + + switch (mMode) { + case 0: + initTalk(mFlowID, NULL); + mTurnMode = 0; + mMsgTimer = 0; + if (mFlowID == 0x42d) { + field_0xf5f++; + } + mMapToolId = 0; + speedF = 0.0f; + setLookMode(LOOK_PLAYER_TALK, NULL); + setMotion(MOT_WAIT_A, -1.0f, false); + mMode = 2; + break; + + case 2: + if (field_0xf5f <= 2 || mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + if (talkProc(NULL, 1, NULL)) { + mActorMngr[0].entry(daPy_getPlayerActorClass()); + setAction(&wait_type0); + ret = true; + } else { + s32 prev_msg_timer = mMsgTimer; + int expression, motion; + if (ctrlMsgAnm(expression, motion, this, 0)) { + setExpression(expression, -1.0f); + setMotion(motion, -1.0f, false); } else { - s32 unk = field_0x950; - if (ctrlMsgAnm(expression, motion, this, 0)) { - setExpression(expression, -1.0f); - setMotion(motion, -1.0f, false); - } else { - if (unk != 0 && field_0x950 == 0) { - setExpressionTalkAfter(); - } + if (prev_msg_timer != 0 && mMsgTimer == 0) { + setExpressionTalkAfter(); } } - } else { - if (step(fopAcM_searchPlayerAngleY(this), true)) { - setMotion(0, -1.0f, false); - field_0x96c = 0; - } } - break; - case 3: - setExpression(7, -1.0f); - if (field_0x9ec == 0) { - dComIfGp_event_reset(); + } else { + if (step(fopAcM_searchPlayerAngleY(this), true)) { + setMotion(MOT_WAIT_A, -1.0f, false); + mTurnMode = 0; } - break; + } + break; + + case 3: + setExpression(EXPR_NONE, -1.0f); + if (!field_0x9ec) { + dComIfGp_event_reset(); + } + break; } + return ret; } #else @@ -2062,52 +2053,58 @@ asm bool daNpcAsh_c::talk(void* param_0) { /* 8095AD28-8095B164 002B28 043C+00 1/0 0/0 0/0 .text demo__10daNpcAsh_cFPv */ #ifdef NONMATCHING bool daNpcAsh_c::demo(void* param_0) { - switch (field_0xf5c) { - case 0: - setExpression(7, -1.0f); - if (!isMap()) { - setMotion(0, -1.0f, false); - } else { - setMotion(1, -1.0f, false); + switch (mMode) { + case 0: + setExpression(EXPR_NONE, -1.0f); + if (!isMap()) { + setMotion(MOT_WAIT_A, -1.0f, false); + } else { + setMotion(MOT_WAIT_B, -1.0f, false); + } + mMode = 2; + // fallthrough + + case 2: + if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()) { + s32 cutIndex = dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0); + if (cutIndex != -1) { + mCutIndex = cutIndex; + s32 eventIdx = dComIfGp_getEventManager().getMyActIdx(cutIndex, l_evtNames, 6, 0, 0); + if (eventIdx >= 1 && eventIdx < 6) { + mOrderEvtNo = eventIdx; + } + if ((this->*(mEvtSeqList[mOrderEvtNo]))(cutIndex)) { + dComIfGp_getEventManager().cutEnd(cutIndex); + } } - field_0xf5c = 2; - // no break - case 2: - if (dComIfGp_event_runCheck() && !eventInfo.checkCommandTalk()) { - s32 cutIndex = dComIfGp_getEventManager().getMyStaffId(l_myName, NULL, 0); - if (cutIndex != -1) { - mCutIndex = cutIndex; - s32 eventIdx = dComIfGp_getEventManager().getMyActIdx(cutIndex, l_evtNames, 6, 0, 0); - if (eventIdx >= 1 && eventIdx < 6) { - mOrderEvtNo = eventIdx; - } - if ((this->*(mEvtSeqList[mOrderEvtNo]))(cutIndex)) { - dComIfGp_getEventManager().cutEnd(cutIndex); - } - } - if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 && dComIfGp_getEventManager().endCheck(mEventIdx)) { - dComIfGp_event_reset(); - mOrderEvtNo = 0; - mEventIdx = -1; - if (field_0xf60 == 0) { - setAction(&wait_type0); - } else { - setAction(&wait_type1); - } - } - } else { + + if (eventInfo.checkCommandDemoAccrpt() && mEventIdx != -1 + && dComIfGp_getEventManager().endCheck(mEventIdx)) + { + dComIfGp_event_reset(); mOrderEvtNo = 0; mEventIdx = -1; - if (field_0xf60 == 0) { + if (mType == TYPE_BAR) { setAction(&wait_type0); } else { setAction(&wait_type1); } } - break; - case 3: - break; + } else { + mOrderEvtNo = 0; + mEventIdx = -1; + if (mType == TYPE_BAR) { + setAction(&wait_type0); + } else { + setAction(&wait_type1); + } + } + break; + + case 3: + break; } + return true; } #else @@ -2169,24 +2166,28 @@ COMPILER_STRIP_GATE(0x8095D8B8, &lit_5231); bool daNpcAsh_c::leave(void* param_0) { cXyz target; target.set(-6253.387, 0.0, 6251.76); - switch (field_0xf5c) { - case 0: - setExpression(7, -1.0f); - setMotion(8, -1.0f, false); - field_0x96c = 0; - speedF = 0.0f; - field_0xf5c = 2; - break; - case 2: - step(cLib_targetAngleY(¤t.pos, &target), true); - speedF = 15.0f; - if (mAcch.ChkWallHit() || current.pos.abs(target) < speedF) { - fopAcM_delete(this); - } - break; - case 3: - break; + + switch (mMode) { + case 0: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_BOWRUN, -1.0f, false); + mTurnMode = 0; + speedF = 0.0f; + mMode = 2; + break; + + case 2: + step(cLib_targetAngleY(¤t.pos, &target), true); + speedF = 15.0f; + if (mAcch.ChkWallHit() || current.pos.abs(target) < speedF) { + fopAcM_delete(this); + } + break; + + case 3: + break; } + return true; } #else @@ -2210,20 +2211,22 @@ SECTION_DEAD static char const* const stringBase_8095D98B = "prm"; /* 8095B48C-8095B58C 00328C 0100+00 1/0 0/0 0/0 .text EvCut_Introduction__10daNpcAsh_cFi */ -BOOL daNpcAsh_c::EvCut_Introduction(int cutIndex) { - int* prm = dComIfGp_evmng_getMyIntegerP(cutIndex, ((char*)&d_a_npc_ash__stringBase0) + 0x7B); +BOOL daNpcAsh_c::EvCut_Introduction(int i_cutIndex) { + int* prm = dComIfGp_evmng_getMyIntegerP(i_cutIndex, ((char*)&d_a_npc_ash__stringBase0) + 0x7B); if (prm == NULL) { return false; } - if (dComIfGp_getEventManager().getIsAddvance(cutIndex)) { + + if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (*prm) { - case 0: - case 2: - setLookMode(0, NULL); - return true; - case 1: - setLookMode(2, NULL); - return true; + case 0: + case 2: + setLookMode(LOOK_NONE, NULL); + return true; + + case 1: + setLookMode(LOOK_PLAYER, NULL); + return true; } } return false; @@ -2240,9 +2243,7 @@ COMPILER_STRIP_GATE(0x8095D8C0, &lit_5254); /* 8095B58C-8095B83C 00338C 02B0+00 1/0 0/0 0/0 .text EvCut_Meeting__10daNpcAsh_cFi */ #ifdef NONMATCHING // literals -BOOL daNpcAsh_c::EvCut_Meeting(int cutIndex) { - int expression, motion; - fopAc_ac_c* talkPartner; +BOOL daNpcAsh_c::EvCut_Meeting(int i_cutIndex) { dEvent_manager_c& evtMgr = dComIfGp_getEventManager(); fopAc_ac_c* actors[4] = { mActorMngr[2].getActorP(), @@ -2250,42 +2251,50 @@ BOOL daNpcAsh_c::EvCut_Meeting(int cutIndex) { mActorMngr[1].getActorP(), mActorMngr[3].getActorP(), }; - int* cutName = (int*)evtMgr.getMyNowCutName(cutIndex); - if (evtMgr.getIsAddvance(cutIndex)) { + + int* cutName = (int*)evtMgr.getMyNowCutName(i_cutIndex); + if (evtMgr.getIsAddvance(i_cutIndex)) { switch (*cutName) { - case '0001': - case '0002': - dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], NULL, NULL, NULL, NULL, NULL, NULL); - initTalk(0x42e, actors); + case '0001': + case '0002': + dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], + NULL, NULL, NULL, NULL, NULL, NULL); + initTalk(0x42e, actors); } } - int unk = field_0x950; + + int prev_msg_timer = mMsgTimer; + int expression, motion; if (ctrlMsgAnm(expression, motion, this, 0)) { setExpression(expression, -1.0f); setMotion(motion, -1.0f, false); } else { - if (unk != 0 && field_0x950 == 0) { + if (prev_msg_timer != 0 && mMsgTimer == 0) { setExpressionTalkAfter(); } } + + fopAc_ac_c* talk_partner; switch (*cutName) { - case '0001': - if (talkProc(NULL, 1, actors)) { - return true; - } - talkPartner = dComIfGp_event_getTalkPartner(); - if (talkPartner == this) { - talkPartner = NULL; - } - setLookMode(5, talkPartner); - break; - case '0002': - if (talkProc(NULL, 1, actors)) { - return true; - } - setLookMode(2, NULL); - break; + case '0001': + if (talkProc(NULL, 1, actors)) { + return true; + } + talk_partner = dComIfGp_event_getTalkPartner(); + if (talk_partner == this) { + talk_partner = NULL; + } + setLookMode(LOOK_ATTN, talk_partner); + break; + + case '0002': + if (talkProc(NULL, 1, actors)) { + return true; + } + setLookMode(LOOK_PLAYER, NULL); + break; } + return false; } #else @@ -2309,9 +2318,7 @@ COMPILER_STRIP_GATE(0x8095D8D0, &lit_5295); /* 8095B83C-8095BA80 00363C 0244+00 1/0 0/0 0/0 .text EvCut_WiretapSponsor__10daNpcAsh_cFi */ #ifdef NONMATCHING // literals -BOOL daNpcAsh_c::EvCut_WiretapSponsor(int cutIndex) { - int expression, motion; - fopAc_ac_c* talkPartner; +BOOL daNpcAsh_c::EvCut_WiretapSponsor(int i_cutIndex) { dEvent_manager_c& evtMgr = dComIfGp_getEventManager(); fopAc_ac_c* actors[4] = { mActorMngr[2].getActorP(), @@ -2319,34 +2326,43 @@ BOOL daNpcAsh_c::EvCut_WiretapSponsor(int cutIndex) { mActorMngr[1].getActorP(), mActorMngr[3].getActorP(), }; - int* cutName = (int*)evtMgr.getMyNowCutName(cutIndex); - if (evtMgr.getIsAddvance(cutIndex)) { + + int* cutName = (int*)evtMgr.getMyNowCutName(i_cutIndex); + if (evtMgr.getIsAddvance(i_cutIndex)) { switch (*cutName) { - case '0001': - dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], NULL, NULL, NULL, NULL, NULL, NULL); - initTalk(mMessageNo, actors); + case '0001': + dComIfGp_setMesgCameraInfoActor(actors[0], actors[1], actors[2], actors[3], + NULL, NULL, NULL, NULL, NULL, NULL); + initTalk(mFlowID, actors); + break; } } - int unk = field_0x950; + + int prev_msg_timer = mMsgTimer; + int expression, motion; if (ctrlMsgAnm(expression, motion, this, 0)) { setExpression(expression, -1.0f); setMotion(motion, -1.0f, false); } else { - if (unk != 0 && field_0x950 == 0) { + if (prev_msg_timer != 0 && mMsgTimer == 0) { setExpressionTalkAfter(); } } + + fopAc_ac_c* talk_partner; switch (*cutName) { - case '0001': - if (talkProc(NULL, 1, actors)) { - return true; - } - talkPartner = dComIfGp_event_getTalkPartner(); - if (talkPartner == this) { - talkPartner = NULL; - } - setLookMode(5, talkPartner); + case '0001': + if (talkProc(NULL, 1, actors)) { + return true; + } + talk_partner = dComIfGp_event_getTalkPartner(); + if (talk_partner == this) { + talk_partner = NULL; + } + setLookMode(LOOK_ATTN, talk_partner); + break; } + return false; } #else @@ -2362,35 +2378,37 @@ asm BOOL daNpcAsh_c::EvCut_WiretapSponsor(int param_0) { /* 8095BA80-8095BC38 003880 01B8+00 2/0 0/0 0/0 .text EvCut_WiretapEntrant__10daNpcAsh_cFi */ #ifdef NONMATCHING -BOOL daNpcAsh_c::EvCut_WiretapEntrant(int cutIndex) { - int expression, motion; - fopAc_ac_c* talkPartner; - int* prm = dComIfGp_evmng_getMyIntegerP(cutIndex, "prm"); +BOOL daNpcAsh_c::EvCut_WiretapEntrant(int i_cutIndex) { + int* prm = dComIfGp_evmng_getMyIntegerP(i_cutIndex, "prm"); if (prm == NULL) { return false; } - if (dComIfGp_getEventManager().getIsAddvance(cutIndex)) { + + if (dComIfGp_getEventManager().getIsAddvance(i_cutIndex)) { switch (*prm) { - case 0: - setExpression(7, -1.0f); - setMotion(0, -1.0f, false); - break; + case 0: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + break; } } - int unk = field_0x950; + + int prev_msg_timer = mMsgTimer; + int expression, motion; if (ctrlMsgAnm(expression, motion, this, 0) != 0) { setExpression(expression, -1.0f); setMotion(motion, -1.0f, false); } else { - if (unk != 0 && field_0x950 == 0) { + if (prev_msg_timer != 0 && mMsgTimer == 0) { setExpressionTalkAfter(); } } - talkPartner = dComIfGp_event_getTalkPartner(); - if (talkPartner == this) { - talkPartner = NULL; + + fopAc_ac_c* talk_partner = dComIfGp_event_getTalkPartner(); + if (talk_partner == this) { + talk_partner = NULL; } - setLookMode(5, talkPartner); + setLookMode(LOOK_ATTN, talk_partner); return true; } #else @@ -2457,9 +2475,11 @@ void daNpcAsh_c::setParam() { attention_info.field_0x0[1] = attention_info.field_0x0[0]; attention_info.field_0x0[3] = getDistTableIdx(2, 6); } else { - attention_info.field_0x0[0] = getDistTableIdx(daNpcAsh_Param_c::m.m4C, daNpcAsh_Param_c::m.m4E); + attention_info.field_0x0[0] = getDistTableIdx(daNpcAsh_Param_c::m.mTalkDistIdx, + daNpcAsh_Param_c::m.mTalkAngleIdx); attention_info.field_0x0[1] = attention_info.field_0x0[0]; - attention_info.field_0x0[3] = getDistTableIdx(daNpcAsh_Param_c::m.m48, daNpcAsh_Param_c::m.m4A); + attention_info.field_0x0[3] = getDistTableIdx(daNpcAsh_Param_c::m.mSpeakDistIdx, + daNpcAsh_Param_c::m.mSpeakAngleIdx); } } } @@ -2489,7 +2509,50 @@ BOOL daNpcAsh_c::main() { } // /* 8095C200-8095C520 004000 0320+00 1/1 0/0 0/0 .text playMotion__10daNpcAsh_cFv */ -#ifndef NONMATCHING +#ifdef NONMATCHING +// matches with literals +void daNpcAsh_c::playMotion() { + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat0[1] = {&dat0}; + daNpcF_anmPlayData dat1 = {ANM_WAIT_B, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat1[1] = {&dat1}; + daNpcF_anmPlayData dat2 = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat2[1] = {&dat2}; + daNpcF_anmPlayData dat3a = {ANM_COOL, daNpcAsh_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat3b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat3[2] = {&dat3a, &dat3b}; + daNpcF_anmPlayData dat4a = {ANM_ASK, daNpcAsh_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat4b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; + daNpcF_anmPlayData dat5a = {ANM_EXPLAIN_A, daNpcAsh_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat5b = {ANM_WAIT_C, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; + daNpcF_anmPlayData dat6a = {ANM_EXPLAIN_B, daNpcAsh_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat6b = {ANM_WAIT_A, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; + daNpcF_anmPlayData dat7 = {ANM_BOWWAIT, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat7[1] = {&dat7}; + daNpcF_anmPlayData dat8 = {ANM_BOWRUN, daNpcAsh_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat8[1] = {&dat8}; + daNpcF_anmPlayData dat9 = {ANM_STEP, 4.0f, 1}; + daNpcF_anmPlayData* pDat9[1] = {&dat9}; + daNpcF_anmPlayData** ppDat[10] = { + pDat0, + pDat1, + pDat2, + pDat3, + pDat4, + pDat5, + pDat6, + pDat7, + pDat8, + pDat9, + }; + if (mMotion >= 0 && mMotion < 10) { + playMotionAnm(ppDat); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2522,8 +2585,10 @@ BOOL daNpcAsh_c::ctrlBtk() { mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.2f * -1.0f); mpMatAnm->setNowOffsetY(cM_ssin(mEyeAngle.x) * 0.4f); mpMatAnm->onEyeMoveFlag(); + return true; + } else { + return false; } - return mpMatAnm != NULL; } #else #pragma push @@ -2583,9 +2648,9 @@ COMPILER_STRIP_GATE(0x8095D8FC, &lit_5594); #ifdef NONMATCHING // literals void daNpcAsh_c::setAttnPos() { - if (mLookMode == 1) { + if (mLookMode == LOOK_RESET) { for (int i = 0; i < 3; i++) { - field_0x91a[i].setall(0); + mLookatAngle[i].setall(0); } } @@ -2604,7 +2669,7 @@ void daNpcAsh_c::setAttnPos() { if (attnPos != NULL) { cXyz local_48 = *attnPos - eyePos; - mEyeAngle.y = -(field_0x91a[2].y + field_0x8f0.y); + mEyeAngle.y = -(mLookatAngle[2].y + mCurAngle.y); mEyeAngle.y += cM_atan2s(local_48.x, local_48.z); mEyeAngle.x = -cM_atan2s(local_48.y, local_48.absXZ()); mEyeAngle.x += mHeadAngle.x; @@ -2613,18 +2678,20 @@ void daNpcAsh_c::setAttnPos() { mEyeAngle.x = 0; } - attention_info.position.set(mHeadPos.x, mHeadPos.y + daNpcAsh_Param_c::m.m00, mHeadPos.z); + attention_info.position.set(mHeadPos.x, + mHeadPos.y + daNpcAsh_Param_c::m.mAttnOffsetY, + mHeadPos.z); cXyz center; mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(2)); mDoMtx_stack_c::multVecZero(¢er); center.y = current.pos.y; mCcCyl[0].SetC(center); - mCcCyl[0].SetH(daNpcAsh_Param_c::m.m14); - mCcCyl[0].SetR(daNpcAsh_Param_c::m.m1C); + mCcCyl[0].SetH(daNpcAsh_Param_c::m.mCylH); + mCcCyl[0].SetR(daNpcAsh_Param_c::m.mWallR); dComIfG_Ccsp()->Set(&mCcCyl[0]); - if (field_0xf60 == 0 && (!daNpcF_chkEvtBit(0x169) || !daNpcF_chkEvtBit(0x10a) + if (mType == TYPE_BAR && (!daNpcF_chkEvtBit(0x169) || !daNpcF_chkEvtBit(0x10a) || !daNpcF_chkEvtBit(0x10b) || daNpcF_chkEvtBit(0x10c))) { center.set(3070.0f, -1150.0f, 2446.0f); mCcCyl[1].SetC(center); @@ -2679,46 +2746,52 @@ COMPILER_STRIP_GATE(0x8095D90C, &lit_5652); void daNpcAsh_c::lookat() { fopAc_ac_c* actor = NULL; J3DModel* model = mpMorf->getModel(); - BOOL iv7 = false; - f32 fv13 = daNpcAsh_Param_c::m.m24; - f32 fv12 = daNpcAsh_Param_c::m.m20; - f32 fv17 = mMotion == 0 ? -15.0f : daNpcAsh_Param_c::m.m2C; - f32 fv16 = mMotion == 0 ? 15.0f : daNpcAsh_Param_c::m.m28; - f32 fv11 = daNpcAsh_Param_c::m.m34; - f32 fv10 = daNpcAsh_Param_c::m.m30; - f32 fv15 = mMotion == 0 ? 0.0f : daNpcAsh_Param_c::m.m3C; - f32 fv14 = mMotion == 0 ? 0.0f : daNpcAsh_Param_c::m.m38; - s16 idk = field_0x8f0.y - field_0x8f6.y; - cXyz lookatPos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; - csXyz* svecarray[3] = {&field_0x91a[0], &field_0x91a[1], &field_0x91a[2]}; + BOOL snap = false; + f32 body_down_angle = daNpcAsh_Param_c::m.mBodyDownAngle; + f32 body_up_angle = daNpcAsh_Param_c::m.mBodyUpAngle; + f32 body_right_angle = mMotion == MOT_WAIT_A ? -15.0f : daNpcAsh_Param_c::m.mBodyRightAngle; + f32 body_left_angle = mMotion == MOT_WAIT_A ? 15.0f : daNpcAsh_Param_c::m.mBodyLeftAngle; + f32 head_down_angle = daNpcAsh_Param_c::m.mHeadDownAngle; + f32 head_up_angle = daNpcAsh_Param_c::m.mHeadUpAngle; + f32 head_right_angle = mMotion == MOT_WAIT_A ? 0.0f : daNpcAsh_Param_c::m.mHeadRightAngle; + f32 head_left_angle = mMotion == MOT_WAIT_A ? 0.0f : daNpcAsh_Param_c::m.mHeadLeftAngle; + s16 angle_delta = mCurAngle.y - mOldAngle.y; + cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; + csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; + switch (mLookMode) { - case 0: - break; - case 1: - iv7 = true; - break; - case 2: - case 3: - actor = daPy_getPlayerActorClass(); - break; - case 4: - actor = mActorMngr[4].getActorP(); - break; - case 5: - actor = mTalkPartner; - break; + case LOOK_NONE: + break; + case LOOK_RESET: + snap = true; + break; + case LOOK_PLAYER: + case LOOK_PLAYER_TALK: + actor = daPy_getPlayerActorClass(); + break; + case LOOK_ACTOR: + actor = mActorMngr[4].getActorP(); + break; + case LOOK_ATTN: + actor = mTalkPartner; + break; } + if (actor != NULL) { mLookPos = actor->attention_info.position; - if (mLookMode != 2 && mLookMode != 3) { + if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK) { mLookPos.y -= 40.0f; } mLookat.setAttnPos(&mLookPos); } else { mLookat.setAttnPos(NULL); } - mLookat.setParam(fv13, fv12, fv17, fv16, 0.0f, 0.0f, 0.0f, 0.0f, fv11, fv10, fv15, fv14, field_0x8f0.y, lookatPos); - mLookat.calc(this, model->getBaseTRMtx(), svecarray, iv7, idk, 0); + + mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle, + 0.0f, 0.0f, 0.0f, 0.0f, + head_down_angle, head_up_angle, head_right_angle, head_left_angle, + mCurAngle.y, lookat_pos); + mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); } #else #pragma push diff --git a/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.cpp b/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.cpp index 9b56f81f5f8..c00aa7bf6a1 100644 --- a/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.cpp +++ b/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.cpp @@ -10,389 +10,17 @@ // Types: // -struct mDoMtx_stack_c { - static u8 now[48]; -}; - -struct mDoExt_McaMorfCallBack2_c {}; - -struct mDoExt_McaMorfCallBack1_c {}; - -struct J3DAnmTransform {}; - -struct J3DModelData {}; - -struct Vec {}; - -struct Z2Creature { - /* 802C03C8 */ Z2Creature(); - /* 802C0420 */ ~Z2Creature(); - /* 802C0530 */ void init(Vec*, Vec*, u8, u8); -}; - -struct mDoExt_McaMorfSO { - /* 800107D0 */ mDoExt_McaMorfSO(J3DModelData*, mDoExt_McaMorfCallBack1_c*, - mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, - int, Z2Creature*, u32, u32); - /* 80011310 */ void stopZelAnime(); -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - struct daStartAndGoal_c { /* 80D4DB30 */ void readyStartTimer(); /* 80D4DBAC */ void isStartCheck(); }; -struct daPy_py_c { - /* 8015F424 */ void checkNowWolfEyeUp(); -}; - -struct daNpcT_faceMotionAnmData_c {}; - -struct daNpcT_MotionSeqMngr_c { - struct sequenceStepData_c {}; - - /* 80145898 */ void initialize(); - /* 80A05DF0 */ ~daNpcT_MotionSeqMngr_c(); -}; - -struct daNpcT_evtData_c {}; - -struct daNpcT_motionAnmData_c {}; - -struct J3DJoint {}; - -struct daNpc_Hoz_c { - /* 80A0150C */ ~daNpc_Hoz_c(); - /* 80A01658 */ void create(); - /* 80A01904 */ void CreateHeap(); - /* 80A01D54 */ void Delete(); - /* 80A01D88 */ void Execute(); - /* 80A01DA8 */ void Draw(); - /* 80A01E44 */ void createHeapCallBack(fopAc_ac_c*); - /* 80A01E64 */ void ctrlJointCallBack(J3DJoint*, int); - /* 80A01F54 */ void getType(); - /* 80A01FC8 */ void getFlowNodeNo(); - /* 80A01FE4 */ bool isDelete(); - /* 80A01FEC */ void reset(); - /* 80A021DC */ void setParam(); - /* 80A0236C */ void setAfterTalkMotion(); - /* 80A02370 */ void srchActors(); - /* 80A02374 */ void checkChangeEvt(); - /* 80A023EC */ void evtTalk(); - /* 80A024D0 */ void evtEndProc(); - /* 80A0260C */ void evtCutProc(); - /* 80A026D4 */ void evtProc(); - /* 80A02918 */ void action(); - /* 80A029A0 */ void beforeMove(); - /* 80A02A18 */ void setAttnPos(); - /* 80A02C50 */ void setCollision(); - /* 80A02DD4 */ void evtOrder(); - /* 80A02F78 */ bool drawDbgInfo(); - /* 80A02F80 */ void selectAction(); - /* 80A030A8 */ void chkAction(int (daNpc_Hoz_c::*)(void*)); - /* 80A030D4 */ void setAction(int (daNpc_Hoz_c::*)(void*)); - /* 80A0317C */ void wait(void*); - /* 80A03304 */ void waitBattle(void*); - /* 80A03578 */ void waitTwilightBattle(void*); - /* 80A037E4 */ void waitBoat(void*); - /* 80A03BDC */ void waitBoat2(void*); - /* 80A03F8C */ void waitBoat1_5(void*); - /* 80A04400 */ void waitTw(void*); - /* 80A045FC */ void talk(void*); - /* 80A0487C */ void ECut_boatRace(int); - /* 80A04BE4 */ void ECut_beforeBattle(int); - /* 80A04CDC */ void ECut_afterBattle(int); - /* 80A04E24 */ void ECut_beforeBlast(int); - /* 80A04F6C */ void ECut_afterBlast(int); - /* 80A050B4 */ void ECut_yMushi(int); - /* 80A051C8 */ void ECut_talkBreak(int); - /* 80A064E4 */ daNpc_Hoz_c(daNpcT_faceMotionAnmData_c const*, daNpcT_motionAnmData_c const*, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, - daNpcT_evtData_c const*, char**); - /* 80A065A4 */ bool getEyeballMaterialNo(); - /* 80A065AC */ s32 getHeadJointNo(); - /* 80A065B4 */ s32 getNeckJointNo(); - /* 80A065BC */ bool getBackboneJointNo(); - /* 80A065C4 */ void checkChangeJoint(int); - /* 80A065D4 */ void checkRemoveJoint(int); - - static void* mCutNameList[8]; - static u8 mCutList[96]; -}; - -struct daNpc_Hoz_Param_c { - /* 80A065E4 */ ~daNpc_Hoz_Param_c(); - - static u8 const m[144]; -}; - -struct dCcD_GObjInf { - /* 80083A28 */ dCcD_GObjInf(); - /* 800840E4 */ ~dCcD_GObjInf(); -}; - -struct _GXColorS10 {}; - -struct J3DModel {}; - -struct cXyz { - /* 80266B34 */ void operator-(Vec const&) const; - /* 80A05798 */ ~cXyz(); - /* 80A05DEC */ cXyz(); -}; - -struct daNpcT_c { - /* 80147FA4 */ void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); - /* 801483F8 */ void loadRes(s8 const*, char const**); - /* 801484AC */ void deleteRes(s8 const*, char const**); - /* 8014852C */ void execute(); - /* 8014886C */ void draw(int, int, f32, _GXColorS10*, f32, int, int, int); - /* 80148C70 */ void setEnvTevColor(); - /* 80148CCC */ void setRoomNo(); - /* 801490D4 */ void ctrlBtk(); - /* 80149190 */ void setMtx(); - /* 801493B8 */ void ctrlMsgAnm(int*, int*, fopAc_ac_c*, int); - /* 8014951C */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 80149BB4 */ void setFootPos(); - /* 80149D7C */ void setFootPrtcl(cXyz*, f32, f32); - /* 8014A05C */ bool checkCullDraw(); - /* 8014A064 */ void twilight(); - /* 8014A224 */ void evtChange(); - /* 8014A324 */ void clrParam(); - /* 8014A388 */ void setFaceMotionAnm(int, bool); - /* 8014A628 */ void setMotionAnm(int, f32, int); - /* 8014A908 */ void setPos(cXyz); - /* 8014AA18 */ void setAngle(s16); - /* 8014B338 */ void srchPlayerActor(); - /* 8014B648 */ void step(s16, int, int, int, int); - /* 8014BBF0 */ void initTalk(int, fopAc_ac_c**); - /* 8014BC78 */ void talkProc(int*, int, fopAc_ac_c**, int); - /* 80A05410 */ ~daNpcT_c(); - /* 80A058E8 */ daNpcT_c(daNpcT_faceMotionAnmData_c const*, daNpcT_motionAnmData_c const*, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, - daNpcT_evtData_c const*, char**); - /* 80A062E0 */ bool chkXYItems(); - /* 80A062E8 */ void ctrlSubFaceMotion(int); - /* 80A062EC */ s32 getFootLJointNo(); - /* 80A062F4 */ s32 getFootRJointNo(); - /* 80A062FC */ bool getEyeballLMaterialNo(); - /* 80A06304 */ bool getEyeballRMaterialNo(); - /* 80A0630C */ void afterJntAnm(int); - /* 80A06310 */ void afterMoved(); - /* 80A06314 */ void decTmr(); - /* 80A0632C */ void drawOtherMdl(); - /* 80A06330 */ void drawGhost(); - /* 80A06334 */ bool afterSetFaceMotionAnm(int, int, f32, int); - /* 80A0633C */ bool afterSetMotionAnm(int, int, f32, int); - /* 80A06344 */ void getFaceMotionAnm(daNpcT_faceMotionAnmData_c); - /* 80A06374 */ void getMotionAnm(daNpcT_motionAnmData_c); - /* 80A063A4 */ void changeAnm(int*, int*); - /* 80A063A8 */ void changeBck(int*, int*); - /* 80A063AC */ void changeBtp(int*, int*); - /* 80A063B0 */ void changeBtk(int*, int*); - - static u8 mCcDCyl[68]; -}; - -struct daNpcT_MatAnm_c { - /* 80145764 */ void initialize(); -}; - -struct daNpcT_JntAnm_c { - /* 80146C98 */ void initialize(); - /* 80146CD8 */ void setParam(fopAc_ac_c*, J3DModel*, cXyz*, int, int, int, f32, f32, f32, f32, - f32, f32, f32, f32, f32, f32, cXyz*); - /* 80147C38 */ void calcJntRad(f32, f32, f32); - /* 80A05CF0 */ ~daNpcT_JntAnm_c(); - /* 80A05FBC */ void setEyeAngleY(cXyz, s16, int, f32, s16); - /* 80A060D8 */ void setEyeAngleX(cXyz, f32, s16); -}; - -struct daNpcT_ActorMngr_c { - /* 801456D4 */ void initialize(); - /* 801456E0 */ void entry(fopAc_ac_c*); - /* 801456FC */ void remove(); - /* 80145708 */ void getActorP(); - /* 80A05810 */ ~daNpcT_ActorMngr_c(); -}; - -struct dSv_info_c { - /* 80035200 */ void onSwitch(int, int); - /* 80035360 */ void isSwitch(int, int) const; -}; - -struct dSv_danBit_c { - /* 80034BE8 */ void isSwitch(int) const; -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dMsgFlow_c { - /* 80249F00 */ dMsgFlow_c(); - /* 80249F48 */ ~dMsgFlow_c(); -}; - struct dMeter2Info_c { /* 8021DE18 */ void setMiniGameItem(u8); /* 8021E0C4 */ void resetMiniGameItem(bool); /* 8021E268 */ void setMiniGameCount(s8); }; -struct dEvt_control_c { - /* 80042468 */ void reset(); - /* 8004368C */ void setPtT(void*); -}; - -struct dEvent_manager_c { - /* 80046800 */ void setObjectArchive(char*); - /* 80047758 */ void getEventIdx(fopAc_ac_c*, char const*, u8); - /* 80047A78 */ void endCheck(s16); - /* 80047B1C */ void getMyStaffId(char const*, fopAc_ac_c*, int); - /* 80047D4C */ void getIsAddvance(int); - /* 80047E10 */ void getMyActIdx(int, char const* const*, int, int, int); - /* 800480EC */ void getMySubstanceP(int, char const*, int); - /* 8004817C */ void cutEnd(int); - /* 800483E8 */ void getRunEventName(); - /* 800487F0 */ void ChkPresentEnd(); -}; - -struct dCcD_Stts { - /* 80083860 */ void Init(int, int, fopAc_ac_c*); -}; - -struct dCcD_SrcCyl {}; - -struct dCcD_GStts { - /* 80083760 */ dCcD_GStts(); - /* 80A05EA8 */ ~dCcD_GStts(); -}; - -struct dCcD_Cyl { - /* 800848B4 */ void Set(dCcD_SrcCyl const&); -}; - -struct dBgS_PolyPassChk { - /* 80078E68 */ void SetObj(); -}; - -struct dBgS_ObjAcch { - /* 80A05F04 */ ~dBgS_ObjAcch(); -}; - -struct dBgS_LinChk { - /* 80077C68 */ dBgS_LinChk(); - /* 80077CDC */ ~dBgS_LinChk(); -}; - -struct dBgS_GndChk { - /* 8007757C */ dBgS_GndChk(); - /* 800775F0 */ ~dBgS_GndChk(); -}; - -struct dBgS_AcchCir { - /* 80075EAC */ dBgS_AcchCir(); - /* 80075F40 */ void SetWallR(f32); - /* 80A05E38 */ ~dBgS_AcchCir(); -}; - -struct csXyz { - /* 80A057D4 */ ~csXyz(); - /* 80A05CEC */ csXyz(); -}; - -struct dBgS {}; - -struct dBgS_Acch { - /* 80075F94 */ ~dBgS_Acch(); - /* 800760A0 */ dBgS_Acch(); - /* 80076248 */ void Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*); - /* 80076AAC */ void CrrPos(dBgS&); -}; - -struct cM3dGCyl { - /* 8026F1DC */ void SetC(cXyz const&); - /* 8026F1F8 */ void SetH(f32); - /* 8026F200 */ void SetR(f32); - /* 80A05858 */ ~cM3dGCyl(); -}; - -struct cM3dGCir { - /* 8026EF18 */ ~cM3dGCir(); -}; - -struct cM3dGAab { - /* 80A058A0 */ ~cM3dGAab(); -}; - -struct cCcD_Obj {}; - -struct cCcS { - /* 80264BA8 */ void Set(cCcD_Obj*); -}; - -struct cCcD_GStts { - /* 80A053C8 */ ~cCcD_GStts(); -}; - -struct cBgS_PolyInfo { - /* 802680B0 */ ~cBgS_PolyInfo(); -}; - -struct cBgS_GndChk { - /* 80267C1C */ cBgS_GndChk(); - /* 80267C94 */ ~cBgS_GndChk(); -}; - -struct J3DTexNoAnm { - /* 80A01C40 */ ~J3DTexNoAnm(); - /* 80A01C88 */ J3DTexNoAnm(); - /* 80A05398 */ void calc(u16*) const; -}; - -struct J3DTexMtxAnm { - /* 80A01CAC */ ~J3DTexMtxAnm(); - /* 80A01CE8 */ J3DTexMtxAnm(); -}; - -struct J3DTevKColorAnm { - /* 80A01B98 */ ~J3DTevKColorAnm(); - /* 80A01BD4 */ J3DTevKColorAnm(); -}; - -struct J3DTevColorAnm { - /* 80A01BEC */ ~J3DTevColorAnm(); - /* 80A01C28 */ J3DTevColorAnm(); -}; - -struct J3DMaterialAnm { - /* 8032C320 */ void initialize(); -}; - -struct J3DMatColorAnm { - /* 80A01D00 */ ~J3DMatColorAnm(); - /* 80A01D3C */ J3DMatColorAnm(); -}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); - /* 80A05F74 */ ~J3DFrameCtrl(); -}; - -struct J3DAnmTexPattern { - /* 8032AF50 */ void getTexNo(u16, u16*) const; -}; - // // Forward References: // @@ -520,7 +148,6 @@ extern "C" u8 mCutList__11daNpc_Hoz_c[96]; // External References: // -SECTION_INIT void memset(); extern "C" void __ct__16mDoExt_McaMorfSOFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiP10Z2CreatureUlUl(); extern "C" void stopZelAnime__16mDoExt_McaMorfSOFv(); @@ -632,9 +259,6 @@ extern "C" void __dl__FPv(); extern "C" void init__12J3DFrameCtrlFs(); extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs(); extern "C" void initialize__14J3DMaterialAnmFv(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXMultVec(); -extern "C" void PSVECSquareMag(); extern "C" void __destroy_arr(); extern "C" void __construct_array(); extern "C" void __ptmf_test(); @@ -650,11 +274,7 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void strcmp(); -extern "C" void strlen(); extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */]; -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" extern void* __vt__8dCcD_Cyl[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; extern "C" u8 mCcDCyl__8daNpcT_c[68]; @@ -665,10 +285,7 @@ extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" extern void* __vt__14J3DMaterialAnm[4]; extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; extern "C" extern u8 g_meter2_info[248]; -extern "C" extern u8 j3dSys[284]; -extern "C" extern u32 __float_nan; extern "C" void __register_global_object(); extern "C" void readyStartTimer__16daStartAndGoal_cFv(); extern "C" void isStartCheck__16daStartAndGoal_cFv(); @@ -1380,7 +997,8 @@ SECTION_DATA extern void* __vt__11daNpc_Hoz_c[49] = { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpc_Hoz_c::~daNpc_Hoz_c() { +// asm daNpc_Hoz_c::~daNpc_Hoz_c() { +extern "C" asm void __dt__11daNpc_Hoz_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__11daNpc_Hoz_cFv.s" } @@ -1491,7 +1109,8 @@ asm void daNpc_Hoz_c::CreateHeap() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevKColorAnm::~J3DTevKColorAnm() { +// asm J3DTevKColorAnm::~J3DTevKColorAnm() { +extern "C" asm void __dt__15J3DTevKColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__15J3DTevKColorAnmFv.s" } @@ -1501,7 +1120,8 @@ asm J3DTevKColorAnm::~J3DTevKColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevKColorAnm::J3DTevKColorAnm() { +// asm J3DTevKColorAnm::J3DTevKColorAnm() { +extern "C" asm void __ct__15J3DTevKColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__ct__15J3DTevKColorAnmFv.s" } @@ -1511,7 +1131,8 @@ asm J3DTevKColorAnm::J3DTevKColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevColorAnm::~J3DTevColorAnm() { +// asm J3DTevColorAnm::~J3DTevColorAnm() { +extern "C" asm void __dt__14J3DTevColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__14J3DTevColorAnmFv.s" } @@ -1521,7 +1142,8 @@ asm J3DTevColorAnm::~J3DTevColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevColorAnm::J3DTevColorAnm() { +// asm J3DTevColorAnm::J3DTevColorAnm() { +extern "C" asm void __ct__14J3DTevColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__ct__14J3DTevColorAnmFv.s" } @@ -1531,7 +1153,8 @@ asm J3DTevColorAnm::J3DTevColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexNoAnm::~J3DTexNoAnm() { +// asm J3DTexNoAnm::~J3DTexNoAnm() { +extern "C" asm void __dt__11J3DTexNoAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__11J3DTexNoAnmFv.s" } @@ -1541,7 +1164,8 @@ asm J3DTexNoAnm::~J3DTexNoAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexNoAnm::J3DTexNoAnm() { +// asm J3DTexNoAnm::J3DTexNoAnm() { +extern "C" asm void __ct__11J3DTexNoAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__ct__11J3DTexNoAnmFv.s" } @@ -1551,7 +1175,8 @@ asm J3DTexNoAnm::J3DTexNoAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexMtxAnm::~J3DTexMtxAnm() { +// asm J3DTexMtxAnm::~J3DTexMtxAnm() { +extern "C" asm void __dt__12J3DTexMtxAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__12J3DTexMtxAnmFv.s" } @@ -1561,7 +1186,8 @@ asm J3DTexMtxAnm::~J3DTexMtxAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexMtxAnm::J3DTexMtxAnm() { +// asm J3DTexMtxAnm::J3DTexMtxAnm() { +extern "C" asm void __ct__12J3DTexMtxAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__ct__12J3DTexMtxAnmFv.s" } @@ -1571,7 +1197,8 @@ asm J3DTexMtxAnm::J3DTexMtxAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DMatColorAnm::~J3DMatColorAnm() { +// asm J3DMatColorAnm::~J3DMatColorAnm() { +extern "C" asm void __dt__14J3DMatColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__14J3DMatColorAnmFv.s" } @@ -1581,7 +1208,8 @@ asm J3DMatColorAnm::~J3DMatColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DMatColorAnm::J3DMatColorAnm() { +// asm J3DMatColorAnm::J3DMatColorAnm() { +extern "C" asm void __ct__14J3DMatColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__ct__14J3DMatColorAnmFv.s" } @@ -1668,7 +1296,7 @@ static asm void s_subCanoe(void* param_0, void* param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_Hoz_c::getType() { +asm u8 daNpc_Hoz_c::getType() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/getType__11daNpc_Hoz_cFv.s" } @@ -1734,7 +1362,7 @@ void daNpc_Hoz_c::srchActors() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_Hoz_c::checkChangeEvt() { +asm bool daNpc_Hoz_c::checkChangeEvt() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/checkChangeEvt__11daNpc_Hoz_cFv.s" } @@ -1744,7 +1372,7 @@ asm void daNpc_Hoz_c::checkChangeEvt() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_Hoz_c::evtTalk() { +asm bool daNpc_Hoz_c::evtTalk() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/evtTalk__11daNpc_Hoz_cFv.s" } @@ -1754,7 +1382,7 @@ asm void daNpc_Hoz_c::evtTalk() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_Hoz_c::evtEndProc() { +asm bool daNpc_Hoz_c::evtEndProc() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/evtEndProc__11daNpc_Hoz_cFv.s" } @@ -1764,7 +1392,7 @@ asm void daNpc_Hoz_c::evtEndProc() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_Hoz_c::evtCutProc() { +asm bool daNpc_Hoz_c::evtCutProc() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/evtCutProc__11daNpc_Hoz_cFv.s" } @@ -1785,7 +1413,7 @@ SECTION_DEAD static char const* const stringBase_80A067E8 = "DEFAULT_GETITEM"; #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_Hoz_c::evtProc() { +asm int daNpc_Hoz_c::evtProc() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/evtProc__11daNpc_Hoz_cFv.s" } @@ -1909,7 +1537,7 @@ asm void daNpc_Hoz_c::evtOrder() { #pragma pop /* 80A02F78-80A02F80 001B58 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpc_Hoz_cFv */ -bool daNpc_Hoz_c::drawDbgInfo() { +BOOL daNpc_Hoz_c::drawDbgInfo() { return false; } @@ -2182,7 +1810,8 @@ static bool daNpc_Hoz_IsDelete(void* param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DTexNoAnm::calc(u16* param_0) const { +// asm void J3DTexNoAnm::calc(u16* param_0) const { +extern "C" asm void calc__11J3DTexNoAnmCFPUs() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/calc__11J3DTexNoAnmCFPUs.s" } @@ -2192,7 +1821,8 @@ asm void J3DTexNoAnm::calc(u16* param_0) const { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cCcD_GStts::~cCcD_GStts() { +// asm cCcD_GStts::~cCcD_GStts() { +extern "C" asm void __dt__10cCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__10cCcD_GSttsFv.s" } @@ -2202,7 +1832,8 @@ asm cCcD_GStts::~cCcD_GStts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_c::~daNpcT_c() { +// asm daNpcT_c::~daNpcT_c() { +extern "C" asm void __dt__8daNpcT_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__8daNpcT_cFv.s" } @@ -2212,7 +1843,8 @@ asm daNpcT_c::~daNpcT_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cXyz::~cXyz() { +// asm cXyz::~cXyz() { +extern "C" asm void __dt__4cXyzFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__4cXyzFv.s" } @@ -2222,7 +1854,8 @@ asm cXyz::~cXyz() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm csXyz::~csXyz() { +// asm csXyz::~csXyz() { +extern "C" asm void __dt__5csXyzFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__5csXyzFv.s" } @@ -2232,7 +1865,8 @@ asm csXyz::~csXyz() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_ActorMngr_c::~daNpcT_ActorMngr_c() { +// asm daNpcT_ActorMngr_c::~daNpcT_ActorMngr_c() { +extern "C" asm void __dt__18daNpcT_ActorMngr_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__18daNpcT_ActorMngr_cFv.s" } @@ -2242,7 +1876,8 @@ asm daNpcT_ActorMngr_c::~daNpcT_ActorMngr_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGCyl::~cM3dGCyl() { +// asm cM3dGCyl::~cM3dGCyl() { +extern "C" asm void __dt__8cM3dGCylFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__8cM3dGCylFv.s" } @@ -2252,7 +1887,8 @@ asm cM3dGCyl::~cM3dGCyl() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGAab::~cM3dGAab() { +// asm cM3dGAab::~cM3dGAab() { +extern "C" asm void __dt__8cM3dGAabFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__8cM3dGAabFv.s" } @@ -2264,18 +1900,20 @@ asm cM3dGAab::~cM3dGAab() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_c::daNpcT_c(daNpcT_faceMotionAnmData_c const* param_0, - daNpcT_motionAnmData_c const* param_1, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_2, int param_3, - daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_4, int param_5, - daNpcT_evtData_c const* param_6, char** param_7) { +// asm daNpcT_c::daNpcT_c(daNpcT_faceMotionAnmData_c const* param_0, +// daNpcT_motionAnmData_c const* param_1, +// daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_2, int param_3, +// daNpcT_MotionSeqMngr_c::sequenceStepData_c const* param_4, int param_5, +// daNpcT_evtData_c const* param_6, char** param_7) { +extern "C" asm void __ct__8daNpcT_cFPC26daNpcT_faceMotionAnmData_cPC22daNpcT_motionAnmData_cPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPCQ222daNpcT_MotionSeqMngr_c18sequenceStepData_ciPC16daNpcT_evtData_cPPc() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/func_80A058E8.s" } #pragma pop /* 80A05CEC-80A05CF0 0048CC 0004+00 1/1 0/0 0/0 .text __ct__5csXyzFv */ -csXyz::csXyz() { +// csXyz::csXyz() { +extern "C" void __ct__5csXyzFv() { /* empty function */ } @@ -2283,14 +1921,16 @@ csXyz::csXyz() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_JntAnm_c::~daNpcT_JntAnm_c() { +// asm daNpcT_JntAnm_c::~daNpcT_JntAnm_c() { +extern "C" asm void __dt__15daNpcT_JntAnm_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__15daNpcT_JntAnm_cFv.s" } #pragma pop /* 80A05DEC-80A05DF0 0049CC 0004+00 1/1 0/0 0/0 .text __ct__4cXyzFv */ -cXyz::cXyz() { +// cXyz::cXyz() { +extern "C" void __ct__4cXyzFv() { /* empty function */ } @@ -2298,7 +1938,8 @@ cXyz::cXyz() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcT_MotionSeqMngr_c::~daNpcT_MotionSeqMngr_c() { +// asm daNpcT_MotionSeqMngr_c::~daNpcT_MotionSeqMngr_c() { +extern "C" asm void __dt__22daNpcT_MotionSeqMngr_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__22daNpcT_MotionSeqMngr_cFv.s" } @@ -2308,7 +1949,8 @@ asm daNpcT_MotionSeqMngr_c::~daNpcT_MotionSeqMngr_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_AcchCir::~dBgS_AcchCir() { +// asm dBgS_AcchCir::~dBgS_AcchCir() { +extern "C" asm void __dt__12dBgS_AcchCirFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__12dBgS_AcchCirFv.s" } @@ -2318,7 +1960,8 @@ asm dBgS_AcchCir::~dBgS_AcchCir() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_GStts::~dCcD_GStts() { +// asm dCcD_GStts::~dCcD_GStts() { +extern "C" asm void __dt__10dCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__10dCcD_GSttsFv.s" } @@ -2328,7 +1971,8 @@ asm dCcD_GStts::~dCcD_GStts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_ObjAcch::~dBgS_ObjAcch() { +// asm dBgS_ObjAcch::~dBgS_ObjAcch() { +extern "C" asm void __dt__12dBgS_ObjAcchFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__12dBgS_ObjAcchFv.s" } @@ -2338,7 +1982,8 @@ asm dBgS_ObjAcch::~dBgS_ObjAcch() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DFrameCtrl::~J3DFrameCtrl() { +// asm J3DFrameCtrl::~J3DFrameCtrl() { +extern "C" asm void __dt__12J3DFrameCtrlFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__12J3DFrameCtrlFv.s" } @@ -2348,8 +1993,9 @@ asm J3DFrameCtrl::~J3DFrameCtrl() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpcT_JntAnm_c::setEyeAngleY(cXyz param_0, s16 param_1, int param_2, f32 param_3, - s16 param_4) { +// asm void daNpcT_JntAnm_c::setEyeAngleY(cXyz param_0, s16 param_1, int param_2, f32 param_3, +// s16 param_4) { +extern "C" asm void setEyeAngleY__15daNpcT_JntAnm_cF4cXyzsifs() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/setEyeAngleY__15daNpcT_JntAnm_cF4cXyzsifs.s" } @@ -2359,7 +2005,8 @@ asm void daNpcT_JntAnm_c::setEyeAngleY(cXyz param_0, s16 param_1, int param_2, f #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpcT_JntAnm_c::setEyeAngleX(cXyz param_0, f32 param_1, s16 param_2) { +// asm void daNpcT_JntAnm_c::setEyeAngleX(cXyz param_0, f32 param_1, s16 param_2) { +extern "C" asm void setEyeAngleX__15daNpcT_JntAnm_cF4cXyzfs() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/setEyeAngleX__15daNpcT_JntAnm_cF4cXyzfs.s" } @@ -2443,7 +2090,8 @@ bool daNpcT_c::afterSetMotionAnm(int param_0, int param_1, f32 param_2, int para #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpcT_c::getFaceMotionAnm(daNpcT_faceMotionAnmData_c param_0) { +// asm void daNpcT_c::getFaceMotionAnm(daNpcT_faceMotionAnmData_c param_0) { +extern "C" asm void getFaceMotionAnm__8daNpcT_cF26daNpcT_faceMotionAnmData_c() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/getFaceMotionAnm__8daNpcT_cF26daNpcT_faceMotionAnmData_c.s" } @@ -2454,7 +2102,8 @@ asm void daNpcT_c::getFaceMotionAnm(daNpcT_faceMotionAnmData_c param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpcT_c::getMotionAnm(daNpcT_motionAnmData_c param_0) { +// asm void daNpcT_c::getMotionAnm(daNpcT_motionAnmData_c param_0) { +extern "C" asm void getMotionAnm__8daNpcT_cF22daNpcT_motionAnmData_c() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/getMotionAnm__8daNpcT_cF22daNpcT_motionAnmData_c.s" } @@ -2552,7 +2201,7 @@ s32 daNpc_Hoz_c::getNeckJointNo() { /* 80A065BC-80A065C4 00519C 0008+00 1/0 0/0 0/0 .text getBackboneJointNo__11daNpc_Hoz_cFv */ -bool daNpc_Hoz_c::getBackboneJointNo() { +s32 daNpc_Hoz_c::getBackboneJointNo() { return true; } @@ -2561,7 +2210,7 @@ bool daNpc_Hoz_c::getBackboneJointNo() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_Hoz_c::checkChangeJoint(int param_0) { +asm bool daNpc_Hoz_c::checkChangeJoint(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/checkChangeJoint__11daNpc_Hoz_cFi.s" } @@ -2572,7 +2221,7 @@ asm void daNpc_Hoz_c::checkChangeJoint(int param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_Hoz_c::checkRemoveJoint(int param_0) { +asm bool daNpc_Hoz_c::checkRemoveJoint(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/checkRemoveJoint__11daNpc_Hoz_cFi.s" } @@ -2582,7 +2231,8 @@ asm void daNpc_Hoz_c::checkRemoveJoint(int param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpc_Hoz_Param_c::~daNpc_Hoz_Param_c() { +// asm daNpc_Hoz_Param_c::~daNpc_Hoz_Param_c() { +extern "C" asm void __dt__17daNpc_Hoz_Param_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz/__dt__17daNpc_Hoz_Param_cFv.s" } diff --git a/rel/d/a/npc/d_a_npc_the/d_a_npc_the.cpp b/rel/d/a/npc/d_a_npc_the/d_a_npc_the.cpp index dfacbc35a2b..0d3c12b963e 100644 --- a/rel/d/a/npc/d_a_npc_the/d_a_npc_the.cpp +++ b/rel/d/a/npc/d_a_npc_the/d_a_npc_the.cpp @@ -1,9 +1,11 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_npc_the -// +/** + * d_a_npc_the.cpp + * NPC - Telma + */ #include "rel/d/a/npc/d_a_npc_the/d_a_npc_the.h" +#include "SSystem/SComponent/c_math.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" #include "rel/d/a/tag/d_a_tag_evtarea/d_a_tag_evtarea.h" #include "dol2asm.h" @@ -83,6 +85,11 @@ extern "C" u8 const m__16daNpcThe_Param_c[108]; extern "C" extern char const* const d_a_npc_the__stringBase0; extern "C" void* mEvtCutNameList__10daNpcThe_c[4]; extern "C" u8 mEvtCutList__10daNpcThe_c[48]; +static cPhs__Step daNpcThe_Create(void*); +static int daNpcThe_Delete(void*); +static int daNpcThe_Execute(void*); +static int daNpcThe_IsDelete(void*); +static int daNpcThe_Draw(void*); // // External References: @@ -572,25 +579,30 @@ SECTION_DATA static void* lit_4635[3] = { #pragma pop /* 80AFC534-80AFC554 -00001 0020+00 1/0 0/0 0/0 .data daNpcThe_MethodTable */ -SECTION_DATA static void* daNpcThe_MethodTable[8] = { - (void*)daNpcThe_Create__FPv, - (void*)daNpcThe_Delete__FPv, - (void*)daNpcThe_Execute__FPv, - (void*)daNpcThe_IsDelete__FPv, - (void*)daNpcThe_Draw__FPv, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class daNpcThe_MethodTable = { + (process_method_func)daNpcThe_Create, + (process_method_func)daNpcThe_Delete, + (process_method_func)daNpcThe_Execute, + (process_method_func)daNpcThe_IsDelete, + (process_method_func)daNpcThe_Draw, }; /* 80AFC554-80AFC584 -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_THE */ -SECTION_DATA extern void* g_profile_NPC_THE[12] = { - (void*)0xFFFFFFFD, (void*)0x0007FFFD, - (void*)0x02730000, (void*)&g_fpcLf_Method, - (void*)0x00000E20, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x01740000, (void*)&daNpcThe_MethodTable, - (void*)0x00044108, (void*)0x040E0000, +extern actor_process_profile_definition g_profile_NPC_THE = { + fpcLy_CURRENT_e, + 7, + fpcPi_CURRENT_e, + PROC_NPC_THE, + &g_fpcLf_Method.mBase, + sizeof(daNpcThe_c), + 0, + 0, + &g_fopAc_Method.base, + 0x174, + &daNpcThe_MethodTable, + 0x44108, + fopAc_NPC_e, + fopAc_CULLBOX_CUSTOM_e, }; /* 80AFC584-80AFC590 0003B4 000C+00 2/2 0/0 0/0 .data __vt__11J3DTexNoAnm */ @@ -755,38 +767,38 @@ extern "C" asm void __dt__10daNpcThe_cFv() { /* 80AFBE0C-80AFBE78 000000 006C+00 11/11 0/0 0/0 .rodata m__16daNpcThe_Param_c */ daNpcThe_Param_c::param const daNpcThe_Param_c::m = { - 220.0f, - -3.0f, - 1.0f, - 400.0f, - 255.0f, + 220.0f, // mAttnOffsetY + -3.0f, // mGravity + 1.0f, // mScale + 400.0f, // mShadowDepth + 255.0f, // mCcWeight 200.0f, // mCylH 35.0f, // mWallH 40.0f, // mWallR - 0.0f, - -20.0f, - 10.0f, - -10.0f, - 30.0f, - -20.0f, - 45.0f, - -45.0f, - 0.6f, // mLookatScl - 12.0f, - 3, - 6, - 5, - 6, - 80.0f, - 500.0f, - 300.0f, - -300.0f, + 0.0f, // mBodyUpAngle + -20.0f, // mBodyDownAngle + 10.0f, // mBodyLeftAngle + -10.0f, // mBodyRightAngle + 30.0f, // mHeadUpAngle + -20.0f, // mHeadDownAngle + 45.0f, // mHeadLeftAngle + -45.0f, // mHeadRightAngle + 0.6f, // mNeckAngleScl + 12.0f, // mMorfFrames + 3, // mSpeakDistIdx + 6, // mSpeakAngleIdx + 5, // mTalkDistIdx + 6, // mTalkAngleIdx + 80.0f, // mAttnFovY + 500.0f, // mAttnRadius + 300.0f, // mAttnUpperY + -300.0f, // mAttnLowerY 60, 8, - 0, - 0, - 0, - 0, + 0, // mTestExpression + 0, // mTestMotion + 0, // mTestLookMode + false, // mTest }; int daNpcThe_c::CreateHeap() { @@ -821,10 +833,10 @@ int daNpcThe_c::CreateHeap() { return 0; } - if (!setExpressionAnm(1, false)) { + if (!setExpressionAnm(ANM_F_TALK_A, false)) { return 0; } - setMotionAnm(0xe, 0.0f); + setMotionAnm(ANM_WAIT_A, 0.0f); return 1; } @@ -849,7 +861,7 @@ int daNpcThe_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { case 1: case 3: case 4: - setLookatMtx(joint_no, lookat_joints, daNpcThe_Param_c::m.mLookatScl); + setLookatMtx(joint_no, lookat_joints, daNpcThe_Param_c::m.mNeckAngleScl); break; } @@ -1035,52 +1047,52 @@ bool daNpcThe_c::setExpressionAnm(int i_idx, bool i_modify) { bool res = false; switch (i_idx) { - case 0: + case ANM_NONE: res = setExpressionBtp(0); break; - case 1: + case ANM_F_TALK_A: res = setExpressionBtp(1); break; - case 2: + case ANM_F_SMILE: res = setExpressionBtp(2); break; - case 3: + case ANM_F_CHUCKLE: res = setExpressionBtp(3); break; - case 4: + case ANM_F_TALK_B: res = setExpressionBtp(4); attr = 2; break; - case 5: + case ANM_F_TALK_C: res = setExpressionBtp(5); break; - case 6: + case ANM_F_LAUGH: res = setExpressionBtp(6); break; - case 7: + case ANM_F_TALK_R: res = setExpressionBtp(7); break; - case 8: + case ANM_FH_SMILE: res = setExpressionBtp(8); attr = 2; break; - case 9: + case ANM_FH_CHUCKLE: res = setExpressionBtp(9); attr = 2; break; - case 10: + case ANM_FH_TALK_B: res = setExpressionBtp(10); attr = 2; break; - case 11: + case ANM_FH_TALK_C: res = setExpressionBtp(11); attr = 2; break; - case 12: + case ANM_FH_LAUGH: res = setExpressionBtp(12); attr = 2; break; - case 13: + case ANM_FH_TALK_R: res = setExpressionBtp(13); attr = 2; break; @@ -1209,43 +1221,43 @@ void daNpcThe_c::setMotionAnm(int i_idx, f32 i_morf) { } switch (i_idx) { - case 14: + case ANM_WAIT_A: attr = 2; break; - case 15: + case ANM_WAIT_LOOKING: attr = 2; break; - case 16: + case ANM_TO_WAIT_B: attr = 0; break; - case 17: + case ANM_WAIT_B: attr = 2; break; - case 18: + case ANM_WAIT_LOOKUP: attr = 2; break; - case 19: + case ANM_TALK_R: attr = 0; break; - case 20: + case ANM_TALKING_R: attr = 2; break; - case 21: + case ANM_LOOK_A: attr = 0; break; - case 22: + case ANM_LOOK: attr = 0; break; - case 23: + case ANM_KUNE_WAIT_A: attr = 2; break; - case 24: + case ANM_KUNE_TALK: attr = 0; break; - case 25: + case ANM_KUNE_WAIT_B: attr = 2; break; - case 26: + case ANM_KUNE_SHISHI: attr = 0; break; default: @@ -1851,53 +1863,53 @@ SECTION_DEAD static char const* const stringBase_80AFC1AC = "R_SP116"; #ifdef NONMATCHING // matches with literals BOOL daNpcThe_c::wait(void* param_0) { - switch (mState) { + switch (mMode) { case 0: - field_0x938 = 0; + mAttnChangeTimer = 0; // no break case 1: - if (mType == 2) { - setExpression(8, -1.0f); - setMotion(8, -1.0f, 0); + if (mType == TYPE_KAKARIKO) { + setExpression(EXPR_H_SMILE, -1.0f); + setMotion(MOT_KUNE_WAIT_B, -1.0f, false); } else { - setExpression(13, -1.0f); - setMotion(0, -1.0f, 0); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); } - setLookMode(0); - field_0x96c = 0; - mState = 2; + setLookMode(LOOK_NONE); + mTurnMode = 0; + mMode = 2; break; case 2: - if (mType == 2) { - if (field_0x8f0.y != home.angle.y && step(home.angle.y, -1, -1, 0xf)) { - mState = 1; + if (mType == TYPE_KAKARIKO) { + if (mCurAngle.y != home.angle.y && step(home.angle.y, -1, -1, 0xf)) { + mMode = 1; } - setLookMode(0); + setLookMode(LOOK_NONE); } else { if (!isSneaking()) { bool uvar3 = mActorMngr[0].getActorP() != NULL; - if (chkFindPlayer2(uvar3, field_0x8f0.y)) { + if (chkFindPlayer2(uvar3, mCurAngle.y)) { if (!uvar3) { mActorMngr[0].entry(daPy_getPlayerActorClass()); - field_0x96c = 0; + mTurnMode = 0; } } else if (uvar3) { mActorMngr[0].remove(); - field_0x96c = 0; + mTurnMode = 0; } if (mActorMngr[0].getActorP() != NULL) { - setLookMode(2); + setLookMode(LOOK_PLAYER); } else { - if (field_0x8f0.y != home.angle.y && step(home.angle.y, -1, -1, 0xf)) { - mState = 1; + if (mCurAngle.y != home.angle.y && step(home.angle.y, -1, -1, 0xf)) { + mMode = 1; } - setLookMode(0); + setLookMode(LOOK_NONE); } - if (mType == 0) { + if (mType == TYPE_BAR) { daTag_EvtArea_c* evt_area = static_cast(mActorMngr[2].getActorP()); if (evt_area != NULL) { @@ -1912,21 +1924,21 @@ BOOL daNpcThe_c::wait(void* param_0) { } } } else { - setLookMode(0); + setLookMode(LOOK_NONE); } - if (field_0x8f0.y == home.angle.y) { + if (mCurAngle.y == home.angle.y) { fopAc_ac_c* actor = getAttnActorP(mActorMngr[0].getActorP() != NULL, srchAttnActor1, - daNpcThe_Param_c::m.field_0x54, daNpcThe_Param_c::m.field_0x58, - daNpcThe_Param_c::m.field_0x5c, daNpcThe_Param_c::m.field_0x50, + daNpcThe_Param_c::m.mAttnRadius, daNpcThe_Param_c::m.mAttnUpperY, + daNpcThe_Param_c::m.mAttnLowerY, daNpcThe_Param_c::m.mAttnFovY, shape_angle.y, 120, 1); if (actor != NULL) { mActorMngr[1].entry(actor); - setLookMode(5); + setLookMode(LOOK_ATTN); } } else { - field_0x938 = 0; + mAttnChangeTimer = 0; } } @@ -1974,28 +1986,28 @@ void daNpcThe_c::setExpression(int i_expression, f32 i_morf) { #ifdef NONMATCHING // matches with literals BOOL daNpcThe_c::waitTW(void* param_0) { - switch (mState) { + switch (mMode) { case 0: - field_0x938 = 0; + mAttnChangeTimer = 0; // no break case 1: - if (mType == 2) { - setExpression(8, -1.0f); - setMotion(8, -1.0f, 0); + if (mType == TYPE_KAKARIKO) { + setExpression(EXPR_H_SMILE, -1.0f); + setMotion(MOT_KUNE_WAIT_B, -1.0f, false); } else { - setExpression(11, -1.0f); - setMotion(0, -1.0f, 0); + setExpression(EXPR_H_TALK_C, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); } - field_0x96c = 0; - mState = 2; + mTurnMode = 0; + mMode = 2; break; case 2: - if (field_0x8f0.y != home.angle.y && step(home.angle.y, -1, -1, 0xf)) { - mState = 1; + if (mCurAngle.y != home.angle.y && step(home.angle.y, -1, -1, 0xf)) { + mMode = 1; } - setLookMode(4); + setLookMode(LOOK_ACTOR); break; case 3: @@ -2034,21 +2046,21 @@ SECTION_DEAD static char const* const stringBase_80AFC1B4 = "DEFAULT_GETITEM"; BOOL daNpcThe_c::talk(void* param_0) { BOOL ret = false; BOOL bvar1 = false; - switch (mState) { + switch (mMode) { case 0: case 1: initTalk(mFlowID, NULL); - field_0x938 = 0; - field_0x96c = 0; + mAttnChangeTimer = 0; + mTurnMode = 0; field_0xe1c = false; - mState = 2; + mMode = 2; break; case 2: if (mTwilight || isSneaking()) { bvar1 = true; } else { - if (mType == 2 && + if (mType == TYPE_KAKARIKO && (mpMorf->getAnm() == getTrnsfrmKeyAnmP( l_resNames[l_bckGetParamList[24].arcIdx], l_bckGetParamList[24].fileIdx) || mpMorf->getAnm() == getTrnsfrmKeyAnmP( @@ -2056,18 +2068,18 @@ BOOL daNpcThe_c::talk(void* param_0) { || mpMorf->getAnm() == getTrnsfrmKeyAnmP( l_resNames[l_bckGetParamList[26].arcIdx], l_bckGetParamList[26].fileIdx))) { - setLookMode(0); + setLookMode(LOOK_NONE); } else { - setLookMode(3); + setLookMode(LOOK_PLAYER_TALK); mActorMngr[0].entry(daPy_getPlayerActorClass()); } - if (mType == 2 || field_0x8f0.y == fopAcM_searchPlayerAngleY(this)) { + if (mType == TYPE_KAKARIKO || mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { bvar1 = true; } else if (step(fopAcM_searchPlayerAngleY(this), -1, -1, 0xf)) { - setExpression(13, -1.0f); - setMotion(0, -1.0f, 0); - field_0x96c = 0; + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + mTurnMode = 0; } } @@ -2093,7 +2105,7 @@ BOOL daNpcThe_c::talk(void* param_0) { .getEventIdx(this, "DEFAULT_GETITEM", 0xff); dComIfGp_getEvent().reset(this); fopAcM_orderChangeEventId(this, event_id, 1, 0xffff); - field_0x9ec = 1; + field_0x9ec = true; } } ret = true; @@ -2102,7 +2114,7 @@ BOOL daNpcThe_c::talk(void* param_0) { } if (ret) { - mState = 3; + mMode = 3; if (mFlowID == 0x430) { if (!field_0xe1d) { field_0xe1d = true; @@ -2111,10 +2123,10 @@ BOOL daNpcThe_c::talk(void* param_0) { mFlowID = home.angle.x; } } - if (field_0x9ec == 0) { + if (!field_0x9ec) { dComIfGp_event_reset(); } - field_0x9ec = 0; + field_0x9ec = false; } // no break @@ -2139,24 +2151,24 @@ asm BOOL daNpcThe_c::talk(void* param_0) { #ifdef NONMATCHING // matches with literals BOOL daNpcThe_c::test(void* param_0) { - switch (mState) { + switch (mMode) { case 0: - field_0x938 = 0; + mAttnChangeTimer = 0; break; case 1: speedF = 0.0f; speed.setall(0.0f); - field_0x96c = 0; - mState = 2; + mTurnMode = 0; + mMode = 2; // no break case 2: attention_info.flags = 0; if (mExpression != daNpcThe_Param_c::m.mTestExpression) { - setExpression(daNpcThe_Param_c::m.mTestExpression, daNpcThe_Param_c::m.field_0x44); + setExpression(daNpcThe_Param_c::m.mTestExpression, daNpcThe_Param_c::m.mMorfFrames); } - setMotion(daNpcThe_Param_c::m.mTestMotion, daNpcThe_Param_c::m.field_0x44, false); + setMotion(daNpcThe_Param_c::m.mTestMotion, daNpcThe_Param_c::m.mMorfFrames, false); setLookMode(daNpcThe_Param_c::m.mTestLookMode); break; @@ -2197,7 +2209,7 @@ BOOL daNpcThe_c::EvCut_Introduction(int i_cutIdx) { case '0004': case '0005': initTalk(mFlowID, NULL); - setLookMode(2); + setLookMode(LOOK_PLAYER); } } @@ -2233,8 +2245,8 @@ cPhs__Step daNpcThe_c::create() { mFlowID = -1; } - if (mType == 2 && (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[68]) - || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[78]))) { + if (mType == TYPE_KAKARIKO && (!dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[68]) + || dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[78]))) { return cPhs_ERROR_e; } @@ -2254,13 +2266,13 @@ cPhs__Step daNpcThe_c::create() { if (resources_loaded == i) { u32 heap_size = 0; switch (mType) { - case 0: + case TYPE_BAR: heap_size = 0x4d70; break; - case 1: + case TYPE_1: heap_size = 0x4cc0; break; - case 2: + case TYPE_KAKARIKO: heap_size = 0x4d80; break; } @@ -2281,15 +2293,15 @@ cPhs__Step daNpcThe_c::create() { mAcch.SetRoofNone(); mAcch.SetWaterNone(); mAcch.CrrPos(dComIfG_Bgsp()); - mCcStts.Init(daNpcThe_Param_c::m.field_0x10, 0, this); + mCcStts.Init(daNpcThe_Param_c::m.mCcWeight, 0, this); mColCyl.Set(mCcDCyl); mColCyl.SetStts(&mCcStts); mColCyl.SetTgType(0); mColCyl.SetTgSPrm(0); mColCyl.SetH(daNpcThe_Param_c::m.mCylH); mColCyl.SetR(daNpcThe_Param_c::m.mWallR); - field_0xa44 = mAcch.m_gnd; - field_0x980 = mAcch.GetGroundH(); + mGndChk = mAcch.m_gnd; + mGroundH = mAcch.GetGroundH(); setEnvTevColor(); setRoomNo(); @@ -2319,7 +2331,7 @@ void daNpcThe_c::reset() { field_0xe0c = 0; field_0xe10 = 0; mLookMode = -1; - mState = 0; + mMode = 0; field_0xe1c = false; mItemID = -1; current.pos = home.pos; @@ -2327,8 +2339,8 @@ void daNpcThe_c::reset() { current.angle.set(0, home.angle.y, 0); old.angle = current.angle; shape_angle = current.angle; - field_0x8f0 = current.angle; - field_0x8f6 = field_0x8f0; + mCurAngle = current.angle; + mOldAngle = mCurAngle; speedF = 0.0f; speed.setall(0.0f); field_0x9ee = 1; @@ -2361,7 +2373,7 @@ int daNpcThe_c::Draw() { mpMorf->getModel()->getModelData()->getMaterialNodePointer(2)->setMaterialAnm(mpMatAnm); ActionFn action_test = &test; int is_test = mpActionFn == action_test; - return draw(is_test, 0, daNpcThe_Param_c::m.field_0x0c, NULL, 0); + return draw(is_test, false, daNpcThe_Param_c::m.mShadowDepth, NULL, false); } #endif @@ -2421,8 +2433,8 @@ void daNpcThe_c::setParam() { } } - int dist1 = mType == 2 ? (s16)1 : daNpcThe_Param_c::m.field_0x4a; - int dist2 = mType == 2 ? (s16)1 : daNpcThe_Param_c::m.field_0x4e; + int speak_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : daNpcThe_Param_c::m.mSpeakAngleIdx; + int talk_angle_idx = mType == TYPE_KAKARIKO ? (s16)1 : daNpcThe_Param_c::m.mTalkAngleIdx; attention_info.flags = 0xa; if (isSneaking()) { attention_info.field_0x0[0] = 0x4e; @@ -2431,13 +2443,17 @@ void daNpcThe_c::setParam() { attention_info.flags |= 0x800000; } else { if (!strcmp(dComIfGp_getStartStageName(), "R_SP116")) { - attention_info.field_0x0[0] = getDistTableIdx(daNpcThe_Param_c::m.field_0x4c, dist2); + attention_info.field_0x0[0] = getDistTableIdx(daNpcThe_Param_c::m.mTalkDistIdx, + talk_angle_idx); attention_info.field_0x0[1] = attention_info.field_0x0[0]; - attention_info.field_0x0[3] = getDistTableIdx(daNpcThe_Param_c::m.field_0x48 + 1, dist1); + attention_info.field_0x0[3] = getDistTableIdx(daNpcThe_Param_c::m.mSpeakDistIdx + 1, + speak_angle_idx); } else { - attention_info.field_0x0[0] = getDistTableIdx(daNpcThe_Param_c::m.field_0x4c, dist2); + attention_info.field_0x0[0] = getDistTableIdx(daNpcThe_Param_c::m.mTalkDistIdx, + talk_angle_idx); attention_info.field_0x0[1] = attention_info.field_0x0[0]; - attention_info.field_0x0[3] = getDistTableIdx(daNpcThe_Param_c::m.field_0x48, dist1); + attention_info.field_0x0[3] = getDistTableIdx(daNpcThe_Param_c::m.mSpeakDistIdx, + speak_angle_idx); } } @@ -2481,7 +2497,8 @@ BOOL daNpcThe_c::main() { } if (!daNpcThe_Param_c::m.mTest - && (dComIfGp_event_runCheck() == false || (field_0x9ed && dComIfGp_getEvent().isOrderOK()))) + && (dComIfGp_event_runCheck() == false + || (mOrderNewEvt && dComIfGp_getEvent().isOrderOK()))) { if (mOrderEvtNo != 0 && l_resNames[l_evtGetParamList[mOrderEvtNo]] != NULL) { eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo]]); @@ -2511,33 +2528,33 @@ asm BOOL daNpcThe_c::main() { #ifdef NONMATCHING // matches with literals void daNpcThe_c::playMotion() { - daNpcF_anmPlayData dat0 = {14, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat0[1] = {&dat0}; - daNpcF_anmPlayData dat1a = {21, daNpcThe_Param_c::m.field_0x44, 0}; - daNpcF_anmPlayData dat1b = {15, 0.0f, 0}; + daNpcF_anmPlayData dat1a = {ANM_LOOK_A, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat1b = {ANM_WAIT_LOOKING, 0.0f, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1a, &dat1b}; - daNpcF_anmPlayData dat2a = {16, daNpcThe_Param_c::m.field_0x44, 0}; - daNpcF_anmPlayData dat2b = {17, 0.0f, 0}; + daNpcF_anmPlayData dat2a = {ANM_TO_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat2b = {ANM_WAIT_B, 0.0f, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; - daNpcF_anmPlayData dat3 = {18, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat3 = {ANM_WAIT_LOOKUP, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat3[1] = {&dat3}; - daNpcF_anmPlayData dat4a = {24, daNpcThe_Param_c::m.field_0x44, 0}; - daNpcF_anmPlayData dat4b = {25, 0.0f, 0}; + daNpcF_anmPlayData dat4a = {ANM_KUNE_TALK, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat4b = {ANM_KUNE_WAIT_B, 0.0f, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4a, &dat4b}; - daNpcF_anmPlayData dat5 = {23, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat5 = {ANM_KUNE_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat5[1] = {&dat5}; - daNpcF_anmPlayData dat6a = {26, daNpcThe_Param_c::m.field_0x44, 0}; - daNpcF_anmPlayData dat6b = {23, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat6a = {ANM_KUNE_SHISHI, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat6b = {ANM_KUNE_WAIT_A, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; - daNpcF_anmPlayData dat7 = {17, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat7 = {ANM_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat7[1] = {&dat7}; - daNpcF_anmPlayData dat8 = {25, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat8 = {ANM_KUNE_WAIT_B, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat8[1] = {&dat8}; - daNpcF_anmPlayData dat9a = {19, daNpcThe_Param_c::m.field_0x44, 0}; - daNpcF_anmPlayData dat9b = {20, 0.0f, 0}; + daNpcF_anmPlayData dat9a = {ANM_TALK_R, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat9b = {ANM_TALKING_R, 0.0f, 0}; daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; - daNpcF_anmPlayData dat10a = {22, daNpcThe_Param_c::m.field_0x44, 0}; - daNpcF_anmPlayData dat10b = {15, 0.0f, 0}; + daNpcF_anmPlayData dat10a = {ANM_LOOK, daNpcThe_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData dat10b = {ANM_WAIT_LOOKING, 0.0f, 0}; daNpcF_anmPlayData* pDat10[2] = {&dat10a, &dat10b}; daNpcF_anmPlayData** ppDat[11] = { pDat0, @@ -2571,33 +2588,33 @@ asm void daNpcThe_c::playMotion() { #ifdef NONMATCHING // matches with literals void daNpcThe_c::playExpression() { - daNpcF_anmPlayData dat0 = {1, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat0 = {ANM_F_TALK_A, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat0[2] = {&dat0, NULL}; - daNpcF_anmPlayData dat1 = {2, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat1 = {ANM_F_SMILE, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat1[2] = {&dat1, NULL}; - daNpcF_anmPlayData dat2 = {3, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat2 = {ANM_F_CHUCKLE, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat2[2] = {&dat2, NULL}; - daNpcF_anmPlayData dat3 = {4, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat3 = {ANM_F_TALK_B, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat3[2] = {&dat3, NULL}; - daNpcF_anmPlayData dat4 = {5, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat4 = {ANM_F_TALK_C, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat4[2] = {&dat4, NULL}; - daNpcF_anmPlayData dat5 = {6, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat5 = {ANM_F_LAUGH, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat5[2] = {&dat5, NULL}; - daNpcF_anmPlayData dat6 = {7, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat6 = {ANM_F_TALK_R, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat6[2] = {&dat6, NULL}; - daNpcF_anmPlayData dat7 = {13, 0.0f, 0}; + daNpcF_anmPlayData dat7 = {ANM_FH_TALK_R, 0.0f, 0}; daNpcF_anmPlayData* pDat7[2] = {&dat7, NULL}; - daNpcF_anmPlayData dat8 = {8, 0.0f, 0}; + daNpcF_anmPlayData dat8 = {ANM_FH_SMILE, 0.0f, 0}; daNpcF_anmPlayData* pDat8[2] = {&dat8, NULL}; - daNpcF_anmPlayData dat9 = {9, 0.0f, 0}; + daNpcF_anmPlayData dat9 = {ANM_FH_CHUCKLE, 0.0f, 0}; daNpcF_anmPlayData* pDat9[2] = {&dat9, NULL}; - daNpcF_anmPlayData dat10 = {10, 0.0f, 0}; + daNpcF_anmPlayData dat10 = {ANM_FH_TALK_B, 0.0f, 0}; daNpcF_anmPlayData* pDat10[2] = {&dat10, NULL}; - daNpcF_anmPlayData dat11 = {11, 0.0f, 0}; + daNpcF_anmPlayData dat11 = {ANM_FH_TALK_C, 0.0f, 0}; daNpcF_anmPlayData* pDat11[2] = {&dat11, NULL}; - daNpcF_anmPlayData dat12 = {12, 0.0f, 0}; + daNpcF_anmPlayData dat12 = {ANM_FH_LAUGH, 0.0f, 0}; daNpcF_anmPlayData* pDat12[2] = {&dat12, NULL}; - daNpcF_anmPlayData dat13 = {0, daNpcThe_Param_c::m.field_0x44, 0}; + daNpcF_anmPlayData dat13 = {ANM_NONE, daNpcThe_Param_c::m.mMorfFrames, 0}; daNpcF_anmPlayData* pDat13[1] = {&dat13}; daNpcF_anmPlayData** ppDat[14] = { pDat0, @@ -2632,26 +2649,26 @@ asm void daNpcThe_c::playExpression() { void daNpcThe_c::setExpressionTalkAfter() { switch (mExpression) { - case 1: - setExpression(8, -1.0f); + case EXPR_SMILE: + setExpression(EXPR_H_SMILE, -1.0f); break; - case 2: - setExpression(9, -1.0f); + case EXPR_CHUCKLE: + setExpression(EXPR_H_CHUCKLE, -1.0f); break; - case 3: - setExpression(10, -1.0f); + case EXPR_TALK_B: + setExpression(EXPR_H_TALK_B, -1.0f); break; - case 4: - setExpression(11, -1.0f); + case EXPR_TALK_C: + setExpression(EXPR_H_TALK_C, -1.0f); break; - case 5: - setExpression(12, -1.0f); + case EXPR_LAUGH: + setExpression(EXPR_H_LAUGH, -1.0f); break; - case 6: - setExpression(7, -1.0f); + case EXPR_TALK_R: + setExpression(EXPR_H_TALK_R, -1.0f); break; default: - setExpression(13, -1.0f); + setExpression(EXPR_NONE, -1.0f); break; } } @@ -2741,21 +2758,21 @@ BOOL daNpcThe_c::doEvent() { } } int expression, motion; - int tmp950 = field_0x950; + int prev_msg_timer = mMsgTimer; if (ctrlMsgAnm(expression, motion, this, 0)) { if (!field_0x9eb) { setExpression(expression, -1.0f); setMotion(motion, -1.0f, false); } } else { - if (tmp950 != 0 && !field_0x9eb) { + if (prev_msg_timer != 0 && !field_0x9eb) { setExpressionTalkAfter(); } } } else { - field_0x950 = 0; + mMsgTimer = 0; if (mCutIndex != -1) { - mState = 1; + mMode = 1; mCutIndex = -1; } } @@ -2847,9 +2864,9 @@ COMPILER_STRIP_GATE(0x80AFC144, &lit_5401); #ifdef NONMATCHING // matches with literals void daNpcThe_c::setAttnPos() { - if (mLookMode == 1) { + if (mLookMode == LOOK_RESET) { for (int i = 0; i < 3; i++) { - field_0x91a[i].setall(0); + mLookatAngle[i].setall(0); } } @@ -2868,7 +2885,7 @@ void daNpcThe_c::setAttnPos() { cXyz* attn_pos = mLookat.getAttnPos(); if (attn_pos != NULL) { cXyz vec2 = *attn_pos - eyePos; - mEyeAngle.y = -(field_0x91a[2].y + field_0x8f0.y); + mEyeAngle.y = -(mLookatAngle[2].y + mCurAngle.y); mEyeAngle.y += cM_atan2s(vec2.x, vec2.z); mEyeAngle.x = mHeadAngle.x - cM_atan2s(vec2.y, vec2.absXZ()); } else { @@ -2877,7 +2894,7 @@ void daNpcThe_c::setAttnPos() { } attention_info.position.set(current.pos.x, - current.pos.y + daNpcThe_Param_c::m.field_0x00, + current.pos.y + daNpcThe_Param_c::m.mAttnOffsetY, current.pos.z); if (!mHide) { @@ -2924,43 +2941,44 @@ COMPILER_STRIP_GATE(0x80AFC154, &lit_5451); void daNpcThe_c::lookat() { fopAc_ac_c* actor = NULL; J3DModel* model = mpMorf->getModel(); - int ivar5 = 0; - f32 fvar1 = daNpcThe_Param_c::m.field_0x24; - f32 fvar2 = daNpcThe_Param_c::m.field_0x20; - f32 fvar3 = daNpcThe_Param_c::m.field_0x2c; - f32 fvar4 = daNpcThe_Param_c::m.field_0x28; - f32 fvar5 = daNpcThe_Param_c::m.field_0x34; - f32 fvar6 = daNpcThe_Param_c::m.field_0x30; - f32 fvar7 = daNpcThe_Param_c::m.field_0x3c; - f32 fvar8 = daNpcThe_Param_c::m.field_0x38; - s16 ivar1 = field_0x8f0.y - field_0x8f6.y; - cXyz pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; - csXyz* local_d4[3] = {&field_0x91a[0], &field_0x91a[1], &field_0x91a[2]}; + BOOL snap = false; + f32 body_down_angle = daNpcThe_Param_c::m.mBodyDownAngle; + f32 body_up_angle = daNpcThe_Param_c::m.mBodyUpAngle; + f32 body_right_angle = daNpcThe_Param_c::m.mBodyRightAngle; + f32 body_left_angle = daNpcThe_Param_c::m.mBodyLeftAngle; + f32 head_down_angle = daNpcThe_Param_c::m.mHeadDownAngle; + f32 head_up_angle = daNpcThe_Param_c::m.mHeadUpAngle; + f32 head_right_angle = daNpcThe_Param_c::m.mHeadRightAngle; + f32 head_left_angle = daNpcThe_Param_c::m.mHeadLeftAngle; + s16 angle_delta = mCurAngle.y - mOldAngle.y; + cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; + csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; switch (mLookMode) { - case 1: - ivar5 = 1; + case LOOK_RESET: + snap = true; break; - case 3: - fvar7 = -80.0f; - fvar8 = 80.0f; + case LOOK_PLAYER_TALK: + head_right_angle = -80.0f; + head_left_angle = 80.0f; // no break - case 2: + case LOOK_PLAYER: actor = daPy_getPlayerActorClass(); break; - case 4: + case LOOK_ACTOR: actor = fopAcM_SearchByName(PROC_NPC_ZRC); break; - case 5: + case LOOK_ATTN: break; } if (actor != NULL) { - if (mLookMode == 4) { + if (mLookMode == LOOK_ACTOR) { mLookPos = actor->eyePos; } else { mLookPos = actor->attention_info.position; - if (mLookMode != 2 && mLookMode != 3 && mLookMode != 5) { + if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK && mLookMode != LOOK_ATTN) + { mLookPos.y -= 40.0f; } } @@ -2969,9 +2987,11 @@ void daNpcThe_c::lookat() { mLookat.setAttnPos(NULL); } - mLookat.setParam(fvar1, fvar2, fvar3, fvar4, 0.0f, 0.0f, 0.0f, 0.0f, - fvar5, fvar6, fvar7, fvar8, field_0x8f0.y, pos); - mLookat.calc(this, model->getBaseTRMtx(), local_d4, ivar5, ivar1, 0); + mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle, + 0.0f, 0.0f, 0.0f, 0.0f, + head_down_angle, head_up_angle, head_right_angle, head_left_angle, + mCurAngle.y, lookat_pos); + mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, 0); } #else #pragma push diff --git a/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.cpp b/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.cpp index a7ca5a1a6c9..fc672f093a2 100644 --- a/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.cpp +++ b/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.cpp @@ -1,553 +1,22 @@ -// -// Generated By: dol2asm -// Translation Unit: d_a_npc_zra -// +/** + * d_a_npc_zra.cpp + * NPC - Zora + */ #include "rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.h" +#include "SSystem/SComponent/c_math.h" +#include "JSystem/JKernel/JKRHeap.h" +#include "JSystem/J3DGraphBase/J3DMaterial.h" +#include "f_op/f_op_actor_mng.h" +#include "f_op/f_op_kankyo_mng.h" +#include "d/com/d_com_inf_game.h" +#include "d/meter/d_meter2_info.h" +#include "d/d_procname.h" +#include "rel/d/a/d_a_canoe/d_a_canoe.h" +#include "rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.h" +#include "rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.h" #include "dol2asm.h" -// -// Types: -// - -struct request_of_phase_process_class {}; - -struct csXyz { - /* 80B7EF80 */ csXyz(); - /* 802673F4 */ csXyz(s16, s16, s16); - /* 80B7EF44 */ ~csXyz(); -}; - -struct Vec {}; - -struct cXyz { - /* 80266B34 */ void operator-(Vec const&) const; - /* 80266EF4 */ void normalize(); - /* 80B78730 */ ~cXyz(); - /* 80B7EF84 */ cXyz(); -}; - -struct mDoMtx_stack_c { - /* 8000CCC8 */ void push(); - /* 8000CD14 */ void pop(); - /* 8000CD64 */ void transS(cXyz const&); - /* 8000CDD4 */ void transM(cXyz const&); - /* 8000CE70 */ void scaleM(cXyz const&); - /* 8000CF0C */ void ZXYrotS(csXyz const&); - /* 8000CF44 */ void ZXYrotM(csXyz const&); - - static u8 now[48]; -}; - -struct mDoExt_morf_c { - /* 8000FB7C */ void setMorf(f32); -}; - -struct J3DAnmTextureSRTKey {}; - -struct J3DAnmTexPattern { - /* 8032AF50 */ void getTexNo(u16, u16*) const; -}; - -struct J3DAnmTevRegKey {}; - -struct J3DAnmColor {}; - -struct J3DMaterialTable { - /* 8032F64C */ void removeMatColorAnimator(J3DAnmColor*); - /* 8032F6F8 */ void removeTexNoAnimator(J3DAnmTexPattern*); - /* 8032F7B4 */ void removeTexMtxAnimator(J3DAnmTextureSRTKey*); - /* 8032F880 */ void removeTevRegAnimator(J3DAnmTevRegKey*); -}; - -struct mDoExt_btpAnm { - /* 8000D5E8 */ void entry(J3DMaterialTable*, s16); -}; - -struct mDoExt_btkAnm { - /* 8000D63C */ void init(J3DMaterialTable*, J3DAnmTextureSRTKey*, int, int, f32, s16, s16); - /* 8000D6D8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_brkAnm { - /* 8000D7A8 */ void entry(J3DMaterialTable*, f32); -}; - -struct mDoExt_bpkAnm { - /* 8000D47C */ void init(J3DMaterialTable*, J3DAnmColor*, int, int, f32, s16, s16); - /* 8000D518 */ void entry(J3DMaterialTable*, f32); -}; - -struct J3DAnmTransform {}; - -struct mDoExt_bckAnm { - /* 8000D990 */ void changeBckOnly(J3DAnmTransform*); -}; - -struct mDoExt_baseAnm { - /* 8000D428 */ void play(); -}; - -struct mDoExt_McaMorfCallBack2_c {}; - -struct mDoExt_McaMorfCallBack1_c {}; - -struct J3DModelData {}; - -struct Z2Creature { - /* 802C03C8 */ Z2Creature(); - /* 802C0420 */ ~Z2Creature(); - /* 802C0530 */ void init(Vec*, Vec*, u8, u8); -}; - -struct mDoExt_McaMorfSO { - /* 800107D0 */ mDoExt_McaMorfSO(J3DModelData*, mDoExt_McaMorfCallBack1_c*, - mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, - int, Z2Creature*, u32, u32); - /* 800111C0 */ void entryDL(); - /* 800111EC */ void modelCalc(); - /* 80011310 */ void stopZelAnime(); -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct daObjZraMark_c { - /* 80D43314 */ void entryPointer(fopAc_ac_c*); -}; - -struct J3DModel {}; - -struct J3DJoint {}; - -struct daNpc_zrA_c { - /* 80B7956C */ daNpc_zrA_c(); - /* 80B79828 */ ~daNpc_zrA_c(); - /* 80B79B58 */ void create(); - /* 80B79F38 */ void CreateHeap(); - /* 80B7A51C */ void Delete(); - /* 80B7A550 */ void Execute(); - /* 80B7A570 */ void Draw(); - /* 80B7A864 */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 80B7AB9C */ void createHeapCallBack(fopAc_ac_c*); - /* 80B7ABBC */ void ctrlJointCallBack(J3DJoint*, int); - /* 80B7AC08 */ void setParam(); - /* 80B7ADF0 */ void main(); - /* 80B7B0A4 */ void ctrlBtk(); - /* 80B7B1DC */ void setAttnPos(); - /* 80B7B91C */ void setMtx(); - /* 80B7B9D4 */ void setExpressionAnm(int, bool); - /* 80B7BD60 */ void setExpressionBtp(int); - /* 80B7BE74 */ void setExpression(int, f32); - /* 80B7BEA0 */ void setMotionAnm(int, f32); - /* 80B7C070 */ void setMotionWaterAnm(int); - /* 80B7C308 */ void setMotion(int, f32, int); - /* 80B7C34C */ bool drawDbgInfo(); - /* 80B7C354 */ void drawOtherMdls(); - /* 80B7C44C */ void getTypeFromArgument(); - /* 80B7C4B4 */ void getSoldierTypeFromParam(); - /* 80B7C500 */ void getGameModeFromParam(); - /* 80B7C524 */ void getActionTypeFromParam(); - /* 80B7C5E4 */ void getMultiModeFromParam(); - /* 80B7C614 */ void getMultiNoFromParam(); - /* 80B7C644 */ void isDelete(); - /* 80B7C71C */ void reset(); - /* 80B7CA8C */ void playExpression(); - /* 80B7D0FC */ void playMotion(); - /* 80B7DAF4 */ void chkAction(int (daNpc_zrA_c::*)(void*)); - /* 80B7DB20 */ void setAction(int (daNpc_zrA_c::*)(void*)); - /* 80B7DBC8 */ void selectAction(); - /* 80B7DF40 */ void doEvent(); - /* 80B7E668 */ void setSkipZev(int, int); - /* 80B7E6F4 */ void setLookMode(int); - /* 80B7E718 */ void lookat(); - /* 80B7E9E0 */ void chkFindPlayer(); - /* 80B7EA90 */ void setExpressionTalkAfter(); - /* 80B7EBA0 */ void setPrtcl(); - /* 80B7EC54 */ void test(void*); - /* 80B7F8C4 */ void wait(void*); - /* 80B7FD10 */ void walkCalc(); - /* 80B7FE18 */ void waitCalc(); - /* 80B800A4 */ void waitSpa(void*); - /* 80B80228 */ void waitLake(void*); - /* 80B80418 */ void talk(void*); - /* 80B806FC */ void ECut_talkMulti(int); - /* 80B80860 */ void swim(void*); - /* 80B80A94 */ void railSwim(); - /* 80B81788 */ void waitSwim(); - /* 80B81918 */ void turnSwimInit(); - /* 80B81A18 */ void turnSwim(); - /* 80B81CC8 */ void turnSwimCheck(); - /* 80B81D68 */ void evasionCalc(cXyz&, csXyz&); - /* 80B81FB8 */ void calcBank(s16, s16, s16&, s16&); - /* 80B8204C */ void calcWaistAngle(); - /* 80B82238 */ void calcWaistAngleInit(); - /* 80B822CC */ void calcWaistAngleStop(); - /* 80B822D8 */ void calcWaistAngleCheck(); - /* 80B82300 */ void calcModulation(); - /* 80B8247C */ void resetModulation(); - /* 80B824F4 */ void calcSwimAngle(csXyz&, csXyz&, s16, s16); - /* 80B82584 */ void calcSwimPos(cXyz&); - /* 80B825FC */ void calcWaitSwim(int); - /* 80B826F0 */ void ECut_talkSwim(int); - /* 80B82C54 */ void waitWaterfall(void*); - /* 80B82E88 */ void swimWaterfall(void*); - /* 80B833C8 */ void diveWaterfall(void*); - /* 80B83548 */ void talkSwim(void*); - /* 80B837E8 */ void ECut_carryWaterfall(int); - /* 80B83D08 */ void ECut_carryWaterfallSkip(int); - /* 80B83FA4 */ void diveCalc(s16, s16, int); - /* 80B84298 */ void waitRiverDescend(void*); - /* 80B84B74 */ void swimRiverDescend(void*); - /* 80B85B14 */ void swimRiverDescend2(void*); - /* 80B8601C */ void diveRiverDescend(void*); - /* 80B86440 */ void swimGoalRiverDescend(void*); - /* 80B86A2C */ void returnRiverDescend(void*); - /* 80B86D9C */ void moveRiverPosCalc(cXyz&); - /* 80B86E78 */ void createRuppi(); - /* 80B86FAC */ void ECut_beforeBlastzrR(int); - /* 80B872F0 */ void ECut_afterBlastzrR(int); - /* 80B87510 */ void ECut_thanksBlast(int); - /* 80B88B04 */ void ECut_resultAnnounce(int); - /* 80B8A064 */ void calcCanoeMove(int); - /* 80B8A43C */ void tobiSearch(void*); - /* 80B8A54C */ void tobiWait(void*); - /* 80B8A648 */ void tobikomi1(void*); - /* 80B8A7F8 */ void tobikomi2(void*); - /* 80B8AA1C */ void tobikomi3(void*); - /* 80B8AB78 */ void tobiJump(void*); - /* 80B8B1FC */ void tobiEnd(void*); - /* 80B8B420 */ void waitSearch(void*); - /* 80B8B530 */ void ECut_searchPrince1(int); - /* 80B8BCE8 */ void ECut_searchPrince2(int); - /* 80B8C3E8 */ void adjustShapeAngle(); - - static void* mEvtCutNameList[11]; - static u8 mEvtCutList[132]; -}; - -struct daNpc_zrA_Path_c { - /* 80B7850C */ void getDstPosDst2(cXyz, cXyz&); - /* 80B7876C */ void setNextIdxDst(cXyz); - /* 80B788F8 */ void chkPassedDstXZ(cXyz); - /* 80B78A60 */ void getDstPosDstXZ(cXyz, cXyz&); - /* 80B78CA0 */ void chkPassedChase(u16, cXyz); - /* 80B78CFC */ void getDstPosChase(u16, cXyz, cXyz&); - /* 80B78E08 */ void chkPassDst(u16, cXyz); - /* 80B7EF88 */ ~daNpc_zrA_Path_c(); -}; - -struct daNpc_zrA_Param_c { - /* 80B8C3EC */ ~daNpc_zrA_Param_c(); - - static u8 const m[176]; -}; - -struct daNpc_Hoz_c { - /* 80A01F54 */ void getType(); -}; - -struct dCcD_GObjInf { - /* 80083A28 */ dCcD_GObjInf(); - /* 800840E4 */ ~dCcD_GObjInf(); - /* 80084460 */ void ChkTgHit(); -}; - -struct J3DAnmTransformKey {}; - -struct daNpcF_c { - struct daNpcF_anmPlayData {}; - - /* 80152014 */ void execute(); - /* 80152614 */ void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); - /* 80152654 */ void srchAttnActor1(void*, void*); - /* 801527FC */ void setMtx2(); - /* 801528C8 */ void initialize(); - /* 80152B2C */ void getTrnsfrmKeyAnmP(char*, int); - /* 80152B68 */ void getTexPtrnAnmP(char*, int); - /* 80152BA4 */ void getTexSRTKeyAnmP(char*, int); - /* 80152BE0 */ void getTevRegKeyAnmP(char*, int); - /* 80152C1C */ void setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int); - /* 80152C80 */ void setBckAnm(J3DAnmTransform*, f32, int, int, int, bool); - /* 80152CC4 */ void setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int); - /* 80152D04 */ void setBtkAnm(J3DAnmTextureSRTKey*, J3DModelData*, f32, int); - /* 80152D44 */ void setBrkAnm(J3DAnmTevRegKey*, J3DModelData*, f32, int); - /* 80152D84 */ void setEnvTevColor(); - /* 80152DE0 */ void setRoomNo(); - /* 80153150 */ void playExpressionAnm(daNpcF_c::daNpcF_anmPlayData***); - /* 80153264 */ void playMotionAnm(daNpcF_c::daNpcF_anmPlayData***); - /* 8015337C */ void setLookatMtx(int, int*, f32); - /* 80153718 */ void ctrlMsgAnm(int&, int&, fopAc_ac_c*, int); - /* 8015387C */ void orderEvent(int, char*, u16, u16, u8, u16); - /* 80153954 */ void changeEvent(char*, char*, u16, u16); - /* 80153BDC */ void chkActorInAttnArea(fopAc_ac_c*, fopAc_ac_c*, int); - /* 80153D1C */ void initTalk(int, fopAc_ac_c**); - /* 80153D84 */ void talkProc(int*, int, fopAc_ac_c**); - /* 801540A4 */ void step(s16, int, int, int); - /* 80154250 */ void setAngle(s16); - /* 80154278 */ void getDistTableIdx(int, int); - /* 8015436C */ void getAttnActorP(int, void* (*)(void*, void*), f32, f32, f32, f32, s16, int, - int); - /* 801549E0 */ void chkFindPlayer2(int, s16); - /* 80B7F0E8 */ ~daNpcF_c(); - /* 80B7F334 */ daNpcF_c(); - /* 80B7F660 */ void setCollisions(); - - static u8 mCcDCyl[68]; -}; - -struct dPath {}; - -struct daNpcF_SPCurve_c { - /* 80150870 */ void initialize(dPath*, int); - /* 80B7F058 */ ~daNpcF_SPCurve_c(); -}; - -struct daNpcF_Path_c { - /* 80150900 */ void initialize(); - /* 8015095C */ void setPathInfo(u8, s8, u8); - /* 80150A7C */ void chkPassedDst(cXyz); - /* 80150BBC */ void reverse(); - /* 80150BE0 */ void setNextIdx(); - /* 80150C18 */ void getNextIdx(); - /* 80150C60 */ void getBeforeIdx(); - /* 80150CA8 */ void getBeforePos(cXyz&); - /* 80150D44 */ void getNextPos(cXyz&); - /* 80150DE0 */ void getDstPos(cXyz, cXyz&); - /* 80B7EFF8 */ ~daNpcF_Path_c(); -}; - -struct daNpcF_MatAnm_c { - /* 80150738 */ void initialize(); -}; - -struct daNpcF_Lookat_c { - /* 80151038 */ void initialize(); - /* 801510B8 */ void setParam(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, s16, - cXyz*); - /* 80151350 */ void calc(fopAc_ac_c*, f32 (*)[4], csXyz**, int, int, int); - /* 80B7EE74 */ ~daNpcF_Lookat_c(); -}; - -struct daNpcF_ActorMngr_c { - /* 801506B0 */ void initialize(); - /* 801506BC */ void entry(fopAc_ac_c*); - /* 801506E0 */ void remove(); - /* 801506EC */ void getActorP(); - /* 80B7EDF0 */ ~daNpcF_ActorMngr_c(); - /* 80B7EE38 */ daNpcF_ActorMngr_c(); -}; - -struct dSv_info_c { - /* 80035200 */ void onSwitch(int, int); - /* 800352B0 */ void offSwitch(int, int); - /* 80035360 */ void isSwitch(int, int) const; -}; - -struct dSv_danBit_c { - /* 80034BE8 */ void isSwitch(int) const; -}; - -struct dKy_tevstr_c {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - -struct dRes_info_c {}; - -struct dRes_control_c { - /* 8003C2EC */ void getRes(char const*, s32, dRes_info_c*, int); -}; - -struct dPnt {}; - -struct dBgS_AcchCir { - /* 80075EAC */ dBgS_AcchCir(); - /* 80075F40 */ void SetWallR(f32); - /* 80075F58 */ void SetWall(f32, f32); - /* 80B7F524 */ ~dBgS_AcchCir(); -}; - -struct dBgS {}; - -struct dBgS_Acch { - /* 80075F94 */ ~dBgS_Acch(); - /* 800760A0 */ dBgS_Acch(); - /* 80076248 */ void Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*); - /* 80076AAC */ void CrrPos(dBgS&); -}; - -struct dPaPo_c { - /* 80050C9C */ void init(dBgS_Acch*, f32, f32); - /* 80051008 */ void setEffectCenter(dKy_tevstr_c const*, cXyz const*, u32, u32, cXyz const*, - csXyz const*, cXyz const*, s8, f32, f32); -}; - -struct dMsgFlow_c { - /* 80249F00 */ dMsgFlow_c(); - /* 80249F48 */ ~dMsgFlow_c(); - /* 8024A528 */ void getEventId(int*); -}; - -struct dMeter2Info_c { - /* 8021E0C4 */ void resetMiniGameItem(bool); -}; - -struct dEvt_control_c { - /* 80042468 */ void reset(); - /* 80042518 */ void reset(void*); - /* 80042914 */ void setSkipProc(void*, int (*)(void*, int), int); - /* 80042958 */ void setSkipZev(void*, char*); -}; - -struct dEvent_manager_c { - /* 80047758 */ void getEventIdx(fopAc_ac_c*, char const*, u8); - /* 80047A78 */ void endCheck(s16); - /* 80047B1C */ void getMyStaffId(char const*, fopAc_ac_c*, int); - /* 80047D4C */ void getIsAddvance(int); - /* 80047E10 */ void getMyActIdx(int, char const* const*, int, int, int); - /* 800480EC */ void getMySubstanceP(int, char const*, int); - /* 8004817C */ void cutEnd(int); - /* 800483E8 */ void getRunEventName(); - /* 800487F0 */ void ChkPresentEnd(); -}; - -struct dDlst_shadowControl_c { - /* 80055F1C */ void addReal(u32, J3DModel*); - - static u8 mSimpleTexObj[32]; -}; - -struct dCcD_Stts { - /* 80083860 */ void Init(int, int, fopAc_ac_c*); -}; - -struct dCcD_SrcCyl {}; - -struct dCcD_GStts { - /* 80083760 */ dCcD_GStts(); - /* 80B7F594 */ ~dCcD_GStts(); -}; - -struct dCcD_Cyl { - /* 800848B4 */ void Set(dCcD_SrcCyl const&); -}; - -struct dBgS_PolyPassChk { - /* 80078E68 */ void SetObj(); -}; - -struct dBgS_ObjAcch { - /* 80B7F5F0 */ ~dBgS_ObjAcch(); -}; - -struct dBgS_LinChk { - /* 80077C68 */ dBgS_LinChk(); - /* 80077CDC */ ~dBgS_LinChk(); -}; - -struct dBgS_GndChk { - /* 8007757C */ dBgS_GndChk(); - /* 800775F0 */ ~dBgS_GndChk(); -}; - -struct cM3dGLin { - /* 8026F2E8 */ void SetStartEnd(cXyz const&, cXyz const&); - /* 80B81F70 */ ~cM3dGLin(); -}; - -struct cM3dGCyl { - /* 8026F1DC */ void SetC(cXyz const&); - /* 8026F1F8 */ void SetH(f32); - /* 8026F200 */ void SetR(f32); - /* 80B79798 */ ~cM3dGCyl(); -}; - -struct cM3dGCir { - /* 8026EF18 */ ~cM3dGCir(); -}; - -struct cM3dGAab { - /* 80B797E0 */ ~cM3dGAab(); -}; - -struct cCcD_Obj {}; - -struct cCcS { - /* 80264BA8 */ void Set(cCcD_Obj*); -}; - -struct cCcD_GStts { - /* 80B7F664 */ ~cCcD_GStts(); -}; - -struct cBgS_PolyInfo { - /* 802680B0 */ ~cBgS_PolyInfo(); -}; - -struct cBgS_GndChk { - /* 80267C1C */ cBgS_GndChk(); - /* 80267C94 */ ~cBgS_GndChk(); -}; - -struct _GXTexObj {}; - -struct Z2SeqMgr { - /* 802AF49C */ void subBgmStart(u32); - /* 802AF884 */ void subBgmStop(); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct J3DTexNoAnm { - /* 80B7A408 */ ~J3DTexNoAnm(); - /* 80B7A450 */ J3DTexNoAnm(); - /* 80B7EDC0 */ void calc(u16*) const; -}; - -struct J3DTexMtxAnm { - /* 80B7A474 */ ~J3DTexMtxAnm(); - /* 80B7A4B0 */ J3DTexMtxAnm(); -}; - -struct J3DTevKColorAnm { - /* 80B7A360 */ ~J3DTevKColorAnm(); - /* 80B7A39C */ J3DTevKColorAnm(); -}; - -struct J3DTevColorAnm { - /* 80B7A3B4 */ ~J3DTevColorAnm(); - /* 80B7A3F0 */ J3DTevColorAnm(); -}; - -struct J3DSys { - static u8 mCurrentMtx[48]; -}; - -struct J3DMaterialAnm { - /* 8032C320 */ void initialize(); -}; - -struct J3DMatColorAnm { - /* 80B7A4C8 */ ~J3DMatColorAnm(); - /* 80B7A504 */ J3DMatColorAnm(); -}; - -struct J3DFrameCtrl { - /* 803283FC */ void init(s16); - /* 80B7F0A0 */ ~J3DFrameCtrl(); -}; - // // Forward References: // @@ -712,6 +181,11 @@ extern "C" u8 const m__17daNpc_zrA_Param_c[176]; extern "C" extern char const* const d_a_npc_zra__stringBase0; extern "C" void* mEvtCutNameList__11daNpc_zrA_c[11]; extern "C" u8 mEvtCutList__11daNpc_zrA_c[132]; +static cPhs__Step daNpc_zrA_Create(void*); +static int daNpc_zrA_Delete(void*); +static int daNpc_zrA_Execute(void*); +static int daNpc_zrA_IsDelete(void*); +static int daNpc_zrA_Draw(void*); // // External References: @@ -909,14 +383,6 @@ extern "C" void removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor(); extern "C" void removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern(); extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey(); extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXConcat(); -extern "C" void PSMTXInverse(); -extern "C" void PSMTXMultVec(); -extern "C" void PSVECAdd(); -extern "C" void PSVECSubtract(); -extern "C" void PSVECScale(); -extern "C" void PSVECSquareMag(); extern "C" void __destroy_arr(); extern "C" void __construct_array(); extern "C" void __ptmf_test(); @@ -938,11 +404,7 @@ extern "C" void _restgpr_26(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" void abs(); -extern "C" void strcmp(); extern "C" extern u8 const __ptmf_null[12 + 4 /* padding */]; -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" extern void* __vt__8dCcD_Cyl[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; extern "C" u8 mCcDCyl__8daNpcF_c[68]; @@ -953,15 +415,9 @@ extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" extern void* __vt__14J3DMaterialAnm[4]; 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" extern u8 g_env_light[4880]; -extern "C" extern u8 g_meter2_info[248]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 mCurrentMtx__6J3DSys[48]; extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern u32 __float_nan; -extern "C" extern f32 G_CM3D_F_ABS_MIN[1 + 1 /* padding */]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; extern "C" void getType__11daNpc_Hoz_cFv(); extern "C" void __register_global_object(); @@ -973,20 +429,58 @@ extern "C" void entryPointer__14daObjZraMark_cFP10fopAc_ac_c(); /* ############################################################################################## */ /* 80B8C458-80B8C508 000000 00B0+00 56/56 0/0 0/0 .rodata m__17daNpc_zrA_Param_c */ -SECTION_RODATA u8 const daNpc_zrA_Param_c::m[176] = { - 0x43, 0x66, 0x00, 0x00, 0xC0, 0x40, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x44, 0x48, 0x00, 0x00, - 0x43, 0x7F, 0x00, 0x00, 0x43, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x20, 0x00, 0x00, - 0x41, 0xF0, 0x00, 0x00, 0xC1, 0xA0, 0x00, 0x00, 0x41, 0xF0, 0x00, 0x00, 0xC1, 0xF0, 0x00, 0x00, - 0x41, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3F, 0x19, 0x99, 0x9A, 0x41, 0x40, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x05, 0x00, 0x06, - 0x42, 0xA0, 0x00, 0x00, 0x43, 0xFA, 0x00, 0x00, 0x43, 0x96, 0x00, 0x00, 0xC3, 0x96, 0x00, 0x00, - 0x00, 0x3C, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xA0, 0x00, 0x00, - 0x3F, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x41, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x43, 0x16, 0x00, 0x00, 0x42, 0xC8, 0x00, 0x00, - 0x41, 0xA0, 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x40, 0xC0, 0x00, 0x00, - 0x43, 0x0C, 0x00, 0x00, 0x43, 0xAF, 0x00, 0x00, 0x45, 0x9C, 0x40, 0x00, 0x45, 0x3B, 0x80, 0x00, +daNpc_zrA_Param_c::param const daNpc_zrA_Param_c::m = { + 230.0f, // mAttnOffsetY + -3.0f, // mGravity + 1.0f, // mScale + 800.0f, // mShadowDepth + 255.0f, // mCcWeight + 230.0f, // mCylH + 0.0f, // mWallH + 40.0f, // mWallR + 30.0f, // mBodyUpAngle + -20.0f, // mBodyDownAngle + 30.0f, // mBodyLeftAngle + -30.0f, // mBodyRightAngle + 15.0f, // mHeadUpAngle + 0.0f, // mHeadDownAngle + 0.0f, // mHeadLeftAngle + 0.0f, // mHeadRightAngle + 0.6f, // mNeckAngleScl + 12.0f, // mMorfFrames + 3, // mSpeakDistIdx + 6, // mSpeakAngleIdx + 5, // mTalkDistIdx + 6, // mTalkAngleIdx + 80.0f, // mAttnFovY + 500.0f, // mAttnRadius + 300.0f, // mAttnUpperY + -300.0f, // mAttnLowerY + 60, + 8, + 0, // mTestExpression + 0, // mTestMotion + 0, // mTestLookMode + false, // mTest + 20.0f, // mSwimSpeed + 0.5f, // mMinSwimSpeedScale + 0x580, // mSwimAngleSpeed + 15.0f, // mSwimAnmRate + 0.0f, + 0.0f, + 1.5f, // mMaxScaleFactor + 150.0f, // mMinDepth + 100.0f, + 20.0f, + 4.0f, // mWalkSpeed + 0x800, // mWalkAngleSpeed + 2, // mWalkAngleScale + 6.0f, // mWalkAnmRate + 140.0f, + 350.0f, + 5000.0f, + 3000.0f, }; -COMPILER_STRIP_GATE(0x80B8C458, &daNpc_zrA_Param_c::m); /* 80B8C508-80B8C510 0000B0 0004+04 9/48 0/0 0/0 .rodata @3939 */ SECTION_RODATA static u8 const lit_3939[4 + 4 /* padding */] = { @@ -1031,26 +525,53 @@ COMPILER_STRIP_GATE(0x80B8C520, &lit_3942); /* 80B7850C-80B78730 0000EC 0224+00 8/8 0/0 0/0 .text * getDstPosDst2__16daNpc_zrA_Path_cF4cXyzR4cXyz */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_Path_c::getDstPosDst2(cXyz i_pos, cXyz& o_pnt) { + BOOL ret = false; + o_pnt = getPntPos(getIdx()); + if (chkPassedDst(i_pos)) { + ret = true; + if (!setNextIdx()) { + o_pnt = getPntPos(getIdx()); + mPosDst = (i_pos - o_pnt).abs(); + mPosition = i_pos; + } + } + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_Path_c::getDstPosDst2(cXyz param_0, cXyz& param_1) { +asm BOOL daNpc_zrA_Path_c::getDstPosDst2(cXyz param_0, cXyz& param_1) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getDstPosDst2__16daNpc_zrA_Path_cF4cXyzR4cXyz.s" } #pragma pop +#endif /* 80B78730-80B7876C 000310 003C+00 6/6 0/0 0/0 .text __dt__4cXyzFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cXyz::~cXyz() { +// asm cXyz::~cXyz() { +extern "C" asm void __dt__4cXyzFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__4cXyzFv.s" } #pragma pop /* 80B7876C-80B788F8 00034C 018C+00 4/4 0/0 0/0 .text setNextIdxDst__16daNpc_zrA_Path_cF4cXyz */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_Path_c::setNextIdxDst(cXyz param_0) { + if (!setNextIdx()) { + mPosDst = (param_0 - getPntPos(getIdx())).abs(); + mPosition = param_0; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -1059,49 +580,111 @@ asm void daNpc_zrA_Path_c::setNextIdxDst(cXyz param_0) { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setNextIdxDst__16daNpc_zrA_Path_cF4cXyz.s" } #pragma pop +#endif /* 80B788F8-80B78A60 0004D8 0168+00 1/1 0/0 0/0 .text chkPassedDstXZ__16daNpc_zrA_Path_cF4cXyz */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_Path_c::chkPassedDstXZ(cXyz i_pos) { + return mPosDst + field_0x10 <= (mPosition - i_pos).absXZ(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_Path_c::chkPassedDstXZ(cXyz param_0) { +asm BOOL daNpc_zrA_Path_c::chkPassedDstXZ(cXyz param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkPassedDstXZ__16daNpc_zrA_Path_cF4cXyz.s" } #pragma pop +#endif /* 80B78A60-80B78CA0 000640 0240+00 1/1 0/0 0/0 .text * getDstPosDstXZ__16daNpc_zrA_Path_cF4cXyzR4cXyz */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_Path_c::getDstPosDstXZ(cXyz i_pos, cXyz& o_pnt) { + BOOL ret = false; + o_pnt = getPntPos(getIdx()); + if (chkPassedDstXZ(i_pos)) { + if (setNextIdx()) { + ret = true; + } else { + o_pnt = getPntPos(getIdx()); + mPosDst = (i_pos - o_pnt).absXZ(); + mPosition = i_pos; + } + } + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_Path_c::getDstPosDstXZ(cXyz param_0, cXyz& param_1) { +asm BOOL daNpc_zrA_Path_c::getDstPosDstXZ(cXyz param_0, cXyz& param_1) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getDstPosDstXZ__16daNpc_zrA_Path_cF4cXyzR4cXyz.s" } #pragma pop +#endif /* 80B78CA0-80B78CFC 000880 005C+00 1/1 0/0 0/0 .text chkPassedChase__16daNpc_zrA_Path_cFUs4cXyz */ +#ifdef NONMATCHING +// matches with weak functions +BOOL daNpc_zrA_Path_c::chkPassedChase(u16 i_idx, cXyz i_pos) { + return daNpcF_chkPassed(i_pos, (dPnt*)mpRoomPath->m_points, i_idx, + mpRoomPath->m_num, mIsClosed, mIsReversed); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_Path_c::chkPassedChase(u16 param_0, cXyz param_1) { +asm BOOL daNpc_zrA_Path_c::chkPassedChase(u16 param_0, cXyz param_1) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkPassedChase__16daNpc_zrA_Path_cFUs4cXyz.s" } #pragma pop +#endif /* 80B78CFC-80B78E08 0008DC 010C+00 1/1 0/0 0/0 .text * getDstPosChase__16daNpc_zrA_Path_cFUs4cXyzR4cXyz */ +#ifdef NONMATCHING +// matches with weak functions +int daNpc_zrA_Path_c::getDstPosChase(u16 i_idx, cXyz i_pos, cXyz& o_pnt) { + BOOL done = false; + while (!done) { + o_pnt = getPntPos(i_idx); + if (!chkPassedChase(i_idx, i_pos)) { + break; + } + + if (mIsReversed) { + if (i_idx == 0) { + done = true; + } else { + i_idx--; + } + } else { + if (i_idx == getEndIdx()) { + done = true; + } else { + i_idx++; + } + } + } + return i_idx; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_Path_c::getDstPosChase(u16 param_0, cXyz param_1, cXyz& param_2) { +asm BOOL daNpc_zrA_Path_c::getDstPosChase(u16 param_0, cXyz param_1, cXyz& param_2) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getDstPosChase__16daNpc_zrA_Path_cFUs4cXyzR4cXyz.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C528-80B8C52C 0000D0 0004+00 10/33 0/0 0/0 .rodata @4437 */ @@ -1130,14 +713,98 @@ COMPILER_STRIP_GATE(0x80B8C534, &lit_4440); #pragma pop /* 80B78E08-80B7956C 0009E8 0764+00 1/1 0/0 0/0 .text chkPassDst__16daNpc_zrA_Path_cFUs4cXyz */ +#ifdef NONMATCHING +// matches with literals +f32 daNpc_zrA_Path_c::chkPassDst(u16 i_idx, cXyz i_pos) { + u16 prev_idx, next_idx; + dStage_dPnt_c* points = mpRoomPath->m_points; + u16 idx = mIdx; + u8 reversed = mIsReversed; + mIdx = i_idx; + mIsReversed = false; + next_idx = getNextIdx(); + mIdx = i_idx; + prev_idx = getBeforeIdx(); + mIdx = idx; + mIsReversed = reversed; + + cXyz prev_pos, cur_pos, next_pos, pos; + prev_pos.set(points[prev_idx].m_position.x, + points[prev_idx].m_position.y, + points[prev_idx].m_position.z); + cur_pos.set(points[i_idx].m_position.x, + points[i_idx].m_position.y, + points[i_idx].m_position.z); + next_pos.set(points[next_idx].m_position.x, + points[next_idx].m_position.y, + points[next_idx].m_position.z); + + f32 dist; + s16 angle; + if (prev_idx != i_idx || next_idx != i_idx) { + if (prev_idx < i_idx && i_idx < next_idx) { + dist = (next_pos - prev_pos).absXZ(); + angle = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z); + pos = prev_pos; + prev_pos.x = pos.x + dist * -1.0f * cM_ssin(angle); + prev_pos.z = pos.z + dist * -1.0f * cM_scos(angle); + next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle); + next_pos.z = pos.z + dist * 2.0f * cM_scos(angle); + } else if (prev_idx < i_idx) { + dist = (cur_pos - prev_pos).absXZ(); + angle = cM_atan2s(cur_pos.x - prev_pos.x, cur_pos.z - prev_pos.z); + pos = cur_pos; + prev_pos.x = pos.x + dist * -2.0f * cM_ssin(angle); + prev_pos.z = pos.z + dist * -2.0f * cM_scos(angle); + next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle); + next_pos.z = pos.z + dist * 2.0f * cM_scos(angle); + } else if (i_idx < next_idx) { + dist = (next_pos - cur_pos).absXZ(); + angle = cM_atan2s(next_pos.x - cur_pos.x, next_pos.z - cur_pos.z); + pos = cur_pos; + prev_pos.x = pos.x + dist * -2.0f * cM_ssin(angle); + prev_pos.z = pos.z + dist * -2.0f * cM_scos(angle); + next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle); + next_pos.z = pos.z + dist * 2.0f * cM_scos(angle); + } + + f32 proj_x, proj_z, proj2_x, proj2_z; + daNpcF_pntVsLineSegmentLengthSquare2D(i_pos.x, i_pos.z, prev_pos.x, prev_pos.z, + next_pos.x, next_pos.z, &proj_x, &proj_z, &dist); + if (cM3d_IsZero(dist)) { + return -1e9f; + } else { + daNpcF_pntVsLineSegmentLengthSquare2D(cur_pos.x, cur_pos.z, prev_pos.x, prev_pos.z, + next_pos.x, next_pos.z, &proj2_x, &proj2_z, &dist); + s16 angle2; + if (mIsReversed) { + angle2 = cM_atan2s(prev_pos.x - next_pos.x, prev_pos.z - next_pos.z); + } else { + angle2 = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z); + } + s16 angle_diff = angle2 - cM_atan2s(proj2_x - proj_x, proj2_z - proj_z); + dist = JMAFastSqrt((proj2_x - proj_x) * (proj2_x - proj_x) + + (proj2_z - proj_z) * (proj2_z - proj_z)); + if ((u16)abs(angle_diff) > 0x4000) { + return dist; + } else { + return -dist; + } + } + } else { + return -1e9f; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_Path_c::chkPassDst(u16 param_0, cXyz param_1) { +asm f32 daNpc_zrA_Path_c::chkPassDst(u16 param_0, cXyz param_1) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkPassDst__16daNpc_zrA_Path_cFUs4cXyz.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CD30-80B8CD30 0008D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -1196,167 +863,215 @@ SECTION_DATA static u32 lit_1787[1 + 5 /* padding */] = { /* 80B8CEB4-80B8CEE4 000024 0030+00 0/1 0/0 0/0 .data l_bmdGetParamList */ #pragma push #pragma force_active on -SECTION_DATA static u8 l_bmdGetParamList[48] = { - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0A, +SECTION_DATA static daNpc_GetParam1 l_bmdGetParamList[6] = { + {3, 4}, // zra + {13, 5}, // zra_tw + {3, 7}, // zra_met + {4, 7}, // zra_sp + {3, 10}, // zra_met_tw + {4, 10}, // zra_sp_tw }; #pragma pop /* 80B8CEE4-80B8D0DC 000054 01F8+00 1/2 0/0 0/0 .data l_bckGetParamList */ -SECTION_DATA static u8 l_bckGetParamList[504] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x09, - 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, - 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, +SECTION_DATA static daNpc_GetParam1 l_bckGetParamList[63] = { + {-1, 0}, + {8, 0}, // zra_f_talk_a + {9, 0}, // zra_f_talk_a_sp + {11, 0}, // zra_f_wait_swim + {10, 0}, // zra_f_talk_nomal + {13, 0}, // zra_fh_talk_nomal + {5, 5}, // zra_fh_sadsit_a + {4, 6}, // zra_fh_sadsit_b + {5, 6}, // zra_fh_sadsit_c + {6, 5}, // zra_fh_sadsit_d + {7, 5}, // zra_fh_sadsit_e + {5, 3}, // zra_f_looking_sp + {8, 3}, // zra_fh_looking_sp + {4, 9}, // zra_f_lookup + {7, 9}, // zra_fh_lookup + {7, 3}, // zra_f_talk_swim_sp + {6, 3}, // zra_f_talk_b_sp + {5, 9}, // zra_f_spa_talk_a + {8, 9}, // zra_fh_spa_wait_a + {6, 9}, // zra_f_spa_talk_b + {9, 9}, // zra_fh_spa_wait_b + {17, 0}, // zra_swim_turn + {14, 0}, // zra_still + {12, 0}, // zra_fallswim + {16, 0}, // zra_swim_talk + {8, 5}, // zra_sadsit_a + {6, 6}, // zra_sadsit_b + {7, 6}, // zra_sadsit_c + {9, 5}, // zra_sadsit_d + {10, 5}, // zra_sadsit_e + {4, 8}, // zra_tobikomi_s + {5, 8}, // zra_tobikomi_t + {3, 8}, // zra_tobikomi_e + {11, 3}, // zra_looking_sp + {17, 3}, // zra_talk_swim_sp + {16, 3}, // zra_talk_b_sp + {10, 9}, // zra_lookup + {14, 9}, // zra_spa_wait_b + {12, 9}, // zra_spa_talk_b + {13, 9}, // zra_spa_wait_a + {11, 9}, // zra_spa_talk_a + {5, 2}, // zra_wait_a + {10, 1}, // zra_walk_a + {4, 2}, // zra_talk_a + {7, 1}, // zra_swim_a + {8, 1}, // zra_swim_b + {9, 1}, // zra_wait_swim + {3, 1}, // zra_dive + {4, 1}, // zra_dive_b + {5, 1}, // zra_float + {6, 1}, // zra_float_b + {3, 2}, // zra_step + {18, 3}, // zra_wait_sp + {20, 3}, // zra_walk_a_sp + {15, 3}, // zra_talk_a_sp + {13, 3}, // zra_swim_a_sp + {14, 3}, // zra_swim_b_sp + {19, 3}, // zra_wait_swim_sp + {4, 3}, // zra_dive_sp + {3, 3}, // zra_dive_b_sp + {10, 3}, // zra_float_sp + {9, 3}, // zra_float_b_sp + {12, 3}, // zra_step_sp }; /* 80B8D0DC-80B8D11C 00024C 0040+00 1/1 0/0 0/0 .data l_btpGetParamList */ -SECTION_DATA static u8 l_btpGetParamList[64] = { - 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x06, - 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x05, - 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, +SECTION_DATA static daNpc_GetParam1 l_btpGetParamList[8] = { + {34, 0}, // zra + {16, 5}, // zra_fh_sadsit_a + {10, 6}, // zra_fh_sadsit_b + {11, 6}, // zra_fh_sadsit_c + {17, 5}, // zra_fh_sadsit_d + {18, 5}, // zra_fh_sadsit_e + {17, 9}, // zra_f_spa_talk_b + {18, 9}, // zra_fh_spa_wait_b }; /* 80B8D11C-80B8D13C 00028C 0020+00 1/3 0/0 0/0 .data l_btkGetParamList */ -SECTION_DATA static u8 l_btkGetParamList[32] = { - 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, +SECTION_DATA static daNpc_GetParam1 l_btkGetParamList[4] = { + {28, 0}, // zra + {31, 0}, // zra_water02 + {29, 0}, // zra_reset + {30, 0}, // zra_w_eyeball }; /* 80B8D13C-80B8D14C 0002AC 0010+00 0/1 0/0 0/0 .data l_brkGetParamList */ #pragma push #pragma force_active on -SECTION_DATA static u8 l_brkGetParamList[16] = { - 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, +SECTION_DATA static daNpc_GetParam1 l_brkGetParamList[2] = { + {24, 0}, // zra + {25, 0}, // zra_water02 }; #pragma pop /* 80B8D14C-80B8D15C 0002BC 0010+00 0/1 0/0 0/0 .data l_bpkGetParamList */ #pragma push #pragma force_active on -SECTION_DATA static u8 l_bpkGetParamList[16] = { - 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, +SECTION_DATA static daNpc_GetParam1 l_bpkGetParamList[2] = { + {20, 0}, // zra + {21, 0}, // zra_water02 }; #pragma pop /* 80B8D15C-80B8D1C4 0002CC 0068+00 0/3 0/0 0/0 .data l_evtGetParamList */ #pragma push #pragma force_active on -SECTION_DATA static u8 l_evtGetParamList[104] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, +SECTION_DATA static daNpc_GetParam1 l_evtGetParamList[13] = { + {0, 0}, + {1, 0}, + {2, 0}, + {3, 0}, + {4, 0}, + {5, 0}, + {6, 0}, + {7, 0}, + {8, 0}, + {9, 0}, + {10, 0}, + {11, 0}, + {12, 0}, }; #pragma pop /* 80B8D1C4-80B8D1F8 -00001 0034+00 1/4 0/0 0/0 .data l_evtNames */ -SECTION_DATA static void* l_evtNames[13] = { - (void*)NULL, - (void*)&d_a_npc_zra__stringBase0, - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0xA), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x1B), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x2B), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x38), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x48), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x58), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x6E), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x83), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x9E), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0xAC), - (void*)(((char*)&d_a_npc_zra__stringBase0) + 0xB7), +SECTION_DATA static char* l_evtNames[13] = { + NULL, + "TALK_SWIM", + "BEFORE_BLAST_ZRR", + "AFTER_BLAST_ZRR", + "THANKS_BLAST", + "RESULT_ANNOUNCE", + "CARRY_WATERFALL", + "CARRY_WATERFALL_NIGHT", + "CARRY_WATERFALL_SKIP", + "CARRY_WATERFALL_NIGHT_SKIP", + "SEARCH_PRINCE", + "TALK_MULTI", + "TALK_MULTI2", }; /* 80B8D1F8-80B8D21C 000368 0024+00 0/1 0/0 0/0 .data l_loadObj_list */ #pragma push #pragma force_active on -SECTION_DATA static u8 l_loadObj_list[36] = { - 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +SECTION_DATA static int l_loadObj_list[3][3] = { + {2, 3, -1}, + {2, -1, -1}, + {-1, -1, -1}, }; #pragma pop /* 80B8D21C-80B8D240 00038C 0024+00 0/1 0/0 0/0 .data l_loadObj_listTW */ #pragma push #pragma force_active on -SECTION_DATA static u8 l_loadObj_listTW[36] = { - 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0xFF, 0xFF, 0xFF, 0xFF, - 0x00, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +SECTION_DATA static int l_loadObj_listTW[3][3] = { + {4, 5, -1}, + {4, -1, -1}, + {-1, -1, -1}, }; #pragma pop /* 80B8D240-80B8D260 0003B0 0020+00 1/0 0/0 0/0 .data l_loadRes_ZRAa */ -SECTION_DATA static u8 l_loadRes_ZRAa[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -}; +static int l_loadRes_ZRAa[8] = {0, 1, 2, 4, 6, -1, -1, -1}; /* 80B8D260-80B8D280 0003D0 0020+00 1/0 0/0 0/0 .data l_loadRes_Swim */ -SECTION_DATA static u8 l_loadRes_Swim[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -}; +static int l_loadRes_Swim[8] = {0, 1, 2, 4, -1, -1, -1, -1}; /* 80B8D280-80B8D2A0 0003F0 0020+00 1/0 0/0 0/0 .data l_loadRes_Tobi */ -SECTION_DATA static u8 l_loadRes_Tobi[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -}; +static int l_loadRes_Tobi[8] = {0, 1, 2, 4, 8, -1, -1, -1}; /* 80B8D2A0-80B8D2C0 000410 0020+00 1/0 0/0 0/0 .data l_loadRes_Spa */ -SECTION_DATA static u8 l_loadRes_Spa[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -}; +static int l_loadRes_Spa[8] = {0, 2, 4, 9, -1, -1, -1, -1}; /* 80B8D2C0-80B8D2E0 000430 0020+00 1/0 0/0 0/0 .data l_loadRes_ZRA0 */ -SECTION_DATA static u8 l_loadRes_ZRA0[32] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -}; +static int l_loadRes_ZRA0[8] = {0, 1, 2, 4, -1, -1, -1, -1}; /* 80B8D2E0-80B8D300 -00001 0020+00 2/2 0/0 0/0 .data l_loadRes_list */ -SECTION_DATA static void* l_loadRes_list[8] = { - (void*)&l_loadRes_ZRAa, (void*)&l_loadRes_Swim, (void*)&l_loadRes_Swim, (void*)&l_loadRes_Swim, - (void*)&l_loadRes_Tobi, (void*)&l_loadRes_Tobi, (void*)&l_loadRes_Spa, (void*)&l_loadRes_ZRA0, +static int* l_loadRes_list[8] = { + l_loadRes_ZRAa, l_loadRes_Swim, l_loadRes_Swim, l_loadRes_Swim, + l_loadRes_Tobi, l_loadRes_Tobi, l_loadRes_Spa, l_loadRes_ZRA0, }; /* 80B8D300-80B8D32C -00001 002C+00 5/11 0/0 0/0 .data l_resNames */ +#ifdef NONMATCHING +static char* l_resNames[11] = { + "zrA", + "zrA_nml", + "zrA_nml2", + "zrA_sp", + "zrA_MDL", + "zrA_TW", + "zrA_sad", + "zrA_obj", + "zrA_tobi", + "zrA2", + "zrA_objTW", +}; +#else SECTION_DATA static void* l_resNames[11] = { (void*)(((char*)&d_a_npc_zra__stringBase0) + 0xC3), (void*)(((char*)&d_a_npc_zra__stringBase0) + 0xC7), @@ -1370,16 +1085,41 @@ SECTION_DATA static void* l_resNames[11] = { (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x107), (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x10C), }; +#endif /* 80B8D32C-80B8D33C -00001 0010+00 1/2 0/0 0/0 .data l_myName */ +#ifdef NONMATCHING +static char* l_myName[4] = { + "zrA", + "zrA_talk", + "zrR", + "zrWF", +}; +#else SECTION_DATA static void* l_myName[4] = { (void*)(((char*)&d_a_npc_zra__stringBase0) + 0xC3), (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x116), (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x11F), (void*)(((char*)&d_a_npc_zra__stringBase0) + 0x123), }; +#endif /* 80B8D33C-80B8D368 -00001 002C+00 0/1 0/0 0/0 .data mEvtCutNameList__11daNpc_zrA_c */ +#ifdef NONMATCHING +char* daNpc_zrA_c::mEvtCutNameList[11] = { + "", + "TALK_SWIM", + "BEFORE_BLAST_ZRR", + "AFTER_BLAST_ZRR", + "THANKS_BLAST", + "RESULT_ANNOUNCE", + "CARRY_WATERFALL", + "CARRY_WATERFALL_SKIP", + "SEARCH_PRINCE1", + "SEARCH_PRINCE2", + "TALK_MULTI", +}; +#else #pragma push #pragma force_active on SECTION_DATA void* daNpc_zrA_c::mEvtCutNameList[11] = { @@ -1396,7 +1136,23 @@ SECTION_DATA void* daNpc_zrA_c::mEvtCutNameList[11] = { (void*)(((char*)&d_a_npc_zra__stringBase0) + 0xAC), }; #pragma pop +#endif +#ifdef NONMATCHING +daNpc_zrA_c::EventFn daNpc_zrA_c::mEvtCutList[11] = { + NULL, + &ECut_talkSwim, + &ECut_beforeBlastzrR, + &ECut_afterBlastzrR, + &ECut_thanksBlast, + &ECut_resultAnnounce, + &ECut_carryWaterfall, + &ECut_carryWaterfallSkip, + &ECut_searchPrince1, + &ECut_searchPrince2, + &ECut_talkMulti, +}; +#else /* 80B8D368-80B8D374 -00001 000C+00 0/1 0/0 0/0 .data @4442 */ #pragma push #pragma force_active on @@ -1512,6 +1268,7 @@ SECTION_DATA u8 daNpc_zrA_c::mEvtCutList[132] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #pragma pop +#endif /* 80B8D464-80B8D4B8 -00001 0054+00 1/1 0/0 0/0 .data @5840 */ SECTION_DATA static void* lit_5840[21] = { @@ -2153,25 +1910,30 @@ SECTION_DATA static void* lit_11468[3] = { }; /* 80B8D8DC-80B8D8FC -00001 0020+00 1/0 0/0 0/0 .data daNpc_zrA_MethodTable */ -SECTION_DATA static void* daNpc_zrA_MethodTable[8] = { - (void*)daNpc_zrA_Create__FPv, - (void*)daNpc_zrA_Delete__FPv, - (void*)daNpc_zrA_Execute__FPv, - (void*)daNpc_zrA_IsDelete__FPv, - (void*)daNpc_zrA_Draw__FPv, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class daNpc_zrA_MethodTable = { + (process_method_func)daNpc_zrA_Create, + (process_method_func)daNpc_zrA_Delete, + (process_method_func)daNpc_zrA_Execute, + (process_method_func)daNpc_zrA_IsDelete, + (process_method_func)daNpc_zrA_Draw, }; /* 80B8D8FC-80B8D92C -00001 0030+00 0/0 0/0 1/0 .data g_profile_NPC_ZRA */ -SECTION_DATA extern void* g_profile_NPC_ZRA[12] = { - (void*)0xFFFFFFFD, (void*)0x0003FFFD, - (void*)0x00E50000, (void*)&g_fpcLf_Method, - (void*)0x000015C4, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x01830000, (void*)&daNpc_zrA_MethodTable, - (void*)0x00044100, (void*)0x040E0000, +extern actor_process_profile_definition g_profile_NPC_ZRA = { + fpcLy_CURRENT_e, + 3, + fpcPi_CURRENT_e, + PROC_NPC_ZRA, + &g_fpcLf_Method.mBase, + sizeof(daNpc_zrA_c), + 0, + 0, + &g_fopAc_Method.base, + 0x183, + &daNpc_zrA_MethodTable, + 0x44100, + fopAc_NPC_e, + fopAc_CULLBOX_CUSTOM_e, }; /* 80B8D92C-80B8D938 000A9C 000C+00 2/2 0/0 0/0 .data __vt__8cM3dGLin */ @@ -2301,6 +2063,12 @@ SECTION_DATA extern void* __vt__12J3DFrameCtrl[3] = { }; /* 80B7956C-80B79798 00114C 022C+00 1/1 0/0 0/0 .text __ct__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// daNpcF_c needs to not be inlined +daNpc_zrA_c::daNpc_zrA_c() { + /* empty function */ +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2309,12 +2077,14 @@ asm daNpc_zrA_c::daNpc_zrA_c() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__ct__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B79798-80B797E0 001378 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGCyl::~cM3dGCyl() { +// asm cM3dGCyl::~cM3dGCyl() { +extern "C" asm void __dt__8cM3dGCylFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__8cM3dGCylFv.s" } @@ -2324,21 +2094,54 @@ asm cM3dGCyl::~cM3dGCyl() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGAab::~cM3dGAab() { +// asm cM3dGAab::~cM3dGAab() { +extern "C" asm void __dt__8cM3dGAabFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__8cM3dGAabFv.s" } #pragma pop /* 80B79828-80B79B58 001408 0330+00 1/0 0/0 0/0 .text __dt__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +daNpc_zrA_c::~daNpc_zrA_c() { + int i; + for (i = 0; l_loadRes_list[mType][i] >= 0; i++) { + int res_no = l_loadRes_list[mType][i]; + if (res_no == 4) { + if (mTwilight) { + res_no = 5; + } + } else if (res_no == 1) { + if (mSoldierType == SOLDIER_SPEAR) { + res_no = 3; + } + } + dComIfG_resDelete(&mPhase[i], l_resNames[res_no]); + } + + if (mSoldierType != SOLDIER_NONE) { + if (mTwilight) { + dComIfG_resDelete(&mPhase[i], l_resNames[10]); + } else { + dComIfG_resDelete(&mPhase[i], l_resNames[7]); + } + } + + if (heap != NULL) { + mpMorf->stopZelAnime(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpc_zrA_c::~daNpc_zrA_c() { +// asm daNpc_zrA_c::~daNpc_zrA_c() { +extern "C" asm void __dt__11daNpc_zrA_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C538-80B8C53C 0000E0 0004+00 0/1 0/0 0/0 .rodata @4964 */ @@ -2370,14 +2173,109 @@ COMPILER_STRIP_GATE(0x80B8C544, &lit_4967); #pragma pop /* 80B79B58-80B79F38 001738 03E0+00 1/1 0/0 0/0 .text create__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +cPhs__Step daNpc_zrA_c::create() { + fopAcM_SetupActor(this, daNpc_zrA_c); + + mType = getTypeFromArgument(); + if (home.angle.x != 0xffff) { + mFlowID = home.angle.x; + } else { + mFlowID = -1; + } + mSoldierType = getSoldierTypeFromParam(); + mGameMode = getGameModeFromParam(); + mSwitch1 = (u8)home.angle.z; + mSwitch2 = (u8)((u16)home.angle.z >> 8); + mTwilight = dKy_darkworld_check(); + + if (isDelete()) { + return cPhs_ERROR_e; + } + + int res_count = 0; + cPhs__Step step; + int i; + for (i = 0; l_loadRes_list[mType][i] >= 0; i++) { + int res_no = l_loadRes_list[mType][i]; + if (res_no == 4) { + if (mTwilight) { + res_no = 5; + } + } else if (res_no == 1) { + if (mSoldierType == SOLDIER_SPEAR) { + res_no = 3; + } + } + + step = (cPhs__Step)dComIfG_resLoad(&mPhase[i], l_resNames[res_no]); + + if (step == cPhs_ERROR_e || step == cPhs_UNK3_e) { + return cPhs_ERROR_e; + } + if (step == cPhs_COMPLEATE_e) { + res_count++; + } + } + + if (mSoldierType != SOLDIER_NONE) { + if (mTwilight) { + step = (cPhs__Step)dComIfG_resLoad(&mPhase[i], l_resNames[10]); + } else { + step = (cPhs__Step)dComIfG_resLoad(&mPhase[i], l_resNames[7]); + } + + if (step == cPhs_ERROR_e || step == cPhs_UNK3_e) { + return cPhs_ERROR_e; + } + if (step == cPhs_COMPLEATE_e) { + res_count++; + } + + i++; + } + + if (res_count == i) { + if (!fopAcM_entrySolidHeap(this, createHeapCallBack, 0x80007280)) { + return cPhs_ERROR_e; + } + + fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); + fopAcM_setCullSizeBox(this, -300.0f, -50.0f, -300.0f, 300.0f, 450.0f, 300.0f); + mCreatureSound.init(¤t.pos, &eyePos, 3, 1); + mAcchCir.SetWall(daNpc_zrA_Param_c::m.mWallR, daNpc_zrA_Param_c::m.mWallH); + mAcch.Set(fopAcM_GetPosition_p(this), fopAcM_GetOldPosition_p(this), this, 1, &mAcchCir, + fopAcM_GetSpeed_p(this), fopAcM_GetAngle_p(this), fopAcM_GetShapeAngle_p(this)); + mPaPo.init(&mAcch, daNpc_zrA_Param_c::m.mCylH, daNpc_zrA_Param_c::m.mCylH); + mCcStts.Init(daNpc_zrA_Param_c::m.mCcWeight, 0, this); + mCcCyl.Set(mCcDCyl); + mCcCyl.SetStts(&mCcStts); + mCcCyl.SetTgHitCallback(tgHitCallBack); + mAcch.SetWtrChkMode(2); + mAcch.CrrPos(dComIfG_Bgsp()); + mGndChk = mAcch.m_gnd; + mGroundH = mAcch.GetGroundH(); + setEnvTevColor(); + setRoomNo(); + reset(); + Execute(); + + return cPhs_COMPLEATE_e; + } + + return cPhs_INIT_e; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::create() { +asm cPhs__Step daNpc_zrA_c::create() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/create__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C548-80B8C54C 0000F0 0004+00 7/28 0/0 0/0 .rodata @5070 */ @@ -2385,20 +2283,111 @@ SECTION_RODATA static f32 const lit_5070 = 1.0f; COMPILER_STRIP_GATE(0x80B8C548, &lit_5070); /* 80B79F38-80B7A360 001B18 0428+00 1/1 0/0 0/0 .text CreateHeap__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +int daNpc_zrA_c::CreateHeap() { + J3DModelData* model_data = NULL; + u32 model_flag; + if (mTwilight) { + if (l_bmdGetParamList[1].fileIdx >= 0) { + model_data = static_cast( + dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[1].arcIdx], + l_bmdGetParamList[1].fileIdx)); + } + model_flag = 0x80000; + } else { + if (l_bmdGetParamList[0].fileIdx >= 0) { + model_data = static_cast( + dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[0].arcIdx], + l_bmdGetParamList[0].fileIdx)); + } + model_flag = 0; + } + mpMorf = new mDoExt_McaMorfSO(model_data, NULL, NULL, NULL, -1, 1.0f, 0, -1, + &mCreatureSound, model_flag, 0x11020285); + if (mpMorf != NULL && mpMorf->getModel() == NULL) { + mpMorf->stopZelAnime(); + mpMorf = NULL; + } + if (mpMorf == NULL) { + return 0; + } + + J3DModel* model = mpMorf->getModel(); + for (u16 i = 0; i < model_data->getJointNum(); i++) { + switch (i) { + case 0: + case 1: + case 3: + case 4: + case 5: + case 14: + case 29: + model_data->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); + break; + default: + model_data->getJointNodePointer(i)->setCallBack(NULL); + } + } + model->setUserArea((u32)this); + + mpMatAnm = new daNpcF_MatAnm_c(); + if (mpMatAnm == NULL) { + return 0; + } + + setMotionWaterAnm(1); + if (!setExpressionAnm(ANM_F_TALK_A, false)) { + return 0; + } + setMotionAnm(ANM_WAIT_A, 0.0f); + + if (mSoldierType != SOLDIER_NONE) { + for (int i = 0; i < 3; i++) { + int index; + if (mTwilight) { + index = l_loadObj_listTW[mSoldierType][i]; + } else { + index = l_loadObj_list[mSoldierType][i]; + } + + if (index > 0) { + model_data = static_cast( + dComIfG_getObjectRes(l_resNames[l_bmdGetParamList[index].arcIdx], + l_bmdGetParamList[index].fileIdx)); + if (model_data != NULL) { + mpObjectModel[i] = mDoExt_J3DModel__create(model_data, 0x80000, 0x11000084); + if (mpObjectModel[i] == NULL) { + return 0; + } + } else { + return 0; + } + } else { + mpObjectModel[i] = NULL; + } + } + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::CreateHeap() { +asm int daNpc_zrA_c::CreateHeap() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/CreateHeap__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7A360-80B7A39C 001F40 003C+00 1/1 0/0 0/0 .text __dt__15J3DTevKColorAnmFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevKColorAnm::~J3DTevKColorAnm() { +// asm J3DTevKColorAnm::~J3DTevKColorAnm() { +extern "C" asm void __dt__15J3DTevKColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__15J3DTevKColorAnmFv.s" } @@ -2408,7 +2397,8 @@ asm J3DTevKColorAnm::~J3DTevKColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevKColorAnm::J3DTevKColorAnm() { +// asm J3DTevKColorAnm::J3DTevKColorAnm() { +extern "C" asm void __ct__15J3DTevKColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__ct__15J3DTevKColorAnmFv.s" } @@ -2418,7 +2408,8 @@ asm J3DTevKColorAnm::J3DTevKColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevColorAnm::~J3DTevColorAnm() { +// asm J3DTevColorAnm::~J3DTevColorAnm() { +extern "C" asm void __dt__14J3DTevColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__14J3DTevColorAnmFv.s" } @@ -2428,7 +2419,8 @@ asm J3DTevColorAnm::~J3DTevColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTevColorAnm::J3DTevColorAnm() { +// asm J3DTevColorAnm::J3DTevColorAnm() { +extern "C" asm void __ct__14J3DTevColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__ct__14J3DTevColorAnmFv.s" } @@ -2438,7 +2430,8 @@ asm J3DTevColorAnm::J3DTevColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexNoAnm::~J3DTexNoAnm() { +// asm J3DTexNoAnm::~J3DTexNoAnm() { +extern "C" asm void __dt__11J3DTexNoAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__11J3DTexNoAnmFv.s" } @@ -2448,7 +2441,8 @@ asm J3DTexNoAnm::~J3DTexNoAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexNoAnm::J3DTexNoAnm() { +// asm J3DTexNoAnm::J3DTexNoAnm() { +extern "C" asm void __ct__11J3DTexNoAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__ct__11J3DTexNoAnmFv.s" } @@ -2458,7 +2452,8 @@ asm J3DTexNoAnm::J3DTexNoAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexMtxAnm::~J3DTexMtxAnm() { +// asm J3DTexMtxAnm::~J3DTexMtxAnm() { +extern "C" asm void __dt__12J3DTexMtxAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__12J3DTexMtxAnmFv.s" } @@ -2468,7 +2463,8 @@ asm J3DTexMtxAnm::~J3DTexMtxAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DTexMtxAnm::J3DTexMtxAnm() { +// asm J3DTexMtxAnm::J3DTexMtxAnm() { +extern "C" asm void __ct__12J3DTexMtxAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__ct__12J3DTexMtxAnmFv.s" } @@ -2478,7 +2474,8 @@ asm J3DTexMtxAnm::J3DTexMtxAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DMatColorAnm::~J3DMatColorAnm() { +// asm J3DMatColorAnm::~J3DMatColorAnm() { +extern "C" asm void __dt__14J3DMatColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__14J3DMatColorAnmFv.s" } @@ -2488,31 +2485,23 @@ asm J3DMatColorAnm::~J3DMatColorAnm() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DMatColorAnm::J3DMatColorAnm() { +// asm J3DMatColorAnm::J3DMatColorAnm() { +extern "C" asm void __ct__14J3DMatColorAnmFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__ct__14J3DMatColorAnmFv.s" } #pragma pop /* 80B7A51C-80B7A550 0020FC 0034+00 1/1 0/0 0/0 .text Delete__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::Delete() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Delete__11daNpc_zrA_cFv.s" +int daNpc_zrA_c::Delete() { + this->~daNpc_zrA_c(); + return 1; } -#pragma pop /* 80B7A550-80B7A570 002130 0020+00 2/2 0/0 0/0 .text Execute__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::Execute() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Execute__11daNpc_zrA_cFv.s" +int daNpc_zrA_c::Execute() { + return execute(); } -#pragma pop /* ############################################################################################## */ /* 80B8C54C-80B8C550 0000F4 0004+00 0/8 0/0 0/0 .rodata @5218 */ @@ -2523,14 +2512,96 @@ COMPILER_STRIP_GATE(0x80B8C54C, &lit_5218); #pragma pop /* 80B7A570-80B7A864 002150 02F4+00 1/1 0/0 0/0 .text Draw__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +int daNpc_zrA_c::Draw() { + BOOL bvar2 = false; + J3DModel* model = mpMorf->getModel(); + J3DModelData* model_data = model->getModelData(); + model_data->getMaterialNodePointer(1)->setMaterialAnm(mpMatAnm); + + if (!mHide) { + if (mTwilight) { + bvar2 = false; + } else { + bvar2 = true; + } + } + + if (!checkHide()) { + if (mTwilight) { + g_env_light.settingTevStruct(4, ¤t.pos, &tevStr); + } else { + g_env_light.settingTevStruct(0, ¤t.pos, &tevStr); + } + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + + if (!drawDbgInfo()) { + if (mWaterAnmFlags & ANM_PLAY_BTK) { + mWaterBtkAnm.entry(model_data); + } + if (mWaterAnmFlags & ANM_PLAY_BPK) { + mWaterBpkAnm.entry(model_data); + } + if (mAnmFlags & ANM_PLAY_BTP) { + mBtpAnm.entry(model_data); + } + if (mAnmFlags & ANM_PLAY_BTK) { + mBtkAnm.entry(model_data); + } + if (mAnmFlags & ANM_PLAY_BRK) { + mBrkAnm.entry(model_data); + } + + if (bvar2) { + fopAcM_setEffectMtx(this, model_data); + } + + if (mTwilight) { + dComIfGd_setListDark(); + mpMorf->entryDL(); + dComIfGd_setList(); + } else { + mpMorf->entryDL(); + } + + if (mAnmFlags & ANM_PLAY_BTP) { + mBtpAnm.remove(model_data); + } + if (mAnmFlags & ANM_PLAY_BTK) { + mBtkAnm.remove(model_data); + } + if (mAnmFlags & ANM_PLAY_BRK) { + mBrkAnm.remove(model_data); + } + if (mWaterAnmFlags & ANM_PLAY_BPK) { + mWaterBpkAnm.remove(model_data); + } + if (mWaterAnmFlags & ANM_PLAY_BTK) { + mWaterBtkAnm.remove(model_data); + } + + mShadowKey = dComIfGd_setShadow(mShadowKey, 1, model, ¤t.pos, + daNpc_zrA_Param_c::m.mShadowDepth, 20.0f, + current.pos.y, mGroundH, mGndChk, &tevStr, + 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); + + drawOtherMdls(); + } + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::Draw() { +asm int daNpc_zrA_c::Draw() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Draw__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C550-80B8C55C 0000F8 000C+00 0/1 0/0 0/0 .rodata @5227 */ @@ -2544,56 +2615,250 @@ COMPILER_STRIP_GATE(0x80B8C550, &lit_5227); /* 80B7A864-80B7AB9C 002444 0338+00 1/1 0/0 0/0 .text * ctrlJoint__11daNpc_zrA_cFP8J3DJointP8J3DModel */ +#ifdef NONMATCHING +// matches with literals +int daNpc_zrA_c::ctrlJoint(J3DJoint* i_joint, J3DModel* i_model) { + int jnt_no = i_joint->getJntNo(); + Mtx mtx1, mtx2; + cXyz pos; + + if (mSwimMode != SWIM_WAIT) { + mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no)); + + switch (jnt_no) { + case 29: + calcWaistAngle(); + MTXCopy(mDoMtx_stack_c::get(), mtx1); + pos.set(mtx1[0][3], mtx1[1][3], mtx1[2][3]); + mtx1[0][3] = mtx1[1][3] = mtx1[2][3] = 0.0f; + + mDoMtx_stack_c::ZXYrotS(mCurAngle); + mDoMtx_stack_c::inverse(); + MTXCopy(mDoMtx_stack_c::get(), mtx2); + + mDoMtx_stack_c::transS(pos); + mDoMtx_stack_c::ZXYrotM(mCurAngle); + mDoMtx_stack_c::ZXYrotM(mWaistAngle); + mDoMtx_stack_c::concat(mtx2); + mDoMtx_stack_c::concat(mtx1); + break; + } + + i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + return 1; + } + + int lookat_joints[3] = {1, 3, 4}; + + if (jnt_no == 0) { + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(1)); + mDoMtx_stack_c::multVecZero(&mLookatPos[0]); + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(3)); + mDoMtx_stack_c::multVecZero(&mLookatPos[1]); + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&mLookatPos[2]); + } + + mDoMtx_stack_c::copy(i_model->getAnmMtx(jnt_no)); + + switch (jnt_no) { + case 1: + case 3: + case 4: + setLookatMtx(jnt_no, lookat_joints, daNpc_zrA_Param_c::m.mNeckAngleScl); + break; + } + + if (jnt_no == 1) { + mDoMtx_stack_c::YrotM(field_0x908[0].z); + mDoMtx_stack_c::ZrotM(-field_0x908[0].x); + } else if (jnt_no == 4) { + mDoMtx_stack_c::YrotM(field_0x908[2].z); + mDoMtx_stack_c::ZrotM(field_0x908[2].x); + } + + i_model->setAnmMtx(jnt_no, mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + + if ((jnt_no == 4 || jnt_no == 14) && (mAnmFlags & ANM_PLAY_BCK)) { + J3DAnmTransform* bck_anm = mBckAnm.getBckAnm(); + mBckAnm.changeBckOnly(mpMorf->getAnm()); + mpMorf->changeAnm(bck_anm); + } + + return 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { +asm int daNpc_zrA_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ctrlJoint__11daNpc_zrA_cFP8J3DJointP8J3DModel.s" } #pragma pop +#endif /* 80B7AB9C-80B7ABBC 00277C 0020+00 1/1 0/0 0/0 .text * createHeapCallBack__11daNpc_zrA_cFP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::createHeapCallBack(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/createHeapCallBack__11daNpc_zrA_cFP10fopAc_ac_c.s" +int daNpc_zrA_c::createHeapCallBack(fopAc_ac_c* i_this) { + return static_cast(i_this)->CreateHeap(); } -#pragma pop /* 80B7ABBC-80B7AC08 00279C 004C+00 2/2 0/0 0/0 .text ctrlJointCallBack__11daNpc_zrA_cFP8J3DJointi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::ctrlJointCallBack(J3DJoint* param_0, int param_1) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ctrlJointCallBack__11daNpc_zrA_cFP8J3DJointi.s" +int daNpc_zrA_c::ctrlJointCallBack(J3DJoint* i_joint, int param_1) { + if (param_1 == 0) { + J3DModel* model = j3dSys.getModel(); + daNpc_zrA_c* _this = (daNpc_zrA_c*)model->getUserArea(); + if (_this != NULL) { + _this->ctrlJoint(i_joint, model); + } + } + return 1; } -#pragma pop /* 80B7AC08-80B7ADF0 0027E8 01E8+00 1/0 0/0 0/0 .text setParam__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::setParam() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setParam__11daNpc_zrA_cFv.s" +void daNpc_zrA_c::setParam() { + u32 attn_flags = 0xa; + BOOL in_water = mAcch.ChkWaterIn(); + if (mTwilight) { + attn_flags = 0x80000a; + } + + selectAction(); + + if (!mTwilight && daPy_py_c::i_checkNowWolf()) { + attn_flags = 0; + } + + if (field_0x1521) { + field_0x14d0 = 0; + field_0x14d4 = 0; + + attn_flags = 2; + if (daPy_getPlayerActorClass()->checkSwimUp()) { + attn_flags = 0; + } + if (field_0x153c == true || mSwimMode == SWIM_TURN) { + attn_flags = 0; + } + + attention_info.field_0x0[0] = 64; + attention_info.field_0x0[1] = attention_info.field_0x0[0]; + attention_info.field_0x0[3] = 63; + } else { + if (mType != TYPE_WAIT && mType != TYPE_SPA && mType != TYPE_SEARCH + && (mType != TYPE_WATERFALL || mActionSelect != 0)) + { + attn_flags = 0; + } + + field_0x14d0 = 0; + field_0x14d4 = 0; + + attention_info.field_0x0[0] = getDistTableIdx(5, 6); + attention_info.field_0x0[1] = attention_info.field_0x0[0]; + attention_info.field_0x0[3] = getDistTableIdx(3, 6); + } + + attention_info.flags = attn_flags; + + scale.set(daNpc_zrA_Param_c::m.mScale, + daNpc_zrA_Param_c::m.mScale, + daNpc_zrA_Param_c::m.mScale); + if (mSwimMode != SWIM_WAIT) { + scale *= mScaleFactor; + } + + mAcchCir.SetWallR(daNpc_zrA_Param_c::m.mWallR); + mAcchCir.SetWallH(daNpc_zrA_Param_c::m.mWallH); + + if ((mType == TYPE_WAIT && !in_water) || mType == TYPE_SPA) { + gravity = daNpc_zrA_Param_c::m.mGravity; + } } -#pragma pop /* 80B7ADF0-80B7B0A4 0029D0 02B4+00 1/0 0/0 0/0 .text main__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::main() { + if (!doEvent()) { + mOrderEvtNo = EVT_NONE; + if (mpNextActionFn != NULL) { + if (mpActionFn == mpNextActionFn) { + (this->*mpActionFn)(NULL); + } else { + setAction(mpNextActionFn); + } + } + } + + if (checkHide()) { + attention_info.flags = 0; + } + + if (!daNpc_zrA_Param_c::m.mTest + && (!dComIfGp_event_runCheck() || (mOrderNewEvt && dComIfGp_getEvent().isOrderOK()))) + { + if (mOrderEvtNo != EVT_NONE) { + eventInfo.setArchiveName(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx]); + } + orderEvent(mOrderSpeakEvt, l_evtNames[l_evtGetParamList[mOrderEvtNo].fileIdx], + 0xffff, 4, 0xff, 2); + if (!mTwilight && mType == TYPE_WAIT && !field_0x1550) { + eventInfo.i_onCondition(dEvtCnd_CANTALKITEM_e); + } + } + + if (field_0x9ee) { + mExpressionMorfOverride = 0.0f; + mMotionMorfOverride = 0.0f; + field_0x9ee = false; + } + + playExpression(); + playMotion(); + + if (mAcch.ChkWaterIn()) { + setMotionWaterAnm(1); + } else { + setMotionWaterAnm(0); + } + + if (mWaterAnmFlags & ANM_PLAY_BTK) { + f32 speed = mWaterBtkAnm.getPlaySpeed(); + if (mWaterAnmFlags & ANM_PAUSE_BTK) { + mWaterBtkAnm.setPlaySpeed(0.0f); + } + mWaterBtkAnm.play(); + mWaterBtkAnm.setPlaySpeed(speed); + } + + if (mWaterAnmFlags & ANM_PLAY_BPK) { + f32 speed = mWaterBpkAnm.getPlaySpeed(); + if (mWaterAnmFlags & ANM_PAUSE_BPK) { + mWaterBpkAnm.setPlaySpeed(0.0f); + } + mWaterBpkAnm.play(); + mWaterBpkAnm.setPlaySpeed(speed); + } + + mWaterAnmFlags &= ~(ANM_PAUSE_ALL | ANM_PAUSE_BPK); + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::main() { +asm BOOL daNpc_zrA_c::main() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/main__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C55C-80B8C560 000104 0004+00 0/12 0/0 0/0 .rodata @5527 */ @@ -2611,14 +2876,41 @@ COMPILER_STRIP_GATE(0x80B8C560, &lit_5528); #pragma pop /* 80B7B0A4-80B7B1DC 002C84 0138+00 1/0 0/0 0/0 .text ctrlBtk__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::ctrlBtk() { + if (mpMatAnm != NULL) { + J3DAnmTextureSRTKey* btk_anm = NULL; + if (l_btkGetParamList[mBtkID].fileIdx >= 0) { + btk_anm = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[mBtkID].arcIdx], + l_btkGetParamList[mBtkID].fileIdx); + } + + if (btk_anm == mBtkAnm.getBtkAnm()) { + if (mBtkID == 0) { + mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.2f * -1.0f); + } else { + mpMatAnm->setNowOffsetX(cM_ssin(mEyeAngle.y) * 0.2f); + } + mpMatAnm->setNowOffsetY(cM_ssin(mEyeAngle.x) * 0.12f); + mpMatAnm->onEyeMoveFlag(); + return true; + } + mpMatAnm->offEyeMoveFlag(); + } + + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ctrlBtk() { +asm BOOL daNpc_zrA_c::ctrlBtk() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ctrlBtk__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C564-80B8C568 00010C 0004+00 0/1 0/0 0/0 .rodata @5769 */ @@ -2783,6 +3075,7 @@ static u8 lit_3887[12]; /* 80B8DA94-80B8DA98 000054 0004+00 1/1 0/0 0/0 .bss l_HIO */ static u8 l_HIO[4]; +#ifndef NONMATCHING /* 80B8DA98-80B8DAA8 000058 000C+04 0/1 0/0 0/0 .bss @5533 */ #pragma push #pragma force_active on @@ -2794,8 +3087,151 @@ static u8 lit_5533[12 + 4 /* padding */]; #pragma force_active on static u8 eyeOffset[12]; #pragma pop +#endif /* 80B7B1DC-80B7B91C 002DBC 0740+00 1/0 0/0 0/0 .text setAttnPos__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::setAttnPos() { + static cXyz eyeOffset(-20.0f, 10.0f, 0.0f); + f32 offset = daNpc_zrA_Param_c::m.mAttnOffsetY; + cXyz center, vec2, vec3, vec4, vec5; + + mDoMtx_stack_c::YrotS(field_0x990); + + cLib_addCalc2(&field_0x984[0], 0.0f, 0.1f, 125.0f); + cLib_addCalc2(&field_0x984[2], 0.0f, 0.1f, 125.0f); + + for (int i = 0; i < 3; i++) { + vec3.set(0.0f, 0.0f, field_0x984[i] * cM_ssin(field_0x992)); + mDoMtx_stack_c::multVec(&vec3, &vec4); + field_0x908[i].x = -vec4.z; + field_0x908[i].z = -vec4.x; + } + + cLib_chaseS(&field_0x992, 0, 0x555); + + if (mLookMode == LOOK_RESET) { + for (int i = 0; i < 3; i++) { + mLookatAngle[i].setall(0); + } + } + + J3DModelData* model_data = mpMorf->getModel()->getModelData(); + + for (u16 i = 0; i < model_data->getJointNum(); i++) { + switch (i) { + case 0: + case 1: + case 3: + case 4: + case 5: + case 14: + case 29: + model_data->getJointNodePointer(i)->setCallBack(ctrlJointCallBack); + break; + default: + model_data->getJointNodePointer(i)->setCallBack(NULL); + break; + } + } + + setMtx(); + lookat(); + setPrtcl(); + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&mHeadPos); + mDoMtx_stack_c::multVec(&eyeOffset, &eyePos); + eyeOffset.y = 0.0f; + mDoMtx_stack_c::multVec(&eyeOffset, &vec3); + mHeadAngle.x = cLib_targetAngleX(&mHeadPos, &vec3); + mHeadAngle.y = cLib_targetAngleY(&mHeadPos, &vec3); + + cXyz* attn_pos = mLookat.getAttnPos(); + if (attn_pos != NULL) { + vec2 = *attn_pos - eyePos; + mEyeAngle.y = -(mLookatAngle[2].y + mCurAngle.y); + mEyeAngle.y += cM_atan2s(vec2.x, vec2.z); + mEyeAngle.x = -cM_atan2s(vec2.y, vec2.absXZ()); + mEyeAngle.x += mHeadAngle.x; + } else { + mEyeAngle.x = mEyeAngle.y = 0; + } + + f32 height = 0.0f; + f32 radius = 0.0f; + vec2.set(0.0f, 0.0f, 0.0f); + if ((mType == TYPE_WAIT || mType == TYPE_SPA) && mActionType != ACT_TYPE_0) { + if (mType == TYPE_SPA || (mType == TYPE_WAIT + && (mActionType == ACT_TYPE_1 + || mActionType == ACT_TYPE_2 + || mActionType == ACT_TYPE_3))) + { + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(29)); + mDoMtx_stack_c::multVecZero(¢er); + center.y = current.pos.y; + radius = 70.0f; + } else { + center = current.pos; + } + + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::multVecZero(&vec5); + attention_info.position.set(vec5.x, vec5.y + 40.0f, vec5.z); + } else { + if (mType == TYPE_TOBIKOMI) { + height = 700.0f; + radius = 800.0f; + } else if (mType == TYPE_SWIM && mPath.getPathInfo() != NULL) { + height = -150.0f; + } + + center = current.pos; + attention_info.position.set(center.x, center.y + offset, center.z); + } + + if (!mHide) { + if (field_0x954 == 0) { + if (mType == TYPE_TOBIKOMI) { + mCcCyl.SetTgType(0x2020); + mCcCyl.SetTgSPrm(0x3f); + mCcCyl.OnTgNoHitMark(); + } else { + mCcCyl.SetTgType(0xd8fbfdff); + mCcCyl.SetTgSPrm(0x1f); + mCcCyl.OnTgNoHitMark(); + } + } else { + mCcCyl.SetTgType(0); + mCcCyl.SetTgSPrm(0); + } + + if (mType == TYPE_TOBIKOMI) { + mCcCyl.SetCoSPrm(0x379); + } else { + switch (mOrderEvtNo) { + case EVT_CARRY_WATERFALL: + case EVT_CARRY_WATERFALL_NIGHT: + mCcCyl.SetCoSPrm(0x179); + break; + default: + mCcCyl.SetCoSPrm(0x79); + break; + } + } + + mCcCyl.SetC(center); + mCcCyl.SetH(daNpc_zrA_Param_c::m.mCylH + height); + mCcCyl.SetR(daNpc_zrA_Param_c::m.mWallR + radius); + dComIfG_Ccsp()->Set(&mCcCyl); + } + + mCcCyl.ClrAtHit(); + mCcCyl.ClrTgHit(); + mCcCyl.ClrCoHit(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2804,8 +3240,29 @@ asm void daNpc_zrA_c::setAttnPos() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setAttnPos__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7B91C-80B7B9D4 0034FC 00B8+00 1/0 0/0 0/0 .text setMtx__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with weak functions +void daNpc_zrA_c::setMtx() { + J3DModel* model = mpMorf->getModel(); + cXyz pos = current.pos; + pos += mModulationOffset; + mDoMtx_stack_c::transS(pos); + mDoMtx_stack_c::ZXYrotM(mCurAngle); + mDoMtx_stack_c::scaleM(scale); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + model->setUserArea((u32)this); + + if (mAnmFlags & ANM_PLAY_BCK) { + mBckAnm.getBckAnm()->setFrame(mBckAnm.getFrame()); + mpMorf->modelCalc(); + } else { + mpMorf->modelCalc(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2814,40 +3271,289 @@ asm void daNpc_zrA_c::setMtx() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMtx__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7B9D4-80B7BD60 0035B4 038C+00 2/0 0/0 0/0 .text setExpressionAnm__11daNpc_zrA_cFib */ +#ifdef NONMATCHING +// matches with literals +bool daNpc_zrA_c::setExpressionAnm(int i_idx, bool i_modify) { + J3DAnmTransform* bck_anm = NULL; + int attr = 0; + mAnmFlags &= ~ANM_EXPRESSION_FLAGS; + + if (l_bckGetParamList[i_idx].fileIdx >= 0) { + bck_anm = getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[i_idx].arcIdx], + l_bckGetParamList[i_idx].fileIdx); + } + + bool res = false; + switch (i_idx) { + case ANM_NONE: + res = setExpressionBtp(0); + break; + case ANM_F_TALK_A: + res = setExpressionBtp(0); + break; + case ANM_F_TALK_A_SP: + res = setExpressionBtp(0); + break; + case ANM_F_WAIT_SWIM: + res = setExpressionBtp(0); + break; + case ANM_F_TALK_NOMAL: + res = setExpressionBtp(0); + break; + case ANM_FH_TALK_NOMAL: + res = setExpressionBtp(0); + attr = 2; + break; + case ANM_FH_SADSIT_A: + res = setExpressionBtp(1); + attr = 2; + break; + case ANM_FH_SADSIT_B: + res = setExpressionBtp(2); + attr = 2; + break; + case ANM_FH_SADSIT_C: + res = setExpressionBtp(3); + attr = 2; + break; + case ANM_FH_SADSIT_D: + res = setExpressionBtp(4); + attr = 2; + break; + case ANM_FH_SADSIT_E: + res = setExpressionBtp(5); + attr = 2; + break; + case ANM_F_LOOKING_SP: + res = setExpressionBtp(0); + break; + case ANM_FH_LOOKING_SP: + res = setExpressionBtp(0); + attr = 2; + break; + case ANM_F_LOOKUP: + res = setExpressionBtp(0); + break; + case ANM_FH_LOOKUP: + res = setExpressionBtp(0); + attr = 2; + break; + case ANM_F_TALK_SWIM_SP: + res = setExpressionBtp(0); + break; + case ANM_F_TALK_B_SP: + res = setExpressionBtp(0); + break; + case ANM_F_SPA_TALK_A: + res = setExpressionBtp(0); + break; + case ANM_FH_SPA_WAIT_A: + res = setExpressionBtp(0); + attr = 2; + break; + case ANM_F_SPA_TALK_B: + res = setExpressionBtp(6); + break; + case ANM_FH_SPA_WAIT_B: + res = setExpressionBtp(7); + attr = 2; + break; + default: + bck_anm = NULL; + break; + } + + if (!res) { + return false; + } + + if (bck_anm == NULL) { + return true; + } + + if (setBckAnm(bck_anm, 1.0f, attr, 0, -1, i_modify)) { + mAnmFlags |= ANM_PLAY_BCK | ANM_PAUSE_BCK; + mExpressionLoops = 0; + return true; + } + + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::setExpressionAnm(int param_0, bool param_1) { +asm bool daNpc_zrA_c::setExpressionAnm(int param_0, bool param_1) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpressionAnm__11daNpc_zrA_cFib.s" } #pragma pop +#endif /* 80B7BD60-80B7BE74 003940 0114+00 1/0 0/0 0/0 .text setExpressionBtp__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +bool daNpc_zrA_c::setExpressionBtp(int i_idx) { + J3DAnmTexPattern* btp_anm = NULL; + int attr = 0; + mAnmFlags &= ~(ANM_PLAY_BTP | ANM_PAUSE_BTP | ANM_FLAG_800); + + if (l_btpGetParamList[i_idx].fileIdx >= 0) { + btp_anm = getTexPtrnAnmP(l_resNames[l_btpGetParamList[i_idx].arcIdx], + l_btpGetParamList[i_idx].fileIdx); + } + + switch (i_idx) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 7: + attr = 2; + break; + case 6: + break; + default: + btp_anm = NULL; + break; + } + + if (btp_anm == NULL) { + return true; + } + + if (setBtpAnm(btp_anm, mpMorf->getModel()->getModelData(), 1.0f, attr)) { + mAnmFlags |= ANM_PLAY_BTP | ANM_PAUSE_BTP; + if (i_idx == 0) { + mAnmFlags |= ANM_FLAG_800; + } + return true; + } + + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::setExpressionBtp(int param_0) { +asm bool daNpc_zrA_c::setExpressionBtp(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpressionBtp__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B7BE74-80B7BEA0 003A54 002C+00 1/0 0/0 0/0 .text setExpression__11daNpc_zrA_cFif */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::setExpression(int param_0, f32 param_1) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpression__11daNpc_zrA_cFif.s" +void daNpc_zrA_c::setExpression(int i_expression, f32 i_morf) { + if (i_expression >= 0 && i_expression < 0x15) { + mExpression = i_expression; + mExpressionMorfOverride = i_morf; + mExpressionPrevPhase = -1; + mExpressionPhase = 0; + } } -#pragma pop /* 80B7BEA0-80B7C070 003A80 01D0+00 2/0 0/0 0/0 .text setMotionAnm__11daNpc_zrA_cFif */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::setMotionAnm(int i_idx, f32 i_morf) { + J3DAnmTransformKey* bck_anm = NULL; + J3DAnmTextureSRTKey* btk_anm = NULL; + int btk_idx = 0; + int attr = 2; + mBaseMotionAnm = i_idx; + + if (mAcch.ChkWaterIn()) { + btk_idx = 3; + } + + if (mSoldierType == SOLDIER_SPEAR && mBaseMotionAnm >= 0x29 && mBaseMotionAnm <= 0x33) { + i_idx += 0xb; + } + + mAnmFlags &= ~(ANM_PLAY_MORF | ANM_PLAY_BTK | ANM_PAUSE_MORF | ANM_PAUSE_BTK); + + if (l_bckGetParamList[i_idx].fileIdx >= 0) { + bck_anm = getTrnsfrmKeyAnmP(l_resNames[l_bckGetParamList[i_idx].arcIdx], + l_bckGetParamList[i_idx].fileIdx); + } + + switch (i_idx) { + case ANM_SWIM_TURN: + case ANM_STILL: + case ANM_SWIM_TALK: + case ANM_TOBIKOMI_S: + case ANM_TOBIKOMI_E: + case ANM_SPA_TALK_B: + case ANM_SPA_TALK_A: + case ANM_TALK_A: + case ANM_DIVE: + case ANM_DIVE_B: + case ANM_FLOAT: + case ANM_FLOAT_B: + case ANM_STEP: + case ANM_TALK_A_SP: + case ANM_DIVE_SP: + case ANM_DIVE_B_SP: + case ANM_FLOAT_SP: + case ANM_FLOAT_B_SP: + case ANM_STEP_SP: + attr = 0; + break; + case ANM_FALLSWIM: + case ANM_SADSIT_A: + case ANM_SADSIT_B: + case ANM_SADSIT_C: + case ANM_SADSIT_D: + case ANM_SADSIT_E: + case ANM_TOBIKOMI_T: + case ANM_LOOKING_SP: + case ANM_TALK_SWIM_SP: + case ANM_TALK_B_SP: + case ANM_LOOKUP: + case ANM_SPA_WAIT_B: + case ANM_SPA_WAIT_A: + case ANM_WAIT_A: + case ANM_WALK_A: + case ANM_SWIM_A: + case ANM_SWIM_B: + case ANM_WAIT_SWIM: + case ANM_WAIT_SP: + case ANM_WALK_A_SP: + case ANM_SWIM_A_SP: + case ANM_SWIM_B_SP: + case ANM_WAIT_SWIM_SP: + break; + default: + bck_anm = NULL; + btk_anm = NULL; + break; + } + + if (l_btkGetParamList[btk_idx].fileIdx >= 0) { + btk_anm = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[btk_idx].arcIdx], + l_btkGetParamList[btk_idx].fileIdx); + } + + if (btk_anm != NULL && setBtkAnm(btk_anm, mpMorf->getModel()->getModelData(), 1.0f, 2)) { + mAnmFlags |= ANM_PLAY_BTK | ANM_PAUSE_BTK; + } + + mBtkID = btk_idx; + + if (bck_anm != NULL && setMcaMorfAnm(bck_anm, 1.0f, i_morf, attr, 0, -1)) { + mAnmFlags |= ANM_PLAY_MORF | ANM_PAUSE_MORF; + mMotionLoops = 0; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2856,9 +3562,83 @@ asm void daNpc_zrA_c::setMotionAnm(int param_0, f32 param_1) { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMotionAnm__11daNpc_zrA_cFif.s" } #pragma pop +#endif /* 80B7C070-80B7C308 003C50 0298+00 2/2 0/0 0/0 .text setMotionWaterAnm__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::setMotionWaterAnm(int i_idx) { + J3DAnmTevRegKey* brk_anm = NULL; + J3DAnmTextureSRTKey* btk_anm = NULL; + J3DAnmColor* bpk_anm = NULL; + int btk_idx = 0; + int bpk_idx = 0; + mAnmFlags &= ~(ANM_PLAY_BRK | ANM_PAUSE_BRK); + mWaterAnmFlags &= ~(ANM_PLAY_BTK | ANM_PAUSE_BTK | ANM_PLAY_BPK | ANM_PAUSE_BPK); + + if (!mTwilight) { + if (l_brkGetParamList[i_idx].fileIdx >= 0) { + brk_anm = getTevRegKeyAnmP(l_resNames[l_brkGetParamList[i_idx].arcIdx], + l_brkGetParamList[i_idx].fileIdx); + } + } + + switch (i_idx) { + case 0: + btk_idx = 2; + bpk_idx = i_idx; + break; + case 1: + btk_idx = i_idx; + bpk_idx = i_idx; + break; + default: + brk_anm = NULL; + } + + mBpkID = bpk_idx; + + if (brk_anm != NULL) { + if (mBrkAnm.getBrkAnm() == brk_anm) { + mAnmFlags |= ANM_PLAY_BRK; + } else if (setBrkAnm(brk_anm, mpMorf->getModel()->getModelData(), 1.0f, 2)) { + mAnmFlags |= ANM_PLAY_BRK | ANM_PAUSE_BRK; + } + } + + if (!mTwilight) { + if (l_btkGetParamList[btk_idx].fileIdx >= 0) { + btk_anm = getTexSRTKeyAnmP(l_resNames[l_btkGetParamList[btk_idx].arcIdx], + l_btkGetParamList[btk_idx].fileIdx); + } + } + + if (btk_anm != NULL) { + if (mWaterBtkAnm.getBtkAnm() == btk_anm) { + mWaterAnmFlags |= ANM_PLAY_BTK; + } else if (mWaterBtkAnm.init(mpMorf->getModel()->getModelData(), + btk_anm, 1, 2, 1.0f, 0, -1)) { + mWaterAnmFlags |= ANM_PLAY_BTK | ANM_PAUSE_BTK; + } + } + + if (l_bpkGetParamList[bpk_idx].fileIdx >= 0) { + bpk_anm = static_cast( + dComIfG_getObjectRes(l_resNames[l_bpkGetParamList[bpk_idx].arcIdx], + l_bpkGetParamList[bpk_idx].fileIdx)); + } + + if (bpk_anm != NULL) { + if (mWaterBpkAnm.getBpkAnm() == bpk_anm) { + mWaterAnmFlags |= ANM_PLAY_BPK; + } else if (mWaterBpkAnm.init(mpMorf->getModel()->getModelData(), + bpk_anm, 1, 2, 1.0f, 0, -1)) { + mWaterAnmFlags |= ANM_PLAY_BPK | ANM_PAUSE_BPK; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2867,19 +3647,23 @@ asm void daNpc_zrA_c::setMotionWaterAnm(int param_0) { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMotionWaterAnm__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B7C308-80B7C34C 003EE8 0044+00 1/0 0/0 0/0 .text setMotion__11daNpc_zrA_cFifi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::setMotion(int param_0, f32 param_1, int param_2) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMotion__11daNpc_zrA_cFifi.s" +void daNpc_zrA_c::setMotion(int i_motion, f32 i_morf, BOOL i_restart) { + s16 motion = i_motion; + if (i_restart || mMotion != motion) { + if (i_motion >= 0 && i_motion < 0x24) { + mMotion = motion; + mMotionMorfOverride = i_morf; + mMotionPrevPhase = -1; + mMotionPhase = 0; + } + } } -#pragma pop /* 80B7C34C-80B7C354 003F2C 0008+00 1/0 0/0 0/0 .text drawDbgInfo__11daNpc_zrA_cFv */ -bool daNpc_zrA_c::drawDbgInfo() { +BOOL daNpc_zrA_c::drawDbgInfo() { return false; } @@ -2893,6 +3677,31 @@ SECTION_RODATA static u8 const l_jntNumTbl[36] = { COMPILER_STRIP_GATE(0x80B8C588, &l_jntNumTbl); /* 80B7C354-80B7C44C 003F34 00F8+00 1/0 0/0 0/0 .text drawOtherMdls__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::drawOtherMdls() { + static int const l_jntNumTbl[3][3] = { + {4, 25, -1}, + {4, -1, -1}, + {-1, -1, -1}, + }; + + if (mSoldierType != SOLDIER_NONE) { + for (int i = 0; i < 3; i++) { + int jnt_no = l_jntNumTbl[mSoldierType][i]; + J3DModel* model = mpObjectModel[i]; + if (model != NULL && jnt_no >= 0) { + g_env_light.setLightTevColorType_MAJI(model, &tevStr); + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(jnt_no)); + mDoMtx_stack_c::scaleM(scale); + model->setBaseTRMtx(mDoMtx_stack_c::get()); + mDoExt_modelUpdateDL(model); + dComIfGd_addRealShadow(mShadowKey, model); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2901,66 +3710,124 @@ asm void daNpc_zrA_c::drawOtherMdls() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/drawOtherMdls__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7C44C-80B7C4B4 00402C 0068+00 2/1 0/0 0/0 .text getTypeFromArgument__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with data +daNpc_zrA_c::Type daNpc_zrA_c::getTypeFromArgument() { + switch (subtype) { + case 0: + return TYPE_WAIT; + case 1: + return TYPE_SWIM; + case 2: + return TYPE_WATERFALL; + case 3: + return TYPE_RIVER; + case 4: + return TYPE_TOBIKOMI; + case 5: + return TYPE_SEARCH; + case 6: + return TYPE_SPA; + default: + return TYPE_WAIT; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::getTypeFromArgument() { +asm daNpc_zrA_c::Type daNpc_zrA_c::getTypeFromArgument() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getTypeFromArgument__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7C4B4-80B7C500 004094 004C+00 1/1 0/0 0/0 .text getSoldierTypeFromParam__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::getSoldierTypeFromParam() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getSoldierTypeFromParam__11daNpc_zrA_cFv.s" +daNpc_zrA_c::SoldierType daNpc_zrA_c::getSoldierTypeFromParam() { + if (mType == TYPE_WATERFALL || mType == TYPE_SEARCH) { + return SOLDIER_NOSPEAR; + } + + if (mType == TYPE_TOBIKOMI) { + return SOLDIER_NONE; + } + + switch (fopAcM_GetParam(this) & 0xff) { + case 0: + return SOLDIER_SPEAR; + default: + return SOLDIER_NONE; + } } -#pragma pop /* 80B7C500-80B7C524 0040E0 0024+00 1/1 0/0 0/0 .text getGameModeFromParam__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::getGameModeFromParam() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getGameModeFromParam__11daNpc_zrA_cFv.s" +daNpc_zrA_c::GameMode daNpc_zrA_c::getGameModeFromParam() { + switch ((fopAcM_GetParam(this) >> 0x14) & 0xf) { + case 1: + return GAME_MODE_3; + default: + return GAME_MODE_0; + } } -#pragma pop /* 80B7C524-80B7C5E4 004104 00C0+00 1/1 0/0 0/0 .text getActionTypeFromParam__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::getActionTypeFromParam() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getActionTypeFromParam__11daNpc_zrA_cFv.s" +daNpc_zrA_c::ActionType daNpc_zrA_c::getActionTypeFromParam() { + u8 param = (fopAcM_GetParam(this) >> 0x10) & 0xf; + if (mType == TYPE_WAIT) { + switch (param) { + case 1: + return ACT_TYPE_1; + case 2: + return ACT_TYPE_2; + case 3: + return ACT_TYPE_3; + case 4: + return ACT_TYPE_4; + case 5: + return ACT_TYPE_5; + case 6: + return ACT_TYPE_6; + default: + return ACT_TYPE_0; + } + } else if (mType == TYPE_SPA) { + switch (param) { + case 1: + return ACT_TYPE_2; + case 2: + return ACT_TYPE_3; + default: + return ACT_TYPE_0; + } + } else { + return (ActionType)param; + } } -#pragma pop /* 80B7C5E4-80B7C614 0041C4 0030+00 3/3 0/0 0/0 .text getMultiModeFromParam__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::getMultiModeFromParam() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiModeFromParam__11daNpc_zrA_cFv.s" +u8 daNpc_zrA_c::getMultiModeFromParam() { + u8 param = (fopAcM_GetParam(this) >> 0x14) & 0xf; + if (mType != 0) { + return 0; + } + if (param == 0xf) { + param = 0; + } + return param; } -#pragma pop /* 80B7C614-80B7C644 0041F4 0030+00 2/2 0/0 0/0 .text getMultiNoFromParam__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::getMultiNoFromParam() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiNoFromParam__11daNpc_zrA_cFv.s" +u8 daNpc_zrA_c::getMultiNoFromParam() { + u8 param = (fopAcM_GetParam(this) >> 0x18) & 0xf; + if (mType != 0) { + return 0; + } + return param == 0xf ? (u8)0 : param; } -#pragma pop /* ############################################################################################## */ /* 80B8CD30-80B8CD30 0008D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -2970,14 +3837,29 @@ SECTION_DEAD static char const* const stringBase_80B8CE77 = "F_SP115"; #pragma pop /* 80B7C644-80B7C71C 004224 00D8+00 1/1 0/0 0/0 .text isDelete__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::isDelete() { + if ((mType == TYPE_SEARCH && dComIfGs_isSwitch(mSwitch1, fopAcM_GetRoomNo(this))) + || (mType == TYPE_SPA && !daNpcF_chkEvtBit(0x10a)) + || (mType == TYPE_RIVER && mGameMode == GAME_MODE_3 + && (strcmp(dComIfGp_getStartStageName(), "F_SP115") || fopAcM_GetRoomNo(this) != 0 + || dComIfGs_getStartPoint() != 2))) + { + return true; + } + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::isDelete() { +asm BOOL daNpc_zrA_c::isDelete() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/isDelete__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C5AC-80B8C5B0 000154 0004+00 0/5 0/0 0/0 .rodata @6278 */ @@ -2988,6 +3870,102 @@ COMPILER_STRIP_GATE(0x80B8C5AC, &lit_6278); #pragma pop /* 80B7C71C-80B7CA8C 0042FC 0370+00 1/1 0/0 0/0 .text reset__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::reset() { + initialize(); + mpMatAnm->initialize(); + mPath.initialize(); + if (mType != TYPE_TOBIKOMI + && mPath.setPathInfo(getPathNoFromParam(), fopAcM_GetRoomNo(this), 0)) + { + mPath.setRange(100.0f); + } + mLookat.initialize(); + for (int i = 0; i < 3; i++) { + mActorMngr[i].initialize(); + } + + mpNextActionFn = NULL; + mpActionFn = NULL; + field_0x14d0 = 0; + field_0x14d4 = 0; + mSwimTurnTimer = 0; + field_0x14dc = 0; + mLookMode = -1; + mMode = 0; + mHide = false; + mItemID = -1; + + current.pos = home.pos; + old.pos = current.pos; + current.angle.set(0, home.angle.y, 0); + old.angle = current.angle; + shape_angle = current.angle; + mCurAngle = current.angle; + mOldAngle = mCurAngle; + speedF = 0.0f; + speed.setall(0.0f); + + if ((mType == TYPE_SWIM && mPath.getPathInfo() != NULL) || mType == TYPE_WATERFALL) { + fopAcM_OnStatus(this, 0x8000000); + } + + mBtkID = 0; + field_0x1510 = 0; + + if (mType == TYPE_RIVER) { + mStaffName = l_myName[2]; + } else if (mType == TYPE_WATERFALL) { + mStaffName = l_myName[3]; + } else { + mStaffName = l_myName[0]; + } + + mSpinAngle = 0; + mSpinTimer = 0; + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + mSwimMode = SWIM_WAIT; + field_0x1521 = false; + mWaistAngle.set(0, 0, 0); + mSwimAngleCalc = current.angle; + field_0x153c = false; + field_0x153d = false; + field_0x153e = false; + mSwimFastTurnTimer = 0; + mSwimSpeed.set(0.0f, 0.0f, 0.0f); + mEvasionTimer = 0; + mCheckSwimTurnTimer = 0; + mCheckSwimTurn = false; + mResetWaistAngle = false; + field_0x1550 = false; + field_0x1554 = 0; + mModulationOffset.set(0.0f, 0.0f, 0.0f); + mModulationParam = 210; + mActionType = getActionTypeFromParam(); + mIsAboveWater = false; + mIsTurning = false; + mActionSelect = 0; + mMeterCount = 0; + mRiverPathIdx = 0; + field_0x15c0 = 0; + field_0x15c1 = false; + mWaterAnmFlags = 0; + + if (mType == TYPE_SEARCH) { + if (getNoFromParam() == 0) { + eventInfo.setIdx(1); + } else { + eventInfo.setIdx(2); + } + } else if (mType == TYPE_WAIT && getMultiModeFromParam() != 0) { + eventInfo.setIdx(getMultiNoFromParam()); + } + + field_0x9ee = 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -2996,6 +3974,7 @@ asm void daNpc_zrA_c::reset() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/reset__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C5B0-80B8C5BC 000158 000C+00 0/1 0/0 0/0 .rodata @6282 */ @@ -3500,6 +4479,70 @@ COMPILER_STRIP_GATE(0x80B8C79C, &lit_6333); #pragma pop /* 80B7CA8C-80B7D0FC 00466C 0670+00 1/1 0/0 0/0 .text playExpression__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::playExpression() { + daNpcF_anmPlayData dat0a = {ANM_F_TALK_NOMAL, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat0b = {ANM_FH_TALK_NOMAL, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat0[2] = {&dat0a, &dat0b}; + daNpcF_anmPlayData dat1 = {ANM_FH_SADSIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat1[1] = {&dat1}; + daNpcF_anmPlayData dat2 = {ANM_FH_SADSIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat2[1] = {&dat2}; + daNpcF_anmPlayData dat3 = {ANM_FH_SADSIT_C, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat3[1] = {&dat3}; + daNpcF_anmPlayData dat4 = {ANM_FH_SADSIT_D, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat4[1] = {&dat4}; + daNpcF_anmPlayData dat5 = {ANM_FH_SADSIT_E, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat5[1] = {&dat5}; + daNpcF_anmPlayData dat6a = {ANM_F_LOOKING_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat6b = {ANM_FH_LOOKING_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat6[2] = {&dat6a, &dat6b}; + daNpcF_anmPlayData dat7a = {ANM_F_LOOKUP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat7b = {ANM_FH_LOOKUP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat7[2] = {&dat7a, &dat7b}; + daNpcF_anmPlayData dat8a = {ANM_F_SPA_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat8b = {ANM_FH_SPA_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat8[2] = {&dat8a, &dat8b}; + daNpcF_anmPlayData dat9a = {ANM_F_SPA_TALK_B, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat9b = {ANM_FH_SPA_WAIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat9[2] = {&dat9a, &dat9b}; + daNpcF_anmPlayData dat10a = {ANM_F_TALK_SWIM_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat10b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat10[2] = {&dat10a, &dat10b}; + daNpcF_anmPlayData dat11a = {ANM_F_TALK_B_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat11b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat11[2] = {&dat11a, &dat11b}; + daNpcF_anmPlayData dat12a = {ANM_F_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat12b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat12[2] = {&dat12a, &dat12b}; + daNpcF_anmPlayData dat13a = {ANM_F_WAIT_SWIM, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat13b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat13[2] = {&dat13a, &dat13b}; + daNpcF_anmPlayData dat14a = {ANM_F_TALK_A_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat14b = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat14[2] = {&dat14a, &dat14b}; + daNpcF_anmPlayData dat15 = {ANM_FH_TALK_NOMAL, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat15[1] = {&dat15}; + daNpcF_anmPlayData dat16 = {ANM_FH_LOOKING_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat16[1] = {&dat16}; + daNpcF_anmPlayData dat17 = {ANM_FH_LOOKUP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat17[1] = {&dat17}; + daNpcF_anmPlayData dat18 = {ANM_FH_SPA_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat18[1] = {&dat18}; + daNpcF_anmPlayData dat19 = {ANM_FH_SPA_WAIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat19[1] = {&dat19}; + daNpcF_anmPlayData dat20 = {ANM_NONE, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat20[1] = {&dat20}; + daNpcF_anmPlayData** ppDat[21] = { + pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10, pDat11, + pDat12, pDat13, pDat14, pDat15, pDat16, pDat17, pDat18, pDat19, pDat20, + }; + if (mExpression >= 0 && mExpression < 0x15) { + playExpressionAnm(ppDat); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -3508,6 +4551,7 @@ asm void daNpc_zrA_c::playExpression() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/playExpression__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8C7A0-80B8C7F4 000348 0054+00 0/0 0/0 0/0 .rodata @6334 */ @@ -4371,6 +5415,105 @@ SECTION_RODATA static f32 const lit_6507 = 0.5f; COMPILER_STRIP_GATE(0x80B8CBA4, &lit_6507); /* 80B7D0FC-80B7DAF4 004CDC 09F8+00 1/1 0/0 0/0 .text playMotion__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::playMotion() { + daNpcF_anmPlayData dat0 = {ANM_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat0[1] = {&dat0}; + daNpcF_anmPlayData dat1 = {ANM_WAIT_SWIM, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat1[1] = {&dat1}; + daNpcF_anmPlayData dat2a = {ANM_SWIM_TALK, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat2b = {ANM_WAIT_SWIM, 0.0f, 0}; + daNpcF_anmPlayData* pDat2[2] = {&dat2a, &dat2b}; + daNpcF_anmPlayData dat3 = {ANM_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat3[1] = {&dat3}; + daNpcF_anmPlayData dat4 = {ANM_WAIT_SWIM, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat4[1] = {&dat4}; + daNpcF_anmPlayData dat5a = {ANM_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat5b = {ANM_WAIT_A, 0.0f, 0}; + daNpcF_anmPlayData* pDat5[2] = {&dat5a, &dat5b}; + daNpcF_anmPlayData dat6 = {ANM_SADSIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat6[1] = {&dat6}; + daNpcF_anmPlayData dat7 = {ANM_SADSIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat7[1] = {&dat7}; + daNpcF_anmPlayData dat8 = {ANM_SADSIT_C, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat8[1] = {&dat8}; + daNpcF_anmPlayData dat9 = {ANM_SADSIT_D, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat9[1] = {&dat9}; + daNpcF_anmPlayData dat10 = {ANM_SADSIT_E, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat10[1] = {&dat10}; + daNpcF_anmPlayData dat11 = {ANM_LOOKING_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat11[1] = {&dat11}; + daNpcF_anmPlayData dat12 = {ANM_LOOKUP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat12[1] = {&dat12}; + daNpcF_anmPlayData dat13a = {ANM_SPA_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat13b = {ANM_SPA_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat13[2] = {&dat13a, &dat13b}; + daNpcF_anmPlayData dat14a = {ANM_SPA_TALK_B, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat14b = {ANM_SPA_WAIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat14[2] = {&dat14a, &dat14b}; + daNpcF_anmPlayData dat15a = {ANM_TALK_SWIM_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat15b = {ANM_WAIT_SWIM_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat15[2] = {&dat15a, &dat15b}; + daNpcF_anmPlayData dat16a = {ANM_TALK_B_SP, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat16b = {ANM_WAIT_SP, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat16[2] = {&dat16a, &dat16b}; + daNpcF_anmPlayData dat17a = {ANM_TALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat17b = {ANM_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat17[2] = {&dat17a, &dat17b}; + daNpcF_anmPlayData dat18 = {ANM_SPA_WAIT_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat18[1] = {&dat18}; + daNpcF_anmPlayData dat19 = {ANM_SPA_WAIT_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat19[1] = {&dat19}; + daNpcF_anmPlayData dat20 = {ANM_WALK_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat20[1] = {&dat20}; + daNpcF_anmPlayData dat22 = {ANM_SWIM_A, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat22[1] = {&dat22}; + daNpcF_anmPlayData dat23 = {ANM_SWIM_B, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat23[1] = {&dat23}; + daNpcF_anmPlayData dat24a = {ANM_DIVE, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat24b = {ANM_SWIM_A, 0.0f, 0}; + daNpcF_anmPlayData* pDat24[2] = {&dat24a, &dat24b}; + daNpcF_anmPlayData dat25a = {ANM_DIVE_B, 3.0f, 1}; + daNpcF_anmPlayData dat25b = {ANM_SWIM_A, 0.0f, 0}; + daNpcF_anmPlayData* pDat25[2] = {&dat25a, &dat25b}; + daNpcF_anmPlayData dat26a = {ANM_DIVE, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat26b = {ANM_SWIM_B, 0.5f * daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat26[2] = {&dat26a, &dat26b}; + daNpcF_anmPlayData dat27a = {ANM_DIVE_B, 3.0f, 1}; + daNpcF_anmPlayData dat27b = {ANM_SWIM_B, 0.5f * daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat27[2] = {&dat27a, &dat27b}; + daNpcF_anmPlayData dat28 = {ANM_STEP, 2.0f, 0}; + daNpcF_anmPlayData* pDat28[1] = {&dat28}; + daNpcF_anmPlayData dat29a = {ANM_FLOAT, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat29b = {ANM_WAIT_SWIM, 2.0f, 0}; + daNpcF_anmPlayData* pDat29[2] = {&dat29a, &dat29b}; + daNpcF_anmPlayData dat30a = {ANM_FLOAT_B, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat30b = {ANM_WAIT_SWIM, 2.0f, 0}; + daNpcF_anmPlayData* pDat30[2] = {&dat30a, &dat30b}; + daNpcF_anmPlayData dat31a = {ANM_SWIM_TURN, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat31b = {ANM_STILL, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat31[2] = {&dat31a, &dat31b}; + daNpcF_anmPlayData dat32 = {ANM_TOBIKOMI_S, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat32[1] = {&dat32}; + daNpcF_anmPlayData dat33 = {ANM_TOBIKOMI_T, 0.0f, 0}; + daNpcF_anmPlayData* pDat33[1] = {&dat33}; + daNpcF_anmPlayData dat34a = {ANM_TOBIKOMI_E, daNpc_zrA_Param_c::m.mMorfFrames, 1}; + daNpcF_anmPlayData dat34b = {ANM_SWIM_A, 0.0f, 0}; + daNpcF_anmPlayData* pDat34[2] = {&dat34a, &dat34b}; + daNpcF_anmPlayData dat35 = {ANM_FALLSWIM, daNpc_zrA_Param_c::m.mMorfFrames, 0}; + daNpcF_anmPlayData* pDat35[1] = {&dat35}; + daNpcF_anmPlayData** ppDat[36] = { + pDat0, pDat1, pDat2, pDat3, pDat4, pDat5, pDat6, pDat7, pDat8, pDat9, pDat10, pDat11, + pDat12, pDat13, pDat14, pDat15, pDat16, pDat17, pDat18, pDat19, pDat20, NULL, pDat22, + pDat23, pDat24, pDat25, pDat26, pDat27, pDat28, pDat29, pDat30, pDat31, pDat32, + pDat33, pDat34, pDat35, + }; + if (mMotion >= 0 && mMotion < 0x24) { + playMotionAnm(ppDat); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4379,38 +5522,137 @@ asm void daNpc_zrA_c::playMotion() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/playMotion__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7DAF4-80B7DB20 0056D4 002C+00 1/1 0/0 0/0 .text * chkAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::chkAction(int (daNpc_zrA_c::*param_0)(void*)) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s" +BOOL daNpc_zrA_c::chkAction(ActionFn i_action) { + return mpActionFn == i_action; } -#pragma pop /* 80B7DB20-80B7DBC8 005700 00A8+00 15/15 0/0 0/0 .text * setAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::setAction(int (daNpc_zrA_c::*param_0)(void*)) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s" +bool daNpc_zrA_c::setAction(ActionFn i_action) { + mMode = 3; + if (mpActionFn != NULL) { + (this->*mpActionFn)(NULL); + } + mMode = 0; + mpActionFn = i_action; + if (mpActionFn != NULL) { + (this->*mpActionFn)(NULL); + } + return true; } -#pragma pop /* 80B7DBC8-80B7DF40 0057A8 0378+00 4/1 0/0 0/0 .text selectAction__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with data +bool daNpc_zrA_c::selectAction() { + mpNextActionFn = NULL; + if (daNpc_zrA_Param_c::m.mTest) { + mpNextActionFn = &test; + } else { + switch (mType) { + case TYPE_SWIM: + mpNextActionFn = &swim; + break; + case TYPE_WATERFALL: + switch (mActionSelect) { + case 0: + mpNextActionFn = &waitWaterfall; + break; + case 1: + mpNextActionFn = &swimWaterfall; + break; + case 2: + break; + case 3: + mpNextActionFn = &diveWaterfall; + break; + } + break; + case TYPE_RIVER: + switch (mActionSelect) { + case 0: + mpNextActionFn = &waitRiverDescend; + break; + case 1: + mpNextActionFn = &swimRiverDescend; + break; + case 6: + mpNextActionFn = &returnRiverDescend; + break; + case 3: + mpNextActionFn = &diveRiverDescend; + break; + case 4: + mpNextActionFn = &swimGoalRiverDescend; + break; + default: + mpNextActionFn = &swimRiverDescend2; + break; + } + break; + case TYPE_TOBIKOMI: + switch (mActionSelect) { + case 0: + mpNextActionFn = &tobiSearch; + break; + case 1: + mpNextActionFn = &tobiWait; + break; + case 2: + mpNextActionFn = &tobikomi1; + break; + case 3: + mpNextActionFn = &tobikomi2; + break; + case 4: + mpNextActionFn = &tobikomi3; + break; + case 5: + mpNextActionFn = &tobiJump; + break; + case 6: + mpNextActionFn = &tobiEnd; + break; + } + break; + case TYPE_SEARCH: + switch (mActionSelect) { + case 0: + mpNextActionFn = &waitSearch; + break; + } + break; + case TYPE_SPA: + mpNextActionFn = &waitSpa; + break; + case TYPE_WAIT: + if (mActionType == ACT_TYPE_6) { + mpNextActionFn = &waitLake; + } else { + mpNextActionFn = &wait; + } + break; + default: + mpNextActionFn = &waitLake; + break; + } + } + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::selectAction() { +asm bool daNpc_zrA_c::selectAction() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/selectAction__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CD30-80B8CD30 0008D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -4420,34 +5662,183 @@ SECTION_DEAD static char const* const stringBase_80B8CE7F = "NO_RESPONSE"; #pragma pop /* 80B7DF40-80B7E668 005B20 0728+00 1/1 0/0 0/0 .text doEvent__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// issues with loading g_dComIfG_gameInfo.play.mEvent +BOOL daNpc_zrA_c::doEvent() { + BOOL ret = false; + + if (dComIfGp_event_runCheck()) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + if (eventInfo.checkCommandTalk() || eventInfo.i_checkCommandDemoAccrpt()) { + mOrderNewEvt = false; + } + + if (eventInfo.checkCommandTalk()) { + if (field_0x1521 == true && mType == TYPE_SWIM) { + mOrderEvtNo = EVT_TALK_SWIM; + changeEvent(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx], + l_evtNames[l_evtGetParamList[mOrderEvtNo].fileIdx], 1, 0xffff); + mStaffName = l_myName[1]; + } else if (mType == TYPE_WATERFALL) { + if (chkAction(&talkSwim)) { + (this->*mpActionFn)(NULL); + } else if (!dComIfGp_event_chkTalkXY() || dComIfGp_evmng_ChkPresentEnd()) { + setAction(&talkSwim); + } + } else if (mType == TYPE_SEARCH) { + mOrderEvtNo = EVT_SEARCH_PRINCE; + changeEvent(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx], + l_evtNames[l_evtGetParamList[mOrderEvtNo].fileIdx], 1, 0xffff); + } else if (mType == TYPE_WAIT && getMultiModeFromParam() != 0) { + if (getMultiModeFromParam() == 1) { + mOrderEvtNo = EVT_TALK_MULTI; + } else { + mOrderEvtNo = EVT_TALK_MULTI2; + } + changeEvent(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx], + l_evtNames[l_evtGetParamList[mOrderEvtNo].fileIdx], 1, 0xffff); + } else { + if (chkAction(&talk)) { + (this->*mpActionFn)(NULL); + } else if (dComIfGp_event_chkTalkXY()) { + if (dComIfGp_evmng_ChkPresentEnd()) { + if (dComIfGp_event_getPreItemNo() == 0x91) { + if (mSoldierType != SOLDIER_NONE) { + if (home.angle.x == 0x6d) { + mFlowID = 4; + } else { + mFlowID = 5; + } + } else { + mFlowID = 6; + } + setAction(&talk); + } else { + s16 event_idx = + dComIfGp_getEventManager().getEventIdx(this, "NO_RESPONSE", 0xff); + dComIfGp_getEvent().reset(this); + fopAcM_orderChangeEventId(this, event_idx, 1, 0xffff); + field_0x9ec = true; + } + } + } else { + setAction(&talk); + } + } + ret = true; + } else { + if (mItemID != -1) { + dComIfGp_event_setItemPartnerId(mItemID); + mItemID = -1; + } + + int staff_id = event_manager.getMyStaffId(mStaffName, this, 0); + if (staff_id != -1) { + mCutIndex = staff_id; + int act_idx = event_manager.getMyActIdx(staff_id, mEvtCutNameList, 11, 0, 0); + if ((this->*mEvtCutList[act_idx])(staff_id)) { + event_manager.cutEnd(staff_id); + } + ret = true; + } + + if (eventInfo.i_checkCommandDemoAccrpt()) { + if (mEventIdx != -1 && event_manager.endCheck(mEventIdx)) { + switch (mOrderEvtNo) { + case EVT_TALK_SWIM: + dComIfGp_event_reset(); + setAction(&swim); + mOrderEvtNo = 0; + mEventIdx = -1; + mStaffName = l_myName[0]; + break; + case EVT_THANKS_BLAST: + case EVT_RESULT_ANNOUNCE: + dComIfGp_event_reset(); + mActionSelect = 5; + setAction(&returnRiverDescend); + mOrderEvtNo = 0; + mEventIdx = -1; + dComIfGs_offSwitch(mSwitch1, fopAcM_GetRoomNo(this)); + dComIfGs_offSwitch(mSwitch2, fopAcM_GetRoomNo(this)); + break; + case EVT_CARRY_WATERFALL: + case EVT_CARRY_WATERFALL_NIGHT: + dComIfGp_event_reset(); + mActionSelect = 3; + setAction(&diveWaterfall); + mOrderEvtNo = 0; + mEventIdx = -1; + break; + default: + dComIfGp_event_reset(); + mOrderEvtNo = 0; + mEventIdx = -1; + break; + } + } else { + switch (mOrderEvtNo) { + case EVT_CARRY_WATERFALL: + setSkipZev(EVT_CARRY_WATERFALL, EVT_CARRY_WATERFALL_SKIP); + break; + case EVT_CARRY_WATERFALL_NIGHT: + setSkipZev(EVT_CARRY_WATERFALL_NIGHT, EVT_CARRY_WATERFALL_NIGHT_SKIP); + break; + } + } + } + } + + int prev_msg_timer = mMsgTimer; + int expression, motion; + if (ctrlMsgAnm(expression, motion, this, false)) { + if (!field_0x9eb) { + setExpression(expression, -1.0f); + setMotion(motion, -1.0f, false); + } + } else { + if (!field_0x9eb && prev_msg_timer != 0 && mMsgTimer == 0) { + setExpressionTalkAfter(); + } + } + } + + if (!ret) { + if (mCutIndex != -1) { + mpActionFn = NULL; + mCutIndex = -1; + } + mMsgTimer = 0; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::doEvent() { +asm BOOL daNpc_zrA_c::doEvent() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/doEvent__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7E668-80B7E6F4 006248 008C+00 1/1 0/0 0/0 .text setSkipZev__11daNpc_zrA_cFii */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::setSkipZev(int param_0, int param_1) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setSkipZev__11daNpc_zrA_cFii.s" +BOOL daNpc_zrA_c::setSkipZev(int i_idx1, int i_idx2) { + if (!strcmp(dComIfGp_getEventManager().getRunEventName(), l_evtNames[i_idx1])) { + dComIfGp_getEvent().setSkipZev(this, l_evtNames[i_idx2]); + return true; + } + return false; } -#pragma pop /* 80B7E6F4-80B7E718 0062D4 0024+00 27/27 0/0 0/0 .text setLookMode__11daNpc_zrA_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::setLookMode(int param_0) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setLookMode__11daNpc_zrA_cFi.s" +void daNpc_zrA_c::setLookMode(int i_lookMode) { + if (i_lookMode >= 0 && i_lookMode < 6 && i_lookMode != mLookMode) { + mLookMode = i_lookMode; + } } -#pragma pop /* ############################################################################################## */ /* 80B8CBA8-80B8CBB4 000750 000C+00 0/1 0/0 0/0 .rodata @6771 */ @@ -4474,6 +5865,65 @@ COMPILER_STRIP_GATE(0x80B8CBB8, &lit_6832); #pragma pop /* 80B7E718-80B7E9E0 0062F8 02C8+00 1/1 0/0 0/0 .text lookat__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +void daNpc_zrA_c::lookat() { + fopAc_ac_c* attn_actor = NULL; + J3DModel* model = mpMorf->getModel(); + BOOL snap = false; + f32 body_down_angle = daNpc_zrA_Param_c::m.mBodyDownAngle; + f32 body_up_angle = daNpc_zrA_Param_c::m.mBodyUpAngle; + f32 body_right_angle = daNpc_zrA_Param_c::m.mBodyRightAngle; + f32 body_left_angle = daNpc_zrA_Param_c::m.mBodyLeftAngle; + f32 head_down_angle = daNpc_zrA_Param_c::m.mHeadDownAngle; + f32 head_up_angle = daNpc_zrA_Param_c::m.mHeadUpAngle; + f32 head_right_angle = daNpc_zrA_Param_c::m.mHeadRightAngle; + f32 head_left_angle = daNpc_zrA_Param_c::m.mHeadLeftAngle; + s16 angle_delta = mCurAngle.y - mOldAngle.y; + cXyz lookat_pos[3] = {mLookatPos[0], mLookatPos[1], mLookatPos[2]}; + csXyz* lookat_angle[3] = {&mLookatAngle[0], &mLookatAngle[1], &mLookatAngle[2]}; + + switch (mLookMode) { + case LOOK_RESET: + snap = true; + break; + case LOOK_PLAYER: + case LOOK_PLAYER_TALK: + attn_actor = daPy_getPlayerActorClass(); + if (mLookMode == LOOK_PLAYER_TALK) { + head_right_angle = -80.0f; + head_left_angle = 80.0f; + } + break; + case LOOK_ACTOR: + attn_actor = mActorMngr[2].getActorP(); + break; + case LOOK_ATTN: + attn_actor = mActorMngr[1].getActorP(); + break; + } + + if (attn_actor != NULL) { + mLookPos = attn_actor->attention_info.position; + if (mLookMode != LOOK_PLAYER && mLookMode != LOOK_PLAYER_TALK && mLookMode != LOOK_ATTN) { + mLookPos.y -= 40.0f; + } + mLookat.setAttnPos(&mLookPos); + if (mBaseMotionAnm != ANM_WAIT_SWIM && mBaseMotionAnm != ANM_SWIM_TALK + && mBaseMotionAnm != ANM_TALK_SWIM_SP && mBaseMotionAnm != ANM_WAIT_SWIM_SP) + { + body_up_angle = body_down_angle = 0.0f; + } + } else { + mLookat.setAttnPos(NULL); + } + + mLookat.setParam(body_down_angle, body_up_angle, body_right_angle, body_left_angle, + 0.0f, 0.0f, 0.0f, 0.0f, + head_down_angle, head_up_angle, head_right_angle, head_left_angle, + mCurAngle.y, lookat_pos); + mLookat.calc(this, model->getBaseTRMtx(), lookat_angle, snap, angle_delta, false); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4482,18 +5932,52 @@ asm void daNpc_zrA_c::lookat() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/lookat__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7E9E0-80B7EA90 0065C0 00B0+00 1/1 0/0 0/0 .text chkFindPlayer__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::chkFindPlayer() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkFindPlayer__11daNpc_zrA_cFv.s" +BOOL daNpc_zrA_c::chkFindPlayer() { + BOOL check; + if (mActorMngr[0].getActorP() == NULL) { + check = chkPlayerInSpeakArea(this); + } else { + check = chkPlayerInTalkArea(this); + } + + if (check) { + mActorMngr[0].entry(daPy_getPlayerActorClass()); + } else { + mActorMngr[0].remove(); + } + + return check; } -#pragma pop /* 80B7EA90-80B7EBA0 006670 0110+00 1/1 0/0 0/0 .text setExpressionTalkAfter__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::setExpressionTalkAfter() { + switch (mExpression) { + case EXPR_TALK_NOMAL: + setExpression(EXPR_TALK_NOMAL_2, -1.0f); + break; + case EXPR_LOOKING_SP: + setExpression(EXPR_LOOKING_SP_2, -1.0f); + break; + case EXPR_LOOKUP: + setExpression(EXPR_LOOKUP_2, -1.0f); + break; + case EXPR_SPA_TALK_A: + setExpression(EXPR_SPA_WAIT_A, -1.0f); + break; + case EXPR_SPA_TALK_B: + setExpression(EXPR_SPA_WAIT_B, -1.0f); + break; + default: + setExpression(EXPR_NONE, -1.0f); + break; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4502,6 +5986,7 @@ asm void daNpc_zrA_c::setExpressionTalkAfter() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpressionTalkAfter__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CBBC-80B8CBC0 000764 0004+00 1/7 0/0 0/0 .rodata @6920 */ @@ -4509,6 +5994,22 @@ SECTION_RODATA static f32 const lit_6920 = 1.5f; COMPILER_STRIP_GATE(0x80B8CBBC, &lit_6920); /* 80B7EBA0-80B7EC54 006780 00B4+00 1/1 0/0 0/0 .text setPrtcl__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::setPrtcl() { + u32 flags = 0x40002; + cXyz ptcl_scale(1.5f, 1.5f, 1.5f); + if (field_0x1550) { + if (cLib_calcTimer(&field_0x1554) != 0) { + flags |= 0x20000; + } else { + field_0x1554 = 10; + } + } + mPaPo.setEffectCenter(&tevStr, ¤t.pos, 1, flags, NULL, NULL, &ptcl_scale, + fopAcM_GetRoomNo(this), 1.0f, speedF); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4517,67 +6018,77 @@ asm void daNpc_zrA_c::setPrtcl() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setPrtcl__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7EC54-80B7ED38 006834 00E4+00 1/0 0/0 0/0 .text test__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::test(void* param_0) { + switch (mMode) { + case 0: + speedF = 0.0f; + speed.setall(0.0f); + mMode = 2; + // fallthrough + + case 2: + if (daNpc_zrA_Param_c::m.mTestExpression != mExpression) { + setExpression(daNpc_zrA_Param_c::m.mTestExpression, daNpc_zrA_Param_c::m.mMorfFrames); + } + setMotion(daNpc_zrA_Param_c::m.mTestMotion, daNpc_zrA_Param_c::m.mMorfFrames, false); + setLookMode(daNpc_zrA_Param_c::m.mTestLookMode); + mOrderEvtNo = EVT_NONE; + attention_info.flags = 0; + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::test(void* param_0) { +asm BOOL daNpc_zrA_c::test(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/test__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B7ED38-80B7ED58 006918 0020+00 1/0 0/0 0/0 .text daNpc_zrA_Create__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daNpc_zrA_Create(void* param_0) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Create__FPv.s" +static cPhs__Step daNpc_zrA_Create(void* i_this) { + return static_cast(i_this)->create(); } -#pragma pop /* 80B7ED58-80B7ED78 006938 0020+00 1/0 0/0 0/0 .text daNpc_zrA_Delete__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daNpc_zrA_Delete(void* param_0) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Delete__FPv.s" +static int daNpc_zrA_Delete(void* i_this) { + return static_cast(i_this)->Delete(); } -#pragma pop /* 80B7ED78-80B7ED98 006958 0020+00 1/0 0/0 0/0 .text daNpc_zrA_Execute__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daNpc_zrA_Execute(void* param_0) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Execute__FPv.s" +static int daNpc_zrA_Execute(void* i_this) { + return static_cast(i_this)->Execute(); } -#pragma pop /* 80B7ED98-80B7EDB8 006978 0020+00 1/0 0/0 0/0 .text daNpc_zrA_Draw__FPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daNpc_zrA_Draw(void* param_0) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Draw__FPv.s" +static int daNpc_zrA_Draw(void* i_this) { + return static_cast(i_this)->Draw(); } -#pragma pop /* 80B7EDB8-80B7EDC0 006998 0008+00 1/0 0/0 0/0 .text daNpc_zrA_IsDelete__FPv */ -static bool daNpc_zrA_IsDelete(void* param_0) { - return true; +static int daNpc_zrA_IsDelete(void* i_this) { + return 1; } /* 80B7EDC0-80B7EDF0 0069A0 0030+00 1/0 0/0 0/0 .text calc__11J3DTexNoAnmCFPUs */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DTexNoAnm::calc(u16* param_0) const { +// asm void J3DTexNoAnm::calc(u16* param_0) const { +extern "C" asm void calc__11J3DTexNoAnmCFPUs() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calc__11J3DTexNoAnmCFPUs.s" } @@ -4587,7 +6098,8 @@ asm void J3DTexNoAnm::calc(u16* param_0) const { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcF_ActorMngr_c::~daNpcF_ActorMngr_c() { +// asm daNpcF_ActorMngr_c::~daNpcF_ActorMngr_c() { +extern "C" asm void __dt__18daNpcF_ActorMngr_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__18daNpcF_ActorMngr_cFv.s" } @@ -4597,7 +6109,8 @@ asm daNpcF_ActorMngr_c::~daNpcF_ActorMngr_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcF_ActorMngr_c::daNpcF_ActorMngr_c() { +// asm daNpcF_ActorMngr_c::daNpcF_ActorMngr_c() { +extern "C" asm void __ct__18daNpcF_ActorMngr_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__ct__18daNpcF_ActorMngr_cFv.s" } @@ -4607,7 +6120,8 @@ asm daNpcF_ActorMngr_c::daNpcF_ActorMngr_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcF_Lookat_c::~daNpcF_Lookat_c() { +// asm daNpcF_Lookat_c::~daNpcF_Lookat_c() { +extern "C" asm void __dt__15daNpcF_Lookat_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__15daNpcF_Lookat_cFv.s" } @@ -4617,19 +6131,22 @@ asm daNpcF_Lookat_c::~daNpcF_Lookat_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm csXyz::~csXyz() { +// asm csXyz::~csXyz() { +extern "C" asm void __dt__5csXyzFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__5csXyzFv.s" } #pragma pop /* 80B7EF80-80B7EF84 006B60 0004+00 2/2 0/0 0/0 .text __ct__5csXyzFv */ -csXyz::csXyz() { +// csXyz::csXyz() { +extern "C" void __ct__5csXyzFv() { /* empty function */ } /* 80B7EF84-80B7EF88 006B64 0004+00 2/2 0/0 0/0 .text __ct__4cXyzFv */ -cXyz::cXyz() { +// cXyz::cXyz() { +extern "C" void __ct__4cXyzFv() { /* empty function */ } @@ -4637,7 +6154,8 @@ cXyz::cXyz() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpc_zrA_Path_c::~daNpc_zrA_Path_c() { +// asm daNpc_zrA_Path_c::~daNpc_zrA_Path_c() { +extern "C" asm void __dt__16daNpc_zrA_Path_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__16daNpc_zrA_Path_cFv.s" } @@ -4647,7 +6165,8 @@ asm daNpc_zrA_Path_c::~daNpc_zrA_Path_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcF_Path_c::~daNpcF_Path_c() { +// asm daNpcF_Path_c::~daNpcF_Path_c() { +extern "C" asm void __dt__13daNpcF_Path_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__13daNpcF_Path_cFv.s" } @@ -4657,7 +6176,8 @@ asm daNpcF_Path_c::~daNpcF_Path_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcF_SPCurve_c::~daNpcF_SPCurve_c() { +// asm daNpcF_SPCurve_c::~daNpcF_SPCurve_c() { +extern "C" asm void __dt__16daNpcF_SPCurve_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__16daNpcF_SPCurve_cFv.s" } @@ -4667,7 +6187,8 @@ asm daNpcF_SPCurve_c::~daNpcF_SPCurve_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DFrameCtrl::~J3DFrameCtrl() { +// asm J3DFrameCtrl::~J3DFrameCtrl() { +extern "C" asm void __dt__12J3DFrameCtrlFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__12J3DFrameCtrlFv.s" } @@ -4677,7 +6198,8 @@ asm J3DFrameCtrl::~J3DFrameCtrl() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcF_c::~daNpcF_c() { +// asm daNpcF_c::~daNpcF_c() { +extern "C" asm void __dt__8daNpcF_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__8daNpcF_cFv.s" } @@ -4687,7 +6209,8 @@ asm daNpcF_c::~daNpcF_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm daNpcF_c::daNpcF_c() { +// asm daNpcF_c::daNpcF_c() { +extern "C" asm void __ct__8daNpcF_cFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__ct__8daNpcF_cFv.s" } @@ -4697,7 +6220,8 @@ asm daNpcF_c::daNpcF_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_AcchCir::~dBgS_AcchCir() { +// asm dBgS_AcchCir::~dBgS_AcchCir() { +extern "C" asm void __dt__12dBgS_AcchCirFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__12dBgS_AcchCirFv.s" } @@ -4707,7 +6231,8 @@ asm dBgS_AcchCir::~dBgS_AcchCir() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dCcD_GStts::~dCcD_GStts() { +// asm dCcD_GStts::~dCcD_GStts() { +extern "C" asm void __dt__10dCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__10dCcD_GSttsFv.s" } @@ -4717,7 +6242,8 @@ asm dCcD_GStts::~dCcD_GStts() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm dBgS_ObjAcch::~dBgS_ObjAcch() { +// asm dBgS_ObjAcch::~dBgS_ObjAcch() { +extern "C" asm void __dt__12dBgS_ObjAcchFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__12dBgS_ObjAcchFv.s" } @@ -4732,7 +6258,8 @@ void daNpcF_c::setCollisions() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cCcD_GStts::~cCcD_GStts() { +// asm cCcD_GStts::~cCcD_GStts() { +extern "C" asm void __dt__10cCcD_GSttsFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__10cCcD_GSttsFv.s" } @@ -4973,16 +6500,137 @@ REGISTER_CTORS(0x80B7F760, __sinit_d_a_npc_zra_cpp); #pragma pop /* 80B7F8C4-80B7FD10 0074A4 044C+00 3/0 0/0 0/0 .text wait__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::wait(void* param_0) { + switch (mMode) { + case 0: + if (field_0x1510 == 0) { + if (mPath.getPathInfo() == NULL) { + if (mAcch.ChkWaterIn()) { + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + } else { + switch (mActionType) { + case ACT_TYPE_1: + setExpression(EXPR_SADSIT_A, -1.0f); + setMotion(MOT_SADSIT_A, -1.0f, false); + break; + case ACT_TYPE_2: + setExpression(EXPR_SADSIT_B, -1.0f); + setMotion(MOT_SADSIT_B, -1.0f, false); + break; + case ACT_TYPE_3: + setExpression(EXPR_SADSIT_C, -1.0f); + setMotion(MOT_SADSIT_C, -1.0f, false); + break; + case ACT_TYPE_4: + setExpression(EXPR_SADSIT_D, -1.0f); + setMotion(MOT_SADSIT_D, -1.0f, false); + break; + case ACT_TYPE_5: + setExpression(EXPR_SADSIT_E, -1.0f); + setMotion(MOT_SADSIT_E, -1.0f, false); + break; + default: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + break; + } + } + } else { + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WALK_A, -1.0f, false); + field_0x1510 = 1; + } + } else { + setMotion(MOT_WALK_A, -1.0f, false); + } + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + mMode = 2; + // fallthrough + + case 2: + if (field_0x1510 != 0) { + walkCalc(); + } else { + waitCalc(); + } + + if (field_0x954 == 0 && !mTwilight) { + BOOL player_attn = mActorMngr[0].getActorP() != NULL; + if (chkFindPlayer2(player_attn, shape_angle.y)) { + if (!player_attn) { + mActorMngr[0].entry(daPy_getPlayerActorClass()); + mTurnMode = 0; + } + } else { + if (player_attn) { + mActorMngr[0].remove(); + mTurnMode = 0; + } + } + + if (mActorMngr[0].getActorP() != NULL) { + setLookMode(LOOK_PLAYER); + } else { + setLookMode(LOOK_NONE); + if (field_0x1510 == 0 && home.angle.y != mCurAngle.y) { + if (mAcch.ChkWaterIn()) { + if (step(home.angle.y, -1, -1, 15)) { + mMode = 0; + } + } else { + if (step(home.angle.y, EXPR_NONE, MOT_STEP, 15)) { + mMode = 0; + } + } + } + } + } + break; + + case 3: + speedF = 0.0f; + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::wait(void* param_0) { +asm BOOL daNpc_zrA_c::wait(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/wait__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B7FD10-80B7FE18 0078F0 0108+00 1/1 0/0 0/0 .text walkCalc__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with weak functions +void daNpc_zrA_c::walkCalc() { + field_0x1550 = false; + cXyz next_pnt; + if (mPath.getDstPosDstXZ(current.pos, next_pnt)) { + mPath.reverse(); + mPath.getDstPosDstXZ(current.pos, next_pnt); + } + s16 target_angle = cLib_targetAngleY(¤t.pos, &next_pnt); + speedF = daNpc_zrA_Param_c::m.mWalkSpeed; + mpMorf->setPlaySpeed(daNpc_zrA_Param_c::m.mWalkSpeed / daNpc_zrA_Param_c::m.mWalkAnmRate); + cLib_addCalcAngleS2(¤t.angle.y, target_angle, + daNpc_zrA_Param_c::m.mWalkAngleScale, daNpc_zrA_Param_c::m.mWalkAngleSpeed); + mCurAngle = current.angle; + shape_angle = mCurAngle; + mOldAngle.y = mCurAngle.y; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4991,8 +6639,54 @@ asm void daNpc_zrA_c::walkCalc() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/walkCalc__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B7FE18-80B800A4 0079F8 028C+00 1/1 0/0 0/0 .text waitCalc__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::waitCalc() { + if (mAcch.ChkWaterIn()) { + if (mMotion != MOT_WAIT_SWIM) { + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_SWIM, -1.0f, false); + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + } + field_0x1550 = true; + calcModulation(); + } else { + field_0x1550 = false; + if (mMotion == MOT_WAIT_SWIM) { + switch (mActionType) { + case ACT_TYPE_1: + setExpression(EXPR_SADSIT_A, -1.0f); + setMotion(MOT_SADSIT_A, -1.0f, false); + break; + case ACT_TYPE_2: + setExpression(EXPR_SADSIT_B, -1.0f); + setMotion(MOT_SADSIT_B, -1.0f, false); + break; + case ACT_TYPE_3: + setExpression(EXPR_SADSIT_C, -1.0f); + setMotion(MOT_SADSIT_C, -1.0f, false); + break; + case ACT_TYPE_4: + setExpression(EXPR_SADSIT_D, -1.0f); + setMotion(MOT_SADSIT_D, -1.0f, false); + break; + case ACT_TYPE_5: + setExpression(EXPR_SADSIT_E, -1.0f); + setMotion(MOT_SADSIT_E, -1.0f, false); + break; + default: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + } + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5001,46 +6695,207 @@ asm void daNpc_zrA_c::waitCalc() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitCalc__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B800A4-80B80228 007C84 0184+00 1/0 0/0 0/0 .text waitSpa__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::waitSpa(void* param_0) { + switch (mMode) { + case 0: + switch (mActionType) { + case ACT_TYPE_2: + setExpression(EXPR_SPA_WAIT_A, -1.0f); + setMotion(MOT_SPA_WAIT_A, -1.0f, false); + field_0x9ea = true; + break; + case ACT_TYPE_3: + setExpression(EXPR_SPA_WAIT_B, -1.0f); + setMotion(MOT_SPA_WAIT_B, -1.0f, false); + field_0x9ea = true; + break; + default: + setExpression(EXPR_LOOKUP_2, -1.0f); + setMotion(MOT_LOOKUP, -1.0f, false); + field_0x9ea = true; + break; + } + + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + mMode = 2; + break; + + case 2: + break; + + case 3: + speedF = 0.0f; + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::waitSpa(void* param_0) { +asm BOOL daNpc_zrA_c::waitSpa(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitSpa__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B80228-80B80418 007E08 01F0+00 1/0 0/0 0/0 .text waitLake__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::waitLake(void* param_0) { + switch (mMode) { + case 0: + setExpression(EXPR_LOOKING_SP_2, -1.0f); + setMotion(MOT_LOOKING_SP, -1.0f, false); + setLookMode(LOOK_NONE); + mTurnMode = 0; + mMode = 2; + // fallthrough + + case 2: + if (field_0x954 == 0 && !mTwilight) { + if (mActorMngr[0].getActorP() != NULL) { + if (!chkFindPlayer()) { + mTurnMode = 0; + } + } else { + if (chkFindPlayer()) { + mTurnMode = 0; + } + } + + if (mActorMngr[0].getActorP() != NULL) { + setLookMode(LOOK_PLAYER); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + } else { + setLookMode(LOOK_NONE); + if (home.angle.y != mCurAngle.y) { + if (step(home.angle.y, EXPR_NONE, MOT_STEP, 15)) { + mMode = 0; + } + } else { + setExpression(EXPR_LOOKING_SP_2, -1.0f); + setMotion(MOT_LOOKING_SP, -1.0f, false); + } + } + } + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::waitLake(void* param_0) { +asm BOOL daNpc_zrA_c::waitLake(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitLake__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B80418-80B8064C 007FF8 0234+00 3/0 0/0 0/0 .text talk__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::talk(void* param_0) { + BOOL ret = false; + BOOL bvar2 = false; + + switch (mMode) { + case 0: + if (field_0x954 != 0) { + break; + } + + initTalk(mFlowID, NULL); + mTurnMode = 0; + mMode = 2; + // fallthrough + + case 2: + if (mType != TYPE_SPA) { + calcModulation(); + } + + if (field_0x9ea || mTwilight) { + bvar2 = true; + } else { + setLookMode(LOOK_PLAYER_TALK); + mActorMngr[0].entry(daPy_getPlayerActorClass()); + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + bvar2 = true; + } else if (mAcch.ChkWaterIn()) { + if (step(fopAcM_searchPlayerAngleY(this), -1, -1, 15)) { + mTurnMode = 0; + } + } else { + if (step(fopAcM_searchPlayerAngleY(this), EXPR_NONE, MOT_STEP, 15)) { + setMotion(MOT_WAIT_A, -1.0f, false); + mTurnMode = 0; + } + } + } + + if (bvar2 && talkProc(NULL, true, NULL)) { + ret = true; + } + + if (ret) { + mMode = 3; + if (!field_0x9ec) { + dComIfGp_event_reset(); + setAction(&wait); + } + field_0x9ec = false; + } + break; + + case 3: + mFlowID = home.angle.x; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::talk(void* param_0) { +asm BOOL daNpc_zrA_c::talk(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/talk__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B8064C-80B806FC 00822C 00B0+00 1/1 0/0 0/0 .text s_subMulti__FPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void s_subMulti(void* param_0, void* param_1) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMulti__FPvPv.s" +static void* s_subMulti(void* i_proc, void* i_this) { + if (fopAc_IsActor(i_proc) && fopAcM_GetName(i_proc) == PROC_NPC_ZRA) { + daNpc_zrA_c* _this = static_cast(i_this); + daNpc_zrA_c* other = static_cast(i_proc); + if (other != _this && other->getType() == daNpc_zrA_c::TYPE_WAIT + && other->getMultiModeFromParam() != 0 + && other->getMultiModeFromParam() == _this->getMultiModeFromParam() + && other->getMultiNoFromParam() == 2) + { + return other; + } + } + return NULL; } -#pragma pop /* ############################################################################################## */ /* 80B8CD30-80B8CD30 0008D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -5050,106 +6905,699 @@ SECTION_DEAD static char const* const stringBase_80B8CE8B = "prm"; #pragma pop /* 80B806FC-80B80860 0082DC 0164+00 1/0 0/0 0/0 .text ECut_talkMulti__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::ECut_talkMulti(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + + fopAc_ac_c* actors[2] = {NULL, NULL}; + actors[0] = this; + actors[1] = mActorMngr[2].getActorP(); + + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + mActorMngr[2].remove(); + break; + case 10: + initTalk(mFlowID, actors); + break; + } + } + + switch (prm) { + case 0: + if (mActorMngr[2].getActorP() == NULL) { + fopAc_ac_c* other = (fopAc_ac_c*)(fpcM_Search(s_subMulti, this)); + if (other != NULL) { + mActorMngr[2].entry(other); + ret = true; + } + } else { + ret = true; + } + break; + + case 10: + if (talkProc(NULL, false, actors)) { + ret = true; + } + break; + + default: + ret = true; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_talkMulti(int param_0) { +asm BOOL daNpc_zrA_c::ECut_talkMulti(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_talkMulti__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B80860-80B80A94 008440 0234+00 2/0 0/0 0/0 .text swim__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::swim(void* param_0) { + switch (mMode) { + case 0: + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + field_0x153d = false; + setExpression(EXPR_NONE, -1.0f); + + if (mSwimMode == SWIM_WAIT) { + if (mPath.getPathInfo() == NULL) { + setMotion(MOT_WAIT_SWIM, -1.0f, false); + field_0x1550 = true; + } else { + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_SWIM_A, -1.0f, false); + } + + mCheckSwimTurnTimer = cLib_getRndValue(3, 3); + mSpinTimer = (int)(cM_rnd() * 60.0f) + 90; + mSwimMode = SWIM_RAIL; + field_0x1521 = true; + mScaleFactor = daNpc_zrA_Param_c::m.mMaxScaleFactor; + mCcStts.SetWeight(0); + } + } else { + mSwimMode = SWIM_RAIL; + } + + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + mMode = 2; + field_0x153e = false; + mSwimAngleCalc = current.angle; + if (mSwimMode != SWIM_WAIT) { + calcWaistAngleInit(); + } + // fallthrough + + case 2: + switch (mSwimMode) { + case SWIM_WAIT: + waitSwim(); + break; + case SWIM_RAIL: + railSwim(); + break; + case SWIM_TURN: + turnSwim(); + break; + } + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::swim(void* param_0) { +asm BOOL daNpc_zrA_c::swim(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/swim__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B80A94-80B81788 008674 0CF4+00 1/1 0/0 0/0 .text railSwim__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals and generics +BOOL daNpc_zrA_c::railSwim() { + s16 ang_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + s16 ang_scale = 8; + f32 fvar15 = 0.1f; + f32 fvar2 = 1.0f; + f32 fvar3 = mSwimSpeedScale; + f32 water_height = mAcch.m_wtr.GetHeight(); + gravity = 0.0f; + cXyz vec0, swim_speed, vec1, vec2; + csXyz angle; + + if (field_0x153c) { + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::scaleM(scale); + mDoMtx_stack_c::multVecZero(&vec1); + mPath.getDstPosDst2(current.pos, vec2); + + if (field_0x153e) { + if (mpMorf->getFrame() > 13.0f && mpMorf->getFrame() < 21.0f) { + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 0.3f, 0.7f, 0.3f); + mpMorf->setPlaySpeed(play_speed); + } + + calcBank(ang_step, 8, current.angle.y, current.angle.z); + mSwimSpeed.y -= 2.2f; + current.pos += mSwimSpeed; + + if (current.angle.x < 0x2800) { + current.angle.x = -cM_atan2s(mSwimSpeed.y, mSwimSpeed.absXZ()); + } + + mCurAngle = current.angle; + shape_angle = mCurAngle; + + if (mIsAboveWater && vec1.y + mSwimSpeed.y <= water_height) { + cXyz water_pos = vec1; + water_pos.y = water_height; + fopKyM_createWpillar(&water_pos, 2.5f, 0); + mIsAboveWater = false; + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH, 0, -1); + } + + if (current.pos.y <= water_height - daNpc_zrA_Param_c::m.mMinDepth) { + field_0x153e = false; + field_0x153c = false; + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeed.absXZ(); + mpMorf->setPlaySpeed(1.0f); + } + + return true; + } + + angle.x = -0x3000; + angle.y = current.angle.y; + angle.z = current.angle.z; + mSpinTimer = 90; + + if (!(vec1.y < water_height)) { + if (!mIsAboveWater) { + cXyz pos = vec1; + pos.y = water_height; + fopKyM_createWpillar(&pos, 2.5f, 0); + mIsAboveWater = true; + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH_OUT, 0, -1); + } else { + if (mpMorf->getFrame() > 13.0f && mpMorf->getFrame() < 17.0f) { + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 0.3f, 0.7f, 0.5f); + mpMorf->setPlaySpeed(play_speed); + } + + if (current.pos.y > water_height && current.angle.x < -0x2000 + && mSwimSpeedF > 20.0f) + { + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + mSwimSpeed = swim_speed; + field_0x153e = true; + calcBank(ang_step, 8, angle.y, angle.z); + current.angle.z = angle.z; + mCurAngle = current.angle; + shape_angle = mCurAngle; + return true; + } + } + } + } else { + BOOL ivar9 = mPath.getDstPosDst2(current.pos, vec0); + angle.x = cLib_targetAngleX(&vec0, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &vec0); + angle.z = current.angle.z; + evasionCalc(vec0, angle); + + if (ivar9) { + cXyz next_pos; + mPath.getNextPos(next_pos); + s16 ang_x = cLib_targetAngleX(&next_pos, &vec0); + s16 ang_y = cLib_targetAngleY(&vec0, &next_pos); + u32 arg0 = mPath.getArg0(mPath.getIdx()); + if (((arg0 == 0 && cM_rnd() < 0.5f) || (u8)arg0 == 1) && mSpinTimer != 0) { + mSwimSpeedScale = 1.5f; + fvar3 = mSwimSpeedScale; + mSpinTimer = 90; + field_0x153d = true; + } else if (field_0x153d) { + field_0x153d = false; + field_0x153c = true; + angle.x = -0x3000; + angle.y = current.angle.y; + mCheckSwimTurn = false; + } else if ((abs(angle.x - ang_x) > 0x4000 || abs(angle.x - ang_y) > 0x4000) + && cM_rnd() < 0.2f && mSpinTimer != 0) { + field_0x153c = false; + mSwimFastTurnTimer = 60; + mSwimSpeedScale = 1.2f; + fvar3 = mSwimSpeedScale; + mSpinTimer = 90; + } else { + field_0x153c = false; + cLib_calcTimer(&mCheckSwimTurnTimer); + } + } + + if (turnSwimCheck()) { + return true; + } + } + + if (cLib_calcTimer(&mSwimFastTurnTimer) != 0) { + ang_scale = 4; + ang_step *= 2; + } + + s16 ang_diff_x = angle.x - current.angle.x; + s16 ang_diff_y = angle.y - current.angle.y; + bool bvar6 = false; + if (mActionType != ACT_TYPE_0 && mSpinAngle == 0 && !field_0x153c && !field_0x153d + && (abs(ang_diff_x) > 0x3000 || abs(ang_diff_y) > 0x3000) && mSwimSpeedF > 14.0f) + { + f32 frame = mpMorf->getFrame(); + if ((angle.z <= 0x2000 || ang_diff_y >= 0) && (angle.z >= -0x2000 || ang_diff_y <= 0)) { + if (ang_diff_x < -0x3000) { + if (frame >= 2.0f && frame <= 4.0f) { + bvar6 = true; + } + } else { + if (frame >= 16.0f && frame <= 18.0f) { + bvar6 = true; + } + } + } + + if (bvar6) { + calcSwimAngle(angle, mSwimAngleCalc, ang_scale / 2, ang_step); + } else { + calcSwimAngle(angle, mSwimAngleCalc, ang_scale, ang_step / 2); + } + } else { + calcSwimAngle(angle, mSwimAngleCalc, ang_scale, ang_step); + } + + if (mSwimSpeedF > fvar3 * daNpc_zrA_Param_c::m.mSwimSpeed) { + fvar15 *= 2.0f; + fvar2 *= 0.5f; + } + cLib_addCalc2(&mSwimSpeedF, fvar3 * daNpc_zrA_Param_c::m.mSwimSpeed, fvar15, fvar2); + + if (field_0x153c == true && mIsAboveWater == true) { + if (mpMorf->getFrame() > 13.0f && mpMorf->getFrame() < 21.0f) { + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 0.3f, 0.7f, 0.3f); + mpMorf->setPlaySpeed(play_speed); + } + } else if (!bvar6) { + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, mSwimSpeedF / daNpc_zrA_Param_c::m.mSwimAnmRate, 0.2f, 0.1f); + mpMorf->setPlaySpeed(play_speed); + } + + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + + if (!field_0x153c && mAcch.ChkWaterHit() + && current.pos.y > water_height - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = water_height - daNpc_zrA_Param_c::m.mMinDepth; + } + + if (cLib_calcTimer(&mSpinTimer) == 0) { + if (mSpinAngle != 0) { + cLib_addCalcAngleS2(&field_0x1518, ang_step, 8, 0x200); + if (mSpinAngle > 0) { + angle.z += ang_step; + mSpinAngle += ang_step; + } else { + angle.z -= ang_step; + mSpinAngle -= ang_step; + } + if (abs(mSpinAngle) > 0x10000) { + mSpinAngle = 0; + mSpinTimer = (int)(cM_rnd() * 60.0f) + 90; + } + } else if (cM_rnd() > 0.9f) { + calcBank(ang_step, ang_scale, angle.y, angle.z); + field_0x1518 = abs(angle.z - current.angle.z); + cLib_addCalcAngleS2(&field_0x1518, ang_step, 8, 0x200); + if (angle.z > 0) { + angle.z += ang_step; + mSpinAngle += ang_step; + } else { + angle.z -= ang_step; + mSpinAngle -= ang_step; + } + mSwimSpeedScale = 1.0f; + } else { + mSpinTimer = (int)(cM_rnd() * 60.0f) + 90; + mSpinAngle = 0; + mSwimSpeedScale = cM_rnd() * (1.0f - daNpc_zrA_Param_c::m.mMinSwimSpeedScale) + + daNpc_zrA_Param_c::m.mMinSwimSpeedScale; + } + } + + if (mSpinAngle == 0) { + calcBank(ang_step, ang_scale, angle.y, angle.z); + } + current.angle.z = angle.z; + mCurAngle = current.angle; + shape_angle = mCurAngle; + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::railSwim() { +asm BOOL daNpc_zrA_c::railSwim() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/railSwim__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B81788-80B81918 009368 0190+00 1/1 0/0 0/0 .text waitSwim__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::waitSwim() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitSwim__11daNpc_zrA_cFv.s" +BOOL daNpc_zrA_c::waitSwim() { + calcModulation(); + + if (field_0x954 == 0) { + BOOL player_attn = mActorMngr[0].getActorP() != NULL; + if (chkFindPlayer2(player_attn, shape_angle.y)) { + if (!player_attn) { + mActorMngr[0].entry(daPy_getPlayerActorClass()); + mTurnMode = 0; + } + } else { + if (player_attn) { + mActorMngr[0].remove(); + mTurnMode = 0; + } + } + + if (mActorMngr[0].getActorP() != NULL) { + setLookMode(LOOK_PLAYER); + } else { + setLookMode(LOOK_NONE); + if (home.angle.y != mCurAngle.y && step(home.angle.y, -1, -1, 15)) { + mMode = 0; + } + } + + if (home.angle.y == mCurAngle.y) { + fopAc_ac_c* actor = + getAttnActorP(mActorMngr[0].getActorP() != NULL, srchAttnActor1, + daNpc_zrA_Param_c::m.mAttnRadius, daNpc_zrA_Param_c::m.mAttnUpperY, + daNpc_zrA_Param_c::m.mAttnLowerY, daNpc_zrA_Param_c::m.mAttnFovY, + shape_angle.y, 120, true); + if (actor != NULL) { + mActorMngr[1].entry(actor); + setLookMode(LOOK_ATTN); + } + } else { + mAttnChangeTimer = 0; + } + } + + return true; } -#pragma pop /* 80B81918-80B81A18 0094F8 0100+00 1/1 0/0 0/0 .text turnSwimInit__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::turnSwimInit() { + mPath.reverse(); + mPath.setNextIdxDst(current.pos); + + mSwimSpeed.set(0.0f, 0.0f, mSwimSpeedF); + mDoMtx_stack_c::ZXYrotS(current.angle); + mDoMtx_stack_c::multVec(&mSwimSpeed, &mSwimSpeed); + + mSwimSpeedF = 0.0f; + mIsTurning = true; + mSwimMode = SWIM_TURN; + + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_TURN, -1.0f, false); + } else { + setMotion(MOT_SWIM_TURN, 4.0f, false); + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::turnSwimInit() { +asm BOOL daNpc_zrA_c::turnSwimInit() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/turnSwimInit__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B81A18-80B81CC8 0095F8 02B0+00 2/2 0/0 0/0 .text turnSwim__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals and generics +BOOL daNpc_zrA_c::turnSwim() { + s16 ang_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + cXyz pos; + csXyz angle; + mPath.getDstPosDst2(current.pos, pos); + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, 8, ang_step); + calcBank(ang_step, 8, current.angle.y, angle.z); + current.angle.z = angle.z; + mCurAngle = current.angle; + shape_angle = mCurAngle; + + if (mBaseMotionAnm == ANM_SWIM_TURN) { + if (mpMorf->getFrame() < 40.0f) { + cXyz zero(0.0f, 0.0f, 0.0f); + cLib_chasePos(&mSwimSpeed, zero, 0.7f); + current.pos += mSwimSpeed; + mpMorf->setPlaySpeed(0.8f); + } else { + cXyz swim_speed; + mSwimSpeedF = 1.5f * daNpc_zrA_Param_c::m.mSwimSpeed; + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + mpMorf->setPlaySpeed(1.0f); + } + } else if (mBaseMotionAnm == ANM_STILL) { + cXyz swim_speed; + mSwimSpeedF = 1.5f * daNpc_zrA_Param_c::m.mSwimSpeed; + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + mpMorf->setPlaySpeed(1.0f); + + if (mIsTurning) { + mSwimTurnTimer = 10; + mIsTurning = false; + } else if (cLib_calcTimer(&mSwimTurnTimer) == 0) { + mSwimMode = SWIM_RAIL; + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_SWIM_A, -1.0f, false); + } + mSpinTimer = 90; + mCheckSwimTurn = false; + } + } + + if (mAcch.ChkWaterHit() + && current.pos.y > mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::turnSwim() { +asm BOOL daNpc_zrA_c::turnSwim() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/turnSwim__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B81CC8-80B81D68 0098A8 00A0+00 1/1 0/0 0/0 .text turnSwimCheck__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals and generics +BOOL daNpc_zrA_c::turnSwimCheck() { + if (mSoldierType != SOLDIER_SPEAR) { + if (mCheckSwimTurn) { + if (mpMorf->isLoop()) { + turnSwimInit(); + turnSwim(); + return true; + } + } else if (mCheckSwimTurnTimer == 0) { + mCheckSwimTurnTimer = cLib_getRndValue(6, 6); + if (cM_rnd() < 0.5f) { + mCheckSwimTurn = true; + } + } + } + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::turnSwimCheck() { +asm BOOL daNpc_zrA_c::turnSwimCheck() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/turnSwimCheck__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B81D68-80B81F70 009948 0208+00 1/1 0/0 0/0 .text evasionCalc__11daNpc_zrA_cFR4cXyzR5csXyz */ +#ifdef NONMATCHING +// matches with literals and generics +BOOL daNpc_zrA_c::evasionCalc(cXyz& param_0, csXyz& param_1) { + BOOL ret; + daPy_py_c* player = daPy_getPlayerActorClass(); + cM3dGLin line; + cXyz proj; + f32 dist; + line.SetStartEnd(current.pos, param_0); + if (cM3d_Len3dSqPntAndSegLine(&line, &player->current.pos, &proj, &dist) && dist <= 10000.0f) { + fopAcM_searchPlayerAngleY(this); + if ((s16)(param_1.y - current.angle.y) > 0) { + mEvasionAngle = -0x1800; + } else { + mEvasionAngle = 0x1800; + } + param_1.y += mEvasionAngle; + mEvasionTimer = 60; + mSwimFastTurnTimer = 60; + ret = true; + } else { + cXyz vec(0.0f, 0.0f, 500.0f); + csXyz angle(current.angle.x, current.angle.y, 0); + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::multVec(&vec, &vec); + vec += current.pos; + line.SetStartEnd(current.pos, vec); + if (cM3d_Len3dSqPntAndSegLine(&line, &player->current.pos, &proj, &dist) + && dist <= 10000.0f) { + if ((s16)(fopAcM_searchPlayerAngleY(this) - current.angle.y) > 0) { + mEvasionAngle = -0x1800; + } else { + mEvasionAngle = 0x1800; + } + param_1.y += mEvasionAngle; + mEvasionTimer = 60; + mSwimFastTurnTimer = 60; + ret = true; + } else { + if (cLib_calcTimer(&mEvasionTimer) != 0) { + param_1.y += mEvasionAngle; + } + ret = true; + } + } + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::evasionCalc(cXyz& param_0, csXyz& param_1) { +asm BOOL daNpc_zrA_c::evasionCalc(cXyz& param_0, csXyz& param_1) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/evasionCalc__11daNpc_zrA_cFR4cXyzR5csXyz.s" } #pragma pop +#endif /* 80B81F70-80B81FB8 009B50 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGLinFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm cM3dGLin::~cM3dGLin() { +// asm cM3dGLin::~cM3dGLin() { +extern "C" asm void __dt__8cM3dGLinFv() { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/__dt__8cM3dGLinFv.s" } #pragma pop /* 80B81FB8-80B8204C 009B98 0094+00 13/13 0/0 0/0 .text calcBank__11daNpc_zrA_cFssRsRs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::calcBank(s16 param_0, s16 param_1, s16& param_2, s16& param_3) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcBank__11daNpc_zrA_cFssRsRs.s" +void daNpc_zrA_c::calcBank(s16 i_step, s16 i_scale, s16& i_angY, s16& o_angZ) { + s16 ang_diff_y = i_angY - current.angle.y; + if (ang_diff_y >= 0x4000) { + ang_diff_y = 0x4000; + } else if (ang_diff_y <= -0x4000) { + ang_diff_y = -0x4000; + } + cLib_addCalcAngleS2(&mSwimAngleCalc.z, ang_diff_y, i_scale * 2, i_step); + cLib_addCalcAngleS2(&o_angZ, mSwimAngleCalc.z, (s16)i_scale, i_step); } -#pragma pop /* 80B8204C-80B82238 009C2C 01EC+00 1/1 0/0 0/0 .text calcWaistAngle__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +void daNpc_zrA_c::calcWaistAngle() { + if (mResetWaistAngle) { + cLib_chaseAngleS(&mWaistAngle.x, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed / 2); + cLib_chaseAngleS(&mWaistAngle.y, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed / 2); + cLib_chaseAngleS(&mWaistAngle.z, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed / 2); + } else { + mDoMtx_stack_c::push(); + + csXyz angle; + angle.x = cLib_targetAngleX(&field_0x1578, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &field_0x1578); + angle.z = 0; + cXyz vec(0.0f, 0.0f, daNpc_zrA_Param_c::m.field_0x8c); + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::multVec(&vec, &field_0x1578); + + if (mIsTurning) { + vec.set(0.0f, 0.0f, daNpc_zrA_Param_c::m.field_0x90); + cXyz vec2; + mDoMtx_stack_c::ZXYrotS(current.angle); + mDoMtx_stack_c::multVec(&vec, &vec2); + field_0x1578 -= vec2; + field_0x1578.normalize(); + field_0x1578 *= daNpc_zrA_Param_c::m.field_0x8c; + } + + mDoMtx_stack_c::ZXYrotS(current.angle); + mDoMtx_stack_c::inverse(); + mDoMtx_stack_c::multVec(&field_0x1578, &field_0x1584); + field_0x1578 += current.pos; + + mWaistAngle.x = cM_atan2s(field_0x1584.y, -field_0x1584.z); + mWaistAngle.y = cM_atan2s(-field_0x1584.x, -field_0x1584.z); + mWaistAngle.z = 0; + + mDoMtx_stack_c::pop(); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5158,9 +7606,21 @@ asm void daNpc_zrA_c::calcWaistAngle() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngle__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B82238-80B822CC 009E18 0094+00 9/9 0/0 0/0 .text calcWaistAngleInit__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::calcWaistAngleInit() { + cXyz vec(0.0f, 0.0f, -daNpc_zrA_Param_c::m.field_0x8c); + mDoMtx_stack_c::ZXYrotS(mCurAngle); + mDoMtx_stack_c::transM(vec); + mDoMtx_stack_c::multVecZero(&field_0x1578); + field_0x1578 += current.pos; + mResetWaistAngle = false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5169,29 +7629,48 @@ asm void daNpc_zrA_c::calcWaistAngleInit() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleInit__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B822CC-80B822D8 009EAC 000C+00 8/8 0/0 0/0 .text calcWaistAngleStop__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::calcWaistAngleStop() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleStop__11daNpc_zrA_cFv.s" +void daNpc_zrA_c::calcWaistAngleStop() { + mResetWaistAngle = true; } -#pragma pop /* 80B822D8-80B82300 009EB8 0028+00 3/3 0/0 0/0 .text calcWaistAngleCheck__11daNpc_zrA_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::calcWaistAngleCheck() { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleCheck__11daNpc_zrA_cFv.s" +BOOL daNpc_zrA_c::calcWaistAngleCheck() { + if (mSwimMode != SWIM_WAIT && !mResetWaistAngle) { + return true; + } else { + return false; + } } -#pragma pop /* 80B82300-80B8247C 009EE0 017C+00 6/6 0/0 0/0 .text calcModulation__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::calcModulation() { + if (mAcch.ChkWaterIn()) { + if (mAcch.ChkWaterIn() && current.pos.y < mAcch.m_wtr.GetHeight() - 220.0f) { + cLib_chaseF(&mModulationOffset.x, + 5.0f - cM_scos(mModulationParam * 0x10000 / 42) * 5.0f, 1.0f); + cLib_chaseF(&mModulationOffset.y, + 8.0f - cM_scos(mModulationParam * 0x10000 / 70) * 8.0f, 1.0f); + cLib_chaseF(&mModulationOffset.z, + 4.0f - cM_scos(mModulationParam * 0x10000 / 105) * 4.0f, 1.0f); + } else { + cLib_chaseF(&mModulationOffset.y, + 5.0f - cM_scos(mModulationParam * 0x10000 / 35) * 5.0f, 1.0f); + cLib_chaseF(&mModulationOffset.x, 0.0f, 1.0f); + cLib_chaseF(&mModulationOffset.z, 0.0f, 1.0f); + } + mModulationParam--; + if (mModulationParam <= 0) { + mModulationParam = 210; + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5200,8 +7679,18 @@ asm void daNpc_zrA_c::calcModulation() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcModulation__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B8247C-80B824F4 00A05C 0078+00 2/2 0/0 0/0 .text resetModulation__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::resetModulation() { + cLib_chaseF(&mModulationOffset.y, 0.0f, 1.0f); + cLib_chaseF(&mModulationOffset.x, 0.0f, 1.0f); + cLib_chaseF(&mModulationOffset.z, 0.0f, 1.0f); + mModulationParam = 210; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5210,20 +7699,29 @@ asm void daNpc_zrA_c::resetModulation() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/resetModulation__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* 80B824F4-80B82584 00A0D4 0090+00 17/17 0/0 0/0 .text * calcSwimAngle__11daNpc_zrA_cFR5csXyzR5csXyzss */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpc_zrA_c::calcSwimAngle(csXyz& param_0, csXyz& param_1, s16 param_2, s16 param_3) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcSwimAngle__11daNpc_zrA_cFR5csXyzR5csXyzss.s" +void daNpc_zrA_c::calcSwimAngle(csXyz& i_target, csXyz& i_calc, s16 i_scale, s16 i_step) { + cLib_addCalcAngleS2(&i_calc.x, i_target.x, i_scale, i_step); + cLib_addCalcAngleS2(¤t.angle.x, i_calc.x, i_scale, i_step); + cLib_addCalcAngleS2(&i_calc.y, i_target.y, i_scale, i_step); + cLib_addCalcAngleS2(¤t.angle.y, i_calc.y, i_scale, i_step); } -#pragma pop /* 80B82584-80B825FC 00A164 0078+00 15/15 0/0 0/0 .text calcSwimPos__11daNpc_zrA_cFR4cXyz */ +#ifdef NONMATCHING +// matches with weak functions +void daNpc_zrA_c::calcSwimPos(cXyz& i_speed) { + csXyz angle = current.angle; + angle.z = 0; + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::multVec(&i_speed, &i_speed); + current.pos += i_speed; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5232,86 +7730,737 @@ asm void daNpc_zrA_c::calcSwimPos(cXyz& param_0) { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcSwimPos__11daNpc_zrA_cFR4cXyz.s" } #pragma pop +#endif /* 80B825FC-80B826F0 00A1DC 00F4+00 8/8 0/0 0/0 .text calcWaitSwim__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::calcWaitSwim(BOOL param_0) { + cLib_chaseAngleS(¤t.angle.x, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed); + cLib_chaseAngleS(¤t.angle.z, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed); + mCurAngle = current.angle; + shape_angle = mCurAngle; + cLib_chaseF(&mSwimSpeedF, 0.0f, 2.0f); + cLib_chaseF(&mScaleFactor, 1.0f, (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + calcModulation(); + if (param_0 && mAcch.ChkWaterHit() + && current.pos.y > mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::calcWaitSwim(int param_0) { +asm void daNpc_zrA_c::calcWaitSwim(BOOL param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaitSwim__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B826F0-80B82C54 00A2D0 0564+00 1/0 0/0 0/0 .text ECut_talkSwim__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::ECut_talkSwim(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + mAcch.ClrGrndNone(); + mAcch.ClrWallNone(); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_FLOAT, daNpc_zrA_Param_c::m.mMorfFrames, true); + mTurnMode = 0; + mMode = 2; + mSwimSpeed.set(0.0f, 0.0f, mSwimSpeedF); + mDoMtx_stack_c::ZXYrotS(current.angle); + mDoMtx_stack_c::multVec(&mSwimSpeed, &mSwimSpeed); + mSwimSpeedF = 0.0f; + calcWaistAngleStop(); + break; + + case 1: + initTalk(mFlowID, NULL); + break; + + case 2: + mSwimAngleCalc = current.angle; + break; + } + } + + switch (prm) { + case 0: { + calcModulation(); + if (current.angle.x == 0 && current.angle.z == 0 && mSwimSpeed.abs2() < 0.1f + && mScaleFactor <= 1.05f && mBaseMotionAnm != ANM_FLOAT) + { + ret = true; + setLookMode(LOOK_PLAYER); + break; + } + + cLib_chaseAngleS(¤t.angle.x, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed); + cLib_chaseAngleS(¤t.angle.z, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed); + cLib_chaseAngleS(¤t.angle.y, fopAcM_searchPlayerAngleY(this), + daNpc_zrA_Param_c::m.mSwimAngleSpeed); + cLib_chaseF(&mScaleFactor, 1.0f, (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + cXyz zero(0.0f, 0.0f, 0.0f); + cLib_chasePos(&mSwimSpeed, zero, 0.5f); + current.pos += mSwimSpeed; + f32 water_y; + if (fopAcM_getWaterY(¤t.pos, &water_y) + && current.pos.y > water_y - daNpc_zrA_Param_c::m.mMinDepth - 50.0f) + { + cLib_chaseF(¤t.pos.y, water_y - daNpc_zrA_Param_c::m.mMinDepth - 50.0f, 20.0f); + } + mCurAngle = current.angle; + shape_angle = mCurAngle; + break; + } + + case 1: + calcModulation(); + if (talkProc(NULL, true, NULL)) { + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_DIVE_SWIM_B, daNpc_zrA_Param_c::m.mMorfFrames / 2.0f, true); + } else { + setMotion(MOT_DIVE_SWIM_A, daNpc_zrA_Param_c::m.mMorfFrames / 2.0f, true); + } + mSwimAngleCalc = current.angle; + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + setLookMode(LOOK_NONE); + ret = true; + } + break; + + case 2: { + resetModulation(); + s16 swim_angle_speed = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + cLib_chaseF(&mScaleFactor, daNpc_zrA_Param_c::m.mMaxScaleFactor, + (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + cXyz vec; + csXyz angle; + mPath.getDstPosDst2(current.pos, vec); + angle.x = cLib_targetAngleX(&vec, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &vec); + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, 8, swim_angle_speed); + mCurAngle = current.angle; + shape_angle = mCurAngle; + + if (mBaseMotionAnm != ANM_DIVE) { + ret = true; + if (!calcWaistAngleCheck()) { + calcWaistAngleInit(); + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + } + cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + } + + if (mAcch.ChkWaterHit() + && current.pos.y > mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth; + } + break; + } + + default: + ret = true; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_talkSwim(int param_0) { +asm BOOL daNpc_zrA_c::ECut_talkSwim(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_talkSwim__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B82C54-80B82E88 00A834 0234+00 3/0 0/0 0/0 .text waitWaterfall__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::waitWaterfall(void* param_0) { + switch (mMode) { + case 0: + setExpressionAnm(ANM_NONE, false); + if (mMotion != MOT_FLOAT && mMotion != MOT_FLOAT_B) { + setMotion(MOT_WAIT_SWIM, -1.0f, false); + } + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + mSwimMode = SWIM_RAIL; + calcWaistAngleStop(); + field_0x1550 = true; + mCcStts.SetWeight(0xff); + mMode = 2; + // fallthrough + + case 2: + calcWaitSwim(false); + if (mScaleFactor == 1.0f) { + mSwimMode = SWIM_WAIT; + } + + if (field_0x954 == 0 && !mTwilight) { + BOOL player_attn = mActorMngr[0].getActorP() != NULL; + if (chkFindPlayer2(player_attn, shape_angle.y)) { + if (!player_attn) { + mActorMngr[0].entry(daPy_getPlayerActorClass()); + mTurnMode = 0; + } + } else { + if (player_attn) { + mActorMngr[0].remove(); + mTurnMode = 0; + } + } + + if (mActorMngr[0].getActorP() != NULL) { + setLookMode(LOOK_PLAYER); + } else { + setLookMode(LOOK_NONE); + if (home.angle.y != mCurAngle.y && step(home.angle.y, -1, -1, 15)) { + mMode = 0; + } + } + } + break; + + case 3: + speedF = 0.0f; + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::waitWaterfall(void* param_0) { +asm BOOL daNpc_zrA_c::waitWaterfall(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitWaterfall__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B82E88-80B833C8 00AA68 0540+00 2/0 0/0 0/0 .text swimWaterfall__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::swimWaterfall(void* param_0) { + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed * 2; + s16 angle_scale = 2; + cXyz point, swim_speed; + + switch (mMode) { + case 0: + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + field_0x153d = false; + setExpressionAnm(ANM_NONE, false); + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_SWIM_A, -1.0f, false); + } + mSwimMode = SWIM_RAIL; + mScaleFactor = daNpc_zrA_Param_c::m.mMaxScaleFactor; + mCcStts.SetWeight(0); + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + mMode = 2; + field_0x153e = false; + mSwimAngleCalc = current.angle; + calcWaistAngleInit(); + // fallthrough + + case 2: { + int idx = mPath.getIdx(); + if (mPath.getDstPosDst2(current.pos, point) && idx == 0 && mPath.chkReverse()) { + mPath.reverse(); + mActionSelect = 0; + mSwimSpeedScale = 1.0f; + setMotion(MOT_FLOAT_B, -1.0f, false); + setAction(&waitWaterfall); + return false; + } + + csXyz angle; + angle.x = cLib_targetAngleX(&point, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &point); + angle.z = current.angle.z; + + cXyz prev_point; + mPath.getBeforePos(prev_point); + if (cLib_targetAngleX(&point, &prev_point) > 0x3000) { + angle.x = 0x4000; + angle.y = 0; + mSwimSpeedScale = 3.0f; + } else { + mSwimSpeedScale = 1.0f; + } + + s16 ang_diff_x = angle.x - current.angle.x; + s16 ang_diff_y = angle.y - current.angle.y; + bool bvar5 = false; + + if (mActionType != ACT_TYPE_0 && (abs(ang_diff_x) > 0x3000 || abs(ang_diff_y) > 0x3000) + && mSwimSpeedF > 14.0f) { + f32 frame = mpMorf->getFrame(); + if ((angle.z <= 0x2000 || ang_diff_y >= 0) && (angle.z >= -0x2000 || ang_diff_y <= 0)) { + if (ang_diff_x < -0x3000) { + if (frame >= 2.0f && frame <= 4.0f) { + bvar5 = true; + } + } else { + if (frame >= 16.0f && frame <= 18.0f) { + mpMorf->setFrame(18.0f); + mpMorf->setMorf(4.0f); + mpMorf->setPlaySpeed(0.1f); + bvar5 = true; + } + } + } + + if (bvar5) { + calcSwimAngle(angle, mSwimAngleCalc, 1, angle_step); + } else { + calcSwimAngle(angle, mSwimAngleCalc, 2, angle_step / 2); + } + } else { + calcSwimAngle(angle, mSwimAngleCalc, 2, angle_step); + } + + if (current.angle.x > 0x2000) { + mSwimSpeedScale = 3.0f; + angle_step *= 2.0f; + angle_scale = 2; + } else { + mSwimSpeedScale = 1.0f; + } + cLib_addCalc2(&mSwimSpeedF, mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed, 0.1f, 1.0f); + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + + if (!bvar5) { + f32 play_speed = mpMorf->getPlaySpeed(); + f32 target_speed = + cLib_minMaxLimit(mSwimSpeedF / daNpc_zrA_Param_c::m.mSwimAnmRate, 0.0f, 1.5f); + cLib_addCalc2(&play_speed, target_speed, 0.2f, 0.1f); + mpMorf->setPlaySpeed(play_speed); + } + + calcBank(angle_step, angle_scale, angle.y, angle.z); + current.angle.z = angle.z; + mCurAngle = current.angle; + shape_angle = mCurAngle; + break; + } + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::swimWaterfall(void* param_0) { +asm BOOL daNpc_zrA_c::swimWaterfall(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/swimWaterfall__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B833C8-80B83548 00AFA8 0180+00 2/0 0/0 0/0 .text diveWaterfall__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::diveWaterfall(void* param_0) { + switch (mMode) { + case 0: + mPath.onReverse(); + mPath.setIdx(mPath.getEndIdx() - 1); + mPath.setNextIdxDst(current.pos); + setExpressionAnm(ANM_NONE, false); + setMotion(MOT_DIVE_B_SWIM_A, -1.0f, false); + mSwimAngleCalc = current.angle; + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + setLookMode(LOOK_NONE); + mSwimMode = SWIM_RAIL; + mActionSelect = 3; + mMode = 2; + // fallthrough + + case 2: + if (diveCalc(daNpc_zrA_Param_c::m.mSwimAngleSpeed, 4, false)) { + mActionSelect = 1; + setAction(&swimWaterfall); + } + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::diveWaterfall(void* param_0) { +asm BOOL daNpc_zrA_c::diveWaterfall(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/diveWaterfall__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B83548-80B837E8 00B128 02A0+00 2/0 0/0 0/0 .text talkSwim__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::talkSwim(void* param_0) { + BOOL bvar2 = false; + int flow_id; + + switch (mMode) { + case 0: + if (field_0x954 != 0) { + break; + } + setExpression(EXPR_NONE, -1.0f); + flow_id = mFlowID; + mTurnMode = 0; + mMode = 2; + initTalk(flow_id, NULL); + field_0x1558 = 0; + // fallthrough + + case 2: + switch (field_0x1558) { + case 0: + calcModulation(); + if (field_0x9ea) { + bvar2 = true; + } else { + setLookMode(LOOK_NONE); + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + bvar2 = true; + } else if (step(fopAcM_searchPlayerAngleY(this), -1, -1, 15)) { + mTurnMode = 0; + } + } + + if (bvar2 && talkProc(NULL, 1, NULL)) { + if (mFlow.getChoiceNo() == 0) { + field_0x1558 = 1; + mSwimAngleCalc = current.angle; + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + setLookMode(LOOK_NONE); + } else { + mMode = 3; + dComIfGp_event_reset(); + setAction(&waitWaterfall); + field_0x9ec = false; + } + } + break; + + case 1: + mMode = 3; + dComIfGp_event_reset(); + mActionSelect = 1; + if (!dKy_daynight_check()) { + mOrderEvtNo = EVT_CARRY_WATERFALL; + } else { + mOrderEvtNo = EVT_CARRY_WATERFALL_NIGHT; + } + changeEvent(l_resNames[l_evtGetParamList[mOrderEvtNo].arcIdx], + l_evtNames[l_evtGetParamList[mOrderEvtNo].fileIdx], 1, 0xffff); + } + break; + + case 3: + break; + } + + return false; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::talkSwim(void* param_0) { +asm BOOL daNpc_zrA_c::talkSwim(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/talkSwim__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B837E8-80B83D08 00B3C8 0520+00 1/0 0/0 0/0 .text ECut_carryWaterfall__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals and generics +BOOL daNpc_zrA_c::ECut_carryWaterfall(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + dComIfGp_getEvent().setSkipProc(this, dEv_defaultSkipProc, 0); + Z2GetAudioMgr()->subBgmStart(Z2BGM_ZORA_D01); + break; + + case 10: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_FALLSWIM, -1.0f, false); + current.angle.y = -0x8000; + setAngle(current.angle.y); + mPath.setNextIdxDst(current.pos); + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + field_0x153d = false; + mSwimMode = SWIM_RAIL; + mScaleFactor = daNpc_zrA_Param_c::m.mMaxScaleFactor; + mCcStts.SetWeight(0); + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + field_0x153e = false; + mSwimAngleCalc = current.angle; + calcWaistAngleInit(); + break; + + case 20: + mPath.setIdx(5); + current.pos = mPath.getPntPos(5); + mPath.setNextIdxDst(current.pos); + current.angle.y = -0x8000; + current.angle.x = -0x4000; + mCurAngle.x = -0x4000; + shape_angle.x = -0x4000; + setAngle(current.angle.y); + break; + + case 30: + mEventTimer = 60; + break; + + case 40: + break; + } + } + + switch (prm) { + case 0: + calcWaitSwim(false); + ret = true; + break; + + case 10: + ret = true; + // fallthrough + + case 20: + resetModulation(); + if (mMotion != MOT_FALLSWIM) { + calcWaitSwim(false); + if (mScaleFactor == 1.0f) { + mSwimMode = SWIM_WAIT; + } + ret = true; + } else { + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed * 2; + cXyz pos, swim_speed; + f32 speed_scale = mSwimSpeedScale; + if (mPath.getDstPosDst2(current.pos, pos) && mPath.getIdx() == mPath.getNextIdx()) { + mPath.reverse(); + mSwimMode = SWIM_RAIL; + mActionSelect = 3; + setMotion(MOT_FLOAT_B, -1.0f, false); + calcWaistAngleStop(); + ret = true; + } else { + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, 4, angle_step); + cLib_addCalc2(&mSwimSpeedF, speed_scale * daNpc_zrA_Param_c::m.mSwimSpeed, + 0.1f, 1.0f); + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + current.angle.z = angle.z; + shape_angle.x = mCurAngle.x = current.angle.x; + shape_angle.z = mCurAngle.z = current.angle.z; + if (current.angle.x < -0x2000) { + cLib_addCalcAngleS2(&mCurAngle.y, -0x8000, 4, angle_step); + } else { + cLib_addCalcAngleS2(&mCurAngle.y, current.angle.y, 4, angle_step); + } + shape_angle.y = mCurAngle.y; + } + } + break; + + case 30: + if (cLib_calcTimer(&mEventTimer) == 0) { + ret = true; + } + calcWaitSwim(false); + if (mScaleFactor == 1.0f) { + mSwimMode = SWIM_WAIT; + } + cLib_chaseAngleS(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), + daNpc_zrA_Param_c::m.mSwimAngleSpeed); + setAngle(mCurAngle.y); + break; + + case 40: + ret = true; + break; + + default: + ret = true; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_carryWaterfall(int param_0) { +asm BOOL daNpc_zrA_c::ECut_carryWaterfall(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_carryWaterfall__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B83D08-80B83FA4 00B8E8 029C+00 1/0 0/0 0/0 .text ECut_carryWaterfallSkip__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals and generics +BOOL daNpc_zrA_c::ECut_carryWaterfallSkip(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + Z2GetAudioMgr()->subBgmStop(); + break; + + case 10: + mPath.onReverse(); + mPath.setIdx(mPath.getEndIdx() - 1); + current.pos = mPath.getPntPos(mPath.getEndIdx() - 1); + old.pos = current.pos; + current.angle.set(0, -0x8000, 0); + shape_angle = mCurAngle = current.angle; + setLookMode(LOOK_NONE); + setMotion(MOT_FLOAT_B, -1.0f, false); + mSwimMode = SWIM_RAIL; + mActionSelect = 3; + calcWaistAngleStop(); + mAttnChangeTimer = 0; + mTurnMode = 0; + mSwimAngleCalc = current.angle; + mEventTimer = 60; + break; + + case 20: + break; + + default: + break; + } + } + + switch (prm) { + case 0: + ret = true; + break; + + case 10: + if (cLib_calcTimer(&mEventTimer) == 0) { + ret = true; + } + calcWaitSwim(false); + if (mScaleFactor == 1.0f) { + mSwimMode = SWIM_WAIT; + } + cLib_chaseAngleS(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), + daNpc_zrA_Param_c::m.mSwimAngleSpeed); + setAngle(mCurAngle.y); + break; + + case 20: + ret = true; + break; + + default: + ret = true; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_carryWaterfallSkip(int param_0) { +asm BOOL daNpc_zrA_c::ECut_carryWaterfallSkip(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_carryWaterfallSkip__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CC30-80B8CC34 0007D8 0004+00 0/1 0/0 0/0 .rodata @8591 */ @@ -5378,34 +8527,77 @@ COMPILER_STRIP_GATE(0x80B8CC50, &lit_8599); #pragma pop /* 80B83FA4-80B84200 00BB84 025C+00 1/1 0/0 0/0 .text diveCalc__11daNpc_zrA_cFssi */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::diveCalc(s16 i_angleStep, s16 i_angleScale, BOOL param_2) { + cLib_chaseF(&mScaleFactor, daNpc_zrA_Param_c::m.mMaxScaleFactor, + (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + cXyz pos; + mPath.getDstPosDst2(current.pos, pos); + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, i_angleScale, i_angleStep); + shape_angle = mCurAngle = current.angle; + + f32 frame = mpMorf->getFrame(); + cXyz dive_speed(0.0f, 0.0f, 0.0f); + if (frame < 3.0f) { + dive_speed.set(0.0f, -6.0f, 0.0f); + } else if (frame < 6.0f) { + dive_speed.set(0.0f, -9.0f, 0.0f); + } else if (frame < 9.0f) { + dive_speed.set(0.0f, -9.0f, 8.5f); + } else if (frame < 13.0f) { + dive_speed.set(0.0f, -9.0f, 5.7f); + } else if (frame < 20.0f) { + dive_speed.set(0.0f, 3.0f, 2.4f); + } else if (frame < 36.0f) { + dive_speed.set(2.0f, 3.0f, 6.5f); + } + mDoMtx_stack_c::ZXYrotS(current.angle); + mDoMtx_stack_c::multVec(&dive_speed, &dive_speed); + current.pos += dive_speed; + + if (param_2 && mAcch.ChkWaterIn() + && current.pos.y > mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth; + } + + if (mBaseMotionAnm == ANM_SWIM_A || mBaseMotionAnm == ANM_SWIM_B) { + return true; + } else { + return false; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::diveCalc(s16 param_0, s16 param_1, int param_2) { +asm BOOL daNpc_zrA_c::diveCalc(s16 param_0, s16 param_1, int param_2) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/diveCalc__11daNpc_zrA_cFssi.s" } #pragma pop +#endif /* 80B84200-80B8424C 00BDE0 004C+00 1/1 0/0 0/0 .text s_subHoz__FPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void s_subHoz(void* param_0, void* param_1) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subHoz__FPvPv.s" +static void* s_subHoz(void* i_proc, void* i_this) { + if (fopAc_IsActor(i_proc) && fopAcM_GetName(i_proc) == PROC_NPC_HOZ) { + return i_proc; + } + return NULL; } -#pragma pop /* 80B8424C-80B84298 00BE2C 004C+00 3/3 0/0 0/0 .text s_sub__FPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void s_sub(void* param_0, void* param_1) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_sub__FPvPv.s" +static void* s_sub(void* i_proc, void* i_this) { + if (fopAc_IsActor(i_proc) && fopAcM_GetName(i_proc) == PROC_CANOE) { + return i_proc; + } + return NULL; } -#pragma pop /* ############################################################################################## */ /* 80B8CC54-80B8CC58 0007FC 0004+00 0/1 0/0 0/0 .rodata @8871 */ @@ -5438,14 +8630,135 @@ COMPILER_STRIP_GATE(0x80B8CC60, &lit_8874); /* 80B84298-80B84B74 00BE78 08DC+00 4/0 0/0 0/0 .text waitRiverDescend__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::waitRiverDescend(void* param_0) { + switch (mMode) { + case 0: + setExpressionAnm(ANM_NONE, false); + if (mMotion != MOT_FLOAT_B) { + setMotion(MOT_WAIT_SWIM, -1.0f, false); + } + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + calcWaistAngleStop(); + field_0x1550 = true; + mSwimSpeedF = 0.0f; + field_0x1500 = daPy_getPlayerActorClass()->current.pos; + mIsTurning = true; + mMode = 2; + // fallthrough + + case 2: { + daPy_py_c* player = daPy_getPlayerActorClass(); + calcWaitSwim(true); + cXyz pos; + moveRiverPosCalc(pos); + + if (mGameMode == GAME_MODE_3) { + if (mActorMngr[2].getActorP() == NULL) { + fopAc_ac_c* canoe = (fopAc_ac_c*)fpcM_Search(s_sub, this); + if (canoe != NULL + && !((player->current.pos - this->current.pos).absXZ() > 1000.0f)) + { + mActorMngr[2].entry(canoe); + if (!player->checkCanoeSlider()) { + player->setCanoeSlider(); + mActionSelect = 4; + setAction(&swimGoalRiverDescend); + break; + } + } + } + } else if (mGameMode == GAME_MODE_0) { + if (mActorMngr[2].getActorP() == NULL) { + daNpc_Hoz_c* iza = (daNpc_Hoz_c*)fpcM_Search(s_subHoz, this); + if (iza != NULL) { + mActorMngr[2].entry(iza); + if (iza->getType() == daNpc_Hoz_c::TYPE_1 + || iza->getType() == daNpc_Hoz_c::TYPE_5) + { + mGameMode = GAME_MODE_1; + if (dComIfGs_isSwitch(mSwitch1, fopAcM_GetRoomNo(this))) { + field_0x15c0 = 2; + } + } else { + mGameMode = GAME_MODE_2; + if (!daNpcF_chkEvtBit(0x60)) { + daNpcF_onEvtBit(0x60); + } + } + } + } + } + + if (player->checkCanoeRide()) { + if (mGameMode == GAME_MODE_2) { + daNpc_Hoz_c* iza = static_cast(mActorMngr[2].getActorP()); + if (iza != NULL && iza->getGameStartFlag()) { + mActionSelect = 3; + mPath.setNextIdx(); + setAction(&diveRiverDescend); + break; + } + } else if (mGameMode == GAME_MODE_1) { + if (field_0x15c0 == 0) { + if ((player->current.pos - current.pos).absXZ() + < daNpc_zrA_Param_c::m.field_0xa8) { + field_0x15c0 = 1; + mOrderEvtNo = EVT_BEFORE_BLAST_ZRR; + } + } else if (field_0x15c0 == 1) { + cXyz vec2(34301.45f, -6541.864f, -24243.62f); + if (dComIfGs_isSwitch(mSwitch1, fopAcM_GetRoomNo(this))) { + mOrderEvtNo = EVT_AFTER_BLAST_ZRR; + mOrderNewEvt = true; + } else { + if ((current.pos - vec2).absXZ() >= 100.0f) { + mActionSelect = 3; + setAction(&diveRiverDescend); + } + } + } else { + cXyz vec3 = player->current.pos; + vec3 -= current.pos; + if (vec3.absXZ() < 10000.0f) { + mPath.setNextIdxDst(current.pos); + mActionSelect = 3; + setAction(&diveRiverDescend); + break; + } + } + } + + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 2, 0x800); + setAngle(mCurAngle.y); + } + + break; + } + + case 3: + speedF = 0.0f; + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::waitRiverDescend(void* param_0) { +asm BOOL daNpc_zrA_c::waitRiverDescend(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitRiverDescend__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CC64-80B8CC68 00080C 0004+00 0/1 0/0 0/0 .rodata @9323 */ @@ -5527,25 +8840,335 @@ COMPILER_STRIP_GATE(0x80B8CC8C, &lit_9333); /* 80B84B74-80B85B14 00C754 0FA0+00 2/2 0/0 0/0 .text swimRiverDescend__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// stack problems +BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + s16 angle_scale = 6; + f32 water_height = mAcch.m_wtr.GetHeight(); + + switch (mMode) { + case 0: + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + field_0x153d = false; + setExpressionAnm(ANM_NONE, false); + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_SWIM_A, -1.0f, false); + } + mSwimMode = SWIM_RAIL; + mCcStts.SetWeight(0); + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + mMode = 2; + field_0x153e = false; + mSwimAngleCalc = current.angle; + calcWaistAngleInit(); + field_0x1500 = daPy_getPlayerActorClass()->current.pos; + // fallthrough + + case 2: { + csXyz angle; + daPy_py_c* player = daPy_getPlayerActorClass(); + cLib_chaseF(&mScaleFactor, daNpc_zrA_Param_c::m.mMaxScaleFactor, + (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + int ivar8 = mRiverPathIdx; + cXyz pos, swim_speed; + moveRiverPosCalc(pos); + + if (field_0x153c) { + mMeterCount = dMeter2Info_getNowCount(); + cXyz head_pos; + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::scaleM(scale); + mDoMtx_stack_c::multVecZero(&head_pos); + + if (field_0x153e) { + if (mIsAboveWater && mpMorf->getFrame() > 13.0f && mpMorf->getFrame() < 17.0f) { + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 0.3f, 0.7f, 0.5f); + mpMorf->setPlaySpeed(play_speed); + } + + angle.y = cLib_targetAngleY(¤t.pos, &pos); + cLib_addCalcAngleS2(&mSwimAngleCalc.y, angle.y, angle_scale, angle_step); + cLib_addCalcAngleS2(¤t.angle.y, mSwimAngleCalc.y, angle_scale, angle_step); + + f32 swim_speed_f = mSwimSpeed.absXZ(); + mSwimSpeed.x = 0.0f; + mSwimSpeed.z = swim_speed_f; + mDoMtx_stack_c::YrotS(current.angle.y); + mDoMtx_stack_c::multVec(&mSwimSpeed, &mSwimSpeed); + calcBank(angle_step / 2, angle_scale * 2, current.angle.y, current.angle.z); + mSwimSpeed.y -= 1.0f; + current.pos += mSwimSpeed; + + if (current.angle.x < 0x3000) { + current.angle.x = -cM_atan2s(mSwimSpeed.y, mSwimSpeed.absXZ()); + } + shape_angle = mCurAngle = current.angle; + + if (mAcch.ChkWaterHit()) { + if (mIsAboveWater + && mSwimSpeed.y <= 0.0f && head_pos.y + mSwimSpeed.y <= water_height) + { + cXyz wpillar_pos = head_pos; + wpillar_pos.y = water_height; + fopKyM_createWpillar(&wpillar_pos, 2.5f, 0); + mIsAboveWater = false; + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH, 0, -1); + mpMorf->setPlaySpeed(1.0f); + } + + if (current.pos.y <= water_height - daNpc_zrA_Param_c::m.mMinDepth) { + field_0x153e = false; + field_0x153c = false; + mSwimSpeedF = mSwimSpeed.abs(); + } + } + + return true; + } + + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + if (mSwimSpeedF > 40.0f) { + angle.x = -0x3000; + if (mAcch.ChkWaterHit()) { + if (head_pos.y < water_height) { + angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed * 2; + angle_scale = 2; + } else if (!mIsAboveWater) { + cXyz wpillar_pos = head_pos; + wpillar_pos.y = water_height; + fopKyM_createWpillar(&wpillar_pos, 2.5f, 0); + mIsAboveWater = true; + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH_OUT, 0, -1); + } else { + if (mpMorf->getFrame() > 13.0f && mpMorf->getFrame() < 17.0f) { + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 0.3f, 0.7f, 0.8f); + mpMorf->setPlaySpeed(play_speed); + } + if (current.pos.y > water_height && current.angle.x < -0x2000) { + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + mSwimSpeed = swim_speed; + field_0x153e = true; + if (mSwimSpeed.y > 20.0f) { + mSwimSpeed.y = 20.0f; + } + calcBank(angle_step, angle_scale, angle.y, angle.z); + current.angle.z = angle.z; + return true; + } + } + } + } else { + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + } + } else { + u8 meter_count = dMeter2Info_getNowCount(); + if (mGameMode != GAME_MODE_1 && meter_count > mMeterCount) { + field_0x153c = true; + } + mMeterCount = meter_count; + + if (mRiverPathIdx == mPath.getEndIdx()) { + angle.x = 0x1000; + angle.y = -0x4000; + angle.z = current.angle.z; + } else { + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + } + + if (mGameMode == GAME_MODE_1 && ivar8 != mRiverPathIdx) { + createRuppi(); + } + } + + cXyz vec = field_0x1500 - player->current.pos; + f32 target_speed = vec.abs(); + if (target_speed < daNpc_zrA_Param_c::m.mSwimSpeed) { + target_speed = daNpc_zrA_Param_c::m.mSwimSpeed; + } else { + target_speed *= 1.4f; + } + + if ((player->current.pos - current.pos).absXZ() < 500.0f) { + angle.x += 0x1000; + } + + if (field_0x153c) { + if (target_speed < 3.0f * daNpc_zrA_Param_c::m.mSwimSpeed) { + target_speed = 3.0f * daNpc_zrA_Param_c::m.mSwimSpeed; + } + target_speed *= 1.2f; + } else if (mRiverPathIdx >= mPath.getIdx()) { + f32 player_dst = mPath.chkPassDst(mRiverPathIdx, player->current.pos); + f32 dst = mPath.chkPassDst(mRiverPathIdx, current.pos); + if (dst - player_dst > 5000.0f) { + target_speed = 0.0f; + } else if (dst - player_dst > 3500.0f) { + target_speed *= 0.4f; + } else if (dst - player_dst > 3000.0f) { + target_speed *= 0.8f; + } + + if (target_speed == 0.0f) { + angle.x = cLib_targetAngleX(&player->current.pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &player->current.pos); + } + } + + field_0x1500 = player->current.pos; + cLib_addCalc2(&mSwimSpeedF, target_speed, 0.25f, 4.0f); + calcSwimAngle(angle, mSwimAngleCalc, angle_scale, angle_step); + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + + f32 play_speed = mpMorf->getPlaySpeed(); + if (target_speed != 0.0f) { + f32 target_play_speed = + cLib_minMaxLimit((mSwimSpeedF - vec.abs()) / 25.0f, 0.0f, 1.3f) + 0.7f; + cLib_addCalc2(&play_speed, target_play_speed, 0.2f, 0.05f); + } else { + cLib_addCalc2(&play_speed, 1.7f, 0.2f, 0.05f); + } + mpMorf->setPlaySpeed(play_speed); + + if (!field_0x153c && mAcch.ChkWaterHit() + && current.pos.y > water_height - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = water_height - daNpc_zrA_Param_c::m.mMinDepth; + } + + calcBank(angle_step, angle_scale, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + break; + } + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::swimRiverDescend(void* param_0) { +asm BOOL daNpc_zrA_c::swimRiverDescend(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/swimRiverDescend__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B85B14-80B8601C 00D6F4 0508+00 2/0 0/0 0/0 .text swimRiverDescend2__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::swimRiverDescend2(void* param_0) { + cXyz pos, swim_speed; + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + f32 water_height = mAcch.m_wtr.GetHeight(); + + switch (mMode) { + case 0: + gravity = 0.0f; + speed.setall(0.0f); + speedF = 0.0f; + field_0x153d = false; + setExpressionAnm(ANM_NONE, false); + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_SWIM_A, -1.0f, false); + } + mSwimMode = SWIM_RAIL; + mCcStts.SetWeight(0); + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + field_0x153e = false; + mSwimAngleCalc = current.angle; + calcWaistAngleInit(); + mMode = 2; + // fallthrough + + case 2: { + moveRiverPosCalc(pos); + cXyz vec(3401.45f, -6541.864f, -24243.62f); + if ((current.pos - vec).absXZ() < 100.0f) { + if (mMotion != MOT_FLOAT_B) { + setExpressionAnm(ANM_NONE, false); + setMotion(MOT_FLOAT_B, -1.0f, false); + mActionSelect = 0; + setAction(&waitRiverDescend); + } + } else if (dComIfGs_isSwitch(mSwitch1, fopAcM_GetRoomNo(this))) { + mOrderEvtNo = EVT_AFTER_BLAST_ZRR; + mOrderNewEvt = true; + setExpressionAnm(ANM_NONE, false); + setMotion(MOT_FLOAT_B, -1.0f, false); + mActionSelect = 0; + setAction(&waitRiverDescend); + } else { + csXyz angle; + cLib_chaseF(&mScaleFactor, daNpc_zrA_Param_c::m.mMaxScaleFactor, + (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + + angle.x = cLib_targetAngleX(&vec, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &vec); + angle.z = current.angle.z; + cLib_addCalc2(&mSwimSpeedF, 2.0f * daNpc_zrA_Param_c::m.mSwimSpeed, 0.25f, 4.0f); + calcSwimAngle(angle, mSwimAngleCalc, 6, angle_step); + + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 1.7f, 0.2f, 0.05f); + mpMorf->setPlaySpeed(play_speed); + + if (mAcch.ChkWaterHit() + && current.pos.y > water_height - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = water_height - daNpc_zrA_Param_c::m.mMinDepth; + } + + calcBank(angle_step, 6, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + } + + break; + } + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::swimRiverDescend2(void* param_0) { +asm BOOL daNpc_zrA_c::swimRiverDescend2(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/swimRiverDescend2__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CC90-80B8CC94 000838 0004+00 0/3 0/0 0/0 .rodata @9558 */ @@ -5578,14 +9201,97 @@ COMPILER_STRIP_GATE(0x80B8CC9C, &lit_9561); /* 80B8601C-80B86440 00DBFC 0424+00 4/0 0/0 0/0 .text diveRiverDescend__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::diveRiverDescend(void* param_0) { + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed * 2; + + switch (mMode) { + case 0: + setExpressionAnm(ANM_NONE, false); + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_DIVE_B_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_DIVE_B_SWIM_A, -1.0f, false); + } + mSwimMode = SWIM_3; + mCcStts.SetWeight(0); + setLookMode(LOOK_NONE); + mSwimAngleCalc = current.angle; + mMode = 2; + // fallthrough + + case 2: { + cLib_chaseF(&mScaleFactor, daNpc_zrA_Param_c::m.mMaxScaleFactor, + (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + cXyz pos; + csXyz angle; + mPath.getDstPos(current.pos, pos); + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, 3, angle_step); + shape_angle = mCurAngle = current.angle; + + f32 frame = mpMorf->getFrame(); + cXyz dive_speed(0.0f, 0.0f, 0.0f); + if (mBaseMotionAnm == ANM_DIVE_B) { + if (frame <= 3.0f) { + dive_speed.set(0.0f, 0.0f, 0.0f); + } else if (frame <= 6.0f) { + dive_speed.set(0.0f, 14.0f, 0.0f); + } else if (frame <= 9.0f) { + dive_speed.set(0.0f, 3.0f, 8.5f); + } else if (frame <= 13.0f) { + dive_speed.set(0.0f, -9.25f, 4.5f); + } else if (frame <= 20.0f) { + dive_speed.set(0.0f, -14.0f, 2.5f); + } else { + dive_speed.set(0.0f, 0.0f, 6.25f); + } + } + mDoMtx_stack_c::ZXYrotS(current.angle); + mDoMtx_stack_c::multVec(&dive_speed, &dive_speed); + current.pos += dive_speed; + + if (mGameMode == GAME_MODE_1 && field_0x15c0 == 1 + && dComIfGs_isSwitch(mSwitch1, fopAcM_GetRoomNo(this))) + { + setExpressionAnm(ANM_NONE, false); + setMotion(MOT_FLOAT_B, -1.0f, false); + mOrderEvtNo = EVT_AFTER_BLAST_ZRR; + mOrderNewEvt = true; + mActionSelect = 0; + setAction(&waitRiverDescend); + } else if (mBaseMotionAnm == ANM_SWIM_A || mBaseMotionAnm == ANM_SWIM_B) { + if (mGameMode == GAME_MODE_1 && field_0x15c0 == 1) { + mActionSelect = 6; + setAction(&swimRiverDescend2); + } else { + mActionSelect = 1; + setAction(&swimRiverDescend); + } + } + + break; + } + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::diveRiverDescend(void* param_0) { +asm BOOL daNpc_zrA_c::diveRiverDescend(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/diveRiverDescend__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CCA0-80B8CCA4 000848 0004+00 0/1 0/0 0/0 .rodata @9719 */ @@ -5596,24 +9302,206 @@ COMPILER_STRIP_GATE(0x80B8CCA0, &lit_9719); #pragma pop /* 80B86440-80B86A2C 00E020 05EC+00 2/0 0/0 0/0 .text swimGoalRiverDescend__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// stack ordering +BOOL daNpc_zrA_c::swimGoalRiverDescend(void* param_0) { + daPy_py_c* player; + cXyz pos, swim_speed; + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + + switch (mMode) { + case 0: + setExpressionAnm(ANM_NONE, false); + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_SWIM_A, -1.0f, false); + } + mSwimMode = SWIM_RAIL; + mCcStts.SetWeight(0); + setLookMode(LOOK_NONE); + mSwimAngleCalc = current.angle; + calcWaistAngleInit(); + field_0x1500 = daPy_getPlayerActorClass()->current.pos; + mSwimSpeedF = daNpc_zrA_Param_c::m.mSwimSpeed; + mMode = 2; + // fallthrough + + case 2: + player = daPy_getPlayerActorClass(); + cLib_chaseF(&mScaleFactor, daNpc_zrA_Param_c::m.mMaxScaleFactor, + (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + if (player->current.pos.y < -14100.0f) { + if (!daNpcF_chkEvtBit(0x60)) { + mOrderEvtNo = EVT_THANKS_BLAST; + } else if (dMeter2Info_getNowCount() >= 30) { + dComIfGs_onSwitch(mSwitch1, fopAcM_GetRoomNo(this)); + dComIfGs_onSwitch(mSwitch2, fopAcM_GetRoomNo(this)); + mOrderEvtNo = EVT_THANKS_BLAST; + } else if (dMeter2Info_getNowCount() >= 25) { + dComIfGs_onSwitch(mSwitch1, fopAcM_GetRoomNo(this)); + mOrderEvtNo = EVT_THANKS_BLAST; + } else { + mOrderEvtNo = EVT_RESULT_ANNOUNCE; + } + } else { + mPath.getDstPos(current.pos, pos); + f32 target_speed; + cXyz vec; + if (mPath.getIdx() != mPath.getNextIdx()) { + vec = field_0x1500 - player->current.pos; + target_speed = vec.abs() * 1.2f; + if (target_speed < daNpc_zrA_Param_c::m.mSwimSpeed) { + target_speed = daNpc_zrA_Param_c::m.mSwimSpeed; + } + } else { + target_speed = 0.0f; + if (mSwimSpeedF < 10.0f) { + pos = player->current.pos; + } + } + field_0x1500 = player->current.pos; + cLib_addCalc2(&mSwimSpeedF, target_speed, 0.3f, 5.0f); + + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, 3, angle_step); + + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + + f32 play_speed = mpMorf->getPlaySpeed(); + //!@bug vec is used here despite not being initialized in all code paths + f32 target_play_speed = + cLib_minMaxLimit((mSwimSpeedF - vec.abs()) / 25.0f, 0.0f, 1.3f) + 0.7f; + cLib_addCalc2(&play_speed, target_play_speed, 0.2f, 0.1f); + mpMorf->setPlaySpeed(play_speed); + + calcBank(angle_step, 3, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + } + + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::swimGoalRiverDescend(void* param_0) { +asm BOOL daNpc_zrA_c::swimGoalRiverDescend(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/swimGoalRiverDescend__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B86A2C-80B86D9C 00E60C 0370+00 2/0 0/0 0/0 .text returnRiverDescend__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::returnRiverDescend(void* param_0) { + cXyz pos, swim_speed; + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + f32 swim_speed_scale = mSwimSpeedScale; + + switch (mMode) { + case 0: + mMode = 2; + // fallthrough + + case 2: + if (mPath.getDstPos(current.pos, pos) && mPath.getIdx() == mPath.getNextIdx()) { + mPath.reverse(); + fopAcM_delete(mActorMngr[2].getActorP()); + fopAcM_delete(this); + return true; + } else { + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + s16 angle_diff_x = angle.x - current.angle.x; + s16 angle_diff_y = angle.y - current.angle.y; + bool bvar4 = false; + + if (mActionType != ACT_TYPE_0 + && (abs(angle_diff_x) > 0x3000 || abs(angle_diff_y) > 0x3000) + && mSwimSpeedF > 14.0f) + { + f32 frame = mpMorf->getFrame(); + if ((angle.z <= 0x2000 || angle_diff_y >= 0) + && (angle.z >= -0x2000 || angle_diff_y <= 0)) + { + if (angle_diff_x < -0x3000) { + if (frame >= 2.0f && frame <= 4.0f) { + bvar4 = true; + } + } else { + if (frame >= 16.0f && frame <= 18.0f) { + mpMorf->setFrame(18.0f); + mpMorf->setMorf(2.0f); + mpMorf->setPlaySpeed(0.1f); + bvar4 = true; + } + } + } + + if (bvar4) { + calcSwimAngle(angle, mSwimAngleCalc, 4, angle_step); + } else { + calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step / 2); + } + } else { + calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step); + } + + cLib_addCalc2(&mSwimSpeedF, swim_speed_scale * daNpc_zrA_Param_c::m.mSwimSpeed, + 0.2f, 3.0f); + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + + if (mAcch.ChkWaterHit()) { + current.pos.y = mAcch.m_wtr.GetHeight() - daNpc_zrA_Param_c::m.mMinDepth; + } + + if (!bvar4) { + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, mSwimSpeedF / daNpc_zrA_Param_c::m.mSwimAnmRate, + 0.2f, 0.1f); + mpMorf->setPlaySpeed(play_speed); + } + + calcBank(angle_step, 8, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + calcCanoeMove(true); + } + + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::returnRiverDescend(void* param_0) { +asm BOOL daNpc_zrA_c::returnRiverDescend(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/returnRiverDescend__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CCA4-80B8CCA8 00084C 0004+00 1/1 0/0 0/0 .rodata @9834 */ @@ -5621,6 +9509,20 @@ SECTION_RODATA static f32 const lit_9834 = 130.0f; COMPILER_STRIP_GATE(0x80B8CCA4, &lit_9834); /* 80B86D9C-80B86E78 00E97C 00DC+00 3/3 0/0 0/0 .text moveRiverPosCalc__11daNpc_zrA_cFR4cXyz */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::moveRiverPosCalc(cXyz& o_pos) { + cXyz pos; + mPath.getDstPos(daPy_getPlayerActorClass()->current.pos, pos); + mRiverPathIdx = mPath.getDstPosChase(mRiverPathIdx, current.pos, o_pos); + f32 water_y; + if (fopAcM_getWaterY(&o_pos, &water_y)) { + o_pos.y = water_y - 130.0f; + } else { + o_pos.y -= 130.0f; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5629,6 +9531,7 @@ asm void daNpc_zrA_c::moveRiverPosCalc(cXyz& param_0) { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/moveRiverPosCalc__11daNpc_zrA_cFR4cXyz.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CCA8-80B8CCAC 000850 0004+00 0/1 0/0 0/0 .rodata @9860 */ @@ -5639,6 +9542,31 @@ COMPILER_STRIP_GATE(0x80B8CCA8, &lit_9860); #pragma pop /* 80B86E78-80B86FAC 00EA58 0134+00 1/1 0/0 0/0 .text createRuppi__11daNpc_zrA_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::createRuppi() { + int item; + if (cLib_getRndValue(0, 5) < 4) { + item = GREEN_RUPEE; + } else { + item = BLUE_RUPEE; + } + cXyz pos(0.0f, 0.0f, -100.0f); + mDoMtx_stack_c::transS(current.pos); + mDoMtx_stack_c::ZXYrotM(mCurAngle.x, mCurAngle.y, mCurAngle.z); + mDoMtx_stack_c::multVec(&pos, &pos); + f32 water_y; + if (fopAcM_getWaterY(&pos, &water_y)) { + pos.y = water_y + 50.0f; + } + csXyz angle(0, current.angle.y, 0); + cXyz scl(1.0f, 1.0f, 1.0f); + f32 speed_f = 0.0f; + f32 speed_y = 50.0f; + fopAcM_fastCreateItem(&pos, item, fopAcM_GetRoomNo(this), + &angle, &scl, &speed_f, &speed_y, -1, 0, NULL); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5647,6 +9575,7 @@ asm void daNpc_zrA_c::createRuppi() { #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/createRuppi__11daNpc_zrA_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CCAC-80B8CCB0 000854 0004+00 0/1 0/0 0/0 .rodata @9933 */ @@ -5671,14 +9600,106 @@ COMPILER_STRIP_GATE(0x80B8CCB4, &lit_9935); #pragma pop /* 80B86FAC-80B872F0 00EB8C 0344+00 3/0 0/0 0/0 .text ECut_beforeBlastzrR__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::ECut_beforeBlastzrR(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + cXyz player_pos = daPy_getPlayerActorClass()->current.pos; + cXyz canoe_pos(41744.92f, -6498.715f, -18601.64f); + daCanoe_c* canoe; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + daNpcF_offTmpBit(0xb); + break; + case 10: + initTalk(mFlowID, NULL); + break; + case 15: + break; + case 20: + initTalk(mFlowID, NULL); + break; + } + } + + switch (prm) { + case 0: + calcWaitSwim(true); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 0x20, 0x200); + setAngle(mCurAngle.y); + ret = true; + break; + + case 10: + if (talkProc(NULL, 1, NULL)) { + ret = true; + } + canoe = (daCanoe_c*)fpcM_Search(s_sub, this); + if (canoe != NULL) { + canoe->setPosAndAngle(&canoe_pos, -0x35e8); + } + calcWaitSwim(true); + cLib_addCalcAngleS2(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), 0x20, 0x200); + setAngle(mCurAngle.y); + break; + + case 15: { + canoe = (daCanoe_c*)fpcM_Search(s_sub, this); + if (canoe != NULL) { + canoe->setPosAndAngle(&canoe_pos, -0x35e8); + } + cXyz target_pos(30895.56f, -6592.85f, -23170.2f); + calcWaitSwim(true); + s16 target_angle = cLib_targetAngleY(¤t.pos, &target_pos); + if (mCurAngle.y != target_angle) { + if (abs((s16)(mCurAngle.y - target_angle)) > 0x400) { + mCurAngle.y -= 0x400; + } else { + mCurAngle.y = target_angle; + } + setAngle(mCurAngle.y); + } else { + ret = true; + } + break; + } + + case 20: + if (talkProc(NULL, 1, NULL)) { + ret = true; + } + canoe = (daCanoe_c*)fpcM_Search(s_sub, this); + if (canoe != NULL) { + canoe->setPosAndAngle(&canoe_pos, -0x35e8); + } + calcWaitSwim(true); + break; + + default: + ret = true; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_beforeBlastzrR(int param_0) { +asm BOOL daNpc_zrA_c::ECut_beforeBlastzrR(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_beforeBlastzrR__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CCB8-80B8CCBC 000860 0004+00 0/0 0/0 0/0 .rodata @9936 */ @@ -5732,14 +9753,77 @@ COMPILER_STRIP_GATE(0x80B8CCD0, &lit_9991); /* 80B872F0-80B87510 00EED0 0220+00 1/0 0/0 0/0 .text ECut_afterBlastzrR__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::ECut_afterBlastzrR(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + cXyz player_pos = daPy_getPlayerActorClass()->current.pos; + cXyz canoe_pos(40944.92f, -6498.715f, -18601.64f); + daCanoe_c* canoe; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: { + cXyz target_pos(32651.5f, -5900.219f, -22464.53f); + setLookMode(LOOK_NONE); + mTurnMode = 0; + calcWaistAngleStop(); + field_0x1550 = true; + mSwimSpeedF = 0.0f; + mIsTurning = true; + current.pos.set(34301.45f, -6541.864f, -24243.62f); + old.pos = current.pos; + setAngle(cLib_targetAngleY(¤t.pos, &target_pos)); + field_0x15c0 = 2; + break; + } + + case 10: + initTalk(mFlowID, NULL); + break; + } + } + + switch (prm) { + case 0: + case 10: + calcWaitSwim(true); + canoe = (daCanoe_c*)fpcM_Search(s_sub, this); + if (canoe != NULL) { + canoe->setPosAndAngle(&canoe_pos, -0x35e8); + } + if (prm == 0) { + ret = true; + } else { + if (talkProc(NULL, 1, NULL)) { + ret = true; + } + } + break; + + default: + ret = true; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_afterBlastzrR(int param_0) { +asm BOOL daNpc_zrA_c::ECut_afterBlastzrR(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_afterBlastzrR__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CCD4-80B8CCD8 00087C 0004+00 0/2 0/0 0/0 .rodata @10576 */ @@ -5814,64 +9898,830 @@ COMPILER_STRIP_GATE(0x80B8CCF8, &lit_10585); /* 80B87510-80B88B04 00F0F0 15F4+00 1/0 0/0 0/0 .text ECut_thanksBlast__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals and generics +BOOL daNpc_zrA_c::ECut_thanksBlast(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + f32 water_height = mAcch.m_wtr.GetHeight(); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz player_pos = player->current.pos; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + daNpcF_offTmpBit(0xb); + daNpcF_offTmpBit(0xc); + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_SWIM_A, -1.0f, false); + } + mTurnMode = 0; + break; + + case 1: + if (mActorMngr[2].getActorP() != NULL + && fopAcM_GetName(mActorMngr[2].getActorP()) == PROC_CANOE) + { + static_cast(mActorMngr[2].getActorP())->setWaterFallDownSe(); + } + daPy_getPlayerActorClass()->offCanoeSlider(); + if (daNpcF_chkEvtBit(0x60)) { + dComIfG_TimerDeleteRequest(4); + } else { + dComIfG_TimerDeleteRequest(3); + } + dMeter2Info_resetMiniGameItem(false); + break; + + case 10: + initTalk(mFlowID, NULL); + break; + + case 20: { + mPath.onReverse(); + mPath.setIdx(mPath.getEndIdx() - 1); + cXyz pos1(-77941.7f, -18800.0f - daNpc_zrA_Param_c::m.mMinDepth - 30.0f, 39645.3f); + cXyz pos2(-78941.7f, -18800.0f - daNpc_zrA_Param_c::m.mMinDepth - 30.0f, 39645.3f); + current.pos = pos1; + current.angle.y = cLib_targetAngleY(&pos1, &player_pos); + setAngle(current.angle.y); + + cXyz water_pos = current.pos; + f32 water_y; + if (fopAcM_getWaterY(&water_pos, &water_y)) { + water_pos.y = water_y; + } + + cXyz offset(0.0f, 0.0f, daNpc_zrA_Param_c::m.field_0xa0); + csXyz angle(0, cLib_targetAngleY(&pos1, &pos2), 0); + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::transM(offset); + mDoMtx_stack_c::multVecZero(&field_0x159c[0]); + field_0x159c[0] += water_pos; + + offset.set(0.0f, 0.0f, daNpc_zrA_Param_c::m.field_0xa4); + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::transM(offset); + mDoMtx_stack_c::multVecZero(&field_0x159c[1]); + field_0x159c[1] += field_0x159c[0]; + field_0x159c[2] = field_0x159c[1]; + + cLib_targetAngleY(&pos2, &pos1); + static_cast(mActorMngr[2].getActorP()) + ->setPosAndAngle(&field_0x159c[1], angle.y + 0x8000); + break; + } + + case 30: + initTalk(mFlowID, NULL); + break; + + case 31: { + int item_id = 0; + if (mFlow.getEventId(&item_id) == 1) { + mItemID = fopAcM_createItemForPresentDemo(¤t.pos, item_id, + 0, -1, -1, NULL, NULL); + } + field_0x9eb = true; + break; + } + + case 40: + field_0x9eb = false; + initTalk(mFlowID, NULL); + break; + + case 50: + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_DIVE_B_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_DIVE_B_SWIM_A, -1.0f, false); + } + break; + + case 60: + calcWaistAngleInit(); + mEventTimer = 120; + mSwimAngleCalc = current.angle; + break; + } + } + + switch (prm) { + case 0: + if (player_pos.y < -18640.0f) { + ret = true; + } + // fallthrough + + case 1: + if (mMotion == MOT_SWIM_A || mMotion == MOT_SWIM_B) { + if (mBaseMotionAnm != ANM_SWIM_A && mBaseMotionAnm != ANM_SWIM_B) { + break; + } + + cXyz pos; + f32 target_speed; + if (mPath.getIdx() != mPath.getNextIdx()) { + mPath.getDstPos(current.pos, pos); + cXyz vec = field_0x1500 - player->current.pos; + target_speed = vec.abs() * 1.2f; + if (target_speed < daNpc_zrA_Param_c::m.mSwimSpeed) { + target_speed = daNpc_zrA_Param_c::m.mSwimSpeed; + } + } else { + if ((field_0x1500 - player->current.pos).absXZ() < 5.0f) { + cXyz vec1(350.0f, 0.0f, 0.0f); + cXyz vec2, vec3; + mDoMtx_stack_c::YrotS(player->current.angle.y); + mDoMtx_stack_c::multVec(&vec1, &vec2); + vec3 = player->current.pos - vec2; + vec2 += player->current.pos; + if ((vec2 - current.pos).absXZ() < (vec3 - current.pos).absXZ()) { + pos = vec2; + } else { + pos = vec3; + } + if ((player_pos - current.pos).absXZ() > 450.0f) { + target_speed = daNpc_zrA_Param_c::m.mSwimSpeed * 1.5f * 1.5f; + } else { + target_speed = 15.0f; + pos = player_pos; + } + } else { + target_speed = 0.0f; + if (mSwimSpeedF < 10.0f) { + pos = player_pos; + } else { + mPath.getDstPos(current.pos, pos); + } + } + } + + cLib_addCalc2(&mSwimSpeedF, target_speed, 0.2f, 3.0f); + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 1.0f, 0.2f, 0.03f); + mpMorf->setPlaySpeed(play_speed); + + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + current.angle.z = 0; + calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step); + calcBank(angle_step, 8, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + if (mAcch.ChkWaterHit() + && current.pos.y > water_height - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = water_height - daNpc_zrA_Param_c::m.mMinDepth; + } + + if ((field_0x1500 - player->current.pos).absXZ() < 10.0f + && (player_pos - current.pos).absXZ() < 400.0f) + { + setMotion(MOT_FLOAT_B, -1.0f, false); + calcWaistAngleStop(); + } + field_0x1500 = player->current.pos; + } else { + calcWaitSwim(true); + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + if (mBaseMotionAnm == ANM_WAIT_SWIM) { + if (prm == 1) { + ret = true; + } + mTurnMode = 0; + } + } else { + cLib_chaseAngleS(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), + daNpc_zrA_Param_c::m.mSwimAngleSpeed); + setAngle(mCurAngle.y); + } + } + + break; + + case 10: + calcWaitSwim(true); + if (talkProc(NULL, 1, NULL)) { + ret = true; + } + break; + + case 20: + calcWaitSwim(true); + calcCanoeMove(false); + current.angle.y = cLib_targetAngleY(¤t.pos, &player_pos); + setAngle(current.angle.y); + ret = true; + break; + + case 30: + case 40: + calcWaitSwim(true); + calcCanoeMove(false); + if (talkProc(NULL, 1, NULL)) { + ret = true; + mSwimAngleCalc = current.angle; + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + setLookMode(LOOK_NONE); + } + break; + + case 31: + field_0x9eb = true; + ret = true; + calcWaitSwim(true); + calcCanoeMove(false); + break; + + case 50: { + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + cLib_chaseF(&mScaleFactor, daNpc_zrA_Param_c::m.mMaxScaleFactor, + (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + cXyz pos; + csXyz angle; + mPath.getDstPosDst2(current.pos, pos); + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, 4, angle_step); + shape_angle = mCurAngle = current.angle; + + f32 frame = mpMorf->getFrame(); + cXyz dive_speed(0.0f, 0.0f, 0.0f); + if (mBaseMotionAnm == ANM_DIVE_B) { + if (frame <= 3.0f) { + dive_speed.set(0.0f, 0.0f, 0.0f); + } else if (frame <= 6.0f) { + dive_speed.set(0.0f, 22.0f, 0.0f); + } else if (frame <= 9.0f) { + dive_speed.set(0.0f, 6.0f, 8.5f); + } else if (frame <= 13.0f) { + dive_speed.set(0.0f, -9.25f, 4.5f); + } else if (frame <= 20.0f) { + dive_speed.set(0.0f, -14.0f, 2.5f); + } else { + dive_speed.set(0.0f, 0.0f, 6.25f); + } + } + mDoMtx_stack_c::ZXYrotS(current.angle); + mDoMtx_stack_c::multVec(&dive_speed, &dive_speed); + current.pos += dive_speed; + + if (mBaseMotionAnm == ANM_SWIM_A || mBaseMotionAnm == ANM_SWIM_B) { + ret = true; + if (!calcWaistAngleCheck()) { + calcWaistAngleInit(); + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + } + cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + } + + calcCanoeMove(true); + break; + } + + case 60: { + cXyz pos; + mPath.getDstPos(current.pos, pos); + f32 water_y; + if (fopAcM_getWaterY(¤t.pos, &water_y) && pos.y > water_y) { + pos.y = water_y; + } + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + current.angle.z = 0; + calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step); + calcBank(angle_step, 8, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + if (mAcch.ChkWaterHit() && current.pos.y > water_y - daNpc_zrA_Param_c::m.mMinDepth) { + current.pos.y = water_y - daNpc_zrA_Param_c::m.mMinDepth; + } + calcCanoeMove(true); + if (cLib_calcTimer(&mEventTimer) == 0) { + ret = true; + } + break; + } + + default: + ret = true; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_thanksBlast(int param_0) { +asm BOOL daNpc_zrA_c::ECut_thanksBlast(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_thanksBlast__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B88B04-80B8A064 0106E4 1560+00 1/0 0/0 0/0 .text ECut_resultAnnounce__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals and generics +BOOL daNpc_zrA_c::ECut_resultAnnounce(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + f32 water_height = mAcch.m_wtr.GetHeight(); + daPy_py_c* player = daPy_getPlayerActorClass(); + cXyz player_pos = player->current.pos; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + daNpcF_offTmpBit(0xb); + daNpcF_offTmpBit(0xc); + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_SWIM_A, -1.0f, false); + } + mTurnMode = 0; + break; + + case 1: + if (mActorMngr[2].getActorP() != NULL + && fopAcM_GetName(mActorMngr[2].getActorP()) == PROC_CANOE) + { + static_cast(mActorMngr[2].getActorP())->setWaterFallDownSe(); + } + daPy_getPlayerActorClass()->offCanoeSlider(); + dComIfG_TimerDeleteRequest(4); + dMeter2Info_resetMiniGameItem(false); + break; + + case 10: + initTalk(mFlowID, NULL); + break; + + case 20: { + mPath.onReverse(); + mPath.setIdx(mPath.getEndIdx() - 1); + cXyz pos1(-77941.7f, -18800.0f - daNpc_zrA_Param_c::m.mMinDepth - 30.0f, 39645.3f); + cXyz pos2(-78941.7f, -18800.0f - daNpc_zrA_Param_c::m.mMinDepth - 30.0f, 39645.3f); + current.pos = pos1; + current.angle.y = cLib_targetAngleY(&pos1, &player_pos); + setAngle(current.angle.y); + + cXyz water_pos = current.pos; + f32 water_y; + if (fopAcM_getWaterY(&water_pos, &water_y)) { + water_pos.y = water_y; + } + + cXyz offset(0.0f, 0.0f, daNpc_zrA_Param_c::m.field_0xa0); + csXyz angle(0, cLib_targetAngleY(&pos1, &pos2), 0); + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::transM(offset); + mDoMtx_stack_c::multVecZero(&field_0x159c[0]); + field_0x159c[0] += water_pos; + + offset.set(0.0f, 0.0f, daNpc_zrA_Param_c::m.field_0xa4); + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::transM(offset); + mDoMtx_stack_c::multVecZero(&field_0x159c[1]); + field_0x159c[1] += field_0x159c[0]; + field_0x159c[2] = field_0x159c[1]; + + cLib_targetAngleY(&pos2, &pos1); + static_cast(mActorMngr[2].getActorP()) + ->setPosAndAngle(&field_0x159c[1], angle.y + 0x8000); + dComIfGp_event_offHindFlag(0x80); + break; + } + + case 30: + initTalk(mFlowID, NULL); + break; + + case 40: + if (mActionType == ACT_TYPE_0) { + setMotion(MOT_DIVE_B_SWIM_B, -1.0f, false); + } else { + setMotion(MOT_DIVE_B_SWIM_A, -1.0f, false); + } + break; + + case 50: + calcWaistAngleInit(); + mEventTimer = 120; + mSwimAngleCalc = current.angle; + break; + } + } + + switch (prm) { + case 0: + if (player_pos.y < -18640.0f) { + ret = true; + } + // fallthrough + + case 1: + if (mMotion == MOT_SWIM_A || mMotion == MOT_SWIM_B) { + if (mBaseMotionAnm != ANM_SWIM_A && mBaseMotionAnm != ANM_SWIM_B) { + break; + } + + cXyz pos; + f32 target_speed; + if (mPath.getIdx() != mPath.getNextIdx()) { + mPath.getDstPos(current.pos, pos); + cXyz vec = field_0x1500 - player->current.pos; + target_speed = vec.abs() * 1.2f; + if (target_speed < daNpc_zrA_Param_c::m.mSwimSpeed) { + target_speed = daNpc_zrA_Param_c::m.mSwimSpeed; + } + } else { + if ((field_0x1500 - player->current.pos).absXZ() < 5.0f) { + cXyz vec1(350.0f, 0.0f, 0.0f); + cXyz vec2, vec3; + mDoMtx_stack_c::YrotS(player->current.angle.y); + mDoMtx_stack_c::multVec(&vec1, &vec2); + vec3 = player->current.pos - vec2; + vec2 += player->current.pos; + if ((vec2 - current.pos).absXZ() < (vec3 - current.pos).absXZ()) { + pos = vec2; + } else { + pos = vec3; + } + if ((player_pos - current.pos).absXZ() > 450.0f) { + target_speed = daNpc_zrA_Param_c::m.mSwimSpeed * 1.5f * 1.5f; + } else { + target_speed = 15.0f; + pos = player_pos; + } + } else { + target_speed = 0.0f; + if (mSwimSpeedF < 10.0f) { + pos = player_pos; + } else { + mPath.getDstPos(current.pos, pos); + } + } + } + + cLib_addCalc2(&mSwimSpeedF, target_speed, 0.2f, 3.0f); + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 1.0f, 0.2f, 0.03f); + mpMorf->setPlaySpeed(play_speed); + + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + current.angle.z = 0; + calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step); + calcBank(angle_step, 8, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + if (mAcch.ChkWaterHit() + && current.pos.y > water_height - daNpc_zrA_Param_c::m.mMinDepth) + { + current.pos.y = water_height - daNpc_zrA_Param_c::m.mMinDepth; + } + + if ((field_0x1500 - player->current.pos).absXZ() < 10.0f + && (player_pos - current.pos).absXZ() < 400.0f) + { + setMotion(MOT_FLOAT_B, -1.0f, false); + calcWaistAngleStop(); + } + field_0x1500 = player->current.pos; + } else { + calcWaitSwim(true); + if (mCurAngle.y == fopAcM_searchPlayerAngleY(this)) { + if (mBaseMotionAnm == ANM_WAIT_SWIM) { + if (prm == 1) { + ret = true; + } + mTurnMode = 0; + } + } else { + cLib_chaseAngleS(&mCurAngle.y, fopAcM_searchPlayerAngleY(this), + daNpc_zrA_Param_c::m.mSwimAngleSpeed); + setAngle(mCurAngle.y); + } + } + + break; + + case 10: + calcWaitSwim(true); + if (talkProc(NULL, 1, NULL)) { + ret = true; + } + break; + + case 20: + calcWaitSwim(true); + calcCanoeMove(false); + current.angle.y = cLib_targetAngleY(¤t.pos, &player_pos); + setAngle(current.angle.y); + ret = true; + break; + + case 30: + calcWaitSwim(true); + calcCanoeMove(false); + if (talkProc(NULL, 1, NULL)) { + if (dComIfGs_isSaveDunSwitch(0x3e)) { + dStage_changeScene(0xf, 0.0f, 0, fopAcM_GetRoomNo(this), 0, -1); + } else { + ret = true; + mSwimAngleCalc = current.angle; + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + setLookMode(LOOK_NONE); + } + } + break; + + case 40: { + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + cLib_chaseF(&mScaleFactor, daNpc_zrA_Param_c::m.mMaxScaleFactor, + (daNpc_zrA_Param_c::m.mMaxScaleFactor - 1.0f) / 30.0f); + cXyz pos; + csXyz angle; + mPath.getDstPosDst2(current.pos, pos); + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, 4, angle_step); + shape_angle = mCurAngle = current.angle; + + f32 frame = mpMorf->getFrame(); + cXyz dive_speed(0.0f, 0.0f, 0.0f); + if (mBaseMotionAnm == ANM_DIVE_B) { + if (frame <= 3.0f) { + dive_speed.set(0.0f, 0.0f, 0.0f); + } else if (frame <= 6.0f) { + dive_speed.set(0.0f, 22.0f, 0.0f); + } else if (frame <= 9.0f) { + dive_speed.set(0.0f, 6.0f, 8.5f); + } else if (frame <= 13.0f) { + dive_speed.set(0.0f, -9.25f, 4.5f); + } else if (frame <= 20.0f) { + dive_speed.set(0.0f, -14.0f, 2.5f); + } else { + dive_speed.set(0.0f, 0.0f, 6.25f); + } + } + mDoMtx_stack_c::ZXYrotS(current.angle); + mDoMtx_stack_c::multVec(&dive_speed, &dive_speed); + current.pos += dive_speed; + + if (mBaseMotionAnm == ANM_SWIM_A || mBaseMotionAnm == ANM_SWIM_B) { + ret = true; + if (!calcWaistAngleCheck()) { + calcWaistAngleInit(); + mSwimSpeedScale = 1.0f; + mSwimSpeedF = mSwimSpeedScale * daNpc_zrA_Param_c::m.mSwimSpeed; + } + cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + } + + calcCanoeMove(true); + break; + } + + case 50: { + cXyz pos; + mPath.getDstPos(current.pos, pos); + f32 water_y; + if (fopAcM_getWaterY(¤t.pos, &water_y) && pos.y > water_y) { + pos.y = water_y; + } + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + current.angle.z = 0; + calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step); + calcBank(angle_step, 8, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + cXyz swim_speed(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + if (mAcch.ChkWaterHit() && current.pos.y > water_y - daNpc_zrA_Param_c::m.mMinDepth) { + current.pos.y = water_y - daNpc_zrA_Param_c::m.mMinDepth; + } + calcCanoeMove(true); + if (cLib_calcTimer(&mEventTimer) == 0) { + ret = true; + } + break; + } + + default: + ret = true; + break; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_resultAnnounce(int param_0) { +asm BOOL daNpc_zrA_c::ECut_resultAnnounce(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_resultAnnounce__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B8A064-80B8A3CC 011C44 0368+00 3/3 0/0 0/0 .text calcCanoeMove__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +void daNpc_zrA_c::calcCanoeMove(BOOL param_0) { + csXyz angle; + cXyz vec; + cXyz water_pos = current.pos; + f32 water_y; + if (fopAcM_getWaterY(&water_pos, &water_y)) { + water_pos.y = water_y; + } + + angle.x = cLib_targetAngleX(&field_0x159c[0], &water_pos); + angle.y = cLib_targetAngleY(&water_pos, &field_0x159c[0]); + angle.z = 0; + + vec.set(0.0f, 0.0f, daNpc_zrA_Param_c::m.field_0xa0); + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::multVec(&vec, &field_0x159c[0]); + field_0x159c[0] += water_pos; + if (fopAcM_getWaterY(&field_0x159c[0], &water_y)) { + field_0x159c[0].y = water_y; + } + + angle.x = cLib_targetAngleX(&field_0x159c[1], &field_0x159c[0]); + angle.y = cLib_targetAngleY(&field_0x159c[0], &field_0x159c[1]); + + vec.set(0.0f, 0.0f, daNpc_zrA_Param_c::m.field_0xa4); + mDoMtx_stack_c::ZXYrotS(angle); + mDoMtx_stack_c::multVec(&vec, &field_0x159c[1]); + field_0x159c[1] += field_0x159c[0]; + if (fopAcM_getWaterY(&field_0x159c[1], &water_y)) { + field_0x159c[1].y = water_y; + } + + if (param_0) { + f32 fvar2 = (water_pos - field_0x159c[2]).abs(); + (water_pos - field_0x159c[1]).abs(); + if (fvar2 > daNpc_zrA_Param_c::m.field_0xa0 + daNpc_zrA_Param_c::m.field_0xa4) + { + cLib_addCalcPos2(&field_0x159c[2], field_0x159c[1], 0.2f, mSwimSpeedF * 1.2f); + if (fopAcM_getWaterY(&field_0x159c[2], &water_y)) { + field_0x159c[2].y = water_y; + } + } + } else { + field_0x159c[2] = field_0x159c[1]; + } + + static_cast(mActorMngr[2].getActorP()) + ->setPosAndAngle(&field_0x159c[2], angle.y + 0x8000); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::calcCanoeMove(int param_0) { +asm void daNpc_zrA_c::calcCanoeMove(BOOL param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcCanoeMove__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B8A3CC-80B8A43C 011FAC 0070+00 1/1 0/0 0/0 .text s_subMark__FPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void s_subMark(void* param_0, void* param_1) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMark__FPvPv.s" +static void* s_subMark(void* i_proc, void* i_this) { + if (fopAc_IsActor(i_proc) && fopAcM_GetName(i_proc) == PROC_ZRA_MARK) { + daObjZraMark_c* zra_mark = static_cast(i_proc); + daNpc_zrA_c* _this = static_cast(i_this); + if (zra_mark->getMarkNo() == _this->getNoFromParam()) { + return i_proc; + } + } + return NULL; } -#pragma pop /* 80B8A43C-80B8A54C 01201C 0110+00 1/0 0/0 0/0 .text tobiSearch__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::tobiSearch(void* param_0) { + daObjZraMark_c* zra_mark; + + switch (mMode) { + case 0: + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + setLookMode(LOOK_NONE); + mActionSelect = 0; + mCcStts.SetWeight(0); + mMode = 2; + // fallthrough + + case 2: + zra_mark = (daObjZraMark_c*)fpcM_Search(s_subMark, this); + if (zra_mark != NULL) { + zra_mark->entryPointer(this); + setAction(&tobiWait); + } + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::tobiSearch(void* param_0) { +asm BOOL daNpc_zrA_c::tobiSearch(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/tobiSearch__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B8A54C-80B8A648 01212C 00FC+00 2/0 0/0 0/0 .text tobiWait__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::tobiWait(void* param_0) { + switch (mMode) { + case 0: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + setLookMode(LOOK_NONE); + mAttnChangeTimer = 0; + mTurnMode = 0; + mActionSelect = 1; + mMode = 2; + // fallthrough + + case 2: + if (mCcCyl.ChkTgHit() || field_0x15c1) { + setAction(&tobikomi1); + } + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::tobiWait(void* param_0) { +asm BOOL daNpc_zrA_c::tobiWait(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/tobiWait__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CCFC-80B8CD00 0008A4 0004+00 0/3 0/0 0/0 .rodata @11359 */ @@ -5896,14 +10746,55 @@ COMPILER_STRIP_GATE(0x80B8CD04, &lit_11361); #pragma pop /* 80B8A648-80B8A7F8 012228 01B0+00 2/0 0/0 0/0 .text tobikomi1__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::tobikomi1(void* param_0) { + switch (mMode) { + case 0: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_S, -1.0f, false); + mActionSelect = 2; + mMode = 2; + // fallthrough + + case 2: + if (mBaseMotionAnm == MOT_FLOAT_B) { + if (mpMorf->isStop()) { + cXyz vec(-1.68f, -7.99f, 206.37f); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&vec, &vec); + current.pos += vec; + old.pos = current.pos; + setAction(&tobikomi2); + } else { + s16 angle_y = home.angle.y; + if (getAngleNoFromParam() == 1) { + angle_y -= 0x2000; + } else if (getAngleNoFromParam() == 2) { + angle_y += 0x2000; + } + cLib_chaseAngleS(&mCurAngle.y, angle_y, 0x800); + setAngle(mCurAngle.y); + } + } + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::tobikomi1(void* param_0) { +asm BOOL daNpc_zrA_c::tobikomi1(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/tobikomi1__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CD08-80B8CD0C 0008B0 0004+00 0/1 0/0 0/0 .rodata @11409 */ @@ -5914,64 +10805,327 @@ COMPILER_STRIP_GATE(0x80B8CD08, &lit_11409); #pragma pop /* 80B8A7F8-80B8AA1C 0123D8 0224+00 2/0 0/0 0/0 .text tobikomi2__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::tobikomi2(void* param_0) { + f32 water_y; + + switch (mMode) { + case 0: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_T, -1.0f, false); + mActionSelect = 3; + mSwimSpeed.set(0.0f, -47.0f, 36.0f); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&mSwimSpeed, &mSwimSpeed); + mMode = 2; + // fallthrough + + case 2: + if (fopAcM_getWaterY(¤t.pos, &water_y)) { + cXyz head_pos; + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::scaleM(scale); + mDoMtx_stack_c::multVecZero(&head_pos); + if (head_pos.y <= water_y) { + cXyz water_pos = head_pos; + water_pos.y = water_y; + fopKyM_createWpillar(&water_pos, 2.5f, 0); + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH, 0, -1); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_E, -1.0f, false); + setAction(&tobikomi3); + break; + } + } + mSwimSpeed.y -= 3.0f; + current.pos += mSwimSpeed; + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::tobikomi2(void* param_0) { +asm BOOL daNpc_zrA_c::tobikomi2(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/tobikomi2__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B8AA1C-80B8AB78 0125FC 015C+00 2/0 0/0 0/0 .text tobikomi3__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::tobikomi3(void* param_0) { + switch (mMode) { + case 0: + mActionSelect = 4; + mSwimAngleCalc = current.angle; + mMode = 2; + // fallthrough + + case 2: { + cXyz vec(0.0f, 0.0f, daNpc_zrA_Param_c::m.mSwimSpeed * 1.5f); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&vec, &vec); + cLib_chasePos(&mSwimSpeed, vec, 25.0f); + current.pos += mSwimSpeed; + if (mBaseMotionAnm == ANM_SWIM_A) { + if (field_0x15c1) { + setAction(&tobiJump); + } else { + setAction(&tobiEnd); + } + } + break; + } + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::tobikomi3(void* param_0) { +asm BOOL daNpc_zrA_c::tobikomi3(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/tobikomi3__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B8AB78-80B8B1FC 012758 0684+00 2/0 0/0 0/0 .text tobiJump__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::tobiJump(void* param_0) { + cXyz swim_speed; + csXyz angle; + f32 water_y; + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed * 2; + s16 angle_scale = 4; + + switch (mMode) { + case 0: + mActionSelect = 5; + mSwimAngleCalc = current.angle; + mMode = 2; + // fallthrough + + case 2: { + cXyz head_pos; + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::scaleM(scale); + mDoMtx_stack_c::multVecZero(&head_pos); + + if (field_0x153e) { + if (mpMorf->getFrame() > 13.0f && mpMorf->getFrame() < 17.0f) { + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, 0.3f, 0.5f, 0.8f); + mpMorf->setPlaySpeed(play_speed); + } + + calcBank(angle_step, angle_scale, current.angle.y, current.angle.z); + mSwimSpeed.y -= 2.0f; + current.pos += mSwimSpeed; + if (current.angle.x < 0x3a00) { + current.angle.x = -cM_atan2s(mSwimSpeed.y, mSwimSpeed.absXZ()); + } + shape_angle = mCurAngle = current.angle; + + if (fopAcM_getWaterY(¤t.pos, &water_y)) { + if (mIsAboveWater && head_pos.y + mSwimSpeed.y <= water_y) { + cXyz water_pos = head_pos; + water_pos.y = water_y; + fopKyM_createWpillar(&water_pos, 2.5f, 0); + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH, 0, -1); + mIsAboveWater = false; + } + + if (current.pos.y <= water_y - daNpc_zrA_Param_c::m.mMinDepth) { + setAction(&tobiEnd); + mSwimSpeedF = mSwimSpeed.absXZ(); + } + } + + return true; + } else { + angle.x = -0x3b00; + angle.y = current.angle.y; + angle.z = current.angle.z; + + if (fopAcM_getWaterY(¤t.pos, &water_y)) { + angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed * 2; + angle_scale = 2; + if (!(head_pos.y < water_y)) { + if (!mIsAboveWater) { + cXyz water_pos = head_pos; + water_pos.y = water_y; + fopKyM_createWpillar(&water_pos, 2.5f, 0); + mIsAboveWater = true; + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH_OUT, 0, -1); + } + + if (current.pos.y > water_y) { + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + mSwimSpeed = swim_speed; + field_0x153e = true; + return true; + } + } + } + + calcSwimAngle(angle, mSwimAngleCalc, angle_scale, angle_step); + cLib_addCalc2(&mSwimSpeedF, 2.0f * daNpc_zrA_Param_c::m.mSwimSpeed, 0.7f, 10.0f); + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, mSwimSpeedF / daNpc_zrA_Param_c::m.mSwimAnmRate, 0.2f, 0.1f); + mpMorf->setPlaySpeed(play_speed); + shape_angle = mCurAngle = current.angle; + } + + break; + } + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::tobiJump(void* param_0) { +asm BOOL daNpc_zrA_c::tobiJump(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/tobiJump__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B8B1FC-80B8B3A0 012DDC 01A4+00 3/0 0/0 0/0 .text tobiEnd__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::tobiEnd(void* param_0) { + cXyz swim_speed; + s16 angle_step = daNpc_zrA_Param_c::m.mSwimAngleSpeed; + + switch (mMode) { + case 0: + mActionSelect = 6; + mMode = 2; + // fallthrough + + case 2: { + if (fopAcM_otherBgCheck(this, dComIfGp_getPlayer(0)) + || fopAcM_CheckCondition(this, fopAcCnd_NODRAW_e)) + { + fopAcM_delete(this); + return true; + } + + csXyz angle; + angle.x = 0x3000; + angle.y = current.angle.y; + angle.z = current.angle.z; + calcSwimAngle(angle, mSwimAngleCalc, 8, angle_step); + cLib_chaseF(&mSwimSpeedF, daNpc_zrA_Param_c::m.mSwimSpeed, + daNpc_zrA_Param_c::m.mSwimSpeed / 3.0f); + swim_speed.set(0.0f, 0.0f, mSwimSpeedF); + calcSwimPos(swim_speed); + f32 play_speed = mpMorf->getPlaySpeed(); + cLib_addCalc2(&play_speed, mSwimSpeedF / daNpc_zrA_Param_c::m.mSwimAnmRate, 0.2f, 0.1f); + mpMorf->setPlaySpeed(play_speed); + calcBank(angle_step, 8, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + } + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::tobiEnd(void* param_0) { +asm BOOL daNpc_zrA_c::tobiEnd(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/tobiEnd__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* 80B8B3A0-80B8B420 012F80 0080+00 1/1 0/0 0/0 .text s_subSP__FPvPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void s_subSP(void* param_0, void* param_1) { - nofralloc -#include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subSP__FPvPv.s" +static void* s_subSP(void* i_proc, void* i_this) { + if (fopAc_IsActor(i_proc) && fopAcM_GetName(i_proc) == PROC_NPC_ZRA) { + daNpc_zrA_c* other = static_cast(i_proc); + daNpc_zrA_c* _this = static_cast(i_this); + if (other->getType() == _this->getType() + && other->getNoFromParam() != _this->getNoFromParam()) + { + return other; + } + } + return NULL; } -#pragma pop /* 80B8B420-80B8B530 013000 0110+00 1/0 0/0 0/0 .text waitSearch__11daNpc_zrA_cFPv */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::waitSearch(void* param_0) { + switch (mMode) { + case 0: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_WAIT_A, -1.0f, false); + setLookMode(LOOK_NONE); + mAcch.SetGrndNone(); + mAcch.SetWallNone(); + mMode = 2; + // fallthrough + + case 2: + if (mActorMngr[2].getActorP() == NULL) { + fopAc_ac_c* other = (fopAc_ac_c*)fpcM_Search(s_subSP, this); + if (other != NULL) { + mActorMngr[2].entry(other); + } + } + + if (dComIfGs_isSwitch(mSwitch1, fopAcM_GetRoomNo(this))) { + fopAcM_delete(this); + } + break; + + case 3: + break; + } + + return true; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::waitSearch(void* param_0) { +asm BOOL daNpc_zrA_c::waitSearch(void* param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitSearch__11daNpc_zrA_cFPv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80B8CD0C-80B8CD14 0008B4 0008+00 0/1 0/0 0/0 .rodata @11740 */ @@ -6034,25 +11188,305 @@ COMPILER_STRIP_GATE(0x80B8CD2C, &lit_11937); /* 80B8B530-80B8BCE8 013110 07B8+00 1/0 0/0 0/0 .text ECut_searchPrince1__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::ECut_searchPrince1(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + fopAc_ac_c* talk_actors[2] = {this, mActorMngr[2].getActorP()}; + f32 water_y; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + dComIfGs_onSwitch(mSwitch1, fopAcM_GetRoomNo(this)); + setLookMode(LOOK_ACTOR); + break; + + case 10: + initTalk(mFlowID, talk_actors); + break; + + case 20: + setLookMode(LOOK_NONE); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_S, -1.0f, false); + break; + + case 30: + mSwimSpeed.set(0.0f, -31.2f, 14.7f); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&mSwimSpeed, &mSwimSpeed); + break; + + case 40: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_E, -1.0f, false); + mSwimAngleCalc = current.angle; + break; + + case 50: + break; + } + } + + switch (prm) { + case 0: + ret = true; + break; + + case 10: + if (talkProc(NULL, 0, talk_actors)) { + ret = true; + } + break; + + case 20: { + if (mBaseMotionAnm == ANM_TOBIKOMI_S) { + if (mpMorf->isStop()) { + cXyz dive_speed(-1.68f, -30.0f, 210.37f); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&dive_speed, &dive_speed); + current.pos += dive_speed; + old.pos = current.pos; + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_T, -1.0f, false); + ret = true; + } else { + cLib_chaseAngleS(&mCurAngle.y, 0x2dca, 0x200); + setAngle(mCurAngle.y); + } + } else if (mBaseMotionAnm == ANM_TOBIKOMI_T) { + ret = true; + } + cXyz head_pos; + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::scaleM(scale); + mDoMtx_stack_c::multVecZero(&head_pos); + break; + } + + case 30: + if (mBaseMotionAnm == ANM_TOBIKOMI_E) { + ret = true; + } else if (fopAcM_getWaterY(¤t.pos, &water_y)) { + cXyz head_pos; + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::scaleM(scale); + mDoMtx_stack_c::multVecZero(&head_pos); + if (head_pos.y <= water_y) { + cXyz water_pos = head_pos; + water_pos.y = water_y; + fopKyM_createWpillar(&water_pos, 2.5f, 0); + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH, 0, -1); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_E, -1.0f, false); + ret = true; + break; + } + } + mSwimSpeed.y -= 3.0f; + current.pos += mSwimSpeed; + break; + + case 40: { + if (mBaseMotionAnm == ANM_SWIM_A) { + ret = true; + } + cXyz swim_speed(0.0f, 0.0f, daNpc_zrA_Param_c::m.mSwimSpeed); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&swim_speed, &swim_speed); + cLib_chasePos(&mSwimSpeed, swim_speed, 25.0f); + current.pos += mSwimSpeed; + break; + } + + case 50: { + cXyz pos(-4807.7f, -207.444f, 5109.854f); + cXyz swim_speed(0.0f, 0.0f, daNpc_zrA_Param_c::m.mSwimSpeed); + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + mpMorf->setPlaySpeed(daNpc_zrA_Param_c::m.mSwimSpeed / daNpc_zrA_Param_c::m.mSwimAnmRate); + calcSwimAngle(angle, mSwimAngleCalc, 23, daNpc_zrA_Param_c::m.mSwimAngleSpeed / 2); + calcSwimPos(swim_speed); + calcBank(daNpc_zrA_Param_c::m.mSwimAngleSpeed / 2, 16, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + if ((pos - current.pos).absXZ() < 100.0f) { + ret = true; + } + break; + } + + default: + ret = true; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_searchPrince1(int param_0) { +asm BOOL daNpc_zrA_c::ECut_searchPrince1(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_searchPrince1__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B8BCE8-80B8C3E8 0138C8 0700+00 1/0 0/0 0/0 .text ECut_searchPrince2__11daNpc_zrA_cFi */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpc_zrA_c::ECut_searchPrince2(int i_cutIdx) { + dEvent_manager_c& event_manager = dComIfGp_getEventManager(); + BOOL ret = false; + int prm = -1; + f32 water_y; + int* prm_p = dComIfGp_evmng_getMyIntegerP(i_cutIdx, "prm"); + if (prm_p != NULL) { + prm = *prm_p; + } + + if (event_manager.getIsAddvance(i_cutIdx)) { + switch (prm) { + case 0: + setLookMode(LOOK_ACTOR); + break; + + case 10: + break; + + case 20: + setLookMode(LOOK_NONE); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_S, -1.0f, false); + break; + + case 30: + mSwimSpeed.set(0.0f, -31.2f, 14.7f); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&mSwimSpeed, &mSwimSpeed); + break; + + case 40: + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_E, -1.0f, false); + mSwimAngleCalc = current.angle; + break; + + case 50: + break; + } + } + + switch (prm) { + case 0: + ret = true; + break; + + case 10: + ret = true; + break; + + case 20: + if (mBaseMotionAnm == ANM_TOBIKOMI_S) { + if (mpMorf->isStop()) { + cXyz dive_speed(-1.68f, -30.0f, 210.37f); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&dive_speed, &dive_speed); + current.pos += dive_speed; + old.pos = current.pos; + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_T, -1.0f, false); + ret = true; + } else { + cLib_chaseAngleS(&mCurAngle.y, 0x2dca, 0x200); + setAngle(mCurAngle.y); + } + } else if (mBaseMotionAnm == ANM_TOBIKOMI_T) { + ret = true; + } + break; + + case 30: + if (mBaseMotionAnm == ANM_TOBIKOMI_E) { + ret = true; + } else if (fopAcM_getWaterY(¤t.pos, &water_y)) { + cXyz head_pos; + mDoMtx_stack_c::copy(mpMorf->getModel()->getAnmMtx(4)); + mDoMtx_stack_c::scaleM(scale); + mDoMtx_stack_c::multVecZero(&head_pos); + if (head_pos.y <= water_y) { + cXyz water_pos = head_pos; + water_pos.y = water_y; + fopKyM_createWpillar(&water_pos, 2.5f, 0); + setExpression(EXPR_NONE, -1.0f); + setMotion(MOT_TOBIKOMI_E, -1.0f, false); + ret = true; + mCreatureSound.startCreatureSound(Z2SE_ZRA_DIVE_SPLASH, 0, -1); + break; + } + } + mSwimSpeed.y -= 3.0f; + current.pos += mSwimSpeed; + break; + + case 40: { + if (mBaseMotionAnm == ANM_SWIM_A) { + ret = true; + } + cXyz swim_speed(0.0f, 0.0f, daNpc_zrA_Param_c::m.mSwimSpeed); + mDoMtx_stack_c::YrotS(mCurAngle.y); + mDoMtx_stack_c::multVec(&swim_speed, &swim_speed); + cLib_chasePos(&mSwimSpeed, swim_speed, 25.0f); + current.pos += mSwimSpeed; + break; + } + + case 50: { + cXyz pos(-4807.7f, -207.444f, 5109.854f); + cXyz swim_speed(0.0f, 0.0f, daNpc_zrA_Param_c::m.mSwimSpeed); + csXyz angle; + angle.x = cLib_targetAngleX(&pos, ¤t.pos); + angle.y = cLib_targetAngleY(¤t.pos, &pos); + angle.z = current.angle.z; + mpMorf->setPlaySpeed(daNpc_zrA_Param_c::m.mSwimSpeed / daNpc_zrA_Param_c::m.mSwimAnmRate); + calcSwimAngle(angle, mSwimAngleCalc, 23, daNpc_zrA_Param_c::m.mSwimAngleSpeed / 2); + calcSwimPos(swim_speed); + calcBank(daNpc_zrA_Param_c::m.mSwimAngleSpeed / 2, 16, angle.y, angle.z); + current.angle.z = angle.z; + shape_angle = mCurAngle = current.angle; + if ((pos - current.pos).absXZ() < 100.0f) { + ret = true; + } + break; + } + + default: + ret = true; + } + + return ret; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpc_zrA_c::ECut_searchPrince2(int param_0) { +asm BOOL daNpc_zrA_c::ECut_searchPrince2(int param_0) { nofralloc #include "asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ECut_searchPrince2__11daNpc_zrA_cFi.s" } #pragma pop +#endif /* 80B8C3E8-80B8C3EC 013FC8 0004+00 1/0 0/0 0/0 .text adjustShapeAngle__11daNpc_zrA_cFv */ diff --git a/rel/d/a/obj/d_a_obj_digplace/d_a_obj_digplace.cpp b/rel/d/a/obj/d_a_obj_digplace/d_a_obj_digplace.cpp index b3ad49db9fa..eca3a49ba12 100644 --- a/rel/d/a/obj/d_a_obj_digplace/d_a_obj_digplace.cpp +++ b/rel/d/a/obj/d_a_obj_digplace/d_a_obj_digplace.cpp @@ -129,7 +129,7 @@ int daObjDigpl_c::execute() { attention_info.position = point_pos; eyePos = point_pos; - if (point_p->field_0x3 == 0) { + if (point_p->mArg0 == 0) { mType = 0; } else { mType = 2; diff --git a/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.cpp b/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.cpp index b7e1869c5ce..73e5f820578 100644 --- a/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.cpp +++ b/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.cpp @@ -10,41 +10,6 @@ // Types: // -struct request_of_phase_process_class {}; - -struct csXyz { - /* 8026745C */ void operator+=(csXyz&); -}; - -struct cXyz {}; - -struct mDoMtx_stack_c { - /* 8000CE38 */ void scaleM(f32, f32, f32); - /* 8000CE70 */ void scaleM(cXyz const&); - /* 8000CED4 */ void XYZrotM(csXyz const&); - - static u8 now[48]; -}; - -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); -}; - -struct daObjZraMark_c { - /* 80D42678 */ void Create(); - /* 80D4287C */ void CreateHeap(); - /* 80D42A7C */ void Execute(); - /* 80D42B0C */ void Draw(); - /* 80D42C98 */ void Delete(); - /* 80D42CE0 */ void getType(); - /* 80D42D2C */ void setBaseMtx(); - /* 80D42EE0 */ void col_init(); - /* 80D42F5C */ void col_set(); - /* 80D432C8 */ void schHoz(); - /* 80D43314 */ void entryPointer(fopAc_ac_c*); - /* 80D43370 */ void informBlast(); -}; - struct daNpcF_ActorMngr_c { /* 801506B0 */ void initialize(); /* 801506BC */ void entry(fopAc_ac_c*); @@ -53,15 +18,6 @@ struct daNpcF_ActorMngr_c { /* 80D43CB4 */ daNpcF_ActorMngr_c(); }; -struct dKy_tevstr_c {}; - -struct J3DModelData {}; - -struct dScnKy_env_light_c { - /* 801A37C4 */ void settingTevStruct(int, cXyz*, dKy_tevstr_c*); - /* 801A4DA0 */ void setLightTevColorType_MAJI(J3DModelData*, dKy_tevstr_c*); -}; - struct dRes_info_c {}; struct dRes_control_c { @@ -124,42 +80,6 @@ struct _ZraMark_Hahen_Mng_c { /* 80D43A74 */ void draw(); }; -struct Z2SoundObjSimple { - /* 802BE844 */ Z2SoundObjSimple(); -}; - -struct Z2SoundObjBase { - /* 802BDF48 */ ~Z2SoundObjBase(); - /* 802BDFF8 */ void deleteObject(); - /* 802BE4A4 */ void startCollisionSE(u32, u32, Z2SoundObjBase*); -}; - -struct JAISoundID {}; - -struct Vec {}; - -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - -struct JMath { - static u8 sincosTable_[65536]; -}; - -struct J3DModel {}; - -struct J3DLightObj { - /* 80D43C34 */ J3DLightObj(); -}; - -struct J3DLightInfo { - /* 803256C4 */ void operator=(J3DLightInfo const&); -}; - // // Forward References: // @@ -245,10 +165,6 @@ extern "C" void startCollisionSE__14Z2SoundObjBaseFUlUlP14Z2SoundObjBase(); extern "C" void __ct__16Z2SoundObjSimpleFv(); extern "C" void __dl__FPv(); extern "C" void __as__12J3DLightInfoFRC12J3DLightInfo(); -extern "C" void PSMTXCopy(); -extern "C" void PSMTXTrans(); -extern "C" void PSMTXMultVec(); -extern "C" void PSVECAdd(); extern "C" void __construct_array(); extern "C" void _savegpr_22(); extern "C" void _savegpr_25(); @@ -260,9 +176,6 @@ extern "C" void _restgpr_25(); extern "C" void _restgpr_27(); extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); -extern "C" extern u8 const j3dDefaultLightInfo[52]; -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; extern "C" extern void* __vt__8dCcD_Cyl[36]; extern "C" extern void* __vt__9dCcD_Stts[11]; extern "C" extern void* __vt__12cCcD_CylAttr[25]; @@ -271,9 +184,7 @@ extern "C" extern void* __vt__9cCcD_Stts[8]; extern "C" extern void* __vt__16Z2SoundObjSimple[8]; extern "C" u8 now__14mDoMtx_stack_c[48]; extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u8 g_env_light[4880]; extern "C" extern u8 g_meter2_info[248]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 sincosTable___5JMath[65536]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; @@ -879,7 +790,8 @@ asm _ZraMark_Hahen_c::_ZraMark_Hahen_c() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DLightObj::J3DLightObj() { +// asm J3DLightObj::J3DLightObj() { +extern "C" asm void __ct__11J3DLightObjFv() { nofralloc #include "asm/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark/__ct__11J3DLightObjFv.s" } diff --git a/src/d/a/d_a_npc.cpp b/src/d/a/d_a_npc.cpp index c839175d2e5..d9e5d5c50f2 100644 --- a/src/d/a/d_a_npc.cpp +++ b/src/d/a/d_a_npc.cpp @@ -4,6 +4,7 @@ // #include "d/a/d_a_npc.h" +#include "SSystem/SComponent/c_math.h" #include "d/msg/d_msg_object.h" #include "dol2asm.h" #include "m_Do/m_Do_lib.h" @@ -3935,62 +3936,53 @@ asm daBaseNpc_acMngr_c::~daBaseNpc_acMngr_c() { */ /* 8015056C-801505AC 14AEAC 0040+00 2/2 0/0 0/0 .text daNpcF_addIdx__FiiRUsi */ -// may be able to simplify this more -static int daNpcF_addIdx(int param_0, int param_1, u16& param_2, int param_3) { - int tmp = 0; - int tmp2 = param_2; - tmp2 += param_0; +static BOOL daNpcF_addIdx(int i_step, int i_num, u16& i_idx, BOOL i_isClosed) { + int ret = false; + int new_idx = i_idx; + new_idx += i_step; - if (param_1 <= tmp2) { - if (param_3) { - int tmp3 = tmp2 / param_1; - tmp2 -= (tmp3 * param_1); + if (i_num <= new_idx) { + if (i_isClosed) { + new_idx %= i_num; } else { - tmp2 = param_1 + -1; - tmp = 1; + new_idx = i_num - 1; + ret = true; } } - param_2 = tmp2; - return tmp; + i_idx = new_idx; + return ret; } /* 801505AC-801505F8 14AEEC 004C+00 2/2 0/0 0/0 .text daNpcF_subIdx__FiiRUsi */ -// may be able to simplify this more -static int daNpcF_subIdx(int param_0, int param_1, u16& param_2, int param_3) { - int tmp = 0; - int tmp2 = param_2; - tmp2 -= param_0; - - if (0 > tmp2) { - if (param_3) { - int tmp3 = tmp2 / param_1; - int tmp4 = tmp2 - tmp3 * param_1; - param_0 = param_1 + tmp4; - - int tmp5 = param_0 / param_1; - tmp2 = param_0 - (tmp5 * param_1); +static BOOL daNpcF_subIdx(int i_step, int i_num, u16& i_idx, BOOL i_isClosed) { + BOOL ret = false; + int new_idx = i_idx; + new_idx -= i_step; + if (0 > new_idx) { + if (i_isClosed) { + new_idx = (i_num + (new_idx % i_num)) % i_num; } else { - tmp2 = 0; - tmp = 1; + new_idx = 0; + ret = true; } } - param_2 = tmp2; - return tmp; + i_idx = new_idx; + return ret; } /* 801505F8-80150654 14AF38 005C+00 4/4 0/0 0/0 .text daNpcF_incIdx__FiRUsii */ -static int daNpcF_incIdx(int param_0, u16& param_1, int param_2, int param_3) { - return param_3 ? daNpcF_subIdx(1, param_0, param_1, param_2) : - daNpcF_addIdx(1, param_0, param_1, param_2); +static BOOL daNpcF_incIdx(int i_num, u16& i_idx, int i_isClosed, BOOL i_reverse) { + return i_reverse ? daNpcF_subIdx(1, i_num, i_idx, i_isClosed) : + daNpcF_addIdx(1, i_num, i_idx, i_isClosed); } /* 80150654-801506B0 14AF94 005C+00 3/3 0/0 0/0 .text daNpcF_decIdx__FiRUsii */ -static int daNpcF_decIdx(int param_0, u16& param_1, int param_2, int param_3) { - return param_3 ? daNpcF_addIdx(1, param_0, param_1, param_2) : - daNpcF_subIdx(1, param_0, param_1, param_2); +static BOOL daNpcF_decIdx(int i_num, u16& i_idx, int i_isClosed, BOOL i_reverse) { + return i_reverse ? daNpcF_addIdx(1, i_num, i_idx, i_isClosed) : + daNpcF_subIdx(1, i_num, i_idx, i_isClosed); } /* 801506B0-801506BC 14AFF0 000C+00 0/0 0/0 130/130 .text initialize__18daNpcF_ActorMngr_cFv */ @@ -4001,10 +3993,7 @@ void daNpcF_ActorMngr_c::initialize() { /* 801506BC-801506D8 14AFFC 001C+00 1/1 0/0 130/130 .text * entry__18daNpcF_ActorMngr_cFP10fopAc_ac_c */ void daNpcF_ActorMngr_c::entry(fopAc_ac_c* i_actor) { - u32 actor_id; - - i_actor ? actor_id = i_actor->mBase.mBsPcId : actor_id = -1; - mActorID = actor_id; + mActorID = fopAcM_GetID(i_actor); } /* 801506D8-801506E0 -00001 0008+00 0/0 0/0 0/0 .text entry__18daNpcF_ActorMngr_cFUi */ @@ -4089,23 +4078,21 @@ asm void calc__15daNpcF_MatAnm_cCFP11J3DMaterial() { /* 80150870-80150900 14B1B0 0090+00 2/2 0/0 8/8 .text initialize__16daNpcF_SPCurve_cFP5dPathi */ // matches with literals #ifdef NONMATCHING -void daNpcF_SPCurve_c::initialize(dPath* i_path, int param_1) { +void daNpcF_SPCurve_c::initialize(dPath* i_path, int i_isReversed) { mNurbs = 0; field_0x02 = 0; - field_0x04 = param_1; - mIsClosed = 0; - f32 lit = 1.0f; // correct to lit_4116 later + mIsReversed = i_isReversed; + mIsClosed = false; for (int i = 0; i < 96; i++) { - mPoints[i].m_position.x = lit; - mPoints[i].m_position.y = lit; - mPoints[i].m_position.z = lit; + mPoints[i].m_position.x = 1.0f; + mPoints[i].m_position.y = 1.0f; + mPoints[i].m_position.z = 1.0f; } if (i_path) { - mIsClosed = i_path->m_closed & 1; - mNurbs = daNpcF_putNurbs((dPnt*)i_path->m_points, i_path->m_num, 0x60, (dPnt*)mPoints, - mIsClosed); + mIsClosed = dPath_ChkClose(i_path); + mNurbs = daNpcF_putNurbs(i_path->m_points, i_path->m_num, 0x60, mPoints, mIsClosed); } } #else @@ -4122,95 +4109,95 @@ asm void daNpcF_SPCurve_c::initialize(dPath* param_0, int param_1) { /* 80150900-8015095C 14B240 005C+00 0/0 0/0 20/20 .text initialize__13daNpcF_Path_cFv */ void daNpcF_Path_c::initialize() { mIdx = 0; - field_0x02 = 0; - mIsClosed = 0; - mpRoomPath = 0; + mIsReversed = false; + mIsClosed = false; + mpRoomPath = NULL; - mSPCurve.initialize(0, 0); + mSPCurve.initialize(NULL, false); f32 value = FLOAT_LABEL(lit_4116); - field_0x08 = value; - field_0x0C = value; + mRange = value; + mPosDst = value; field_0x10 = value; } /* 8015095C-80150A24 14B29C 00C8+00 0/0 0/0 12/12 .text setPathInfo__13daNpcF_Path_cFUcScUc */ -int daNpcF_Path_c::setPathInfo(u8 param_0, s8 param_1, u8 param_2) { +int daNpcF_Path_c::setPathInfo(u8 param_0, s8 param_1, u8 i_isReversed) { mpRoomPath = 0; mIdx = 0; - field_0x02 = param_2; - dStage_dPnt_c point; + mIsReversed = i_isReversed; if (param_0 != 0xFF) { mpRoomPath = dPath_GetRoomPath(param_0, param_1); if (!mpRoomPath) { return 0; } - mSPCurve.initialize(mpRoomPath, field_0x02); - mIsClosed = mpRoomPath->m_closed & 1; - u16 idx; - mPosition = getPntPos(idx = mIdx); + mSPCurve.initialize(mpRoomPath, mIsReversed); + mIsClosed = dPath_ChkClose(mpRoomPath); + mPosition = getPntPos(getIdx()); } return 1; } /* 80150A24-80150A7C 14B364 0058+00 1/1 0/0 1/1 .text chkPassed__13daNpcF_Path_cF4cXyz */ -// forward decleration -int daNpcF_chkPassed(cXyz param_0, dPnt* param_1, u16 param_2, u16 param_3, int param_4, - int param_5); - -int daNpcF_Path_c::chkPassed(cXyz param_0) { - return daNpcF_chkPassed(param_0, (dPnt*)mpRoomPath->m_points, mIdx, mpRoomPath->m_num, - (int)mIsClosed, (int)field_0x02); +BOOL daNpcF_Path_c::chkPassed(cXyz i_pos) { + return daNpcF_chkPassed(i_pos, (dPnt*)mpRoomPath->m_points, mIdx, mpRoomPath->m_num, + mIsClosed, mIsReversed); } /* 80150A7C-80150BBC 14B3BC 0140+00 0/0 0/0 4/4 .text chkPassedDst__13daNpcF_Path_cF4cXyz */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpcF_Path_c::chkPassedDst(cXyz i_pos) { + return mPosDst + field_0x10 <= (mPosition - i_pos).abs(); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daNpcF_Path_c::chkPassedDst(cXyz param_0) { +asm BOOL daNpcF_Path_c::chkPassedDst(cXyz param_0) { nofralloc #include "asm/d/a/d_a_npc/chkPassedDst__13daNpcF_Path_cF4cXyz.s" } #pragma pop +#endif /* 80150BBC-80150BE0 14B4FC 0024+00 0/0 0/0 8/8 .text reverse__13daNpcF_Path_cFv */ void daNpcF_Path_c::reverse() { - if (field_0x02 == 1) { - field_0x02 = 0; - return; + if (mIsReversed == true) { + mIsReversed = false; + } else { + mIsReversed = true; } - field_0x02 = 1; - return; } /* 80150BE0-80150C18 14B520 0038+00 2/2 0/0 6/6 .text setNextIdx__13daNpcF_Path_cFv */ -int daNpcF_Path_c::setNextIdx() { - return daNpcF_incIdx(mpRoomPath->m_num, mIdx, chkClose(), field_0x02); +BOOL daNpcF_Path_c::setNextIdx() { + return daNpcF_incIdx(mpRoomPath->m_num, mIdx, chkClose(), mIsReversed); } /* 80150C18-80150C60 14B558 0048+00 0/0 0/0 9/9 .text getNextIdx__13daNpcF_Path_cFv */ int daNpcF_Path_c::getNextIdx() { u16 ret = mIdx; - daNpcF_incIdx(mpRoomPath->m_num, ret, chkClose(), field_0x02); + daNpcF_incIdx(mpRoomPath->m_num, ret, chkClose(), mIsReversed); return ret; } /* 80150C60-80150CA8 14B5A0 0048+00 0/0 0/0 3/3 .text getBeforeIdx__13daNpcF_Path_cFv */ -u16 daNpcF_Path_c::getBeforeIdx() { +int daNpcF_Path_c::getBeforeIdx() { u16 ret = mIdx; - daNpcF_decIdx(mpRoomPath->m_num, ret, chkClose(), field_0x02); + daNpcF_decIdx(mpRoomPath->m_num, ret, chkClose(), mIsReversed); return ret; } /* 80150CA8-80150D44 14B5E8 009C+00 0/0 0/0 1/1 .text getBeforePos__13daNpcF_Path_cFR4cXyz */ -int daNpcF_Path_c::getBeforePos(cXyz& param_0) { +BOOL daNpcF_Path_c::getBeforePos(cXyz& param_0) { u16 idx = mIdx; - int ret = daNpcF_decIdx(mpRoomPath->m_num, idx, chkClose(), field_0x02); + BOOL ret = daNpcF_decIdx(mpRoomPath->m_num, idx, chkClose(), mIsReversed); param_0 = getPntPos(idx); return ret; @@ -4218,35 +4205,43 @@ int daNpcF_Path_c::getBeforePos(cXyz& param_0) { /* 80150D44-80150DE0 14B684 009C+00 0/0 0/0 1/1 .text getNextPos__13daNpcF_Path_cFR4cXyz */ -int daNpcF_Path_c::getNextPos(cXyz& param_0) { +BOOL daNpcF_Path_c::getNextPos(cXyz& param_0) { u16 idx = mIdx; - int ret = daNpcF_incIdx(mpRoomPath->m_num, idx, chkClose(), field_0x02); + BOOL ret = daNpcF_incIdx(mpRoomPath->m_num, idx, chkClose(), mIsReversed); param_0 = getPntPos(idx); return ret; } /* 80150DE0-80150EB4 14B720 00D4+00 0/0 0/0 16/16 .text getDstPos__13daNpcF_Path_cF4cXyzR4cXyz */ -int daNpcF_Path_c::getDstPos(cXyz i_pos1, cXyz& i_pos2) { - int ret = 0; +int daNpcF_Path_c::getDstPos(cXyz i_pos1, cXyz& o_pos2) { + BOOL ret = false; - while (ret == 0) { - int curr_index; - i_pos2 = getPntPos(curr_index = getIdx()); + while (!ret) { + o_pos2 = getPntPos(getIdx()); if (!chkPassed(i_pos1)) { break; }; if (setNextIdx()) { - ret = 1; + ret = true; } } return ret; } /* 80150EB4-80151038 14B7F4 0184+00 0/0 0/0 2/2 .text setNextIdxDst__13daNpcF_Path_cF4cXyz */ +#ifdef NONMATCHING +// matches with literals +void daNpcF_Path_c::setNextIdxDst(cXyz i_pos) { + if (!setNextIdx()) { + mPosDst = (i_pos - getPntPos(getIdx())).abs(); + mPosition = i_pos; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4255,9 +4250,24 @@ asm void daNpcF_Path_c::setNextIdxDst(cXyz param_0) { #include "asm/d/a/d_a_npc/setNextIdxDst__13daNpcF_Path_cF4cXyz.s" } #pragma pop +#endif /* 80151038-801510B8 14B978 0080+00 0/0 0/0 72/72 .text initialize__15daNpcF_Lookat_cFv */ +#ifdef NONMATCHING +// matches with literals +void daNpcF_Lookat_c::initialize() { + for (int i = 0; i < 4; i++) { + mJointPos[i].setall(0.0f); + mAngularMoveDis[i].setall(0); + mMinAngle[i].setall(0); + mMaxAngle[i].setall(0); + mRotAngle[i].setall(0); + field_0x94[i] = false; + } + mAttnPos = NULL; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4266,6 +4276,7 @@ asm void daNpcF_Lookat_c::initialize() { #include "asm/d/a/d_a_npc/initialize__15daNpcF_Lookat_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 804257D0-804257DC 0524F0 000C+00 1/1 0/0 0/0 .bss @9946 */ @@ -4283,37 +4294,38 @@ SECTION_SDATA2 static f32 lit_9971 = 32.0f; /* 801510B8-80151350 14B9F8 0298+00 0/0 0/0 34/34 .text * setParam__15daNpcF_Lookat_cFffffffffffffsP4cXyz */ #ifdef NONMATCHING +// matches with literals void daNpcF_Lookat_c::setParam(f32 param_0, f32 param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, f32 param_6, f32 param_7, f32 param_8, f32 param_9, - f32 param_10, f32 param_11, s16 param_12, cXyz* param_13) { + f32 param_10, f32 param_11, s16 i_rotAngle, cXyz* i_jointPos) { static cXyz vec(0.0f, 0.0f, 32.0f); - field_0x00[0] = param_13[0]; - field_0x4c[0].x = cM_deg2s(-param_1) - 0x4000; - field_0x4c[0].y = cM_deg2s(param_2); - field_0x4c[0].z = 0; - field_0x64[0].x = cM_deg2s(-param_0) - 0x4000; - field_0x64[0].y = cM_deg2s(param_3); - field_0x64[0].z = 0; + mJointPos[0] = i_jointPos[0]; + mMinAngle[0].x = cM_deg2s(-param_1) - 0x4000; + mMinAngle[0].y = cM_deg2s(param_2); + mMinAngle[0].z = 0; + mMaxAngle[0].x = cM_deg2s(-param_0) - 0x4000; + mMaxAngle[0].y = cM_deg2s(param_3); + mMaxAngle[0].z = 0; - field_0x00[1] = param_13[1]; - field_0x4c[1].set(-0x4000, 0, 0); - field_0x64[1].set(-0x4000, 0, 0); + mJointPos[1] = i_jointPos[1]; + mMinAngle[1].set(-0x4000, 0, 0); + mMaxAngle[1].set(-0x4000, 0, 0); - field_0x00[2] = param_13[2]; - field_0x4c[2].x = cM_deg2s(-param_9); - field_0x4c[2].y = cM_deg2s(param_10); - field_0x4c[2].z = 0; - field_0x64[2].x = cM_deg2s(-param_8); - field_0x64[2].y = cM_deg2s(param_11); - field_0x64[2].z = 0; + mJointPos[2] = i_jointPos[2]; + mMinAngle[2].x = cM_deg2s(-param_9); + mMinAngle[2].y = cM_deg2s(param_10); + mMinAngle[2].z = 0; + mMaxAngle[2].x = cM_deg2s(-param_8); + mMaxAngle[2].y = cM_deg2s(param_11); + mMaxAngle[2].z = 0; - mDoMtx_stack_c::transS(field_0x00[2]); - mDoMtx_stack_c::YrotM(param_12); - mDoMtx_stack_c::multVec(&vec, &field_0x00[3]); + mDoMtx_stack_c::transS(mJointPos[2]); + mDoMtx_stack_c::YrotM(i_rotAngle); + mDoMtx_stack_c::multVec(&vec, &mJointPos[3]); - field_0x4c[3].set(0, 0, 0); - field_0x64[3].set(0, 0, 0); + mMinAngle[3].set(0, 0, 0); + mMaxAngle[3].set(0, 0, 0); } #else #pragma push @@ -4331,8 +4343,8 @@ asm void daNpcF_Lookat_c::setParam(f32 param_0, f32 param_1, f32 param_2, f32 pa /* 80151350-801515D4 14BC90 0284+00 0/0 0/0 34/34 .text * calc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fPP5csXyziii */ #ifdef NONMATCHING -void daNpcF_Lookat_c::calc(fopAc_ac_c* param_0, Mtx baseTransformMtx, csXyz** param_2, int param_3, - int param_4, int debug) { +void daNpcF_Lookat_c::calc(fopAc_ac_c* i_actor, Mtx i_baseTransformMtx, csXyz** o_lookatAngle, + BOOL i_snap, int i_axis, BOOL i_debug) { cXyz local_a4[4]; csXyz local_bc[4]; cXyz local_c8; @@ -4341,12 +4353,12 @@ void daNpcF_Lookat_c::calc(fopAc_ac_c* param_0, Mtx baseTransformMtx, csXyz** pa f32 angY; if (mAttnPos) { - initCalc(param_0, baseTransformMtx, local_a4, local_bc, local_d8, local_c8, debug); + initCalc(i_actor, i_baseTransformMtx, local_a4, local_bc, local_d8, local_c8, i_debug); for (int i = 2; i >= -1; i--) { update(local_a4, local_bc, local_d8); if (0 <= i) { - calcMoveDisAngle(i, local_a4, local_bc, local_c8, param_4, debug); + calcMoveDisAngle(i, local_a4, local_bc, local_c8, i_axis, i_debug); } } setRotAngle(); @@ -4357,25 +4369,25 @@ void daNpcF_Lookat_c::calc(fopAc_ac_c* param_0, Mtx baseTransformMtx, csXyz** pa int i, j; for (i = 2, j = 1; i >= 0; i--, j++) { - if (param_3) { - *(param_2[i]) = mRotAngle[i]; + if (i_snap) { + *(o_lookatAngle[i]) = mRotAngle[i]; } else { - local_e8 = (f32)param_2[i]->x; + local_e8 = (f32)o_lookatAngle[i]->x; cLib_addCalc2(&local_e8, (f32)mRotAngle[i].x, 0.25f, (f32)(0x800 / j)); - param_2[i]->x = (s16)local_e8; + o_lookatAngle[i]->x = (s16)local_e8; - local_e8 = (f32)param_2[i]->y; + local_e8 = (f32)o_lookatAngle[i]->y; angY = (f32)mRotAngle[i].y; cLib_addCalc2(&local_e8, angY, 0.25f, (f32)(0x800 / j)); - if (param_4 > 0 && angY - local_e8 < 0.0f) { + if (i_axis > 0 && angY - local_e8 < 0.0f) { local_e8 = angY; } - if (param_4 < 0 && 0.0f < angY - local_e8) { + if (i_axis < 0 && 0.0f < angY - local_e8) { local_e8 = angY; } - param_2[i]->y = (s16)local_e8; + o_lookatAngle[i]->y = (s16)local_e8; - param_2[i]->z = 0; + o_lookatAngle[i]->z = 0; } } } @@ -4433,24 +4445,24 @@ SECTION_SDATA2 static f32 lit_10253 = 63.0f / 100.0f; * initCalc__15daNpcF_Lookat_cFP10fopAc_ac_cPA4_fP4cXyzP5csXyzPfR4cXyzi */ #ifdef NONMATCHING // matches except literals -void daNpcF_Lookat_c::initCalc(fopAc_ac_c* actor, Mtx baseTransformMtx, cXyz* param_2, - csXyz* param_3, f32* param_4, cXyz& param_5, int debug) { +void daNpcF_Lookat_c::initCalc(fopAc_ac_c* i_actor, Mtx i_baseTransformMtx, cXyz* param_2, + csXyz* param_3, f32* param_4, cXyz& param_5, int i_debug) { Mtx mtx; cXyz local_90; - cMtx_copy(baseTransformMtx, mtx); + cMtx_copy(i_baseTransformMtx, mtx); mtx[0][3] = 0.0f; mtx[1][3] = 0.0f; mtx[2][3] = 0.0f; mDoMtx_stack_c::copy(mtx); mDoMtx_stack_c::inverse(); cMtx_copy(mDoMtx_stack_c::get(), mtx); - mDoMtx_stack_c::transS(actor->current.pos); + mDoMtx_stack_c::transS(i_actor->current.pos); mDoMtx_stack_c::concat(mtx); for (int i = 0; i < 4; i++) { - local_90 = field_0x00[i] - actor->current.pos; + local_90 = mJointPos[i] - i_actor->current.pos; mDoMtx_stack_c::multVec(&local_90, ¶m_2[i]); } - local_90 = *mAttnPos - actor->current.pos; + local_90 = *mAttnPos - i_actor->current.pos; mDoMtx_stack_c::multVec(&local_90, ¶m_5); for (int i = 0; i < 3; i++) { cXyz* vec = ¶m_2[i]; @@ -4458,7 +4470,7 @@ void daNpcF_Lookat_c::initCalc(fopAc_ac_c* actor, Mtx baseTransformMtx, cXyz* pa param_4[i] = local_90.abs(); param_3[i].setall(0); param_3[i].x = -cM_atan2s(local_90.y, local_90.absXZ()); - if (fabsf(cM_ssin(param_3[i].x)) < 0.63) { + if (fabsf(cM_ssin(param_3[i].x)) < 0.63f) { param_3[i].y = cM_atan2s(local_90.x, local_90.z); } else { param_3[i].y = 0; @@ -4490,8 +4502,8 @@ void daNpcF_Lookat_c::update(cXyz* param_0, csXyz* param_1, f32* param_2) { cMtx_copy(mDoMtx_stack_c::get(), mtx); pparam0i = ¶m_0[i]; mDoMtx_stack_c::transS(pparam0i[0]); - ang.x += field_0x34[i].x; - ang.y += field_0x34[i].y; + ang.x += mAngularMoveDis[i].x; + ang.y += mAngularMoveDis[i].y; mDoMtx_stack_c::ZXYrotM(ang); mDoMtx_stack_c::concat(mtx); vec.set(0.0f, 0.0f, param_2[i]); @@ -4511,6 +4523,44 @@ asm void daNpcF_Lookat_c::update(cXyz* param_0, csXyz* param_1, f32* param_2) { /* 80151B68-80151F54 14C4A8 03EC+00 1/1 0/0 0/0 .text * calcMoveDisAngle__15daNpcF_Lookat_cFiP4cXyzP5csXyz4cXyzii */ +#ifdef NONMATCHING +// matches with literals +void daNpcF_Lookat_c::calcMoveDisAngle(int i_no, cXyz* param_1, csXyz* param_2, cXyz param_3, + int i_axis, int i_debug) { + if (i_axis == 0) { + field_0x94[i_no] = false; + } + + if (!field_0x94[i_no]) { + cXyz vec1 = param_3 - param_1[i_no]; + if (!vec1.isZero()) { + vec1.normalize(); + cXyz vec2 = param_1[3] - param_1[i_no]; + if (!vec2.isZero()) { + vec2.normalize(); + s16 ivar3 = -cM_atan2s(vec1.y, vec1.absXZ()); + s16 ivar4 = cM_atan2s(vec1.x, vec1.z); + s16 ivar5 = -cM_atan2s(vec2.y, vec2.absXZ()); + s16 ivar6 = cM_atan2s(vec2.x, vec2.z); + mAngularMoveDis[i_no].x += (s16)(ivar3 - ivar5); + mAngularMoveDis[i_no].y += (s16)(ivar4 - ivar6); + } + } + } + + adjustMoveDisAngle(mAngularMoveDis[i_no].x, param_2[i_no].x, + mMinAngle[i_no].x, mMaxAngle[i_no].x); + adjustMoveDisAngle(mAngularMoveDis[i_no].y, param_2[i_no].y, + mMinAngle[i_no].y, mMaxAngle[i_no].y); + + if (i_axis < 0 && mAngularMoveDis[i_no].y > 0) { + field_0x94[i_no] = false; + } + if (i_axis > 0 && mAngularMoveDis[i_no].y < 0) { + field_0x94[i_no] = false; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -4520,26 +4570,32 @@ asm void daNpcF_Lookat_c::calcMoveDisAngle(int param_0, cXyz* param_1, csXyz* pa #include "asm/d/a/d_a_npc/calcMoveDisAngle__15daNpcF_Lookat_cFiP4cXyzP5csXyz4cXyzii.s" } #pragma pop +#endif /* 80151F54-80151FE0 14C894 008C+00 1/1 0/0 0/0 .text setRotAngle__15daNpcF_Lookat_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcF_Lookat_c::setRotAngle() { - nofralloc -#include "asm/d/a/d_a_npc/setRotAngle__15daNpcF_Lookat_cFv.s" +void daNpcF_Lookat_c::setRotAngle() { + int ang_x = 0; + int ang_y = 0; + for (int i = 0; i < 4; i++) { + ang_x += mAngularMoveDis[i].x; + ang_x = cLib_minMaxLimit(ang_x, -0x8000, 0x7fff); + ang_y += mAngularMoveDis[i].y; + ang_y = cLib_minMaxLimit(ang_y, -0x8000, 0x7fff); + + mRotAngle[i].x = ang_x; + mRotAngle[i].y = ang_y; + mRotAngle[i].z = 0; + } } -#pragma pop /* 80151FE0-80152014 14C920 0034+00 1/1 0/0 0/0 .text clrRotAngle__15daNpcF_Lookat_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcF_Lookat_c::clrRotAngle() { - nofralloc -#include "asm/d/a/d_a_npc/clrRotAngle__15daNpcF_Lookat_cFv.s" +void daNpcF_Lookat_c::clrRotAngle() { + for (int i = 0; i < 4; i++) { + mRotAngle[i].x = 0; + mRotAngle[i].y = 0; + mRotAngle[i].z = 0; + } } -#pragma pop /* 80152014-801522AC 14C954 0298+00 0/0 0/0 38/38 .text execute__8daNpcF_cFv */ #ifdef NONMATCHING @@ -4549,16 +4605,16 @@ BOOL daNpcF_c::execute() { if (main()) { fopAcM_posMoveF(this, mCcStts.GetCCMoveP()); mAcch.CrrPos(dComIfG_Bgsp()); - field_0xa44 = mAcch.m_gnd; - field_0x980 = mAcch.GetGroundH(); - if (field_0x980 != -1e+9f) { - field_0x998 = daNpcF_getGroundAngle(&field_0xa44, field_0x8f0.y); + mGndChk = mAcch.m_gnd; + mGroundH = mAcch.GetGroundH(); + if (mGroundH != -1e+9f) { + field_0x998 = daNpcF_getGroundAngle(&mGndChk, mCurAngle.y); setEnvTevColor(); setRoomNo(); - field_0x9b0 = dKy_pol_sound_get(&mAcch.m_gnd); - field_0x9e8 = dComIfGp_getReverb(mCcStts.GetRoomId()); - if (mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > field_0x980) { - field_0x9b0 = dKy_pol_sound_get(&mAcch.m_wtr); + mPolySound = dKy_pol_sound_get(&mAcch.m_gnd); + mReverb = dComIfGp_getReverb(mCcStts.GetRoomId()); + if (mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > mGroundH) { + mPolySound = dKy_pol_sound_get(&mAcch.m_wtr); } } } @@ -4567,15 +4623,15 @@ BOOL daNpcF_c::execute() { setAttnPos(); cLib_chaseF(&field_0x978, 0.0f, 1.0f); setCollisions(); - if (mTwilight != 0) { + if (mTwilight) { attention_info.flags |= 0x400000; attention_info.flags |= 0x800000; setHitodamaPrtcl(); } - field_0x8f6 = field_0x8f0; + mOldAngle = mCurAngle; field_0x930 = 0; - field_0x9e9 = 0; - field_0x9ed = 0; + mOrderSpeakEvt = false; + mOrderNewEvt = false; field_0x9eb = false; field_0x9ef = 0; field_0x9f3 = 0; @@ -4605,7 +4661,8 @@ asm BOOL daNpcF_c::execute() { /* 801522AC-80152614 14CBEC 0368+00 0/0 0/0 33/33 .text draw__8daNpcF_cFiifP11_GXColorS10i */ #ifdef NONMATCHING // literals -BOOL daNpcF_c::draw(int param_0, int param_1, f32 param_2, _GXColorS10* param_3, int param_4) { +BOOL daNpcF_c::draw(BOOL param_0, BOOL param_1, f32 i_shadowDepth, _GXColorS10* param_3, + BOOL param_4) { f32 fVar1, frame; J3DModel* model = mpMorf->getModel(); J3DModelData* modelData = model->getModelData(); @@ -4675,9 +4732,9 @@ BOOL daNpcF_c::draw(int param_0, int param_1, f32 param_2, _GXColorS10* param_3, mBrkAnm.remove(modelData); } - field_0x9a0 = dComIfGd_setShadow(field_0x9a0, true, model, ¤t.pos, param_2, 20.0f, - current.pos.y, field_0x980, field_0xa44, &tevStr, 0, - 1.0f, dDlst_shadowControl_c::getSimpleTex()); + mShadowKey = dComIfGd_setShadow(mShadowKey, true, model, ¤t.pos, i_shadowDepth, + 20.0f, current.pos.y, mGroundH, mGndChk, &tevStr, 0, + 1.0f, dDlst_shadowControl_c::getSimpleTex()); drawOtherMdls(); } @@ -4688,7 +4745,8 @@ BOOL daNpcF_c::draw(int param_0, int param_1, f32 param_2, _GXColorS10* param_3, #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm BOOL daNpcF_c::draw(int param_0, int param_1, f32 param_2, _GXColorS10* param_3, int param_4) { +asm BOOL daNpcF_c::draw(BOOL param_0, BOOL param_1, f32 param_2, _GXColorS10* param_3, + BOOL param_4) { nofralloc #include "asm/d/a/d_a_npc/draw__8daNpcF_cFiifP11_GXColorS10i.s" } @@ -4746,7 +4804,7 @@ void* daNpcF_c::srchActor(void* i_proc, void* i_this) { void daNpcF_c::setMtx() { J3DModel* model = mpMorf->getModel(); mDoMtx_stack_c::transS(current.pos); - mDoMtx_stack_c::ZXYrotM(field_0x8f0); + mDoMtx_stack_c::ZXYrotM(mCurAngle); mDoMtx_stack_c::scaleM(scale); model->setBaseTRMtx(mDoMtx_stack_c::get()); model->setUserArea((u32)this); @@ -4762,7 +4820,7 @@ void daNpcF_c::setMtx() { void daNpcF_c::setMtx2() { J3DModel* model = mpMorf->getModel(); mDoMtx_stack_c::transS(current.pos); - mDoMtx_stack_c::ZXYrotM(field_0x8f0); + mDoMtx_stack_c::ZXYrotM(mCurAngle); mDoMtx_stack_c::scaleM(scale); model->setBaseTRMtx(mDoMtx_stack_c::get()); model->setUserArea((u32)this); @@ -4800,13 +4858,13 @@ void daNpcF_c::initialize() { field_0x89c.setall(0.0f); field_0x8a8.setall(0.0f); mHeadPos.setall(0.0f); - field_0x8f0.setall(0); - field_0x8f6.setall(0); + mCurAngle.setall(0); + mOldAngle.setall(0); mEyeAngle.setall(0); mHeadAngle.setall(0); for (int i = 0; i < 3; i++) { field_0x908[i].setall(0); - field_0x91a[i].setall(0); + mLookatAngle[i].setall(0); } mCutIndex = -1; field_0x930 = 0; @@ -4815,28 +4873,28 @@ void daNpcF_c::initialize() { for (int i = 0; i < 5; i++) { mAttnActorTimer[i] = 0; } - field_0x950 = 0; + mMsgTimer = 0; field_0x954 = 0; field_0x958 = 0; field_0x95c = 0; - field_0x960 = 0; - field_0x964 = 0; - field_0x968 = 0; - field_0x96c = 0; - field_0x970 = 0.0f; + mEventTimer = 0; + mBtpTimer = 0; + mTurnAmount = 0; + mTurnMode = 0; + mTurnStepNum = 0.0f; mExpressionMorfOverride = 0.0f; mMotionMorfOverride = 0.0f; - field_0x980 = 0.0f; + mGroundH = 0.0f; for (int i = 0; i < 3; i++) { field_0x984[i] = 0.0f; } field_0x990 = 0; field_0x992 = 0; - field_0x994 = 0; - field_0x996 = 0; + mTurnStartAngle = 0; + mTurnTargetAngle = 0; field_0x998 = 0; mAnmFlags = 0; - field_0x9a0 = 0; + mShadowKey = 0; field_0x9a4 = -1; mHitodamaParticleKey[0] = -1; mHitodamaParticleKey[1] = -1; @@ -4850,11 +4908,11 @@ void daNpcF_c::initialize() { mMotionLoops = 0; mExpressionLoops = 0; mOrderEvtNo = 0; - field_0x9e9 = 0; - field_0x9ea = 0; + mOrderSpeakEvt = false; + field_0x9ea = false; field_0x9eb = false; - field_0x9ec = 0; - field_0x9ed = false; + field_0x9ec = false; + mOrderNewEvt = false; field_0x9ee = false; field_0x9ef = 0; field_0x9f0 = 0; @@ -4949,13 +5007,13 @@ BOOL daNpcF_c::setBrkAnm(J3DAnmTevRegKey* i_brk, J3DModelData* i_modelData, f32 /* 80152D84-80152DE0 14D6C4 005C+00 1/1 0/0 40/40 .text setEnvTevColor__8daNpcF_cFv */ void daNpcF_c::setEnvTevColor() { - tevStr.mEnvrIdxOverride = dComIfG_Bgsp().GetPolyColor(field_0xa44); - tevStr.mRoomNo = dComIfG_Bgsp().GetRoomId(field_0xa44); + tevStr.mEnvrIdxOverride = dComIfG_Bgsp().GetPolyColor(mGndChk); + tevStr.mRoomNo = dComIfG_Bgsp().GetRoomId(mGndChk); } /* 80152DE0-80152E24 14D720 0044+00 1/1 0/0 40/40 .text setRoomNo__8daNpcF_cFv */ void daNpcF_c::setRoomNo() { - int room_id = dComIfG_Bgsp().GetRoomId(field_0xa44); + int room_id = dComIfG_Bgsp().GetRoomId(mGndChk); fopAcM_SetRoomNo(this, room_id); mCcStts.SetRoomId(room_id); } @@ -5021,13 +5079,13 @@ asm BOOL daNpcF_c::chkEndAnm(J3DFrameCtrl* frameCtrl, f32 prevRate) { /* 80152F40-80153150 14D880 0210+00 1/1 0/0 2/2 .text playAllAnm__8daNpcF_cFv */ #ifdef NONMATCHING -// matches once template functions located correctly +// matches with literals and generics BOOL daNpcF_c::playAllAnm() { f32 rate; if (!(mAnmFlags & ANM_PAUSE_EXPRESSION)) { if (mAnmFlags & ANM_PLAY_BCK) { rate = mBckAnm.getPlaySpeed(); - if (mAnmFlags & ANM_PAUSE_BTK) { + if (mAnmFlags & ANM_PAUSE_BCK) { mBckAnm.setPlaySpeed(0.0f); } mBckAnm.play(); @@ -5045,13 +5103,13 @@ BOOL daNpcF_c::playAllAnm() { mBtpAnm.setPlaySpeed(rate); if (mAnmFlags & ANM_FLAG_800) { if (chkEndAnm(mBtpAnm.getFrameCtrl(), rate)) { - field_0x964 = cLib_getRndValue(90, 90); + mBtpTimer = cLib_getRndValue(90, 90); mBtpAnm.setPlaySpeed(0.0f); } } else { - field_0x964 = 0; + mBtpTimer = 0; } - if (cLib_calcTimer(&field_0x964) == 0) { + if (cLib_calcTimer(&mBtpTimer) == 0) { mBtpAnm.setPlaySpeed(1.0f); } } @@ -5060,12 +5118,12 @@ BOOL daNpcF_c::playAllAnm() { rate = mpMorf->getPlaySpeed(); if (mAnmFlags & ANM_PAUSE_MORF) { mpMorf->setPlaySpeed(0.0f); - mpMorf->play(field_0x9b0, field_0x9e8); + mpMorf->play(mPolySound, mReverb); mpMorf->setPlaySpeed(rate); } else { - mpMorf->play(field_0x9b0, field_0x9e8); + mpMorf->play(mPolySound, mReverb); if (chkEndAnm(rate)) { - motionLoops++; + mMotionLoops++; } } } @@ -5107,8 +5165,8 @@ asm BOOL daNpcF_c::playAllAnm() { * Set the expression animation. * @param anm The animation data, a two-dimensional array of data pointers, indexed first by * the expression index and second by the expression phase. Each piece of data consists of - * an animation index for that phase of the expression, a `morf`, and the number of loops - * before moving on to the next phase (or 0 for the last phase). + * an animation index for that phase of the expression, the number of interpolation frames, and + * the number of loops before moving on to the next phase (or 0 for the last phase). */ #ifdef NONMATCHING // regalloc @@ -5153,8 +5211,8 @@ asm void daNpcF_c::playExpressionAnm(daNpcF_c::daNpcF_anmPlayData*** param_0) { * Set the motion animation. * @param anm The animation data, a two-dimensional array of data pointers, indexed first by * the motion index and second by the motion phase. Each piece of data consists of - * an animation index for that phase of the motion, a `morf`, and the number of loops - * before moving on to the next phase (or 0 for the last phase). + * an animation index for that phase of the motion, the number of interpolation frames, and the + * number of loops before moving on to the next phase (or 0 for the last phase). */ #ifdef NONMATCHING // regalloc @@ -5195,47 +5253,46 @@ asm void daNpcF_c::playMotionAnm(daNpcF_c::daNpcF_anmPlayData*** param_0) { /* 8015337C-80153578 14DCBC 01FC+00 0/0 0/0 34/34 .text setLookatMtx__8daNpcF_cFiPif */ /** - * Compute the animation matrix for one of the "lookat" joints (backbone, neck, head). + * Compute the animation matrix for the backbone, neck, or head joint. * This matrix is applied to the matrix in `mDoMtx_stack_c::now`. - * @param jointNo The index of the joint in question. - * @param jointList An array of the three indices of the joints for the lower body, the upper body, - * and the head. - * @param param_2 Unknown. + * @param i_jointNo The index of the joint in question. + * @param i_jointList An array of the three indices of the joints for the backbone, neck, and head. + * @param i_neckHeadAngleRatio The ratio between the neck angle and the head angle. */ #ifdef NONMATCHING // literals -void daNpcF_c::setLookatMtx(int jointNo, int* jointList, f32 param_2) { +void daNpcF_c::setLookatMtx(int i_jointNo, int* i_jointList, f32 i_neckHeadAngleRatio) { cXyz pos; Mtx baseMtx, invParentMtx; - if (jointList[0] == jointNo || jointList[1] == jointNo || jointList[2] == jointNo) { - field_0x91a[1].x = (s16)((f32)field_0x91a[2].x * param_2); - field_0x91a[1].y = (s16)((f32)field_0x91a[2].y * param_2); - field_0x91a[1].z = (s16)((f32)field_0x91a[2].z * param_2); + if (i_jointList[0] == i_jointNo || i_jointList[1] == i_jointNo || i_jointList[2] == i_jointNo) { + mLookatAngle[1].x = (s16)((f32)mLookatAngle[2].x * i_neckHeadAngleRatio); + mLookatAngle[1].y = (s16)((f32)mLookatAngle[2].y * i_neckHeadAngleRatio); + mLookatAngle[1].z = (s16)((f32)mLookatAngle[2].z * i_neckHeadAngleRatio); MTXCopy(mDoMtx_stack_c::get(), baseMtx); pos.set(baseMtx[0][3], baseMtx[1][3], baseMtx[2][3]); baseMtx[0][3] = baseMtx[1][3] = baseMtx[2][3] = 0.0f; - mDoMtx_stack_c::ZXYrotS(field_0x8f0); - if (jointList[0] != jointNo) { - if (jointList[1] == jointNo) { - mDoMtx_stack_c::ZXYrotM(field_0x91a[0]); - } else if (jointList[2] == jointNo) { - mDoMtx_stack_c::ZXYrotM(field_0x91a[1]); + mDoMtx_stack_c::ZXYrotS(mCurAngle); + if (i_jointList[0] != i_jointNo) { + if (i_jointList[1] == i_jointNo) { + mDoMtx_stack_c::ZXYrotM(mLookatAngle[0]); + } else if (i_jointList[2] == i_jointNo) { + mDoMtx_stack_c::ZXYrotM(mLookatAngle[1]); } } mDoMtx_stack_c::inverse(); MTXCopy(mDoMtx_stack_c::get(), invParentMtx); mDoMtx_stack_c::transS(pos); - mDoMtx_stack_c::XYZrotM(field_0x8f0); - if (jointList[0] == jointNo) { - mDoMtx_stack_c::ZXYrotM(field_0x91a[0]); - } else if (jointList[1] == jointNo) { - mDoMtx_stack_c::ZXYrotM(field_0x91a[1]); - } else if (jointList[2] == jointNo) { - mDoMtx_stack_c::ZXYrotM(field_0x91a[2]); + mDoMtx_stack_c::XYZrotM(mCurAngle); + if (i_jointList[0] == i_jointNo) { + mDoMtx_stack_c::ZXYrotM(mLookatAngle[0]); + } else if (i_jointList[1] == i_jointNo) { + mDoMtx_stack_c::ZXYrotM(mLookatAngle[1]); + } else if (i_jointList[2] == i_jointNo) { + mDoMtx_stack_c::ZXYrotM(mLookatAngle[2]); } mDoMtx_stack_c::concat(invParentMtx); mDoMtx_stack_c::concat(baseMtx); @@ -5284,19 +5341,21 @@ asm void daNpcF_c::setDamage(int param_0, int param_1, int param_2) { */ #ifdef NONMATCHING // will match when cLib_calcTimer located correctly -int daNpcF_c::ctrlMsgAnm(int& expression, int& motion, fopAc_ac_c* param_2, int param_3) { - expression = -1; - motion = -1; +int daNpcF_c::ctrlMsgAnm(int& o_expression, int& o_motion, fopAc_ac_c* param_2, BOOL param_3) { + o_expression = -1; + o_motion = -1; if (param_3 || eventInfo.checkCommandTalk() || mCutIndex != -1) { fopAc_ac_c* talkPartner = dComIfGp_event_getTalkPartner(); if (talkPartner == param_2) { fopAc_ac_c* actor = dMsgObject_c::getActor(); - if (actor->eventInfo.mCommand == 2 || actor->eventInfo.mCommand == 3) { + if (actor->eventInfo.mCommand == dEvtCmd_INDEMO_e + || actor->eventInfo.mCommand == dEvtCmd_INDOOR_e) + { field_0x9a4 = -1; - } else if (actor->eventInfo.mCommand == 6) { + } else if (actor->eventInfo.mCommand == dEvtCmd_INCATCH_e) { if ((u32)actor->sub_method != field_0x9a4) { - expression = dComIfGp_getMesgFaceAnimeAttrInfo(); - motion = dComIfGp_getMesgAnimeAttrInfo(); + o_expression = dComIfGp_getMesgFaceAnimeAttrInfo(); + o_motion = dComIfGp_getMesgAnimeAttrInfo(); field_0x9a4 = (u32)actor->sub_method; } if (dMsgObject_c::isMouthCheck()) { @@ -5304,7 +5363,7 @@ int daNpcF_c::ctrlMsgAnm(int& expression, int& motion, fopAc_ac_c* param_2, int } else { mAnmFlags |= ANM_PAUSE_EXPRESSION; } - field_0x950 = 20; + mMsgTimer = 20; } else { if (mAnmFlags & ANM_PAUSE_EXPRESSION) { mAnmFlags &= ~ANM_PAUSE_EXPRESSION; @@ -5313,21 +5372,21 @@ int daNpcF_c::ctrlMsgAnm(int& expression, int& motion, fopAc_ac_c* param_2, int } } else { field_0x9a4 = -1; - if (field_0x950 != 0) { - field_0x950 = 1; + if (mMsgTimer != 0) { + mMsgTimer = 1; } } } if (!param_3) { - cLib_calcTimer(&field_0x950); + cLib_calcTimer(&mMsgTimer); } - return field_0x950; + return mMsgTimer; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm int daNpcF_c::ctrlMsgAnm(int& param_0, int& param_1, fopAc_ac_c* param_2, int param_3) { +asm int daNpcF_c::ctrlMsgAnm(int& param_0, int& param_1, fopAc_ac_c* param_2, BOOL param_3) { nofralloc #include "asm/d/a/d_a_npc/ctrlMsgAnm__8daNpcF_cFRiRiP10fopAc_ac_ci.s" } @@ -5336,15 +5395,15 @@ asm int daNpcF_c::ctrlMsgAnm(int& param_0, int& param_1, fopAc_ac_c* param_2, in /* 8015387C-80153954 14E1BC 00D8+00 0/0 0/0 45/45 .text orderEvent__8daNpcF_cFiPcUsUsUcUs */ -void daNpcF_c::orderEvent(int param_0, char* i_evtName, u16 param_2, u16 i_priority, u8 i_mapToolID, +void daNpcF_c::orderEvent(int i_speak, char* i_evtName, u16 param_2, u16 i_priority, u8 i_mapToolID, u16 i_flag) { if (i_evtName != NULL) { mEventIdx = dComIfGp_getEventManager().getEventIdx(this, i_evtName, 0xff); fopAcM_orderOtherEventId(this, mEventIdx, i_mapToolID, param_2, i_priority, i_flag); } else if (!mTwilight || daPy_py_c::checkNowWolfEyeUp()) { if ((attention_info.flags & 8) || (attention_info.flags & 2)) { - eventInfo.i_onCondition(1); - if (param_0) { + eventInfo.i_onCondition(dEvtCnd_CANTALK_e); + if (i_speak) { fopAcM_orderSpeakEvent(this, 0, 0); } } @@ -5367,11 +5426,11 @@ void daNpcF_c::changeEvent(char* i_arcName, char* i_evtName, u16 param_2, u16 pa */ #ifdef NONMATCHING // matches with literals -BOOL daNpcF_c::chkActorInSight(fopAc_ac_c* i_actor, f32 i_maxAngle) { +BOOL daNpcF_c::chkActorInSight(fopAc_ac_c* i_actor, f32 i_fovY) { s16 tmp = mHeadAngle.y; s16 angle = fopAcM_searchActorAngleY(this, i_actor) - tmp; s16 abs_angle = abs(angle); - return i_maxAngle == 180.0f || abs_angle < cM_deg2s(i_maxAngle); + return i_fovY == 180.0f || abs_angle < cM_deg2s(i_fovY); } #else #pragma push @@ -5388,29 +5447,29 @@ asm BOOL daNpcF_c::chkActorInSight(fopAc_ac_c* param_0, f32 param_1) { * chkActorInArea__8daNpcF_cFP10fopAc_ac_c4cXyz4cXyzs */ /** * Check whether an actor is in an elliptic cylinder region. - * @param actor The actor to check. - * @param center The center of the cylinder. - * @param box The dimensions of the bounding box. - * @param angY The angle to align the axis of the ellipse. + * @param i_actor The actor to check. + * @param i_center The center of the cylinder. + * @param i_bounds The dimensions of the bounding box. + * @param i_angleY The angle to align the axis of the ellipse. * @return Whether the actor's position vector lies in the elliptic cylinder. */ #ifdef NONMATCHING // literals -BOOL daNpcF_c::chkActorInArea(fopAc_ac_c* actor, cXyz center, cXyz box, s16 angY) { - cXyz disp, relPos; +BOOL daNpcF_c::chkActorInArea(fopAc_ac_c* i_actor, cXyz i_center, cXyz i_bounds, s16 i_angleY) { + cXyz delta, relPos; BOOL ret = false; - mDoMtx_stack_c::YrotS(-angY); - mDoMtx_stack_c::transM(-center.x, -center.y, -center.z); - mDoMtx_stack_c::multVec(&actor->current.pos, &relPos); - f32 boxX = fabsf(box.x); - f32 boxZ = fabsf(box.z); + mDoMtx_stack_c::YrotS(-i_angleY); + mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z); + mDoMtx_stack_c::multVec(&i_actor->current.pos, &relPos); + f32 boundX = fabsf(i_bounds.x); + f32 boundZ = fabsf(i_bounds.z); f32 posX = fabsf(relPos.x); f32 posZ = fabsf(relPos.z); - disp = center - actor->current.pos; + delta = i_center - i_actor->current.pos; - if ((posX * posX) / (boxX * boxX) + (posZ * posZ) / (boxZ * boxZ) <= 1.0f && -box.y < disp.y && - disp.y < box.y) + if ((posX * posX) / (boundX * boundX) + (posZ * posZ) / (boundZ * boundZ) <= 1.0f + && -i_bounds.y < delta.y && delta.y < i_bounds.y) { ret = true; } @@ -5436,23 +5495,25 @@ SECTION_SDATA2 static f32 lit_11253 = 0.5f; * chkActorInAttnArea__8daNpcF_cFP10fopAc_ac_cP10fopAc_ac_ci */ /** * Check whether an actor lies within another actor's region of attention. - * @param actorCheck The actor to check. - * @param actorAttn The actor whose attention region we are using. - * @param distIndex An index into the distance table to determine the size of the attention region. + * @param i_actorCheck The actor to check. + * @param i_actorAttn The actor whose attention region we are using. + * @param i_distIndex An index into the distance table to determine the attention region. * @return Whether `actorCheck` is within the region of attention of `actorAttn`. */ #ifdef NONMATCHING -BOOL daNpcF_c::chkActorInAttnArea(fopAc_ac_c* actorCheck, fopAc_ac_c* actorAttn, int distIndex) { +// matches with literals +BOOL daNpcF_c::chkActorInAttnArea(fopAc_ac_c* i_actorCheck, fopAc_ac_c* i_actorAttn, + int i_distIndex) { BOOL ret = false; - f32 fv5 = dAttention_c::getDistTable(distIndex)->field_0x10 * -1.0f; - f32 fv4 = dAttention_c::getDistTable(distIndex)->field_0xc * -1.0f; - cXyz attnCtr = actorAttn->current.pos; - cXyz attnBox; - attnBox.x = dAttention_c::getDistTable(distIndex)->field_0x0; - attnBox.y = (fabsf(fv5) + fabsf(fv4)) * 0.5f; - attnBox.z = dAttention_c::getDistTable(distIndex)->field_0x0; - attnCtr.y = attnBox.y + (attnCtr.y + fv4); - if (chkActorInArea(actorCheck, attnCtr, attnBox, actorAttn->shape_angle.y)) { + f32 neg_lower_y = dComIfGp_getAttention().getDistTable(i_distIndex).mLowerY * -1.0f; + f32 neg_upper_y = dComIfGp_getAttention().getDistTable(i_distIndex).mUpperY * -1.0f; + cXyz center = i_actorAttn->current.pos; + cXyz bounds; + bounds.x = dComIfGp_getAttention().getDistTable(i_distIndex).mRadius1; + bounds.y = (fabsf(neg_lower_y) + fabsf(neg_upper_y)) / 2.0f; + bounds.z = dComIfGp_getAttention().getDistTable(i_distIndex).mRadius1; + center.y = bounds.y + (center.y + neg_upper_y); + if (chkActorInArea(i_actorCheck, center, bounds, i_actorAttn->shape_angle.y)) { ret = true; } return ret; @@ -5469,14 +5530,14 @@ asm BOOL daNpcF_c::chkActorInAttnArea(fopAc_ac_c* actorCheck, fopAc_ac_c* actorA #endif /* 80153D1C-80153D84 14E65C 0068+00 0/0 0/0 118/118 .text initTalk__8daNpcF_cFiPP10fopAc_ac_c */ -int daNpcF_c::initTalk(int i_flowID, fopAc_ac_c** param_1) { +BOOL daNpcF_c::initTalk(int i_flowID, fopAc_ac_c** param_1) { mFlow.init(this, i_flowID, 0, param_1); f32 tmp = FLOAT_LABEL(lit_4116); speedF = tmp; speed.set(tmp, tmp, tmp); - field_0x9e9 = 0; - field_0x9ec = 0; - return 1; + mOrderSpeakEvt = false; + field_0x9ec = false; + return true; } /* 80153D84-80153EF4 14E6C4 0170+00 0/0 0/0 119/119 .text talkProc__8daNpcF_cFPiiPP10fopAc_ac_c */ @@ -5526,6 +5587,43 @@ asm BOOL daNpcF_c::talkProc(int* param_0, int param_1, fopAc_ac_c** param_2) { #endif /* 80153EF4-801540A4 14E834 01B0+00 1/1 0/0 55/55 .text turn__8daNpcF_cFsfi */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpcF_c::turn(s16 i_targetAngle, f32 i_rate, int i_direction) { + int target_angle = i_targetAngle; + if (mTurnAmount == 0) { + mTurnStepNum = fabsf(cM_sht2d((s16)(current.angle.y - target_angle))); + mTurnStepNum = (mTurnStepNum / 180.0f) * i_rate; + mTurnStepNum = (int)mTurnStepNum + 1; + if (mTurnStepNum < 8.0f) { + mTurnStepNum = 8.0f; + } + mTurnStartAngle = current.angle.y; + } + + s16 turn_start_angle = mTurnStartAngle; + if (i_direction == 0) { + i_direction = (s16)(target_angle - turn_start_angle) >= 0 ? 1 : -1; + } + + u16 angle_diff = target_angle - turn_start_angle; + int signed_angle_diff = angle_diff; + if (i_direction < 0) { + signed_angle_diff = -(u16)(0xffff - angle_diff); + } + + int turn_angle = (int)(signed_angle_diff * cM_ssin(mTurnAmount)); + mTurnAmount = (int)((f32)mTurnAmount + (f32)0x4000 / mTurnStepNum); + if ((u16)mTurnAmount >= 0x4000) { + current.angle.y = i_targetAngle; + mTurnAmount = 0x4000; + } else { + current.angle.y = mTurnStartAngle + turn_angle; + } + + return current.angle.y - (s16)i_targetAngle == 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5534,8 +5632,46 @@ asm BOOL daNpcF_c::turn(s16 param_0, f32 param_1, int param_2) { #include "asm/d/a/d_a_npc/turn__8daNpcF_cFsfi.s" } #pragma pop +#endif /* 801540A4-80154250 14E9E4 01AC+00 0/0 0/0 58/58 .text step__8daNpcF_cFsiii */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpcF_c::step(s16 i_targetAngle, int i_expression, int i_motion, int i_rate) { + if (mTurnMode == 0) { + if ((int)fabsf(cM_sht2d((s16)(i_targetAngle - mCurAngle.y))) > 40) { + if (i_expression >= 0) { + setExpression(i_expression, -1.0f); + } + if (i_motion >= 0) { + setMotion(i_motion, -1.0f, false); + } + } + + mTurnTargetAngle = i_targetAngle; + mTurnAmount = 0; + if (mCurAngle.y == mTurnTargetAngle) { + mTurnMode++; + } + + current.angle.y = mCurAngle.y; + shape_angle.y = current.angle.y; + mTurnMode++; + } else if (mTurnMode == 1) { + if (turn(mTurnTargetAngle, i_rate, 0)) { + shape_angle.y = current.angle.y; + mCurAngle.y = current.angle.y; + mOldAngle.y = current.angle.y; + mTurnMode++; + } else { + shape_angle.y = current.angle.y; + mCurAngle.y = current.angle.y; + } + } + + return mTurnMode > 1; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5544,16 +5680,16 @@ asm BOOL daNpcF_c::step(s16 param_0, int param_1, int param_2, int param_3) { #include "asm/d/a/d_a_npc/step__8daNpcF_cFsiii.s" } #pragma pop +#endif /* 80154250-80154278 14EB90 0028+00 0/0 0/0 81/81 .text setAngle__8daNpcF_cFs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daNpcF_c::setAngle(s16 param_0) { - nofralloc -#include "asm/d/a/d_a_npc/setAngle__8daNpcF_cFs.s" +void daNpcF_c::setAngle(s16 i_angle) { + current.angle.y = i_angle; + shape_angle.y = current.angle.y; + mCurAngle.y = current.angle.y; + mOldAngle.y = mCurAngle.y; + old.angle.y = current.angle.y; } -#pragma pop /* 80154278-801542A0 14EBB8 0028+00 0/0 0/0 36/36 .text getDistTableIdx__8daNpcF_cFii */ u8 daNpcF_getDistTableIdx(int param_0, int param_1); // fwd dec to get a match @@ -5597,9 +5733,9 @@ SECTION_SDATA2 static f32 lit_11605 = 450.0f; /* 8015436C-80154730 14ECAC 03C4+00 0/0 0/0 12/12 .text getAttnActorP__8daNpcF_cFiPFPvPv_Pvffffsii */ #ifdef NONMATCHING -fopAc_ac_c* daNpcF_c::getAttnActorP(int param_0, fpcLyIt_JudgeFunc param_1, f32 param_2, - f32 param_3, f32 param_4, f32 param_5, s16 param_6, int param_7, - int param_8) { +fopAc_ac_c* daNpcF_c::getAttnActorP(BOOL i_playerAttn, fpcLyIt_JudgeFunc i_searchFunc, f32 i_radius, + f32 i_offsetY1, f32 i_offsetY2, f32 i_fovY, s16 i_sightAngle, + int param_7, BOOL param_8) { fopAc_ac_c* actor = NULL; int rnd = 450 + (int)((cM_rnd() - 0.5f) * 450.0f); int rnd2 = param_7 + (int)((cM_rnd() - 0.5f) * param_7); @@ -5615,15 +5751,15 @@ fopAc_ac_c* daNpcF_c::getAttnActorP(int param_0, fpcLyIt_JudgeFunc param_1, f32 } if (actor == NULL) { mAttnChangeTimer = 0; - if (param_0) { - param_2 = fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()); + if (i_playerAttn) { + i_radius = fopAcM_searchActorDistanceXZ(this, daPy_getPlayerActorClass()); } mFindCount = 0; - fpcEx_Search(param_1, this); + fpcEx_Search(i_searchFunc, this); for (int i = 0; i < mFindCount; i++) { if (chkPointInArea(getAttentionPos(mFindActorPList[i]), attention_info.position, - param_2, param_3, param_4, 0) && - chkActorInSight2(mFindActorPList[i], param_5, param_6)) + i_radius, i_offsetY1, i_offsetY2, 0) && + chkActorInSight2(mFindActorPList[i], i_fovY, i_sightAngle)) { int j; for (j = 0; j < 5; j++) { @@ -5644,7 +5780,7 @@ fopAc_ac_c* daNpcF_c::getAttnActorP(int param_0, fpcLyIt_JudgeFunc param_1, f32 } } - if (actor == NULL && param_0) { + if (actor == NULL && i_playerAttn) { daPy_py_c* player = daPy_getPlayerActorClass(); fopAcM_SearchByID(player->getGrabActorID(), &actor); r28 = 1; @@ -5679,9 +5815,9 @@ fopAc_ac_c* daNpcF_c::getAttnActorP(int param_0, fpcLyIt_JudgeFunc param_1, f32 #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm fopAc_ac_c* daNpcF_c::getAttnActorP(int param_0, fpcLyIt_JudgeFunc param_1, f32 param_2, +asm fopAc_ac_c* daNpcF_c::getAttnActorP(BOOL param_0, fpcLyIt_JudgeFunc param_1, f32 param_2, f32 param_3, f32 param_4, f32 param_5, s16 param_6, - int param_7, int param_8) { + int param_7, BOOL param_8) { nofralloc #include "asm/d/a/d_a_npc/getAttnActorP__8daNpcF_cFiPFPvPv_Pvffffsii.s" } @@ -5690,6 +5826,24 @@ asm fopAc_ac_c* daNpcF_c::getAttnActorP(int param_0, fpcLyIt_JudgeFunc param_1, /* 80154730-80154834 14F070 0104+00 2/2 0/0 0/0 .text chkActorInSight2__8daNpcF_cFP10fopAc_ac_cfs */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpcF_c::chkActorInSight2(fopAc_ac_c* i_actor, f32 i_fovY, s16 i_sightAngle) { + if (i_fovY < 180.0f) { + s16 fov_y = cM_deg2s(i_fovY); + cXyz actor_attn_pos = getAttentionPos(i_actor); + cSGlobe globe(attention_info.position - actor_attn_pos); + cSAngle s_ang_diff = cSAngle(globe.U().Inv()) - i_sightAngle; + s16 ang_diff = s_ang_diff.Val(); + if (ang_diff < 0) { + ang_diff = -ang_diff; + } + return ang_diff <= fov_y; + } else { + return true; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -5698,29 +5852,30 @@ asm BOOL daNpcF_c::chkActorInSight2(fopAc_ac_c* param_0, f32 param_1, s16 param_ #include "asm/d/a/d_a_npc/chkActorInSight2__8daNpcF_cFP10fopAc_ac_cfs.s" } #pragma pop +#endif /* 80154834-801548F4 14F174 00C0+00 2/2 0/0 0/0 .text chkPointInArea__8daNpcF_cF4cXyz4cXyzfffs */ #ifdef NONMATCHING // matches with literals -BOOL daNpcF_c::chkPointInArea(cXyz param_0, cXyz param_1, f32 param_2, f32 param_3, f32 param_4, - s16 param_5) { - cXyz tmp_pos1; - cXyz tmp_pos2; +BOOL daNpcF_c::chkPointInArea(cXyz i_point, cXyz param_1, f32 i_radius, f32 i_offsetY1, + f32 i_offsetY2, s16 i_angleY) { + cXyz bounds, center; - f32 tmp_float1 = param_4; + f32 lower = i_offsetY2; + f32 upper = i_offsetY1; - if (param_3 < param_4) { - tmp_float1 = param_3; - param_3 = param_4; + if (i_offsetY1 < i_offsetY2) { + lower = i_offsetY1; + upper = i_offsetY2; } - tmp_pos1.set(param_2, fabsf(param_3 - tmp_float1) / 2, param_2); + bounds.set(i_radius, fabsf(upper - lower) / 2.0f, i_radius); - tmp_pos2 = param_1; - tmp_pos2.y += tmp_float1; - tmp_pos2.y += tmp_pos1.y; + center = param_1; + center.y += lower; + center.y += bounds.y; - return chkPointInArea(param_0, tmp_pos2, tmp_pos1, param_5); + return chkPointInArea(i_point, center, bounds, i_angleY); } #else #pragma push @@ -5736,8 +5891,8 @@ asm BOOL daNpcF_c::chkPointInArea(cXyz param_0, cXyz param_1, f32 param_2, f32 p /* 801548F4-8015496C 14F234 0078+00 1/1 0/0 0/0 .text chkPointInArea__8daNpcF_cF4cXyz4cXyz4cXyzs */ -BOOL daNpcF_c::chkPointInArea(cXyz param_0, cXyz param_1, cXyz param_2, s16 param_3) { - return daNpcF_chkPointInArea(param_0, param_1, param_2, param_3); +BOOL daNpcF_c::chkPointInArea(cXyz i_point, cXyz i_center, cXyz i_bounds, s16 i_angleY) { + return daNpcF_chkPointInArea(i_point, i_center, i_bounds, i_angleY); } /* 8015496C-801549E0 14F2AC 0074+00 3/3 0/0 0/0 .text getAttentionPos__8daNpcF_cFP10fopAc_ac_c */ @@ -5754,11 +5909,11 @@ cXyz daNpcF_c::getAttentionPos(fopAc_ac_c* i_ActorP) { /* 801549E0-80154BD8 14F320 01F8+00 0/0 0/0 18/18 .text chkFindPlayer2__8daNpcF_cFis */ #ifdef NONMATCHING // matches with literals -BOOL daNpcF_c::chkFindPlayer2(BOOL param_0, s16 param_1) { +BOOL daNpcF_c::chkFindPlayer2(BOOL i_hasAttn, s16 i_angle) { cXyz attn_pos = getAttentionPos(daPy_getPlayerActorClass()); - int attn_no = param_0 == false ? mAttentionInfo.field_0x0[3] : mAttentionInfo.field_0x0[1]; - f32 fvar2 = param_0 == false ? dAttention_c::getDistTable(attn_no).field_0x0 - : dAttention_c::getDistTable(attn_no).field_0x4; + int attn_no = i_hasAttn == false ? attention_info.field_0x0[3] : attention_info.field_0x0[1]; + f32 fvar2 = i_hasAttn == false ? dAttention_c::getDistTable(attn_no).field_0x0 + : dAttention_c::getDistTable(attn_no).field_0x4; f32 fvar3 = dAttention_c::getDistTable(attn_no).field_0x10 * -1.0f; f32 fvar4 = dAttention_c::getDistTable(attn_no).field_0xc * -1.0f; u32 uvar7 = dAttention_c::getDistTable(attn_no).field_0x18; @@ -5776,8 +5931,8 @@ BOOL daNpcF_c::chkFindPlayer2(BOOL param_0, s16 param_1) { } else if (uvar7 & 0x100) { fvar5 = 135.0f; } - if (chkPointInArea(attn_pos, mAttentionInfo.mPosition, fvar2, fvar3, fvar4, 0) - && chkActorInSight2(daPy_getPlayerActorClass(), fvar5, param_1)) { + if (chkPointInArea(attn_pos, attention_info.position, fvar2, fvar3, fvar4, 0) + && chkActorInSight2(daPy_getPlayerActorClass(), fvar5, i_angle)) { return true; } return false; @@ -5786,7 +5941,7 @@ BOOL daNpcF_c::chkFindPlayer2(BOOL param_0, s16 param_1) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm BOOL daNpcF_c::chkFindPlayer2(int param_0, s16 param_1) { +asm BOOL daNpcF_c::chkFindPlayer2(BOOL param_0, s16 param_1) { nofralloc #include "asm/d/a/d_a_npc/chkFindPlayer2__8daNpcF_cFis.s" } @@ -5820,7 +5975,7 @@ void daNpcF_c::setHitodamaPrtcl() { for (int i = 0; i < 2; i++) { static u16 id[2] = {0x8497, 0x8498}; mHitodamaParticleKey[i] = - dComIfGp_particle_set(mHitodamaParticleKey[i], id[i], &pos, &field_0x8f0, NULL); + dComIfGp_particle_set(mHitodamaParticleKey[i], id[i], &pos, &mCurAngle, NULL); JPABaseEmitter* emitter = dComIfGp_particle_getEmitter(mHitodamaParticleKey[i]); if (emitter != NULL) { u8 alpha; @@ -5847,35 +6002,31 @@ asm void daNpcF_c::setHitodamaPrtcl() { /* 80154DA8-80154E54 14F6E8 00AC+00 1/1 0/0 1/1 .text * daNpcF_pntVsLineSegmentLengthSquare2D__FffffffPfPfPf */ -int daNpcF_pntVsLineSegmentLengthSquare2D(f32 param_0, f32 param_1, f32 param_2, f32 param_3, - f32 param_4, f32 param_5, f32* param_6, f32* param_7, - f32* param_8) { - f32 l_float3; - f32 l_float1; - f32 l_float2; +BOOL daNpcF_pntVsLineSegmentLengthSquare2D(f32 i_pntX, f32 i_pntZ, f32 i_startX, f32 i_startZ, + f32 i_endX, f32 i_endZ, f32* o_projX, f32* o_projZ, + f32* o_dist2) { + BOOL ret = false; + f32 len2; + f32 line_x = i_endX - i_startX; + f32 line_z = i_endZ - i_startZ; + len2 = line_x * line_x + line_z * line_z; - int ret; - - ret = 0; - l_float1 = (param_4 - param_2); - l_float2 = (param_5 - param_3); - l_float3 = (l_float1 * l_float1) + (l_float2 * l_float2); - - if (FLOAT_LABEL(lit_4116) == l_float3) { - *param_8 = FLOAT_LABEL(lit_4116); - return 0; + if (FLOAT_LABEL(lit_4116) == len2) { + *o_dist2 = FLOAT_LABEL(lit_4116); + return false; } - l_float3 = (l_float1 * (param_0 - param_2) + l_float2 * (param_1 - param_3)) / l_float3; + f32 prm = (line_x * (i_pntX - i_startX) + line_z * (i_pntZ - i_startZ)) / len2; - if (FLOAT_LABEL(lit_4116) <= l_float3 && l_float3 <= FLOAT_LABEL(lit_4140)) { - ret = 1; + if (FLOAT_LABEL(lit_4116) <= prm && prm <= FLOAT_LABEL(lit_4140)) { + ret = true; } - *param_6 = (param_2 + (l_float1 * l_float3)); - *param_7 = (param_3 + (l_float2 * l_float3)); - l_float1 = (*param_6 - param_0); - *param_8 = (l_float1 * l_float1) + ((*param_7 - param_1) * (*param_6 - param_1)); + *o_projX = i_startX + line_x * prm; + *o_projZ = i_startZ + line_z * prm; + //!@bug The last `o_projX` should be `o_projZ` + *o_dist2 = (*o_projX - i_pntX) * (*o_projX - i_pntX) + + (*o_projZ - i_pntZ) * (*o_projX - i_pntZ); return ret; } @@ -5886,15 +6037,87 @@ static u16 daNpcF_putNurbs(dPnt* param_0, int param_1, int param_2, dPnt* param_ } /* 80154E5C-8015556C 14F79C 0710+00 1/1 0/0 1/1 .text daNpcF_chkPassed__F4cXyzP4dPntUsUsii */ +#ifdef NONMATCHING +// matches with literals +BOOL daNpcF_chkPassed(cXyz i_pos, dPnt* i_points, u16 i_idx, u16 i_num, BOOL i_isClosed, + BOOL i_isReversed) { + cXyz prev_pos, cur_pos, next_pos, pos; + u16 prev_idx = i_idx; + u16 next_idx = i_idx; + daNpcF_incIdx(i_num, next_idx, i_isClosed, false); + daNpcF_decIdx(i_num, prev_idx, i_isClosed, false); + + prev_pos.set(i_points[prev_idx].m_position.x, + i_points[prev_idx].m_position.y, + i_points[prev_idx].m_position.z); + cur_pos.set(i_points[i_idx].m_position.x, + i_points[i_idx].m_position.y, + i_points[i_idx].m_position.z); + next_pos.set(i_points[next_idx].m_position.x, + i_points[next_idx].m_position.y, + i_points[next_idx].m_position.z); + + f32 dist; + s16 angle; + if (prev_idx != i_idx || next_idx != i_idx) { + if (prev_idx < i_idx && i_idx < next_idx) { + dist = (next_pos - prev_pos).absXZ(); + angle = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z); + pos = prev_pos; + prev_pos.x = pos.x + dist * -1.0f * cM_ssin(angle); + prev_pos.z = pos.z + dist * -1.0f * cM_scos(angle); + next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle); + next_pos.z = pos.z + dist * 2.0f * cM_scos(angle); + } else if (prev_idx < i_idx) { + dist = (cur_pos - prev_pos).absXZ(); + angle = cM_atan2s(cur_pos.x - prev_pos.x, cur_pos.z - prev_pos.z); + pos = cur_pos; + prev_pos.x = pos.x + dist * -2.0f * cM_ssin(angle); + prev_pos.z = pos.z + dist * -2.0f * cM_scos(angle); + next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle); + next_pos.z = pos.z + dist * 2.0f * cM_scos(angle); + } else if (i_idx < next_idx) { + dist = (next_pos - cur_pos).absXZ(); + angle = cM_atan2s(next_pos.x - cur_pos.x, next_pos.z - cur_pos.z); + pos = cur_pos; + prev_pos.x = pos.x + dist * -2.0f * cM_ssin(angle); + prev_pos.z = pos.z + dist * -2.0f * cM_scos(angle); + next_pos.x = pos.x + dist * 2.0f * cM_ssin(angle); + next_pos.z = pos.z + dist * 2.0f * cM_scos(angle); + } + + f32 proj_x, proj_z, proj2_x, proj2_z; + daNpcF_pntVsLineSegmentLengthSquare2D(i_pos.x, i_pos.z, prev_pos.x, prev_pos.z, + next_pos.x, next_pos.z, &proj_x, &proj_z, &dist); + if (cM3d_IsZero(dist)) { + return false; + } else { + daNpcF_pntVsLineSegmentLengthSquare2D(cur_pos.x, cur_pos.z, prev_pos.x, prev_pos.z, + next_pos.x, next_pos.z, &proj2_x, &proj2_z, &dist); + s16 angle2; + if (i_isReversed) { + angle2 = cM_atan2s(prev_pos.x - next_pos.x, prev_pos.z - next_pos.z); + } else { + angle2 = cM_atan2s(next_pos.x - prev_pos.x, next_pos.z - prev_pos.z); + } + u16 angle_diff = abs((s16)(angle2 - cM_atan2s(proj2_x - proj_x, proj2_z - proj_z))); + return angle_diff > 0x4000; + } + } else { + return false; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm int daNpcF_chkPassed(cXyz param_0, dPnt* param_1, u16 param_2, u16 param_3, int param_4, - int param_5) { +asm BOOL daNpcF_chkPassed(cXyz param_0, dPnt* param_1, u16 param_2, u16 param_3, int param_4, + int param_5) { nofralloc #include "asm/d/a/d_a_npc/daNpcF_chkPassed__F4cXyzP4dPntUsUsii.s" } #pragma pop +#endif /* 8015556C-80155634 14FEAC 00C8+00 1/1 0/0 8/8 .text daNpcF_getGroundAngle__FP13cBgS_PolyInfos */ s16 daNpcF_getGroundAngle(cBgS_PolyInfo* param_0, s16 param_1) { @@ -5983,31 +6206,25 @@ bool daNpcF_chkDoBtnEqSpeak(fopAc_ac_c* i_ActorP) { } /* 80155968-80155AD4 1502A8 016C+00 1/1 0/0 2/2 .text daNpcF_chkPointInArea__F4cXyz4cXyz4cXyzs */ -BOOL daNpcF_chkPointInArea(cXyz param_0, cXyz param_1, cXyz param_2, s16 param_3) { - BOOL ret; - Vec l_vec; - f32 l_float1; - f32 l_float2; - f32 l_float3; - f32 l_float4; - cXyz l_pos; +BOOL daNpcF_chkPointInArea(cXyz i_point, cXyz i_center, cXyz i_bounds, s16 i_angleY) { + cXyz delta_aligned; - mDoMtx_YrotS((MtxP)&mDoMtx_stack_c::now, -param_3); - mDoMtx_stack_c::transM(-param_1.x, -param_1.y, -param_1.z); - MTXMultVec((MtxP)&mDoMtx_stack_c::now, (Vec*)¶m_0, &l_vec); + mDoMtx_stack_c::YrotS(-i_angleY); + mDoMtx_stack_c::transM(-i_center.x, -i_center.y, -i_center.z); + mDoMtx_stack_c::multVec(&i_point, &delta_aligned); - l_float1 = fabsf(param_2.x); - l_float2 = fabsf(param_2.z); - l_float3 = fabsf(l_vec.x); - l_float4 = fabsf(l_vec.z); + f32 bound_x = fabsf(i_bounds.x); + f32 bound_z = fabsf(i_bounds.z); + f32 delta_x = fabsf(delta_aligned.x); + f32 delta_z = fabsf(delta_aligned.z); - l_pos = param_1 - param_0; + cXyz delta = i_center - i_point; - if (l_pos.y <= -param_2.y || param_2.y <= l_pos.y) { + if (delta.y <= -i_bounds.y || i_bounds.y <= delta.y) { return FALSE; } else { - f32 tmp_float1 = (l_float3 * l_float3) / (l_float1 * l_float1); - f32 tmp_float2 = (l_float4 * l_float4) / (l_float2 * l_float2); + f32 tmp_float1 = (delta_x * delta_x) / (bound_x * bound_x); + f32 tmp_float2 = (delta_z * delta_z) / (bound_z * bound_z); f32 tmp_float3 = tmp_float1 + tmp_float2; return tmp_float3 <= FLOAT_LABEL(lit_4140); } diff --git a/src/d/d_attention.cpp b/src/d/d_attention.cpp index 17c58545115..ac4c0084ef4 100644 --- a/src/d/d_attention.cpp +++ b/src/d/d_attention.cpp @@ -799,17 +799,17 @@ f32 dAttention_c::calcWeight(int param_0, fopAc_ac_c* param_1, f32 param_2, s16 if (fopAcM_checkStatus(param_1, 0x20000000) || check_event_condition(entry->field_0x0, param_1->eventInfo.getCondition())) { dvar12 = 0.0f; - } else if (check_flontofplayer(d_entry->field_0x18, param_3, param_4)) { + } else if (check_flontofplayer(d_entry->mAngleSelect, param_3, param_4)) { dvar12 = 0.0f; } else if (!check_distace(&mOwnerAttnPos, param_3, ¶m_1->attention_info.position, - d_entry->field_0x0, d_entry->field_0x8, d_entry->field_0xc, - d_entry->field_0x10)) { + d_entry->mRadius1, d_entry->mDistanceAdjust, d_entry->mUpperY, + d_entry->mLowerY)) { dvar12 = 0.0f; } else { dvar12 = distace_weight(param_2, param_3, 0.5f); } - f32 dvar13 = d_entry->field_0x14; + f32 dvar13 = d_entry->mWeight; if (dvar12 > 0.0f && dvar13 > dvar14) { dvar14 = dvar13; weight = dvar12 / dvar13; @@ -1149,12 +1149,12 @@ bool dAttention_c::chaseAttention() { return false; } else if (check_event_condition(type, actor->eventInfo.getCondition())) { return false; - } else if (check_flontofplayer(dist_table[tbl_idx].field_0x18, a1.Val(), a2.Val())) { + } else if (check_flontofplayer(dist_table[tbl_idx].mAngleSelect, a1.Val(), a2.Val())) { return false; } else if (check_distace(&mOwnerAttnPos, a1.Val(), &actor->attention_info.position, - dist_table[tbl_idx].field_0x4, dist_table[tbl_idx].field_0x8, - dist_table[tbl_idx].field_0xc, - dist_table[tbl_idx].field_0x10)) { + dist_table[tbl_idx].mRadius2, + dist_table[tbl_idx].mDistanceAdjust, + dist_table[tbl_idx].mUpperY, dist_table[tbl_idx].mLowerY)) { mLockOnList[offset].mWeight = distace_weight(g1.R(), a1.Val(), 0.5f); return true; } diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 3576c4c76fe..15b42adaf59 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -3293,6 +3293,94 @@ asm int mDoExt_McaMorfSO::create(J3DModelData* param_0, mDoExt_McaMorfCallBack1_ #endif /* 80010B68-80010E70 00B4A8 0308+00 1/0 0/0 0/0 .text calc__16mDoExt_McaMorfSOFv */ +#ifdef NONMATCHING +// matches with literals +void mDoExt_McaMorfSO::calc() { + if (mpModel != NULL) { + u16 jnt_no = J3DMtxCalc::getJoint()->getJntNo(); + j3dSys.setCurrentMtxCalc(this); + + J3DTransformInfo trans; + J3DTransformInfo* trans_p; + if (mpTransformInfo == NULL) { + trans_p = &trans; + } else { + trans_p = &mpTransformInfo[jnt_no]; + } + + Quaternion quat; + Quaternion* quat_p; + if (mpQuat == NULL) { + quat_p = &quat; + } else { + quat_p = &mpQuat[jnt_no]; + } + + if (mpAnm == NULL) { + *trans_p = mpModel->getModelData()->getJointNodePointer(jnt_no)->getTransformInfo(); + + if (mpCallback1 != NULL) { + mpCallback1->execute(jnt_no, trans_p); + } + + JMAEulerToQuat(trans_p->mRotation.x, trans_p->mRotation.y, trans_p->mRotation.z, + quat_p); + J3DMtxCalcCalcTransformMaya::calcTransform(*trans_p); + } else if (mCurMorf >= 1.0f || mpTransformInfo == NULL || mpQuat == NULL) { + getTransform(jnt_no, trans_p); + + if (mpCallback1 != NULL) { + mpCallback1->execute(jnt_no, trans_p); + } + + JMAEulerToQuat(trans_p->mRotation.x, trans_p->mRotation.y, trans_p->mRotation.z, + quat_p); + J3DMtxCalcCalcTransformMaya::calcTransform(*trans_p); + } else { + f32 lerp_factor; + if (mMorfNone) { + lerp_factor = 1.0f; + } else { + lerp_factor = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf); + } + f32 inv_lerp_factor = 1.0f - lerp_factor; + + J3DTransformInfo trans2; + getTransform(jnt_no, &trans2); + + if (mpCallback1 != NULL) { + mpCallback1->execute(jnt_no, &trans2); + } + + Quaternion quat2; + JMAEulerToQuat(trans2.mRotation.x, trans2.mRotation.y, trans2.mRotation.z, &quat2); + JMAQuatLerp(quat_p, &quat2, lerp_factor, quat_p); + + Mtx mtx; + mDoMtx_quat(mtx, quat_p); + + trans_p->mTranslate.x = trans_p->mTranslate.x * inv_lerp_factor + + trans2.mTranslate.x * lerp_factor; + trans_p->mTranslate.y = trans_p->mTranslate.y * inv_lerp_factor + + trans2.mTranslate.y * lerp_factor; + trans_p->mTranslate.z = trans_p->mTranslate.z * inv_lerp_factor + + trans2.mTranslate.z * lerp_factor; + trans_p->mScale.x = trans_p->mScale.x * inv_lerp_factor + + trans2.mScale.x * lerp_factor; + trans_p->mScale.y = trans_p->mScale.y * inv_lerp_factor + + trans2.mScale.y * lerp_factor; + trans_p->mScale.z = trans_p->mScale.z * inv_lerp_factor + + trans2.mScale.z * lerp_factor; + + mDoExt_setJ3DData(mtx, trans_p, jnt_no); + } + + if (mpCallback2 != NULL) { + mpCallback2->execute(jnt_no); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -3301,9 +3389,56 @@ asm void mDoExt_McaMorfSO::calc() { #include "asm/m_Do/m_Do_ext/calc__16mDoExt_McaMorfSOFv.s" } #pragma pop +#endif /* 80010E70-800110B0 00B7B0 0240+00 1/1 5/5 208/208 .text * setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff */ +#ifdef NONMATCHING +// matches with literals +void mDoExt_McaMorfSO::setAnm(J3DAnmTransform* i_anm, int i_attr, f32 i_morf, f32 i_rate, + f32 i_start, f32 i_end) { + mpAnm = i_anm; + setStartFrame(i_start); + + if (i_end < 0.0f) { + if (mpAnm == NULL) { + mFrameCtrl.init(0); + } else { + mFrameCtrl.init(mpAnm->getFrameMax()); + } + } else { + mFrameCtrl.init(i_end); + } + + if (i_anm != NULL && i_attr < 0) { + i_attr = i_anm->getAttribute(); + } + + setPlayMode(i_attr); + setPlaySpeed(i_rate); + + if (i_rate >= 0.0f) { + setFrame(i_start); + } else { + setFrame(mFrameCtrl.getEnd()); + } + + setLoopFrame(getFrame()); + setMorf(i_morf); + + if (mpSound != NULL) { + if (i_anm != NULL) { + mpBas = static_cast(i_anm)->getBas(); + } else { + mpBas = NULL; + } + + if (mpBas != NULL) { + mpSound->initAnime(mpBas, getPlaySpeed() >= 0.0f, getLoopFrame(), getFrame()); + } + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -3313,6 +3448,7 @@ asm void mDoExt_McaMorfSO::setAnm(J3DAnmTransform* i_anm, int i_attr, f32 i_morf #include "asm/m_Do/m_Do_ext/setAnm__16mDoExt_McaMorfSOFP15J3DAnmTransformiffff.s" } #pragma pop +#endif /* 800110B0-80011154 00B9F0 00A4+00 0/0 5/5 143/143 .text play__16mDoExt_McaMorfSOFUlSc */