summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaroline Madsen <69010899+randomsalience@users.noreply.github.com>2024-04-26 22:20:26 -0400
committerGitHub <noreply@github.com>2024-04-26 19:20:26 -0700
commit669c7d920b196d8f1b998420014bcc9397abaa32 (patch)
treeb8d660dc7d05769be5e6aa1c91f184b3389ecc10
parentc163dc9ed31c69eb791be1dcdcd7ab8b296e95a1 (diff)
d_a_npc_zra mostly done, misc npc work (#2140)
-rw-r--r--asm/d/a/d_a_npc/clrRotAngle__15daNpcF_Lookat_cFv.s15
-rw-r--r--asm/d/a/d_a_npc/setAngle__8daNpcF_cFs.s11
-rw-r--r--asm/d/a/d_a_npc/setRotAngle__15daNpcF_Lookat_cFv.s41
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Delete__11daNpc_zrA_cFv.s14
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/Execute__11daNpc_zrA_cFv.s9
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcBank__11daNpc_zrA_cFssRsRs.s40
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcSwimAngle__11daNpc_zrA_cFR5csXyzR5csXyzss.s37
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleCheck__11daNpc_zrA_cFv.s12
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/calcWaistAngleStop__11daNpc_zrA_cFv.s4
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s12
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/chkFindPlayer__11daNpc_zrA_cFv.s49
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/createHeapCallBack__11daNpc_zrA_cFP10fopAc_ac_c.s9
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/ctrlJointCallBack__11daNpc_zrA_cFP8J3DJointi.s21
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Create__FPv.s9
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Delete__FPv.s9
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Draw__FPv.s9
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/daNpc_zrA_Execute__FPv.s9
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getActionTypeFromParam__11daNpc_zrA_cFv.s62
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getGameModeFromParam__11daNpc_zrA_cFv.s12
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiModeFromParam__11daNpc_zrA_cFv.s15
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getMultiNoFromParam__11daNpc_zrA_cFv.s14
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/getSoldierTypeFromParam__11daNpc_zrA_cFv.s25
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subHoz__FPvPv.s22
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMark__FPvPv.s31
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subMulti__FPvPv.s47
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_subSP__FPvPv.s35
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/s_sub__FPvPv.s22
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setAction__11daNpc_zrA_cFM11daNpc_zrA_cFPCvPvPv_i.s45
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setExpression__11daNpc_zrA_cFif.s12
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setLookMode__11daNpc_zrA_cFi.s10
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setMotion__11daNpc_zrA_cFifi.s19
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setParam__11daNpc_zrA_cFv.s136
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/setSkipZev__11daNpc_zrA_cFii.s38
-rw-r--r--asm/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra/waitSwim__11daNpc_zrA_cFv.s107
-rw-r--r--include/d/a/d_a_npc.h462
-rw-r--r--include/d/a/d_a_player.h8
-rw-r--r--include/d/com/d_com_inf_game.h4
-rw-r--r--include/d/d_attention.h14
-rw-r--r--include/d/d_drawlist.h4
-rw-r--r--include/d/d_path.h4
-rw-r--r--include/d/d_stage.h2
-rw-r--r--include/d/meter/d_meter2_info.h8
-rw-r--r--include/m_Do/m_Do_ext.h1
-rw-r--r--include/rel/d/a/d_a_canoe/d_a_canoe.h11
-rw-r--r--include/rel/d/a/d_a_formation_mng/d_a_formation_mng.h2
-rw-r--r--include/rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.h155
-rw-r--r--include/rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.h87
-rw-r--r--include/rel/d/a/npc/d_a_npc_the/d_a_npc_the.h128
-rw-r--r--include/rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.h456
-rw-r--r--include/rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.h20
-rw-r--r--rel/d/a/d_a_talk/d_a_talk.cpp2
-rw-r--r--rel/d/a/kytag/d_a_kytag06/d_a_kytag06.cpp10
-rw-r--r--rel/d/a/npc/d_a_npc_ash/d_a_npc_ash.cpp1091
-rw-r--r--rel/d/a/npc/d_a_npc_hoz/d_a_npc_hoz.cpp512
-rw-r--r--rel/d/a/npc/d_a_npc_the/d_a_npc_the.cpp490
-rw-r--r--rel/d/a/npc/d_a_npc_zra/d_a_npc_zra.cpp7588
-rw-r--r--rel/d/a/obj/d_a_obj_digplace/d_a_obj_digplace.cpp2
-rw-r--r--rel/d/a/obj/d_a_obj_zraMark/d_a_obj_zraMark.cpp92
-rw-r--r--src/d/a/d_a_npc.cpp945
-rw-r--r--src/d/d_attention.cpp16
-rw-r--r--src/m_Do/m_Do_ext.cpp136
61 files changed, 9214 insertions, 3998 deletions
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 a3963634f6..0000000000
--- 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 1a7685126b..0000000000
--- 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 042f87826b..0000000000
--- 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 8facedd418..0000000000
--- 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 b8d7481bea..0000000000
--- 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 7e3fecd9e4..0000000000
--- 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 1f952725a3..0000000000
--- 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 d7af700ebc..0000000000
--- 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 d7cc6dc1d8..0000000000
--- 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 5fc81b6375..0000000000
--- 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 dcae7d193f..0000000000
--- 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 576a4d8d98..0000000000
--- 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 689ebe8be9..0000000000
--- 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 4312b1033c..0000000000
--- 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 7d4acc09b8..0000000000
--- 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 42ed82dc27..0000000000
--- 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 12d21eec6c..0000000000
--- 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 b016cdc146..0000000000
--- 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 b7a41b11cb..0000000000
--- 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 7b8b01f2de..0000000000
--- 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 6806b5088a..0000000000
--- 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 a85b8b0bc0..0000000000
--- 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 0c0653c25e..0000000000
--- 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 1a05fe760d..0000000000
--- 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 dd836ec3d9..0000000000
--- 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 a829f2ced5..0000000000
--- 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 dd22560783..0000000000
--- 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 ff5535fa3a..0000000000
--- 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 e187126aad..0000000000
--- 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 39e4ef6c4b..0000000000
--- 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 df2f1bebfc..0000000000
--- 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 5912755269..0000000000
--- 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 35b06334f2..0000000000
--- 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 3344fbdcd1..0000000000
--- 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 63afb943ee..70c4d898dd 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,7 +421,172 @@ 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);
+
+struct daBaseNpc_matAnm_c {
+ /* 8014D884 */ void calc(J3DMaterial*) const;
+ /* 80150444 */ ~daBaseNpc_matAnm_c();
+};
+
+class daBaseNpc_acMngr_c {
+private:
+ /* 0x00 */ u8 field_0x00[4];
+ /* 0x04 */ u32 mActorId;
+
+public:
+ /* 8014D804 */ daBaseNpc_acMngr_c();
+ /* 8014D81C */ void entry(fopAc_ac_c*);
+ /* 8014D838 */ fopAc_ac_c* getActor();
+ /* 80150524 */ ~daBaseNpc_acMngr_c();
+};
+
+class daBaseNpc_path_c {
+private:
+ /* 0x000 */ f32 field_0x0;
+ /* 0x004 */ dPath* mpRoomPath;
+ /* 0x008 */ f32 field_0x8;
+ /* 0x010 */ u8 field_0xc[2562];
+ /* 0xA0E */ u16 field_0xa0e;
+ /* 0xA10 */ u16 mIdx;
+ /* 0xA12 */ s8 mDirection;
+ /* 0xA13 */ u8 field_0xa13[17];
+
+public:
+ /* 8014D998 */ daBaseNpc_path_c();
+ /* 8014D9A8 */ BOOL isPath();
+ /* 8014D9BC */ int setPathInfo(u8, s8, s8);
+ /* 8014DA48 */ void reverseDir();
+ /* 8014DA64 */ s32 chkPnt(cXyz);
+ /* 8014DAC4 */ void setNextPnt();
+ /* 8014DB04 */ u16 getIdx();
+ /* 8014DB0C */ void setIdx(u16);
+ /* 8014DB14 */ Vec getPntPos(u16);
+ /* 801503FC */ ~daBaseNpc_path_c();
+};
+
+class daBaseNpc_lookat_c {
+private:
+ /* 0x00 */ int field_0x00;
+ /* 0x04 */ csXyz mMaxJntLmt[2];
+ /* 0x10 */ u8 field_0x0A[12];
+ /* 0x1C */ csXyz mMinJntLmt[2];
+ /* 0x28 */ u8 field_0x28[12];
+ /* 0x34 */ cXyz mJntPos[3];
+ /* 0x4C */ u8 field_0x4C[24];
+ /* 0x64 */ csXyz mUnk[2];
+ /* 0x70 */ csXyz mRotation[2];
+ /* 0x7C */ csXyz mUnk2[2];
+ /* 0x88 */ u8 field_0x88[4];
+ /* 0x8C */ cXyz* mpAttnPos;
+
+public:
+ /* 8014DB40 */ void limitter(s16, s16*, s16, s16);
+ /* 8014DBB4 */ void calc(fopAc_ac_c*, f32 (*)[4], s16);
+ /* 8014E634 */ void setMaxJntLmt(csXyz, int);
+ /* 8014E658 */ void setMinJntLmt(csXyz, int);
+ /* 8014E67C */ void setJntPos(cXyz, int);
+ /* 8014E6A0 */ int setAttnPos(cXyz*);
+ /* 8014E6AC */ csXyz getRot(int);
+ /* 801502EC */ ~daBaseNpc_lookat_c();
+};
+
+class daBaseNpc_c : public fopAc_ac_c {
+private:
+ /* 0x568 */ void* vtable;
+ /* 0x56C */ dBgS_Acch field_0x56c;
+ /* 0x744 */ u8 field_0x744[16];
+ /* 0x754 */ mDoExt_McaMorfSO* mpMorf[2];
+ /* 0x758 */ Z2Creature mCreature;
+ /* 0x7EC */ mDoExt_bckAnm mBckAnm;
+ /* 0x808 */ mDoExt_btpAnm mBtpAnm;
+ /* 0x820 */ u8 tmp2[28];
+ /* 0x83c */ u16* field_0x83c;
+ /* 0x840 */ u16 field_0x840;
+ /* 0x842 */ u8 field_0x842[6];
+ /* 0x848 */ s32 mUnk;
+ /* 0x84C */ dMsgFlow_c mMsg;
+ /* 0x898 */ u8 field_0x898[2];
+ /* 0x89A */ s16 mEvtIdx;
+ /* 0x89C */ u8 field_0x89C[34];
+ /* 0x8BE */ u8 mRoomId;
+ /* 0x8C0 */ u8 field_0x8C0[90];
+ /* 0x91A */ csXyz field_0x91a;
+ /* 0x920 */ csXyz field_0xd7e;
+ /* 0x926 */ csXyz field_0xd84;
+ /* 0x92C */ csXyz field_0xd8a;
+ /* 0x932 */ csXyz field_0x932;
+ /* 0x938 */ u8 field_0x938[4];
+ /* 0x93C */ csXyz field_0x93c;
+ /* 0x940 */ u8 field_0x940[18];
+ /* 0x954 */ cXyz field_0x954;
+ /* 0x960 */ u8 field_0x960[36];
+ /* 0x984 */ csXyz field_0x984;
+ /* 0x98A */ u8 field_0x98A[18];
+ /* 0x99C */ csXyz field_0x99c;
+ /* 0x9A2 */ u8 field_0x9a2[70];
+ /* 0x9E8 */ const cBgS_PolyInfo mBgSPolyInfo;
+ /* 0x9F9 */ u8 field_0x9f9[27];
+
+public:
+ /* 8014E6C8 */ daBaseNpc_c();
+ /* 8014E89C */ ~daBaseNpc_c();
+ /* 8014EAD0 */ void execute();
+ /* 8014EC50 */ void draw(f32);
+ /* 8014EE3C */ bool getResName();
+ /* 8014EE44 */ J3DAnmTransform* getTrnsfrmKeyAnmP(char*, int);
+ /* 8014EE80 */ void setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int);
+ /* 8014EEE4 */ void setBckAnm(J3DAnmTransform*, f32, int, int, int, bool);
+ /* 8014EF28 */ J3DAnmTransform* getTexPtrnAnmP(char*, int);
+ /* 8014EF64 */ void setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int);
+ /* 8014EFA4 */ void attnSttsOn(int, int);
+ /* 8014EFF0 */ void setParam();
+ /* 8014EFF4 */ void orderEvent(int, char*);
+ /* 8014F09C */ void mainProc();
+ /* 8014F0A0 */ void setEnvTevColor();
+ /* 8014F0FC */ void setRoomNo();
+ /* 8014F140 */ bool btkCtrl();
+ /* 8014F148 */ int checkEndAnm(f32);
+ /* 8014F1C8 */ int checkEndAnm(J3DFrameCtrl*);
+ /* 8014F228 */ void allAnmPlay();
+ /* 8014F38C */ void adjustShapeAngle();
+ /* 8014F390 */ void setMtx(int);
+ /* 8014F4A0 */ void setCollisions();
+ /* 8014F4A4 */ void setAttnPos();
+ /* 8014F4A8 */ void drawOtherMdls();
+ /* 8014F4AC */ bool dbgDraw();
+
+ void setVtable(void* table) { vtable = table; }
+
+ static u8 const mCcDObj[48];
+ static dCcD_SrcCyl mCcDCyl;
+ static dCcD_SrcSph mCcDSph;
+};
+
+class daBaseNpc_moveBgActor_c : public daBaseNpc_c {
+private:
+ /* 0xA14 */ u32 field_0xa14;
+
+public:
+ /* 8014F4B4 */ daBaseNpc_moveBgActor_c();
+ /* 8014F518 */ void MoveBGCreateHeap();
+ /* 8014F60C */ void
+ MoveBGCreate(char const*, int,
+ void (*)(dBgW*, void*, cBgS_PolyInfo const&, bool, cXyz*, csXyz*, csXyz*), u32);
+ /* 8014F6FC */ void MoveBGDelete();
+ /* 8014F770 */ void MoveBGExecute();
+ /* 801503BC */ bool CreateHeap();
+ /* 801503C4 */ bool Create();
+ /* 801503CC */ bool Delete();
+ /* 801503D4 */ bool Execute(f32 (**)[3][4]);
+ /* 801503DC */ bool Draw();
+ /* 801503E4 */ bool IsDelete();
+ /* 801503EC */ bool ToFore();
+ /* 801503F4 */ bool ToBack();
+ /* 80155FB0 */ ~daBaseNpc_moveBgActor_c();
+
+ static u8 m_name[4];
+ static u8 m_dzb_id[4];
+ static u8 m_set_func[4];
+};
class daNpcF_ActorMngr_c {
private:
@@ -462,41 +627,41 @@ protected:
/* 0x8CC */ cXyz field_0x8cc;
/* 0x8D8 */ cXyz field_0x8d8;
/* 0x8E4 */ cXyz mHeadPos;
- /* 0x8F0 */ csXyz field_0x8f0;
- /* 0x8F6 */ csXyz field_0x8f6;
+ /* 0x8F0 */ csXyz mCurAngle;
+ /* 0x8F6 */ csXyz mOldAngle;
/* 0x8FC */ csXyz mEyeAngle;
/* 0x902 */ csXyz mHeadAngle;
/* 0x908 */ csXyz field_0x908[3];
- /* 0x91A */ csXyz field_0x91a[3];
+ /* 0x91A */ csXyz mLookatAngle[3];
/* 0x92C */ int mCutIndex;
/* 0x930 */ u32 field_0x930;
/* 0x934 */ int mAttnIdx;
/* 0x938 */ int mAttnChangeTimer;
/* 0x93C */ int mAttnActorTimer[5];
- /* 0x950 */ int field_0x950;
+ /* 0x950 */ int mMsgTimer;
/* 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;
+ /* 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 field_0x980;
+ /* 0x980 */ f32 mGroundH;
/* 0x984 */ f32 field_0x984[3];
- /* 0x990 */ u16 field_0x990;
- /* 0x992 */ u16 field_0x992;
- /* 0x994 */ u16 field_0x994;
- /* 0x996 */ s16 field_0x996;
+ /* 0x990 */ s16 field_0x990;
+ /* 0x992 */ s16 field_0x992;
+ /* 0x994 */ s16 mTurnStartAngle;
+ /* 0x996 */ s16 mTurnTargetAngle;
/* 0x998 */ u16 field_0x998;
/* 0x99C */ u32 mAnmFlags;
- /* 0x9A0 */ u32 field_0x9a0;
+ /* 0x9A0 */ u32 mShadowKey;
/* 0x9A4 */ u32 field_0x9a4;
/* 0x9A8 */ u32 mHitodamaParticleKey[2];
- /* 0x9B0 */ u32 field_0x9b0;
+ /* 0x9B0 */ u32 mPolySound;
/* 0x9B4 */ int mFlowNodeNo;
/* 0x9B8 */ cXyz field_0x9b8;
/* 0x9C4 */ cXyz field_0x9c4;
@@ -512,12 +677,12 @@ protected:
/* 0x9E2 */ u16 mMotionLoops;
/* 0x9E4 */ u16 mExpressionLoops;
/* 0x9E6 */ u16 mOrderEvtNo;
- /* 0x9E8 */ s8 field_0x9e8;
- /* 0x9E9 */ u8 field_0x9e9;
- /* 0x9EA */ u8 field_0x9ea;
+ /* 0x9E8 */ s8 mReverb;
+ /* 0x9E9 */ bool mOrderSpeakEvt;
+ /* 0x9EA */ bool field_0x9ea;
/* 0x9EB */ bool field_0x9eb;
- /* 0x9EC */ u8 field_0x9ec;
- /* 0x9ED */ bool field_0x9ed;
+ /* 0x9EC */ bool field_0x9ec;
+ /* 0x9ED */ bool mOrderNewEvt;
/* 0x9EE */ bool field_0x9ee;
/* 0x9EF */ u8 field_0x9ef;
/* 0x9F0 */ u8 field_0x9f0;
@@ -528,7 +693,7 @@ protected:
/* 0x9F5 */ u8 field_0x9f5;
/* 0x9F6 */ u8 field_0x9f6;
/* 0x9F8 */ dMsgFlow_c mFlow;
- /* 0xA44 */ cBgS_GndChk field_0xa44;
+ /* 0xA44 */ cBgS_GndChk mGndChk;
/* 0xA80 */ dBgS_GndChk field_0xa80;
/* 0xAD4 */ dBgS_LinChk field_0xad4;
@@ -553,6 +718,8 @@ public:
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 |
@@ -561,9 +728,19 @@ public:
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(int, int, f32, _GXColorS10*, int);
- /* 80152614 */ void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*);
+ /* 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*);
@@ -592,26 +769,26 @@ public:
/* 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);
+ /* 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 */ int initTalk(int, fopAc_ac_c**);
+ /* 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(int, fpcLyIt_JudgeFunc, f32, f32, f32, f32, s16,
- 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(int, s16);
+ /* 801549E0 */ BOOL chkFindPlayer2(BOOL, s16);
/* 80154BD8 */ void setHitodamaPrtcl();
/* 80155BF4 */ virtual ~daNpcF_c();
@@ -659,176 +836,17 @@ public:
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);
-
-struct daBaseNpc_matAnm_c {
- /* 8014D884 */ void calc(J3DMaterial*) const;
- /* 80150444 */ ~daBaseNpc_matAnm_c();
-};
-
-class daBaseNpc_acMngr_c {
-private:
- /* 0x00 */ u8 field_0x00[4];
- /* 0x04 */ u32 mActorId;
-
-public:
- /* 8014D804 */ daBaseNpc_acMngr_c();
- /* 8014D81C */ void entry(fopAc_ac_c*);
- /* 8014D838 */ fopAc_ac_c* getActor();
- /* 80150524 */ ~daBaseNpc_acMngr_c();
-};
-
-class daBaseNpc_path_c {
-private:
- /* 0x000 */ f32 field_0x0;
- /* 0x004 */ dPath* mpRoomPath;
- /* 0x008 */ f32 field_0x8;
- /* 0x010 */ u8 field_0xc[2562];
- /* 0xA0E */ u16 field_0xa0e;
- /* 0xA10 */ u16 mIdx;
- /* 0xA12 */ s8 mDirection;
- /* 0xA13 */ u8 field_0xa13[17];
-
-public:
- /* 8014D998 */ daBaseNpc_path_c();
- /* 8014D9A8 */ BOOL isPath();
- /* 8014D9BC */ int setPathInfo(u8, s8, s8);
- /* 8014DA48 */ void reverseDir();
- /* 8014DA64 */ s32 chkPnt(cXyz);
- /* 8014DAC4 */ void setNextPnt();
- /* 8014DB04 */ u16 getIdx();
- /* 8014DB0C */ void setIdx(u16);
- /* 8014DB14 */ Vec getPntPos(u16);
- /* 801503FC */ ~daBaseNpc_path_c();
-};
-
-class daBaseNpc_lookat_c {
-private:
- /* 0x00 */ int field_0x00;
- /* 0x04 */ csXyz mMaxJntLmt[2];
- /* 0x10 */ u8 field_0x0A[12];
- /* 0x1C */ csXyz mMinJntLmt[2];
- /* 0x28 */ u8 field_0x28[12];
- /* 0x34 */ cXyz mJntPos[3];
- /* 0x4C */ u8 field_0x4C[24];
- /* 0x64 */ csXyz mUnk[2];
- /* 0x70 */ csXyz mRotation[2];
- /* 0x7C */ csXyz mUnk2[2];
- /* 0x88 */ u8 field_0x88[4];
- /* 0x8C */ cXyz* mpAttnPos;
-
-public:
- /* 8014DB40 */ void limitter(s16, s16*, s16, s16);
- /* 8014DBB4 */ void calc(fopAc_ac_c*, f32 (*)[4], s16);
- /* 8014E634 */ void setMaxJntLmt(csXyz, int);
- /* 8014E658 */ void setMinJntLmt(csXyz, int);
- /* 8014E67C */ void setJntPos(cXyz, int);
- /* 8014E6A0 */ int setAttnPos(cXyz*);
- /* 8014E6AC */ csXyz getRot(int);
- /* 801502EC */ ~daBaseNpc_lookat_c();
-};
-
-class daBaseNpc_c : public fopAc_ac_c {
-private:
- /* 0x568 */ void* vtable;
- /* 0x56C */ dBgS_Acch field_0x56c;
- /* 0x744 */ u8 field_0x744[16];
- /* 0x754 */ mDoExt_McaMorfSO* mpMorf[2];
- /* 0x758 */ Z2Creature mCreature;
- /* 0x7EC */ mDoExt_bckAnm mBckAnm;
- /* 0x808 */ mDoExt_btpAnm mBtpAnm;
- /* 0x820 */ u8 tmp2[28];
- /* 0x83c */ u16* field_0x83c;
- /* 0x840 */ u16 field_0x840;
- /* 0x842 */ u8 field_0x842[6];
- /* 0x848 */ s32 mUnk;
- /* 0x84C */ dMsgFlow_c mMsg;
- /* 0x898 */ u8 field_0x898[2];
- /* 0x89A */ s16 mEvtIdx;
- /* 0x89C */ u8 field_0x89C[34];
- /* 0x8BE */ u8 mRoomId;
- /* 0x8C0 */ u8 field_0x8C0[90];
- /* 0x91A */ csXyz field_0x91a;
- /* 0x920 */ csXyz field_0xd7e;
- /* 0x926 */ csXyz field_0xd84;
- /* 0x92C */ csXyz field_0xd8a;
- /* 0x932 */ csXyz field_0x932;
- /* 0x938 */ u8 field_0x938[4];
- /* 0x93C */ csXyz field_0x93c;
- /* 0x940 */ u8 field_0x940[18];
- /* 0x954 */ cXyz field_0x954;
- /* 0x960 */ u8 field_0x960[36];
- /* 0x984 */ csXyz field_0x984;
- /* 0x98A */ u8 field_0x98A[18];
- /* 0x99C */ csXyz field_0x99c;
- /* 0x9A2 */ u8 field_0x9a2[70];
- /* 0x9E8 */ const cBgS_PolyInfo mBgSPolyInfo;
- /* 0x9F9 */ u8 field_0x9f9[27];
-
-public:
- /* 8014E6C8 */ daBaseNpc_c();
- /* 8014E89C */ ~daBaseNpc_c();
- /* 8014EAD0 */ void execute();
- /* 8014EC50 */ void draw(f32);
- /* 8014EE3C */ bool getResName();
- /* 8014EE44 */ J3DAnmTransform* getTrnsfrmKeyAnmP(char*, int);
- /* 8014EE80 */ void setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int);
- /* 8014EEE4 */ void setBckAnm(J3DAnmTransform*, f32, int, int, int, bool);
- /* 8014EF28 */ J3DAnmTransform* getTexPtrnAnmP(char*, int);
- /* 8014EF64 */ void setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int);
- /* 8014EFA4 */ void attnSttsOn(int, int);
- /* 8014EFF0 */ void setParam();
- /* 8014EFF4 */ void orderEvent(int, char*);
- /* 8014F09C */ void mainProc();
- /* 8014F0A0 */ void setEnvTevColor();
- /* 8014F0FC */ void setRoomNo();
- /* 8014F140 */ bool btkCtrl();
- /* 8014F148 */ int checkEndAnm(f32);
- /* 8014F1C8 */ int checkEndAnm(J3DFrameCtrl*);
- /* 8014F228 */ void allAnmPlay();
- /* 8014F38C */ void adjustShapeAngle();
- /* 8014F390 */ void setMtx(int);
- /* 8014F4A0 */ void setCollisions();
- /* 8014F4A4 */ void setAttnPos();
- /* 8014F4A8 */ void drawOtherMdls();
- /* 8014F4AC */ bool dbgDraw();
-
- void setVtable(void* table) { vtable = table; }
-
- static u8 const mCcDObj[48];
- static dCcD_SrcCyl mCcDCyl;
- static dCcD_SrcSph mCcDSph;
-};
-
-class daBaseNpc_moveBgActor_c : public daBaseNpc_c {
-private:
- /* 0xA14 */ u32 field_0xa14;
-
-public:
- /* 8014F4B4 */ daBaseNpc_moveBgActor_c();
- /* 8014F518 */ void MoveBGCreateHeap();
- /* 8014F60C */ void
- MoveBGCreate(char const*, int,
- void (*)(dBgW*, void*, cBgS_PolyInfo const&, bool, cXyz*, csXyz*, csXyz*), u32);
- /* 8014F6FC */ void MoveBGDelete();
- /* 8014F770 */ void MoveBGExecute();
- /* 801503BC */ bool CreateHeap();
- /* 801503C4 */ bool Create();
- /* 801503CC */ bool Delete();
- /* 801503D4 */ bool Execute(f32 (**)[3][4]);
- /* 801503DC */ bool Draw();
- /* 801503E4 */ bool IsDelete();
- /* 801503EC */ bool ToFore();
- /* 801503F4 */ bool ToBack();
- /* 80155FB0 */ ~daBaseNpc_moveBgActor_c();
-
- static u8 m_name[4];
- static u8 m_dzb_id[4];
- static u8 m_set_func[4];
-};
+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:
@@ -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 6d551c2e6f..955f2fb15b 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 c88d73544b..3d75d8aa37 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 79c2839697..27a8a9a34e 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 cbc9de6d05..f8311e2468 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 6906646b5f..82e25d6b5c 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 2ccdb8412d..caf818306b 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 7884dc3f4e..b030682561 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 866d255f05..996f68a2f1 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 64cdab8bc6..48df9bd069 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 5fc0bc4326..6e31be08b5 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 f850159428..be2bc7bb44 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 f0fb5f363a..69be9985ec 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 f167e1f506..5bdb9357c1 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 f92d0c08ad..7ec9c9424c 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 4235ef04da..0ad5de021f 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 24bb4dba32..6f7d3a558e 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 f6058a2b83..f612a4bfb2 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 e278faf831..1eebc5998f 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(&current.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(&current.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<J3DModelData*>(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<J3DModelData*>(
+ 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<J3DModelData*>(
+ 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 (chkFindPlayer()) {
+ mTurnMode = 0;
}
- if (mActorMngr[0].getActorP() != NULL) {
- setLookMode(2, NULL);
+ }
+
+ if (mActorMngr[0].getActorP() != NULL) {
+ setLookMode(LOOK_PLAYER, NULL);
+ } else {
+ if (isMap()) {
+ setLookMode(LOOK_ACTOR, 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);
- }
- }
+ setLookMode(LOOK_NONE, NULL);
}
- }
- if (field_0x8f0.y != home.angle.y) {
- if (step(home.angle.y, true)) {
+
+ 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<daTag_EvtArea_c*>(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);
- }
- 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);
- }
+ 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 (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);
- }
+ if ((this->*(mEvtSeqList[mOrderEvtNo]))(cutIndex)) {
+ dComIfGp_getEventManager().cutEnd(cutIndex);
}
- } 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(&current.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(&current.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(&center);
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 9b56f81f5f..c00aa7bf6a 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 dfacbc35a2..0d3c12b963 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<daTag_EvtArea_c*>(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 a7ca5a1a6c..fc672f093a 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,554 +1,23 @@
-//
-// 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,
-};
-COMPILER_STRIP_GATE(0x80B8C458, &daNpc_zrA_Param_c::m);
+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,
+};
/* 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 */
-#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) {
+#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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_Path_c::chkPassDst(u16 param_0, cXyz param_1) {
+#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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm daNpc_zrA_c::~daNpc_zrA_c() {
+#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() {
+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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::create() {
+#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(&current.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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::CreateHeap() {
+#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<J3DModelData*>(
+ 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<J3DModelData*>(
+ 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<J3DModelData*>(
+ 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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::Draw() {
+#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, &current.pos, &tevStr);
+ } else {
+ g_env_light.settingTevStruct(0, &current.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, &current.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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ctrlJoint(J3DJoint* param_0, J3DModel* param_1) {
+#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 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<daNpc_zrA_c*>(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(&center);
+ 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<J3DAnmColor*>(
+ 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::getTypeFromArgument() {
+#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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::doEvent() {
+#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 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, &current.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<daNpc_zrA_c*>(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<daNpc_zrA_c*>(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<daNpc_zrA_c*>(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<daNpc_zrA_c*>(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(&current.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(&current.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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::talk(void* param_0) {
+#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 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<daNpc_zrA_c*>(i_this);
+ daNpc_zrA_c* other = static_cast<daNpc_zrA_c*>(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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_talkMulti(int param_0) {
+#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 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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::evasionCalc(cXyz& param_0, csXyz& param_1) {
+#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 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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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(&current.angle.x, i_calc.x, i_scale, i_step);
+ cLib_addCalcAngleS2(&i_calc.y, i_target.y, i_scale, i_step);
+ cLib_addCalcAngleS2(&current.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(&current.angle.x, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed);
+ cLib_chaseAngleS(&current.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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_talkSwim(int param_0) {
+#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(&current.angle.x, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed);
+ cLib_chaseAngleS(&current.angle.z, 0, daNpc_zrA_Param_c::m.mSwimAngleSpeed);
+ cLib_chaseAngleS(&current.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(&current.pos, &water_y)
+ && current.pos.y > water_y - daNpc_zrA_Param_c::m.mMinDepth - 50.0f)
+ {
+ cLib_chaseF(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_carryWaterfall(int param_0) {
+#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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_carryWaterfallSkip(int param_0) {
+#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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::diveCalc(s16 param_0, s16 param_1, int param_2) {
+#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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 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<daNpc_Hoz_c*>(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(&current.pos, &pos);
+ cLib_addCalcAngleS2(&mSwimAngleCalc.y, angle.y, angle_scale, angle_step);
+ cLib_addCalcAngleS2(&current.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(&current.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, &current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_beforeBlastzrR(int param_0) {
+#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(&current.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 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
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_afterBlastzrR(int param_0) {
+#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(&current.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 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
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_thanksBlast(int param_0) {
+#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<daCanoe_c*>(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<daCanoe_c*>(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(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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(&current.pos, &water_y) && pos.y > water_y) {
+ pos.y = water_y;
+ }
+ csXyz angle;
+ angle.x = cLib_targetAngleX(&pos, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_resultAnnounce(int param_0) {
+#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<daCanoe_c*>(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<daCanoe_c*>(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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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(&current.pos, &water_y) && pos.y > water_y) {
+ pos.y = water_y;
+ }
+ csXyz angle;
+ angle.x = cLib_targetAngleX(&pos, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 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 */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::calcCanoeMove(int param_0) {
+#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<daCanoe_c*>(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(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<daObjZraMark_c*>(i_proc);
+ daNpc_zrA_c* _this = static_cast<daNpc_zrA_c*>(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(&current.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(&current.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(&current.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<daNpc_zrA_c*>(i_proc);
+ daNpc_zrA_c* _this = static_cast<daNpc_zrA_c*>(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
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_searchPrince1(int param_0) {
+#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(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 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
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void daNpc_zrA_c::ECut_searchPrince2(int param_0) {
+#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(&current.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, &current.pos);
+ angle.y = cLib_targetAngleY(&current.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 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 b3ad49db9f..eca3a49ba1 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 b7e1869c5c..73e5f82057 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 c839175d2e..d9e5d5c50f 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;
-
- if (param_1 <= tmp2) {
- if (param_3) {
- int tmp3 = tmp2 / param_1;
- tmp2 -= (tmp3 * param_1);
+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 (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;
-
- field_0x00[1] = param_13[1];
- field_0x4c[1].set(-0x4000, 0, 0);
- field_0x64[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;
-
- mDoMtx_stack_c::transS(field_0x00[2]);
- mDoMtx_stack_c::YrotM(param_12);
- mDoMtx_stack_c::multVec(&vec, &field_0x00[3]);
-
- field_0x4c[3].set(0, 0, 0);
- field_0x64[3].set(0, 0, 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;
+
+ mJointPos[1] = i_jointPos[1];
+ mMinAngle[1].set(-0x4000, 0, 0);
+ mMaxAngle[1].set(-0x4000, 0, 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(mJointPos[2]);
+ mDoMtx_stack_c::YrotM(i_rotAngle);
+ mDoMtx_stack_c::multVec(&vec, &mJointPos[3]);
+
+ 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, &param_2[i]);
}
- local_90 = *mAttnPos - actor->current.pos;
+ local_90 = *mAttnPos - i_actor->current.pos;
mDoMtx_stack_c::multVec(&local_90, &param_5);
for (int i = 0; i < 3; i++) {
cXyz* vec = &param_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 = &param_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, &current.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, &current.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<int> 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;
-
- 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);
+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;
- 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*)&param_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 17c5854511..ac4c0084ef 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, &param_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 3576c4c76f..15b42adaf5 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<mDoExt_transAnmBas*>(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
*/