From 81017cf22cd5658982d17fae1b321cad0edd06ff Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Fri, 21 Nov 2025 02:09:21 -0500 Subject: [PATCH] Miscellaneous retail+debug fixes, link several new TUs (#2836) --- config/GZ2E01/rels/d_a_obj_gra2/symbols.txt | 3 + .../GZ2E01/rels/d_a_obj_lv7bridge/symbols.txt | 2 +- .../GZ2J01/rels/d_a_obj_lv7bridge/splits.txt | 1 + .../GZ2J01/rels/d_a_obj_lv7bridge/symbols.txt | 2 +- .../GZ2P01/rels/d_a_obj_lv7bridge/symbols.txt | 2 +- configure.py | 16 +- include/d/actor/d_a_e_ws.h | 18 - include/d/actor/d_a_npc_cd2.h | 168 +- include/d/actor/d_a_npc_cdn3.h | 127 +- include/d/actor/d_a_obj_cblock.h | 5 + include/d/actor/d_a_obj_ss_item.h | 2 + include/d/actor/d_a_tag_schedule.h | 10 +- .../J3DGraphAnimator/J3DSkinDeform.cpp | 43 +- src/d/actor/d_a_b_mgn.cpp | 10 +- src/d/actor/d_a_e_ws.cpp | 18 + src/d/actor/d_a_mant.cpp | 254 +-- src/d/actor/d_a_mg_fshop.cpp | 4 + src/d/actor/d_a_npc_cd2.cpp | 4 +- src/d/actor/d_a_npc_cdn3.cpp | 1430 +++++++++-------- src/d/actor/d_a_obj_cblock.cpp | 207 ++- src/d/actor/d_a_obj_lv7PropellerY.cpp | 6 +- src/d/actor/d_a_obj_lv7bridge.cpp | 38 +- src/d/actor/d_a_obj_ss_item.cpp | 41 + src/m_Do/m_Do_ext.cpp | 25 +- 24 files changed, 1354 insertions(+), 1082 deletions(-) diff --git a/config/GZ2E01/rels/d_a_obj_gra2/symbols.txt b/config/GZ2E01/rels/d_a_obj_gra2/symbols.txt index f1b684a6ac..f07a434312 100644 --- a/config/GZ2E01/rels/d_a_obj_gra2/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_gra2/symbols.txt @@ -469,6 +469,7 @@ l_centerOfst = .bss:0x00000054; // type:object size:0xC scope:global @4027 = .bss:0x00000060; // type:object size:0xC scope:local l_HIO = .bss:0x0000006C; // type:object size:0x4 scope:global @5037 = .bss:0x00000070; // type:object size:0xC scope:local +init$5038 = .bss:0x0000007C; // type:object size:0x1 scope:local @5040 = .bss:0x00000080; // type:object size:0xC scope:local @5041 = .bss:0x0000008C; // type:object size:0xC scope:local @5042 = .bss:0x00000098; // type:object size:0xC scope:local @@ -485,8 +486,10 @@ l_HIO = .bss:0x0000006C; // type:object size:0x4 scope:global @5053 = .bss:0x0000011C; // type:object size:0xC scope:local aTrembleTrans$5036 = .bss:0x00000128; // type:object size:0xB4 scope:local @5298 = .bss:0x000001DC; // type:object size:0xC scope:local +init$5299 = .bss:0x000001E8; // type:object size:0x1 scope:local aOfst$5297 = .bss:0x000001EC; // type:object size:0xC scope:local @5404 = .bss:0x000001F8; // type:object size:0xC scope:local +init$5405 = .bss:0x00000204; // type:object size:0x1 scope:local aEyeOfst$5403 = .bss:0x00000208; // type:object size:0xC scope:local @5648 = .bss:0x00000214; // type:object size:0xC scope:local @5651 = .bss:0x00000224; // type:object size:0xC scope:local diff --git a/config/GZ2E01/rels/d_a_obj_lv7bridge/symbols.txt b/config/GZ2E01/rels/d_a_obj_lv7bridge/symbols.txt index e1cc3749ed..56e9f70756 100644 --- a/config/GZ2E01/rels/d_a_obj_lv7bridge/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_lv7bridge/symbols.txt @@ -76,4 +76,4 @@ __vt__8cM3dGCyl = .data:0x0000011C; // type:object size:0xC scope:global __vt__12dBgS_ObjAcch = .data:0x00000128; // type:object size:0x24 scope:global __vt__12J3DFrameCtrl = .data:0x0000014C; // type:object size:0xC scope:global __vt__13daObjLv7Brg_c = .data:0x00000158; // type:object size:0x28 scope:global -lbl_559_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +init$3943 = .bss:0x00000000; // type:object size:0x1 data:byte diff --git a/config/GZ2J01/rels/d_a_obj_lv7bridge/splits.txt b/config/GZ2J01/rels/d_a_obj_lv7bridge/splits.txt index fbeb8e51d7..6cc0766a27 100644 --- a/config/GZ2J01/rels/d_a_obj_lv7bridge/splits.txt +++ b/config/GZ2J01/rels/d_a_obj_lv7bridge/splits.txt @@ -13,3 +13,4 @@ d/actor/d_a_obj_lv7bridge.cpp: .text start:0x00000078 end:0x00001698 .rodata start:0x00000000 end:0x00000094 .data start:0x00000000 end:0x00000180 + .bss start:0x00000000 end:0x00000004 diff --git a/config/GZ2J01/rels/d_a_obj_lv7bridge/symbols.txt b/config/GZ2J01/rels/d_a_obj_lv7bridge/symbols.txt index 0541634754..88be6bba83 100644 --- a/config/GZ2J01/rels/d_a_obj_lv7bridge/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_lv7bridge/symbols.txt @@ -75,4 +75,4 @@ __vt__8cM3dGCyl = .data:0x0000011C; // type:object size:0xC scope:global __vt__12dBgS_ObjAcch = .data:0x00000128; // type:object size:0x24 scope:global __vt__12J3DFrameCtrl = .data:0x0000014C; // type:object size:0xC scope:global __vt__13daObjLv7Brg_c = .data:0x00000158; // type:object size:0x28 scope:global -lbl_559_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +init$3943 = .bss:0x00000000; // type:object size:0x1 data:byte diff --git a/config/GZ2P01/rels/d_a_obj_lv7bridge/symbols.txt b/config/GZ2P01/rels/d_a_obj_lv7bridge/symbols.txt index 0541634754..88be6bba83 100644 --- a/config/GZ2P01/rels/d_a_obj_lv7bridge/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_lv7bridge/symbols.txt @@ -75,4 +75,4 @@ __vt__8cM3dGCyl = .data:0x0000011C; // type:object size:0xC scope:global __vt__12dBgS_ObjAcch = .data:0x00000128; // type:object size:0x24 scope:global __vt__12J3DFrameCtrl = .data:0x0000014C; // type:object size:0xC scope:global __vt__13daObjLv7Brg_c = .data:0x00000158; // type:object size:0x28 scope:global -lbl_559_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte +init$3943 = .bss:0x00000000; // type:object size:0x1 data:byte diff --git a/configure.py b/configure.py index ccdc6bdb41..5f5f0f5db5 100755 --- a/configure.py +++ b/configure.py @@ -1612,7 +1612,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_demo00"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_disappear"), ActorRel(NonMatching, "d_a_mg_rod"), - ActorRel(MatchingFor("GZ2E01"), "d_a_midna"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_midna"), ActorRel(Equivalent, "d_a_nbomb"), # weak func order ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_life_container"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_yousei"), @@ -1806,7 +1806,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_e_vt"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_e_warpappear"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_e_wb"), - ActorRel(NonMatching, "d_a_e_ws"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_e_ws"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_e_ww"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_e_yc"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_e_yd"), @@ -1838,8 +1838,8 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_kytag13"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_kytag15"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_kytag16"), - ActorRel(NonMatching, "d_a_mant"), - ActorRel(MatchingFor("GZ2E01", "GZ2P01"), "d_a_mg_fshop"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_mant"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_mg_fshop"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_mirror"), ActorRel(NonMatching, "d_a_movie_player", extra_cflags=["-O3,p"]), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_myna"), @@ -1851,7 +1851,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_npc_blue_ns"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_bou"), ActorRel(Equivalent, "d_a_npc_bouS"), # weak func order - ActorRel(NonMatching, "d_a_npc_cdn3"), + ActorRel(Equivalent, "d_a_npc_cdn3"), # weak func order ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_chat"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_chin"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_clerka"), @@ -1922,7 +1922,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_seirei"), ActorRel(Equivalent, "d_a_npc_shad"), # weak func order ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_shaman"), - ActorRel(MatchingFor("GZ2E01"), "d_a_npc_shoe"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_shoe"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_shop0"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_shop_maro"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_npc_sola"), @@ -2119,8 +2119,8 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv6elevta"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv6swturn"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv7BsGate"), - ActorRel(NonMatching, "d_a_obj_lv7PropellerY"), - ActorRel(Equivalent, "d_a_obj_lv7bridge"), # small regalloc + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv7PropellerY"), + ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv7bridge"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv8KekkaiTrap"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv8Lift"), ActorRel(MatchingFor("GZ2E01", "GZ2P01", "GZ2J01"), "d_a_obj_lv8OptiLift"), diff --git a/include/d/actor/d_a_e_ws.h b/include/d/actor/d_a_e_ws.h index f3440c2b5e..0c2c176808 100644 --- a/include/d/actor/d_a_e_ws.h +++ b/include/d/actor/d_a_e_ws.h @@ -77,23 +77,5 @@ public: STATIC_ASSERT(sizeof(daE_WS_c) == 0xb80); -class daE_WS_HIO_c : public JORReflexible { -public: - /* 807E3A0C */ daE_WS_HIO_c(); - /* 807E6E44 */ virtual ~daE_WS_HIO_c() {} - - void genMessage(JORMContext*); - - /* 0x04 */ s8 id; - /* 0x08 */ f32 base_size; - /* 0x0C */ f32 move_range; - /* 0x10 */ f32 search_range; - /* 0x14 */ f32 search_y_range; - /* 0x18 */ f32 dist_to_ground; - /* 0x1C */ f32 search_angle; - /* 0x20 */ f32 attack_speed; - /* 0x24 */ u8 debug_ON; -}; - #endif /* D_A_E_WS_H */ diff --git a/include/d/actor/d_a_npc_cd2.h b/include/d/actor/d_a_npc_cd2.h index f2d9253b84..1b7079bedb 100644 --- a/include/d/actor/d_a_npc_cd2.h +++ b/include/d/actor/d_a_npc_cd2.h @@ -35,18 +35,18 @@ struct daNpcCd2_HIO_MChild_c { /* 8015A808 */ daNpcCd2_HIO_MChild_c() {} /* 0x004 */ daNpcCd2_HIO_Jnt_c field_0x004[19]; - /* 0x1CE */ s16 mMaxLmtY_BACKBONE; - /* 0x1CA */ s16 mMaxLmtX_BACKBONE; - /* 0x1CC */ s16 mMinLmtY_BACKBONE; - /* 0x1CE */ s16 mMinLmtX_BACKBONE; - /* 0x1D0 */ s16 mMaxLmtY_NECK; - /* 0x1D2 */ s16 mMaxLmtX_NECK; - /* 0x1D4 */ s16 mMinLmtY_NECK; - /* 0x1D6 */ s16 mMinLmtX_NECK; - /* 0x1D0 */ s16 mMaxLmtY_HEAD; - /* 0x1D2 */ s16 mMaxLmtX_HEAD; - /* 0x1D4 */ s16 mMinLmtY_HEAD; - /* 0x1D6 */ s16 mMinLmtX_HEAD; + /* 0x1CE */ s16 mMaxLmtX_BACKBONE; + /* 0x1CA */ s16 mMaxLmtY_BACKBONE; + /* 0x1CC */ s16 mMinLmtX_BACKBONE; + /* 0x1CE */ s16 mMinLmtY_BACKBONE; + /* 0x1D0 */ s16 mMaxLmtX_NECK; + /* 0x1D2 */ s16 mMaxLmtY_NECK; + /* 0x1D4 */ s16 mMinLmtX_NECK; + /* 0x1D6 */ s16 mMinLmtY_NECK; + /* 0x1D0 */ s16 mMaxLmtX_HEAD; + /* 0x1D2 */ s16 mMaxLmtY_HEAD; + /* 0x1D4 */ s16 mMinLmtX_HEAD; + /* 0x1D6 */ s16 mMinLmtY_HEAD; /* 0x1E0 */ f32 mScale; /* 0x1E4 */ s16 mAttn; /* 0x1E8 */ f32 mAnmPlaySpeed; @@ -64,18 +64,18 @@ struct daNpcCd2_HIO_WChild_c { /* 8015A730 */ daNpcCd2_HIO_WChild_c() {} /* 0x004 */ daNpcCd2_HIO_Jnt_c field_0x004[21]; - /* 0x1FE */ s16 mMaxLmtY_BACKBONE; - /* 0x1FA */ s16 mMaxLmtX_BACKBONE; - /* 0x1FC */ s16 mMinLmtY_BACKBONE; - /* 0x1FE */ s16 mMinLmtX_BACKBONE; - /* 0x200 */ s16 mMaxLmtY_NECK; - /* 0x202 */ s16 mMaxLmtX_NECK; - /* 0x204 */ s16 mMinLmtY_NECK; - /* 0x206 */ s16 mMinLmtX_NECK; - /* 0x200 */ s16 mMaxLmtY_HEAD; - /* 0x202 */ s16 mMaxLmtX_HEAD; - /* 0x204 */ s16 mMinLmtY_HEAD; - /* 0x206 */ s16 mMinLmtX_HEAD; + /* 0x1FE */ s16 mMaxLmtX_BACKBONE; + /* 0x1FA */ s16 mMaxLmtY_BACKBONE; + /* 0x1FC */ s16 mMinLmtX_BACKBONE; + /* 0x1FE */ s16 mMinLmtY_BACKBONE; + /* 0x200 */ s16 mMaxLmtX_NECK; + /* 0x202 */ s16 mMaxLmtY_NECK; + /* 0x204 */ s16 mMinLmtX_NECK; + /* 0x206 */ s16 mMinLmtY_NECK; + /* 0x200 */ s16 mMaxLmtX_HEAD; + /* 0x202 */ s16 mMaxLmtY_HEAD; + /* 0x204 */ s16 mMinLmtX_HEAD; + /* 0x206 */ s16 mMinLmtY_HEAD; /* 0x218 */ f32 mScale; /* 0x21C */ s16 mAttn; /* 0x220 */ f32 mAnmPlaySpeed; @@ -148,123 +148,75 @@ inline f32 Cd2_HIO_cylH(int param_1) { } inline s16 Cd2_HIO_maxLmtX_BACKBONE(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMaxLmtX_BACKBONE; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtX_BACKBONE; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMaxLmtX_BACKBONE : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtX_BACKBONE); } inline s16 Cd2_HIO_maxLmtY_BACKBONE(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMaxLmtY_BACKBONE; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtY_BACKBONE; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMaxLmtY_BACKBONE : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtY_BACKBONE); } inline s16 Cd2_HIO_maxLmtX_NECK(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMaxLmtX_NECK; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtX_NECK; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMaxLmtX_NECK : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtX_NECK); } inline s16 Cd2_HIO_maxLmtY_NECK(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMaxLmtY_NECK; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtY_NECK; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMaxLmtY_NECK : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtY_NECK); } inline s16 Cd2_HIO_maxLmtX_HEAD(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMaxLmtX_HEAD; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtX_HEAD; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMaxLmtX_HEAD : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtX_HEAD); } inline s16 Cd2_HIO_maxLmtY_HEAD(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMaxLmtY_HEAD; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtY_HEAD; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMaxLmtY_HEAD : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMaxLmtY_HEAD); } inline s16 Cd2_HIO_minLmtX_BACKBONE(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMinLmtX_BACKBONE; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtX_BACKBONE; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMinLmtX_BACKBONE : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtX_BACKBONE); } inline s16 Cd2_HIO_minLmtY_BACKBONE(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMinLmtY_BACKBONE; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtY_BACKBONE; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMinLmtY_BACKBONE : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtY_BACKBONE); } inline s16 Cd2_HIO_minLmtX_NECK(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMinLmtX_NECK; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtX_NECK; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMinLmtX_NECK : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtX_NECK); } inline s16 Cd2_HIO_minLmtY_NECK(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMinLmtY_NECK; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtY_NECK; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMinLmtY_NECK : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtY_NECK); } inline s16 Cd2_HIO_minLmtX_HEAD(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMinLmtX_HEAD; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtX_HEAD; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMinLmtX_HEAD : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtX_HEAD); } inline s16 Cd2_HIO_minLmtY_HEAD(int param_1) { - s16 rv; - if (param_1 < 16) { - rv = l_Cd2_HIO.field_0x0004[param_1].mMinLmtY_HEAD; - } else { - rv = l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtY_HEAD; - } - return rv; + return (s16)(param_1 < 16 ? + l_Cd2_HIO.field_0x0004[param_1].mMinLmtY_HEAD : + l_Cd2_HIO.field_0x20c4[param_1 - 16].mMinLmtY_HEAD); } class PathTrace_c { diff --git a/include/d/actor/d_a_npc_cdn3.h b/include/d/actor/d_a_npc_cdn3.h index 283baa8efe..994b4fb0f8 100644 --- a/include/d/actor/d_a_npc_cdn3.h +++ b/include/d/actor/d_a_npc_cdn3.h @@ -93,6 +93,7 @@ public: /* 8097C844 */ int sing(void*); /* 8097C910 */ int create(); /* 8097CC58 */ void create_init(); + inline int createHeap(); /* 8097D078 */ void setMtx(); /* 8097D120 */ void lookat(); /* 8097D684 */ virtual ~daNpcCdn3_c(); @@ -102,17 +103,23 @@ public: inline int draw(); int getTimeHour() { + int hour; if (mIsDarkWorld) { - return dKy_getDarktime_hour(); - } - return dKy_getdaytime_hour(); + hour = dKy_getDarktime_hour(); + } else { + hour = dKy_getdaytime_hour(); + } + return hour; } int getTimeMinute() { + int minute; if (mIsDarkWorld) { - return dKy_getDarktime_minute(); - } - return dKy_getdaytime_minute(); + minute = dKy_getDarktime_minute(); + } else { + minute = dKy_getdaytime_minute(); + } + return minute; } int getTime() { @@ -120,20 +127,23 @@ public: } int getDayOfWeek() { + int day; if (mIsDarkWorld) { - return dKy_getDarktime_week(); + day = dKy_getDarktime_week(); } else { - return dKy_get_dayofweek(); + day = dKy_get_dayofweek(); } + return day; } - void setSpeed(f32* param_1, f32 param_2, f32 param_3, int param_4) { - f32 target = field_0xb5c * (param_3 * field_0xb5c); - f32 step = field_0xb5c * (param_2 * field_0xb5c); - if (param_3 < target) { - target = param_3; + void setSpeed(f32 param_0, f32 param_1, f32* param_2, int param_3) { + (void)param_3; + f32 target = field_0xb5c * (param_1 * field_0xb5c); + f32 step = field_0xb5c * (param_0 * field_0xb5c); + if (param_1 < target) { + target = param_1; } - cLib_chaseF(param_1, target, step); + cLib_chaseF(param_2, target, step); } int getGroupID() { return fopAcM_GetParam(this) & 0xff; } @@ -142,15 +152,17 @@ public: int getType() { return argument & 0x7f; } int getSeqNum() { return shape_angle.x & 0x3f; } int getFlowNodeNum() { return shape_angle.z; } - u16 getStartTime() { return (fopAcM_GetParam(this) >> 8) & 0xff; } - u16 getEndTime() { return (fopAcM_GetParam(this) >> 16) & 0xff; } + u8 getStartTime() { return (fopAcM_GetParam(this) >> 8) & 0xff; } + u8 getEndTime() { return (fopAcM_GetParam(this) >> 16) & 0xff; } void initParamTime() { - u16 startTime = getStartTime(); - u16 endTime = getEndTime(); + u16 x; + u16 y; + u8 startTime = getStartTime(); + u8 endTime = getEndTime(); if (startTime != 0xff && endTime != 0xff) { - u16 x = startTime / 10; - u16 y = (startTime % 10) * 10; + x = startTime / 10; + y = (startTime % 10) * 10; field_0xb8c = y + x * 60; x = endTime / 10; y = (endTime % 10) * 10; @@ -179,78 +191,77 @@ public: } int getObjNum() { - u8 uVar3 = (shape_angle.x >> 6) & 0xf; - int rv; + int uVar3 = (shape_angle.x >> 6) & 0xf; if (isM_()) { switch (uVar3) { case 0: - rv = 0; + uVar3 = 0; break; case 1: - rv = 1; + uVar3 = 1; break; case 2: - rv = 2; + uVar3 = 2; break; case 3: - rv = 4; + uVar3 = 4; break; case 4: - rv = 6; + uVar3 = 6; break; case 5: - rv = 0; + uVar3 = 0; break; case 6: - rv = 0; + uVar3 = 0; break; case 7: - rv = 9; + uVar3 = 9; break; default: - rv = 0; + uVar3 = 0; break; } /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[281]) && rv == 9) { - rv = 0xb; + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[281]) && uVar3 == 9) { + uVar3 = 0xb; } } else { switch (uVar3) { case 0: - rv = 0; + uVar3 = 0; break; case 1: - rv = 8; + uVar3 = 8; break; case 2: - rv = 3; + uVar3 = 3; break; case 3: - rv = 5; + uVar3 = 5; break; case 4: - rv = 7; + uVar3 = 7; break; case 5: - rv = 0; + uVar3 = 0; break; case 6: - rv = 0; + uVar3 = 0; break; case 7: - rv = 10; + uVar3 = 10; break; default: - rv = 0; + uVar3 = 0; break; } /* dSv_event_flag_c::F_0281 - Shop - Malo Mart opens in Castle Town */ - if (dComIfGs_isEventBit(dSv_event_flag_c::saveBitLabels[281]) && rv == 10) { - rv = 12; + if (dComIfGs_isEventBit((u16)dSv_event_flag_c::saveBitLabels[281]) && uVar3 == 10) { + uVar3 = 12; } } - return rv; + return uVar3; } void initCollision() { @@ -277,11 +288,11 @@ public: if (strcmp(dComIfGp_getStartStageName(), "F_SP116") != 0) { return 0; } else { - if (mSeqNum == 17 && + if (m_seqNum == 17 && (getType() == 4 || getType() == 5 || getType() == 6 || getType() == 16)) { return 1; - } else if (mSeqNum == 37 && getType() == 7) { + } else if (m_seqNum == 37 && getType() == 7) { return 1; } else { return 0; @@ -314,7 +325,14 @@ public: } int orderEvent() { - if ((!mIsDarkWorld || daPy_py_c::checkNowWolfEyeUp()) && mFlowNodeNum > 0 && ((attention_info.flags & fopAc_AttnFlag_SPEAK_e) || (attention_info.flags & fopAc_AttnFlag_TALK_e))) { +#if PLATFORM_SHIELD + if (mFlowNodeNum > 0) { +#else + if ((!mIsDarkWorld || daPy_py_c::checkNowWolfEyeUp()) && + mFlowNodeNum > 0 && + ((attention_info.flags & fopAc_AttnFlag_SPEAK_e) || + (attention_info.flags & fopAc_AttnFlag_TALK_e))) { +#endif eventInfo.onCondition(dEvtCnd_CANTALK_e); } return 1; @@ -323,7 +341,12 @@ public: inline bool searchFirstScheduleTag(); inline bool searchNextScheduleTag(); - static actionFunc ActionTable[8][2]; + struct ActionPair { + actionFunc mInitFn; + actionFunc mExecFn; + }; + + static const ActionPair ActionTable[8]; static seqFunc* m_funcTbl[44]; static seqFunc m_seq00_funcTbl[2]; static seqFunc m_seq01_funcTbl[2]; @@ -375,7 +398,7 @@ public: /* 0xAD0 */ PathTrace_c m_path; /* 0xAE8 */ daNpcT_ActorMngr_c m_targetAct; /* 0xB00 */ dMsgFlow_c mMsgFlow; - /* 0xB4C */ daNpcCdn3_c::actionFunc* mAction; + /* 0xB4C */ const actionFunc* mAction; /* 0xB50 */ Mode_e mMode; /* 0xB54 */ Mode_e mPrevMode; /* 0xB58 */ int mObjNum; @@ -386,7 +409,7 @@ public: /* 0xB6C */ int mMsgIndex; /* 0xB70 */ int mFlowNodeNum; /* 0xB74 */ int field_0xb74; - /* 0xB78 */ int mSeqNum; + /* 0xB78 */ int m_seqNum; /* 0xB7C */ int field_0xb7c; /* 0xB80 */ J3DAnmTransform* field_0xb80; /* 0xB84 */ daTagSchedule_c* mTagSched; @@ -398,7 +421,7 @@ public: /* 0xB94 */ u8 field_0xb94; /* 0xB95 */ u8 field_0xb95; /* 0xB96 */ u8 field_0xb96; - /* 0xB97 */ u8 field_0xb97; + /* 0xB97 */ u8 m_seqStep; /* 0xB98 */ u8 field_0xb98; /* 0xB99 */ u8 field_0xb99; }; diff --git a/include/d/actor/d_a_obj_cblock.h b/include/d/actor/d_a_obj_cblock.h index 173b2df3a7..8ae4eecd83 100644 --- a/include/d/actor/d_a_obj_cblock.h +++ b/include/d/actor/d_a_obj_cblock.h @@ -34,6 +34,7 @@ public: /* 80BC5CF8 */ int CreateHeap(); /* 80BC5E98 */ int create(); /* 80BC6260 */ int Execute(Mtx**); + void block_mode_proc_call(); /* 80BC6270 */ void initWait(); /* 80BC627C */ void modeWait(); /* 80BC6414 */ void initWalk(); @@ -70,6 +71,10 @@ private: /* 0xCA3 */ u8 field_0xca3; /* 0xCA4 */ s16 walkTimer; /* 0xCA6 */ s16 field_0xca6; +#if DEBUG + /* 0xCB0 */ cXyz field_0xcb0_debug[2]; + /* 0xCC8 */ cXyz field_0xcc8_debug[2]; +#endif }; STATIC_ASSERT(sizeof(daObjCBlk_c) == 0xca8); diff --git a/include/d/actor/d_a_obj_ss_item.h b/include/d/actor/d_a_obj_ss_item.h index 3e3732f882..55dfad2a59 100644 --- a/include/d/actor/d_a_obj_ss_item.h +++ b/include/d/actor/d_a_obj_ss_item.h @@ -43,6 +43,8 @@ public: /* 80CE7CC4 */ void setMtx(); /* 80CE7D28 */ void setAttnPos(); /* 80CE7D5C */ int wait(void* param_0); + int buy(void* param_0); + int cancel(void* param_0); static dCcD_SrcGObjInf const mCcDObjInfo; static dCcD_SrcCyl mCcDCyl; diff --git a/include/d/actor/d_a_tag_schedule.h b/include/d/actor/d_a_tag_schedule.h index 67fd484167..99ff6c0a59 100644 --- a/include/d/actor/d_a_tag_schedule.h +++ b/include/d/actor/d_a_tag_schedule.h @@ -11,13 +11,17 @@ public: } int getSeqNum() { return (fopAcM_GetParam(this) >> 6) & 0x3f; } - u16 getStartTime() { return (fopAcM_GetParam(this) >> 12) & 0xff; } + u8 getStartTime() { return (fopAcM_GetParam(this) >> 12) & 0xff; } u8 getStartEnd() { return (fopAcM_GetParam(this) >> 20) & 0xff; } int getGroupID() { return fopAcM_GetParam(this) & 0x3f; } int getWeekNum() { return mWeekNum; } - void setWeekNum(int weekNum) { mWeekNum = weekNum; } +#if PLATFORM_SHIELD + void setWeekNum(u32 weekNum) { mWeekNum = weekNum % 7; } +#else + void setWeekNum(int weekNum) { mWeekNum = weekNum % (u32)7; } +#endif u8 getPathID() { return shape_angle.x & 0xff; } - s16 getFlowNodeNum() { return shape_angle.z; } + int getFlowNodeNum() { return shape_angle.z; } /* 0x568 */ int mWeekNum; }; diff --git a/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp b/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp index dfd97c6606..e1f06d3baa 100644 --- a/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DSkinDeform.cpp @@ -293,19 +293,38 @@ int J3DSkinDeform::initMtxIndexArray(J3DModelData* pModelData) { int uVar13; for (; (int)pDListPos - (int)pDList < pModelData->getShapeNodePointer(i)->getShapeDraw(j)->getDisplayListSize(); - pDListPos += r23 * uVar13) + pDListPos += r23 * uVar13 + //TODO: This loop's logic has drastically different codegen between GCN and Shield + // in a way that so far can't be pinned down as just compiler differences. This + // may have been refactored in the J3D version used for Shield, but note that + // it's very possible that this is a fakematch and there's some other way of + // expressing it that matches for both versions. +#if PLATFORM_GCN + , pDListPos += 3 +#endif + ) { u8 command = *pDListPos; +#if !PLATFORM_GCN pDListPos++; +#endif if (command != GX_TRIANGLEFAN && command != GX_TRIANGLESTRIP) { break; } - + +#if PLATFORM_GCN + uVar13 = *(u16*)(pDListPos + 1); +#else uVar13 = *(u16*)pDListPos; pDListPos += 2; +#endif for (int local_60 = 0; local_60 < uVar13; local_60++) { - u8* iVar5 = pDListPos + r23 * local_60; - u8 bVar3 = *(iVar5 + pnmtx_num) / 3U; +#if PLATFORM_GCN + u8* iVar5 = ((u8*)(pDListPos + 3) + r23 * local_60); +#else + u8* iVar5 = ((u8*)pDListPos + r23 * local_60); +#endif + u8 bVar3 = *(u8*)(iVar5 + pnmtx_num) / 3U; u16 vtx_idx = *(u16*)(iVar5 + vtx_num); u16 nrm_idx = *(u16*)(iVar5 + nrm_num); u16 uVar3 = *(u16*)(iVar5 + tex_num); @@ -563,8 +582,8 @@ void J3DSkinDeform::deformVtxPos_F32(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer* J3DJointTree* jointTree = pMtxBuffer->getJointTree(); int vtxNum = pVtxBuffer->getVertexData()->getVtxNum(); int sp8 = jointTree->getDrawMtxNum(); - void* currentVtxPos = pVtxBuffer->getCurrentVtxPos(); - void* transformedVtxPos = pVtxBuffer->getTransformedVtxPos(0); + void* currentVtxPos = (void*)pVtxBuffer->getCurrentVtxPos(); + void* transformedVtxPos = (void*)pVtxBuffer->getTransformedVtxPos(0); for (int i = 0; i < vtxNum; i++) { anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])]; @@ -590,8 +609,8 @@ void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer* J3DJointTree* jointTree = pMtxBuffer->getJointTree(); int vtxNum = pVtxBuffer->getVertexData()->getVtxNum(); int sp8 = jointTree->getDrawMtxNum(); - void* currentVtxPos = pVtxBuffer->getCurrentVtxPos(); - void* transformedVtxPos = pVtxBuffer->getTransformedVtxPos(0); + void* currentVtxPos = (void*)pVtxBuffer->getCurrentVtxPos(); + void* transformedVtxPos = (void*)pVtxBuffer->getTransformedVtxPos(0); for (int i = 0; i < vtxNum; i++) { anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])]; @@ -608,8 +627,8 @@ void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer* void J3DSkinDeform::deformVtxNrm_F32(J3DVertexBuffer* pVtxBuffer) const { pVtxBuffer->swapTransformedVtxNrm(); int nrmNum = pVtxBuffer->getVertexData()->getNrmNum(); - void* currentVtxNrm = pVtxBuffer->getCurrentVtxNrm(); - void* transformedVtxNrm = pVtxBuffer->getTransformedVtxNrm(0); + void* currentVtxNrm = (void*)pVtxBuffer->getCurrentVtxNrm(); + void* transformedVtxNrm = (void*)pVtxBuffer->getTransformedVtxNrm(0); for (int i = 0; i < nrmNum; i++) { J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], (Vec*)((u8*)currentVtxNrm + i * 3 * 4), (Vec*)((u8*)transformedVtxNrm + i * 3 * 4)); @@ -628,8 +647,8 @@ void J3DSkinDeform::deformVtxNrm_S16(J3DVertexBuffer* pVtxBuffer) const { pVtxBuffer->swapTransformedVtxNrm(); int nrmNum = pVtxBuffer->getVertexData()->getNrmNum(); - void* currentVtxNrm = pVtxBuffer->getCurrentVtxNrm(); - void* transformedVtxNrm = pVtxBuffer->getTransformedVtxNrm(0); + void* currentVtxNrm = (void*)pVtxBuffer->getCurrentVtxNrm(); + void* transformedVtxNrm = (void*)pVtxBuffer->getTransformedVtxNrm(0); for (int i = 0; i < nrmNum; i++) { J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], (S16Vec*)(((s16*)currentVtxNrm) + (i * 3)), (S16Vec*)(((s16*)transformedVtxNrm) + (i * 3))); diff --git a/src/d/actor/d_a_b_mgn.cpp b/src/d/actor/d_a_b_mgn.cpp index c55bebb951..4f0590e375 100644 --- a/src/d/actor/d_a_b_mgn.cpp +++ b/src/d/actor/d_a_b_mgn.cpp @@ -1327,15 +1327,15 @@ void daB_MGN_c::executeCircle() { } /* 80608EF8-80609D70 0038B8 0E78+00 2/1 0/0 0/0 .text executeDash__9daB_MGN_cFv */ -// NONMATCHING - small regalloc, equivalent +// NONMATCHING - regalloc + extra mr, equivalent void daB_MGN_c::executeDash() { - daPy_py_c* player = daPy_getPlayerActorClass(); + daPy_py_c* player_sp14 = daPy_getPlayerActorClass(); switch (mMoveMode) { case 10: case 11: { cXyz gate_offset(0.0f, 0.0f, -800.0f); - cXyz player_pos(player->current.pos); + cXyz player_pos(player_sp14->current.pos); s16 angle = cLib_targetAngleY(&player_pos, &gate_offset); if (field_0xaff >= 5) { @@ -1449,7 +1449,7 @@ void daB_MGN_c::executeDash() { mJewelColorMode = 2; case 1: attention_info.flags = 0; - if (player->checkNowWolf()) { + if (player_sp14->checkNowWolf()) { attention_info.flags = fopAc_AttnFlag_BATTLE_e; } @@ -1499,7 +1499,7 @@ void daB_MGN_c::executeDash() { field_0xb09 = 1; attention_info.flags = 0; - if (player->checkNowWolf()) { + if (player_sp14->checkNowWolf()) { attention_info.flags |= fopAc_AttnFlag_BATTLE_e; cXyz sp48; diff --git a/src/d/actor/d_a_e_ws.cpp b/src/d/actor/d_a_e_ws.cpp index 9a4d163bf5..e10320ab41 100644 --- a/src/d/actor/d_a_e_ws.cpp +++ b/src/d/actor/d_a_e_ws.cpp @@ -10,6 +10,24 @@ #include #include "f_op/f_op_actor_enemy.h" +class daE_WS_HIO_c : public JORReflexible { +public: + /* 807E3A0C */ daE_WS_HIO_c(); + /* 807E6E44 */ virtual ~daE_WS_HIO_c() {} + + void genMessage(JORMContext*); + + /* 0x04 */ s8 id; + /* 0x08 */ f32 base_size; + /* 0x0C */ f32 move_range; + /* 0x10 */ f32 search_range; + /* 0x14 */ f32 search_y_range; + /* 0x18 */ f32 dist_to_ground; + /* 0x1C */ f32 search_angle; + /* 0x20 */ f32 attack_speed; + /* 0x24 */ u8 debug_ON; +}; + namespace { /* 807E7448-807E7488 000038 0040+00 1/1 0/0 0/0 .data cc_ws_src__22@unnamed@d_a_e_ws_cpp@ */ diff --git a/src/d/actor/d_a_mant.cpp b/src/d/actor/d_a_mant.cpp index 635133181b..97203523ef 100644 --- a/src/d/actor/d_a_mant.cpp +++ b/src/d/actor/d_a_mant.cpp @@ -19,6 +19,7 @@ /* 8086AD40-8086ADA0 008020 0060+00 1/0 0/0 0/0 .data l_Egnd_mantPAL */ #include "assets/l_Egnd_mantPAL.h" +#include "d/d_s_play.h" /* 8086ADA0-8086B58C 008080 07EC+00 0/0 0/0 0/0 .data l_pos */ static u32 l_pos[507] = { @@ -263,7 +264,6 @@ static void* tex_d[2] = { static char lbl_277_bss_0; /* 80861298-808616B8 000078 0420+00 1/0 0/0 0/0 .text draw__15daMant_packet_cFv */ -// NONMATCHING - missing some weird stack duplication void daMant_packet_c::draw() { void* image = tex_d[0]; void* lut = pal_d; @@ -298,10 +298,8 @@ void daMant_packet_c::draw() { dKy_Global_amb_set(this->mTevStr); GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); - GXColor local_84 = {1, 0, 0, 0}; - GXSetTevColor(GX_TEVREG0, local_84); - GXColor local_8c = {1, 0, 0, 0}; - GXSetTevKColor(GX_KCOLOR0, local_8c); + GXSetTevColor(GX_TEVREG0, (GXColor){1, 0, 0, 0}); + GXSetTevKColor(GX_KCOLOR0, (GXColor){1, 0, 0, 0}); GXSetTevKColorSel(GX_TEVSTAGE0, GX_TEV_KCSEL_K0); GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_KONST, GX_CC_TEXC, GX_CC_RASC, GX_CC_C0); @@ -334,10 +332,8 @@ void daMant_packet_c::draw() { GXInitTexObjLOD(&GStack_74, GX_LINEAR, GX_LINEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1); GXLoadTexObj(&GStack_74, GX_TEXMAP0); - GXColor local_94 = {0, 0, 0, 0}; - GXSetTevColor(GX_TEVREG0, local_94); - GXColor local_9c = {0, 0, 0, 0}; - GXSetTevKColor(GX_KCOLOR0, local_9c); + GXSetTevColor(GX_TEVREG0, (GXColor){0, 0, 0, 0}); + GXSetTevKColor(GX_KCOLOR0, (GXColor){0, 0, 0, 0}); GXSetCullMode(GX_CULL_FRONT); GXLoadPosMtxImm(this->mMtx2, GX_PNMTX0); @@ -368,154 +364,192 @@ static int daMant_Draw(mant_class* i_this) { } /* 8086176C-80861F60 00054C 07F4+00 1/1 0/0 0/0 .text joint_control__FP10mant_classP8mant_j_siff */ -// NONMATCHING - regalloc static void joint_control(mant_class* i_this, mant_j_s* param_2, int param_3, f32 param_4, f32 param_5) { static f32 d_p[12] = { 1.4000001f, 0.6f, 0.35f, 0.3f, 0.3f, 0.3f, 0.25f, 0.2f, 0.2f, 0.2f, 0.15f, 0.1f }; - cXyz local_134, local_140, local_14c, local_158, local_164; - BOOL bVar2 = FALSE; - f32 dVar14, dVar16, dVar17, dVar18, dVar19, dVar20; - f32 fVar1; - b_gnd_class* gndActor = (b_gnd_class*)fopAcM_SearchByID(i_this->parentActorID); + mant_class* mant_sp38 = i_this; + + cXyz spFC; + cXyz spF0; + cXyz spE4; + + int sp34; + f32 sp30; + f32 sp2C; + f32 sp28; + cXyz* var_r30; + cXyz* sp24; + BOOL sp20 = FALSE; + + cXyz spD8; + Vec spCC; + + b_gnd_class* gndActor = (b_gnd_class*)fopAcM_SearchByID(mant_sp38->parentActorID); + + f32 var_f31; + f32 var_f30; + f32 var_f29; + f32 var_f28; + f32 var_f27; + f32 var_f26; + + f32 sp18; + f32 sp14; if (gndActor->mDrawHorse != 0) { - bVar2 = TRUE; - local_158 = gndActor->field_0x1fb8; + sp20 = TRUE; + spD8 = gndActor->field_0x1fb8; } else if (i_this->field_0x3966 != 0) { - local_158 = i_this->field_0x3928[0] + ((i_this->field_0x3928[1] - i_this->field_0x3928[0]) * 0.5f); - local_158.y += -60.0f; + spD8 = i_this->field_0x3928[0] + ((i_this->field_0x3928[1] - i_this->field_0x3928[0]) * 0.5f); + spD8.y += -60.0f + KREG_F(11); } - cXyz* vec_p = param_2->field_0x0; - cXyz* pcVar9 = param_2->field_0x9c; - dBgS_GndChk(dStack_f8); - local_164 = param_2->field_0x0[0]; - local_164.y += 50.0f; + var_r30 = param_2->field_0x0; + sp24 = param_2->field_0x9c; + dBgS_GndChk(sp108); + spCC = param_2->field_0x0[0]; + spCC.y += 50.0f; - dStack_f8.SetPos((Vec*)&local_164); - dVar17 = dComIfG_Bgsp().GroundCross(&dStack_f8) + 3.0f; + sp108.SetPos(&spCC); + var_f27 = dComIfG_Bgsp().GroundCross(&sp108) + 3.0f; - if (dVar17 - param_2->field_0x0[0].y > 50.0f) { - dVar17 = param_2->field_0x0[0].y; + if (var_f27 - var_r30[0].y > 50.0f) { + var_f27 = var_r30[0].y; } - cXyz cStack_170, local_17c; - cXyz local_188(0.0f, 0.0f, 0.0f); - cXyz local_194(0.0f, 0.0f, 0.0f); - cXyz local_1a0(0.0f, 0.0f, 0.0f); + cXyz spC0; + cXyz spB4; + cXyz spA8(0.0f, 0.0f, 0.0f); + cXyz sp9C(0.0f, 0.0f, 0.0f); + cXyz sp90(0.0f, 0.0f, 0.0f); cMtx_YrotS(*calc_mtx, param_2->field_0x013a); - local_134.x = 0.0f; - local_134.y = 0.0f; - local_134.z = i_this->field_0x3954 * (cM_ssin(param_3 * 23000) * 0.05f + 1.0f); - MtxPosition(&local_134, &cStack_170); + spFC.x = 0.0f; + spFC.y = 0.0f; + spFC.z = i_this->field_0x3954 * (cM_ssin(param_3 * 23000) * 0.05f + 1.0f); + MtxPosition(&spFC, &spC0); - cXyz local_1ac; + cXyz sp84; - s16 sVar3 = param_3 + -6; - if (sVar3 < 0) { - sVar3 *= -1; + s16 sp0C; + s16 sp0A; + + s16 sp08 = param_3 + -6; + if (sp08 < 0) { + sp08 *= -1; } - sVar3 *= -4000; - local_134.x = 0.0f; - local_134.y = 0.0f; - local_134.z = i_this->field_0x394c; - local_134.z *= i_this->scale.y; + sp08 *= (s16)(-4000 + VREG_S(5)); + spFC.x = 0.0f; + spFC.y = 0.0f; + spFC.z = i_this->field_0x394c; + spFC.z *= i_this->scale.y; - for (int i = 0; i < 13; i++, vec_p++, pcVar9++) { - if (0 < i) { - dVar16 = i_this->field_0x3950; + for (sp34 = 0; sp34 < 13; sp34++, var_r30++, sp24++) { + if (0 < sp34) { + sp14 = i_this->field_0x3950; - local_17c = cStack_170 * d_p[i - 1]; + spB4 = spC0 * (d_p[sp34 - 1] + NREG_F(sp34)); - dVar18 = i_this->field_0x3958; - dVar18 *= 1.0f - i * 0.07f; - - local_1ac.zero(); + sp18 = i_this->field_0x3958; + sp18 *= 1.0f + VREG_F(0) - sp34 * (0.07f + VREG_F(1)); + sp84.zero(); // (1.0f / 100.0f) if (param_4 > 0.01f) { - dVar16 = 0.0f; - f32 dVar14 = param_4 * (i * 0.2f + 1.0f); + sp14 = 0.0f + VREG_F(15); + var_f26 = param_4 * (sp34 * (0.2f + VREG_F(16)) + 1.0f); cMtx_YrotS(*calc_mtx, param_2->field_0x013a); cMtx_XrotM(*calc_mtx, param_2->field_0x0138); - local_140.x = (dVar14 * 2.0f) * cM_ssin(i_this->field_0x25a0 * 0x1000 + (i * -7500) + sVar3); - local_140.y = (dVar14 * 5.0f) * cM_ssin(i_this->field_0x25a0 * 0x1800 + (i * -7000) + sVar3); - local_140.z = -15.0f; - MtxPosition(&local_140, &local_1ac); + spF0.x = ((2.0f + VREG_F(17)) * var_f26) * + cM_ssin(i_this->field_0x25a0 * (0x1000 + JREG_S(0)) + + (sp34 * (-7500 + JREG_S(1))) + sp08); + spF0.y = ((5.0f + VREG_F(18)) * var_f26) * + cM_ssin(i_this->field_0x25a0 * (0x1800 + JREG_S(2)) + + (sp34 * (-7000 + JREG_S(3))) + sp08); + spF0.z = -15.0f + VREG_F(19); + MtxPosition(&spF0, &sp84); } if (param_5 > 0.01f) { - dVar14 = param_5 * (i * 0.2f + 1.0f); + var_f26 = param_5 * (sp34 * (0.2f + VREG_F(16)) + 1.0f); cMtx_YrotS(*calc_mtx, param_2->field_0x013a + -6000); cMtx_XrotM(*calc_mtx, -5000); - local_140.x = (dVar14 * 2.0f) * cM_ssin(i_this->field_0x25a0 * 0x448 + (i * -7000) + sVar3); - local_140.y = (dVar14 * 6.0f) * cM_ssin(i_this->field_0x25a0 * 0xc48 + (i * -7500) + sVar3); - local_140.z = param_5 * -15.0f; - MtxPosition(&local_140, &local_14c); - local_1ac += local_14c; + spF0.x = ((2.0f + VREG_F(17)) * var_f26) * + cM_ssin(i_this->field_0x25a0 * (0x448 + JREG_S(0)) + + (sp34 * (-7000 + JREG_S(1))) + sp08); + spF0.y = ((6.0f + VREG_F(18)) * var_f26) * + cM_ssin(i_this->field_0x25a0 * (0xc48 + JREG_S(2)) + + (sp34 * (-7500 + JREG_S(3))) + sp08); + spF0.z = (-15.0f + VREG_F(19)) * param_5; + MtxPosition(&spF0, &spE4); + sp84 += spE4; } if (i_this->field_0x3960 > 0.1f) { - local_1ac.y = i_this->field_0x3960 * cM_ssin(i_this->field_0x25a0 * 0x1100 + (i * -7000) + sVar3); + sp84.y = i_this->field_0x3960 * + cM_ssin(i_this->field_0x25a0 * (0x1100 + JREG_S(2)) + + (sp34 * (-7000 + JREG_S(3))) + sp08); } - dVar20 = (vec_p->x - vec_p[-1].x) + pcVar9->x + local_17c.x + local_1ac.x; - dVar19 = (vec_p->z - vec_p[-1].z) + pcVar9->z + local_17c.z + local_1ac.z; - dVar14 = local_1ac.y + (vec_p->y + pcVar9->y + dVar18); + sp30 = (var_r30->x - var_r30[-1].x) + sp24->x + spB4.x + sp84.x; + sp28 = (var_r30->z - var_r30[-1].z) + sp24->z + spB4.z + sp84.z; + var_f31 = var_r30->y + sp24->y + sp18 + sp84.y; - if (bVar2) { - dVar18 = dVar17; - local_14c = local_158 - *vec_p; - fVar1 = JMAFastSqrt(local_14c.x * local_14c.x + local_14c.z * local_14c.z); - if (fVar1 < 85.0f) { - dVar18 = local_158.y + 1.0f * JMAFastSqrt(7225.0f - fVar1 * fVar1); + if (sp20) { + var_f30 = var_f27; + spE4 = spD8 - *var_r30; + var_f29 = JMAFastSqrt(spE4.x * spE4.x + spE4.z * spE4.z); + var_f28 = 85.0f + KREG_F(12); + if (var_f29 < var_f28) { + var_f30 = spD8.y + 1.0f * JMAFastSqrt(var_f28 * var_f28 - var_f29 * var_f29) * + (1.0f + KREG_F(13)); } - if (dVar14 < dVar18) { - dVar14 = dVar18; + if (var_f31 < var_f30) { + var_f31 = var_f30; } } else if (i_this->field_0x3966 != 0) { - dVar18 = dVar17; - local_14c = local_158 - *vec_p; - fVar1 = JMAFastSqrt(local_14c.x * local_14c.x + local_14c.z * local_14c.z); - - if (fVar1 < 85.0f) { - dVar18 = local_158.y + JMAFastSqrt(7225.0f - fVar1 * fVar1); + var_f30 = var_f27; + spE4 = spD8 - *var_r30; + var_f29 = JMAFastSqrt(spE4.x * spE4.x + spE4.z * spE4.z); + var_f28 = 85.0f + KREG_F(12); + if (var_f29 < var_f28) { + var_f30 = spD8.y + JMAFastSqrt(var_f28 * var_f28 - var_f29 * var_f29) * + (1.0f + KREG_F(13)); } - if (dVar14 < dVar18) { - dVar14 = dVar18; + if (var_f31 < var_f30) { + var_f31 = var_f30; } } else { - if (dVar14 < dVar17) { - dVar14 = dVar17; + if (var_f31 < var_f27) { + var_f31 = var_f27; } } - dVar14 -= vec_p[-1].y; - s16 sVar4 = -cM_atan2s(dVar14, dVar19); - s16 sVar5 = (s16)cM_atan2s(dVar20, JMAFastSqrt(dVar14 * dVar14 + dVar19 * dVar19)); + sp2C = var_f31 - var_r30[-1].y; + sp0C = -cM_atan2s(sp2C, sp28); + sp0A = (s16)cM_atan2s(sp30, JMAFastSqrt(sp2C * sp2C + sp28 * sp28)); - cMtx_XrotS(*calc_mtx, sVar4); - cMtx_YrotM(*calc_mtx, sVar5); - MtxPosition(&local_134, &local_14c); + cMtx_XrotS(*calc_mtx, sp0C); + cMtx_YrotM(*calc_mtx, sp0A); + MtxPosition(&spFC, &spE4); - *pcVar9 = *vec_p; + *sp24 = *var_r30; - vec_p->x = vec_p[-1].x + local_14c.x; - vec_p->y = vec_p[-1].y + local_14c.y; - vec_p->z = vec_p[-1].z + local_14c.z; + var_r30->x = var_r30[-1].x + spE4.x; + var_r30->y = var_r30[-1].y + spE4.y; + var_r30->z = var_r30[-1].z + spE4.z; - pcVar9->x = dVar16 * (vec_p->x - pcVar9->x); - pcVar9->y = dVar16 * (vec_p->y - pcVar9->y); - pcVar9->z = dVar16 * (vec_p->z - pcVar9->z); + sp24->x = sp14 * (var_r30->x - sp24->x); + sp24->y = sp14 * (var_r30->y - sp24->y); + sp24->z = sp14 * (var_r30->z - sp24->z); } } } @@ -612,7 +646,14 @@ static int mant_cut_type; /* 808624E8-80862908 0012C8 0420+00 2/1 0/0 0/0 .text daMant_Execute__FP10mant_class */ static int daMant_Execute(mant_class* i_this) { f32 var_f31, var_f30; - int iVar8, unaff_r29, iVar2, uVar1, uVar4; + int iVar8; + s16 unaff_r29; + int iVar2, uVar1, uVar4; + + fopAc_ac_c* mant_actor = (fopAc_ac_c*)i_this; + + fopAc_ac_c* unusedPlayerActor = dComIfGp_getPlayer(0); + daPy_py_c* unusedPlayer = (daPy_py_c*)unusedPlayerActor; i_this->field_0x25a0++; lbl_277_bss_0++; @@ -621,7 +662,7 @@ static int daMant_Execute(mant_class* i_this) { i_this->field_0x399e--; } - b_gnd_class* gndActor = (b_gnd_class*)fopAcM_SearchByID(i_this->parentActorID); + b_gnd_class* gndActor = (b_gnd_class*)fopAcM_SearchByID(mant_actor->parentActorID); if (gndActor && gndActor->mDrawHorse != 0) { i_this->field_0x394c = 21.0f; @@ -647,7 +688,7 @@ static int daMant_Execute(mant_class* i_this) { i_this->field_0x3965 = 0; i_this->field_0x3966 = 0; - i_this->field_0x3940 = i_this->current.pos; + i_this->field_0x3940 = mant_actor->current.pos; iVar8 = 0; @@ -674,7 +715,7 @@ static int daMant_Execute(mant_class* i_this) { for (int i = 0; i < iVar8; i++) { var_f31 += cM_ssin(unaff_r29); - var_f30 -= cM_scos(unaff_r29); + var_f30 += -cM_scos(unaff_r29); uVar4 = (int)(var_f31 + 64.0f) | (int)(var_f30 + 64.0f) << 7; @@ -725,8 +766,7 @@ static int daMant_Execute(mant_class* i_this) { if (0 <= uVar1 && uVar1 < 0x4000) { int iVar5 = (uVar1 & 7) + (uVar1 & 0x78) * 4 + (uVar1 >> 4 & 0x18) + (uVar1 & 0x3e00); - l_Egnd_mantTEX_U[iVar5] = 0; - l_Egnd_mantTEX[iVar5] = 0; + l_Egnd_mantTEX[iVar5] = l_Egnd_mantTEX_U[iVar5] = 0; } } } @@ -748,6 +788,8 @@ static int daMant_Delete(mant_class* i_this) { static int daMant_Create(fopAc_ac_c* i_this) { mant_class* m_this = (mant_class*)i_this; + fpc_ProcID unusedId = fopAcM_GetID(m_this); + fopAcM_ct(m_this, mant_class); //m_this->field_0x0570.field_0x74 = 0; m_this->field_0x259c = fopAcM_GetParam(i_this); diff --git a/src/d/actor/d_a_mg_fshop.cpp b/src/d/actor/d_a_mg_fshop.cpp index 0bb2a49848..8c15501248 100644 --- a/src/d/actor/d_a_mg_fshop.cpp +++ b/src/d/actor/d_a_mg_fshop.cpp @@ -1686,7 +1686,11 @@ static int daFshop_Create(fopAc_ac_c* actor) { int sp24; if (sp10 == 1) { +#if VERSION == VERSION_GCN_JPN + sp24 = dComIfGs_getEventReg(check_kind[i]); +#else sp24 = 2.54f * dComIfGs_getEventReg(check_kind[i]); +#endif } else { sp24 = dComIfGs_getEventReg(check_kind[i]); } diff --git a/src/d/actor/d_a_npc_cd2.cpp b/src/d/actor/d_a_npc_cd2.cpp index 8a4d6944f3..f20cb12f09 100644 --- a/src/d/actor/d_a_npc_cd2.cpp +++ b/src/d/actor/d_a_npc_cd2.cpp @@ -2136,12 +2136,12 @@ daNpcCd2_HIO_c::daNpcCd2_HIO_c() { for (int j = 0; j < 19; j++) { memcpy(&field_0x0004[i].field_0x004[j].field_0x04, a_jntTbl_M[i][j], 20); } - memcpy(&field_0x0004[i].mMaxLmtY_BACKBONE, a_prmTbl_M + i * 0x40, 0x40); + memcpy(&field_0x0004[i].mMaxLmtX_BACKBONE, a_prmTbl_M + i * 0x40, 0x40); } for (int i = 0; i < 14; i++) { for (int j = 0; j < 21; j++) { memcpy(&field_0x20c4[i].field_0x004[j].field_0x04, a_jntTbl_W[i][j], 20); } - memcpy(&field_0x20c4[i].mMaxLmtY_BACKBONE, a_prmTbl_W + i * 0x40, 0x40); + memcpy(&field_0x20c4[i].mMaxLmtX_BACKBONE, a_prmTbl_W + i * 0x40, 0x40); } } diff --git a/src/d/actor/d_a_npc_cdn3.cpp b/src/d/actor/d_a_npc_cdn3.cpp index 28069ee977..75c411c267 100644 --- a/src/d/actor/d_a_npc_cdn3.cpp +++ b/src/d/actor/d_a_npc_cdn3.cpp @@ -7,62 +7,55 @@ #include "d/actor/d_a_npc_cdn3.h" #include "d/d_msg_object.h" -#include "dol2asm.h" +#include "d/d_s_play.h" // // Declarations: // -/* 80978CD8-80978DD4 000078 00FC+00 1/1 0/0 0/0 .text createHeapCallBack__FP10fopAc_ac_c - */ -static int createHeapCallBack(fopAc_ac_c* param_0) { - daNpcCdn3_c* i_this = (daNpcCdn3_c*)param_0; - int rv = i_this->NpcCreate(i_this->m_type); +/* 8097F788-8097F848 0000E0 00C0+00 1/2 0/0 0/0 .data ActionTable__11daNpcCdn3_c */ +const daNpcCdn3_c::ActionPair daNpcCdn3_c::ActionTable[8] = { + {&daNpcCdn3_c::initWait, &daNpcCdn3_c::executeWait}, + {&daNpcCdn3_c::initPath, &daNpcCdn3_c::executePath}, + {&daNpcCdn3_c::initTalk, &daNpcCdn3_c::executeTalk}, + {&daNpcCdn3_c::initEscape, &daNpcCdn3_c::executeEscape}, + {&daNpcCdn3_c::initFear, &daNpcCdn3_c::executeFear}, + {&daNpcCdn3_c::initFear2, &daNpcCdn3_c::executeFear2}, + {&daNpcCdn3_c::initFight, &daNpcCdn3_c::executeFight}, + {&daNpcCdn3_c::initRelief, &daNpcCdn3_c::executeRelief}, +}; + +int daNpcCdn3_c::createHeap() { + int rv = NpcCreate(m_type); if (rv != 0) { - if (i_this->mObjNum != 0) { - rv = (i_this->field_0xac8 = i_this->ObjCreate(i_this->mObjNum)) != NULL; + if (mObjNum != 0) { + rv = NULL != (field_0xac8 = ObjCreate(mObjNum)); if (!rv) { - i_this->mpMorf->stopZelAnime(); + mpMorf->stopZelAnime(); } } else { - i_this->field_0xac8 = NULL; + field_0xac8 = NULL; + rv = 1; } - if (i_this->isChairStyle()) { - f32 scale = Cd2_HIO_objScale(i_this->m_type); - - J3DModel* model = i_this->ChairCreate(scale); - i_this->field_0xacc = model; - rv = model != 0; + if (isChairStyle()) { + rv = NULL != (field_0xacc = ChairCreate(Cd2_HIO_objScale(m_type))); if (rv == 0) { - i_this->mpMorf->stopZelAnime(); + mpMorf->stopZelAnime(); } } else { - i_this->field_0xacc = NULL; + field_0xacc = NULL; rv = 1; } } return rv; } -/* 8097F788-8097F848 0000E0 00C0+00 1/2 0/0 0/0 .data ActionTable__11daNpcCdn3_c */ -daNpcCdn3_c::actionFunc daNpcCdn3_c::ActionTable[8][2] = { - &daNpcCdn3_c::initWait, - &daNpcCdn3_c::executeWait, - &daNpcCdn3_c::initPath, - &daNpcCdn3_c::executePath, - &daNpcCdn3_c::initTalk, - &daNpcCdn3_c::executeTalk, - &daNpcCdn3_c::initEscape, - &daNpcCdn3_c::executeEscape, - &daNpcCdn3_c::initFear, - &daNpcCdn3_c::executeFear, - &daNpcCdn3_c::initFear2, - &daNpcCdn3_c::executeFear2, - &daNpcCdn3_c::initFight, - &daNpcCdn3_c::executeFight, - &daNpcCdn3_c::initRelief, - &daNpcCdn3_c::executeRelief, -}; +/* 80978CD8-80978DD4 000078 00FC+00 1/1 0/0 0/0 .text createHeapCallBack__FP10fopAc_ac_c + */ +static int createHeapCallBack(fopAc_ac_c* param_0) { + daNpcCdn3_c* npc = (daNpcCdn3_c*)param_0; + return npc->createHeap(); +} /* 80978DD4-80978E18 000174 0044+00 9/9 0/0 0/0 .text * setAction__11daNpcCdn3_cFQ211daNpcCdn3_c6Mode_e */ @@ -70,7 +63,7 @@ void daNpcCdn3_c::setAction(daNpcCdn3_c::Mode_e i_action) { JUT_ASSERT(366, i_action < MODE_MAX_e); mPrevMode = mMode; mMode = i_action; - mAction = ActionTable[mMode]; + mAction = &ActionTable[mMode].mInitFn; callInit(); } @@ -86,30 +79,336 @@ void daNpcCdn3_c::callExecute() { (this->*(mAction[1]))(); } +/* 80978E6C-80978ED0 00020C 0064+00 1/0 0/0 0/0 .text initWait__11daNpcCdn3_cFv */ +void daNpcCdn3_c::initWait() { + speedF = 0.0f; + m_seqStep = 0; + field_0xb94 = 1; + (this->*(m_funcTbl[m_seqNum][m_seqStep]))(NULL); +} + +/* 80978ED0-80979080 000270 01B0+00 1/0 0/0 0/0 .text executeWait__11daNpcCdn3_cFv */ +void daNpcCdn3_c::executeWait() { + if ((this->*(m_funcTbl[m_seqNum][m_seqStep]))(NULL) != 0) { + m_seqStep = (m_funcTbl[m_seqNum][m_seqStep + 1] == NULL) ? 0 : m_seqStep + 1; + field_0xb94 = 1; + if (mpMorf->getAnm() == getAnmP(8, mObjNum)) { + mCitizen.playVoice(3); + } else if (mpMorf->getAnm() == getAnmP(49, mObjNum)) { + mCitizen.playVoice(4); + } else if (mpMorf->getAnm() == getAnmP(20, mObjNum) || mpMorf->getAnm() == getAnmP(21, mObjNum)) { + mCitizen.playVoice(5); + } + } + checkSchedule(); + if (checkFearSituation()) { + if (mObjNum == 2 && (m_type == 0 || m_type == 1)) { + setAction(MODE_FIGHT); + } else { + setAction(MODE_FEAR); + } + } +} + +/* 80979080-80979144 000420 00C4+00 1/0 0/0 0/0 .text initPath__11daNpcCdn3_cFv */ +void daNpcCdn3_c::initPath() { + setAnm((J3DAnmTransformKey*) getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xb68 = 2; + m_seqStep = 0; + field_0xb94 = 1; + field_0xb98 = 0; + if (mTagSched != NULL) { + m_seqNum = mTagSched->getSeqNum(); + if (m_seqNum >= 0 && m_seqNum < 44) { + (this->*(m_funcTbl[m_seqNum][0]))(NULL); + } + } +} + +/* 80979144-809799B0 0004E4 086C+00 1/0 0/0 0/0 .text executePath__11daNpcCdn3_cFv */ +void daNpcCdn3_c::executePath() { + if (m_path.isPath()) { + switch (field_0xb98) { + case 0: + if (m_path.checkPoint(current.pos, speedF)) { + field_0xb74 = -1; + if (m_path.getArg0() != -1) { + field_0xb74 = getTimeMinute() + getTimeHour() * 60 + m_path.getArg0() * 10; + } + m_seqNum = m_path.getArg1(); + if (m_path.checkPathEnd(current.pos, speedF)) { + if (getGroupID() != 0xff) { + int startEnd = mTagSched->getStartEnd(); + if (startEnd == 1) { + setSchedule(field_0xb88); + field_0xb88 = NULL; + field_0xb95 = 1; + } else { + if (m_path.isClose()) { + m_path.setNextPoint(current.pos); + } else { + if (m_seqNum < 0 || m_seqNum >= 44) { + // "Castle Town Townspeople Path Point Argument Setting Value Error + // Argument 1 Motion Sequence = %d is abnormal" + OSReport_Error("城下町の町人 パス点引数設定値異常 引数1モーションシーケンス=%dが異常です。\n", m_seqNum); + JUT_ASSERT(517, FALSE); + } + field_0xb68 = 0; + setAction(MODE_WAIT); + } + } + checkSchedule(); + } else { + if (!m_path.isClose()) { + int time = getTime(); + field_0xb8c = time + field_0xb90; + current.pos.set(m_path.getPoint(0)); + home.pos.set(current.pos); + old.pos.set(current.pos); + current.angle.y = (s16)cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1)); + shape_angle.y = current.angle.y; + home.angle.y = current.angle.y; + old.angle.y = current.angle.y; + m_path.setPath(getPathID(), fopAcM_GetRoomNo(this), 1, ¤t.pos, + false); + setAction(MODE_PATH); + field_0xb95 = 1; + } + } + } else { + if (m_seqNum >= 0 && m_seqNum < 44) { + field_0xb68 = 0; + field_0xb98 = 1; + } else { + if (mTagSched != NULL) { + m_seqNum = mTagSched->getSeqNum(); + if (m_seqNum >= 0 && m_seqNum < 44) { + (this->*(m_funcTbl[m_seqNum][0]))(NULL); + } + } + m_path.setNextPoint(current.pos); + } + } + } + break; + case 1: + if (field_0xb74 != -1) { + if ((this->*(m_funcTbl[m_seqNum][m_seqStep]))(NULL)) { + m_seqStep = (m_funcTbl[m_seqNum][m_seqStep + 1] == NULL) ? 0 : m_seqStep + 1; + field_0xb94 = 1; + } + int time = getTime(); + if (field_0xb74 <= time) { + if (field_0xb68 == 0) { + setAnm((J3DAnmTransformKey*)getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xb68 = 2; + } + m_seqStep = 0; + field_0xb94 = 1; + m_path.setNextPoint(current.pos); + field_0xb98 = 0; + } + } else { + if ((this->*(m_funcTbl[m_seqNum][m_seqStep]))(NULL)) { + if (m_funcTbl[m_seqNum][m_seqStep + 1] == NULL) { + if (field_0xb68 == 0) { + setAnm((J3DAnmTransformKey*)getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xb68 = 2; + } + m_seqStep = 0; + m_path.setNextPoint(current.pos); + field_0xb98 = 0; + } else { + m_seqStep++; + } + field_0xb94 = 1; + } + } + break; + default: + JUT_ASSERT(598, FALSE); + break; + } + + if (field_0xb68 == 2 || field_0xb68 == 1) { + if (!fopAcM_CheckCondition(this, 4)) { + m_path.checkObstacle(this); + } + cXyz cStack_58; + m_path.getTargetPoint(&cStack_58); + cLib_addCalcAngleS2(&shape_angle.y, cLib_targetAngleY(¤t.pos, &cStack_58), 0xd, 0x600); + if (current.pos.y != old.pos.y) { + s16 sVar10 = 0; + cM3dGPla acStack_4c; + bool triPla = dComIfG_Bgsp().GetTriPla(mAcch.m_gnd, &acStack_4c); + if (triPla) { + sVar10 = fopAcM_getPolygonAngle(&acStack_4c, shape_angle.y); + } + if (sVar10 != 0) { + field_0xb64 = current.pos.y; + } + } + if (mAcch.ChkWallHit() && current.pos.abs(old.pos) < 2.0f) { + field_0xb99++; + if (field_0xb99 > 30) { + setAction(MODE_RELIEF); + } + } else { + field_0xb99 = 0; + } + } + setAngle(); + pathMoveF(); + mAcch.CrrPos(dComIfG_Bgsp()); + if (checkFearSituation()) { + if (mObjNum == 2 && (m_type == 0 || m_type == 1)) { + setAction(MODE_FIGHT); + } else { + setAction(MODE_FEAR); + } + } + } +} + +/* 80979A34-80979B2C 000DD4 00F8+00 1/0 0/0 0/0 .text initTalk__11daNpcCdn3_cFv */ +void daNpcCdn3_c::initTalk() { + field_0xb68 = 0; + m_targetAct.entry(dComIfGp_getLinkPlayer()); + field_0xb92 = shape_angle.y; + field_0xb80 = mpMorf->getAnm(); + field_0xb7c = m_seqNum; + JUT_ASSERT(658, NULL != m_targetAct.getActorP()); + if (!isInShop() && !isNoTurnTalk()) { + m_seqNum = isChairStyle() ? 15 : 2; + m_seqStep = 0; + AnmNum anmNum = isChairStyle() ? CD2_ANM_14 : CD2_ANM_0; + setAnm((J3DAnmTransformKey*)getAnmP(anmNum, mObjNum), 1.0f, 12.0f, 2, 0, -1); + } + field_0xb98 = 0; +} + +/* 80979B2C-80979F08 000ECC 03DC+00 1/0 0/0 0/0 .text executeTalk__11daNpcCdn3_cFv */ +void daNpcCdn3_c::executeTalk() { + if (mpMorf->getAnm() == getAnmP(47,mObjNum)) { + if (m_type == 17) { + mCitizen.startCreatureVoiceLevel(Z2SE_WAD_A_MV_DANCE, -1); + } else if (m_type == 2) { + mCitizen.startCreatureVoiceLevel(Z2SE_MCN_A_V_DANCE, -1); + } else if (m_type == 26) { + mCitizen.startCreatureVoiceLevel(Z2SE_WCN_A_V_DANCE, -1); + } + } + switch (field_0xb98) { + case 0: + if (mIsDarkWorld || isInShop() || isNoTurnTalk()) { + field_0xb98++; + } else { + s16 actorAngle = fopAcM_searchActorAngleY(this, m_targetAct.getActorP()); + if (cLib_addCalcAngleS(&shape_angle.y, actorAngle, 4, 0x800, 0x10) == 0) { + speedF = 0.0f; + field_0xb98++; + } + setAngle(); + } + break; + case 1: + if (dComIfGp_event_chkTalkXY()) { + if (!dComIfGp_evmng_ChkPresentEnd()) { + break; + } + field_0xb98++; + } else { + field_0xb98++; + } + mMsgFlow.init(this, mFlowNodeNum, 0, NULL); + case 2: + if (mMsgFlow.doFlow(this, NULL, 0)) { + dComIfGp_event_reset(); + m_targetAct.remove(); + m_seqNum = field_0xb7c; + if (field_0xb68 != 0) { + setAction(mPrevMode); + } else { + if (!isInShop()) { + int iVar8 = 0; + if (isChairStyle()) { + iVar8 = 14; + } + setAnm((J3DAnmTransformKey*)getAnmP(iVar8, mObjNum), 1.0f, 12.0f, 2, 0, -1); + } + field_0xb98++; + } + } else { + int msgAnm = ctrlMsgAnm(); + if (msgAnm != -1) { + m_seqNum = msgAnm; + m_seqStep = 0; + field_0xb94 = 1; + } + JUT_ASSERT(726, m_funcTbl[m_seqNum][m_seqStep] != NULL); + if ((this->*(m_funcTbl[m_seqNum][m_seqStep]))(NULL) != 0) { + m_seqStep = (m_funcTbl[m_seqNum][m_seqStep + 1] == NULL) ? 0 : m_seqStep + 1; + field_0xb94 = 1; + } + } + break; + case 3: + if (cLib_addCalcAngleS(&shape_angle.y, field_0xb92, 4, 0x800, 0x10) == 0) { + setAnm((J3DAnmTransformKey*)field_0xb80, 1.0f, 12.0f, 2, 0, -1); + setAction(mPrevMode); + } + setAngle(); + return; + default: + JUT_ASSERT(741, FALSE); + } +} + +/* 80979F08-8097A028 0012A8 0120+00 1/0 0/0 0/0 .text initEscape__11daNpcCdn3_cFv */ +void daNpcCdn3_c::initEscape() { + mEscapeTag = getEscapeTag(); + JUT_ASSERT(816, mEscapeTag != NULL); + JUT_ASSERT(817, mEscapeTag->getPathID() != 0xff); + m_path.setPath(mEscapeTag->getPathID(), fopAcM_GetRoomNo(this), 1, ¤t.pos, true); + JUT_ASSERT(819, m_path.isPath()); + m_path.setNextPoint(current.pos); + if (mObjNum == 0) { + setAnm((J3DAnmTransformKey*)getAnmP(41, mObjNum), 1.0f, 0.0f, 0, 0, -1); + mCitizen.playVoice(1); + field_0xb68 = 0; + } else { + setAnm((J3DAnmTransformKey*)getAnmP(4, mObjNum), 1.0f, 12.0f, 2, 0, -1); + mCitizen.playVoice(0); + field_0xb68 = 1; + } + mFlowNodeNum = 0; + dComIfGs_onSaveDunSwitch(0x3c); +} + /* 8097F848-8097F8F8 -00001 00B0+00 5/5 0/0 0/0 .data m_funcTbl__11daNpcCdn3_c */ daNpcCdn3_c::seqFunc* daNpcCdn3_c::m_funcTbl[44] = { - daNpcCdn3_c::m_seq00_funcTbl, daNpcCdn3_c::m_seq01_funcTbl, - daNpcCdn3_c::m_seq02_funcTbl, daNpcCdn3_c::m_seq03_funcTbl, - daNpcCdn3_c::m_seq04_funcTbl, daNpcCdn3_c::m_seq05_funcTbl, - daNpcCdn3_c::m_seq06_funcTbl, daNpcCdn3_c::m_seq07_funcTbl, - daNpcCdn3_c::m_seq08_funcTbl, daNpcCdn3_c::m_seq09_funcTbl, - daNpcCdn3_c::m_seq10_funcTbl, daNpcCdn3_c::m_seq11_funcTbl, - daNpcCdn3_c::m_seq12_funcTbl, daNpcCdn3_c::m_seq13_funcTbl, - daNpcCdn3_c::m_seq14_funcTbl, daNpcCdn3_c::m_seq15_funcTbl, - daNpcCdn3_c::m_seq16_funcTbl, daNpcCdn3_c::m_seq17_funcTbl, - daNpcCdn3_c::m_seq18_funcTbl, daNpcCdn3_c::m_seq19_funcTbl, - daNpcCdn3_c::m_seq20_funcTbl, daNpcCdn3_c::m_seq21_funcTbl, - daNpcCdn3_c::m_seq22_funcTbl, daNpcCdn3_c::m_seq23_funcTbl, - daNpcCdn3_c::m_seq24_funcTbl, daNpcCdn3_c::m_seq25_funcTbl, - daNpcCdn3_c::m_seq26_funcTbl, daNpcCdn3_c::m_seq27_funcTbl, - daNpcCdn3_c::m_seq28_funcTbl, daNpcCdn3_c::m_seq29_funcTbl, - daNpcCdn3_c::m_seq30_funcTbl, daNpcCdn3_c::m_seq31_funcTbl, - daNpcCdn3_c::m_seq32_funcTbl, daNpcCdn3_c::m_seq33_funcTbl, - daNpcCdn3_c::m_seq34_funcTbl, daNpcCdn3_c::m_seq35_funcTbl, - daNpcCdn3_c::m_seq36_funcTbl, daNpcCdn3_c::m_seq37_funcTbl, - daNpcCdn3_c::m_seq38_funcTbl, daNpcCdn3_c::m_seq39_funcTbl, - daNpcCdn3_c::m_seq40_funcTbl, daNpcCdn3_c::m_seq41_funcTbl, - daNpcCdn3_c::m_seq42_funcTbl, daNpcCdn3_c::m_seq43_funcTbl, + m_seq00_funcTbl, m_seq01_funcTbl, + m_seq02_funcTbl, m_seq03_funcTbl, + m_seq04_funcTbl, m_seq05_funcTbl, + m_seq06_funcTbl, m_seq07_funcTbl, + m_seq08_funcTbl, m_seq09_funcTbl, + m_seq10_funcTbl, m_seq11_funcTbl, + m_seq12_funcTbl, m_seq13_funcTbl, + m_seq14_funcTbl, m_seq15_funcTbl, + m_seq16_funcTbl, m_seq17_funcTbl, + m_seq18_funcTbl, m_seq19_funcTbl, + m_seq20_funcTbl, m_seq21_funcTbl, + m_seq22_funcTbl, m_seq23_funcTbl, + m_seq24_funcTbl, m_seq25_funcTbl, + m_seq26_funcTbl, m_seq27_funcTbl, + m_seq28_funcTbl, m_seq29_funcTbl, + m_seq30_funcTbl, m_seq31_funcTbl, + m_seq32_funcTbl, m_seq33_funcTbl, + m_seq34_funcTbl, m_seq35_funcTbl, + m_seq36_funcTbl, m_seq37_funcTbl, + m_seq38_funcTbl, m_seq39_funcTbl, + m_seq40_funcTbl, m_seq41_funcTbl, + m_seq42_funcTbl, m_seq43_funcTbl, }; /* 8097F904-8097F91C 00025C 0018+00 1/1 0/0 0/0 .data m_seq00_funcTbl__11daNpcCdn3_c */ @@ -357,321 +656,6 @@ daNpcCdn3_c::seqFunc daNpcCdn3_c::m_seq43_funcTbl[3] = { &daNpcCdn3_c::sittalkb, &daNpcCdn3_c::sittalkbb, NULL, }; -/* 80978E6C-80978ED0 00020C 0064+00 1/0 0/0 0/0 .text initWait__11daNpcCdn3_cFv */ -void daNpcCdn3_c::initWait() { - speedF = 0.0f; - field_0xb97 = 0; - field_0xb94 = 1; - (this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL); -} - -/* 80978ED0-80979080 000270 01B0+00 1/0 0/0 0/0 .text executeWait__11daNpcCdn3_cFv */ -void daNpcCdn3_c::executeWait() { - if ((this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL) != 0) { - int newIndex; - field_0xb97 = (m_funcTbl[mSeqNum][field_0xb97 + 1] == NULL) ? 0 : field_0xb97 + 1; - field_0xb94 = 1; - if (mpMorf->getAnm() == getAnmP(8, mObjNum)) { - mCitizen.playVoice(3); - } else if (mpMorf->getAnm() == getAnmP(49, mObjNum)) { - mCitizen.playVoice(4); - } else if (mpMorf->getAnm() == getAnmP(20, mObjNum) || mpMorf->getAnm() == getAnmP(21, mObjNum)) { - mCitizen.playVoice(5); - } - } - checkSchedule(); - if (checkFearSituation()) { - if (mObjNum == 2 && (m_type == 0 || m_type == 1)) { - setAction(MODE_FIGHT); - } else { - setAction(MODE_FEAR); - } - } -} - -/* 80979080-80979144 000420 00C4+00 1/0 0/0 0/0 .text initPath__11daNpcCdn3_cFv */ -void daNpcCdn3_c::initPath() { - setAnm((J3DAnmTransformKey*) getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xb68 = 2; - field_0xb97 = 0; - field_0xb94 = 1; - field_0xb98 = 0; - if (mTagSched != NULL) { - mSeqNum = mTagSched->getSeqNum(); - if (mSeqNum >= 0 && mSeqNum < 44) { - (this->*(m_funcTbl[mSeqNum][0]))(NULL); - } - } -} - -/* 80979144-809799B0 0004E4 086C+00 1/0 0/0 0/0 .text executePath__11daNpcCdn3_cFv */ -void daNpcCdn3_c::executePath() { - if (m_path.isPath()) { - switch (field_0xb98) { - case 0: - if (m_path.checkPoint(current.pos, speedF)) { - field_0xb74 = -1; - if (m_path.getArg0() != -1) { - field_0xb74 = getTimeMinute() + getTimeHour() * 60 + m_path.getArg0() * 10; - } - mSeqNum = m_path.getArg1(); - if (m_path.checkPathEnd(current.pos, speedF)) { - if (getGroupID() != 0xff) { - if ((int)mTagSched->getStartEnd() == 1) { - setSchedule(field_0xb88); - field_0xb88 = NULL; - field_0xb95 = 1; - } else { - if (m_path.isClose()) { - m_path.setNextPoint(current.pos); - } else { - if (mSeqNum < 0 || mSeqNum >= 44) { - OSReport_Error("城下町の町人 パス点引数設定値異常 引数1モーションシーケンス=%dが異常です。\n", mSeqNum); - JUT_ASSERT(517, FALSE); - } - field_0xb68 = 0; - setAction(MODE_WAIT); - } - } - checkSchedule(); - } else { - if (!m_path.isClose()) { - int time = getTime(); - field_0xb8c = time + field_0xb90; - current.pos.set(m_path.getPoint(0)); - home.pos.set(current.pos); - old.pos.set(current.pos); - current.angle.y = cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1)); - shape_angle.y = current.angle.y; - home.angle.y = current.angle.y; - old.angle.y = current.angle.y; - m_path.setPath(getPathID(), fopAcM_GetRoomNo(this), 1, ¤t.pos, - false); - setAction(MODE_PATH); - field_0xb95 = 1; - } - } - } else { - if (mSeqNum >= 0 && mSeqNum < 44) { - field_0xb68 = 0; - field_0xb98 = 1; - } else { - if (mTagSched != NULL) { - mSeqNum = mTagSched->getSeqNum(); - if (mSeqNum >= 0 && mSeqNum < 44) { - (this->*(m_funcTbl[mSeqNum][0]))(NULL); - } - } - m_path.setNextPoint(current.pos); - } - } - } - break; - case 1: - if (field_0xb74 != -1) { - if ((this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL)) { - field_0xb97 = (m_funcTbl[mSeqNum][field_0xb97 + 1] == NULL) ? 0 : field_0xb97 + 1; - field_0xb94 = 1; - } - int time = getTime(); - if (field_0xb74 <= time) { - if (field_0xb68 == 0) { - setAnm((J3DAnmTransformKey*)getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xb68 = 2; - } - field_0xb97 = 0; - field_0xb94 = 1; - m_path.setNextPoint(current.pos); - field_0xb98 = 0; - } - } else { - if ((this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL)) { - if (m_funcTbl[mSeqNum][field_0xb97 + 1] == NULL) { - if (field_0xb68 == 0) { - setAnm((J3DAnmTransformKey*)getAnmP(2, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xb68 = 2; - } - field_0xb97 = 0; - m_path.setNextPoint(current.pos); - field_0xb98 = 0; - } else { - field_0xb97++; - } - field_0xb94 = 1; - } - } - break; - default: - JUT_ASSERT(598, FALSE); - break; - } - - if (field_0xb68 == 2 || field_0xb68 == 1) { - if (!fopAcM_CheckCondition(this, 4)) { - m_path.checkObstacle(this); - } - cXyz cStack_58; - m_path.getTargetPoint(&cStack_58); - s16 sVar10 = cLib_targetAngleY(¤t.pos, &cStack_58); - cLib_addCalcAngleS2(&shape_angle.y, sVar10, 0xd, 0x600); - if (current.pos.y != old.pos.y) { - s16 sVar10 = 0; - cM3dGPla acStack_4c; - if (dComIfG_Bgsp().GetTriPla(mAcch.m_gnd, &acStack_4c) != 0) { - sVar10 = fopAcM_getPolygonAngle(&acStack_4c, shape_angle.y); - } - if (sVar10 != 0) { - field_0xb64 = current.pos.y; - } - } - if (mAcch.ChkWallHit() && current.pos.abs(old.pos) < 2.0f) { - field_0xb99++; - if (field_0xb99 > 30) { - setAction(MODE_RELIEF); - } - } else { - field_0xb99 = 0; - } - } - setAngle(); - pathMoveF(); - mAcch.CrrPos(dComIfG_Bgsp()); - if (checkFearSituation()) { - if (mObjNum == 2 && (m_type == 0 || m_type == 1)) { - setAction(MODE_FIGHT); - } else { - setAction(MODE_FEAR); - } - } - } -} - -/* 80979A34-80979B2C 000DD4 00F8+00 1/0 0/0 0/0 .text initTalk__11daNpcCdn3_cFv */ -void daNpcCdn3_c::initTalk() { - field_0xb68 = 0; - m_targetAct.entry(dComIfGp_getLinkPlayer()); - field_0xb92 = shape_angle.y; - field_0xb80 = mpMorf->getAnm(); - field_0xb7c = mSeqNum; - JUT_ASSERT(658, NULL != m_targetAct.getActorP()); - if (!isInShop() && !isNoTurnTalk()) { - int uVar2; - if (isChairStyle()) { - uVar2 = 15; - } else { - uVar2 = 2; - } - mSeqNum = uVar2; - field_0xb97 = 0; - AnmNum anmNum; - if (isChairStyle()) { - anmNum = CD2_ANM_14; - } else { - anmNum = CD2_ANM_0; - } - setAnm((J3DAnmTransformKey*)getAnmP(anmNum, mObjNum), 1.0f, 12.0f, 2, 0, -1); - } - field_0xb98 = 0; -} - -/* 80979B2C-80979F08 000ECC 03DC+00 1/0 0/0 0/0 .text executeTalk__11daNpcCdn3_cFv */ -void daNpcCdn3_c::executeTalk() { - if (mpMorf->getAnm() == getAnmP(47,mObjNum)) { - if (m_type == 17) { - mCitizen.startCreatureVoiceLevel(Z2SE_WAD_A_MV_DANCE, -1); - } else if (m_type == 2) { - mCitizen.startCreatureVoiceLevel(Z2SE_MCN_A_V_DANCE, -1); - } else if (m_type == 26) { - mCitizen.startCreatureVoiceLevel(Z2SE_WCN_A_V_DANCE, -1); - } - } - switch (field_0xb98) { - case 0: - if (mIsDarkWorld || isInShop() || isNoTurnTalk()) { - field_0xb98++; - } else { - s16 actorAngle = fopAcM_searchActorAngleY(this, m_targetAct.getActorP()); - if (cLib_addCalcAngleS(&shape_angle.y, actorAngle, 4, 0x800, 0x10) == 0) { - speedF = 0.0f; - field_0xb98++; - } - setAngle(); - } - break; - case 1: - if (dComIfGp_event_chkTalkXY()) { - if (!dComIfGp_evmng_ChkPresentEnd()) { - break; - } - field_0xb98++; - } else { - field_0xb98++; - } - mMsgFlow.init(this, mFlowNodeNum, 0, NULL); - case 2: - if (mMsgFlow.doFlow(this, NULL, 0)) { - dComIfGp_event_reset(); - m_targetAct.remove(); - mSeqNum = field_0xb7c; - if (field_0xb68 != 0) { - setAction(mPrevMode); - } else { - if (!isInShop()) { - int iVar8 = 0; - if (isChairStyle()) { - iVar8 = 14; - } - setAnm((J3DAnmTransformKey*)getAnmP(iVar8, mObjNum), 1.0f, 12.0f, 2, 0, -1); - } - field_0xb98++; - } - } else { - int msgAnm = ctrlMsgAnm(); - if (msgAnm != -1) { - mSeqNum = msgAnm; - field_0xb97 = 0; - field_0xb94 = 1; - } - JUT_ASSERT(726, m_funcTbl[mSeqNum][field_0xb97] != NULL); - if ((this->*(m_funcTbl[mSeqNum][field_0xb97]))(NULL) != 0) { - field_0xb97 = (m_funcTbl[mSeqNum][field_0xb97 + 1] == NULL) ? 0 : field_0xb97 + 1; - field_0xb94 = 1; - } - } - break; - case 3: - if (cLib_addCalcAngleS(&shape_angle.y, field_0xb92, 4, 0x800, 0x10) == 0) { - setAnm((J3DAnmTransformKey*)field_0xb80, 1.0f, 12.0f, 2, 0, -1); - setAction(mPrevMode); - } - setAngle(); - return; - default: - JUT_ASSERT(741, FALSE); - } -} - -/* 80979F08-8097A028 0012A8 0120+00 1/0 0/0 0/0 .text initEscape__11daNpcCdn3_cFv */ -void daNpcCdn3_c::initEscape() { - mEscapeTag = getEscapeTag(); - JUT_ASSERT(816, mEscapeTag != NULL); - JUT_ASSERT(817, mEscapeTag->getPathID() != 0xff); - m_path.setPath(mEscapeTag->getPathID(), fopAcM_GetRoomNo(this), 1, ¤t.pos, true); - JUT_ASSERT(819, m_path.isPath()); - m_path.setNextPoint(current.pos); - if (mObjNum == 0) { - setAnm((J3DAnmTransformKey*)getAnmP(41, mObjNum), 1.0f, 0.0f, 0, 0, -1); - mCitizen.playVoice(1); - field_0xb68 = 0; - } else { - setAnm((J3DAnmTransformKey*)getAnmP(4, mObjNum), 1.0f, 12.0f, 2, 0, -1); - mCitizen.playVoice(0); - field_0xb68 = 1; - } - mFlowNodeNum = 0; - dComIfGs_onSaveDunSwitch(0x3c); -} - /* 8097A028-8097A398 0013C8 0370+00 1/0 0/0 0/0 .text executeEscape__11daNpcCdn3_cFv */ void daNpcCdn3_c::executeEscape() { if (field_0xb68 == 0) { @@ -699,7 +683,8 @@ void daNpcCdn3_c::executeEscape() { if (current.pos.y != old.pos.y) { s16 gndAngle = 0; cM3dGPla plane; - if (dComIfG_Bgsp().GetTriPla(mAcch.m_gnd, &plane)) { + bool triPla = dComIfG_Bgsp().GetTriPla(mAcch.m_gnd, &plane); + if (triPla) { gndAngle = fopAcM_getPolygonAngle(&plane, shape_angle.y); } if (gndAngle != 0) { @@ -735,7 +720,7 @@ void daNpcCdn3_c::initFear() { a_anmNum = 0x28; } - mSeqNum = a_anmNum; + m_seqNum = a_anmNum; setAnm((J3DAnmTransformKey*)getAnmP(0x29, mObjNum), 1.0f, 0.0f, 0, 0, -1); field_0xb92 = fopAcM_searchPlayerAngleY(this); mFlowNodeNum = 0; @@ -751,7 +736,7 @@ void daNpcCdn3_c::executeFear() { } if (mpMorf->isStop()) { mObjNum = 0; - setAnm((J3DAnmTransformKey*)getAnmP(mSeqNum, mObjNum), 1.0f, 12.0f, 2, 0, -1); + setAnm((J3DAnmTransformKey*)getAnmP(m_seqNum, mObjNum), 1.0f, 12.0f, 2, 0, -1); field_0xb92 = cLib_targetAngleY(fopAcM_GetPosition_p(daPy_getPlayerActorClass()), ¤t.pos); } cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 3, 0x600); @@ -824,7 +809,7 @@ void daNpcCdn3_c::executeRelief() { current.pos.set(m_path.getPoint(0)); home.pos.set(current.pos); old.pos.set(current.pos); - current.angle.y = cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1)); + current.angle.y = (s16)cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1)); shape_angle.y = current.angle.y; home.angle.y = current.angle.y; old.angle.y = current.angle.y; @@ -839,7 +824,7 @@ void daNpcCdn3_c::executeRelief() { setAction(MODE_FEAR); } } - cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 3, 0x600); + cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 3 + MREG_S(0), 0x600 + MREG_S(1)); } /* 8097ABDC-8097ABE8 001F7C 000C+00 3/3 0/0 0/0 .text setAngle__11daNpcCdn3_cFv */ @@ -857,8 +842,8 @@ void daNpcCdn3_c::pathMoveF() { anmSpeed = Cd2_HIO_walkAnmPlaySpeed(m_type); cLib_chaseF(&field_0xb5c, 0.8f, 0.05f); - setSpeed(&field_0xb60, 0.7f, walkSpeed, 0); - setSpeed(&speedF, 0.7f, walkSpeed, 1); + setSpeed(0.7f, walkSpeed, &field_0xb60, 0); + setSpeed(0.7f, walkSpeed, &speedF, 1); } else if (field_0xb68 == 1) { walkSpeed = Cd2_HIO_maxSpeed(m_type); anmSpeed = Cd2_HIO_anmPlaySpeed(m_type); @@ -867,8 +852,8 @@ void daNpcCdn3_c::pathMoveF() { anmSpeed *= 1.5f; } cLib_chaseF(&field_0xb5c, 1.0, 0.05f); - setSpeed(&field_0xb60, 0.7f, walkSpeed, 0); - setSpeed(&speedF, 0.7f, walkSpeed, 1); + setSpeed(0.7f, walkSpeed, &field_0xb60, 0); + setSpeed(0.7f, walkSpeed, &speedF, 1); } else if (field_0xb68 == 0) { cLib_chaseF(&field_0xb5c, 0.0, 0.05f); cLib_chaseF(&field_0xb60, 0.0f, 1.5f); @@ -876,18 +861,20 @@ void daNpcCdn3_c::pathMoveF() { } cXyz targetPoint; m_path.getTargetPoint(&targetPoint); - if (cLib_distanceAngleS(shape_angle.y, cLib_targetAngleY(¤t.pos, &targetPoint)) >= 0x2000) { + int angle = cLib_distanceAngleS(shape_angle.y, cLib_targetAngleY(¤t.pos, &targetPoint)); + if (angle >= 0x2000) { cLib_chaseF(&field_0xb5c, 0.0f, 0.05f); cLib_chaseF(&field_0xb60, 0.0f, 1.2f); cLib_chaseF(&speedF, 0.0f, 1.2f); } fopAcM_posMoveF(this, movePos); + f32 playSpeed; if (field_0xb68 != 0) { - walkSpeed = field_0xb60 / walkSpeed; - if (walkSpeed > 1.0f) { - walkSpeed = 1.0f; + playSpeed = field_0xb60 / walkSpeed; + if (playSpeed > 1.0f) { + playSpeed = 1.0f; } - f32 playSpeed = anmSpeed * walkSpeed; + playSpeed = anmSpeed * playSpeed; if (playSpeed < 0.6f) { playSpeed = 0.6f; } @@ -899,7 +886,7 @@ void daNpcCdn3_c::pathMoveF() { int daNpcCdn3_c::ctrlMsgAnm() { int rv = -1; if (!eventInfo.checkCommandTalk()) { - return -1; + return rv; } if (dComIfGp_event_getTalkPartner() == this) { msg_class* msg_p = dMsgObject_c::getActor(); @@ -934,25 +921,26 @@ static void* s_sub1(void* param_1, void* param_2) { /* 8097B04C-8097B128 0023EC 00DC+00 1/1 0/0 0/0 .text * searchNextScheduleTagSub__11daNpcCdn3_cFP10fopAc_ac_c */ bool daNpcCdn3_c::searchNextScheduleTagSub(fopAc_ac_c* param_1) { - if (getGroupID() == ((daTagSchedule_c*)param_1)->getGroupID()) { - int uVar3 = mTagSched->getStartTime(); - uVar3 = (u16)((uVar3 / 10) * 60 + (uVar3 % 10) * 10); - int uVar4 = ((daTagSchedule_c*)param_1)->getStartTime(); + daTagSchedule_c* schedule = (daTagSchedule_c*)param_1; + if (getGroupID() == schedule->getGroupID()) { + u8 uVar3 = mTagSched->getStartTime(); + int uVar3_2 = (u16)((uVar3 / 10) * 60 + (uVar3 % 10) * 10); + u8 uVar4 = schedule->getStartTime(); int uVar4a = (u16)((uVar4 / 10) * 60 + (uVar4 % 10) * 10); - if (uVar4a <= (int)uVar3) { + if (uVar4a <= uVar3_2) { uVar4a += 24 * 60; } - if (uVar4a > uVar3) { + if (uVar4a > uVar3_2) { if (field_0xb88 == NULL) { - field_0xb88 = (daTagSchedule_c*)param_1; + field_0xb88 = schedule; } else { - u16 uVar5 = field_0xb88->getStartTime(); + u8 uVar5 = field_0xb88->getStartTime(); int uVar5a = (u16)((uVar5 / 10) * 60 + (uVar5 % 10) * 10); - if (uVar5a <= uVar3) { + if (uVar5a <= uVar3_2) { uVar5a += 24 * 60; } if (uVar4a < uVar5a) { - field_0xb88 = (daTagSchedule_c*)param_1; + field_0xb88 = schedule; } } } @@ -974,20 +962,22 @@ static void* s_sub2(void* param_1, void* param_2) { /* 8097B194-8097B288 002534 00F4+00 1/1 0/0 0/0 .text * searchFirstScheduleTagSub__11daNpcCdn3_cFP10fopAc_ac_c */ bool daNpcCdn3_c::searchFirstScheduleTagSub(fopAc_ac_c* param_1) { - if (getGroupID() == ((daTagSchedule_c*)param_1)->getGroupID()) { - int uVar3 = ((daTagSchedule_c*)param_1)->getStartTime(); + daTagSchedule_c* schedule = (daTagSchedule_c*)param_1; + if (getGroupID() == schedule->getGroupID()) { + u8 uVar3 = schedule->getStartTime(); int uVar3a = (u16)((uVar3 / 10) * 60 + (uVar3 % 10) * 10); int iVar1 = getTime(); if (mTagSched == NULL) { - mTagSched = (daTagSchedule_c*)param_1; + mTagSched = schedule; } else { u8 uVar4 = mTagSched->getStartTime(); + u16 unusedShort1 = ((uVar4 / 10) * 60) + ((uVar4 % 10) * 10); if (uVar3a > iVar1) { if (uVar3a < uVar4) { - mTagSched = (daTagSchedule_c*)param_1; + mTagSched = schedule; } } else if (uVar3a > uVar4) { - mTagSched = (daTagSchedule_c*)param_1; + mTagSched = schedule; } } } @@ -997,12 +987,16 @@ bool daNpcCdn3_c::searchFirstScheduleTagSub(fopAc_ac_c* param_1) { /* 8097B288-8097B38C 002628 0104+00 2/2 0/0 0/0 .text checkSchedule__11daNpcCdn3_cFv */ void daNpcCdn3_c::checkSchedule() { if (getGroupID() != 0xff && field_0xb88 != NULL) { - u16 rawStartTime = field_0xb88->getStartTime(); + u8 rawStartTime = field_0xb88->getStartTime(); int schedStartTime = (u16)((rawStartTime / 10) * 60 + (rawStartTime % 10) * 10); int currentTime = getTime(); +#if PLATFORM_SHIELD + if (field_0xb88->getWeekNum() == getDayOfWeek() && schedStartTime <= currentTime) { +#else int currentDay = getDayOfWeek(); int schedDay = field_0xb88->getWeekNum(); if (schedDay == currentDay && schedStartTime <= currentTime) { +#endif setSchedule(field_0xb88); field_0xb88 = NULL; setAction(MODE_PATH); @@ -1014,8 +1008,8 @@ void daNpcCdn3_c::checkSchedule() { * setSchedule__11daNpcCdn3_cFP15daTagSchedule_c */ void daNpcCdn3_c::setSchedule(daTagSchedule_c* param_1) { mTagSched = param_1; - int iVar8; if (mTagSched->getPathID() != 0xff) { + int iVar8; if (mTagSched->getStartEnd() == 0) { iVar8 = 1; } else { @@ -1031,19 +1025,21 @@ void daNpcCdn3_c::setSchedule(daTagSchedule_c* param_1) { m_path.setLastPointNum(); } } - u16 startTime = mTagSched->getStartTime(); + u8 startTime = mTagSched->getStartTime(); field_0xb8c = (startTime / 10) * 60 + (startTime % 10) * 10; - mSeqNum = mTagSched->getSeqNum(); + m_seqNum = mTagSched->getSeqNum(); mFlowNodeNum = mTagSched->getFlowNodeNum(); - if (mSeqNum < 0 || mSeqNum >= 44) { - OSReport_Error("城下町の町人 スケジュールタグ設定値異常 引数1モーションシーケンス=%dが異常です。\n", mSeqNum); + if (m_seqNum < 0 || m_seqNum >= 44) { + // "Castle town townspeople schedule tag setting value error + // Argument 1 motion sequence=%d is abnormal" + OSReport_Error("城下町の町人 スケジュールタグ設定値異常 引数1モーションシーケンス=%dが異常です。\n", m_seqNum); JUT_ASSERT(1825, FALSE); } if (mTagSched->getStartEnd() == 0) { current.pos.set(m_path.getPoint(0)); home.pos.set(current.pos); old.pos.set(current.pos); - current.angle.y = cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1)); + current.angle.y = (int)cLib_targetAngleY(m_path.getPoint(0), m_path.getPoint(1)); shape_angle.y = current.angle.y; home.angle.y = current.angle.y; old.angle.y = current.angle.y; @@ -1085,7 +1081,7 @@ void daNpcCdn3_c::setSchedule(daTagSchedule_c* param_1) { OS_REPORT("開始時刻: %s曜日 %d時 %d分\n", dayStr, startTime / 10, (startTime % 10) * 10); OS_REPORT("グループID: %d\n", mTagSched->getGroupID()); OS_REPORT("レールID: %d\n", mTagSched->getPathID()); - OS_REPORT("モーションシーケンス: %d\n", mSeqNum); + OS_REPORT("モーションシーケンス: %d\n", m_seqNum); OS_REPORT("スタート、エンド: %d\n", mTagSched->getStartEnd()); OS_REPORT("メッセージID: %d\n", mFlowNodeNum); } @@ -1101,8 +1097,8 @@ inline bool daNpcCdn3_c::isInShop() { /* 8097B60C-8097B684 0029AC 0078+00 3/3 0/0 0/0 .text isChairStyle__11daNpcCdn3_cFv */ bool daNpcCdn3_c::isChairStyle() { - if (mSeqNum == 15 || mSeqNum == 16 || (mSeqNum == 17 && isM_()) || - mSeqNum == 38 || mSeqNum == 39 || mSeqNum == 40) + if (m_seqNum == 15 || m_seqNum == 16 || (m_seqNum == 17 && isM_()) || + m_seqNum == 38 || m_seqNum == 39 || m_seqNum == 40) { return true; } @@ -1111,8 +1107,8 @@ bool daNpcCdn3_c::isChairStyle() { /* 8097B684-8097B6D0 002A24 004C+00 2/2 0/0 0/0 .text isNoTurnTalk__11daNpcCdn3_cFv */ bool daNpcCdn3_c::isNoTurnTalk() { - if (mSeqNum == 7 || mSeqNum == 8 || mSeqNum == 18 || mSeqNum == 19 || - mSeqNum == 41 || mSeqNum == 42 || mSeqNum == 43) + if (m_seqNum == 7 || m_seqNum == 8 || m_seqNum == 18 || m_seqNum == 19 || + m_seqNum == 41 || m_seqNum == 42 || m_seqNum == 43) { return true; } @@ -1121,273 +1117,293 @@ bool daNpcCdn3_c::isNoTurnTalk() { /* 8097B6D0-8097B754 002A70 0084+00 21/0 0/0 0/0 .text waita__11daNpcCdn3_cFPv */ int daNpcCdn3_c::waita(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097B754-8097B7D8 002AF4 0084+00 15/0 0/0 0/0 .text talka__11daNpcCdn3_cFPv */ int daNpcCdn3_c::talka(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(6, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(6, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097B7D8-8097B85C 002B78 0084+00 3/0 0/0 0/0 .text waitwall__11daNpcCdn3_cFPv */ int daNpcCdn3_c::waitwall(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(11, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(11, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097B85C-8097B8E0 002BFC 0084+00 2/0 0/0 0/0 .text talkwall__11daNpcCdn3_cFPv */ int daNpcCdn3_c::talkwall(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(12, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(12, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097B8E0-8097B964 002C80 0084+00 2/0 0/0 0/0 .text talkbwall__11daNpcCdn3_cFPv */ int daNpcCdn3_c::talkbwall(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(13, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(13, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097B964-8097B9E8 002D04 0084+00 12/0 0/0 0/0 .text talkb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::talkb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(7, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(7, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097B9E8-8097BA6C 002D88 0084+00 4/0 0/0 0/0 .text talkc__11daNpcCdn3_cFPv */ int daNpcCdn3_c::talkc(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(8, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(8, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BA6C-8097BAF0 002E0C 0084+00 2/0 0/0 0/0 .text waitb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::waitb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(1, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(1, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BAF0-8097BB74 002E90 0084+00 3/0 0/0 0/0 .text sitwaita__11daNpcCdn3_cFPv */ int daNpcCdn3_c::sitwaita(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(14, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(14, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BB74-8097BBF8 002F14 0084+00 4/0 0/0 0/0 .text sittalka__11daNpcCdn3_cFPv */ int daNpcCdn3_c::sittalka(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(15, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(15, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BBF8-8097BC7C 002F98 0084+00 4/0 0/0 0/0 .text sittalkab__11daNpcCdn3_cFPv */ int daNpcCdn3_c::sittalkab(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(16, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(16, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BC7C-8097BD00 00301C 0084+00 3/0 0/0 0/0 .text sitwaitb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::sitwaitb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(17, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(17, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BD00-8097BD84 0030A0 0084+00 4/0 0/0 0/0 .text sittalkb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::sittalkb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(18, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(18, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BD84-8097BE08 003124 0084+00 4/0 0/0 0/0 .text sittalkbb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::sittalkbb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(19, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(19, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BE08-8097BE8C 0031A8 0084+00 2/0 0/0 0/0 .text looka__11daNpcCdn3_cFPv */ int daNpcCdn3_c::looka(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(9, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(9, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BE8C-8097BF10 00322C 0084+00 2/0 0/0 0/0 .text lookb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::lookb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(10, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(10, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097BF10-8097C070 0032B0 0160+00 1/0 0/0 0/0 .text playm__11daNpcCdn3_cFPv */ int daNpcCdn3_c::playm(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(34, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - if (isM_()) { - if (getType() == 4) { - mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_1, -1); + if (!isStop()) { + return 0; + } + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(34, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + + if (isM_()) { + if (getType() == 4) { + mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_1, -1); + } else { + if (getType() == 5) { + mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_2, -1); } else { - if (getType() == 5) { - mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_2, -1); - } else { - if (getType() == 6) { - mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_3, -1); - } + if (getType() == 6) { + mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_GT_3, -1); } } - } else { - mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_FLUTE, -1); } - return field_0xaa0 == 0; + } else { + mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_FLUTE, -1); } - return 0; + return field_0xaa0 == 0; } /* 8097C070-8097C12C 003410 00BC+00 1/0 0/0 0/0 .text turnr__11daNpcCdn3_cFPv */ int daNpcCdn3_c::turnr(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xb92 = shape_angle.y - 0x4000; - field_0xb94 = 0; - } - cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 4, 0x2000); - if (abs(field_0xb92 - shape_angle.y) <= 4) { - shape_angle.y = field_0xb92; - return 1; - } + if (!isStop()) { return 0; } + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xb92 = shape_angle.y - 0x4000; + field_0xb94 = 0; + } + cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 4, 0x2000); + if (abs(field_0xb92 - shape_angle.y) <= 4) { + shape_angle.y = field_0xb92; + return 1; + } return 0; } /* 8097C12C-8097C1E8 0034CC 00BC+00 1/0 0/0 0/0 .text turnl__11daNpcCdn3_cFPv */ int daNpcCdn3_c::turnl(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xb92 = shape_angle.y + 0x4000; - field_0xb94 = 0; - } - cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 4, 0x2000); - if (abs(field_0xb92 - shape_angle.y) <= 4) { - shape_angle.y = field_0xb92; - return 1; - } + if (!isStop()) { return 0; } + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(0, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xb92 = shape_angle.y + 0x4000; + field_0xb94 = 0; + } + cLib_addCalcAngleS2(&shape_angle.y, field_0xb92, 4, 0x2000); + if (abs(field_0xb92 - shape_angle.y) <= 4) { + shape_angle.y = field_0xb92; + return 1; + } return 0; } @@ -1421,131 +1437,140 @@ int daNpcCdn3_c::runb(void* param_0) { /* 8097C388-8097C40C 003728 0084+00 3/0 0/0 0/0 .text browsea__11daNpcCdn3_cFPv */ int daNpcCdn3_c::browsea(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(20, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(20, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097C40C-8097C490 0037AC 0084+00 3/0 0/0 0/0 .text browseb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::browseb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(21, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(21, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097C490-8097C5B0 003830 0120+00 1/0 0/0 0/0 .text dance__11daNpcCdn3_cFPv */ int daNpcCdn3_c::dance(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(47, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - if (m_type == 17) { - mCitizen.startCreatureVoiceLevel(Z2SE_WAD_A_MV_DANCE, -1); + if (!isStop()) { + return 0; + } + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(47, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + if (m_type == 17) { + mCitizen.startCreatureVoiceLevel(Z2SE_WAD_A_MV_DANCE, -1); + } else { + if (m_type == 2) { + mCitizen.startCreatureVoiceLevel(Z2SE_MCN_A_V_DANCE, -1); } else { - if (m_type == 2) { - mCitizen.startCreatureVoiceLevel(Z2SE_MCN_A_V_DANCE, -1); - } else { - if (m_type == 26) { - mCitizen.startCreatureVoiceLevel(Z2SE_WCN_A_V_DANCE, -1); - } + if (m_type == 26) { + mCitizen.startCreatureVoiceLevel(Z2SE_WCN_A_V_DANCE, -1); } } - return field_0xaa0 == 0; } - return 0; + return field_0xaa0 == 0; } /* 8097C5B0-8097C634 003950 0084+00 4/0 0/0 0/0 .text ladytalka__11daNpcCdn3_cFPv */ int daNpcCdn3_c::ladytalka(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(48, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(48, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097C634-8097C6B8 0039D4 0084+00 5/0 0/0 0/0 .text ladytalkb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::ladytalkb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(49, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(49, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097C6B8-8097C73C 003A58 0084+00 3/0 0/0 0/0 .text normtalka__11daNpcCdn3_cFPv */ int daNpcCdn3_c::normtalka(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(50, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(50, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097C73C-8097C7C0 003ADC 0084+00 3/0 0/0 0/0 .text normtalkb__11daNpcCdn3_cFPv */ int daNpcCdn3_c::normtalkb(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(51, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(51, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097C7C0-8097C844 003B60 0084+00 1/0 0/0 0/0 .text sellme__11daNpcCdn3_cFPv */ int daNpcCdn3_c::sellme(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(52, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(52, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + return field_0xaa0 == 0; } /* 8097C844-8097C8F0 003BE4 00AC+00 1/0 0/0 0/0 .text sing__11daNpcCdn3_cFPv */ int daNpcCdn3_c::sing(void* param_0) { - if (isStop()) { - if (field_0xb94 != 0) { - setAnm((J3DAnmTransformKey*)getAnmP(53, mObjNum), 1.0f, 12.0f, 2, 0, -1); - field_0xaa0 = 1; - field_0xb94 = 0; - } - mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_VOCAL, -1); - return field_0xaa0 == 0; + if (!isStop()) { + return 0; } - return 0; + + if (field_0xb94 != 0) { + setAnm((J3DAnmTransformKey*)getAnmP(53, mObjNum), 1.0f, 12.0f, 2, 0, -1); + field_0xaa0 = 1; + field_0xb94 = 0; + } + mCitizen.startCreatureVoiceLevel(Z2SE_CSL_TOWN_BAND_VOCAL, -1); + return field_0xaa0 == 0; } /* 8097C8F0-8097C910 003C90 0020+00 1/0 0/0 0/0 .text daNpcCdn3_Create__FPv */ @@ -1553,29 +1578,24 @@ static int daNpcCdn3_Create(void* i_this) { return static_cast(i_this)->create(); } -/* ############################################################################################## */ -/* 8097F5AC-8097F5AC 00006C 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_8097F652 = - "城下町の町人 マップツール設定値異常 引数1モーションシーケンス=%dが異常です。\n"; -#pragma pop - /* 8097C910-8097CC58 003CB0 0348+00 3/1 0/0 0/0 .text create__11daNpcCdn3_cFv */ int daNpcCdn3_c::create() { fopAcM_ct(this, daNpcCdn3_c); mIsDarkWorld = dKy_darkworld_check(); m_type = getType(); mObjNum = getObjNum(); - mSeqNum = getSeqNum(); + m_seqNum = getSeqNum(); mFlowNodeNum = getFlowNodeNum(); - if (mSeqNum < 0 || 44 <= mSeqNum) { - OSReport_Error("城下町の町人 マップツール設定値異常 引数1モーションシーケンス=%dが異常です。\n", mSeqNum); + if (m_seqNum < 0 || 44 <= m_seqNum) { + OSReport_Error("城下町の町人 マップツール設定値異常 引数1モーションシーケンス=%dが異常です。\n", m_seqNum); JUT_ASSERT(175, FALSE); } int rv = loadResrc(m_type, mObjNum); if (rv == cPhs_COMPLEATE_e) { - if (fopAcM_entrySolidHeap(this, createHeapCallBack, 0x80002890) == 0) { + int msb = 0x80000000; + int heapSize = 0x2890; + heapSize |= msb; + if (fopAcM_entrySolidHeap(this, createHeapCallBack, heapSize) == 0) { OS_REPORT("アクター生成失敗しました!\n"); return cPhs_ERROR_e; } @@ -1586,14 +1606,15 @@ int daNpcCdn3_c::create() { /* 8097CC58-8097D078 003FF8 0420+00 1/1 0/0 0/0 .text create_init__11daNpcCdn3_cFv */ void daNpcCdn3_c::create_init() { +#if DEBUG + l_Cd2_HIO.entryHIO("NPC(C級,D級)HighPoly"); +#endif + gravity = -3.0f; initTimeSchedule(); fopAcM_SetMtx(this, mpMorf->getModel()->getBaseTRMtx()); - fopAcM_setCullSizeBox(this, -40.0f, -10.0f, -40.0f, 40.0f, 190.0f, - 40.0f); - f32 chkWallR = Cd2_HIO_chkWallR(m_type); - f32 chkWallH = Cd2_HIO_chkWallH(m_type); - mAcchCir.SetWall(chkWallH, chkWallR); + fopAcM_setCullSizeBox(this, -40.0f, -10.0f, -40.0f, 40.0f, 190.0f, 40.0f); + mAcchCir.SetWall(Cd2_HIO_chkWallH(m_type), Cd2_HIO_chkWallR(m_type)); 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(); @@ -1623,9 +1644,7 @@ void daNpcCdn3_c::create_init() { } mpMorf->setMorf(0.0f); - f32 gnd = mAcch.GetGroundH(); - current.pos.y = gnd; - field_0xb64 = gnd; + field_0xb64 = current.pos.y = mAcch.GetGroundH(); setMtx(); } @@ -1644,17 +1663,16 @@ void daNpcCdn3_c::setMtx() { } /* 8097D120-8097D614 0044C0 04F4+00 1/1 0/0 0/0 .text lookat__11daNpcCdn3_cFv */ -// NONMATCHING - r3 init order + regalloc void daNpcCdn3_c::lookat() { csXyz vecs1[3] = { - csXyz((s32)Cd2_HIO_maxLmtX_BACKBONE(m_type), (s32)Cd2_HIO_maxLmtY_BACKBONE(m_type), 0), - csXyz((s32)Cd2_HIO_maxLmtX_NECK(m_type), (s32)Cd2_HIO_maxLmtY_NECK(m_type), 0), - csXyz((s32)Cd2_HIO_maxLmtX_HEAD(m_type), (s32)Cd2_HIO_maxLmtY_HEAD(m_type), 0), + csXyz(Cd2_HIO_maxLmtX_BACKBONE(m_type), Cd2_HIO_maxLmtY_BACKBONE(m_type), 0), + csXyz(Cd2_HIO_maxLmtX_NECK(m_type), Cd2_HIO_maxLmtY_NECK(m_type), 0), + csXyz(Cd2_HIO_maxLmtX_HEAD(m_type), Cd2_HIO_maxLmtY_HEAD(m_type), 0), }; csXyz vecs2[3] = { - csXyz((s32)Cd2_HIO_minLmtX_BACKBONE(m_type), (s32)Cd2_HIO_minLmtY_BACKBONE(m_type), 0), - csXyz((s32)Cd2_HIO_minLmtX_NECK(m_type), (s32)Cd2_HIO_minLmtY_NECK(m_type), 0), - csXyz((s32)Cd2_HIO_minLmtX_HEAD(m_type), (s32)Cd2_HIO_minLmtY_HEAD(m_type), 0), + csXyz(Cd2_HIO_minLmtX_BACKBONE(m_type), Cd2_HIO_minLmtY_BACKBONE(m_type), 0), + csXyz(Cd2_HIO_minLmtX_NECK(m_type), Cd2_HIO_minLmtY_NECK(m_type), 0), + csXyz(Cd2_HIO_minLmtX_HEAD(m_type), Cd2_HIO_minLmtY_HEAD(m_type), 0), }; int local_68[4]; cXyz cStack_80(cXyz::Zero); @@ -1669,7 +1687,7 @@ void daNpcCdn3_c::lookat() { local_68[2] = 3; local_68[3] = -1; } - mLookat.init(mpMorf->getModel(), local_68, &vecs1[0], &vecs2[0]); + mLookat.init(mpMorf->getModel(), local_68, vecs1, vecs2); Mtx afStack_38; if (m_targetAct.getActorP() != NULL) { cMtx_copy(mpMorf->getModel()->getBaseTRMtx(), afStack_38); @@ -1678,7 +1696,7 @@ void daNpcCdn3_c::lookat() { cMtx_copy(mpMorf->getModel()->getBaseTRMtx(), afStack_38); cStack_80 = cXyz::Zero; } - mLookat.action(cStack_80, eyePos, this, afStack_38, m_targetAct.getActorP() != NULL); + mLookat.action(cStack_80, eyePos, this, afStack_38, NULL != m_targetAct.getActorP()); } /* 8097D650-8097D684 0049F0 0034+00 1/0 0/0 0/0 .text daNpcCdn3_Delete__FPv */ @@ -1693,6 +1711,10 @@ daNpcCdn3_c::~daNpcCdn3_c() { if (heap != NULL) { mpMorf->stopZelAnime(); } + +#if DEBUG + l_Cd2_HIO.removeHIO(this); +#endif } /* 8097D728-8097D748 004AC8 0020+00 1/0 0/0 0/0 .text daNpcCdn3_Execute__FPv */ @@ -1735,9 +1757,9 @@ int daNpcCdn3_c::execute() { inline bool daNpcCdn3_c::searchFirstScheduleTag() { field_0xb88 = NULL; - fpcM_Search(s_sub2, this); + base_process_class* unusedSearchResult = fpcM_Search(s_sub2, this); if (mTagSched != NULL) { - mTagSched->setWeekNum((u32)getDayOfWeek() % 7); + mTagSched->setWeekNum(getDayOfWeek()); } return mTagSched != NULL; } @@ -1747,15 +1769,13 @@ inline bool daNpcCdn3_c::searchNextScheduleTag() { return 0; } field_0xb88 = 0; - fpcM_Search(s_sub1, this); + base_process_class* unusedSearchResult = fpcM_Search(s_sub1, this); if (field_0xb88 != 0) { u32 uVar2 = mTagSched->getWeekNum(); - u32 bVar3 = mTagSched->getStartTime(); - u32 bVar4 = field_0xb88->getStartTime(); - if (bVar4 <= bVar3) { + if (field_0xb88->getStartTime() <= mTagSched->getStartTime()) { uVar2 = (uVar2 + 1) % 7; } - field_0xb88->setWeekNum(uVar2 % 7); + field_0xb88->setWeekNum(uVar2); } return field_0xb88 != NULL; } @@ -1797,9 +1817,13 @@ void daNpcCdn3_c::checkTimeSchedule() { } } } else if (field_0xb95 != 0 && mTagSched->getStartEnd() != 1) { +#if PLATFORM_SHIELD + if (mTagSched->getWeekNum() == getDayOfWeek() && field_0xb8c <= iVar2) { +#else int day = getDayOfWeek(); int weekNum = mTagSched->getWeekNum(); if (weekNum == day && field_0xb8c <= iVar2) { +#endif field_0xb95 = 0; } } diff --git a/src/d/actor/d_a_obj_cblock.cpp b/src/d/actor/d_a_obj_cblock.cpp index 003e0fd145..9a3ce450bc 100644 --- a/src/d/actor/d_a_obj_cblock.cpp +++ b/src/d/actor/d_a_obj_cblock.cpp @@ -5,25 +5,50 @@ #include "d/dolzel_rel.h" // IWYU pragma: keep +#include "Z2AudioLib/Z2Instances.h" #include "d/actor/d_a_obj_cblock.h" +#include "d/actor/d_a_player.h" #include "d/d_cc_d.h" #include "d/d_path.h" -#include "d/actor/d_a_player.h" -#include "Z2AudioLib/Z2Instances.h" +#include "d/d_s_play.h" -/* 80BC5A0C-80BC5A48 0000EC 003C+00 1/1 0/0 0/0 .text initBaseMtx__11daObjCBlk_cFv */ -void daObjCBlk_c::initBaseMtx() { - model1->setBaseScale(scale); - setBaseMtx(); -} +#if DEBUG +#define TRAVEL_TIME (l_HIO.mTravelTime) +#define TRAVEL_DIST (l_HIO.mTravelDist) +#else +#define TRAVEL_TIME (13) +#define TRAVEL_DIST (50.0f) +#endif -/* 80BC5A48-80BC5ABC 000128 0074+00 1/1 0/0 0/0 .text setBaseMtx__11daObjCBlk_cFv */ -void daObjCBlk_c::setBaseMtx() { - mDoMtx_stack_c::transS(current.pos.x, current.pos.y,current.pos.z); - mDoMtx_stack_c::YrotM(shape_angle.y); - model1->setBaseTRMtx(mDoMtx_stack_c::get()); - MTXCopy(mDoMtx_stack_c::get(), mBgMtx); -} +class daObjCBlk_HIO_c : public mDoHIO_entry_c { +public: + daObjCBlk_HIO_c(); + virtual ~daObjCBlk_HIO_c() {} + +#if DEBUG + void genMessage(JORMContext*); +#endif + + /* 0x06 */ u8 field_0x06; + /* 0x07 */ u8 field_0x07; + /* 0x08 */ u8 mWaitTime; + /* 0x09 */ u8 mTravelTime; + /* 0x0C */ f32 mGravity; + /* 0x10 */ f32 mTravelDist; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 field_0x18; + /* 0x1C */ f32 field_0x1c; +}; + +/* 80BC6C9C-80BC6CA8 000054 000C+00 1/2 0/0 0/0 .bss l_chainOffset */ +static cXyz l_chainOffset(0.0f, 105.0f, 30.0f); + +/* 80BC6CB4-80BC6CC4 00006C 000C+04 0/1 0/0 0/0 .bss l_smokeSetOffset */ +static cXyz l_smokeSetOffset(0.0f, 0.0f, -200.0f); + +#if !DEBUG +static s32 unused_bss_70 = 0; +#endif /* ############################################################################################## */ /* 80BC6A38-80BC6A50 000000 0018+00 5/5 0/0 0/0 .rodata l_cull_box */ @@ -51,12 +76,55 @@ static dCcD_SrcCyl l_cyl_src = { {0x0}, // mGObjCo }, // mObjInf { - {0.0f, 0.0f, 0.0f}, // mCenter - 60.0f, // mRadius - 300.0f // mHeight - } // mCyl + {0.0f, 0.0f, 0.0f}, // mCenter + 60.0f, // mRadius + 300.0f // mHeight + } // mCyl }; +#if DEBUG +daObjCBlk_HIO_c::daObjCBlk_HIO_c() { + field_0x06 = 0; + field_0x07 = 0; + mGravity = -6.0f; + mTravelDist = 50.0f; + mTravelTime = 13; + mWaitTime = 8; + field_0x14 = 35.0f; + field_0x18 = 35.0f; + field_0x1c = 15.0f; +} + +static f32 dummy1() { + return 15.0f; +} + +void daObjCBlk_HIO_c::genMessage(JORMContext* ctx) { + // "Chained block" + ctx->genLabel("チェーン付きブロック", 0, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("重力", &mGravity, -10.0f, -0.1f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("移動時間", &mTravelTime, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("タメ時間", &mWaitTime, 0.0f, 10.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); + ctx->genSlider("移動距離", &mTravelDist, 0.0f, 100.0f, 0, NULL, 0xffff, 0xffff, 0x200, 0x18); +} + +static daObjCBlk_HIO_c l_HIO; +#endif + +/* 80BC5A0C-80BC5A48 0000EC 003C+00 1/1 0/0 0/0 .text initBaseMtx__11daObjCBlk_cFv */ +void daObjCBlk_c::initBaseMtx() { + model1->setBaseScale(scale); + setBaseMtx(); +} + +/* 80BC5A48-80BC5ABC 000128 0074+00 1/1 0/0 0/0 .text setBaseMtx__11daObjCBlk_cFv */ +void daObjCBlk_c::setBaseMtx() { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y,current.pos.z); + mDoMtx_stack_c::YrotM(shape_angle.y); + model1->setBaseTRMtx(mDoMtx_stack_c::get()); + MTXCopy(mDoMtx_stack_c::get(), mBgMtx); +} + /* 80BC5ABC-80BC5CBC 00019C 0200+00 1/0 0/0 0/0 .text Create__11daObjCBlk_cFv */ int daObjCBlk_c::Create() { u8 pathId = getPathID(); @@ -138,13 +206,6 @@ daObjCBlk_c::chain_s::~chain_s() { daObjCBlk_c::chain_s::chain_s() { } -static inline void dummylfunc() { - static daObjCBlk_c::modeFunc l_func[2] = { - &daObjCBlk_c::modeWait, - &daObjCBlk_c::modeWalk, - }; -} - /* 80BC5E98-80BC6020 000578 0188+00 1/1 0/0 0/0 .text create__11daObjCBlk_cFv */ int daObjCBlk_c::create() { fopAcM_ct(this, daObjCBlk_c); @@ -155,6 +216,10 @@ int daObjCBlk_c::create() { return rv; } OS_REPORT("CHAIN BLOCK:%x\n", fopAcM_GetParam(this)); + +#if DEBUG + l_HIO.entryHIO("チェーン付きブロック"); +#endif } return rv; } @@ -165,6 +230,21 @@ int daObjCBlk_c::Execute(f32 (**mtx)[3][4]) { return 1; } +void daObjCBlk_c::block_mode_proc_call() { + static modeFunc l_func[2] = { + &daObjCBlk_c::modeWait, + &daObjCBlk_c::modeWalk, + }; + (this->*(l_func[field_0xc1e]))(); +} + +#if DEBUG +static void dummy5() { + OS_REPORT("Delete -> ChainBlock(id=%d)\n"); + OS_REPORT("Create -> ChainBlock(id=%d)\n"); +} +#endif + /* 80BC6270-80BC627C 000950 000C+00 2/2 0/0 0/0 .text initWait__11daObjCBlk_cFv */ void daObjCBlk_c::initWait() { field_0xc1f = 0; @@ -183,18 +263,23 @@ void daObjCBlk_c::modeWait() { mDoMtx_stack_c::multVec(&cStack_44, &cStack_44); cStack_38.normalizeZP(); cStack_44.normalizeZP(); - f32 dVar7 = fabs(cStack_38.inprod(cStack_44)); - if (dVar7 > 0.95000005f) { + f32 inprod = cStack_38.inprod(cStack_44); + if (std::fabs(inprod) > 0.95000005f + KREG_F(4)) { bVar1 = true; } if (field_0xc1c != 0 && field_0xc1e != 0) { setPower(power); if (bVar1) { field_0xca3++; - if (!checkWall() && player->getBaseAnimeFrame() > 6.0f && player->getBaseAnimeFrame() < 8.0f && - field_0xca3 > 8) + if (!checkWall() && player->getBaseAnimeFrame() > 6.0f && player->getBaseAnimeFrame() < 8.0f) { - initWalk(); +#if DEBUG + if (field_0xca3 > l_HIO.mWaitTime) { +#else + if (field_0xca3 > 8) { +#endif + initWalk(); + } } } } else { @@ -204,21 +289,24 @@ void daObjCBlk_c::modeWait() { /* 80BC6414-80BC6430 000AF4 001C+00 1/1 0/0 0/0 .text initWalk__11daObjCBlk_cFv */ void daObjCBlk_c::initWalk() { - walkTimer = 13; - field_0xca6 = 2520; + u8 travelTime = TRAVEL_TIME; + walkTimer = travelTime; + field_0xca6 = 0x7fff / travelTime; field_0xc1f = 1; } /* 80BC6430-80BC65CC 000B10 019C+00 1/0 0/0 0/0 .text modeWalk__11daObjCBlk_cFv */ void daObjCBlk_c::modeWalk() { + u8 travelTime = TRAVEL_TIME; + f32 travelDist = TRAVEL_DIST; + cLib_calcTimer(&walkTimer); - f32 dVar5 = cM_scos(field_0xca6 * (13 - walkTimer)); - dVar5 = (1.0f - dVar5) * 0.5f; + f32 dVar5 = (1.0f - cM_scos(field_0xca6 * (travelTime - walkTimer))) * 0.5f; cXyz local_58(0.0f, 0.0f, 1.0f); mDoMtx_stack_c::YrotS(home.angle.y); mDoMtx_stack_c::multVec(&local_58, &local_58); - current.pos.x = home.pos.x + local_58.x * (50.0f * (field_0xca2 + dVar5)); - current.pos.z = home.pos.z + local_58.z * (50.0f * (field_0xca2 + dVar5)); + current.pos.x = home.pos.x + local_58.x * (travelDist * (field_0xca2 + dVar5)); + current.pos.z = home.pos.z + local_58.z * (travelDist * (field_0xca2 + dVar5)); setPower(power); fopAcM_seStartLevel(this, Z2SE_OBJ_CBLOCK_SLIDEMOVE, 0); if (walkTimer == 0) { @@ -227,9 +315,6 @@ void daObjCBlk_c::modeWalk() { } } -/* 80BC6C9C-80BC6CA8 000054 000C+00 1/2 0/0 0/0 .bss l_chainOffset */ -static cXyz l_chainOffset(0.0f, 105.0f, 30.0f); - /* 80BC65CC-80BC6648 000CAC 007C+00 2/2 0/0 0/0 .text getChainBasePos__11daObjCBlk_cFP4cXyz */ void daObjCBlk_c::getChainBasePos(cXyz* pPos) { *pPos = l_chainOffset; @@ -241,24 +326,36 @@ void daObjCBlk_c::getChainBasePos(cXyz* pPos) { /* 80BC6648-80BC66DC 000D28 0094+00 2/2 0/0 0/0 .text setPower__11daObjCBlk_cFf */ void daObjCBlk_c::setPower(f32 power) { daPy_py_c* player = daPy_getPlayerActorClass(); - chain_s* pChain = chains; + chain_s* pChain = chains + 5; cXyz local_28; - local_28 = pChain[4].position - pChain[5].position; + local_28 = pChain[-1].position - pChain[0].position; s16 angle = cM_atan2s(local_28.x, local_28.z); player->setOutPower(power, angle, 0); } -static f32 dummy() { +static f32 dummy2() { f32 f0 = -6.0f; +#if DEBUG + f32 f1 = 3.0f / 20.0f; +#else f32 f1 = 3.0f / 40.0f; +#endif f32 f2 = 100.0f; f32 f3 = 15.0f; f32 f4 = 35.0f; +#if DEBUG + f32 f5 = 5.0f; + f32 f6 = 0.0f; + f32 f7 = 0.0f; + f32 f8 = 0.0f; + f32 f9 = 0.0f; +#else f64 f5 = 0.5; f64 f6 = 3.0; f64 f7 = 0.0; f32 f8 = 195.0f; f32 f9 = 210.0f; +#endif return f0 + f1 * (f2 - f3 * (f4 - f5 * (f6 - f7 * f8 - (f7 - f9)))); } @@ -266,7 +363,7 @@ static f32 dummy() { BOOL daObjCBlk_c::checkWall() { cXyz acStack_30[2] = {cXyz(-95.0f, 5.0f, 1.0f), cXyz(95.0f, 5.0f, 1.0f)}; cXyz cStack_40(0.0f, 0.0f, 1.0f); - cStack_40.z = 50.0f; + cStack_40.z = TRAVEL_DIST; BOOL rv = FALSE; for (int i = 0; i < 2; i++) { cXyz cStack_4c(acStack_30[i]); @@ -276,6 +373,10 @@ BOOL daObjCBlk_c::checkWall() { cStack_4c += current.pos; mDoMtx_stack_c::multVec(&cStack_58, &cStack_58); cStack_58 += cStack_4c; +#if DEBUG + field_0xcb0_debug[i] = cStack_4c; + field_0xcc8_debug[i] = cStack_58; +#endif if (fopAcM_lc_c::lineCheck(&cStack_4c, &cStack_58, this)) { rv = TRUE; } @@ -291,6 +392,9 @@ int daObjCBlk_c::Draw() { /* 80BC6870-80BC68A4 000F50 0034+00 1/0 0/0 0/0 .text Delete__11daObjCBlk_cFv */ int daObjCBlk_c::Delete() { dComIfG_resDelete(&phase, l_arcName); +#if DEBUG + l_HIO.removeHIO(); +#endif return 1; } @@ -308,19 +412,24 @@ static int daObjCBlk_Execute(daObjCBlk_c* i_this) { /* 80BC68F0-80BC6910 000FD0 0020+00 1/0 0/0 0/0 .text daObjCBlk_Delete__FP11daObjCBlk_c */ static int daObjCBlk_Delete(daObjCBlk_c* i_this) { + fpc_ProcID unusedId = fopAcM_GetID(i_this); return i_this->MoveBGDelete(); } /* 80BC6910-80BC6930 000FF0 0020+00 1/0 0/0 0/0 .text daObjCBlk_Create__FP10fopAc_ac_c */ static int daObjCBlk_Create(fopAc_ac_c* i_this) { - fopAcM_GetID(i_this); - return static_cast(i_this)->create(); + daObjCBlk_c* cblock = static_cast(i_this); + fpc_ProcID unusedId = fopAcM_GetID(i_this); + return cblock->create(); } -/* 80BC6CB4-80BC6CC4 00006C 000C+04 0/1 0/0 0/0 .bss l_smokeSetOffset */ -static cXyz l_smokeSetOffset(0.0f, 0.0f, -200.0f); - -static s32 unused_bss_70 = 0; +#if DEBUG +static const u32 dummy3[3] = { + 0xff0000ff, + 0x0000ffff, + 0x00ff00ff, +}; +#endif AUDIO_INSTANCES; diff --git a/src/d/actor/d_a_obj_lv7PropellerY.cpp b/src/d/actor/d_a_obj_lv7PropellerY.cpp index 44b4183a1d..1cc854cffa 100644 --- a/src/d/actor/d_a_obj_lv7PropellerY.cpp +++ b/src/d/actor/d_a_obj_lv7PropellerY.cpp @@ -255,7 +255,6 @@ void daPropY_c::init_modeStop() { } /* 80C85DD0-80C85F14 000A50 0144+00 1/0 0/0 0/0 .text modeStop__9daPropY_cFv */ -// NONMATCHING - fsubs instead of fsub void daPropY_c::modeStop() { s16 var_r30; if (mTurnType == 0) { @@ -264,7 +263,12 @@ void daPropY_c::modeStop() { var_r30 = cLib_addCalcAngleS(&shape_angle.y, field_0x5b6, 1, (182.04445f * fopAcM_GetSpeedF(this)), 1); } + // probably not a real version difference - GCN has fsub for some reason instead of fsubs +#if PLATFORM_GCN + field_0x5c4 = field_0x5c0 * ((f32)std::fabs((f64)var_r30) / field_0x5bc); +#else field_0x5c4 = field_0x5c0 * (std::fabs((f32)var_r30) / field_0x5bc); +#endif mDoAud_seStartLevel(Z2SE_OBJ_AMI_ROLL, ¤t.pos, field_0x5c4, dComIfGp_getReverb(fopAcM_GetRoomNo(this))); if (var_r30 == 0) { diff --git a/src/d/actor/d_a_obj_lv7bridge.cpp b/src/d/actor/d_a_obj_lv7bridge.cpp index d390f1469d..6db7d96ada 100644 --- a/src/d/actor/d_a_obj_lv7bridge.cpp +++ b/src/d/actor/d_a_obj_lv7bridge.cpp @@ -9,6 +9,29 @@ #include "d/actor/d_a_obj_swspinner.h" #include "d/d_s_play.h" +#if DEBUG +class daObjLv7Brg_HIO_c : public JORReflexible { +public: + daObjLv7Brg_HIO_c(); + virtual ~daObjLv7Brg_HIO_c() {} + + void genMessage(JORMContext*); + + u8 field_0x04[0x08 - 0x04]; + f32 field_0x08; + f32 field_0x0c; +}; + +daObjLv7Brg_HIO_c::daObjLv7Brg_HIO_c() { +} + +void daObjLv7Brg_HIO_c::genMessage(JORMContext* ctx) { + // NONMATCHING +} + +static daObjLv7Brg_HIO_c l_HIO; +#endif + /* 80C86378-80C863EC 000078 0074+00 1/1 0/0 0/0 .text searchSwSpinner__FPvPv */ static void* searchSwSpinner(void* i_actor, void* i_data) { fopAc_ac_c* swspinner = (fopAc_ac_c*)i_actor; @@ -329,19 +352,32 @@ void daObjLv7Brg_c::mode_action() { if (5100.0f == field_0xa78) { var_f31 = 0.0f; } else { +#if DEBUG + var_f31 = l_HIO.field_0x08; +#else var_f31 = 30.0f; +#endif } } else if (0.0f == field_0xa78) { var_f31 = 0.0f; } else { +#if DEBUG + var_f31 = -l_HIO.field_0x0c; +#else var_f31 = -45.0f; +#endif } cLib_addCalc(&speedF, var_f31, 0.02f, 1.0f, 0.1f); field_0xa78 += speedF; if (0.0f != speedF) { - fopAcM_seStartLevel(this, 0x8025F, (127.0f * speedF) / 30.0f); +#if DEBUG + u32 var_r28 = 127.0f * speedF / l_HIO.field_0x08; +#else + u32 var_r28 = 127.0f * speedF / 30.0f; +#endif + fopAcM_seStartLevel(this, 0x8025F, var_r28); } if (0.0f != speedF && 0.0f == temp_f29) { diff --git a/src/d/actor/d_a_obj_ss_item.cpp b/src/d/actor/d_a_obj_ss_item.cpp index 3d12397408..0f063e19c7 100644 --- a/src/d/actor/d_a_obj_ss_item.cpp +++ b/src/d/actor/d_a_obj_ss_item.cpp @@ -336,6 +336,47 @@ int daObj_SSItem_c::wait(void* param_0) { } } +int daObj_SSItem_c::buy(void* param_0) { + switch (mEventType) { + case 0: + break; + case 1: + dComIfGp_event_reset(); + + if (getParentPtr() != NULL) { + ((daMyna_c *)getParentPtr())->deleteItem(fopAcM_GetID(this)); + } + + fopAcM_delete(this); + break; + case 2: + break; + } + + return 1; +} + +int daObj_SSItem_c::cancel(void* param_0) { + switch (mEventType) { + case 0: + break; + case 1: + if (field_0xAFC == 0) { + dComIfGp_event_reset(); + + current.pos.set(field_0xAF0); + + setProcess(&daObj_SSItem_c::wait); + } + + break; + case 2: + break; + } + + return 1; +} + /* 80CE7D8C-80CE7DAC 0011EC 0020+00 1/0 0/0 0/0 .text daObj_SSItem_Create__FPv */ static int daObj_SSItem_Create(void* i_this) { return static_cast(i_this)->create(); diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 9f54014c35..579add2f41 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -410,37 +410,40 @@ static void dummy2() { J3DTevOrder tevOrder; J3DTevSwapModeTable tevSwapModeTable; J3DIndTexOrder indTexOrder; - J3DIndTexMtx indTexMtx; - J3DIndTexCoordScale indTexCoordScale; + + J3DTevStage* tevStage_p; + J3DTevStageInfo tevStageInfo; + tevStage_p->setTevStageInfo(tevStageInfo); + J3DTevStage tevStage; J3DColorBlock* colorBlock = NULL; - colorBlock->setColorChanNum((const u8*)NULL); + colorBlock->setColorChanNum((u8)NULL); colorBlock->setMatColor(0, gxColor); colorBlock->setColorChan(0, colorChan); colorBlock->setAmbColor(0, gxColor); J3DTexGenBlock* texGenBlock = NULL; - texGenBlock->setTexGenNum((const u32*)NULL); + texGenBlock->setTexGenNum((u32)NULL); texGenBlock->setTexCoord(0, NULL); J3DTevBlock* tevBlock = NULL; - tevBlock->setTevStageNum((const u8*)NULL); + tevBlock->setTevStageNum((u8)0); tevBlock->setTevColor(0, J3DGXColorS10()); tevBlock->setTevKColor(0, gxColor); tevBlock->setTevOrder(0, tevOrder); - tevBlock->setTevKColorSel(0, (const u8*)NULL); - tevBlock->setTevKAlphaSel(0, (const u8*)NULL); + tevBlock->setTevKColorSel(0, (u8)0); + tevBlock->setTevKAlphaSel(0, (u8)0); tevBlock->setTevSwapModeTable(0, tevSwapModeTable); - tevBlock->setTexNo(0, (const u16*)NULL); - J3DTevStage tevStage; + tevBlock->setTexNo(0, (u16)0); tevBlock->setTevStage(0, tevStage); tevBlock->setIndTevStage(0, indTevStage); J3DIndBlock* indBlock = NULL; indBlock->setIndTexStageNum(0); + J3DIndTexMtx indTexMtx; indBlock->setIndTexMtx(0, indTexMtx); + J3DIndTexCoordScale indTexCoordScale; indBlock->setIndTexCoordScale(0, indTexCoordScale); - indTexCoordScale.~J3DIndTexCoordScale(); J3DPEBlock* peBlock = NULL; J3DAlphaComp alphaComp; @@ -450,7 +453,7 @@ static void dummy2() { J3DZMode zMode; peBlock->setZMode(zMode); u8 compLoc; - peBlock->setZCompLoc(&compLoc); + peBlock->setZCompLoc(compLoc); colorBlock->getColorChanNum(); colorBlock->getMatColor(0);