From 18fb9de306d63199cef8e2320cd901f5bf3b3315 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Tue, 6 May 2025 22:58:20 -0400 Subject: [PATCH 01/31] d_cam_type OK for JPN, add style enum, fix pystts1 enum --- configure.py | 2 +- include/d/d_cam_param.h | 238 ++++++++++++++--- include/d/d_camera.h | 2 +- include/d/d_com_inf_game.h | 12 - src/d/d_cam_param.cpp | 2 +- src/d/d_cam_style.cpp | 288 ++++++++++---------- src/d/d_cam_type.cpp | 524 +++++++++++++++++++------------------ src/d/d_camera.cpp | 102 ++++---- 8 files changed, 663 insertions(+), 507 deletions(-) diff --git a/configure.py b/configure.py index 363ff3fe0..774d0de5f 100755 --- a/configure.py +++ b/configure.py @@ -500,7 +500,7 @@ config.libs = [ Object(Matching, "d/d_cc_s.cpp"), Object(Matching, "d/d_cc_uty.cpp"), Object(NonMatching, "d/d_cam_param.cpp"), - Object(MatchingFor("GZLE01", "GZLP01"), "d/d_cam_type.cpp"), + Object(Matching, "d/d_cam_type.cpp"), Object(Matching, "d/d_cam_style.cpp"), Object(Matching, "d/d_cam_type2.cpp"), Object(NonMatching, "d/d_ev_camera.cpp"), diff --git a/include/d/d_cam_param.h b/include/d/d_cam_param.h index 8df903861..384fb1293 100644 --- a/include/d/d_cam_param.h +++ b/include/d/d_cam_param.h @@ -4,51 +4,209 @@ #include "dolphin/types.h" #include "SSystem/SComponent/c_angle.h" +enum dCamStyle_e { + dCamStyle_NONE_e = -1, + /* 0x00 */ dCamStyle_NN00_e, + /* 0x01 */ dCamStyle_FN08_e, + /* 0x02 */ dCamStyle_PN05_e, + /* 0x03 */ dCamStyle_PN12_e, + /* 0x04 */ dCamStyle_EN00_e, + /* 0x05 */ dCamStyle_FN12_e, + /* 0x06 */ dCamStyle_TT01_e, + /* 0x07 */ dCamStyle_TT02_e, + /* 0x08 */ dCamStyle_TT03_e, + /* 0x09 */ dCamStyle_LA03_e, + /* 0x0A */ dCamStyle_LP01_e, + /* 0x0B */ dCamStyle_LA02_e, + /* 0x0C */ dCamStyle_FN13_e, + /* 0x0D */ dCamStyle_LH01_e, + /* 0x0E */ dCamStyle_LH02_e, + /* 0x0F */ dCamStyle_LB02_e, + /* 0x10 */ dCamStyle_LP02_e, + /* 0x11 */ dCamStyle_LP03_e, + /* 0x12 */ dCamStyle_LP04_e, + /* 0x13 */ dCamStyle_CC01_e, + /* 0x14 */ dCamStyle_CC02_e, + /* 0x15 */ dCamStyle_LL06_e, + /* 0x16 */ dCamStyle_LL08_e, + /* 0x17 */ dCamStyle_LL07_e, + /* 0x18 */ dCamStyle_LP10_e, + /* 0x19 */ dCamStyle_SN15_e, + /* 0x1A */ dCamStyle_BW07_e, + /* 0x1B */ dCamStyle_FN18_e, + /* 0x1C */ dCamStyle_JN05_e, + /* 0x1D */ dCamStyle_XN06_e, + /* 0x1E */ dCamStyle_LB01_e, + /* 0x1F */ dCamStyle_LA01_e, + /* 0x20 */ dCamStyle_BP07_e, + /* 0x21 */ dCamStyle_LW02_e, + /* 0x22 */ dCamStyle_HP16_e, + /* 0x23 */ dCamStyle_HN16_e, + /* 0x24 */ dCamStyle_BN07_e, + /* 0x25 */ dCamStyle_LP05_e, + /* 0x26 */ dCamStyle_LP06_e, + /* 0x27 */ dCamStyle_HN18_e, + /* 0x28 */ dCamStyle_FN25_e, + /* 0x29 */ dCamStyle_BP08_e, + /* 0x2A */ dCamStyle_BN08_e, + /* 0x2B */ dCamStyle_FN29_e, + /* 0x2C */ dCamStyle_SX01_e, + /* 0x2D */ dCamStyle_SY01_e, + /* 0x2E */ dCamStyle_SX02_e, + /* 0x2F */ dCamStyle_MM06_e, + /* 0x30 */ dCamStyle_MM05_e, + /* 0x31 */ dCamStyle_MM09_e, + /* 0x32 */ dCamStyle_MM04_e, + /* 0x33 */ dCamStyle_LN17_e, + /* 0x34 */ dCamStyle_QN07_e, + /* 0x35 */ dCamStyle_LE01_e, + /* 0x36 */ dCamStyle_LN01_e, + /* 0x37 */ dCamStyle_LW01_e, + /* 0x38 */ dCamStyle_GN01_e, + /* 0x39 */ dCamStyle_MM01_e, +#if VERSION == VERSION_JPN + dCamStyle_MM03_e, +#endif + /* Value comments below are for USA/PAL */ + /* 0x3A */ dCamStyle_MM02_e, + /* 0x3B */ dCamStyle_MM10_e, + /* 0x3C */ dCamStyle_MM08_e, + /* 0x3D */ dCamStyle_MM83_e, + /* 0x3E */ dCamStyle_FP01_e, + /* 0x3F */ dCamStyle_ZZ00_e, + /* 0x40 */ dCamStyle_PN13_e, + /* 0x41 */ dCamStyle_FN82_e, + /* 0x42 */ dCamStyle_IN01_e, + /* 0x43 */ dCamStyle_IN02_e, + /* 0x44 */ dCamStyle_MM82_e, + /* 0x45 */ dCamStyle_LL11_e, + /* 0x46 */ dCamStyle_LL01_e, + /* 0x47 */ dCamStyle_LL02_e, + /* 0x48 */ dCamStyle_LL03_e, + /* 0x49 */ dCamStyle_LL04_e, + /* 0x4A */ dCamStyle_LL05_e, + /* 0x4B */ dCamStyle_LL10_e, + /* 0x4C */ dCamStyle_LL09_e, + /* 0x4D */ dCamStyle_LL12_e, + /* 0x4E */ dCamStyle_LL13_e, + /* 0x4F */ dCamStyle_LL14_e, + /* 0x50 */ dCamStyle_LL15_e, + /* 0x51 */ dCamStyle_LL16_e, + /* 0x52 */ dCamStyle_LL82_e, + /* 0x53 */ dCamStyle_FN01_e, + /* 0x54 */ dCamStyle_FN02_e, + /* 0x55 */ dCamStyle_FN03_e, + /* 0x56 */ dCamStyle_FN04_e, + /* 0x57 */ dCamStyle_FN06_e, + /* 0x58 */ dCamStyle_FN09_e, + /* 0x59 */ dCamStyle_FN07_e, + /* 0x5A */ dCamStyle_FN10_e, + /* 0x5B */ dCamStyle_FN14_e, + /* 0x5C */ dCamStyle_FN15_e, + /* 0x5D */ dCamStyle_FN17_e, + /* 0x5E */ dCamStyle_FN20_e, + /* 0x5F */ dCamStyle_FN21_e, + /* 0x60 */ dCamStyle_FN22_e, + /* 0x61 */ dCamStyle_FN23_e, + /* 0x62 */ dCamStyle_FN24_e, + /* 0x63 */ dCamStyle_FN26_e, + /* 0x64 */ dCamStyle_FN27_e, + /* 0x65 */ dCamStyle_FN28_e, + /* 0x66 */ dCamStyle_FN30_e, + /* 0x67 */ dCamStyle_FN31_e, + /* 0x68 */ dCamStyle_FN32_e, + /* 0x69 */ dCamStyle_FN33_e, + /* 0x6A */ dCamStyle_FN34_e, + /* 0x6B */ dCamStyle_FN35_e, + /* 0x6C */ dCamStyle_LL17_e, + /* 0x6D */ dCamStyle_FN37_e, +#if VERSION == VERSION_JPN + dCamStyle_FN38_e, +#endif + /* 0x6E */ dCamStyle_BE08_e, + /* 0x6F */ dCamStyle_BE07_e, + /* 0x70 */ dCamStyle_TT04_e, + /* 0x71 */ dCamStyle_FP38_e, + /* 0x72 */ dCamStyle_FN39_e, + /* 0x73 */ dCamStyle_MM16_e, + /* 0x74 */ dCamStyle_MM14_e, + /* 0x75 */ dCamStyle_MM15_e, + /* 0x76 */ dCamStyle_MM07_e, + /* 0x77 */ dCamStyle_FN81_e, + /* 0x78 */ dCamStyle_FN40_e, + /* 0x79 */ dCamStyle_FN41_e, + /* 0x7A */ dCamStyle_FN19_e, + /* 0x7B */ dCamStyle_LL81_e, + /* 0x7C */ dCamStyle_DD01_e, + /* 0x7D */ dCamStyle_MM19_e, + /* 0x7E */ dCamStyle_DD02_e, + /* 0x7F */ dCamStyle_FN42_e, + /* 0x80 */ dCamStyle_IN03_e, + /* 0x81 */ dCamStyle_FN43_e, + /* 0x82 */ dCamStyle_FN11_e, + /* 0x83 */ dCamStyle_MM21_e, + /* 0x84 */ dCamStyle_MM20_e, + /* 0x85 */ dCamStyle_FN05_e, + /* 0x86 */ dCamStyle_FN36_e, + /* 0x87 */ dCamStyle_MM81_e, + /* 0x88 */ dCamStyle_SS01_e, + /* 0x89 */ dCamStyle_LL18_e, + /* 0x8A */ dCamStyle_DD04_e, + /* 0x8B */ dCamStyle_MM22_e, + /* 0x8C */ dCamStyle_MM18_e, + /* 0x8D */ dCamStyle_MM17_e, +#if VERSION != VERSION_JPN + /* 0x8E */ dCamStyle_MM03_e, + /* 0x8F */ dCamStyle_MM23_e, + /* 0x90 */ dCamStyle_FN38_e, +#endif +}; + // Array indexes, do not change values enum dCamStyleParam_e { - dCamStyleParam_UNK0 = 0, - dCamStyleParam_UNK1 = 1, - dCamStyleParam_UNK2 = 2, - dCamStyleParam_UNK3 = 3, - dCamStyleParam_UNK4 = 4, - dCamStyleParam_CENTER_HEIGHT_BASE = 5, - dCamStyleParam_CENTER_HEIGHT_UPPER = 6, - dCamStyleParam_CENTER_HEIGHT_LOWER = 7, - dCamStyleParam_LOCKON_CENTER_HEIGHT_MIN = 8, - dCamStyleParam_LOCKON_CENTER_HEIGHT_MAX = 9, - dCamStyleParam_UNK10 = 10, - dCamStyleParam_UNK11 = 11, - dCamStyleParam_UNK12 = 12, - dCamStyleParam_UNK13 = 13, - dCamStyleParam_UNK14 = 14, - dCamStyleParam_UNK15 = 15, - dCamStyleParam_UNK16 = 16, - dCamStyleParam_UNK17 = 17, - dCamStyleParam_LOCKON_LATITUDE_MIN = 18, - dCamStyleParam_LOCKON_LATITUDE_MAX = 19, - dCamStyleParam_UNK20 = 20, - dCamStyleParam_UNK21 = 21, - dCamStyleParam_UNK22 = 22, - dCamStyleParam_LOCKON_LONGITUDE_MIN = 23, - dCamStyleParam_LOCKON_LONGITUDE_MAX = 24, - dCamStyleParam_FOVY_BASE = 25, - dCamStyleParam_FOVY_UPPER = 26, - dCamStyleParam_FOVY_LOWER = 27, - dCamStyleParam_LOCKON_FOVY_MIN = 28, - dCamStyleParam_LOCKON_FOVY_MAX = 29, + /* 0x00 */ dCamStyleParam_UNK0 = 0, + /* 0x01 */ dCamStyleParam_UNK1 = 1, + /* 0x02 */ dCamStyleParam_UNK2 = 2, + /* 0x03 */ dCamStyleParam_UNK3 = 3, + /* 0x04 */ dCamStyleParam_UNK4 = 4, + /* 0x05 */ dCamStyleParam_CENTER_HEIGHT_BASE = 5, + /* 0x06 */ dCamStyleParam_CENTER_HEIGHT_UPPER = 6, + /* 0x07 */ dCamStyleParam_CENTER_HEIGHT_LOWER = 7, + /* 0x08 */ dCamStyleParam_LOCKON_CENTER_HEIGHT_MIN = 8, + /* 0x09 */ dCamStyleParam_LOCKON_CENTER_HEIGHT_MAX = 9, + /* 0x0A */ dCamStyleParam_UNK10 = 10, + /* 0x0B */ dCamStyleParam_UNK11 = 11, + /* 0x0C */ dCamStyleParam_UNK12 = 12, + /* 0x0D */ dCamStyleParam_UNK13 = 13, + /* 0x0E */ dCamStyleParam_UNK14 = 14, + /* 0x0F */ dCamStyleParam_UNK15 = 15, + /* 0x10 */ dCamStyleParam_UNK16 = 16, + /* 0x11 */ dCamStyleParam_UNK17 = 17, + /* 0x12 */ dCamStyleParam_LOCKON_LATITUDE_MIN = 18, + /* 0x13 */ dCamStyleParam_LOCKON_LATITUDE_MAX = 19, + /* 0x14 */ dCamStyleParam_UNK20 = 20, + /* 0x15 */ dCamStyleParam_UNK21 = 21, + /* 0x16 */ dCamStyleParam_UNK22 = 22, + /* 0x17 */ dCamStyleParam_LOCKON_LONGITUDE_MIN = 23, + /* 0x18 */ dCamStyleParam_LOCKON_LONGITUDE_MAX = 24, + /* 0x19 */ dCamStyleParam_FOVY_BASE = 25, + /* 0x1A */ dCamStyleParam_FOVY_UPPER = 26, + /* 0x1B */ dCamStyleParam_FOVY_LOWER = 27, + /* 0x1C */ dCamStyleParam_LOCKON_FOVY_MIN = 28, + /* 0x1D */ dCamStyleParam_LOCKON_FOVY_MAX = 29, }; enum dCamParamFlag_e { - dCamParam_UNK001 = 0x001, - dCamParam_UNK002 = 0x002, - dCamParam_UNK004 = 0x004, - dCamParam_UNK010 = 0x010, - dCamParam_UNK020 = 0x020, - dCamParam_UNK040 = 0x040, - dCamParam_UNK080 = 0x080, - dCamParam_UNK100 = 0x100, - dCamParam_UNK200 = 0x200, - dCamParam_UNK400 = 0x400, + dCamPrmFlg_UNK001 = 0x001, + dCamPrmFlg_UNK002 = 0x002, + dCamPrmFlg_UNK004 = 0x004, + dCamPrmFlg_UNK010 = 0x010, + dCamPrmFlg_UNK020 = 0x020, + dCamPrmFlg_UNK040 = 0x040, + dCamPrmFlg_UNK080 = 0x080, + dCamPrmFlg_UNK100 = 0x100, + dCamPrmFlg_UNK200 = 0x200, + dCamPrmFlg_UNK400 = 0x400, }; struct dCamera__Style { diff --git a/include/d/d_camera.h b/include/d/d_camera.h index 587165c50..a80a1bcd5 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -27,7 +27,7 @@ struct dCamera__EventParam { struct dCamera__Type { /* 0x00 */ char name[24]; - /* 0x18 */ s16 mStyles[2][10]; + /* 0x18 */ s16 mStyles[20]; }; // Size: 0x40 struct dCamera_event_data { diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 79e04bd0f..ecd0fb51b 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -98,18 +98,6 @@ enum daPy__PlayerStatus1 { daPyStts1_UNK20000_e = 0x00020000, daPyStts1_UNK40000_e = 0x00040000, daPyStts1_UNK80000_e = 0x00080000, - daPyStts1_UNK100000_e = 0x00100000, - daPyStts1_UNK200000_e = 0x00200000, - daPyStts1_UNK400000_e = 0x00400000, - daPyStts1_UNK800000_e = 0x00800000, - daPyStts1_UNK1000000_e = 0x01000000, - daPyStts1_UNK2000000_e = 0x02000000, - daPyStts1_UNK4000000_e = 0x04000000, - daPyStts1_UNK8000000_e = 0x08000000, - daPyStts1_UNK10000000_e = 0x10000000, - daPyStts1_UNK20000000_e = 0x20000000, - daPyStts1_UNK40000000_e = 0x40000000, - daPyStts1_UNK80000000_e = 0x80000000, }; class __d_timer_info_c { diff --git a/src/d/d_cam_param.cpp b/src/d/d_cam_param.cpp index fab43cb88..b3229efe8 100644 --- a/src/d/d_cam_param.cpp +++ b/src/d/d_cam_param.cpp @@ -104,7 +104,7 @@ BOOL dCamParam_c::Change(s32 i_styleIdx) { mpStyle = &styles[mStyleIdx]; return TRUE; } else { - mpStyle = &styles[0]; + mpStyle = &styles[dCamStyle_NN00_e]; return FALSE; } } diff --git a/src/d/d_cam_style.cpp b/src/d/d_cam_style.cpp index 8c7348377..e96a3c242 100644 --- a/src/d/d_cam_style.cpp +++ b/src/d/d_cam_style.cpp @@ -18,19 +18,19 @@ const dCamera__Style dCamParam_c::styles[] = { 'FN08', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 450.0f, 300.0f, -99999.992188f, 0.66f, 0.05f, 25.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'PN05', 0x5, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1000.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 0.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK040, + dCamPrmFlg_UNK040, }, { 'PN12', 0x5, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1000.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 10.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK040, + dCamPrmFlg_UNK040, }, { 'EN00', @@ -42,357 +42,357 @@ const dCamera__Style dCamParam_c::styles[] = { 'FN12', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -15.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 220.0f, 180.0f, -99999.992188f, 0.66f, 0.05f, 12.0f, -40.0f, 60.0f, 2.0f, 0.08f, 1.0f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'TT01', 0x3, {0.0f, 0.0f, -99999.992188f, 0.75f, 0.0f, -40.0f, 0.0f, 0.0f, 0.0f, 0.0f, 300.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, -15.0f, 35.0f, 0.0f, 0.0f, -99999.992188f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, - dCamParam_UNK001, + dCamPrmFlg_UNK001, }, { 'TT02', 0x3, {0.0f, 0.0f, -99999.992188f, 0.6f, 0.0f, -30.0f, 0.0f, 0.0f, 0.0f, 0.0f, 280.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, -15.0f, 40.0f, 0.0f, 0.0f, -99999.992188f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, - dCamParam_UNK001, + dCamPrmFlg_UNK001, }, { 'TT03', 0x3, {0.0f, 0.0f, -99999.992188f, 0.6f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 300.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 0.0f, 40.0f, 0.0f, 0.0f, -99999.992188f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, - dCamParam_UNK001, + dCamPrmFlg_UNK001, }, { 'LA03', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 18.0f, -40.0f, 40.0f, 20.0f, 15.0f, 0.03f, 0.0f, -99999.992188f, 40.0f, 40.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP01', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 220.0f, 125.0f, 625.0f, 220.0f, 220.0f, 0.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LA02', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.3f, 0.1f, -7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 30.0f, -40.0f, 40.0f, 35.0f, 10.0f, 0.04f, 0.0f, -99999.992188f, 80.0f, 40.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'FN13', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, 7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 0.0f, -40.0f, 40.0f, 30.0f, -5.0f, 0.0f, 0.0f, -99999.992188f, 80.0f, 60.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, - dCamParam_UNK001 | dCamParam_UNK002, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK002, }, { 'LH01', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.9f, 0.1f, -50.0f, 3.8f, 20.0f, -50.0f, -50.0f, 350.0f, 125.0f, 875.0f, 325.0f, 375.0f, 50.0f, -20.0f, 60.0f, 55.0f, 20.0f, 0.2f, 0.05f, -99999.992188f, 10.0f, 5.0f, 55.0f, 55.0f, 55.0f, 50.0f, 65.0f}, - dCamParam_UNK001 | dCamParam_UNK002, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK002, }, { 'LH02', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.9f, 0.1f, -50.0f, 3.8f, 20.0f, -50.0f, -50.0f, 350.0f, 125.0f, 375.0f, 350.0f, 350.0f, 50.0f, -20.0f, 60.0f, 55.0f, 23.0f, 0.2f, 0.05f, -99999.992188f, 10.0f, 5.0f, 55.0f, 50.0f, 65.0f, 50.0f, 65.0f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'LB02', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, -12.5f, -17.5f, 20.0f, -17.5f, -7.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 0.0f, -40.0f, 40.0f, 10.0f, -5.0f, 0.01f, 0.0f, -99999.992188f, 170.0f, 160.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP02', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 200.0f, 125.0f, 750.0f, 200.0f, 200.0f, 0.0f, -40.0f, 40.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 52.5f, 52.5f, 52.5f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP03', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.4f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 220.0f, 125.0f, 220.0f, 220.0f, 220.0f, 5.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 55.0f, 55.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP04', 0x2, {-100000.0f, -100000.0f, -99999.992188f, 0.1f, 0.4f, -25.0f, 15.0f, 20.0f, -25.0f, -25.0f, 200.0f, 200.0f, 320.0f, 250.0f, 350.0f, 5.0f, -10.0f, 20.0f, 5.0f, 5.0f, 0.2f, 0.05f, -99999.992188f, 0.0f, 0.0f, 45.0f, 45.0f, 45.0f, 45.0f, 45.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'CC01', 0xC, {0.0f, 0.0f, -99999.992188f, 0.6f, 0.2f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, 0.25f, 0.25f, -99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.8f, 50.0f, -99999.992188f, -99999.992188f, 0.5f, 0.5f}, - dCamParam_UNK002 | dCamParam_UNK080, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK080, }, { 'CC02', 0xC, {0.0f, 0.0f, -99999.992188f, 0.6f, 0.2f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, 0.25f, 0.25f, -99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.8f, 50.0f, -99999.992188f, -99999.992188f, 0.5f, 0.5f}, - dCamParam_UNK002 | dCamParam_UNK040 | dCamParam_UNK080, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK040 | dCamPrmFlg_UNK080, }, { 'LL06', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.5f, 0.25f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 15.0f, -70.0f, 70.0f, 20.0f, 12.0f, 0.01f, 0.0f, -99999.992188f, 70.0f, 50.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL08', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 6.5f, -17.5f, 20.0f, -5.0f, 5.0f, 420.0f, 125.0f, 350.0f, 380.0f, 280.0f, 2.0f, -70.0f, 70.0f, -5.0f, 0.0f, 0.08f, 0.0f, -99999.992188f, 60.0f, 5.0f, 55.0f, 52.5f, 54.5f, 52.0f, 56.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL07', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, -22.5f, 5.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 0.0f, -70.0f, 70.0f, 25.0f, 10.0f, 0.04f, 0.0f, -99999.992188f, 75.0f, 20.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP10', 0x2, {-10000.0f, -10000.0f, -99999.992188f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, 0.0f, 320.0f, 200.0f, 750.0f, 200.0f, 200.0f, 0.0f, -40.0f, 40.0f, -10.0f, -20.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 52.5f, 52.5f, 52.5f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'SN15', 0x4, {20.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, 0.75f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 50.0f, 0.2f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002 | dCamParam_UNK010 | dCamParam_UNK080, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK010 | dCamPrmFlg_UNK080, }, { 'BW07', 0x8, {120.0f, 80.0f, -99999.992188f, 0.2f, 0.15f, 40.0f, -99999.992188f, -99999.992188f, -60.0f, -99999.992188f, 800.0f, -99999.992188f, -99999.992188f, -500.0f, 40.0f, 40.0f, 30.0f, 50.0f, -10.0f, -99999.992188f, 1.0f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 50.0f, -99999.992188f, -99999.992188f, 20.0f, -5.0f}, - dCamParam_UNK001, + dCamPrmFlg_UNK001, }, { 'FN18', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 900.0f, 800.0f, -99999.992188f, 0.66f, 0.05f, 78.0f, 75.0f, 80.0f, 2.0f, 0.05f, 0.01f, 0.01f, -99999.992188f, 0.8f, 0.1f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'JN05', 0xD, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 900.0f, 50.0f, -99999.992188f, -99999.992188f, 1000.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 0.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK001 | dCamParam_UNK004, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'XN06', 0x6, {-99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK040, + dCamPrmFlg_UNK040, }, { 'LB01', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, -12.5f, -17.5f, 20.0f, -17.5f, -7.5f, 400.0f, 125.0f, 750.0f, 460.0f, 400.0f, 0.0f, -40.0f, 40.0f, 10.0f, -5.0f, 0.01f, 0.0f, -99999.992188f, 170.0f, 160.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LA01', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.3f, 0.1f, -7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 480.0f, 420.0f, 30.0f, -40.0f, 40.0f, 30.0f, 20.0f, 0.06f, 0.0f, -99999.992188f, 60.0f, 40.0f, 55.0f, 52.5f, 54.5f, 55.0f, 65.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'BP07', 0x8, {120.0f, 200.0f, -99999.992188f, 0.75f, 0.15f, 40.0f, -99999.992188f, -99999.992188f, -60.0f, -99999.992188f, 900.0f, -99999.992188f, -99999.992188f, -500.0f, 40.0f, 10.0f, -5.0f, 30.0f, -10.0f, -99999.992188f, 1.0f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, 20.0f, -5.0f}, - dCamParam_UNK001 | dCamParam_UNK004, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'LW02', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.3f, 0.1f, -20.0f, -20.0f, 0.0f, -20.0f, -60.0f, 250.0f, 125.0f, 450.0f, 650.0f, 650.0f, 0.0f, -20.0f, 40.0f, -10.0f, 45.0f, 0.2f, 0.05f, -99999.992188f, 0.0f, 0.0f, 60.0f, 60.0f, 60.0f, 60.0f, 60.0f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'HP16', 0x9, {20.0f, 10.0f, -99999.992188f, 0.75f, 0.25f, -70.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 200.0f, 200.0f, -99999.992188f, 1.0f, 1.0f, 60.0f, 60.0f, -99999.992188f, 0.05f, 1.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.25f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'HN16', 0x9, {0.0f, 0.0f, -99999.992188f, 0.5f, 0.25f, -60.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 350.0f, 320.0f, -99999.992188f, 0.3f, 0.3f, 25.0f, 25.0f, -99999.992188f, 0.5f, 0.25f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 62.5f, -99999.992188f, -99999.992188f, -99999.992188f, 0.25f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'BN07', 0x8, {90.0f, 150.0f, -99999.992188f, 0.65f, 0.15f, 10.0f, -99999.992188f, -99999.992188f, 5.0f, -99999.992188f, 800.0f, -99999.992188f, -99999.992188f, -430.0f, 40.0f, 5.0f, -10.0f, 30.0f, -5.0f, -99999.992188f, 0.2f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, -99999.992188f, -99999.992188f, 20.0f, -5.0f}, - dCamParam_UNK001 | dCamParam_UNK004, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'LP05', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.05f, 0.2f, 0.0f, 12.5f, 20.0f, 0.0f, 0.0f, 220.0f, 125.0f, 625.0f, 220.0f, 220.0f, 0.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP06', 0x2, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 32.0f, 32.0f, 32.0f, 32.0f, 32.0f, 1250.0f, 1000.0f, 1100.0f, 1250.0f, 1250.0f, 0.0f, -10.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'HN18', 0xF, {80.0f, 0.0f, -99999.992188f, 0.8f, 0.15f, 150.0f, -99999.992188f, 500.0f, -99999.992188f, -99999.992188f, 520.0f, 80.0f, -99999.992188f, 0.25f, 0.7f, 50.0f, 5.0f, -99999.992188f, 0.75f, 0.15f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 90.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.25f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'FN25', 0x1, {0.5f, 0.0f, -99999.992188f, 0.75f, 0.25f, 80.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 850.0f, 500.0f, -99999.992188f, 0.66f, 0.05f, 30.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001, + dCamPrmFlg_UNK001, }, { 'BP08', 0x8, {90.0f, 250.0f, -99999.992188f, 0.75f, 0.15f, 120.0f, -99999.992188f, -99999.992188f, 1.0f, -99999.992188f, 1000.0f, -99999.992188f, -99999.992188f, 0.0f, 40.0f, 20.0f, -5.0f, 30.0f, 0.0f, -99999.992188f, 1.0f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, 0.0f, -5.0f}, - dCamParam_UNK001 | dCamParam_UNK004, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'BN08', 0x8, {90.0f, 250.0f, -99999.992188f, 0.75f, 0.15f, 120.0f, -99999.992188f, -99999.992188f, 10.0f, -99999.992188f, 1000.0f, -99999.992188f, -99999.992188f, 0.0f, 40.0f, 20.0f, -5.0f, 30.0f, 0.0f, -99999.992188f, 0.2f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, 0.0f, -5.0f}, - dCamParam_UNK001 | dCamParam_UNK004, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'FN29', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 550.0f, 450.0f, -99999.992188f, 0.66f, 0.05f, 40.0f, -50.0f, 70.0f, 2.0f, 0.05f, 0.16f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'SX01', 0x4, {20.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -2.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, 0.45f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 50.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002 | dCamParam_UNK100, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK100, }, { 'SY01', 0x4, {0.0f, 30.0f, -99999.992188f, -99999.992188f, -99999.992188f, 30.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 120.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, 0.6f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 60.0f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'SX02', 0x4, {20.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -2.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, 0.45f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 60.0f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002 | dCamParam_UNK100, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK100, }, { 'MM06', 0xA, {0.0f, 0.0f, -99999.992188f, 0.8f, 0.8f, 80.0f, 80.0f, 20.0f, 0.0f, 1.92f, 250.0f, 200.0f, 800.0f, 0.0f, 16.0f, 0.0f, -55.0f, 70.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 90.0f, 80.0f, 90.0f, 0.0f, 0.48f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM05', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, -20.0f, -20.0f, 20.0f, 0.0f, 1.92f, 250.0f, 150.0f, 320.0f, 0.0f, 15.0f, 0.0f, -40.0f, 40.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 60.0f, 70.0f, 0.0f, 0.48f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM09', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 40.0f, 50.0f, 40.0f, 0.0f, 0.2f, 320.0f, 150.0f, 800.0f, 0.0f, 30.0f, 0.0f, -30.0f, 10.0f, 0.0f, 1.8f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 60.0f, 65.0f, 60.0f, 0.0f, 0.2f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM04', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, -20.0f, -20.0f, -40.0f, 0.0f, 1.0f, 320.0f, 150.0f, 950.0f, 0.0f, 29.0f, 0.0f, 0.0f, 5.0f, 0.0f, 0.2f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.48f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'LN17', 0xC, {0.0f, 0.0f, -99999.992188f, 0.6f, 0.2f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, 0.25f, 0.25f, -99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.8f, 50.0f, -99999.992188f, -99999.992188f, 0.5f, 0.5f}, - dCamParam_UNK002 | dCamParam_UNK040, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK040, }, { 'QN07', 0xE, {-120.0f, 0.0f, -99999.992188f, 0.75f, 0.15f, 50.0f, -99999.992188f, -99999.992188f, 80.0f, -99999.992188f, 800.0f, -99999.992188f, -99999.992188f, 200.0f, 40.0f, 0.0f, -5.0f, 60.0f, 20.0f, -99999.992188f, 0.1f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, -15.0f, -5.0f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'LE01', 0x1, {0.0f, 75.0f, -99999.992188f, 0.15f, 0.15f, -30.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 300.0f, 250.0f, -99999.992188f, 0.66f, 0.05f, 5.0f, -40.0f, 60.0f, 2.0f, 0.15f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.15f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.15f}, - dCamParam_UNK001 | dCamParam_UNK200 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK200 | dCamPrmFlg_UNK400, }, { 'LN01', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.25f, 0.2f, -15.0f, -17.5f, 20.0f, -22.5f, -10.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 7.5f, -60.0f, 60.0f, 10.0f, 5.0f, 0.08f, 0.0f, -99999.992188f, 40.0f, 5.0f, 42.5f, 52.5f, 54.5f, 40.0f, 45.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LW01', 0x1, {0.0f, 0.0f, -99999.992188f, 0.15f, 0.15f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 450.0f, 400.0f, -99999.992188f, 0.5f, 0.15f, 20.0f, -40.0f, 60.0f, 2.0f, 0.15f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.15f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.15f}, - dCamParam_UNK001 | dCamParam_UNK200 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK200 | dCamPrmFlg_UNK400, }, { 'GN01', 0x12, {5.0f, 0.0f, -99999.992188f, 0.5f, 0.25f, 30.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, 400.0f, 400.0f, -99999.992188f, 0.66f, 0.05f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.0f, -99999.992188f, -99999.992188f, 1.0f, 0.18f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'MM01', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 1.0f, 320.0f, 240.0f, 700.0f, 0.0f, 20.0f, 0.0f, 0.0f, 30.0f, 0.0f, 0.6f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.4f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, #if VERSION == VERSION_JPN { 'MM03', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, 0.0f, 40.0f, 0.0f, 2.0f, 320.0f, 250.0f, 700.0f, 0.0f, 27.0f, 0.0f, -5.0f, 30.0f, 0.0f, 0.6f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 0.45f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, #endif { 'MM02', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 10.0f, 35.0f, 0.0f, 1.92f, 320.0f, 250.0f, 950.0f, 0.0f, 27.0f, 0.0f, -5.0f, 30.0f, 0.0f, 0.9f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM10', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 15.0f, 10.0f, 20.0f, 0.0f, 0.45f, 320.0f, 300.0f, 2000.0f, 0.0f, 45.0f, 10.0f, 5.0f, 35.0f, 0.0f, 0.42f, 0.33f, 0.5f, -99999.992188f, 0.0f, 4.0f, 55.0f, 52.0f, 62.0f, 0.0f, 0.48f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM08', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, -20.0f, 50.0f, 50.0f, 0.0f, 0.0f, 400.0f, 350.0f, 800.0f, 0.0f, 34.0f, 0.0f, -20.0f, 50.0f, 0.0f, 3.6f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 55.0f, 55.0f, 0.0f, 0.0f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM83', 0xA, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, 20.0f, 300.0f, 0.0f, 5.0f, 320.0f, 350.0f, 1500.0f, 0.0f, 40.0f, 0.0f, 0.0f, 15.0f, 0.0f, 1.0f, 0.33f, 0.2f, -99999.992188f, 0.0f, 8.0f, 55.0f, 65.0f, 55.0f, 0.0f, 1.0f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'FP01', 0x1, {1.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 480.0f, 280.0f, -99999.992188f, 0.66f, 0.05f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.992188f, -99999.992188f, 1.0f, 0.18f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'ZZ00', @@ -404,496 +404,496 @@ const dCamera__Style dCamParam_c::styles[] = { 'PN13', 0x5, {1.0f, 0.0f, -99999.992188f, 0.15f, 0.15f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1000.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 10.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002 | dCamParam_UNK040, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK040, }, { 'FN82', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1200.0f, 350.0f, -99999.992188f, 0.66f, 0.05f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.992188f, -99999.992188f, 1.0f, 0.01f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'IN01', 0x7, {50.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 20.0f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, 680.0f, 250.0f, -99999.992188f, 0.66f, 0.05f, 12.0f, -40.0f, 60.0f, -99999.992188f, 0.05f, 0.4f, 0.05f, -99999.992188f, 45.0f, 45.0f, 62.0f, -99999.992188f, 2.5f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'IN02', 0x7, {50.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 20.0f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, 750.0f, 450.0f, -99999.992188f, 0.66f, 0.05f, 35.0f, -40.0f, 60.0f, -99999.992188f, 0.05f, 0.4f, 0.05f, -99999.992188f, 10.0f, 10.0f, 65.0f, -99999.992188f, 2.0f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'MM82', 0xA, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, 20.0f, 100.0f, 0.0f, 45.0f, 320.0f, 200.0f, 1500.0f, 30.0f, 50.0f, 30.0f, -10.0f, 30.0f, 0.0f, 1.5f, 0.33f, 0.2f, -99999.992188f, 0.0f, 6.0f, 55.0f, 55.0f, 55.0f, 0.0f, 1.0f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'LL11', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 20.0f, 40.0f, 1000.0f, 300.0f, 2000.0f, 800.0f, 1500.0f, 0.0f, -10.0f, 40.0f, 30.0f, 40.0f, 0.04f, 0.02f, -99999.992188f, 80.0f, 30.0f, 60.0f, 50.0f, 80.0f, 52.0f, 70.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL01', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, -22.5f, 5.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 0.0f, -60.0f, 60.0f, 20.0f, -5.0f, 0.04f, 0.02f, -99999.992188f, 75.0f, 20.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL02', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 6.5f, -17.5f, 20.0f, -22.5f, -2.5f, 420.0f, 125.0f, 350.0f, 450.0f, 400.0f, 2.0f, -60.0f, 60.0f, 15.0f, 0.0f, 0.05f, 0.02f, -99999.992188f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL03', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 15.0f, -60.0f, 60.0f, 20.0f, 12.0f, 0.01f, 0.01f, -99999.992188f, 70.0f, 50.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL04', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.4f, -10.0f, 15.0f, 20.0f, -12.5f, -12.5f, 350.0f, 200.0f, 400.0f, 300.0f, 400.0f, 10.0f, -10.0f, 20.0f, 0.0f, 0.0f, 0.06f, 0.02f, -99999.992188f, 80.0f, 10.0f, 47.0f, 47.0f, 47.0f, 47.0f, 47.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL05', 0x2, {-10000.0f, -10000.0f, -99999.992188f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -40.0f, -50.0f, 280.0f, 125.0f, 350.0f, 300.0f, 100.0f, 2.0f, -40.0f, 40.0f, -15.0f, -5.0f, 0.08f, 0.08f, -99999.992188f, 10.0f, 5.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL10', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -40.0f, 0.0f, 1000.0f, 750.0f, 1100.0f, 700.0f, 350.0f, 2.0f, -40.0f, 40.0f, -8.0f, 0.0f, 0.08f, 0.05f, -99999.992188f, 40.0f, 10.0f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL09', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 60.0f, -20.0f, 120.0f, 0.0f, -10.0f, 420.0f, 300.0f, 350.0f, 650.0f, 800.0f, 2.0f, -60.0f, 60.0f, 15.0f, 5.0f, 0.04f, 0.01f, -99999.992188f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL12', 0x2, {-10000.0f, -10000.0f, -99999.992188f, 0.2f, 0.4f, 500.0f, -7.5f, 500.0f, 300.0f, 300.0f, 550.0f, 500.0f, 600.0f, 400.0f, 500.0f, 2.0f, -40.0f, 40.0f, -15.0f, -15.0f, 0.08f, 0.08f, -99999.992188f, 10.0f, 5.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL13', 0x2, {-10000.0f, -10000.0f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 0.0f, 22.5f, 550.0f, 125.0f, 750.0f, 530.0f, 580.0f, -7.5f, -60.0f, 60.0f, 5.0f, -15.0f, 0.04f, 0.04f, -99999.992188f, 60.0f, 20.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL14', 0x2, {-10000.0f, -10000.0f, -99999.992188f, 0.4f, 0.2f, 0.0f, -17.5f, 20.0f, 0.0f, 60.0f, 600.0f, 125.0f, 350.0f, 500.0f, 700.0f, 0.0f, -60.0f, 60.0f, 0.0f, -10.0f, 0.05f, 0.05f, -99999.992188f, 30.0f, 15.0f, 55.0f, 52.5f, 54.5f, 53.0f, 57.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL15', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 10.0f, -17.5f, 20.0f, -22.5f, -2.5f, 420.0f, 125.0f, 800.0f, 599.0f, 799.0f, 30.0f, 0.0f, 60.0f, 20.0f, 40.0f, 0.05f, 0.05f, -99999.992188f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL16', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, 30.0f, 0.0f, 50.0f, 30.0f, 10.0f, 750.0f, 650.0f, 1000.0f, 600.0f, 350.0f, -10.0f, -40.0f, 40.0f, -8.0f, 0.0f, 0.08f, 0.08f, -99999.992188f, 40.0f, 10.0f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL82', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 0.25f, 0.0f, 0.0f, 0.0f, -15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 600.0f, 400.0f, 0.0f, 0.0f, 0.0f, -10.0f, 30.0f, 0.1f, 0.0f, -99999.992188f, 60.0f, 0.0f, 0.0f, 0.0f, 0.0f, 60.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'FN01', 0x1, {1.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 480.0f, 280.0f, -99999.992188f, 0.66f, 0.08f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.992188f, -99999.992188f, 1.0f, 0.18f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN02', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 360.0f, 240.0f, -99999.992188f, 0.66f, 0.1f, 10.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 58.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN03', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 350.0f, 260.0f, -99999.992188f, 0.66f, 0.08f, 14.0f, 10.0f, 60.0f, 2.0f, 0.05f, 0.3f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN04', 0x1, {1.0f, 0.1f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 480.0f, 350.0f, -99999.992188f, 0.66f, 0.1f, 18.0f, 15.0f, 25.0f, 2.0f, 0.05f, 0.39f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN06', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 230.0f, 240.0f, -99999.992188f, 0.2f, 0.05f, 5.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.01f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN09', 0x1, {0.5f, 0.0f, -99999.992188f, 0.75f, 0.25f, -10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 460.0f, 210.0f, -99999.992188f, 0.66f, 0.09f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.08f, -99999.992188f, -99999.992188f, 2.0f, 0.3f, 52.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN07', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 430.0f, 280.0f, -99999.992188f, 0.66f, 0.1f, 13.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.35f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN10', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 15.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 420.0f, 250.0f, -99999.992188f, 0.66f, 0.08f, 5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, -99999.992188f, -99999.992188f, 1.0f, 0.1f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN14', 0x1, {0.5f, 0.0f, -99999.992188f, 0.75f, 0.25f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 450.0f, 300.0f, -99999.992188f, 0.66f, 0.12f, 15.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001, + dCamPrmFlg_UNK001, }, { 'FN15', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 32.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 320.0f, 200.0f, -10000.0f, 0.66f, 0.08f, -23.0f, -20.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN17', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 380.0f, 200.0f, -99999.992188f, 0.66f, 0.1f, 10.0f, -40.0f, 60.0f, 2.0f, 0.08f, 0.18f, 0.05f, -99999.992188f, 2.0f, 0.1f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN20', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 330.0f, 280.0f, -99999.992188f, 0.66f, 0.15f, 12.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.992188f, -99999.992188f, 1.0f, 0.1f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK200 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK200 | dCamPrmFlg_UNK400, }, { 'FN21', 0x1, {1.0f, 0.0f, -99999.992188f, 0.8f, 0.25f, 8.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 340.0f, 220.0f, -99999.992188f, 0.66f, 0.08f, 6.0f, -40.0f, 70.0f, 2.0f, 0.05f, 0.16f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 64.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN22', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1500.0f, 1200.0f, -99999.992188f, 0.66f, 0.08f, 35.0f, 30.0f, 40.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.992188f, 2.0f, 0.05f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN23', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 32.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1000.0f, 800.0f, -99999.992188f, 0.66f, 0.1f, 20.0f, 15.0f, 25.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.992188f, 2.0f, 0.05f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN24', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 600.0f, 350.0f, -99999.992188f, 0.66f, 0.09f, 25.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.33f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN26', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 800.0f, 800.0f, -99999.992188f, 0.66f, 0.1f, 35.0f, 30.0f, 40.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.992188f, 2.0f, 0.05f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN27', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 32.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1250.0f, 1000.0f, -99999.992188f, 0.66f, 0.09f, 0.0f, -10.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN28', 0x1, {0.5f, 0.0f, -99999.992188f, 0.75f, 0.25f, 5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 330.0f, 250.0f, -99999.992188f, 0.66f, 0.09f, 8.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.06f, -99999.992188f, -99999.992188f, 2.0f, 0.3f, 52.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN30', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 300.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 1000.0f, 900.0f, -10000.0f, 0.66f, 0.08f, -15.0f, -15.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN31', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 420.0f, 250.0f, -10000.0f, 0.66f, 0.08f, 0.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, -10000.0f, -99999.992188f, 1.0f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN32', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 360.0f, 220.0f, -10000.0f, 0.66f, 0.08f, -5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, 0.05f, -99999.992188f, 0.8f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN33', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1300.0f, 1000.0f, 1350.0f, 0.66f, 0.05f, 30.0f, 0.0f, 60.0f, 2.0f, 0.09f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 58.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN34', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 1000.0f, 900.0f, -10000.0f, 0.66f, 0.08f, 45.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, 0.05f, -99999.992188f, 0.8f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN35', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1250.0f, 1000.0f, -99999.992188f, 0.66f, 0.09f, 0.0f, -15.0f, 10.0f, 0.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'LL17', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 20.0f, 40.0f, 1000.0f, 300.0f, 2000.0f, 800.0f, 1600.0f, 0.0f, -10.0f, 40.0f, 30.0f, 40.0f, 0.04f, 0.03f, -99999.992188f, 80.0f, 30.0f, 60.0f, 50.0f, 80.0f, 52.0f, 45.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'FN37', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 15.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1050.0f, 950.0f, -99999.992188f, 0.66f, 0.05f, 20.0f, 15.0f, 45.0f, 2.0f, 0.05f, 0.12f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, #if VERSION == VERSION_JPN { 'FN38', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 800.0f, 600.0f, -99999.992188f, 0.66f, 0.15f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 62.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, #endif { 'BE08', 0x8, {100.0f, 0.0f, -99999.992188f, 0.75f, 0.15f, 80.0f, -99999.992188f, -99999.992188f, 0.0f, -99999.992188f, 500.0f, -99999.992188f, -99999.992188f, 0.0f, 40.0f, 20.0f, -80.0f, 80.0f, 0.0f, -99999.992188f, 0.1f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 78.0f, -99999.992188f, -99999.992188f, 0.0f, -5.0f}, - dCamParam_UNK001 | dCamParam_UNK004, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'BE07', 0x8, {100.0f, 0.0f, -99999.992188f, 0.75f, 0.15f, 240.0f, -99999.992188f, -99999.992188f, 0.0f, -99999.992188f, 750.0f, -99999.992188f, -99999.992188f, 0.0f, 40.0f, 15.0f, -80.0f, 80.0f, 0.0f, -99999.992188f, 0.1f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 66.0f, -99999.992188f, -99999.992188f, 0.0f, -5.0f}, - dCamParam_UNK001 | dCamParam_UNK004, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'TT04', 0x3, {0.0f, 0.0f, -99999.992188f, 0.6f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 290.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 15.0f, 30.0f, 0.0f, 0.0f, -99999.992188f, 0.0f, 30.0f, 42.0f, 45.0f, 0.0f, 0.0f, 0.0f}, - dCamParam_UNK001, + dCamPrmFlg_UNK001, }, { 'FP38', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 800.0f, 600.0f, -99999.992188f, 0.66f, 0.15f, 45.0f, -40.0f, 80.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 62.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN39', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 380.0f, 300.0f, -99999.992188f, 0.66f, 0.05f, 0.0f, -20.0f, 20.0f, 2.0f, 0.05f, 0.12f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK400, }, { 'MM16', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, 20.0f, 40.0f, 0.0f, 1.0f, 320.0f, 250.0f, 500.0f, 0.0f, 28.0f, 20.0f, 20.0f, 30.0f, 0.0f, 0.3f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 0.45f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM14', 0xA, {0.0f, 0.0f, -99999.992188f, 0.55f, 0.15f, 10.0f, 5.0f, 20.0f, 0.0f, 0.5f, 320.0f, 180.0f, 700.0f, 0.0f, 30.0f, 10.0f, 5.0f, 40.0f, 0.0f, 1.7f, 0.33f, 0.5f, -99999.992188f, 0.0f, 3.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.42f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM15', 0xA, {0.0f, 0.0f, -99999.992188f, 0.55f, 0.15f, 10.0f, 5.0f, 20.0f, 0.0f, 0.5f, 320.0f, 200.0f, 1000.0f, 0.0f, 40.0f, 10.0f, 5.0f, 40.0f, 0.0f, 1.7f, 0.33f, 0.66f, -99999.992188f, 0.0f, 3.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.42f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM07', 0xA, {0.0f, 0.0f, -99999.992188f, 0.55f, 0.15f, 90.0f, 80.0f, 180.0f, 0.0f, 4.0f, 750.0f, 500.0f, 1000.0f, 0.0f, 32.0f, 0.0f, -5.0f, 23.0f, 0.0f, 1.65f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 60.0f, 55.0f, 70.0f, 0.0f, 1.5f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'FN81', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 100.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 600.0f, 600.0f, -99999.992188f, 0.9f, 0.01f, 0.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.0f, -99999.992188f, -99999.992188f, 0.8f, 0.1f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN40', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 70.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 800.0f, 500.0f, -10000.0f, 0.66f, 0.08f, -5.0f, -20.0f, 20.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN41', 0x1, {0.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 12.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 350.0f, 100.0f, -99999.992188f, 0.66f, 0.09f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.992188f, -99999.992188f, 2.0f, 0.3f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN19', 0x1, {1.0f, 0.1f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 480.0f, 250.0f, -99999.992188f, 0.66f, 0.12f, -2.0f, -15.0f, 25.0f, 2.0f, 0.05f, 0.39f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK400, }, { 'LL81', 0x2, {-99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 0.25f, 0.0f, 0.0f, 0.0f, 50.0f, 200.0f, 0.0f, 0.0f, 0.0f, 600.0f, 600.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, -99999.992188f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 60.0f, 60.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'DD01', 0x10, {60.0f, 0.0f, -99999.992188f, 0.03f, 0.03f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 550.0f, 450.0f, -99999.992188f, -99999.992188f, -99999.992188f, 5.0f, -99999.992188f, -99999.992188f, 0.2f, -99999.992188f, 0.15f, -99999.992188f, -99999.992188f, 0.33f, -99999.992188f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM19', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 10.0f, 35.0f, 0.0f, 1.88f, 320.0f, 250.0f, 600.0f, 0.0f, 20.0f, 0.0f, -5.0f, 70.0f, 0.0f, 2.8f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'DD02', 0x10, {80.0f, 0.0f, -99999.992188f, 0.03f, 0.03f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 550.0f, 450.0f, -99999.992188f, -99999.992188f, -99999.992188f, 5.0f, -99999.992188f, -99999.992188f, 0.33f, -99999.992188f, 0.15f, -99999.992188f, -99999.992188f, 0.5f, -99999.992188f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'FN42', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 380.0f, 300.0f, -99999.992188f, 0.66f, 0.05f, 15.0f, -20.0f, 80.0f, 2.0f, 0.05f, 0.12f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'IN03', 0x7, {-180.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, 880.0f, 500.0f, -99999.992188f, 0.66f, 0.05f, 50.0f, -40.0f, 60.0f, -99999.992188f, 0.05f, 0.75f, 0.05f, -99999.992188f, 115.0f, 115.0f, 75.0f, -99999.992188f, 0.5f, -99999.992188f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN43', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 200.0f, -10000.0f, -10000.0f, -10000.0f, -500.0f, 900.0f, 800.0f, -10000.0f, 0.66f, 0.08f, -3.0f, -20.0f, 20.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, - dCamParam_UNK002 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN11', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 410.0f, 300.0f, -99999.992188f, 0.66f, 0.08f, 22.0f, 15.0f, 30.0f, 2.0f, 0.05f, 0.07f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'MM21', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 20.0f, 35.0f, 0.0f, 1.2f, 320.0f, 250.0f, 750.0f, 0.0f, 27.0f, 0.0f, -30.0f, 30.0f, 0.0f, 2.2f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM20', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, 0.0f, 30.0f, 0.0f, 2.0f, 320.0f, 250.0f, 500.0f, 0.0f, 26.0f, 0.0f, -5.0f, 20.0f, 0.0f, 1.2f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 64.0f, 0.0f, 0.9f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'FN05', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 400.0f, 300.0f, -99999.992188f, 0.66f, 0.05f, -5.0f, 0.0f, 20.0f, 2.0f, 0.05f, 0.12f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 62.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN36', 0x1, {1.0f, 0.0f, -99999.992188f, 0.25f, 0.1f, -10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 460.0f, 350.0f, -99999.992188f, 0.66f, 0.12f, 5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.5f, -99999.992188f, -99999.992188f, 1.0f, 0.18f, 66.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM81', 0xA, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, 30.0f, 50.0f, 0.0f, 5.0f, 320.0f, 250.0f, 1950.0f, 0.0f, 55.0f, 0.0f, -15.0f, 90.0f, 0.0f, 3.0f, 0.33f, 0.2f, -99999.992188f, 0.0f, 6.0f, 55.0f, 65.0f, 55.0f, 0.0f, 1.5f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'SS01', 0x4, {0.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, 0.45f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 50.0f, 0.2f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002 | dCamParam_UNK080, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK080, }, { 'LL18', 0x2, {-10000.0f, -10000.0f, -99999.992188f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -80.0f, 0.0f, 280.0f, 125.0f, 350.0f, 800.0f, 1200.0f, 2.0f, -40.0f, 40.0f, 20.0f, -15.0f, 0.3f, 0.0f, -99999.992188f, 10.0f, 35.0f, 65.0f, 65.0f, 70.0f, 60.0f, 70.0f}, - dCamParam_UNK002 | dCamParam_UNK004, + dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'DD04', 0x10, {80.0f, 0.0f, -99999.992188f, 0.03f, 0.03f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 450.0f, 400.0f, -99999.992188f, -99999.992188f, -99999.992188f, -4.0f, -99999.992188f, -99999.992188f, 0.33f, -99999.992188f, 0.0f, -99999.992188f, -99999.992188f, -45.0f, -99999.992188f, 45.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM22', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 3.0f, 320.0f, 240.0f, 600.0f, 0.0f, 19.0f, 0.0f, 0.0f, 15.0f, 0.0f, 0.7f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.5f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM18', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 20.0f, 30.0f, 25.0f, 0.0f, 0.5f, 300.0f, 210.0f, 480.0f, 0.0f, 18.0f, 20.0f, 35.0f, 0.0f, 0.0f, 2.1f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 55.0f, 58.0f, 0.0f, 0.45f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM17', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 30.0f, 25.0f, 30.0f, 0.0f, 0.5f, 250.0f, 160.0f, 420.0f, 0.0f, 20.0f, 20.0f, 40.0f, 5.0f, 0.0f, 2.4f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 55.0f, 58.0f, 0.0f, 0.45f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, #if VERSION != VERSION_JPN { 'MM03', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, 0.0f, 30.0f, 0.0f, 5.2f, 320.0f, 260.0f, 660.0f, 0.0f, 25.0f, 0.0f, -10.0f, 30.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 1.5f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'MM23', 0xA, {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 4.0f, 320.0f, 240.0f, 900.0f, 0.0f, 34.0f, 0.0f, -5.0f, 60.0f, 0.0f, 2.6f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.8f}, - dCamParam_UNK002, + dCamPrmFlg_UNK002, }, { 'FN38', 0x1, {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 800.0f, 600.0f, -99999.992188f, 0.66f, 0.15f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 62.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, - dCamParam_UNK001 | dCamParam_UNK004 | dCamParam_UNK400, + dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, #endif }; diff --git a/src/d/d_cam_type.cpp b/src/d/d_cam_type.cpp index 218bf809d..4f4d022f4 100644 --- a/src/d/d_cam_type.cpp +++ b/src/d/d_cam_type.cpp @@ -5,263 +5,273 @@ #include "d/d_camera.h" -// Note: Not matching for JPN yet. -// All these array values are different because they're indexes into dCamParam_c::styles, which got shifted around. -// Need to make an enum for these. -const dCamera__Type dCamera_c::types[63] = { - { "Empty", { - { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "Plain", { - { 0x55, 0x55, 0x48, 0x08, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Keep", { - { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0004, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "Event", { - { 0x0004, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0004, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "Boss01", { - { 0x5C, 0x5C, 0x4A, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x30, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Cliff", { - { 0x7A, 0x7A, 0x15, 0x07, 0x88, 0x21, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x32, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "PlaySlide", { - { 0x5E, 0x5E, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Field", { - { 0x53, 0x53, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "ThrowUp", { - { 0x5F, 0x5F, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x31, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Gamoss", { - { 0x61, 0x61, 0x4C, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x8E, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "MiniIsland", { - { 0x62, 0x62, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x3B, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Cliff2", { - { 0x63, 0x59, 0x17, 0x07, 0x88, 0x37, 0x35, 0x0D, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x3C, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "FieldCushion", { - { 0x5A, 0x5A, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "FixdPos", { - { 0x02, 0x54, 0x47, 0x07, 0x88, 0xFFFF, 0xFFFF, 0x0E, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "SmoothFixdPos", { - { 0x03, 0x54, 0x47, 0x07, 0x88, 0xFFFF, 0xFFFF, 0x0E, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "WaterBattle", { - { 0x28, 0x28, 0x45, 0x07, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0xFFFF, 0xFFFF, 0x75, 0xFFFF, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "SmoothFixdPosC", { - { 0x40, 0x54, 0x47, 0x07, 0x88, 0xFFFF, 0xFFFF, 0x0E, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "ThrowInto", { - { 0x2B, 0x2B, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x31, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Boss03", { - { 0x66, 0x66, 0x4D, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "P_Ganon1", { - { 0x67, 0x67, 0x4E, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "P_Ganon2", { - { 0x68, 0x68, 0x4F, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "WindBoss", { - { 0x69, 0x69, 0x50, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x8E, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "P_Ganon3", { - { 0x6A, 0x6A, 0x4F, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Test01", { - { 0x64, 0x64, 0x4B, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Amoss", { - { 0x6B, 0x6B, 0x51, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Dungeon", { - { 0x54, 0x54, 0x47, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x8E, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Jump", { - { 0x01, 0x01, 0x47, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x8E, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "DungeonCorner", { - { 0x57, 0x57, 0x16, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x8E, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "DungeonWide", { - { 0x59, 0x59, 0x17, 0x07, 0x88, 0x37, 0x35, 0x0D, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x3C, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "CannonGame", { - { 0x3F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x04, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "FieldFOX", { - { 0x38, 0x38, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "G_Roof", { - { 0x41, 0x41, 0x52, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x44, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "G_BedRoom", { - { 0x77, 0x77, 0x7B, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x87, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "G_BedRoom2", { - { 0x77, 0x77, 0x7B, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x3D, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "TowerUp", { - { 0x43, 0x62, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "MajTower", { - { 0x80, 0x54, 0x80, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x8E, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Tower", { - { 0x42, 0x62, 0x43, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Boat", { - { 0x24, 0x20, 0x45, 0x06, 0x88, 0x1A, 0x6F, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0x2C, 0x2D, 0x76, 0xFFFF, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "BoatBattle", { - { 0x2A, 0x29, 0x6C, 0x06, 0x88, 0x1A, 0x6F, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0x2C, 0x2D, 0x76, 0xFFFF, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "WindHall", { - { 0x90, 0x71, 0x17, 0x07, 0x88, 0x37, 0x35, 0x0D, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x3C, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Tornado", { - { 0x34, 0x20, 0x45, 0x06, 0x88, 0x1A, 0x6E, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0x2C, 0x2D, 0xFFFF, 0xFFFF, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "OverLook", { - { 0x82, 0x82, 0x46, 0x70, 0x88, 0x21, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x3A, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Dome", { - { 0x72, 0x85, 0x47, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x3A, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "ForceFixdPos", { - { 0x02, 0xFFFF, 0xFFFF, 0xFFFF, 0x88, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0x2C, 0x2D, 0xFFFF, 0x13, 0x19, 0xFFFF, 0x04, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "FixdFrm", { - { 0x1D, 0xFFFF, 0xFFFF, 0xFFFF, 0x88, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0x2C, 0x2D, 0xFFFF, 0x13, 0x19, 0xFFFF, 0x04, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "DStairs", { - { 0x54, 0x54, 0x47, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x73, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Boss02", { - { 0x78, 0x78, 0x4A, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Seagal", { - { 0x86, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0xFFFF, 0xFFFF, 0x39, 0xFFFF, 0xFFFF, 0xFFFF, 0x04, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "SmallRoom", { - { 0x79, 0x79, 0x49, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x8D, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "DanMae", { - { 0x7F, 0x7F, 0x47, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x7D, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Cafe", { - { 0x65, 0x65, 0x49, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x84, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "DungeonPassage", { - { 0x5D, 0x5D, 0x16, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x84, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Corridor", { - { 0x05, 0x05, 0x17, 0x07, 0x88, 0x37, 0x35, 0x0D, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x84, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Subject", { - { 0x33, 0xFFFF, 0xFFFF, 0xFFFF, 0x88, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0x2C, 0x2D, 0xFFFF, 0x14, 0x19, 0xFFFF, 0x04, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "BigBird", { - { 0x81, 0x81, 0x89, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2E, 0x2D, 0x39, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Room", { - { 0x58, 0x58, 0x49, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x8C, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "DungeonDown", { - { 0x85, 0x85, 0x47, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x83, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Boss04", { - { 0x6D, 0x85, 0x47, 0x07, 0x88, 0x37, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x3A, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x8A }, - }}, - { "UnderTheEaves", { - { 0x53, 0x53, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x8B, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Restrict", { - { 0x36, 0xFFFF, 0xFFFF, 0xFFFF, 0x88, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0x2C, 0x2D, 0xFFFF, 0x13, 0x19, 0xFFFF, 0x04, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - { "DungeonUp", { - { 0x56, 0x56, 0x15, 0x07, 0x88, 0x21, 0x35, 0x0E, 0x0B, 0x0F }, - { 0x2C, 0x2D, 0x3C, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7E }, - }}, - { "Block", { - { 0x53, 0x53, 0x46, 0x06, 0x88, 0x37, 0x35, 0x0D, 0x1F, 0x1E }, - { 0x2C, 0x2D, 0x8F, 0x13, 0x19, 0x1C, 0x04, 0x27, 0x23, 0x7C }, - }}, - { "Water", { - { 0x5B, 0x5B, 0x47, 0x07, 0x88, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF }, - { 0x2C, 0x2D, 0x74, 0x13, 0x19, 0x1C, 0x04, 0xFFFF, 0xFFFF, 0xFFFF }, - }}, - +const dCamera__Type dCamera_c::types[] = { + { + "Empty", + {dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, + { + "Plain", + {dCamStyle_FN03_e, dCamStyle_FN03_e, dCamStyle_LL03_e, dCamStyle_TT03_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Keep", + {dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, + { + "Event", + {dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, + { + "Boss01", + {dCamStyle_FN15_e, dCamStyle_FN15_e, dCamStyle_LL05_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM05_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Cliff", + {dCamStyle_FN19_e, dCamStyle_FN19_e, dCamStyle_LL06_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW02_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM04_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "PlaySlide", + {dCamStyle_FN20_e, dCamStyle_FN20_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Field", + {dCamStyle_FN01_e, dCamStyle_FN01_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "ThrowUp", + {dCamStyle_FN21_e, dCamStyle_FN21_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM09_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Gamoss", + {dCamStyle_FN23_e, dCamStyle_FN23_e, dCamStyle_LL09_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM03_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "MiniIsland", + {dCamStyle_FN24_e, dCamStyle_FN24_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM10_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Cliff2", + {dCamStyle_FN26_e, dCamStyle_FN07_e, dCamStyle_LL07_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM08_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "FieldCushion", + {dCamStyle_FN10_e, dCamStyle_FN10_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "FixdPos", + {dCamStyle_PN05_e, dCamStyle_FN02_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "SmoothFixdPos", + {dCamStyle_PN12_e, dCamStyle_FN02_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "WaterBattle", + {dCamStyle_FN25_e, dCamStyle_FN25_e, dCamStyle_LL11_e, dCamStyle_TT02_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_MM15_e, dCamStyle_NONE_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "SmoothFixdPosC", + {dCamStyle_PN13_e, dCamStyle_FN02_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "ThrowInto", + {dCamStyle_FN29_e, dCamStyle_FN29_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM09_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Boss03", + {dCamStyle_FN30_e, dCamStyle_FN30_e, dCamStyle_LL12_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "P_Ganon1", + {dCamStyle_FN31_e, dCamStyle_FN31_e, dCamStyle_LL13_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "P_Ganon2", + {dCamStyle_FN32_e, dCamStyle_FN32_e, dCamStyle_LL14_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "WindBoss", + {dCamStyle_FN33_e, dCamStyle_FN33_e, dCamStyle_LL15_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM03_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "P_Ganon3", + {dCamStyle_FN34_e, dCamStyle_FN34_e, dCamStyle_LL14_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Test01", + {dCamStyle_FN27_e, dCamStyle_FN27_e, dCamStyle_LL10_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Amoss", + {dCamStyle_FN35_e, dCamStyle_FN35_e, dCamStyle_LL16_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Dungeon", + {dCamStyle_FN02_e, dCamStyle_FN02_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM03_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Jump", + {dCamStyle_FN08_e, dCamStyle_FN08_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM03_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, +#if VERSION == VERSION_JPN + { + "DungeonUp", + {dCamStyle_FN04_e, dCamStyle_FN04_e, dCamStyle_LL06_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW02_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM02_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, +#endif + { + "DungeonCorner", + {dCamStyle_FN06_e, dCamStyle_FN06_e, dCamStyle_LL08_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM03_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "DungeonWide", + {dCamStyle_FN07_e, dCamStyle_FN07_e, dCamStyle_LL07_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM08_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "CannonGame", + {dCamStyle_ZZ00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, + { + "FieldFOX", + {dCamStyle_GN01_e, dCamStyle_GN01_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "G_Roof", + {dCamStyle_FN82_e, dCamStyle_FN82_e, dCamStyle_LL82_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM82_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "G_BedRoom", + {dCamStyle_FN81_e, dCamStyle_FN81_e, dCamStyle_LL81_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM81_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "G_BedRoom2", + {dCamStyle_FN81_e, dCamStyle_FN81_e, dCamStyle_LL81_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM83_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "TowerUp", + {dCamStyle_IN02_e, dCamStyle_FN24_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "MajTower", + {dCamStyle_IN03_e, dCamStyle_FN02_e, dCamStyle_IN03_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM03_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Tower", + {dCamStyle_IN01_e, dCamStyle_FN24_e, dCamStyle_IN02_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Boat", + {dCamStyle_BN07_e, dCamStyle_BP07_e, dCamStyle_LL11_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_BW07_e, dCamStyle_BE07_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM07_e, dCamStyle_NONE_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "BoatBattle", + {dCamStyle_BN08_e, dCamStyle_BP08_e, dCamStyle_LL17_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_BW07_e, dCamStyle_BE07_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM07_e, dCamStyle_NONE_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, +#if VERSION == VERSION_JPN + { + "Water", + {dCamStyle_FN14_e, dCamStyle_FN14_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM14_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, +#endif + { + "WindHall", + {dCamStyle_FN38_e, dCamStyle_FP38_e, dCamStyle_LL07_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM08_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Tornado", + {dCamStyle_QN07_e, dCamStyle_BP07_e, dCamStyle_LL11_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_BW07_e, dCamStyle_BE08_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "OverLook", + {dCamStyle_FN11_e, dCamStyle_FN11_e, dCamStyle_LL01_e, dCamStyle_TT04_e, dCamStyle_SS01_e, dCamStyle_LW02_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM02_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Dome", + {dCamStyle_FN39_e, dCamStyle_FN05_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM02_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "ForceFixdPos", + {dCamStyle_PN05_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_NONE_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, + { + "FixdFrm", + {dCamStyle_XN06_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_NONE_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, + { + "DStairs", + {dCamStyle_FN02_e, dCamStyle_FN02_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM16_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Boss02", + {dCamStyle_FN40_e, dCamStyle_FN40_e, dCamStyle_LL05_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Seagal", + {dCamStyle_FN36_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_MM01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, + { + "SmallRoom", + {dCamStyle_FN41_e, dCamStyle_FN41_e, dCamStyle_LL04_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM17_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "DanMae", + {dCamStyle_FN42_e, dCamStyle_FN42_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM19_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Cafe", + {dCamStyle_FN28_e, dCamStyle_FN28_e, dCamStyle_LL04_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM20_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "DungeonPassage", + {dCamStyle_FN17_e, dCamStyle_FN17_e, dCamStyle_LL08_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM20_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Corridor", + {dCamStyle_FN12_e, dCamStyle_FN12_e, dCamStyle_LL07_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM20_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Subject", + {dCamStyle_LN17_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_NONE_e, dCamStyle_CC02_e, dCamStyle_SN15_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, + { + "BigBird", + {dCamStyle_FN43_e, dCamStyle_FN43_e, dCamStyle_LL18_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX02_e, dCamStyle_SY01_e, dCamStyle_MM01_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Room", + {dCamStyle_FN09_e, dCamStyle_FN09_e, dCamStyle_LL04_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM18_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "DungeonDown", + {dCamStyle_FN05_e, dCamStyle_FN05_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM21_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Boss04", + {dCamStyle_FN37_e, dCamStyle_FN05_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM02_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD04_e}, + }, + { + "UnderTheEaves", + {dCamStyle_FN01_e, dCamStyle_FN01_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM22_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Restrict", + {dCamStyle_LN01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_NONE_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_NONE_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, +#if VERSION != VERSION_JPN + { + "DungeonUp", + {dCamStyle_FN04_e, dCamStyle_FN04_e, dCamStyle_LL06_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_LW02_e, dCamStyle_LE01_e, dCamStyle_LH02_e, dCamStyle_LA02_e, dCamStyle_LB02_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM08_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD02_e}, + }, + { + "Block", + {dCamStyle_FN01_e, dCamStyle_FN01_e, dCamStyle_LL01_e, dCamStyle_TT01_e, dCamStyle_SS01_e, dCamStyle_LW01_e, dCamStyle_LE01_e, dCamStyle_LH01_e, dCamStyle_LA01_e, dCamStyle_LB01_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM23_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_HN18_e, dCamStyle_HN16_e, dCamStyle_DD01_e}, + }, + { + "Water", + {dCamStyle_FN14_e, dCamStyle_FN14_e, dCamStyle_LL02_e, dCamStyle_TT02_e, dCamStyle_SS01_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_SX01_e, dCamStyle_SY01_e, dCamStyle_MM14_e, dCamStyle_CC01_e, dCamStyle_SN15_e, dCamStyle_JN05_e, dCamStyle_EN00_e, dCamStyle_NONE_e, dCamStyle_NONE_e, dCamStyle_NONE_e}, + }, +#endif }; const int dCamera_c::type_num = ARRAY_SIZE(types); diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index 0996e61f4..54e3672b4 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -260,7 +260,7 @@ void dCamera_c::initialize(camera_class* camera, fopAc_ac_c* playerActor, u32 ca } } - mCurStyle = types[mCurType].mStyles[0][mCurMode]; + mCurStyle = types[mCurType].mStyles[mCurMode]; mLockOnActorId = fpcM_ERROR_PROCESS_ID_e; mStageMapToolCameraIdx = 0xFF; m0E8 = -1; @@ -269,7 +269,7 @@ void dCamera_c::initialize(camera_class* camera, fopAc_ac_c* playerActor, u32 ca mEventData.mStaffIdx = -1; mEventData.field_0x0c = -1; mRoomNo = -1; - m318 = -1e+09f; + m318 = C_BG_MIN_HEIGHT; mBG.m5C.m58 = C_BG_MIN_HEIGHT; mBG.m00.m58 = C_BG_MIN_HEIGHT; mBG.m00.m04.OffNormalGrp(); @@ -432,7 +432,7 @@ bool dCamera_c::ChangeModeOK(s32 param_1) { if (dComIfGp_evmng_cameraPlay() || chkFlag(0x20000000)) { return 0; } - return !(types[mCurType].mStyles[0][param_1] < 0); + return !(types[mCurType].mStyles[param_1] < 0); } /* 801621A0-801623A0 .text initPad__9dCamera_cFv */ @@ -794,19 +794,19 @@ bool dCamera_c::Run() { next = mNextMode; if (next != mCurMode) { - if (types[mCurType].mStyles[0][next] >= 0 && onModeChange(mCurMode, next)) { + if (types[mCurType].mStyles[next] >= 0 && onModeChange(mCurMode, next)) { mCurMode = mNextMode; } } - if (types[mCurType].mStyles[0][mCurMode] < 0) { + if (types[mCurType].mStyles[mCurMode] < 0) { mCurMode = 0; } - const s16 curStyle = types[mCurType].mStyles[0][mCurMode]; + const s16 curStyle = types[mCurType].mStyles[mCurMode]; if (curStyle >= 0) { if (mCurStyle != curStyle && onStyleChange(mCurStyle, curStyle)) { - mCurStyle = types[mCurType].mStyles[0][mCurMode]; + mCurStyle = types[mCurType].mStyles[mCurMode]; mCamParam.Change(mCurStyle); } } @@ -821,7 +821,7 @@ bool dCamera_c::Run() { dComIfGp_offCameraAttentionStatus(mCameraInfoIdx, 0x80); - if (mCamParam.CheckFlag(dCamParam_UNK004) && !check_owner_action(mPadId, daPyStts0_UNK4000000_e) && !check_owner_action1(mPadId, daPyStts1_UNK40000_e)) { + if (mCamParam.CheckFlag(dCamPrmFlg_UNK004) && !check_owner_action(mPadId, daPyStts0_UNK4000000_e) && !check_owner_action1(mPadId, daPyStts1_UNK40000_e)) { m148 += (forwardCheckAngle() - m148) * mCamSetup.mBGChk.FwdCushion(); } else { @@ -863,14 +863,14 @@ bool dCamera_c::Run() { clrFlag(0x90080); - if (mCamParam.CheckFlag(dCamParam_UNK001)) { + if (mCamParam.CheckFlag(dCamPrmFlg_UNK001)) { m068 = 0x3F; } - else if (mCamParam.CheckFlag(dCamParam_UNK002)) { + else if (mCamParam.CheckFlag(dCamPrmFlg_UNK002)) { m068 = 0xF; } - if (mCamParam.CheckFlag(dCamParam_UNK400)) { + if (mCamParam.CheckFlag(dCamPrmFlg_UNK400)) { m068 |= 0x40; } @@ -985,7 +985,7 @@ bool dCamera_c::NotRun() { mCurType = mCamTypeEvent; - eventCamera(types[mCurType].mStyles[0][3]); + eventCamera(types[mCurType].mStyles[3]); m07C++; m118++; @@ -1059,7 +1059,7 @@ bool dCamera_c::Draw() { /* 8016418C-80164898 .text nextMode__9dCamera_cFl */ int dCamera_c::nextMode(s32 i_curMode) { - /* Nonmatching - regswap */ + /* Nonmatching - regswap related to check_owner_action/check_owner_action1 */ dAttention_c& attn = dComIfGp_getAttention(); s32 next_mode = i_curMode; cXyz player_pos = positionOf(mpPlayerActor); @@ -1155,10 +1155,10 @@ int dCamera_c::nextMode(s32 i_curMode) { else if (check_owner_action(mPadId, daPyStts0_TELESCOPE_LOOK_e) || check_owner_action1(mPadId, daPyStts1_PICTO_BOX_AIM_e)) { next_mode = 0xe; } - else if (check_owner_action1(mPadId, daPyStts1_UNK80000000_e | daPyStts1_UNK80_e)) { + else if (check_owner_action(mPadId, daPyStts0_UNK80000000_e | daPyStts0_UNK80_e)) { next_mode = 0x11; } - else if (check_owner_action1(mPadId, daPyStts1_UNK800000_e)) { + else if (check_owner_action(mPadId, daPyStts0_UNK800000_e)) { if (m144 == 0) { next_mode = 0xc; } @@ -1166,13 +1166,13 @@ int dCamera_c::nextMode(s32 i_curMode) { next_mode = 0x12; } } - else if (check_owner_action(mPadId, daPyStts0_UNK10_e)) { + else if (check_owner_action1(mPadId, daPyStts1_UNK10_e)) { next_mode = 0xf; } - else if (check_owner_action1(mPadId, daPyStts1_UNK2000_e)) { + else if (check_owner_action(mPadId, daPyStts0_UNK2000_e)) { next_mode = 4; } - else if (check_owner_action1(mPadId, daPyStts1_UNK20000_e | daPyStts1_UNK4000_e | daPyStts1_UNK1000_e) && !attn.Lockon()) { + else if (check_owner_action(mPadId, daPyStts0_ROPE_AIM_e | daPyStts0_HOOKSHOT_AIM_e | daPyStts0_BOW_AIM_e) && !attn.Lockon()) { next_mode = 10; } else if (check_owner_action(mPadId, daPyStts0_BOOMERANG_AIM_e) && !attn.Lockon()) { next_mode = 11; @@ -1185,24 +1185,24 @@ int dCamera_c::nextMode(s32 i_curMode) { else if (check_owner_action1(mPadId, daPyStts1_UNK4_e)) { next_mode = 6; } - else if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK40_e | daPyStts0_UNK20_e))) { + else if (check_owner_action(mPadId, daPyStts0_UNK40_e | daPyStts0_UNK20_e)) { next_mode = 6; } - else if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e))) { + else if (check_owner_action(mPadId, daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e)) { next_mode = 5; } - else if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK400_e | daPyStts0_UNK4_e | daPyStts0_UNK2_e)) && i_curMode != 12) { + else if (check_owner_action(mPadId, daPyStts0_UNK400_e | daPyStts0_UNK4_e | daPyStts0_UNK2_e) && i_curMode != 12) { if (mpLockonTarget) { next_mode = 8; } } - else if (attn.LockonTruth() && !check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK800000_e | daPyStts0_BOOMERANG_WAIT_e))) { + else if (attn.LockonTruth() && !check_owner_action(mPadId, daPyStts0_CRAWL_e | daPyStts0_UNK4000000_e)) { next_mode = 2; } else if (attn.Lockon()) { next_mode = 1; } - else if (check_owner_action(mPadId, daPyStts0_BOOMERANG_WAIT_e) && !check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK37a02371_e & ~daPyStts0_UNK1000000_e)) && !check_owner_action1(mPadId, daPyStts1_UNK10_e | daPyStts1_WIND_WAKER_CONDUCT_e)) { + else if (check_owner_action(mPadId, daPyStts0_BOOMERANG_WAIT_e) && !check_owner_action(mPadId, daPyStts0_UNK37a02371_e & ~daPyStts0_UNK1000000_e) && !check_owner_action1(mPadId, daPyStts1_UNK10_e | daPyStts1_WIND_WAKER_CONDUCT_e)) { mpLockonTarget = get_boomerang_actor(mpPlayerActor); next_mode = 2; mLockOnActorId = fpcM_ERROR_PROCESS_ID_e; @@ -1237,7 +1237,7 @@ int dCamera_c::nextMode(s32 i_curMode) { mLockOnActorId = fpcM_ERROR_PROCESS_ID_e; } - if (next_mode == 12 && types[mCurType].mStyles[0][next_mode] < 0) { + if (next_mode == 12 && types[mCurType].mStyles[next_mode] < 0) { next_mode = i_curMode; if (mCurType != mCamTypeEvent && mCurType != mCamTypeBoat && mCurType != mCamTypeBoatBattle && mCurType != mCamTypeRestrict) { m254 |= 1; @@ -1245,7 +1245,7 @@ int dCamera_c::nextMode(s32 i_curMode) { m144 = 1; } - if (types[mCurType].mStyles[0][next_mode] >= 0) { + if (types[mCurType].mStyles[next_mode] >= 0) { if (next_mode == 1) { setFlag(0x100000); } @@ -1257,7 +1257,7 @@ int dCamera_c::nextMode(s32 i_curMode) { /* 80164898-80164A48 .text onModeChange__9dCamera_cFll */ bool dCamera_c::onModeChange(s32 i_curMode, s32 i_nextMode) { - if (i_curMode == 0xe && mCamParam.CheckFlag(dCamParam_UNK010)) { + if (i_curMode == 0xe && mCamParam.CheckFlag(dCamPrmFlg_UNK010)) { setView(0.0f, 0.0f, 640.0f, 480.0f); } @@ -1289,12 +1289,12 @@ bool dCamera_c::onModeChange(s32 i_curMode, s32 i_nextMode) { setFlag(0x10); break; case 0: - if (i_curMode == 1 && types[mCurType].mStyles[0][0] == types[mCurType].mStyles[0][1]) { + if (i_curMode == 1 && types[mCurType].mStyles[0] == types[mCurType].mStyles[1]) { m110 = 0; } break; case 1: - if (i_curMode == 0 && types[mCurType].mStyles[0][0] == types[mCurType].mStyles[0][1]) { + if (i_curMode == 0 && types[mCurType].mStyles[0] == types[mCurType].mStyles[1]) { m110 = 0; } break; @@ -1336,7 +1336,7 @@ int dCamera_c::nextType(s32 curType) { if (daNpc_kam_c::m_hyoi_kamome) { nextType = GetCameraTypeFromCameraName("Seagal"); } - else if ((check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK1000000_e | daPyStts0_SHIP_RIDE_e)) || check_owner_action1(mPadId, daPyStts1_UNK80_e)) && m524 == 0xFF) { + else if ((check_owner_action(mPadId, daPyStts0_UNK1000000_e | daPyStts0_SHIP_RIDE_e) || check_owner_action1(mPadId, daPyStts1_UNK80_e)) && m524 == 0xFF) { nextType = mCamTypeBoat; } else { @@ -1425,7 +1425,7 @@ bool dCamera_c::onTypeChange(s32 i_curType, s32 i_nextType) { m114 = 0; mode = mCurMode; if (m144 == 0) { - s32 style = types[i_nextType].mStyles[0][0]; + s32 style = types[i_nextType].mStyles[0]; if (style >= 0) { switch (mCamParam.Algorythmn(style)) { case 5: @@ -1986,7 +1986,7 @@ int dCamera_c::defaultTriming() { mTrimSize = 2; } - else if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_BOOMERANG_AIM_e | daPyStts0_ROPE_AIM_e | daPyStts0_HOOKSHOT_AIM_e | daPyStts0_BOW_AIM_e))) { + else if (check_owner_action(mPadId, daPyStts0_BOOMERANG_AIM_e | daPyStts0_ROPE_AIM_e | daPyStts0_HOOKSHOT_AIM_e | daPyStts0_BOW_AIM_e)) { mTrimSize = 1; } break; @@ -2588,7 +2588,7 @@ void dCamera_c::checkGroundInfo() { m314 = 1; } else { - m318 = -1e+09; + m318 = C_BG_MIN_HEIGHT; m314 = 0; } @@ -2734,7 +2734,7 @@ bool dCamera_c::followCamera(s32 param_1) { } } - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_CRAWL_e | daPyStts0_SWIM_e))) { + if (check_owner_action(mPadId, daPyStts0_CRAWL_e | daPyStts0_SWIM_e)) { if (local_498 < cSAngle(4.0f)) { local_498.Val(4.0f); } @@ -2744,7 +2744,7 @@ bool dCamera_c::followCamera(s32 param_1) { } } - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK200_e | daPyStts0_UNK100_e)) && !check_owner_action(mPadId, daPyStts0_UNK2000000_e)) { + if (check_owner_action(mPadId, daPyStts0_UNK200_e | daPyStts0_UNK100_e) && !check_owner_action(mPadId, daPyStts0_UNK2000000_e)) { if (dVar21 > -10.0f) { m3B0 = -10.0f; } @@ -2764,18 +2764,18 @@ bool dCamera_c::followCamera(s32 param_1) { cSAngle acStack_4a0 = cSAngle::_0; - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK40_e | daPyStts0_UNK20_e))) { + if (check_owner_action(mPadId, daPyStts0_UNK40_e | daPyStts0_UNK20_e)) { acStack_4a0 = calcPeepAngle(); if (check_owner_action(mPadId, daPyStts0_UNK20_e)) { dVar19 = -dVar19; } } - if (mCamParam.Flag(param_1, dCamParam_UNK200)) { + if (mCamParam.Flag(param_1, dCamPrmFlg_UNK200)) { bVar2 = true; } - if (!chkFlag(daPyStts0_SWIM_e) || !check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_BOOMERANG_AIM_e | daPyStts0_ROPE_AIM_e | daPyStts0_HOOKSHOT_AIM_e | daPyStts0_BOW_AIM_e))) { + if (!chkFlag(daPyStts0_SWIM_e) || !check_owner_action(mPadId, daPyStts0_BOOMERANG_AIM_e | daPyStts0_ROPE_AIM_e | daPyStts0_HOOKSHOT_AIM_e | daPyStts0_BOW_AIM_e)) { bVar3 = false; if (daNpc_Cb1_c::isFlying() || daNpc_Md_c::isFlying()) { bVar3 = true; @@ -2958,7 +2958,7 @@ bool dCamera_c::followCamera(s32 param_1) { fVar37 = mpPlayerActor->current.pos.y; fVar37 -= groundHeight(&player_pos); - if (m360 && (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_SWIM_e)) || daNpc_kam_c::m_hyoi_kamome == 0 || check_owner_action(mPadId, 0x200))) { + if (m360 && (check_owner_action(mPadId, daPyStts0_SWIM_e) || daNpc_kam_c::m_hyoi_kamome == 0 || check_owner_action(mPadId, 0x200))) { if (m388 < 0x50) { m388++; local_158.x = 176.0f; @@ -2971,11 +2971,11 @@ bool dCamera_c::followCamera(s32 param_1) { m388 = 0; } - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK4000000_e | daPyStts0_UNK2000000_e | daPyStts0_UNK800000_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e)) || (check_owner_action1(mPadId, daPyStts1_UNK10000_e) && mDMCSystem.field_0x0 == 0)) { + if (check_owner_action(mPadId, daPyStts0_UNK4000000_e | daPyStts0_UNK2000000_e | daPyStts0_UNK800000_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e) || (check_owner_action1(mPadId, daPyStts1_UNK10000_e) && mDMCSystem.field_0x0 == 0)) { setDMCAngle(); } - if ((check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK2000000_e | daPyStts0_UNK100_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e)) && check_owner_action1(mPadId, daPyStts1_UNK10000_e)) || (cSAngle::_270 < local_4ac && local_4ac < cSAngle::_90)) { + if ((check_owner_action(mPadId, daPyStts0_UNK2000000_e | daPyStts0_UNK100_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e) && check_owner_action1(mPadId, daPyStts1_UNK10000_e)) || (cSAngle::_270 < local_4ac && local_4ac < cSAngle::_90)) { m3EC = dVar23; } else { @@ -3006,7 +3006,7 @@ bool dCamera_c::followCamera(s32 param_1) { bVar3 = true; } - if (chkFlag(0x100000) || check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK4000000_e | daPyStts0_UNK2000000_e | daPyStts0_UNK800000_e | daPyStts0_TELESCOPE_LOOK_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e)) || check_owner_action1(mPadId, daPyStts1_UNK10000_e | daPyStts1_DEKU_LEAF_FAN_e) || m388) { + if (chkFlag(0x100000) || check_owner_action(mPadId, daPyStts0_UNK4000000_e | daPyStts0_UNK2000000_e | daPyStts0_UNK800000_e | daPyStts0_TELESCOPE_LOOK_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e) || check_owner_action1(mPadId, daPyStts1_UNK10000_e | daPyStts1_DEKU_LEAF_FAN_e) || m388) { bVar4 = false; } @@ -3026,7 +3026,7 @@ bool dCamera_c::followCamera(s32 param_1) { if (m780) { cXyz attn_pos = attentionPos(mpPlayerActor); - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_CRAWL_e | daPyStts0_SWIM_e | daPyStts0_UNK100_e))) { + if (check_owner_action(mPadId, daPyStts0_CRAWL_e | daPyStts0_SWIM_e | daPyStts0_UNK100_e)) { attn_pos.y = eyePos(mpPlayerActor).y + 30.0f; } else { @@ -3089,7 +3089,7 @@ bool dCamera_c::followCamera(s32 param_1) { m3B8 *= 0.1f; } - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK2000000_e | daPyStts0_UNK100_e)) || check_owner_action1(mPadId, check_owner_action1(mPadId, daPyStts1_UNK10000_e))) { + if (check_owner_action(mPadId, daPyStts0_UNK2000000_e | daPyStts0_UNK100_e) || check_owner_action1(mPadId, check_owner_action1(mPadId, daPyStts1_UNK10000_e))) { if (m38C == 0) { if (local_4ac > cSAngle::_270 && local_4ac < cSAngle::_90) { m38C = 1; @@ -3125,7 +3125,7 @@ bool dCamera_c::followCamera(s32 param_1) { m3B8 = iVar5 * 0.033333335f; m38C++; } - else if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK40_e | daPyStts0_UNK20_e))) { + else if (check_owner_action(mPadId, daPyStts0_UNK40_e | daPyStts0_UNK20_e)) { m3B8 = 0.15f; } else if (mStickMainValueLast < 0.1f) { @@ -3148,7 +3148,7 @@ bool dCamera_c::followCamera(s32 param_1) { } else if (bVar1) { acStack_4b4 = acStack_4a8; - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK40_e | daPyStts0_UNK20_e))) { + if (check_owner_action(mPadId, daPyStts0_UNK40_e | daPyStts0_UNK20_e)) { acStack_4b4 += acStack_4a0; } } @@ -3239,7 +3239,7 @@ bool dCamera_c::followCamera(s32 param_1) { m3A4 = positionOf(mpPlayerActor).y; - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK2000000_e | daPyStts0_UNK100_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e) || check_owner_action1(mPadId, daPyStts1_UNK10000_e))) { + if (check_owner_action(mPadId, daPyStts0_UNK2000000_e | daPyStts0_UNK100_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e || check_owner_action1(mPadId, daPyStts1_UNK10000_e))) { m3B4 = 1; } else { @@ -3278,7 +3278,7 @@ bool dCamera_c::followCamera(s32 param_1) { m03C.R(m03C.R() + m3DC * (local_484.R() - m03C.R())); m3CC = m044 + m03C.Xyz(); - if (bVar3 && bVar4 && mCamParam.Flag(param_1, dCamParam_UNK001)) { + if (bVar3 && bVar4 && mCamParam.Flag(param_1, dCamPrmFlg_UNK001)) { cSGlobe cStack_48c(m03C); cStack_48c.V(cSAngle(dVar28)); cXyz cStack_2b4 = m044 + cStack_48c.Xyz(); @@ -3406,7 +3406,7 @@ bool dCamera_c::lockonCamera(s32 param_1) { f32 dVar17 = dComIfGp_getAttention().LockonReleaseDistanse(); f32 dVar20 = 10000.0f; cSGlobe local_230; - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e))) { + if (check_owner_action(mPadId, daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e)) { if (mpLockonTarget) { local_230.Val(mCamSetup.ParallelDist(), cSAngle::_0, directionOf(mpPlayerActor)); fVar4 = 1.0f; @@ -3660,7 +3660,7 @@ bool dCamera_c::lockonCamera(s32 param_1) { } } - if (check_owner_action(mPadId, daPy__PlayerStatus0(daPyStts0_UNK1000000_e | daPyStts0_SHIP_RIDE_e))) { + if (check_owner_action(mPadId, daPyStts0_UNK1000000_e | daPyStts0_SHIP_RIDE_e)) { dVar17 = local_270.Degree(); if (dVar17 < mCamParam.Val(param_1, dCamStyleParam_UNK16)) { local_270.Val(mCamParam.Val(param_1, dCamStyleParam_UNK16)); @@ -3832,7 +3832,7 @@ bool dCamera_c::CalcSubjectAngle(s16* param_1, s16* param_2) { } if (!check_owner_action(mPadId, daPyStts0_UNK40000_e)) { - if (mCamParam.Flag(m380, dCamParam_UNK020)) { + if (mCamParam.Flag(m380, dCamPrmFlg_UNK020)) { m384 = -f1; m388 = fVar5; } @@ -3844,7 +3844,7 @@ bool dCamera_c::CalcSubjectAngle(s16* param_1, s16* param_2) { m388 += dVar12 * fVar3; } else { - if (mCamParam.Flag(m380, dCamParam_UNK010)) { + if (mCamParam.Flag(m380, dCamPrmFlg_UNK010)) { f32 temp = fVar3 - (m38C * (fVar3 * fVar4)); m384 = -dVar11 * temp; m388 += dVar12 * temp; From f690b92d28530f9ffb2038a05dc4ac51ed444648 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 7 May 2025 01:19:23 -0400 Subject: [PATCH 02/31] Add camera mWork union; also fix clang union handling Union members with non-trivial ctors/dtors is undefined behavior and clangd normally throws a fit and refuses to parse the whole union, but it seems to be possible to ifdef the problematic ctors out for non-mwerks compilers and explicitly tell modern compilers to use the defaults instead. Thanks to encounter for this fix. --- .clangd | 1 + include/SSystem/SComponent/c_angle.h | 20 +- include/SSystem/SComponent/c_xyz.h | 18 +- include/d/d_camera.h | 99 ++++-- include/f_op/f_op_actor.h | 33 +- include/f_op/f_op_actor_mng.h | 12 - src/SSystem/SComponent/c_angle.cpp | 4 + src/d/d_camera.cpp | 483 +++++++++++++-------------- src/f_op/f_op_actor_mng.cpp | 44 +-- 9 files changed, 373 insertions(+), 341 deletions(-) diff --git a/.clangd b/.clangd index 3221e3cea..893158290 100644 --- a/.clangd +++ b/.clangd @@ -4,6 +4,7 @@ CompileFlags: "-Wno-c++11-compat-deprecated-writable-strings", "-Wno-undefined-inline", "-Wno-multichar", + "-Wno-c++11-extensions", "-Wsometimes-uninitialized", "-Wlogical-op-parentheses", "-Wbitwise-op-parentheses", diff --git a/include/SSystem/SComponent/c_angle.h b/include/SSystem/SComponent/c_angle.h index b6910aaad..5e2d2d14e 100644 --- a/include/SSystem/SComponent/c_angle.h +++ b/include/SSystem/SComponent/c_angle.h @@ -13,9 +13,15 @@ public: const static cSAngle _90; const static cSAngle _180; const static cSAngle _270; +#ifdef __MWERKS__ cSAngle() {} ~cSAngle() {} cSAngle(const cSAngle&); +#else + cSAngle() = default; + ~cSAngle() = default; + cSAngle(const cSAngle&) = default; +#endif cSAngle(s16); cSAngle(float); s16 Val() const { return mAngle; } @@ -45,7 +51,9 @@ public: bool operator<(const cSAngle& other) const { return mAngle < other.mAngle; } bool operator>(const cSAngle& other) const { return mAngle > other.mAngle; } operator s16() const { return mAngle; } +#ifdef __MWERKS__ void operator=(const cSAngle& other) { mAngle = other.mAngle; } +#endif static inline cSAngle getMaxNegative() { return cSAngle((s16)-0x8000); } inline void mirrorAtMaxNeg() { *this = cSAngle((s16)-0x8000) - *this; } }; @@ -131,12 +139,18 @@ private: cSAngle mInclination; // original: U public: - cSGlobe() {}; +#ifdef __MWERKS__ + cSGlobe() {} + ~cSGlobe() {} cSGlobe(const cSGlobe&); +#else + cSGlobe() = default; + ~cSGlobe() = default; + cSGlobe(const cSGlobe&) = default; +#endif cSGlobe(float, short, short); cSGlobe(float, const cSAngle&, const cSAngle&); cSGlobe(const cXyz&); - ~cSGlobe() {} cSGlobe& Formal(); void Val(const cSGlobe&); void Val(float, short, short); @@ -154,6 +168,6 @@ public: void Polar(cSPolar*) const; cXyz Norm() const; cSGlobe& Invert(); -}; +}; // Size: 0x8 #endif /* C_ANGLE_H */ diff --git a/include/SSystem/SComponent/c_xyz.h b/include/SSystem/SComponent/c_xyz.h index b6fb430fc..7c3e1cdab 100644 --- a/include/SSystem/SComponent/c_xyz.h +++ b/include/SSystem/SComponent/c_xyz.h @@ -18,18 +18,24 @@ struct cXyz : Vec { static const cXyz BaseXZ; static const cXyz BaseYZ; static const cXyz BaseXYZ; +#ifdef __MWERKS__ + cXyz() {} ~cXyz() {} - /* inlined */ cXyz() {} - cXyz(f32 pX, f32 pY, f32 pZ) { - x = pX; - y = pY; - z = pZ; - } cXyz(const cXyz& vec) { x = vec.x; y = vec.y; z = vec.z; } +#else + cXyz() = default; + ~cXyz() = default; + cXyz(const cXyz& vec) = default; +#endif + cXyz(f32 pX, f32 pY, f32 pZ) { + x = pX; + y = pY; + z = pZ; + } cXyz(const Vec& vec) { x = vec.x; y = vec.y; diff --git a/include/d/d_camera.h b/include/d/d_camera.h index a80a1bcd5..73420043c 100644 --- a/include/d/d_camera.h +++ b/include/d/d_camera.h @@ -260,41 +260,70 @@ public: /* 0x364 */ int m364; /* 0x368 */ f32 m368; /* 0x36C */ cXyz m36C; - /* 0x378 */ int m378; - /* 0x37C */ u8 m37C; // `CalcSubjectAngle` suggests this should be u8 but `followCamera` suggests it should be int - /* 0x37D */ u8 m37D; // The fact that this a referenced in `CalcSubjectAngle` suggests m37C can't be an int? - /* 0x37E */ s16 m37E; - /* 0x380 */ int m380; - /* 0x384 */ f32 m384; - /* 0x388 */ f32 m388; // `CalcSubjectAngle` suggests this should be a float but `followCamera` suggests it should be int - /* 0x38C */ f32 m38C; // Similar issue for 38C - /* 0x390 */ s16 m390; - /* 0x392 */ s16 m392; - /* 0x394 */ f32 m394; - /* 0x398 */ f32 m398; - /* 0x39C */ f32 m39C; - /* 0x3A0 */ f32 m3A0; - /* 0x3A4 */ f32 m3A4; - /* 0x3A8 */ f32 m3A8; - /* 0x3AC */ f32 m3AC; - /* 0x3B0 */ f32 m3B0; - /* 0x3B4 */ int m3B4; - /* 0x3B8 */ cSAngle m3B8; // `CalcSubjectAngle` thinks this is a cSAngle but `followCamera` thinks its a float (could also be cSGlobe since m3BA is a cSAngle and m3BC is a float) - /* 0x3BA */ cSAngle m3BA; - /* 0x3BC */ f32 m3BC; - /* 0x3C0 */ cXyz m3C0; - /* 0x3CC */ cXyz m3CC; - /* 0x3D8 */ u8 m3D8; - /* 0x3D9 */ u8 m3D9; - /* 0x3DA */ u8 m3DA; - /* 0x3DB */ u8 m3DB; - /* 0x3DC */ f32 m3DC; - /* 0x3E0 */ f32 m3E0; - /* 0x3E4 */ f32 m3E4; - /* 0x3E8 */ f32 m3E8; - /* 0x3EC */ f32 m3EC; - /* 0x3F0 */ f32 m3F0; - /* 0x3F4 */ u8 m3F4[0x3F8 - 0x3F4]; + /* 0x314 */ union Work { + struct { + /* 0x378 */ int m378; + /* 0x37C */ int m37C; + /* 0x380 */ int m380; + /* 0x384 */ f32 m384; + /* 0x388 */ int m388; + /* 0x38C */ int m38C; + /* 0x390 */ s16 m390; + /* 0x392 */ s16 m392; + /* 0x394 */ f32 m394; + /* 0x398 */ f32 m398; + /* 0x39C */ f32 m39C; + /* 0x3A0 */ f32 m3A0; + /* 0x3A4 */ f32 m3A4; + /* 0x3A8 */ f32 m3A8; + /* 0x3AC */ f32 m3AC; + /* 0x3B0 */ f32 m3B0; + /* 0x3B4 */ int m3B4; + /* 0x3B8 */ f32 m3B8; + /* 0x3BC */ f32 m3BC; + /* 0x3C0 */ cXyz m3C0; + /* 0x3CC */ cXyz m3CC; + /* 0x3D8 */ u8 m3D8; + /* 0x3D9 */ u8 m3D9; + /* 0x3DA */ u8 m3DA; + /* 0x3DB */ u8 m3DB; + /* 0x3DC */ f32 m3DC; + /* 0x3E0 */ f32 m3E0; + /* 0x3E4 */ f32 m3E4; + /* 0x3E8 */ f32 m3E8; + /* 0x3EC */ f32 m3EC; + /* 0x3F0 */ f32 m3F0; + /* 0x3F4 */ u8 m3F4[0x3F8 - 0x3F4]; + } follow; + struct { + /* 0x378 */ int m378; + /* 0x37C */ u8 m37C[0x380 - 0x37C]; + /* 0x380 */ int m380; + /* 0x384 */ f32 m384; + /* 0x388 */ int m388; + /* 0x38C */ u8 m38C; + /* 0x390 */ cXyz m390; + /* 0x39C */ u8 m39C; + /* 0x3A0 */ f32 m3A0; + /* 0x3A4 */ f32 m3A4; + /* 0x3A8 */ cSGlobe m3A8; + /* 0x3B0 */ f32 m3B0; + /* 0x3B4 */ f32 m3B4; + /* 0x3B8 */ f32 m3B8; + } lockon; + struct { + /* 0x378 */ int m378; + /* 0x37C */ u8 m37C; + /* 0x37D */ u8 m37D; + /* 0x380 */ int m380; + /* 0x384 */ f32 m384; + /* 0x388 */ f32 m388; + /* 0x38C */ f32 m38C; + /* 0x390 */ u8 m390[0x3B8 - 0x390]; + /* 0x3B8 */ cSAngle m3B8; + /* 0x3BA */ cSAngle m3BA; + } subject; + } mWork; /* 0x3F8 */ dCamera_event_data mEventData; /* 0x50C */ u32 mEventFlags; /* 0x510 */ int mCurStyle; diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 0fe99b9a3..2015f719d 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -227,54 +227,47 @@ class JntHit_c; struct fopAc_cullSizeSphere { public: #ifdef __MWERKS__ - /* 0x0 */ cXyz center; - /* 0xC */ f32 radius; - fopAc_cullSizeSphere() {} + ~fopAc_cullSizeSphere() {} +#else + fopAc_cullSizeSphere() = default; + ~fopAc_cullSizeSphere() = default; +#endif fopAc_cullSizeSphere(cXyz p, f32 r) { center = p; radius = r; } - ~fopAc_cullSizeSphere() {} -#else - /* 0x0 */ Vec center; + + /* 0x0 */ cXyz center; /* 0xC */ f32 radius; -#endif }; -#ifdef __MWERKS__ #define fopAc_MakeCullSizeSphere(center, radius) fopAc_cullSizeSphere(center, radius) -#else -#define fopAc_MakeCullSizeSphere(center, radius) {(Vec)center, radius} -#endif struct fopAc_cullSizeBox { public: #ifdef __MWERKS__ fopAc_cullSizeBox() {} + ~fopAc_cullSizeBox() {} fopAc_cullSizeBox(const fopAc_cullSizeBox& box) { min = box.min; max = box.max; } +#else + fopAc_cullSizeBox() = default; + ~fopAc_cullSizeBox() = default; + fopAc_cullSizeBox(const fopAc_cullSizeBox& box) = default; +#endif fopAc_cullSizeBox(cXyz min, cXyz max) { this->min = min; this->max = max; } - ~fopAc_cullSizeBox() {} /* 0x0 */ cXyz min; /* 0xC */ cXyz max; -#else - /* 0x0 */ Vec min; - /* 0xC */ Vec max; -#endif }; -#ifdef __MWERKS__ #define fopAc_MakeCullSizeBox(min, max) fopAc_cullSizeBox(min, max) -#else -#define fopAc_MakeCullSizeBox(min, max) {(Vec)min, (Vec)max} -#endif class fopAc_ac_c : public leafdraw_class { public: diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 2357afec2..6a77a4ddd 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -502,23 +502,11 @@ void fopAcM_DeleteHeap(fopAc_ac_c* p_actor); bool fopAcM_entrySolidHeap(fopAc_ac_c* p_actor, heapCallbackFunc p_heapCallback, u32 estimatedHeapSize); inline void fopAcM_SetMin(fopAc_ac_c* p_actor, f32 minX, f32 minY, f32 minZ) { -#ifdef __MWERKS__ p_actor->cull.box.min.set(minX, minY, minZ); -#else - p_actor->cull.box.min.x = minX; - p_actor->cull.box.min.y = minY; - p_actor->cull.box.min.z = minZ; -#endif } inline void fopAcM_SetMax(fopAc_ac_c* p_actor, f32 maxX, f32 maxY, f32 maxZ) { -#ifdef __MWERKS__ p_actor->cull.box.max.set(maxX, maxY, maxZ); -#else - p_actor->cull.box.max.x = maxX; - p_actor->cull.box.max.y = maxY; - p_actor->cull.box.max.z = maxZ; -#endif } void fopAcM_setCullSizeBox(fopAc_ac_c* p_actor, f32 minX, f32 minY, f32 minZ, f32 maxX, f32 maxY, diff --git a/src/SSystem/SComponent/c_angle.cpp b/src/SSystem/SComponent/c_angle.cpp index a9718b5e5..0e7ebcb84 100644 --- a/src/SSystem/SComponent/c_angle.cpp +++ b/src/SSystem/SComponent/c_angle.cpp @@ -14,10 +14,12 @@ const cSAngle cSAngle::_90(static_cast(0x4000)); const cSAngle cSAngle::_180(static_cast(-0x8000)); const cSAngle cSAngle::_270(static_cast(-0x4000)); +#ifdef __MWERKS__ /* 80253BB0-80253BE0 .text __ct__7cSAngleFRC7cSAngle */ cSAngle::cSAngle(const cSAngle& angle) { Val(angle); } +#endif /* 80253BE0-80253C10 .text __ct__7cSAngleFs */ cSAngle::cSAngle(s16 angle) { @@ -246,10 +248,12 @@ void cSPolar::Globe(cSGlobe* globe) const { globe->Val(mRadial, 0x4000 - mAngle1.Val(), mAngle2.Val()); } +#ifdef __MWERKS__ /* 80254524-80254554 .text __ct__7cSGlobeFRC7cSGlobe */ cSGlobe::cSGlobe(const cSGlobe& other) { Val(other); } +#endif /* 80254554-80254584 .text __ct__7cSGlobeFfss */ cSGlobe::cSGlobe(f32 f, s16 s1, s16 s2) { diff --git a/src/d/d_camera.cpp b/src/d/d_camera.cpp index 54e3672b4..85a5ac242 100644 --- a/src/d/d_camera.cpp +++ b/src/d/d_camera.cpp @@ -2681,9 +2681,9 @@ bool dCamera_c::followCamera(s32 param_1) { bVar2 = false; if (m108 == 0) { - m3AC = 0; - m3B0 = 0.0f; - m3D9 = 0; + mWork.follow.m3AC = 0; + mWork.follow.m3B0 = 0.0f; + mWork.follow.m3D9 = 0; } bVar1 = false; @@ -2746,11 +2746,11 @@ bool dCamera_c::followCamera(s32 param_1) { if (check_owner_action(mPadId, daPyStts0_UNK200_e | daPyStts0_UNK100_e) && !check_owner_action(mPadId, daPyStts0_UNK2000000_e)) { if (dVar21 > -10.0f) { - m3B0 = -10.0f; + mWork.follow.m3B0 = -10.0f; } } else { - m3B0 += ((dVar21 - m3B0) * 0.06f); + mWork.follow.m3B0 += ((dVar21 - mWork.follow.m3B0) * 0.06f); } if (check_owner_action1(mPadId, daPyStts1_UNK40000_e)) { @@ -2783,61 +2783,61 @@ bool dCamera_c::followCamera(s32 param_1) { if (bVar3) { if (mStickMainPosXLast < -0.2f) { - m3D9 = 1; + mWork.follow.m3D9 = 1; } if (mStickMainPosXLast > 0.2f) { - m3D9 = 0; + mWork.follow.m3D9 = 0; } f32 temp_004 = 0.04f; - if (m3D9) { + if (mWork.follow.m3D9) { fVar37 = -45.0f; } else { fVar37 = 45.0f; } - m3AC += (fVar37 - m3AC) * temp_004; + mWork.follow.m3AC += (fVar37 - mWork.follow.m3AC) * temp_004; } else { - m3AC += (dVar19 - m3AC) * 0.06f; + mWork.follow.m3AC += (dVar19 - mWork.follow.m3AC) * 0.06f; } } - cXyz local_314(m3AC, dVar20, m3B0); + cXyz local_314(mWork.follow.m3AC, dVar20, mWork.follow.m3B0); cXyz local_158; if (m108 == 0) { m03C.Val(m050 - m044); - m378 = 'FLLW'; - m394 = fVar40; - m388 = 0x50; - m398 = dVar25; - m39C = dVar24; - m38C = m392 = m390 = 0; - m3A0 = m3BC = mDirection.V().Degree(); - m3C0 = m044; - m3CC = m050; - m3E8 = m3E0 = m3E4 = 0.01f; - m3DC = 0.75f; - m3EC = dVar23; - m3F0 = dVar22; - m3B4 = 0; - m3D8 = 1; - m3A8 = m060; - m3B8 = 0.0f; - m3DA = 0; + mWork.follow.m378 = 'FLLW'; + mWork.follow.m394 = fVar40; + mWork.follow.m388 = 0x50; + mWork.follow.m398 = dVar25; + mWork.follow.m39C = dVar24; + mWork.follow.m38C = mWork.follow.m392 = mWork.follow.m390 = 0; + mWork.follow.m3A0 = mWork.follow.m3BC = mDirection.V().Degree(); + mWork.follow.m3C0 = m044; + mWork.follow.m3CC = m050; + mWork.follow.m3E8 = mWork.follow.m3E0 = mWork.follow.m3E4 = 0.01f; + mWork.follow.m3DC = 0.75f; + mWork.follow.m3EC = dVar23; + mWork.follow.m3F0 = dVar22; + mWork.follow.m3B4 = 0; + mWork.follow.m3D8 = 1; + mWork.follow.m3A8 = m060; + mWork.follow.m3B8 = 0.0f; + mWork.follow.m3DA = 0; - m3A4 = positionOf(mpPlayerActor).y; + mWork.follow.m3A4 = positionOf(mpPlayerActor).y; if (chkFlag(0x8000) || !m110) { m102 = 1; m101 = 1; m100 = 1; - m37C = 1; + mWork.follow.m37C = 1; } else { cXyz cStack_248 = relationalPos(mpPlayerActor, &local_314); @@ -2873,13 +2873,13 @@ bool dCamera_c::followCamera(s32 param_1) { dVar20 = 10.0f; } - m37C = (std::sqrtf(playerHeight / dVar20) * 3.8f) + 1; + mWork.follow.m37C = (std::sqrtf(playerHeight / dVar20) * 3.8f) + 1; } - m398 = m39C = mDirection.R(); - m3A8 = mFovY; - m380 = m37C * (m37C + 1) >> 1; - m384 = 0.0f; + mWork.follow.m398 = mWork.follow.m39C = mDirection.R(); + mWork.follow.m3A8 = mFovY; + mWork.follow.m380 = mWork.follow.m37C * (mWork.follow.m37C + 1) >> 1; + mWork.follow.m384 = 0.0f; } cXyz cStack_260 = relationalPos(mpPlayerActor, &local_314); @@ -2890,17 +2890,17 @@ bool dCamera_c::followCamera(s32 param_1) { cXyz cross; if (m100 == 0) { if (m31D != 0) { - dComIfG_Bgsp()->MoveBgMatrixCrrPos(mBG.m5C.m04, true, &m3C0, NULL, NULL); + dComIfG_Bgsp()->MoveBgMatrixCrrPos(mBG.m5C.m04, true, &mWork.follow.m3C0, NULL, NULL); } - m384 = m37C - m108; + mWork.follow.m384 = mWork.follow.m37C - m108; - f32 temp = (m384 / m380); - m3C0 += (cStack_260 - m3C0) * temp; + f32 temp = (mWork.follow.m384 / mWork.follow.m380); + mWork.follow.m3C0 += (cStack_260 - mWork.follow.m3C0) * temp; - m044 += (m3C0 - m044) * dVar23; + m044 += (mWork.follow.m3C0 - m044) * dVar23; - f32 xyzDist = dCamMath::xyzHorizontalDistance(cStack_260, m3C0); + f32 xyzDist = dCamMath::xyzHorizontalDistance(cStack_260, mWork.follow.m3C0); if (local_314.x > local_314.z) { local_314.z = local_314.x; @@ -2937,19 +2937,18 @@ bool dCamera_c::followCamera(s32 param_1) { m03C.U(m03C.U() + ((acStack_4a8.Inv() - m03C.U()) * fVar40)); } - m3CC = m050 = m044 + m03C.Xyz(); + mWork.follow.m3CC = m050 = m044 + m03C.Xyz(); - if (m37C <= m108) { + if (mWork.follow.m37C <= m108) { m102 = 1; m101 = 1; m100 = 1; } - m3A0 = m03C.V().Degree(); - m39C = m03C.R(); - //m398 = pfVar14; + mWork.follow.m3A0 = m03C.V().Degree(); + mWork.follow.m398 = mWork.follow.m39C = m03C.R(); m060 += (fVar40 * (dVar31 - m060)); - m380 -= m384; + mWork.follow.m380 -= mWork.follow.m384; return true; } @@ -2959,16 +2958,16 @@ bool dCamera_c::followCamera(s32 param_1) { fVar37 -= groundHeight(&player_pos); if (m360 && (check_owner_action(mPadId, daPyStts0_SWIM_e) || daNpc_kam_c::m_hyoi_kamome == 0 || check_owner_action(mPadId, 0x200))) { - if (m388 < 0x50) { - m388++; + if (mWork.follow.m388 < 0x50) { + mWork.follow.m388++; local_158.x = 176.0f; - local_158.y = m388; - m394 += (fVar40 - m394) * dCamMath::rationalBezierRatio(m388 / 80.0f, 1.25f); + local_158.y = mWork.follow.m388; + mWork.follow.m394 += (fVar40 - mWork.follow.m394) * dCamMath::rationalBezierRatio(mWork.follow.m388 / 80.0f, 1.25f); } } else { - m394 = 0.0F; - m388 = 0; + mWork.follow.m394 = 0.0F; + mWork.follow.m388 = 0; } if (check_owner_action(mPadId, daPyStts0_UNK4000000_e | daPyStts0_UNK2000000_e | daPyStts0_UNK800000_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e) || (check_owner_action1(mPadId, daPyStts1_UNK10000_e) && mDMCSystem.field_0x0 == 0)) { @@ -2976,29 +2975,29 @@ bool dCamera_c::followCamera(s32 param_1) { } if ((check_owner_action(mPadId, daPyStts0_UNK2000000_e | daPyStts0_UNK100_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e) && check_owner_action1(mPadId, daPyStts1_UNK10000_e)) || (cSAngle::_270 < local_4ac && local_4ac < cSAngle::_90)) { - m3EC = dVar23; + mWork.follow.m3EC = dVar23; } else { - m3EC = 0.1f; + mWork.follow.m3EC = 0.1f; } - if (m388 == 0) { - m3F0 = dVar22; + if (mWork.follow.m388 == 0) { + mWork.follow.m3F0 = dVar22; } else { - m3F0 = dVar22 * 0.1f + (1.0f - (dVar22 * 0.1f)) * m394; - if (chkFlag(0x100000) || m3EC <= 0.25f) { + mWork.follow.m3F0 = dVar22 * 0.1f + (1.0f - (dVar22 * 0.1f)) * mWork.follow.m394; + if (chkFlag(0x100000) || mWork.follow.m3EC <= 0.25f) { bVar3 = false; if (daNpc_Cb1_c::isFlying() || daNpc_Md_c::isFlying()) { bVar3 = true; } if (!bVar3 && check_owner_action1(mPadId, daPyStts1_UNK40000_e)) goto LAB_8016b24c; } - m3EC = m394 * 0.75f + 0.25f; + mWork.follow.m3EC = mWork.follow.m394 * 0.75f + 0.25f; } LAB_8016b24c: - cXyz cStack_284(m3EC, m3F0, m3EC); + cXyz cStack_284(mWork.follow.m3EC, mWork.follow.m3F0, mWork.follow.m3EC); bVar4 = true; bVar3 = false; @@ -3006,7 +3005,7 @@ bool dCamera_c::followCamera(s32 param_1) { bVar3 = true; } - if (chkFlag(0x100000) || check_owner_action(mPadId, daPyStts0_UNK4000000_e | daPyStts0_UNK2000000_e | daPyStts0_UNK800000_e | daPyStts0_TELESCOPE_LOOK_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e) || check_owner_action1(mPadId, daPyStts1_UNK10000_e | daPyStts1_DEKU_LEAF_FAN_e) || m388) { + if (chkFlag(0x100000) || check_owner_action(mPadId, daPyStts0_UNK4000000_e | daPyStts0_UNK2000000_e | daPyStts0_UNK800000_e | daPyStts0_TELESCOPE_LOOK_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e) || check_owner_action1(mPadId, daPyStts1_UNK10000_e | daPyStts1_DEKU_LEAF_FAN_e) || mWork.follow.m388) { bVar4 = false; } @@ -3043,107 +3042,107 @@ bool dCamera_c::followCamera(s32 param_1) { cSGlobe local_484(m050 - m044); - if (m392 <= 0 || iVar17 <= m392) { + if (mWork.follow.m392 <= 0 || iVar17 <= mWork.follow.m392) { dVar20 = dCamMath::rationalBezierRatio((float) iVar5 / (float)iVar17, fVar38); - m3D8 = 1; - m3B8 = (1.0f - m3B8.Val()) * dVar20; + mWork.follow.m3D8 = 1; + mWork.follow.m3B8 = (1.0f - mWork.follow.m3B8) * dVar20; } else if (chkFlag(0x100000) || daNpc_Cb1_c::isFlying()) { - if (m3D8) { - m3B8 = 0.05f; + if (mWork.follow.m3D8) { + mWork.follow.m3B8 = 0.05f; } - m3D8 = 0; - m3B8 += (1.0f - m3B8.Val()) * 0.2f; + mWork.follow.m3D8 = 0; + mWork.follow.m3B8 += (1.0f - mWork.follow.m3B8) * 0.2f; } else if (daNpc_Md_c::isFlying() || daNpc_kam_c::m_hyoi_kamome) { - m3D8 = 1; + mWork.follow.m3D8 = 1; } else if (check_owner_action1(mPadId, check_owner_action1(mPadId, daPyStts1_UNK40000_e | daPyStts1_DEKU_LEAF_FAN_e))) { - if (m3D8) { - m3B8 = 0.05f; + if (mWork.follow.m3D8) { + mWork.follow.m3B8 = 0.05f; } - m3D8 = 0; - m3B8 += (0.5f - m3B8.Val()) * 0.05f; + mWork.follow.m3D8 = 0; + mWork.follow.m3B8 += (0.5f - mWork.follow.m3B8) * 0.05f; } else { - m3D8 = 1; + mWork.follow.m3D8 = 1; if (mDMCSystem.field_0x0) { - m3B8 = 0.0f; + mWork.follow.m3B8 = 0.0f; } else if (mStickMainPosYLast >= 0.0f) { - m3B8 = 1.0f - ((cSAngle(dCamMath::rationalBezierRatio(mStickMainPosXLast, dVar33) * 180.0f).Cos() * 0.5f) + 0.5f); + mWork.follow.m3B8 = 1.0f - ((cSAngle(dCamMath::rationalBezierRatio(mStickMainPosXLast, dVar33) * 180.0f).Cos() * 0.5f) + 0.5f); } else { - m3B8 = 1.0f - ((cSAngle(dCamMath::rationalBezierRatio(mStickMainPosXLast, dVar34) * 180.0f).Cos() * 0.25f) + 0.75f); + mWork.follow.m3B8 = 1.0f - ((cSAngle(dCamMath::rationalBezierRatio(mStickMainPosXLast, dVar34) * 180.0f).Cos() * 0.25f) + 0.75f); } - m3B8 *= mStickMainValueLast; + mWork.follow.m3B8 *= mStickMainValueLast; if (chkFlag(0x80000)) { - m3B8 *= 0.5f; + mWork.follow.m3B8 *= 0.5f; } else { - m3B8 *= 0.1f; + mWork.follow.m3B8 *= 0.1f; } if (check_owner_action(mPadId, daPyStts0_UNK2000000_e | daPyStts0_UNK100_e) || check_owner_action1(mPadId, check_owner_action1(mPadId, daPyStts1_UNK10000_e))) { - if (m38C == 0) { + if (mWork.follow.m38C == 0) { if (local_4ac > cSAngle::_270 && local_4ac < cSAngle::_90) { - m38C = 1; + mWork.follow.m38C = 1; } else { - m38C = -1; + mWork.follow.m38C = -1; } } - else if (m38C < 0) { - m38C--; - if (m38C <= -0x20) { - m38C = 0x10; + else if (mWork.follow.m38C < 0) { + mWork.follow.m38C--; + if (mWork.follow.m38C <= -0x20) { + mWork.follow.m38C = 0x10; } } - else if (m38C < 0xf) { - m3B8 = m38C * 0.033333335f; - m38C++; + else if (mWork.follow.m38C < 0xf) { + mWork.follow.m3B8 = mWork.follow.m38C * 0.033333335f; + mWork.follow.m38C++; } else if (!check_owner_action(mPadId, daPyStts0_UNK2000000_e)) { if (mStickMainValueLast < 0.1f) { - m3B8 = 0.05f; + mWork.follow.m3B8 = 0.05f; } else { - m3B8 = dCamMath::rationalBezierRatio(std::fabsf(local_4ac.Sin()), 12.0f); + mWork.follow.m3B8 = dCamMath::rationalBezierRatio(std::fabsf(local_4ac.Sin()), 12.0f); } } } else if (bVar1) { - if (m38C == 0 && (local_4ac <= cSAngle::_270 || local_4ac >= cSAngle::_90)) { - m38C = 1; + if (mWork.follow.m38C == 0 && (local_4ac <= cSAngle::_270 || local_4ac >= cSAngle::_90)) { + mWork.follow.m38C = 1; } - else if (m38C < 0xf) { - m3B8 = iVar5 * 0.033333335f; - m38C++; + else if (mWork.follow.m38C < 0xf) { + mWork.follow.m3B8 = iVar5 * 0.033333335f; + mWork.follow.m38C++; } else if (check_owner_action(mPadId, daPyStts0_UNK40_e | daPyStts0_UNK20_e)) { - m3B8 = 0.15f; + mWork.follow.m3B8 = 0.15f; } else if (mStickMainValueLast < 0.1f) { - m3B8 = 0.05f; + mWork.follow.m3B8 = 0.05f; } else { - m3B8 = dCamMath::rationalBezierRatio(std::fabsf(local_4ac.Sin()), 12.0f); + mWork.follow.m3B8 = dCamMath::rationalBezierRatio(std::fabsf(local_4ac.Sin()), 12.0f); } } else { - m3B8 *= dVar35; - m38C = 0; + mWork.follow.m3B8 *= dVar35; + mWork.follow.m38C = 0; } } cSAngle acStack_4b4; - if (chkFlag(0x80) && !chkFlag(0x80000) && mCurMode == 0 && m38C == 0) { + if (chkFlag(0x80) && !chkFlag(0x80000) && mCurMode == 0 && mWork.follow.m38C == 0) { acStack_4b4 = cSAngle(mDirection.U().Val()); } else if (bVar1) { @@ -3157,93 +3156,93 @@ bool dCamera_c::followCamera(s32 param_1) { } cSAngle acStack_4b8 = cSAngle((s16)0); - cSAngle acStack_51c = (acStack_4b4 - local_484.V()) * m3B8.Degree() * local_484.U().Cos(); + cSAngle acStack_51c = (acStack_4b4 - local_484.V()) * mWork.follow.m3B8 * local_484.U().Cos(); m03C.U(local_484.V() + acStack_51c + acStack_4b8); cSAngle local_4bc; if (check_owner_action1(mPadId, daPyStts1_UNK20000_e)) { - if (m392 <= iVar17) { + if (mWork.follow.m392 <= iVar17) { local_4bc = acStack_490; - m3E0 = dCamMath::rationalBezierRatio((float)m392 / (float)iVar17, fVar38); + mWork.follow.m3E0 = dCamMath::rationalBezierRatio((float)mWork.follow.m392 / (float)iVar17, fVar38); setFlag(0x4000000); - m392++; + mWork.follow.m392++; } else { local_4bc = acStack_490; - m3E0 = 1.0f; + mWork.follow.m3E0 = 1.0f; } - m3BC = m3A0 = local_4bc.Degree(); + mWork.follow.m3BC = mWork.follow.m3A0 = local_4bc.Degree(); } else { - if (m392 != 0) { - m3E0 = 0.0f; + if (mWork.follow.m392 != 0) { + mWork.follow.m3E0 = 0.0f; } - m392 = 0; + mWork.follow.m392 = 0; if (mCurMode == 1) { - m3E0 = 0.5f; - m3BC = m3A0 = m3A0 + (m3B8.Val() * (dVar28 - m3A0)); - local_4bc = cAngle::d2s(m3A0); - m3E0 += (fVar40 - m3E0) * 0.5f; + mWork.follow.m3E0 = 0.5f; + mWork.follow.m3BC = mWork.follow.m3A0 = mWork.follow.m3A0 + (mWork.follow.m3B8 * (dVar28 - mWork.follow.m3A0)); + local_4bc = cAngle::d2s(mWork.follow.m3A0); + mWork.follow.m3E0 += (fVar40 - mWork.follow.m3E0) * 0.5f; } - else if (m388 == 0) { - m3BC += dVar27 * (dVar28 - m3BC); + else if (mWork.follow.m388 == 0) { + mWork.follow.m3BC += dVar27 * (dVar28 - mWork.follow.m3BC); dVar20 = 0.01f; - if (m3B4 != 0) { + if (mWork.follow.m3B4 != 0) { dVar20 = 0.25f; dVar29 = dVar20; } - m3A0 += dVar29 * ((m3BC + m148.Degree()) - m3A0); - local_4bc = cAngle::d2s(m3A0); + mWork.follow.m3A0 += dVar29 * ((mWork.follow.m3BC + m148.Degree()) - mWork.follow.m3A0); + local_4bc = cAngle::d2s(mWork.follow.m3A0); if (chkFlag(0x80000)) { - m3E0 = 0.0f; + mWork.follow.m3E0 = 0.0f; } - else if (m3B4) { - m3E0 += dVar20 * (fVar40 - m3E0); + else if (mWork.follow.m3B4) { + mWork.follow.m3E0 += dVar20 * (fVar40 - mWork.follow.m3E0); } else if (mMonitor.mPos.y < 0.01f && mCurMode == 0) { - m3E0 += (0.1f - m3E0) * 0.05f; + mWork.follow.m3E0 += (0.1f - mWork.follow.m3E0) * 0.05f; } else { - m3E0 += dVar20 * (fVar40 - m3E0); + mWork.follow.m3E0 += dVar20 * (fVar40 - mWork.follow.m3E0); } } else { if (check_owner_action(mPadId, daPyStts0_UNK2000000_e) || check_owner_action1(mPadId, daPyStts1_UNK10000_e)) { local_4bc = acStack_51c; - m3BC = m3A0 = local_4bc.Degree(); - m3E0 = 0.95f; + mWork.follow.m3BC = mWork.follow.m3A0 = local_4bc.Degree(); + mWork.follow.m3E0 = 0.95f; } else if (isPlayerFlying(mPadId) || daNpc_kam_c::m_hyoi_kamome) { local_4bc = acStack_51c; - if (m3A4 < positionOf(mpPlayerActor).y) { - m3E0 = dCamMath::rationalBezierRatio(m394, dVar30); + if (mWork.follow.m3A4 < positionOf(mpPlayerActor).y) { + mWork.follow.m3E0 = dCamMath::rationalBezierRatio(mWork.follow.m394, dVar30); } else { - m3E0 += (0.75f - m3E0) * 0.15f; + mWork.follow.m3E0 += (0.75f - mWork.follow.m3E0) * 0.15f; } - m3BC = m3A0 = local_4bc.Degree(); + mWork.follow.m3BC = mWork.follow.m3A0 = local_4bc.Degree(); } else { local_4bc = acStack_51c; - m3BC = m3A0 = local_4bc.Degree(); - m3E0 = dCamMath::rationalBezierRatio(m394, dVar30); + mWork.follow.m3BC = mWork.follow.m3A0 = local_4bc.Degree(); + mWork.follow.m3E0 = dCamMath::rationalBezierRatio(mWork.follow.m394, dVar30); } } } - m3A4 = positionOf(mpPlayerActor).y; + mWork.follow.m3A4 = positionOf(mpPlayerActor).y; if (check_owner_action(mPadId, daPyStts0_UNK2000000_e | daPyStts0_UNK100_e | daPyStts0_UNK40_e | daPyStts0_UNK20_e | daPyStts0_UNK1_e || check_owner_action1(mPadId, daPyStts1_UNK10000_e))) { - m3B4 = 1; + mWork.follow.m3B4 = 1; } else { - m3B4 = 0; + mWork.follow.m3B4 = 0; } if (local_4bc < local_498) { @@ -3253,30 +3252,30 @@ bool dCamera_c::followCamera(s32 param_1) { local_4bc.Val(local_49c); } - m03C.V(m03C.U() + ((local_4bc - m03C.U()) * m3E0)); + m03C.V(m03C.U() + ((local_4bc - m03C.U()) * mWork.follow.m3E0)); if (local_494 > m03C.U()) { m03C.V(local_494); } - m398 += dVar27 * (dVar25 - m398); - m39C += dVar27 * (dVar24 - m39C); + mWork.follow.m398 += dVar27 * (dVar25 - mWork.follow.m398); + mWork.follow.m39C += dVar27 * (dVar24 - mWork.follow.m39C); - if (m398 < local_484.R()) { - m3DC += (dVar26 - m3DC) * 0.01f; - local_484.R(m398); + if (mWork.follow.m398 < local_484.R()) { + mWork.follow.m3DC += (dVar26 - mWork.follow.m3DC) * 0.01f; + local_484.R(mWork.follow.m398); } - else if (local_484.R() > m39C) { - m3DC += (dVar26 - m3DC) * 0.01f; - local_484.R(m39C); + else if (local_484.R() > mWork.follow.m39C) { + mWork.follow.m3DC += (dVar26 - mWork.follow.m3DC) * 0.01f; + local_484.R(mWork.follow.m39C); } else { - m3DC = 1.0f; + mWork.follow.m3DC = 1.0f; } - m03C.R(m03C.R() + m3DC * (local_484.R() - m03C.R())); - m3CC = m044 + m03C.Xyz(); + m03C.R(m03C.R() + mWork.follow.m3DC * (local_484.R() - m03C.R())); + mWork.follow.m3CC = m044 + m03C.Xyz(); if (bVar3 && bVar4 && mCamParam.Flag(param_1, dCamPrmFlg_UNK001)) { cSGlobe cStack_48c(m03C); @@ -3287,15 +3286,15 @@ bool dCamera_c::followCamera(s32 param_1) { } } - m050 += (m3CC - m050) * 0.75f; + m050 += (mWork.follow.m3CC - m050) * 0.75f; m03C.Val(m050 - m044); if (chkFlag(8)) { - m3DA = 1; + mWork.follow.m3DA = 1; } - m3E8 += (dVar32 - m3E8) * 0.01f; - m060 += m3E8 * (dVar31 - m060); + mWork.follow.m3E8 += (dVar32 - mWork.follow.m3E8) * 0.01f; + m060 += mWork.follow.m3E8 * (dVar31 - m060); if (check_owner_action1(mPadId, daPyStts1_DEKU_LEAF_FAN_e)) { m060 += cM_rndFX(mCamSetup.m078); @@ -3349,22 +3348,19 @@ bool dCamera_c::lockonCamera(s32 param_1) { m100 = 1; m101 = 1; m102 = 1; - m378 = 'LOCK'; - m380 = 0; - m384 = 1.0f; - m38C = 0; - m588 = 0; - m390 = m044.x; - m394 = m044.y; - m398 = m044.z; + mWork.lockon.m378 = 'LOCK'; + mWork.lockon.m380 = 0; + mWork.lockon.m384 = 1.0f; + mWork.lockon.m38C = 0; + mWork.lockon.m39C = 0; + mWork.lockon.m390 = m044; cXyz cStack_150 = m044 - attentionPos(mpPlayerActor); - //m3A8.Val() - //cSGlobe::Val((cSGlobe *)&this->field304_0x3a8,&cStack_150); - m3A0 = m39C = 0.0f; - m3B8 = mCamSetup.Cushion4Base(); - m388 = 0; - m3A0 = 0; - m3A4 = 0; + mWork.lockon.m3A8.Val(cStack_150); + mWork.lockon.m3A0 = mWork.lockon.m39C = 0.0f; + mWork.lockon.m3B8 = mCamSetup.Cushion4Base(); + mWork.lockon.m388 = 0; + mWork.lockon.m3A0 = 0; + mWork.lockon.m3A4 = 0; if (mpLockonTarget) { radiusActorInSight(mpPlayerActor, mpLockonTarget); @@ -3375,20 +3371,20 @@ bool dCamera_c::lockonCamera(s32 param_1) { dComIfG_Bgsp()->MoveBgMatrixCrrPos(mBG.m5C.m04, true, &m36C, NULL, NULL); } if (dComIfGp_getAttention().LockonTruth() && check_owner_action(mPadId, daPyStts0_BOOMERANG_WAIT_e)) { - m38C = 1; + mWork.lockon.m38C = 1; } else { - m38C = 0; + mWork.lockon.m38C = 0; } if (check_owner_action(mPadId, daPyStts0_UNK400_e)) { - m38C = 0; + mWork.lockon.m38C = 0; } else { - if (m38C) { + if (mWork.lockon.m38C) { dComIfGp_getVibration().StartShock(2, 0x10, cXyz(0.0f, 1.0f, 0.0f)); } - m38C = 1; + mWork.lockon.m38C = 1; } bool bVar6 = true; @@ -3449,12 +3445,12 @@ bool dCamera_c::lockonCamera(s32 param_1) { cSAngle local_25c = m03C.U().Inv() - acStack_254; if (local_25c < cSAngle::_0) { - m38C = 0; + mWork.lockon.m38C = 0; acStack_254 -= local_258; local_25c = -acStack_254; } else { - m38C = 1; + mWork.lockon.m38C = 1; acStack_254 += local_258; } @@ -3463,24 +3459,24 @@ bool dCamera_c::lockonCamera(s32 param_1) { if (chkFlag(0x80080)) { cXyz local_114 = attentionPos(mpPlayerActor); if (pointInSight(&local_114)) { - if (m388 == 0) { - int iVar10 = -m38C + 1; - m390 = iVar10 - (-m38C + (iVar10 == 0)); + if (mWork.lockon.m388 == 0) { + int iVar10 = -mWork.lockon.m38C + 1; + mWork.lockon.m388 = iVar10 - (-mWork.lockon.m38C + (iVar10 == 0)); } bVar6 = true; - m388 = 0x3c; + mWork.lockon.m388 = 0x3c; } } if (lineBGCheckBack(&m044, &local_108, 0x7f) && lineBGCheck(&m050, &m044, 0x7f)) { bVar6 = true; - m388 = 0x3c; + mWork.lockon.m388 = 0x3c; } - if (m388) { - m388--; - if (m388 && mStickMainValueLast <= 0.1f) { - m388 = 1; + if (mWork.lockon.m388) { + mWork.lockon.m388--; + if (mWork.lockon.m388 && mStickMainValueLast <= 0.1f) { + mWork.lockon.m388 = 1; } bVar6 = true; } @@ -3490,7 +3486,7 @@ bool dCamera_c::lockonCamera(s32 param_1) { if (chkFlag(0x10)) { fVar3 = 0.01f; - m3B8 = 0.01f; + mWork.lockon.m3B8 = 0.01f; } else if (m360) { fVar3 = mCamSetup.Cushion4Base(); @@ -3499,9 +3495,9 @@ bool dCamera_c::lockonCamera(s32 param_1) { fVar3 = mCamSetup.Cushion4Jump(); } - m3B8 += (fVar3 - m3B8.Val()) * mCamSetup.CusCus(); - m390 = local_108.x; - m398 = local_108.z; + mWork.lockon.m3B8 += (fVar3 - mWork.lockon.m3B8) * mCamSetup.CusCus(); + mWork.lockon.m390.x = local_108.x; + mWork.lockon.m390.z = local_108.z; if (bVar6) { dVar17 = mCamParam.LockonCenterHeight(fVar4); @@ -3510,13 +3506,13 @@ bool dCamera_c::lockonCamera(s32 param_1) { dVar17 = mCamParam.LockonCenterHeight(fVar4) + 25.0f; } - m398 += m3B8 * ((local_108.y + dVar17) - m398); + mWork.lockon.m390.z += mWork.lockon.m3B8 * ((local_108.y + dVar17) - mWork.lockon.m390.z); dVar17 = local_230.R(); f32 dVar19; if (mpLockonTarget) { f32 dVar18 = local_25c.Cos(); - dVar19 = (local_230.U() * 1.3f).Cos(); + dVar19 = cSAngle(local_230.U() * 1.3f).Cos(); if (std::fabsf(dVar18) < std::fabsf(dVar19)) { dVar19 = dVar18; } @@ -3527,22 +3523,22 @@ bool dCamera_c::lockonCamera(s32 param_1) { } cSAngle acStack_260 = local_230.U(); - m3E8 += (fVar21 - m3E8) * mCamSetup.CusCus(); - m3E0 += (fVar2 - m3E0) * mCamSetup.CusCus(); - cSAngle temp(m3E0 + 2); - cSAngle acStack_264 = temp + (acStack_260 - temp) * m3E8; + mWork.lockon.m3B4 += (fVar21 - mWork.lockon.m3B4) * mCamSetup.CusCus(); + mWork.lockon.m3B0 += (fVar2 - mWork.lockon.m3B0) * mCamSetup.CusCus(); + cSAngle temp(mWork.lockon.m3B0 + 2); + cSAngle acStack_264 = temp + (acStack_260 - temp) * mWork.lockon.m3B4; cSAngle acStack_268; if (bVar6) { - fVar2 = m3A8 * 0.75f; + fVar2 = mWork.lockon.m3A8.R() * 0.75f; acStack_268.Val(m534 + (local_230.U() - m534) * 0.05f); } else { - fVar2 = m3A8 + m3E4 * (m384 * (dVar19 + dVar17 * 0.05f) - m3A8); - acStack_268.Val(m534 + m3E8 * (local_230.U() - m534)); + fVar2 = mWork.lockon.m3A8.R() + mWork.lockon.m3B0 * (mWork.lockon.m384 * (dVar19 + dVar17 * 0.05f) - mWork.lockon.m3A8.R()); + acStack_268.Val(m534 + mWork.lockon.m3B4 * (local_230.U() - m534)); } - //m3A8.Val(fVar2, acStack_268, acStack_264); - //m044 = m390 + m3A8.Xyz(); + mWork.lockon.m3A8.Val(fVar2, acStack_268, acStack_264); + m044 = mWork.lockon.m390 + mWork.lockon.m3A8.Xyz(); if (mpLockonTarget && mLockOnActorId != -1) { cXyz local_120 = attentionPos(mpPlayerActor); if (lineBGCheck(&local_120, &m044, 0x7f)) { @@ -3586,9 +3582,10 @@ bool dCamera_c::lockonCamera(s32 param_1) { } else { iVar15 = local_258.Val(); + f32 f1 = (float)local_274.Val() / (float)iVar15; if (local_25c.Val() < iVar15) { fVar22 = mCamParam.Val(param_1, dCamStyleParam_UNK15); - fVar21 = dCamMath::customRBRatio(-((float)local_274.Val() / (float)iVar15), fVar21); + fVar21 = dCamMath::customRBRatio(-f1, fVar21); dVar17 = fVar22 * fVar21; } else { @@ -3599,7 +3596,7 @@ bool dCamera_c::lockonCamera(s32 param_1) { local_27c = cSAngle::_180 - local_258; } - dVar17 = mCamParam.Val(param_1, dCamStyleParam_UNK20) * dCamMath::rationalBezierRatio((float)local_274.Val() / (float)local_27c.Val(), fVar21); + dVar17 = mCamParam.Val(param_1, dCamStyleParam_UNK20) * dCamMath::rationalBezierRatio(f1, fVar21); if (dVar20 < 100.0f) { dVar17 *= dCamMath::rationalBezierRatio(dVar20 / 100.0f, 1.0f); @@ -3612,12 +3609,12 @@ bool dCamera_c::lockonCamera(s32 param_1) { } if (check_owner_action1(mPadId, daPyStts1_UNK20000_e)) { - iVar15 = m380; + iVar15 = mWork.lockon.m380; if (iVar15 <= iVar16) { f32 bezier_ratio = dCamMath::rationalBezierRatio((float)iVar15 / (float)iVar16, fVar1); local_270 += (local_250 - local_270) * bezier_ratio; setFlag(0x4000000); - m380++; + mWork.lockon.m380++; } else { local_270 = local_250; @@ -3628,12 +3625,12 @@ bool dCamera_c::lockonCamera(s32 param_1) { local_270 -= (local_230.U() * 0.7f + local_270) * 0.1f; } else { - m380 = 0; + mWork.lockon.m380 = 0; if (chkFlag(0x10)) { local_270 += (mCamParam.LockonLatitude(fVar4) - local_270) * 0.05f; } else if (!m360 && !check_owner_action(mPadId, daPyStts0_UNK400_e)) { - //dVar17 = m3A8.V().Cos(); + //dVar17 = mWork.lockon.m3A8.V().Cos(); local_270 += (local_240.U() - local_270) * (1.0f - std::fabsf(fVar5)) * std::fabsf(dVar17); } else { @@ -3762,7 +3759,7 @@ bool dCamera_c::CalcSubjectAngle(s16* param_1, s16* param_2) { return false; } - if (m378 != 'SUBJ') { + if (mWork.subject.m378 != 'SUBJ') { return false; } @@ -3770,19 +3767,19 @@ bool dCamera_c::CalcSubjectAngle(s16* param_1, s16* param_2) { return false; } - if (!m37C) { + if (!mWork.subject.m37C) { bVar9 = false; } - fVar1 = mCamParam.Val(m380, 19); - fVar2 = mCamParam.Val(m380, 24); - fVar3 = mCamParam.Val(m380, 21); + fVar1 = mCamParam.Val(mWork.subject.m380, 19); + fVar2 = mCamParam.Val(mWork.subject.m380, 24); + fVar3 = mCamParam.Val(mWork.subject.m380, 21); fVar4 = mCamSetup.m030; if (!bVar9) { - cSAngle local_88(fVar2 * m384); - cSAngle local_8c(fVar1 * m388); - s16 local_98 = local_88.Val() + m3BA; + cSAngle local_88(fVar2 * mWork.subject.m384); + cSAngle local_8c(fVar1 * mWork.subject.m388); + s16 local_98 = local_88.Val() + mWork.subject.m3BA; *param_2 = local_98; *param_1 = local_8c.Val(); } @@ -3791,13 +3788,13 @@ bool dCamera_c::CalcSubjectAngle(s16* param_1, s16* param_2) { fVar5 = g_mDoCPd_cpadInfo[mPadId].mMainStickPosY; if (is_player(mpPlayerActor)) { - m3B8 = ((daPy_py_c*)mpPlayerActor)->getBodyAngleX(); + mWork.subject.m3B8 = ((daPy_py_c*)mpPlayerActor)->getBodyAngleX(); } else { - m3B8 = mpPlayerActor->shape_angle.x; + mWork.subject.m3B8 = mpPlayerActor->shape_angle.x; } - m3BA = mpPlayerActor->shape_angle.y; + mWork.subject.m3BA = mpPlayerActor->shape_angle.y; f32 f1; if (fVar6 > 0.7f) { @@ -3823,7 +3820,7 @@ bool dCamera_c::CalcSubjectAngle(s16* param_1, s16* param_2) { fVar5 = f3; f32 f2 = 5.0f; - if ((mEye.y <= m354 + f2 || mEye.y <= mBG.m5C.m58 + f2) && ((m388 >= 0.0f && f3 > 0.0f) || (m388 < 0.0f && f3 <= 0.0f))) { + if ((mEye.y <= m354 + f2 || mEye.y <= mBG.m5C.m58 + f2) && ((mWork.subject.m388 >= 0.0f && f3 > 0.0f) || (mWork.subject.m388 < 0.0f && f3 <= 0.0f))) { fVar5 = 0.0f; } @@ -3832,53 +3829,53 @@ bool dCamera_c::CalcSubjectAngle(s16* param_1, s16* param_2) { } if (!check_owner_action(mPadId, daPyStts0_UNK40000_e)) { - if (mCamParam.Flag(m380, dCamPrmFlg_UNK020)) { - m384 = -f1; - m388 = fVar5; + if (mCamParam.Flag(mWork.subject.m380, dCamPrmFlg_UNK020)) { + mWork.subject.m384 = -f1; + mWork.subject.m388 = fVar5; } else { dVar11 = dCamMath::rationalBezierRatio(f1, mCamSetup.CurveWeight()); dVar12 = dCamMath::rationalBezierRatio(fVar5, mCamSetup.CurveWeight()); if (check_owner_action(mPadId, daPyStts0_UNK2000_e)) { - m384 = -dVar11 * fVar3; - m388 += dVar12 * fVar3; + mWork.subject.m384 = -dVar11 * fVar3; + mWork.subject.m388 += dVar12 * fVar3; } else { - if (mCamParam.Flag(m380, dCamPrmFlg_UNK010)) { - f32 temp = fVar3 - (m38C * (fVar3 * fVar4)); - m384 = -dVar11 * temp; - m388 += dVar12 * temp; + if (mCamParam.Flag(mWork.subject.m380, dCamPrmFlg_UNK010)) { + f32 temp = fVar3 - (mWork.subject.m38C * (fVar3 * fVar4)); + mWork.subject.m384 = -dVar11 * temp; + mWork.subject.m388 += dVar12 * temp; } else { - m384 = -dVar11 * fVar3; - m388 += dVar12 * fVar3; + mWork.subject.m384 = -dVar11 * fVar3; + mWork.subject.m388 += dVar12 * fVar3; } } - if (m384 > 1.0f) { - m384 = 1.0f; + if (mWork.subject.m384 > 1.0f) { + mWork.subject.m384 = 1.0f; } - if (m384 < -1.0f) { - m384 = -1.0f; + if (mWork.subject.m384 < -1.0f) { + mWork.subject.m384 = -1.0f; } - if (m388 > 1.0f) { - m388 = 1.0f; + if (mWork.subject.m388 > 1.0f) { + mWork.subject.m388 = 1.0f; } - if (m388 < -1.0f) { - m388 = -1.0f; + if (mWork.subject.m388 < -1.0f) { + mWork.subject.m388 = -1.0f; } } } else { - m384 = 0.0f; + mWork.subject.m384 = 0.0f; } - cSAngle local_90(fVar2 * m384); - cSAngle local_94(fVar1 * m388); + cSAngle local_90(fVar2 * mWork.subject.m384); + cSAngle local_94(fVar1 * mWork.subject.m388); - s16 local_a8 = local_90.Val() + m3BA; + s16 local_a8 = local_90.Val() + mWork.subject.m3BA; *param_2 = local_a8; *param_1 = local_94.Val(); - m37D = 0; + mWork.subject.m37D = 0; return bVar9; } diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index 4d5832fbe..c311a1cb7 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -548,30 +548,30 @@ s32 fopAcM_checkCullingBox(Mtx pMtx, f32 x0, f32 y0, f32 z0, f32 x1, f32 y1, f32 static l_HIO l_hio; static fopAc_cullSizeBox l_cullSizeBox[14] = { - /* fopAc_CULLBOX_0_e */ fopAc_MakeCullSizeBox(cXyz(-40.0f, 0.0f, -40.0f), cXyz(40.0f, 125.0f, 40.0f)), - /* fopAc_CULLBOX_1_e */ fopAc_MakeCullSizeBox(cXyz(-25.0f, 0.0f, -25.0f), cXyz(25.0f, 50.0f, 25.0f)), - /* fopAc_CULLBOX_2_e */ fopAc_MakeCullSizeBox(cXyz(-50.0f, 0.0f, -50.0f), cXyz(50.0f, 100.0f, 50.0f)), - /* fopAc_CULLBOX_3_e */ fopAc_MakeCullSizeBox(cXyz(-75.0f, 0.0f, -75.0f), cXyz(75.0f, 150.0f, 75.0f)), - /* fopAc_CULLBOX_4_e */ fopAc_MakeCullSizeBox(cXyz(-100.0f, 0.0f, -100.0f), cXyz(100.0f, 800.0f, 100.0f)), - /* fopAc_CULLBOX_5_e */ fopAc_MakeCullSizeBox(cXyz(-125.0f, 0.0f, -125.0f), cXyz(125.0f, 250.0f, 125.0f)), - /* fopAc_CULLBOX_6_e */ fopAc_MakeCullSizeBox(cXyz(-150.0f, 0.0f, -150.0f), cXyz(150.0f, 300.0f, 150.0f)), - /* fopAc_CULLBOX_7_e */ fopAc_MakeCullSizeBox(cXyz(-200.0f, 0.0f, -200.0f), cXyz(200.0f, 400.0f, 200.0f)), - /* fopAc_CULLBOX_8_e */ fopAc_MakeCullSizeBox(cXyz(-600.0f, 0.0f, -600.0f), cXyz(600.0f, 900.0f, 600.0f)), - /* fopAc_CULLBOX_9_e */ fopAc_MakeCullSizeBox(cXyz(-250.0f, 0.0f, -50.0f), cXyz(250.0f, 450.0f, 50.0f)), - /* fopAc_CULLBOX_10_e */ fopAc_MakeCullSizeBox(cXyz(-60.0f, 0.0f, -20.0f), cXyz(40.0f, 130.0f, 150.0f)), - /* fopAc_CULLBOX_11_e */ fopAc_MakeCullSizeBox(cXyz(-75.0f, 0.0f, -75.0f), cXyz(75.0f, 210.0f, 75.0f)), - /* fopAc_CULLBOX_12_e */ fopAc_MakeCullSizeBox(cXyz(-70.0f, -100.0f, -80.0f), cXyz(70.0f, 240.0f, 100.0f)), - /* fopAc_CULLBOX_13_e */ fopAc_MakeCullSizeBox(cXyz(-60.0f, -20.0f, -60.0f), cXyz(60.0f, 160.0f, 60.0f)), + /* fopAc_CULLBOX_0_e */ fopAc_cullSizeBox(cXyz(-40.0f, 0.0f, -40.0f), cXyz(40.0f, 125.0f, 40.0f)), + /* fopAc_CULLBOX_1_e */ fopAc_cullSizeBox(cXyz(-25.0f, 0.0f, -25.0f), cXyz(25.0f, 50.0f, 25.0f)), + /* fopAc_CULLBOX_2_e */ fopAc_cullSizeBox(cXyz(-50.0f, 0.0f, -50.0f), cXyz(50.0f, 100.0f, 50.0f)), + /* fopAc_CULLBOX_3_e */ fopAc_cullSizeBox(cXyz(-75.0f, 0.0f, -75.0f), cXyz(75.0f, 150.0f, 75.0f)), + /* fopAc_CULLBOX_4_e */ fopAc_cullSizeBox(cXyz(-100.0f, 0.0f, -100.0f), cXyz(100.0f, 800.0f, 100.0f)), + /* fopAc_CULLBOX_5_e */ fopAc_cullSizeBox(cXyz(-125.0f, 0.0f, -125.0f), cXyz(125.0f, 250.0f, 125.0f)), + /* fopAc_CULLBOX_6_e */ fopAc_cullSizeBox(cXyz(-150.0f, 0.0f, -150.0f), cXyz(150.0f, 300.0f, 150.0f)), + /* fopAc_CULLBOX_7_e */ fopAc_cullSizeBox(cXyz(-200.0f, 0.0f, -200.0f), cXyz(200.0f, 400.0f, 200.0f)), + /* fopAc_CULLBOX_8_e */ fopAc_cullSizeBox(cXyz(-600.0f, 0.0f, -600.0f), cXyz(600.0f, 900.0f, 600.0f)), + /* fopAc_CULLBOX_9_e */ fopAc_cullSizeBox(cXyz(-250.0f, 0.0f, -50.0f), cXyz(250.0f, 450.0f, 50.0f)), + /* fopAc_CULLBOX_10_e */ fopAc_cullSizeBox(cXyz(-60.0f, 0.0f, -20.0f), cXyz(40.0f, 130.0f, 150.0f)), + /* fopAc_CULLBOX_11_e */ fopAc_cullSizeBox(cXyz(-75.0f, 0.0f, -75.0f), cXyz(75.0f, 210.0f, 75.0f)), + /* fopAc_CULLBOX_12_e */ fopAc_cullSizeBox(cXyz(-70.0f, -100.0f, -80.0f), cXyz(70.0f, 240.0f, 100.0f)), + /* fopAc_CULLBOX_13_e */ fopAc_cullSizeBox(cXyz(-60.0f, -20.0f, -60.0f), cXyz(60.0f, 160.0f, 60.0f)), }; static fopAc_cullSizeSphere l_cullSizeSphere[8] = { - /* fopAc_CULLSPHERE_0_e */ fopAc_MakeCullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 80.0f), - /* fopAc_CULLSPHERE_1_e */ fopAc_MakeCullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 50.0f), - /* fopAc_CULLSPHERE_2_e */ fopAc_MakeCullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 100.0f), - /* fopAc_CULLSPHERE_3_e */ fopAc_MakeCullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 150.0f), - /* fopAc_CULLSPHERE_4_e */ fopAc_MakeCullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 200.0f), - /* fopAc_CULLSPHERE_5_e */ fopAc_MakeCullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 250.0f), - /* fopAc_CULLSPHERE_6_e */ fopAc_MakeCullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 300.0f), - /* fopAc_CULLSPHERE_7_e */ fopAc_MakeCullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 400.0f), + /* fopAc_CULLSPHERE_0_e */ fopAc_cullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 80.0f), + /* fopAc_CULLSPHERE_1_e */ fopAc_cullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 50.0f), + /* fopAc_CULLSPHERE_2_e */ fopAc_cullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 100.0f), + /* fopAc_CULLSPHERE_3_e */ fopAc_cullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 150.0f), + /* fopAc_CULLSPHERE_4_e */ fopAc_cullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 200.0f), + /* fopAc_CULLSPHERE_5_e */ fopAc_cullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 250.0f), + /* fopAc_CULLSPHERE_6_e */ fopAc_cullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 300.0f), + /* fopAc_CULLSPHERE_7_e */ fopAc_cullSizeSphere(cXyz(0.0f, 0.0f, 0.0f), 400.0f), }; static void dummy() { From f064e064eb23f27e95c6fb1f8c4bf249663bd08e Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 7 May 2025 01:47:44 -0400 Subject: [PATCH 03/31] d_cam_style: Fix excessive float precision --- include/f_op/f_op_actor.h | 4 - src/d/d_cam_style.cpp | 294 +++++++++++++++++++------------------- 2 files changed, 147 insertions(+), 151 deletions(-) diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index 2015f719d..88fbaf639 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -242,8 +242,6 @@ public: /* 0xC */ f32 radius; }; -#define fopAc_MakeCullSizeSphere(center, radius) fopAc_cullSizeSphere(center, radius) - struct fopAc_cullSizeBox { public: #ifdef __MWERKS__ @@ -267,8 +265,6 @@ public: /* 0xC */ cXyz max; }; -#define fopAc_MakeCullSizeBox(min, max) fopAc_cullSizeBox(min, max) - class fopAc_ac_c : public leafdraw_class { public: /* 0x0C0 */ int actor_type; diff --git a/src/d/d_cam_style.cpp b/src/d/d_cam_style.cpp index e96a3c242..99c51d724 100644 --- a/src/d/d_cam_style.cpp +++ b/src/d/d_cam_style.cpp @@ -11,888 +11,888 @@ const dCamera__Style dCamParam_c::styles[] = { { 'NN00', 0, - {-99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {-99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, 0, }, { 'FN08', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 450.0f, 300.0f, -99999.992188f, 0.66f, 0.05f, 25.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 5.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 450.0f, 300.0f, -99999.99f, 0.66f, 0.05f, 25.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.99f, -99999.99f, 1.0f, 0.2f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'PN05', 0x5, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1000.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 0.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1000.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 0.75f, 0.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK040, }, { 'PN12', 0x5, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1000.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 10.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1000.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 0.75f, 10.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK040, }, { 'EN00', 0xB, - {-99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {-99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, 0, }, { 'FN12', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -15.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 220.0f, 180.0f, -99999.992188f, 0.66f, 0.05f, 12.0f, -40.0f, 60.0f, 2.0f, 0.08f, 1.0f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -15.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 220.0f, 180.0f, -99999.99f, 0.66f, 0.05f, 12.0f, -40.0f, 60.0f, 2.0f, 0.08f, 1.0f, -99999.99f, -99999.99f, 1.0f, 0.2f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'TT01', 0x3, - {0.0f, 0.0f, -99999.992188f, 0.75f, 0.0f, -40.0f, 0.0f, 0.0f, 0.0f, 0.0f, 300.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, -15.0f, 35.0f, 0.0f, 0.0f, -99999.992188f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, -99999.99f, 0.75f, 0.0f, -40.0f, 0.0f, 0.0f, 0.0f, 0.0f, 300.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, -15.0f, 35.0f, 0.0f, 0.0f, -99999.99f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, dCamPrmFlg_UNK001, }, { 'TT02', 0x3, - {0.0f, 0.0f, -99999.992188f, 0.6f, 0.0f, -30.0f, 0.0f, 0.0f, 0.0f, 0.0f, 280.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, -15.0f, 40.0f, 0.0f, 0.0f, -99999.992188f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, -99999.99f, 0.6f, 0.0f, -30.0f, 0.0f, 0.0f, 0.0f, 0.0f, 280.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, -15.0f, 40.0f, 0.0f, 0.0f, -99999.99f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, dCamPrmFlg_UNK001, }, { 'TT03', 0x3, - {0.0f, 0.0f, -99999.992188f, 0.6f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 300.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 0.0f, 40.0f, 0.0f, 0.0f, -99999.992188f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, -99999.99f, 0.6f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 300.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 0.0f, 40.0f, 0.0f, 0.0f, -99999.99f, 0.0f, 30.0f, 40.0f, 45.0f, 0.0f, 0.0f, 0.0f}, dCamPrmFlg_UNK001, }, { 'LA03', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 18.0f, -40.0f, 40.0f, 20.0f, 15.0f, 0.03f, 0.0f, -99999.992188f, 40.0f, 40.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.2f, 0.4f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 18.0f, -40.0f, 40.0f, 20.0f, 15.0f, 0.03f, 0.0f, -99999.99f, 40.0f, 40.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP01', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 220.0f, 125.0f, 625.0f, 220.0f, 220.0f, 0.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 220.0f, 125.0f, 625.0f, 220.0f, 220.0f, 0.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.99f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LA02', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.3f, 0.1f, -7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 30.0f, -40.0f, 40.0f, 35.0f, 10.0f, 0.04f, 0.0f, -99999.992188f, 80.0f, 40.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.3f, 0.1f, -7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 30.0f, -40.0f, 40.0f, 35.0f, 10.0f, 0.04f, 0.0f, -99999.99f, 80.0f, 40.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'FN13', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, 7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 0.0f, -40.0f, 40.0f, 30.0f, -5.0f, 0.0f, 0.0f, -99999.992188f, 80.0f, 60.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.2f, 0.4f, 7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 0.0f, -40.0f, 40.0f, 30.0f, -5.0f, 0.0f, 0.0f, -99999.99f, 80.0f, 60.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK002, }, { 'LH01', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.9f, 0.1f, -50.0f, 3.8f, 20.0f, -50.0f, -50.0f, 350.0f, 125.0f, 875.0f, 325.0f, 375.0f, 50.0f, -20.0f, 60.0f, 55.0f, 20.0f, 0.2f, 0.05f, -99999.992188f, 10.0f, 5.0f, 55.0f, 55.0f, 55.0f, 50.0f, 65.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.9f, 0.1f, -50.0f, 3.8f, 20.0f, -50.0f, -50.0f, 350.0f, 125.0f, 875.0f, 325.0f, 375.0f, 50.0f, -20.0f, 60.0f, 55.0f, 20.0f, 0.2f, 0.05f, -99999.99f, 10.0f, 5.0f, 55.0f, 55.0f, 55.0f, 50.0f, 65.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK002, }, { 'LH02', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.9f, 0.1f, -50.0f, 3.8f, 20.0f, -50.0f, -50.0f, 350.0f, 125.0f, 375.0f, 350.0f, 350.0f, 50.0f, -20.0f, 60.0f, 55.0f, 23.0f, 0.2f, 0.05f, -99999.992188f, 10.0f, 5.0f, 55.0f, 50.0f, 65.0f, 50.0f, 65.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.9f, 0.1f, -50.0f, 3.8f, 20.0f, -50.0f, -50.0f, 350.0f, 125.0f, 375.0f, 350.0f, 350.0f, 50.0f, -20.0f, 60.0f, 55.0f, 23.0f, 0.2f, 0.05f, -99999.99f, 10.0f, 5.0f, 55.0f, 50.0f, 65.0f, 50.0f, 65.0f}, dCamPrmFlg_UNK002, }, { 'LB02', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, -12.5f, -17.5f, 20.0f, -17.5f, -7.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 0.0f, -40.0f, 40.0f, 10.0f, -5.0f, 0.01f, 0.0f, -99999.992188f, 170.0f, 160.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.2f, 0.4f, -12.5f, -17.5f, 20.0f, -17.5f, -7.5f, 400.0f, 125.0f, 750.0f, 450.0f, 350.0f, 0.0f, -40.0f, 40.0f, 10.0f, -5.0f, 0.01f, 0.0f, -99999.99f, 170.0f, 160.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP02', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 200.0f, 125.0f, 750.0f, 200.0f, 200.0f, 0.0f, -40.0f, 40.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 52.5f, 52.5f, 52.5f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 200.0f, 125.0f, 750.0f, 200.0f, 200.0f, 0.0f, -40.0f, 40.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.99f, 0.0f, 0.0f, 52.5f, 52.5f, 52.5f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP03', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.4f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 220.0f, 125.0f, 220.0f, 220.0f, 220.0f, 5.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 55.0f, 55.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.1f, 0.4f, -30.0f, 12.5f, 20.0f, -30.0f, -30.0f, 220.0f, 125.0f, 220.0f, 220.0f, 220.0f, 5.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.99f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 55.0f, 55.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP04', 0x2, - {-100000.0f, -100000.0f, -99999.992188f, 0.1f, 0.4f, -25.0f, 15.0f, 20.0f, -25.0f, -25.0f, 200.0f, 200.0f, 320.0f, 250.0f, 350.0f, 5.0f, -10.0f, 20.0f, 5.0f, 5.0f, 0.2f, 0.05f, -99999.992188f, 0.0f, 0.0f, 45.0f, 45.0f, 45.0f, 45.0f, 45.0f}, + {-100000.0f, -100000.0f, -99999.99f, 0.1f, 0.4f, -25.0f, 15.0f, 20.0f, -25.0f, -25.0f, 200.0f, 200.0f, 320.0f, 250.0f, 350.0f, 5.0f, -10.0f, 20.0f, 5.0f, 5.0f, 0.2f, 0.05f, -99999.99f, 0.0f, 0.0f, 45.0f, 45.0f, 45.0f, 45.0f, 45.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'CC01', 0xC, - {0.0f, 0.0f, -99999.992188f, 0.6f, 0.2f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, 0.25f, 0.25f, -99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.8f, 50.0f, -99999.992188f, -99999.992188f, 0.5f, 0.5f}, + {0.0f, 0.0f, -99999.99f, 0.6f, 0.2f, 10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.99f, -99999.99f, 0.25f, 0.25f, -99999.99f, -99999.99f, -99999.99f, 0.1f, 0.8f, 50.0f, -99999.99f, -99999.99f, 0.5f, 0.5f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK080, }, { 'CC02', 0xC, - {0.0f, 0.0f, -99999.992188f, 0.6f, 0.2f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, 0.25f, 0.25f, -99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.8f, 50.0f, -99999.992188f, -99999.992188f, 0.5f, 0.5f}, + {0.0f, 0.0f, -99999.99f, 0.6f, 0.2f, 10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.99f, -99999.99f, 0.25f, 0.25f, -99999.99f, -99999.99f, -99999.99f, 0.1f, 0.8f, 50.0f, -99999.99f, -99999.99f, 0.5f, 0.5f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK040 | dCamPrmFlg_UNK080, }, { 'LL06', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.5f, 0.25f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 15.0f, -70.0f, 70.0f, 20.0f, 12.0f, 0.01f, 0.0f, -99999.992188f, 70.0f, 50.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.5f, 0.25f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 15.0f, -70.0f, 70.0f, 20.0f, 12.0f, 0.01f, 0.0f, -99999.99f, 70.0f, 50.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL08', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 6.5f, -17.5f, 20.0f, -5.0f, 5.0f, 420.0f, 125.0f, 350.0f, 380.0f, 280.0f, 2.0f, -70.0f, 70.0f, -5.0f, 0.0f, 0.08f, 0.0f, -99999.992188f, 60.0f, 5.0f, 55.0f, 52.5f, 54.5f, 52.0f, 56.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 6.5f, -17.5f, 20.0f, -5.0f, 5.0f, 420.0f, 125.0f, 350.0f, 380.0f, 280.0f, 2.0f, -70.0f, 70.0f, -5.0f, 0.0f, 0.08f, 0.0f, -99999.99f, 60.0f, 5.0f, 55.0f, 52.5f, 54.5f, 52.0f, 56.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL07', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, -22.5f, 5.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 0.0f, -70.0f, 70.0f, 25.0f, 10.0f, 0.04f, 0.0f, -99999.992188f, 75.0f, 20.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, -22.5f, 5.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 0.0f, -70.0f, 70.0f, 25.0f, 10.0f, 0.04f, 0.0f, -99999.99f, 75.0f, 20.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP10', 0x2, - {-10000.0f, -10000.0f, -99999.992188f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, 0.0f, 320.0f, 200.0f, 750.0f, 200.0f, 200.0f, 0.0f, -40.0f, 40.0f, -10.0f, -20.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 52.5f, 52.5f, 52.5f, 50.0f, 60.0f}, + {-10000.0f, -10000.0f, -99999.99f, 0.05f, 0.2f, -30.0f, 12.5f, 20.0f, -30.0f, 0.0f, 320.0f, 200.0f, 750.0f, 200.0f, 200.0f, 0.0f, -40.0f, 40.0f, -10.0f, -20.0f, 0.1f, 0.05f, -99999.99f, 0.0f, 0.0f, 52.5f, 52.5f, 52.5f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'SN15', 0x4, - {20.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, 0.75f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 50.0f, 0.2f, -99999.992188f, -99999.992188f, -99999.992188f}, + {20.0f, 0.0f, -99999.99f, -99999.99f, -99999.99f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 70.0f, 0.75f, 0.04f, -99999.99f, -99999.99f, 90.0f, 50.0f, 0.2f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK010 | dCamPrmFlg_UNK080, }, { 'BW07', 0x8, - {120.0f, 80.0f, -99999.992188f, 0.2f, 0.15f, 40.0f, -99999.992188f, -99999.992188f, -60.0f, -99999.992188f, 800.0f, -99999.992188f, -99999.992188f, -500.0f, 40.0f, 40.0f, 30.0f, 50.0f, -10.0f, -99999.992188f, 1.0f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 50.0f, -99999.992188f, -99999.992188f, 20.0f, -5.0f}, + {120.0f, 80.0f, -99999.99f, 0.2f, 0.15f, 40.0f, -99999.99f, -99999.99f, -60.0f, -99999.99f, 800.0f, -99999.99f, -99999.99f, -500.0f, 40.0f, 40.0f, 30.0f, 50.0f, -10.0f, -99999.99f, 1.0f, 0.1f, -99999.99f, -99999.99f, -99999.99f, 50.0f, -99999.99f, -99999.99f, 20.0f, -5.0f}, dCamPrmFlg_UNK001, }, { 'FN18', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 900.0f, 800.0f, -99999.992188f, 0.66f, 0.05f, 78.0f, 75.0f, 80.0f, 2.0f, 0.05f, 0.01f, 0.01f, -99999.992188f, 0.8f, 0.1f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -25.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 900.0f, 800.0f, -99999.99f, 0.66f, 0.05f, 78.0f, 75.0f, 80.0f, 2.0f, 0.05f, 0.01f, 0.01f, -99999.99f, 0.8f, 0.1f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'JN05', 0xD, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 900.0f, 50.0f, -99999.992188f, -99999.992188f, 1000.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 0.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 900.0f, 50.0f, -99999.99f, -99999.99f, 1000.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 0.75f, 0.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'XN06', 0x6, - {-99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {-99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 0.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK040, }, { 'LB01', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, -12.5f, -17.5f, 20.0f, -17.5f, -7.5f, 400.0f, 125.0f, 750.0f, 460.0f, 400.0f, 0.0f, -40.0f, 40.0f, 10.0f, -5.0f, 0.01f, 0.0f, -99999.992188f, 170.0f, 160.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.2f, 0.4f, -12.5f, -17.5f, 20.0f, -17.5f, -7.5f, 400.0f, 125.0f, 750.0f, 460.0f, 400.0f, 0.0f, -40.0f, 40.0f, 10.0f, -5.0f, 0.01f, 0.0f, -99999.99f, 170.0f, 160.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LA01', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.3f, 0.1f, -7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 480.0f, 420.0f, 30.0f, -40.0f, 40.0f, 30.0f, 20.0f, 0.06f, 0.0f, -99999.992188f, 60.0f, 40.0f, 55.0f, 52.5f, 54.5f, 55.0f, 65.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.3f, 0.1f, -7.5f, -17.5f, 20.0f, -22.5f, -2.5f, 400.0f, 125.0f, 750.0f, 480.0f, 420.0f, 30.0f, -40.0f, 40.0f, 30.0f, 20.0f, 0.06f, 0.0f, -99999.99f, 60.0f, 40.0f, 55.0f, 52.5f, 54.5f, 55.0f, 65.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'BP07', 0x8, - {120.0f, 200.0f, -99999.992188f, 0.75f, 0.15f, 40.0f, -99999.992188f, -99999.992188f, -60.0f, -99999.992188f, 900.0f, -99999.992188f, -99999.992188f, -500.0f, 40.0f, 10.0f, -5.0f, 30.0f, -10.0f, -99999.992188f, 1.0f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, 20.0f, -5.0f}, + {120.0f, 200.0f, -99999.99f, 0.75f, 0.15f, 40.0f, -99999.99f, -99999.99f, -60.0f, -99999.99f, 900.0f, -99999.99f, -99999.99f, -500.0f, 40.0f, 10.0f, -5.0f, 30.0f, -10.0f, -99999.99f, 1.0f, 0.1f, -99999.99f, -99999.99f, -99999.99f, 60.0f, -99999.99f, -99999.99f, 20.0f, -5.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'LW02', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.3f, 0.1f, -20.0f, -20.0f, 0.0f, -20.0f, -60.0f, 250.0f, 125.0f, 450.0f, 650.0f, 650.0f, 0.0f, -20.0f, 40.0f, -10.0f, 45.0f, 0.2f, 0.05f, -99999.992188f, 0.0f, 0.0f, 60.0f, 60.0f, 60.0f, 60.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.3f, 0.1f, -20.0f, -20.0f, 0.0f, -20.0f, -60.0f, 250.0f, 125.0f, 450.0f, 650.0f, 650.0f, 0.0f, -20.0f, 40.0f, -10.0f, 45.0f, 0.2f, 0.05f, -99999.99f, 0.0f, 0.0f, 60.0f, 60.0f, 60.0f, 60.0f, 60.0f}, dCamPrmFlg_UNK002, }, { 'HP16', 0x9, - {20.0f, 10.0f, -99999.992188f, 0.75f, 0.25f, -70.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 200.0f, 200.0f, -99999.992188f, 1.0f, 1.0f, 60.0f, 60.0f, -99999.992188f, 0.05f, 1.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.25f}, + {20.0f, 10.0f, -99999.99f, 0.75f, 0.25f, -70.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 200.0f, 200.0f, -99999.99f, 1.0f, 1.0f, 60.0f, 60.0f, -99999.99f, 0.05f, 1.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.25f}, dCamPrmFlg_UNK002, }, { 'HN16', 0x9, - {0.0f, 0.0f, -99999.992188f, 0.5f, 0.25f, -60.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 350.0f, 320.0f, -99999.992188f, 0.3f, 0.3f, 25.0f, 25.0f, -99999.992188f, 0.5f, 0.25f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 62.5f, -99999.992188f, -99999.992188f, -99999.992188f, 0.25f}, + {0.0f, 0.0f, -99999.99f, 0.5f, 0.25f, -60.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 350.0f, 320.0f, -99999.99f, 0.3f, 0.3f, 25.0f, 25.0f, -99999.99f, 0.5f, 0.25f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 62.5f, -99999.99f, -99999.99f, -99999.99f, 0.25f}, dCamPrmFlg_UNK002, }, { 'BN07', 0x8, - {90.0f, 150.0f, -99999.992188f, 0.65f, 0.15f, 10.0f, -99999.992188f, -99999.992188f, 5.0f, -99999.992188f, 800.0f, -99999.992188f, -99999.992188f, -430.0f, 40.0f, 5.0f, -10.0f, 30.0f, -5.0f, -99999.992188f, 0.2f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, -99999.992188f, -99999.992188f, 20.0f, -5.0f}, + {90.0f, 150.0f, -99999.99f, 0.65f, 0.15f, 10.0f, -99999.99f, -99999.99f, 5.0f, -99999.99f, 800.0f, -99999.99f, -99999.99f, -430.0f, 40.0f, 5.0f, -10.0f, 30.0f, -5.0f, -99999.99f, 0.2f, 0.1f, -99999.99f, -99999.99f, -99999.99f, 70.0f, -99999.99f, -99999.99f, 20.0f, -5.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'LP05', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.05f, 0.2f, 0.0f, 12.5f, 20.0f, 0.0f, 0.0f, 220.0f, 125.0f, 625.0f, 220.0f, 220.0f, 0.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.992188f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.05f, 0.2f, 0.0f, 12.5f, 20.0f, 0.0f, 0.0f, 220.0f, 125.0f, 625.0f, 220.0f, 220.0f, 0.0f, -40.0f, 30.0f, -10.0f, 10.0f, 0.1f, 0.05f, -99999.99f, 0.0f, 0.0f, 55.0f, 55.0f, 55.0f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LP06', 0x2, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 32.0f, 32.0f, 32.0f, 32.0f, 32.0f, 1250.0f, 1000.0f, 1100.0f, 1250.0f, 1250.0f, 0.0f, -10.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 32.0f, 32.0f, 32.0f, 32.0f, 32.0f, 1250.0f, 1000.0f, 1100.0f, 1250.0f, 1250.0f, 0.0f, -10.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.99f, 0.1f, 0.1f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'HN18', 0xF, - {80.0f, 0.0f, -99999.992188f, 0.8f, 0.15f, 150.0f, -99999.992188f, 500.0f, -99999.992188f, -99999.992188f, 520.0f, 80.0f, -99999.992188f, 0.25f, 0.7f, 50.0f, 5.0f, -99999.992188f, 0.75f, 0.15f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 90.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.25f}, + {80.0f, 0.0f, -99999.99f, 0.8f, 0.15f, 150.0f, -99999.99f, 500.0f, -99999.99f, -99999.99f, 520.0f, 80.0f, -99999.99f, 0.25f, 0.7f, 50.0f, 5.0f, -99999.99f, 0.75f, 0.15f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 90.0f, -99999.99f, -99999.99f, -99999.99f, 0.25f}, dCamPrmFlg_UNK002, }, { 'FN25', 0x1, - {0.5f, 0.0f, -99999.992188f, 0.75f, 0.25f, 80.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 850.0f, 500.0f, -99999.992188f, 0.66f, 0.05f, 30.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {0.5f, 0.0f, -99999.99f, 0.75f, 0.25f, 80.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 850.0f, 500.0f, -99999.99f, 0.66f, 0.05f, 30.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.99f, -99999.99f, 1.0f, 0.2f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001, }, { 'BP08', 0x8, - {90.0f, 250.0f, -99999.992188f, 0.75f, 0.15f, 120.0f, -99999.992188f, -99999.992188f, 1.0f, -99999.992188f, 1000.0f, -99999.992188f, -99999.992188f, 0.0f, 40.0f, 20.0f, -5.0f, 30.0f, 0.0f, -99999.992188f, 1.0f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, 0.0f, -5.0f}, + {90.0f, 250.0f, -99999.99f, 0.75f, 0.15f, 120.0f, -99999.99f, -99999.99f, 1.0f, -99999.99f, 1000.0f, -99999.99f, -99999.99f, 0.0f, 40.0f, 20.0f, -5.0f, 30.0f, 0.0f, -99999.99f, 1.0f, 0.1f, -99999.99f, -99999.99f, -99999.99f, 60.0f, -99999.99f, -99999.99f, 0.0f, -5.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'BN08', 0x8, - {90.0f, 250.0f, -99999.992188f, 0.75f, 0.15f, 120.0f, -99999.992188f, -99999.992188f, 10.0f, -99999.992188f, 1000.0f, -99999.992188f, -99999.992188f, 0.0f, 40.0f, 20.0f, -5.0f, 30.0f, 0.0f, -99999.992188f, 0.2f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, 0.0f, -5.0f}, + {90.0f, 250.0f, -99999.99f, 0.75f, 0.15f, 120.0f, -99999.99f, -99999.99f, 10.0f, -99999.99f, 1000.0f, -99999.99f, -99999.99f, 0.0f, 40.0f, 20.0f, -5.0f, 30.0f, 0.0f, -99999.99f, 0.2f, 0.1f, -99999.99f, -99999.99f, -99999.99f, 60.0f, -99999.99f, -99999.99f, 0.0f, -5.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'FN29', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 550.0f, 450.0f, -99999.992188f, 0.66f, 0.05f, 40.0f, -50.0f, 70.0f, 2.0f, 0.05f, 0.16f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 550.0f, 450.0f, -99999.99f, 0.66f, 0.05f, 40.0f, -50.0f, 70.0f, 2.0f, 0.05f, 0.16f, -99999.99f, -99999.99f, 1.0f, 0.2f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'SX01', 0x4, - {20.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -2.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, 0.45f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 50.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f}, + {20.0f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -2.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 40.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 70.0f, 0.45f, 0.04f, -99999.99f, -99999.99f, 90.0f, 50.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK100, }, { 'SY01', 0x4, - {0.0f, 30.0f, -99999.992188f, -99999.992188f, -99999.992188f, 30.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 120.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, 0.6f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 60.0f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f}, + {0.0f, 30.0f, -99999.99f, -99999.99f, -99999.99f, 30.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 120.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 70.0f, 0.6f, 0.04f, -99999.99f, -99999.99f, 90.0f, 60.0f, 60.0f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002, }, { 'SX02', 0x4, - {20.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -2.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, 0.45f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 60.0f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f}, + {20.0f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -2.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 40.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 60.0f, 0.45f, 0.04f, -99999.99f, -99999.99f, 90.0f, 60.0f, 60.0f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK100, }, { 'MM06', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.8f, 0.8f, 80.0f, 80.0f, 20.0f, 0.0f, 1.92f, 250.0f, 200.0f, 800.0f, 0.0f, 16.0f, 0.0f, -55.0f, 70.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 90.0f, 80.0f, 90.0f, 0.0f, 0.48f}, + {0.0f, 0.0f, -99999.99f, 0.8f, 0.8f, 80.0f, 80.0f, 20.0f, 0.0f, 1.92f, 250.0f, 200.0f, 800.0f, 0.0f, 16.0f, 0.0f, -55.0f, 70.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 90.0f, 80.0f, 90.0f, 0.0f, 0.48f}, dCamPrmFlg_UNK002, }, { 'MM05', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, -20.0f, -20.0f, 20.0f, 0.0f, 1.92f, 250.0f, 150.0f, 320.0f, 0.0f, 15.0f, 0.0f, -40.0f, 40.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 60.0f, 70.0f, 0.0f, 0.48f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, -20.0f, -20.0f, 20.0f, 0.0f, 1.92f, 250.0f, 150.0f, 320.0f, 0.0f, 15.0f, 0.0f, -40.0f, 40.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 60.0f, 70.0f, 0.0f, 0.48f}, dCamPrmFlg_UNK002, }, { 'MM09', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 40.0f, 50.0f, 40.0f, 0.0f, 0.2f, 320.0f, 150.0f, 800.0f, 0.0f, 30.0f, 0.0f, -30.0f, 10.0f, 0.0f, 1.8f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 60.0f, 65.0f, 60.0f, 0.0f, 0.2f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 40.0f, 50.0f, 40.0f, 0.0f, 0.2f, 320.0f, 150.0f, 800.0f, 0.0f, 30.0f, 0.0f, -30.0f, 10.0f, 0.0f, 1.8f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 60.0f, 65.0f, 60.0f, 0.0f, 0.2f}, dCamPrmFlg_UNK002, }, { 'MM04', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, -20.0f, -20.0f, -40.0f, 0.0f, 1.0f, 320.0f, 150.0f, 950.0f, 0.0f, 29.0f, 0.0f, 0.0f, 5.0f, 0.0f, 0.2f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.48f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, -20.0f, -20.0f, -40.0f, 0.0f, 1.0f, 320.0f, 150.0f, 950.0f, 0.0f, 29.0f, 0.0f, 0.0f, 5.0f, 0.0f, 0.2f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.48f}, dCamPrmFlg_UNK002, }, { 'LN17', 0xC, - {0.0f, 0.0f, -99999.992188f, 0.6f, 0.2f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, 0.25f, 0.25f, -99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.8f, 50.0f, -99999.992188f, -99999.992188f, 0.5f, 0.5f}, + {0.0f, 0.0f, -99999.99f, 0.6f, 0.2f, 10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 145.0f, 145.0f, 145.0f, 0.1f, 0.25f, 0.0f, -99999.99f, -99999.99f, 0.25f, 0.25f, -99999.99f, -99999.99f, -99999.99f, 0.1f, 0.8f, 50.0f, -99999.99f, -99999.99f, 0.5f, 0.5f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK040, }, { 'QN07', 0xE, - {-120.0f, 0.0f, -99999.992188f, 0.75f, 0.15f, 50.0f, -99999.992188f, -99999.992188f, 80.0f, -99999.992188f, 800.0f, -99999.992188f, -99999.992188f, 200.0f, 40.0f, 0.0f, -5.0f, 60.0f, 20.0f, -99999.992188f, 0.1f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, -15.0f, -5.0f}, + {-120.0f, 0.0f, -99999.99f, 0.75f, 0.15f, 50.0f, -99999.99f, -99999.99f, 80.0f, -99999.99f, 800.0f, -99999.99f, -99999.99f, 200.0f, 40.0f, 0.0f, -5.0f, 60.0f, 20.0f, -99999.99f, 0.1f, 0.1f, -99999.99f, -99999.99f, -99999.99f, 60.0f, -99999.99f, -99999.99f, -15.0f, -5.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'LE01', 0x1, - {0.0f, 75.0f, -99999.992188f, 0.15f, 0.15f, -30.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 300.0f, 250.0f, -99999.992188f, 0.66f, 0.05f, 5.0f, -40.0f, 60.0f, 2.0f, 0.15f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.15f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.15f}, + {0.0f, 75.0f, -99999.99f, 0.15f, 0.15f, -30.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 300.0f, 250.0f, -99999.99f, 0.66f, 0.05f, 5.0f, -40.0f, 60.0f, 2.0f, 0.15f, 0.3f, 0.05f, -99999.99f, 0.8f, 0.15f, 40.0f, -99999.99f, -99999.99f, -99999.99f, 0.15f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK200 | dCamPrmFlg_UNK400, }, { 'LN01', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.25f, 0.2f, -15.0f, -17.5f, 20.0f, -22.5f, -10.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 7.5f, -60.0f, 60.0f, 10.0f, 5.0f, 0.08f, 0.0f, -99999.992188f, 40.0f, 5.0f, 42.5f, 52.5f, 54.5f, 40.0f, 45.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.25f, 0.2f, -15.0f, -17.5f, 20.0f, -22.5f, -10.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 7.5f, -60.0f, 60.0f, 10.0f, 5.0f, 0.08f, 0.0f, -99999.99f, 40.0f, 5.0f, 42.5f, 52.5f, 54.5f, 40.0f, 45.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LW01', 0x1, - {0.0f, 0.0f, -99999.992188f, 0.15f, 0.15f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 450.0f, 400.0f, -99999.992188f, 0.5f, 0.15f, 20.0f, -40.0f, 60.0f, 2.0f, 0.15f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.15f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.15f}, + {0.0f, 0.0f, -99999.99f, 0.15f, 0.15f, -25.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 450.0f, 400.0f, -99999.99f, 0.5f, 0.15f, 20.0f, -40.0f, 60.0f, 2.0f, 0.15f, 0.3f, 0.05f, -99999.99f, 0.8f, 0.15f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.15f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK200 | dCamPrmFlg_UNK400, }, { 'GN01', 0x12, - {5.0f, 0.0f, -99999.992188f, 0.5f, 0.25f, 30.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, 400.0f, 400.0f, -99999.992188f, 0.66f, 0.05f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.0f, -99999.992188f, -99999.992188f, 1.0f, 0.18f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {5.0f, 0.0f, -99999.99f, 0.5f, 0.25f, 30.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, 400.0f, 400.0f, -99999.99f, 0.66f, 0.05f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.0f, -99999.99f, -99999.99f, 1.0f, 0.18f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'MM01', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 1.0f, 320.0f, 240.0f, 700.0f, 0.0f, 20.0f, 0.0f, 0.0f, 30.0f, 0.0f, 0.6f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.4f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 1.0f, 320.0f, 240.0f, 700.0f, 0.0f, 20.0f, 0.0f, 0.0f, 30.0f, 0.0f, 0.6f, 0.33f, 0.66f, -99999.99f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.4f}, dCamPrmFlg_UNK002, }, #if VERSION == VERSION_JPN { 'MM03', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, 0.0f, 40.0f, 0.0f, 2.0f, 320.0f, 250.0f, 700.0f, 0.0f, 27.0f, 0.0f, -5.0f, 30.0f, 0.0f, 0.6f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 0.45f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 10.0f, 0.0f, 40.0f, 0.0f, 2.0f, 320.0f, 250.0f, 700.0f, 0.0f, 27.0f, 0.0f, -5.0f, 30.0f, 0.0f, 0.6f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 0.45f}, dCamPrmFlg_UNK002, }, #endif { 'MM02', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 10.0f, 35.0f, 0.0f, 1.92f, 320.0f, 250.0f, 950.0f, 0.0f, 27.0f, 0.0f, -5.0f, 30.0f, 0.0f, 0.9f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 0.0f, 10.0f, 35.0f, 0.0f, 1.92f, 320.0f, 250.0f, 950.0f, 0.0f, 27.0f, 0.0f, -5.0f, 30.0f, 0.0f, 0.9f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, dCamPrmFlg_UNK002, }, { 'MM10', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 15.0f, 10.0f, 20.0f, 0.0f, 0.45f, 320.0f, 300.0f, 2000.0f, 0.0f, 45.0f, 10.0f, 5.0f, 35.0f, 0.0f, 0.42f, 0.33f, 0.5f, -99999.992188f, 0.0f, 4.0f, 55.0f, 52.0f, 62.0f, 0.0f, 0.48f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 15.0f, 10.0f, 20.0f, 0.0f, 0.45f, 320.0f, 300.0f, 2000.0f, 0.0f, 45.0f, 10.0f, 5.0f, 35.0f, 0.0f, 0.42f, 0.33f, 0.5f, -99999.99f, 0.0f, 4.0f, 55.0f, 52.0f, 62.0f, 0.0f, 0.48f}, dCamPrmFlg_UNK002, }, { 'MM08', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, -20.0f, 50.0f, 50.0f, 0.0f, 0.0f, 400.0f, 350.0f, 800.0f, 0.0f, 34.0f, 0.0f, -20.0f, 50.0f, 0.0f, 3.6f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 55.0f, 55.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, -20.0f, 50.0f, 50.0f, 0.0f, 0.0f, 400.0f, 350.0f, 800.0f, 0.0f, 34.0f, 0.0f, -20.0f, 50.0f, 0.0f, 3.6f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 55.0f, 55.0f, 0.0f, 0.0f}, dCamPrmFlg_UNK002, }, { 'MM83', 0xA, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, 20.0f, 300.0f, 0.0f, 5.0f, 320.0f, 350.0f, 1500.0f, 0.0f, 40.0f, 0.0f, 0.0f, 15.0f, 0.0f, 1.0f, 0.33f, 0.2f, -99999.992188f, 0.0f, 8.0f, 55.0f, 65.0f, 55.0f, 0.0f, 1.0f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 0.0f, 20.0f, 300.0f, 0.0f, 5.0f, 320.0f, 350.0f, 1500.0f, 0.0f, 40.0f, 0.0f, 0.0f, 15.0f, 0.0f, 1.0f, 0.33f, 0.2f, -99999.99f, 0.0f, 8.0f, 55.0f, 65.0f, 55.0f, 0.0f, 1.0f}, dCamPrmFlg_UNK002, }, { 'FP01', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 480.0f, 280.0f, -99999.992188f, 0.66f, 0.05f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.992188f, -99999.992188f, 1.0f, 0.18f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 480.0f, 280.0f, -99999.99f, 0.66f, 0.05f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.99f, -99999.99f, 1.0f, 0.18f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'ZZ00', 0x11, - {10.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, 200.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 320.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 3.0f, -99999.992188f, -99999.992188f, 0.3f, -99999.992188f, 0.33f, -99999.992188f, -99999.992188f, 1.0f, -99999.992188f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {10.0f, 0.0f, -99999.99f, -99999.99f, -99999.99f, 200.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 320.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 3.0f, -99999.99f, -99999.99f, 0.3f, -99999.99f, 0.33f, -99999.99f, -99999.99f, 1.0f, -99999.99f, 60.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, 0, }, { 'PN13', 0x5, - {1.0f, 0.0f, -99999.992188f, 0.15f, 0.15f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1000.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 10.0f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {1.0f, 0.0f, -99999.99f, 0.15f, 0.15f, -20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1000.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 0.75f, 10.0f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK040, }, { 'FN82', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1200.0f, 350.0f, -99999.992188f, 0.66f, 0.05f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.992188f, -99999.992188f, 1.0f, 0.01f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 30.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1200.0f, 350.0f, -99999.99f, 0.66f, 0.05f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.99f, -99999.99f, 1.0f, 0.01f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'IN01', 0x7, - {50.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 20.0f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, 680.0f, 250.0f, -99999.992188f, 0.66f, 0.05f, 12.0f, -40.0f, 60.0f, -99999.992188f, 0.05f, 0.4f, 0.05f, -99999.992188f, 45.0f, 45.0f, 62.0f, -99999.992188f, 2.5f, -99999.992188f, 0.05f}, + {50.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 20.0f, 20.0f, -99999.99f, -99999.99f, -99999.99f, 680.0f, 250.0f, -99999.99f, 0.66f, 0.05f, 12.0f, -40.0f, 60.0f, -99999.99f, 0.05f, 0.4f, 0.05f, -99999.99f, 45.0f, 45.0f, 62.0f, -99999.99f, 2.5f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'IN02', 0x7, - {50.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 20.0f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, 750.0f, 450.0f, -99999.992188f, 0.66f, 0.05f, 35.0f, -40.0f, 60.0f, -99999.992188f, 0.05f, 0.4f, 0.05f, -99999.992188f, 10.0f, 10.0f, 65.0f, -99999.992188f, 2.0f, -99999.992188f, 0.05f}, + {50.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 20.0f, 20.0f, -99999.99f, -99999.99f, -99999.99f, 750.0f, 450.0f, -99999.99f, 0.66f, 0.05f, 35.0f, -40.0f, 60.0f, -99999.99f, 0.05f, 0.4f, 0.05f, -99999.99f, 10.0f, 10.0f, 65.0f, -99999.99f, 2.0f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'MM82', 0xA, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, 20.0f, 100.0f, 0.0f, 45.0f, 320.0f, 200.0f, 1500.0f, 30.0f, 50.0f, 30.0f, -10.0f, 30.0f, 0.0f, 1.5f, 0.33f, 0.2f, -99999.992188f, 0.0f, 6.0f, 55.0f, 55.0f, 55.0f, 0.0f, 1.0f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 0.0f, 20.0f, 100.0f, 0.0f, 45.0f, 320.0f, 200.0f, 1500.0f, 30.0f, 50.0f, 30.0f, -10.0f, 30.0f, 0.0f, 1.5f, 0.33f, 0.2f, -99999.99f, 0.0f, 6.0f, 55.0f, 55.0f, 55.0f, 0.0f, 1.0f}, dCamPrmFlg_UNK002, }, { 'LL11', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 20.0f, 40.0f, 1000.0f, 300.0f, 2000.0f, 800.0f, 1500.0f, 0.0f, -10.0f, 40.0f, 30.0f, 40.0f, 0.04f, 0.02f, -99999.992188f, 80.0f, 30.0f, 60.0f, 50.0f, 80.0f, 52.0f, 70.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 20.0f, 40.0f, 1000.0f, 300.0f, 2000.0f, 800.0f, 1500.0f, 0.0f, -10.0f, 40.0f, 30.0f, 40.0f, 0.04f, 0.02f, -99999.99f, 80.0f, 30.0f, 60.0f, 50.0f, 80.0f, 52.0f, 70.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL01', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, -22.5f, 5.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 0.0f, -60.0f, 60.0f, 20.0f, -5.0f, 0.04f, 0.02f, -99999.992188f, 75.0f, 20.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, -22.5f, 5.0f, 450.0f, 125.0f, 750.0f, 480.0f, 420.0f, 0.0f, -60.0f, 60.0f, 20.0f, -5.0f, 0.04f, 0.02f, -99999.99f, 75.0f, 20.0f, 55.0f, 52.5f, 54.5f, 48.0f, 62.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL02', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 6.5f, -17.5f, 20.0f, -22.5f, -2.5f, 420.0f, 125.0f, 350.0f, 450.0f, 400.0f, 2.0f, -60.0f, 60.0f, 15.0f, 0.0f, 0.05f, 0.02f, -99999.992188f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 6.5f, -17.5f, 20.0f, -22.5f, -2.5f, 420.0f, 125.0f, 350.0f, 450.0f, 400.0f, 2.0f, -60.0f, 60.0f, 15.0f, 0.0f, 0.05f, 0.02f, -99999.99f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL03', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 15.0f, -60.0f, 60.0f, 20.0f, 12.0f, 0.01f, 0.01f, -99999.992188f, 70.0f, 50.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 0.0f, -17.5f, 20.0f, -17.5f, 0.0f, 375.0f, 125.0f, 750.0f, 425.0f, 350.0f, 15.0f, -60.0f, 60.0f, 20.0f, 12.0f, 0.01f, 0.01f, -99999.99f, 70.0f, 50.0f, 55.0f, 52.5f, 54.5f, 50.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL04', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.1f, 0.4f, -10.0f, 15.0f, 20.0f, -12.5f, -12.5f, 350.0f, 200.0f, 400.0f, 300.0f, 400.0f, 10.0f, -10.0f, 20.0f, 0.0f, 0.0f, 0.06f, 0.02f, -99999.992188f, 80.0f, 10.0f, 47.0f, 47.0f, 47.0f, 47.0f, 47.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.1f, 0.4f, -10.0f, 15.0f, 20.0f, -12.5f, -12.5f, 350.0f, 200.0f, 400.0f, 300.0f, 400.0f, 10.0f, -10.0f, 20.0f, 0.0f, 0.0f, 0.06f, 0.02f, -99999.99f, 80.0f, 10.0f, 47.0f, 47.0f, 47.0f, 47.0f, 47.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL05', 0x2, - {-10000.0f, -10000.0f, -99999.992188f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -40.0f, -50.0f, 280.0f, 125.0f, 350.0f, 300.0f, 100.0f, 2.0f, -40.0f, 40.0f, -15.0f, -5.0f, 0.08f, 0.08f, -99999.992188f, 10.0f, 5.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, + {-10000.0f, -10000.0f, -99999.99f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -40.0f, -50.0f, 280.0f, 125.0f, 350.0f, 300.0f, 100.0f, 2.0f, -40.0f, 40.0f, -15.0f, -5.0f, 0.08f, 0.08f, -99999.99f, 10.0f, 5.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL10', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -40.0f, 0.0f, 1000.0f, 750.0f, 1100.0f, 700.0f, 350.0f, 2.0f, -40.0f, 40.0f, -8.0f, 0.0f, 0.08f, 0.05f, -99999.992188f, 40.0f, 10.0f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -40.0f, 0.0f, 1000.0f, 750.0f, 1100.0f, 700.0f, 350.0f, 2.0f, -40.0f, 40.0f, -8.0f, 0.0f, 0.08f, 0.05f, -99999.99f, 40.0f, 10.0f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL09', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 60.0f, -20.0f, 120.0f, 0.0f, -10.0f, 420.0f, 300.0f, 350.0f, 650.0f, 800.0f, 2.0f, -60.0f, 60.0f, 15.0f, 5.0f, 0.04f, 0.01f, -99999.992188f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 60.0f, -20.0f, 120.0f, 0.0f, -10.0f, 420.0f, 300.0f, 350.0f, 650.0f, 800.0f, 2.0f, -60.0f, 60.0f, 15.0f, 5.0f, 0.04f, 0.01f, -99999.99f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL12', 0x2, - {-10000.0f, -10000.0f, -99999.992188f, 0.2f, 0.4f, 500.0f, -7.5f, 500.0f, 300.0f, 300.0f, 550.0f, 500.0f, 600.0f, 400.0f, 500.0f, 2.0f, -40.0f, 40.0f, -15.0f, -15.0f, 0.08f, 0.08f, -99999.992188f, 10.0f, 5.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, + {-10000.0f, -10000.0f, -99999.99f, 0.2f, 0.4f, 500.0f, -7.5f, 500.0f, 300.0f, 300.0f, 550.0f, 500.0f, 600.0f, 400.0f, 500.0f, 2.0f, -40.0f, 40.0f, -15.0f, -15.0f, 0.08f, 0.08f, -99999.99f, 10.0f, 5.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL13', 0x2, - {-10000.0f, -10000.0f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 0.0f, 22.5f, 550.0f, 125.0f, 750.0f, 530.0f, 580.0f, -7.5f, -60.0f, 60.0f, 5.0f, -15.0f, 0.04f, 0.04f, -99999.992188f, 60.0f, 20.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, + {-10000.0f, -10000.0f, -99999.99f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 0.0f, 22.5f, 550.0f, 125.0f, 750.0f, 530.0f, 580.0f, -7.5f, -60.0f, 60.0f, 5.0f, -15.0f, 0.04f, 0.04f, -99999.99f, 60.0f, 20.0f, 55.0f, 52.5f, 54.5f, 65.0f, 70.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL14', 0x2, - {-10000.0f, -10000.0f, -99999.992188f, 0.4f, 0.2f, 0.0f, -17.5f, 20.0f, 0.0f, 60.0f, 600.0f, 125.0f, 350.0f, 500.0f, 700.0f, 0.0f, -60.0f, 60.0f, 0.0f, -10.0f, 0.05f, 0.05f, -99999.992188f, 30.0f, 15.0f, 55.0f, 52.5f, 54.5f, 53.0f, 57.0f}, + {-10000.0f, -10000.0f, -99999.99f, 0.4f, 0.2f, 0.0f, -17.5f, 20.0f, 0.0f, 60.0f, 600.0f, 125.0f, 350.0f, 500.0f, 700.0f, 0.0f, -60.0f, 60.0f, 0.0f, -10.0f, 0.05f, 0.05f, -99999.99f, 30.0f, 15.0f, 55.0f, 52.5f, 54.5f, 53.0f, 57.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL15', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 10.0f, -17.5f, 20.0f, -22.5f, -2.5f, 420.0f, 125.0f, 800.0f, 599.0f, 799.0f, 30.0f, 0.0f, 60.0f, 20.0f, 40.0f, 0.05f, 0.05f, -99999.992188f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 10.0f, -17.5f, 20.0f, -22.5f, -2.5f, 420.0f, 125.0f, 800.0f, 599.0f, 799.0f, 30.0f, 0.0f, 60.0f, 20.0f, 40.0f, 0.05f, 0.05f, -99999.99f, 80.0f, 15.0f, 55.0f, 52.5f, 54.5f, 45.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL16', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.2f, 0.4f, 30.0f, 0.0f, 50.0f, 30.0f, 10.0f, 750.0f, 650.0f, 1000.0f, 600.0f, 350.0f, -10.0f, -40.0f, 40.0f, -8.0f, 0.0f, 0.08f, 0.08f, -99999.992188f, 40.0f, 10.0f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.2f, 0.4f, 30.0f, 0.0f, 50.0f, 30.0f, 10.0f, 750.0f, 650.0f, 1000.0f, 600.0f, 350.0f, -10.0f, -40.0f, 40.0f, -8.0f, 0.0f, 0.08f, 0.08f, -99999.99f, 40.0f, 10.0f, 55.0f, 52.5f, 54.5f, 60.0f, 70.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'LL82', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 0.25f, 0.0f, 0.0f, 0.0f, -15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 600.0f, 400.0f, 0.0f, 0.0f, 0.0f, -10.0f, 30.0f, 0.1f, 0.0f, -99999.992188f, 60.0f, 0.0f, 0.0f, 0.0f, 0.0f, 60.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.75f, 0.25f, 0.0f, 0.0f, 0.0f, -15.0f, 0.0f, 0.0f, 0.0f, 0.0f, 600.0f, 400.0f, 0.0f, 0.0f, 0.0f, -10.0f, 30.0f, 0.1f, 0.0f, -99999.99f, 60.0f, 0.0f, 0.0f, 0.0f, 0.0f, 60.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'FN01', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 480.0f, 280.0f, -99999.992188f, 0.66f, 0.08f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.992188f, -99999.992188f, 1.0f, 0.18f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 480.0f, 280.0f, -99999.99f, 0.66f, 0.08f, 10.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.99f, -99999.99f, 1.0f, 0.18f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN02', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 360.0f, 240.0f, -99999.992188f, 0.66f, 0.1f, 10.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 58.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 360.0f, 240.0f, -99999.99f, 0.66f, 0.1f, 10.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.99f, 0.8f, 0.1f, 58.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN03', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 350.0f, 260.0f, -99999.992188f, 0.66f, 0.08f, 14.0f, 10.0f, 60.0f, 2.0f, 0.05f, 0.3f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -5.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 350.0f, 260.0f, -99999.99f, 0.66f, 0.08f, 14.0f, 10.0f, 60.0f, 2.0f, 0.05f, 0.3f, -99999.99f, -99999.99f, 1.0f, 0.2f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN04', 0x1, - {1.0f, 0.1f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 480.0f, 350.0f, -99999.992188f, 0.66f, 0.1f, 18.0f, 15.0f, 25.0f, 2.0f, 0.05f, 0.39f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.1f, -99999.99f, 0.75f, 0.25f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 480.0f, 350.0f, -99999.99f, 0.66f, 0.1f, 18.0f, 15.0f, 25.0f, 2.0f, 0.05f, 0.39f, -99999.99f, -99999.99f, 1.0f, 0.2f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN06', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 230.0f, 240.0f, -99999.992188f, 0.2f, 0.05f, 5.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.01f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -25.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 230.0f, 240.0f, -99999.99f, 0.2f, 0.05f, 5.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.01f, -99999.99f, -99999.99f, 1.0f, 0.2f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN09', 0x1, - {0.5f, 0.0f, -99999.992188f, 0.75f, 0.25f, -10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 460.0f, 210.0f, -99999.992188f, 0.66f, 0.09f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.08f, -99999.992188f, -99999.992188f, 2.0f, 0.3f, 52.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {0.5f, 0.0f, -99999.99f, 0.75f, 0.25f, -10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 460.0f, 210.0f, -99999.99f, 0.66f, 0.09f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.08f, -99999.99f, -99999.99f, 2.0f, 0.3f, 52.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN07', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 430.0f, 280.0f, -99999.992188f, 0.66f, 0.1f, 13.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.35f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 430.0f, 280.0f, -99999.99f, 0.66f, 0.1f, 13.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.35f, -99999.99f, -99999.99f, 1.0f, 0.2f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN10', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 15.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 420.0f, 250.0f, -99999.992188f, 0.66f, 0.08f, 5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, -99999.992188f, -99999.992188f, 1.0f, 0.1f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 15.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 420.0f, 250.0f, -99999.99f, 0.66f, 0.08f, 5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, -99999.99f, -99999.99f, 1.0f, 0.1f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN14', 0x1, - {0.5f, 0.0f, -99999.992188f, 0.75f, 0.25f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 450.0f, 300.0f, -99999.992188f, 0.66f, 0.12f, 15.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {0.5f, 0.0f, -99999.99f, 0.75f, 0.25f, 10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 450.0f, 300.0f, -99999.99f, 0.66f, 0.12f, 15.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.99f, -99999.99f, 1.0f, 0.2f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001, }, { 'FN15', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 32.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 320.0f, 200.0f, -10000.0f, 0.66f, 0.08f, -23.0f, -20.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 32.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 320.0f, 200.0f, -10000.0f, 0.66f, 0.08f, -23.0f, -20.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.99f, 0.1f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN17', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 380.0f, 200.0f, -99999.992188f, 0.66f, 0.1f, 10.0f, -40.0f, 60.0f, 2.0f, 0.08f, 0.18f, 0.05f, -99999.992188f, 2.0f, 0.1f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -5.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 380.0f, 200.0f, -99999.99f, 0.66f, 0.1f, 10.0f, -40.0f, 60.0f, 2.0f, 0.08f, 0.18f, 0.05f, -99999.99f, 2.0f, 0.1f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN20', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 330.0f, 280.0f, -99999.992188f, 0.66f, 0.15f, 12.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.992188f, -99999.992188f, 1.0f, 0.1f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 330.0f, 280.0f, -99999.99f, 0.66f, 0.15f, 12.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.2f, -99999.99f, -99999.99f, 1.0f, 0.1f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK200 | dCamPrmFlg_UNK400, }, { 'FN21', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.8f, 0.25f, 8.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 340.0f, 220.0f, -99999.992188f, 0.66f, 0.08f, 6.0f, -40.0f, 70.0f, 2.0f, 0.05f, 0.16f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 64.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.8f, 0.25f, 8.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 340.0f, 220.0f, -99999.99f, 0.66f, 0.08f, 6.0f, -40.0f, 70.0f, 2.0f, 0.05f, 0.16f, -99999.99f, -99999.99f, 1.0f, 0.2f, 64.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN22', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1500.0f, 1200.0f, -99999.992188f, 0.66f, 0.08f, 35.0f, 30.0f, 40.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.992188f, 2.0f, 0.05f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -25.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1500.0f, 1200.0f, -99999.99f, 0.66f, 0.08f, 35.0f, 30.0f, 40.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.99f, 2.0f, 0.05f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN23', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 32.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1000.0f, 800.0f, -99999.992188f, 0.66f, 0.1f, 20.0f, 15.0f, 25.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.992188f, 2.0f, 0.05f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 32.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1000.0f, 800.0f, -99999.99f, 0.66f, 0.1f, 20.0f, 15.0f, 25.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.99f, 2.0f, 0.05f, 50.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN24', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 600.0f, 350.0f, -99999.992188f, 0.66f, 0.09f, 25.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.33f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 600.0f, 350.0f, -99999.99f, 0.66f, 0.09f, 25.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.33f, -99999.99f, -99999.99f, 1.0f, 0.2f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN26', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 800.0f, 800.0f, -99999.992188f, 0.66f, 0.1f, 35.0f, 30.0f, 40.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.992188f, 2.0f, 0.05f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -25.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 800.0f, 800.0f, -99999.99f, 0.66f, 0.1f, 35.0f, 30.0f, 40.0f, 2.0f, 0.05f, 0.1f, -10000.0f, -99999.99f, 2.0f, 0.05f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN27', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 32.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1250.0f, 1000.0f, -99999.992188f, 0.66f, 0.09f, 0.0f, -10.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 32.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1250.0f, 1000.0f, -99999.99f, 0.66f, 0.09f, 0.0f, -10.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.99f, 0.1f, 0.1f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN28', 0x1, - {0.5f, 0.0f, -99999.992188f, 0.75f, 0.25f, 5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 330.0f, 250.0f, -99999.992188f, 0.66f, 0.09f, 8.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.06f, -99999.992188f, -99999.992188f, 2.0f, 0.3f, 52.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {0.5f, 0.0f, -99999.99f, 0.75f, 0.25f, 5.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 330.0f, 250.0f, -99999.99f, 0.66f, 0.09f, 8.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.06f, -99999.99f, -99999.99f, 2.0f, 0.3f, 52.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN30', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 300.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 1000.0f, 900.0f, -10000.0f, 0.66f, 0.08f, -15.0f, -15.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 300.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 1000.0f, 900.0f, -10000.0f, 0.66f, 0.08f, -15.0f, -15.0f, 10.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.99f, 0.1f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN31', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 420.0f, 250.0f, -10000.0f, 0.66f, 0.08f, 0.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, -10000.0f, -99999.992188f, 1.0f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 420.0f, 250.0f, -10000.0f, 0.66f, 0.08f, 0.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, -10000.0f, -99999.99f, 1.0f, 0.1f, 55.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN32', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 360.0f, 220.0f, -10000.0f, 0.66f, 0.08f, -5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, 0.05f, -99999.992188f, 0.8f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 360.0f, 220.0f, -10000.0f, 0.66f, 0.08f, -5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, 0.05f, -99999.99f, 0.8f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN33', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1300.0f, 1000.0f, 1350.0f, 0.66f, 0.05f, 30.0f, 0.0f, 60.0f, 2.0f, 0.09f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 58.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1300.0f, 1000.0f, 1350.0f, 0.66f, 0.05f, 30.0f, 0.0f, 60.0f, 2.0f, 0.09f, 0.3f, 0.05f, -99999.99f, 0.8f, 0.1f, 58.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN34', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 1000.0f, 900.0f, -10000.0f, 0.66f, 0.08f, 45.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, 0.05f, -99999.992188f, 0.8f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 30.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 1000.0f, 900.0f, -10000.0f, 0.66f, 0.08f, 45.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.25f, 0.05f, -99999.99f, 0.8f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN35', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1250.0f, 1000.0f, -99999.992188f, 0.66f, 0.09f, 0.0f, -15.0f, 10.0f, 0.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1250.0f, 1000.0f, -99999.99f, 0.66f, 0.09f, 0.0f, -15.0f, 10.0f, 0.0f, 0.5f, 0.01f, 0.1f, -99999.99f, 0.1f, 0.1f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'LL17', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 20.0f, 40.0f, 1000.0f, 300.0f, 2000.0f, 800.0f, 1600.0f, 0.0f, -10.0f, 40.0f, 30.0f, 40.0f, 0.04f, 0.03f, -99999.992188f, 80.0f, 30.0f, 60.0f, 50.0f, 80.0f, 52.0f, 45.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.4f, 0.2f, 7.5f, -17.5f, 20.0f, 20.0f, 40.0f, 1000.0f, 300.0f, 2000.0f, 800.0f, 1600.0f, 0.0f, -10.0f, 40.0f, 30.0f, 40.0f, 0.04f, 0.03f, -99999.99f, 80.0f, 30.0f, 60.0f, 50.0f, 80.0f, 52.0f, 45.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'FN37', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 15.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 1050.0f, 950.0f, -99999.992188f, 0.66f, 0.05f, 20.0f, 15.0f, 45.0f, 2.0f, 0.05f, 0.12f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 15.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 1050.0f, 950.0f, -99999.99f, 0.66f, 0.05f, 20.0f, 15.0f, 45.0f, 2.0f, 0.05f, 0.12f, -99999.99f, -99999.99f, 1.0f, 0.2f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, #if VERSION == VERSION_JPN { 'FN38', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 800.0f, 600.0f, -99999.992188f, 0.66f, 0.15f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 62.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 40.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 800.0f, 600.0f, -99999.99f, 0.66f, 0.15f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.99f, 0.8f, 0.1f, 62.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, #endif { 'BE08', 0x8, - {100.0f, 0.0f, -99999.992188f, 0.75f, 0.15f, 80.0f, -99999.992188f, -99999.992188f, 0.0f, -99999.992188f, 500.0f, -99999.992188f, -99999.992188f, 0.0f, 40.0f, 20.0f, -80.0f, 80.0f, 0.0f, -99999.992188f, 0.1f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 78.0f, -99999.992188f, -99999.992188f, 0.0f, -5.0f}, + {100.0f, 0.0f, -99999.99f, 0.75f, 0.15f, 80.0f, -99999.99f, -99999.99f, 0.0f, -99999.99f, 500.0f, -99999.99f, -99999.99f, 0.0f, 40.0f, 20.0f, -80.0f, 80.0f, 0.0f, -99999.99f, 0.1f, 0.1f, -99999.99f, -99999.99f, -99999.99f, 78.0f, -99999.99f, -99999.99f, 0.0f, -5.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'BE07', 0x8, - {100.0f, 0.0f, -99999.992188f, 0.75f, 0.15f, 240.0f, -99999.992188f, -99999.992188f, 0.0f, -99999.992188f, 750.0f, -99999.992188f, -99999.992188f, 0.0f, 40.0f, 15.0f, -80.0f, 80.0f, 0.0f, -99999.992188f, 0.1f, 0.1f, -99999.992188f, -99999.992188f, -99999.992188f, 66.0f, -99999.992188f, -99999.992188f, 0.0f, -5.0f}, + {100.0f, 0.0f, -99999.99f, 0.75f, 0.15f, 240.0f, -99999.99f, -99999.99f, 0.0f, -99999.99f, 750.0f, -99999.99f, -99999.99f, 0.0f, 40.0f, 15.0f, -80.0f, 80.0f, 0.0f, -99999.99f, 0.1f, 0.1f, -99999.99f, -99999.99f, -99999.99f, 66.0f, -99999.99f, -99999.99f, 0.0f, -5.0f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004, }, { 'TT04', 0x3, - {0.0f, 0.0f, -99999.992188f, 0.6f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 290.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 15.0f, 30.0f, 0.0f, 0.0f, -99999.992188f, 0.0f, 30.0f, 42.0f, 45.0f, 0.0f, 0.0f, 0.0f}, + {0.0f, 0.0f, -99999.99f, 0.6f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 290.0f, 80.0f, 0.0f, 0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 15.0f, 30.0f, 0.0f, 0.0f, -99999.99f, 0.0f, 30.0f, 42.0f, 45.0f, 0.0f, 0.0f, 0.0f}, dCamPrmFlg_UNK001, }, { 'FP38', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 40.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 800.0f, 600.0f, -99999.992188f, 0.66f, 0.15f, 45.0f, -40.0f, 80.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 62.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 40.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 800.0f, 600.0f, -99999.99f, 0.66f, 0.15f, 45.0f, -40.0f, 80.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.99f, 0.8f, 0.1f, 62.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN39', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, -20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 380.0f, 300.0f, -99999.992188f, 0.66f, 0.05f, 0.0f, -20.0f, 20.0f, 2.0f, 0.05f, 0.12f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, -20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 380.0f, 300.0f, -99999.99f, 0.66f, 0.05f, 0.0f, -20.0f, 20.0f, 2.0f, 0.05f, 0.12f, -99999.99f, -99999.99f, 1.0f, 0.2f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK400, }, { 'MM16', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, 20.0f, 40.0f, 0.0f, 1.0f, 320.0f, 250.0f, 500.0f, 0.0f, 28.0f, 20.0f, 20.0f, 30.0f, 0.0f, 0.3f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 0.45f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 10.0f, 20.0f, 40.0f, 0.0f, 1.0f, 320.0f, 250.0f, 500.0f, 0.0f, 28.0f, 20.0f, 20.0f, 30.0f, 0.0f, 0.3f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 0.45f}, dCamPrmFlg_UNK002, }, { 'MM14', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.55f, 0.15f, 10.0f, 5.0f, 20.0f, 0.0f, 0.5f, 320.0f, 180.0f, 700.0f, 0.0f, 30.0f, 10.0f, 5.0f, 40.0f, 0.0f, 1.7f, 0.33f, 0.5f, -99999.992188f, 0.0f, 3.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.42f}, + {0.0f, 0.0f, -99999.99f, 0.55f, 0.15f, 10.0f, 5.0f, 20.0f, 0.0f, 0.5f, 320.0f, 180.0f, 700.0f, 0.0f, 30.0f, 10.0f, 5.0f, 40.0f, 0.0f, 1.7f, 0.33f, 0.5f, -99999.99f, 0.0f, 3.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.42f}, dCamPrmFlg_UNK002, }, { 'MM15', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.55f, 0.15f, 10.0f, 5.0f, 20.0f, 0.0f, 0.5f, 320.0f, 200.0f, 1000.0f, 0.0f, 40.0f, 10.0f, 5.0f, 40.0f, 0.0f, 1.7f, 0.33f, 0.66f, -99999.992188f, 0.0f, 3.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.42f}, + {0.0f, 0.0f, -99999.99f, 0.55f, 0.15f, 10.0f, 5.0f, 20.0f, 0.0f, 0.5f, 320.0f, 200.0f, 1000.0f, 0.0f, 40.0f, 10.0f, 5.0f, 40.0f, 0.0f, 1.7f, 0.33f, 0.66f, -99999.99f, 0.0f, 3.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.42f}, dCamPrmFlg_UNK002, }, { 'MM07', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.55f, 0.15f, 90.0f, 80.0f, 180.0f, 0.0f, 4.0f, 750.0f, 500.0f, 1000.0f, 0.0f, 32.0f, 0.0f, -5.0f, 23.0f, 0.0f, 1.65f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 60.0f, 55.0f, 70.0f, 0.0f, 1.5f}, + {0.0f, 0.0f, -99999.99f, 0.55f, 0.15f, 90.0f, 80.0f, 180.0f, 0.0f, 4.0f, 750.0f, 500.0f, 1000.0f, 0.0f, 32.0f, 0.0f, -5.0f, 23.0f, 0.0f, 1.65f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 60.0f, 55.0f, 70.0f, 0.0f, 1.5f}, dCamPrmFlg_UNK002, }, { 'FN81', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 100.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 600.0f, 600.0f, -99999.992188f, 0.9f, 0.01f, 0.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.0f, -99999.992188f, -99999.992188f, 0.8f, 0.1f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 100.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 600.0f, 600.0f, -99999.99f, 0.9f, 0.01f, 0.0f, 0.0f, 60.0f, 2.0f, 0.05f, 0.0f, -99999.99f, -99999.99f, 0.8f, 0.1f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN40', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 70.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 800.0f, 500.0f, -10000.0f, 0.66f, 0.08f, -5.0f, -20.0f, 20.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 70.0f, -10000.0f, -10000.0f, -10000.0f, -10000.0f, 800.0f, 500.0f, -10000.0f, 0.66f, 0.08f, -5.0f, -20.0f, 20.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.99f, 0.1f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN41', 0x1, - {0.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 12.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 350.0f, 100.0f, -99999.992188f, 0.66f, 0.09f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.992188f, -99999.992188f, 2.0f, 0.3f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {0.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 12.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 350.0f, 100.0f, -99999.99f, 0.66f, 0.09f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.1f, -99999.99f, -99999.99f, 2.0f, 0.3f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN19', 0x1, - {1.0f, 0.1f, -99999.992188f, 0.75f, 0.25f, -25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 480.0f, 250.0f, -99999.992188f, 0.66f, 0.12f, -2.0f, -15.0f, 25.0f, 2.0f, 0.05f, 0.39f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.1f, -99999.99f, 0.75f, 0.25f, -25.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 480.0f, 250.0f, -99999.99f, 0.66f, 0.12f, -2.0f, -15.0f, 25.0f, 2.0f, 0.05f, 0.39f, -99999.99f, -99999.99f, 1.0f, 0.2f, 55.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK400, }, { 'LL81', 0x2, - {-99999.992188f, -99999.992188f, -99999.992188f, 0.75f, 0.25f, 0.0f, 0.0f, 0.0f, 50.0f, 200.0f, 0.0f, 0.0f, 0.0f, 600.0f, 600.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, -99999.992188f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 60.0f, 60.0f}, + {-99999.99f, -99999.99f, -99999.99f, 0.75f, 0.25f, 0.0f, 0.0f, 0.0f, 50.0f, 200.0f, 0.0f, 0.0f, 0.0f, 600.0f, 600.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, -99999.99f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 60.0f, 60.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'DD01', 0x10, - {60.0f, 0.0f, -99999.992188f, 0.03f, 0.03f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 550.0f, 450.0f, -99999.992188f, -99999.992188f, -99999.992188f, 5.0f, -99999.992188f, -99999.992188f, 0.2f, -99999.992188f, 0.15f, -99999.992188f, -99999.992188f, 0.33f, -99999.992188f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {60.0f, 0.0f, -99999.99f, 0.03f, 0.03f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 550.0f, 450.0f, -99999.99f, -99999.99f, -99999.99f, 5.0f, -99999.99f, -99999.99f, 0.2f, -99999.99f, 0.15f, -99999.99f, -99999.99f, 0.33f, -99999.99f, 55.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002, }, { 'MM19', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 10.0f, 35.0f, 0.0f, 1.88f, 320.0f, 250.0f, 600.0f, 0.0f, 20.0f, 0.0f, -5.0f, 70.0f, 0.0f, 2.8f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 0.0f, 10.0f, 35.0f, 0.0f, 1.88f, 320.0f, 250.0f, 600.0f, 0.0f, 20.0f, 0.0f, -5.0f, 70.0f, 0.0f, 2.8f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, dCamPrmFlg_UNK002, }, { 'DD02', 0x10, - {80.0f, 0.0f, -99999.992188f, 0.03f, 0.03f, 50.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 550.0f, 450.0f, -99999.992188f, -99999.992188f, -99999.992188f, 5.0f, -99999.992188f, -99999.992188f, 0.33f, -99999.992188f, 0.15f, -99999.992188f, -99999.992188f, 0.5f, -99999.992188f, 55.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {80.0f, 0.0f, -99999.99f, 0.03f, 0.03f, 50.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 550.0f, 450.0f, -99999.99f, -99999.99f, -99999.99f, 5.0f, -99999.99f, -99999.99f, 0.33f, -99999.99f, 0.15f, -99999.99f, -99999.99f, 0.5f, -99999.99f, 55.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002, }, { 'FN42', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 25.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 380.0f, 300.0f, -99999.992188f, 0.66f, 0.05f, 15.0f, -20.0f, 80.0f, 2.0f, 0.05f, 0.12f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 25.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 380.0f, 300.0f, -99999.99f, 0.66f, 0.05f, 15.0f, -20.0f, 80.0f, 2.0f, 0.05f, 0.12f, -99999.99f, -99999.99f, 1.0f, 0.2f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'IN03', 0x7, - {-180.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, 10.0f, -99999.992188f, -99999.992188f, -99999.992188f, 880.0f, 500.0f, -99999.992188f, 0.66f, 0.05f, 50.0f, -40.0f, 60.0f, -99999.992188f, 0.05f, 0.75f, 0.05f, -99999.992188f, 115.0f, 115.0f, 75.0f, -99999.992188f, 0.5f, -99999.992188f, 0.05f}, + {-180.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 0.0f, 10.0f, -99999.99f, -99999.99f, -99999.99f, 880.0f, 500.0f, -99999.99f, 0.66f, 0.05f, 50.0f, -40.0f, 60.0f, -99999.99f, 0.05f, 0.75f, 0.05f, -99999.99f, 115.0f, 115.0f, 75.0f, -99999.99f, 0.5f, -99999.99f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN43', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 200.0f, -10000.0f, -10000.0f, -10000.0f, -500.0f, 900.0f, 800.0f, -10000.0f, 0.66f, 0.08f, -3.0f, -20.0f, 20.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.992188f, 0.1f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 200.0f, -10000.0f, -10000.0f, -10000.0f, -500.0f, 900.0f, 800.0f, -10000.0f, 0.66f, 0.08f, -3.0f, -20.0f, 20.0f, 2.0f, 0.5f, 0.01f, 0.1f, -99999.99f, 0.1f, 0.1f, 58.0f, -10000.0f, -10000.0f, -10000.0f, 0.05f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'FN11', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 5.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 410.0f, 300.0f, -99999.992188f, 0.66f, 0.08f, 22.0f, 15.0f, 30.0f, 2.0f, 0.05f, 0.07f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 5.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 410.0f, 300.0f, -99999.99f, 0.66f, 0.08f, 22.0f, 15.0f, 30.0f, 2.0f, 0.05f, 0.07f, -99999.99f, -99999.99f, 1.0f, 0.2f, 60.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, { 'MM21', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 20.0f, 35.0f, 0.0f, 1.2f, 320.0f, 250.0f, 750.0f, 0.0f, 27.0f, 0.0f, -30.0f, 30.0f, 0.0f, 2.2f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 0.0f, 20.0f, 35.0f, 0.0f, 1.2f, 320.0f, 250.0f, 750.0f, 0.0f, 27.0f, 0.0f, -30.0f, 30.0f, 0.0f, 2.2f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 52.5f, 60.0f, 0.0f, 0.4f}, dCamPrmFlg_UNK002, }, { 'MM20', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, 0.0f, 30.0f, 0.0f, 2.0f, 320.0f, 250.0f, 500.0f, 0.0f, 26.0f, 0.0f, -5.0f, 20.0f, 0.0f, 1.2f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 64.0f, 0.0f, 0.9f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 10.0f, 0.0f, 30.0f, 0.0f, 2.0f, 320.0f, 250.0f, 500.0f, 0.0f, 26.0f, 0.0f, -5.0f, 20.0f, 0.0f, 1.2f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 50.0f, 64.0f, 0.0f, 0.9f}, dCamPrmFlg_UNK002, }, { 'FN05', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 400.0f, 300.0f, -99999.992188f, 0.66f, 0.05f, -5.0f, 0.0f, 20.0f, 2.0f, 0.05f, 0.12f, -99999.992188f, -99999.992188f, 1.0f, 0.2f, 62.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 400.0f, 300.0f, -99999.99f, 0.66f, 0.05f, -5.0f, 0.0f, 20.0f, 2.0f, 0.05f, 0.12f, -99999.99f, -99999.99f, 1.0f, 0.2f, 62.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK400, }, { 'FN36', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.25f, 0.1f, -10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 460.0f, 350.0f, -99999.992188f, 0.66f, 0.12f, 5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.5f, -99999.992188f, -99999.992188f, 1.0f, 0.18f, 66.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.25f, 0.1f, -10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 460.0f, 350.0f, -99999.99f, 0.66f, 0.12f, 5.0f, -60.0f, 60.0f, 2.0f, 0.05f, 0.5f, -99999.99f, -99999.99f, 1.0f, 0.18f, 66.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK002, }, { 'MM81', 0xA, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 0.0f, 30.0f, 50.0f, 0.0f, 5.0f, 320.0f, 250.0f, 1950.0f, 0.0f, 55.0f, 0.0f, -15.0f, 90.0f, 0.0f, 3.0f, 0.33f, 0.2f, -99999.992188f, 0.0f, 6.0f, 55.0f, 65.0f, 55.0f, 0.0f, 1.5f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 0.0f, 30.0f, 50.0f, 0.0f, 5.0f, 320.0f, 250.0f, 1950.0f, 0.0f, 55.0f, 0.0f, -15.0f, 90.0f, 0.0f, 3.0f, 0.33f, 0.2f, -99999.99f, 0.0f, 6.0f, 55.0f, 65.0f, 55.0f, 0.0f, 1.5f}, dCamPrmFlg_UNK002, }, { 'SS01', 0x4, - {0.0f, 0.0f, -99999.992188f, -99999.992188f, -99999.992188f, -10.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 20.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 70.0f, 0.45f, 0.04f, -99999.992188f, -99999.992188f, 90.0f, 50.0f, 0.2f, -99999.992188f, -99999.992188f, -99999.992188f}, + {0.0f, 0.0f, -99999.99f, -99999.99f, -99999.99f, -10.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 20.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 70.0f, 0.45f, 0.04f, -99999.99f, -99999.99f, 90.0f, 50.0f, 0.2f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK080, }, { 'LL18', 0x2, - {-10000.0f, -10000.0f, -99999.992188f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -80.0f, 0.0f, 280.0f, 125.0f, 350.0f, 800.0f, 1200.0f, 2.0f, -40.0f, 40.0f, 20.0f, -15.0f, 0.3f, 0.0f, -99999.992188f, 10.0f, 35.0f, 65.0f, 65.0f, 70.0f, 60.0f, 70.0f}, + {-10000.0f, -10000.0f, -99999.99f, 0.2f, 0.4f, 6.5f, -17.5f, 20.0f, -80.0f, 0.0f, 280.0f, 125.0f, 350.0f, 800.0f, 1200.0f, 2.0f, -40.0f, 40.0f, 20.0f, -15.0f, 0.3f, 0.0f, -99999.99f, 10.0f, 35.0f, 65.0f, 65.0f, 70.0f, 60.0f, 70.0f}, dCamPrmFlg_UNK002 | dCamPrmFlg_UNK004, }, { 'DD04', 0x10, - {80.0f, 0.0f, -99999.992188f, 0.03f, 0.03f, 60.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 450.0f, 400.0f, -99999.992188f, -99999.992188f, -99999.992188f, -4.0f, -99999.992188f, -99999.992188f, 0.33f, -99999.992188f, 0.0f, -99999.992188f, -99999.992188f, -45.0f, -99999.992188f, 45.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f}, + {80.0f, 0.0f, -99999.99f, 0.03f, 0.03f, 60.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 450.0f, 400.0f, -99999.99f, -99999.99f, -99999.99f, -4.0f, -99999.99f, -99999.99f, 0.33f, -99999.99f, 0.0f, -99999.99f, -99999.99f, -45.0f, -99999.99f, 45.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f}, dCamPrmFlg_UNK002, }, { 'MM22', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 3.0f, 320.0f, 240.0f, 600.0f, 0.0f, 19.0f, 0.0f, 0.0f, 15.0f, 0.0f, 0.7f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.5f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 3.0f, 320.0f, 240.0f, 600.0f, 0.0f, 19.0f, 0.0f, 0.0f, 15.0f, 0.0f, 0.7f, 0.33f, 0.66f, -99999.99f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.5f}, dCamPrmFlg_UNK002, }, { 'MM18', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 20.0f, 30.0f, 25.0f, 0.0f, 0.5f, 300.0f, 210.0f, 480.0f, 0.0f, 18.0f, 20.0f, 35.0f, 0.0f, 0.0f, 2.1f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 55.0f, 58.0f, 0.0f, 0.45f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 20.0f, 30.0f, 25.0f, 0.0f, 0.5f, 300.0f, 210.0f, 480.0f, 0.0f, 18.0f, 20.0f, 35.0f, 0.0f, 0.0f, 2.1f, 0.33f, 0.66f, -99999.99f, 0.0f, 8.0f, 55.0f, 55.0f, 58.0f, 0.0f, 0.45f}, dCamPrmFlg_UNK002, }, { 'MM17', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 30.0f, 25.0f, 30.0f, 0.0f, 0.5f, 250.0f, 160.0f, 420.0f, 0.0f, 20.0f, 20.0f, 40.0f, 5.0f, 0.0f, 2.4f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 55.0f, 58.0f, 0.0f, 0.45f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 30.0f, 25.0f, 30.0f, 0.0f, 0.5f, 250.0f, 160.0f, 420.0f, 0.0f, 20.0f, 20.0f, 40.0f, 5.0f, 0.0f, 2.4f, 0.33f, 0.66f, -99999.99f, 0.0f, 8.0f, 55.0f, 55.0f, 58.0f, 0.0f, 0.45f}, dCamPrmFlg_UNK002, }, #if VERSION != VERSION_JPN { 'MM03', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 10.0f, 0.0f, 30.0f, 0.0f, 5.2f, 320.0f, 260.0f, 660.0f, 0.0f, 25.0f, 0.0f, -10.0f, 30.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 1.5f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 10.0f, 0.0f, 30.0f, 0.0f, 5.2f, 320.0f, 260.0f, 660.0f, 0.0f, 25.0f, 0.0f, -10.0f, 30.0f, 0.0f, 2.0f, 0.33f, 0.5f, -99999.99f, 0.0f, 8.0f, 55.0f, 50.0f, 62.0f, 0.0f, 1.5f}, dCamPrmFlg_UNK002, }, { 'MM23', 0xA, - {0.0f, 0.0f, -99999.992188f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 4.0f, 320.0f, 240.0f, 900.0f, 0.0f, 34.0f, 0.0f, -5.0f, 60.0f, 0.0f, 2.6f, 0.33f, 0.66f, -99999.992188f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.8f}, + {0.0f, 0.0f, -99999.99f, 0.7f, 0.25f, 0.0f, 0.0f, 30.0f, 0.0f, 4.0f, 320.0f, 240.0f, 900.0f, 0.0f, 34.0f, 0.0f, -5.0f, 60.0f, 0.0f, 2.6f, 0.33f, 0.66f, -99999.99f, 0.0f, 8.0f, 55.0f, 50.0f, 60.0f, 0.0f, 0.8f}, dCamPrmFlg_UNK002, }, { 'FN38', 0x1, - {1.0f, 0.0f, -99999.992188f, 0.75f, 0.25f, 30.0f, -99999.992188f, -99999.992188f, -99999.992188f, -99999.992188f, 800.0f, 600.0f, -99999.992188f, 0.66f, 0.15f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.992188f, 0.8f, 0.1f, 62.0f, -99999.992188f, -99999.992188f, -99999.992188f, 0.05f}, + {1.0f, 0.0f, -99999.99f, 0.75f, 0.25f, 30.0f, -99999.99f, -99999.99f, -99999.99f, -99999.99f, 800.0f, 600.0f, -99999.99f, 0.66f, 0.15f, 15.0f, -40.0f, 60.0f, 2.0f, 0.05f, 0.3f, 0.05f, -99999.99f, 0.8f, 0.1f, 62.0f, -99999.99f, -99999.99f, -99999.99f, 0.05f}, dCamPrmFlg_UNK001 | dCamPrmFlg_UNK004 | dCamPrmFlg_UNK400, }, #endif From 74e03b6ecb3235cc874a19f6a3e12044e4321ad8 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 7 May 2025 17:22:10 -0400 Subject: [PATCH 04/31] Document some more TU names --- include/d/actor/d_a_boko.h | 5 +++++ src/d/actor/d_a_agb.cpp | 8 ++++---- src/d/actor/d_a_boko.cpp | 2 +- src/d/actor/d_a_bpw.cpp | 8 ++++---- src/d/actor/d_a_fganon.cpp | 8 ++++---- src/d/actor/d_a_mo2.cpp | 8 ++++---- src/d/actor/d_a_npc_ji1.cpp | 8 ++++---- src/d/actor/d_a_player.cpp | 8 ++++---- src/d/d_com_inf_game.cpp | 8 ++++---- src/d/d_com_lib_game.cpp | 8 ++++---- 10 files changed, 38 insertions(+), 33 deletions(-) diff --git a/include/d/actor/d_a_boko.h b/include/d/actor/d_a_boko.h index bd76f956b..b4754b17a 100644 --- a/include/d/actor/d_a_boko.h +++ b/include/d/actor/d_a_boko.h @@ -117,6 +117,11 @@ public: /* 0x8AC */ ProcFunc_t mCurrentProc; }; +class daBoko_HIO_c { +public: + // Size 1 in retail, size 0x14 in debug. +}; + class daBoko_HIO_c0 { public: static const s16 throw_timer; diff --git a/src/d/actor/d_a_agb.cpp b/src/d/actor/d_a_agb.cpp index 2e7cbf31c..9d4574805 100644 --- a/src/d/actor/d_a_agb.cpp +++ b/src/d/actor/d_a_agb.cpp @@ -1,7 +1,7 @@ -// -// Generated by dtk -// Translation Unit: d_a_agb.cpp -// +/** + * d_a_agb.cpp + * Tingle Tuner Cursor + */ #include "d/actor/d_a_agb.h" #include "d/res/res_agb.h" diff --git a/src/d/actor/d_a_boko.cpp b/src/d/actor/d_a_boko.cpp index 1dffd3b37..bb43491b1 100644 --- a/src/d/actor/d_a_boko.cpp +++ b/src/d/actor/d_a_boko.cpp @@ -17,7 +17,7 @@ dBgS_ObjLinChk daBoko_c::m_line_check; const s16 daBoko_HIO_c0::throw_timer = 2; const f32 daBoko_HIO_c0::throw_speed = 70.0f; -static u8 l_HIO; +static daBoko_HIO_c l_HIO; /* 000000EC-0000017C .text keDraw__8daBoko_cFv */ void daBoko_c::keDraw() { diff --git a/src/d/actor/d_a_bpw.cpp b/src/d/actor/d_a_bpw.cpp index 71e280859..db051b80a 100644 --- a/src/d/actor/d_a_bpw.cpp +++ b/src/d/actor/d_a_bpw.cpp @@ -1,7 +1,7 @@ -// -// Generated by dtk -// Translation Unit: d_a_bpw.cpp -// +/** + * d_a_bpw.cpp + * Boss - Jalhalla + */ #include "d/actor/d_a_bpw.h" #include "d/d_procname.h" diff --git a/src/d/actor/d_a_fganon.cpp b/src/d/actor/d_a_fganon.cpp index 04c948f34..9e1721971 100644 --- a/src/d/actor/d_a_fganon.cpp +++ b/src/d/actor/d_a_fganon.cpp @@ -1,7 +1,7 @@ -// -// Generated by dtk -// Translation Unit: d_a_fganon.cpp -// +/** + * d_a_fganon.cpp + * Enemy - Phantom Ganon + */ #include "d/actor/d_a_fganon.h" #include "d/d_procname.h" diff --git a/src/d/actor/d_a_mo2.cpp b/src/d/actor/d_a_mo2.cpp index e39d1e41d..0cc8cec53 100644 --- a/src/d/actor/d_a_mo2.cpp +++ b/src/d/actor/d_a_mo2.cpp @@ -1,7 +1,7 @@ -// -// Generated by dtk -// Translation Unit: d_a_mo2.cpp -// +/** + * d_a_mo2.cpp + * Enemy - Moblin + */ #include "d/actor/d_a_mo2.h" #include "d/d_procname.h" diff --git a/src/d/actor/d_a_npc_ji1.cpp b/src/d/actor/d_a_npc_ji1.cpp index 10b9f223e..831fcc493 100644 --- a/src/d/actor/d_a_npc_ji1.cpp +++ b/src/d/actor/d_a_npc_ji1.cpp @@ -1,7 +1,7 @@ -// -// Generated by dtk -// Translation Unit: d_a_npc_ji1.cpp -// +/** + * d_a_npc_ji1.cpp + * NPC - Orca + */ #include "d/actor/d_a_npc_ji1.h" #include "d/actor/d_a_player.h" diff --git a/src/d/actor/d_a_player.cpp b/src/d/actor/d_a_player.cpp index 79a3312e0..b1084f1ea 100644 --- a/src/d/actor/d_a_player.cpp +++ b/src/d/actor/d_a_player.cpp @@ -1,7 +1,7 @@ -// -// Generated by dtk -// Translation Unit: d_a_player.cpp -// +/** + * d_a_player.cpp + * Player - Base Player Class + */ #include "dolphin/types.h" #include "d/actor/d_a_player.h" diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 645346ace..301535b54 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -1,7 +1,7 @@ -// -// Generated by dtk -// Translation Unit: d_com_inf_game.cpp -// +/** + * d_com_inf_game.cpp + * Game - Shared Runtime Data ("Common Info Game") + */ #include "d/d_com_inf_game.h" #include "JSystem/JUtility/JUTAssert.h" diff --git a/src/d/d_com_lib_game.cpp b/src/d/d_com_lib_game.cpp index 15af31b0d..a663262dd 100644 --- a/src/d/d_com_lib_game.cpp +++ b/src/d/d_com_lib_game.cpp @@ -1,7 +1,7 @@ -// -// Generated by dtk -// Translation Unit: d_com_lib_game.cpp -// +/** + * d_com_lib_game.cpp + * Game - Shared Library ("Common Library Game") + */ #include "d/d_com_lib_game.h" #include "SSystem/SComponent/c_phase.h" From 68cb5330e9c9fde07153066ff050098d9bf7e7f9 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 7 May 2025 17:48:29 -0400 Subject: [PATCH 05/31] Update to objdiff v3 beta 6 --- configure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.py b/configure.py index 774d0de5f..74fc276a2 100755 --- a/configure.py +++ b/configure.py @@ -152,7 +152,7 @@ if args.no_asm: config.binutils_tag = "2.42-1" config.compilers_tag = "20240706" config.dtk_tag = "v1.4.1" -config.objdiff_tag = "v3.0.0-beta.5" +config.objdiff_tag = "v3.0.0-beta.6" config.sjiswrap_tag = "v1.2.0" config.wibo_tag = "0.6.11" From 224b83ed8ca3d5305d7cbcbff902b5562d8267a1 Mon Sep 17 00:00:00 2001 From: 123456789758 <205478182+123456789758@users.noreply.github.com> Date: Wed, 7 May 2025 19:08:04 -0400 Subject: [PATCH 06/31] d_a_player_main - 96% matching (#750) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: ‎ ‎ ‎ <‎ ‎ ‎> --- include/d/actor/d_a_player.h | 6 + include/d/actor/d_a_player_HIO.h | 3 +- include/d/actor/d_a_player_main.h | 6 +- include/d/actor/d_a_ship.h | 6 +- include/d/d_particle.h | 7 +- include/d/d_stage.h | 2 + include/f_op/f_op_actor_mng.h | 3 + src/d/actor/d_a_player_HIO_data.inc | 2 +- src/d/actor/d_a_player_bow.inc | 14 +- src/d/actor/d_a_player_crawl.inc | 327 ++- src/d/actor/d_a_player_hammer.inc | 221 +- src/d/actor/d_a_player_main.cpp | 3588 +++++++++++++++++++++++++-- 12 files changed, 3880 insertions(+), 305 deletions(-) diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index c6a9fe451..b19f27d6e 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -28,6 +28,7 @@ STATIC_ASSERT(sizeof(daPy_mtxFollowEcallBack_c) == 0x0C); class daPy_demo_c { public: enum { + DEMO_UNK00_e = 0x00, DEMO_UNK01_e = 0x01, DEMO_UNK02_e = 0x02, DEMO_UNK03_e = 0x03, @@ -37,6 +38,7 @@ public: DEMO_UNK08_e = 0x08, DEMO_UNK09_e = 0x09, DEMO_UNK0A_e = 0x0A, + DEMO_UNK0E_e = 0x0E, DEMO_UNK0F_e = 0x0F, DEMO_UNK10_e = 0x10, DEMO_UNK11_e = 0x11, @@ -51,8 +53,10 @@ public: DEMO_UNK1F_e = 0x1F, DEMO_UNK22_e = 0x22, DEMO_UNK25_e = 0x25, + DEMO_UNK27_e = 0x27, DEMO_UNK2A_e = 0x2A, DEMO_UNK2B_e = 0x2B, + DEMO_UNK2C_e = 0x2C, DEMO_UNK2F_e = 0x2F, DEMO_UNK33_e = 0x33, DEMO_UNK35_e = 0x35, @@ -73,6 +77,7 @@ public: void setDemoMode(u32 mode) { mDemoMode = mode; } u32 getDemoMode() const { return mDemoMode; } int getParam1() const { return mParam1; } + s16 getTimer() const { return mTimer; } void setTimer(s16 time) { mTimer = time; } void decTimer() { mTimer--; } void setOriginalDemoType() { setDemoType(3); } @@ -153,6 +158,7 @@ public: daPyFlg1_FOREST_WATER_USE = 0x00020000, daPyFlg1_UNK40000 = 0x00040000, daPyFlg1_WATER_DROP = 0x00080000, + daPyFlg1_UNK100000 = 0x00100000, daPyFlg1_UNK200000 = 0x00200000, daPyFlg1_UNK800000 = 0x00800000, daPyFlg1_UNK1000000 = 0x01000000, diff --git a/include/d/actor/d_a_player_HIO.h b/include/d/actor/d_a_player_HIO.h index 203cfd394..dd8da3037 100644 --- a/include/d/actor/d_a_player_HIO.h +++ b/include/d/actor/d_a_player_HIO.h @@ -391,7 +391,8 @@ public: class daPy_HIO_cutTurnR_c1 { public: - /* 0x00 */ s16 field_0x0; + /* 0x00 */ u8 field_0x0; + /* 0x01 */ u8 field_0x1; /* 0x02 */ s16 field_0x2; /* 0x04 */ s16 field_0x4; /* 0x06 */ s16 field_0x6; diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 781eeb303..11f4c9030 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -949,7 +949,7 @@ public: BOOL checkUpperReadyAnime() const; BOOL checkUpperReadyThrowAnime() const; BOOL checkNoCollisionCorret(); - void setDrawHandModel(); + s32 setDrawHandModel(); void entryDLSetLight(J3DModel*, u32); void updateDLSetLight(J3DModel*, u32); void hideHatAndBackle(J3DMaterial*); @@ -1191,7 +1191,7 @@ public: void setSeAnime(daPy_anmHeap_c const*, J3DFrameCtrl*); void initSeAnime(); void resetSeAnime(); - void setMoveAnime(f32, f32, f32, daPy_ANM, daPy_ANM, int, f32); + int setMoveAnime(f32, f32, f32, daPy_ANM, daPy_ANM, int, f32); BOOL setSingleMoveAnime(daPy_ANM, f32, f32, s16, f32); BOOL setActAnimeUpper(u16, daPy_UPPER, f32, f32, s16, f32); BOOL resetActAnimeUpper(daPy_UPPER, f32); @@ -1403,7 +1403,7 @@ public: f32 getCrawlMoveAnmSpeed(); f32 getCrawlMoveSpeed(); void setCrawlMoveDirectionArrow(); - void changeCrawlAutoMoveProc(cXyz*); + BOOL changeCrawlAutoMoveProc(cXyz*); int getCrawlMoveVec(cXyz*, cXyz*, cXyz*); void crawlBgCheck(cXyz*, cXyz*); BOOL checkCrawlSideWall(cXyz*, cXyz*, cXyz*, cXyz*, s16*, s16*); diff --git a/include/d/actor/d_a_ship.h b/include/d/actor/d_a_ship.h index 4fb2a3aae..f51d099d5 100644 --- a/include/d/actor/d_a_ship.h +++ b/include/d/actor/d_a_ship.h @@ -95,7 +95,9 @@ public: void setGetOffSecond() { mNextMode = MODE_GET_OFF_SECOND_e; } void setCannon() { mNextMode = MODE_CANNON_e; } void setCrane() { mNextMode = MODE_CRANE_e; } + void setStartModeWarp() { mNextMode = MODE_START_MODE_WARP_e; } void setTactWarp() { mNextMode = MODE_TACT_WARP_e; } + void setStartModeThrow() { mNextMode = MODE_START_MODE_THROW_e; } int getTactWarpPosNum() const { return mTactWarpPosNum; } void setTactWarpPosNum(int num) { mTactWarpPosNum = num; } @@ -150,15 +152,13 @@ public: void onFantomGanonBattle() {} //TODO: Is this right? void onLinkSit() { onStateFlg(daSFLG_UNK4000000_e); } - void onSceneChange() {} + void onSceneChange() { onStateFlg(daSFLG_UNK20000000_e); } void onShortHitFlg() {} void onStateFlg(daSHIP_SFLG flag) { mStateFlag |= flag; } void onTornadoFlg(u32 tornadoID) { mTornadoID = tornadoID; } void onWhirlFlg(u32, s16) {} void onWhirlFlgDirect(u32, s16) {} void setAtnPos(const cXyz*) {} - void setStartModeThrow() {} - void setStartModeWarp() {} BOOL bodyJointCallBack(int); BOOL cannonJointCallBack(int); diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 48246d3dc..8f58f71e6 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -313,13 +313,16 @@ public: void getAlpha() {} void remove() {} void setAlpha(u8) {} - void setPosArray(cXyz*, s16) {} + void setPosArray(cXyz* param_1, s16 param_2) { + field_0x8 = param_1; + field_0x6 = param_2; + } public: /* 0x04 */ u8 field_0x4; /* 0x05 */ u8 field_0x5; /* 0x06 */ u16 field_0x6; - /* 0x08 */ u8 field_0x8[0xC - 0x08]; + /* 0x08 */ cXyz* field_0x8; /* 0x0C */ JPABaseEmitter* mpBaseEmitter; }; // Size: 0x10 diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 428f72e97..c40821c5a 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -1,6 +1,7 @@ #ifndef D_D_STAGE_H #define D_D_STAGE_H +#include "SSystem/SComponent/c_bg_s_poly_info.h" #include "SSystem/SComponent/c_lib.h" #include "SSystem/SComponent/c_sxyz.h" #include "SSystem/SComponent/c_xyz.h" @@ -1115,6 +1116,7 @@ inline f32 dStage_FileList_dt_SeaLevel(dStage_FileList_dt_c* i_fili) { } bool dStage_chkPlayerId(int playerId, int room_no); +int dStage_changeSceneExitId(cBgS_PolyInfo& i_poly, f32 i_speed, u32 i_mode, s8 i_roomNo); int dStage_changeScene(int i_exitId, f32 speed, u32 mode, s8 room_no); void dStage_restartRoom(u32 roomParam, u32 mode); void dStage_turnRestart(); diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index 6a77a4ddd..ac561088d 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -540,6 +540,9 @@ s32 fopAcM_rollPlayerCrash(fopAc_ac_c* i_this, f32 distAdjust, u32 flag); s32 fopAcM_checkCullingBox(Mtx, f32, f32, f32, f32, f32, f32); s32 fopAcM_cullingCheck(fopAc_ac_c*); s32 fopAcM_orderTalkEvent(fopAc_ac_c*, fopAc_ac_c*); +s32 fopAcM_orderTalkXBtnEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner); +s32 fopAcM_orderTalkYBtnEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner); +s32 fopAcM_orderTalkZBtnEvent(fopAc_ac_c* i_this, fopAc_ac_c* i_partner); s32 fopAcM_orderZHintEvent(fopAc_ac_c*, fopAc_ac_c*); s32 fopAcM_orderSpeakEvent(fopAc_ac_c* i_actor); s32 fopAcM_orderDoorEvent(fopAc_ac_c*, fopAc_ac_c*); diff --git a/src/d/actor/d_a_player_HIO_data.inc b/src/d/actor/d_a_player_HIO_data.inc index d326a6413..0e1143d60 100644 --- a/src/d/actor/d_a_player_HIO_data.inc +++ b/src/d/actor/d_a_player_HIO_data.inc @@ -71,7 +71,7 @@ const daPy_HIO_cutTurn_c1 daPy_HIO_cutTurn_c0::m = { }; const daPy_HIO_cutTurnR_c1 daPy_HIO_cutTurnR_c0::m = { - 0, 4, 9, 27379, 1748, 0.8f, 1.0f, 3.0f, 0.8f, 3.0f, 0.8f, 3.0f, 0.95f, + 0, 0, 4, 9, 27379, 1748, 0.8f, 1.0f, 3.0f, 0.8f, 3.0f, 0.8f, 3.0f, 0.95f, }; const daPy_HIO_cutRoll_c1 daPy_HIO_cutRoll_c0::m = { diff --git a/src/d/actor/d_a_player_bow.inc b/src/d/actor/d_a_player_bow.inc index d009cd601..f54d366d1 100644 --- a/src/d/actor/d_a_player_bow.inc +++ b/src/d/actor/d_a_player_bow.inc @@ -66,7 +66,19 @@ BOOL daPy_lk_c::checkBowAnime() const { /* 8014A080-8014A180 .text makeArrow__9daPy_lk_cFv */ void daPy_lk_c::makeArrow() { - /* Nonmatching */ + /* Nonmatching - missing "cntlzw" instruction, "getItemPartner" */ + s32 uVar1 = (0x44 - mDemo.getDemoMode()) >> 5 & 0xff; + if (((uVar1 == 0) && (dComIfGs_getArrowNum() != 0)) || + ((uVar1 != 0 && ((((fopAc_ac_c*)dComIfGp_event_getItemPartner() != 0 && + (fopAcM_GetName(dComIfGp_event_getPt1()) == PROC_NPC_SO)) && + (0 < 10 - (dComIfGp_event_getPt1()->actor_type))))))) + { + fopAc_ac_c* arrow_p = (fopAc_ac_c*)fopAcM_fastCreate(PROC_ARROW, 0, ¤t.pos, + current.roomNo, NULL, NULL, -1, NULL); + mActorKeepEquip.setData(arrow_p); + } + m355C = 0; + return; } /* 8014A180-8014A1CC .text deleteArrow__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_crawl.inc b/src/d/actor/d_a_player_crawl.inc index b544d82ae..7e886120c 100644 --- a/src/d/actor/d_a_player_crawl.inc +++ b/src/d/actor/d_a_player_crawl.inc @@ -86,8 +86,73 @@ void daPy_lk_c::setCrawlMoveDirectionArrow() { } /* 801389D0-80138D50 .text changeCrawlAutoMoveProc__9daPy_lk_cFP4cXyz */ -void daPy_lk_c::changeCrawlAutoMoveProc(cXyz*) { - /* Nonmatching */ +BOOL daPy_lk_c::changeCrawlAutoMoveProc(cXyz* param_1) { + cXyz sp70; + cXyz sp64; + cXyz sp58; + cXyz sp4C; + cXyz sp40; + cXyz sp34; + cXyz sp28; + f32 spC; + s16 spA; + s16 sp8; + f32 temp_f31 = cM_ssin(current.angle.y); + f32 temp_f30 = cM_scos(current.angle.y); + f32 temp_f29 = cM_ssin(shape_angle.y); + f32 temp_f28 = cM_scos(shape_angle.y); + int var_r29 = 0; + + sp70.x = param_1->x + (75.0f * temp_f31); + sp70.y = param_1->y; + sp70.z = param_1->z + (75.0f * temp_f30); + mLinkLinChk.Set(param_1, &sp70, (fopAc_ac_c*)this); + if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + sp4C.x = sp70.x + (50.0f * temp_f30); + sp4C.y = sp70.y; + sp4C.z = sp70.z - (50.0f * temp_f31); + + if (checkCrawlSideWall(&sp70, &sp4C, &sp34, &sp28, &spA, &sp8)) { + var_r29 |= 1; + } else { + return false; + } + } + sp4C.x = param_1->x + (50.0f * temp_f28); + sp4C.y = param_1->y; + sp4C.z = param_1->z - (50.0f * temp_f29); + + sp40 = (*param_1 * 2.0f) - sp4C; + mLinkLinChk.Set(param_1, &sp4C, (fopAc_ac_c*)this); + if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + var_r29 |= 8; + sp58.x = sp40.x + (75.0f * temp_f29); + sp58.y = sp40.y; + sp58.z = sp40.z + (75.0f * temp_f28); + if (!checkCrawlSideWall(&sp40, &sp58, &sp34, &sp28, &spA, &sp8)) { + return false; + } + } else { + var_r29 |= 4; + sp58.x = sp4C.x - (75.0f * temp_f29); + sp58.y = sp4C.y; + sp58.z = sp4C.z - (75.0f * temp_f28); + if (!checkCrawlSideWall(&sp4C, &sp58, &sp34, &sp28, &spA, &sp8)) { + return false; + } + mLinkLinChk.Set(param_1, &sp40, (fopAc_ac_c*)this); + if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + var_r29 |= 8; + } + } + if (cM3d_Len2dSqPntAndSegLine(0.5f * (sp34.x + sp28.x), 0.5f * (sp34.z + sp28.z), sp70.x, + sp70.z, param_1->x - (75.0f * temp_f31), + param_1->z - (75.0f * temp_f30), &sp64.x, &sp64.z, &spC)) + { + sp64.y = current.pos.y; + return procCrawlAutoMove_init(var_r29, &sp64); + } + return false; } /* 80138D50-80138F28 .text getCrawlMoveVec__9daPy_lk_cFP4cXyzP4cXyzP4cXyz */ @@ -96,7 +161,7 @@ int daPy_lk_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2) { if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); int iVar4 = dComIfG_Bgsp()->GetSpecialCode(mLinkLinChk); - float fVar1 = triPla->GetNP()->y; + f32 fVar1 = triPla->GetNP()->y; bool bVar2; if (!((fVar1 >= 0.5f) || (fVar1 < -0.8f))) { bVar2 = true; @@ -105,10 +170,10 @@ int daPy_lk_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2) { } if (bVar2) { cXyz local_3c = (*param_1 - mLinkLinChk.GetCross()); - float dVar7 = local_3c.absXZ(); - param_2->x = (float)(-dVar7 * triPla->GetNP()->x); + f32 dVar7 = local_3c.absXZ(); + param_2->x = -dVar7 * triPla->GetNP()->x; param_2->y = local_3c.y; - param_2->z = (float)(-dVar7 * triPla->GetNP()->z); + param_2->z = -dVar7 * triPla->GetNP()->z; return true; } else if ((iVar4 == 1) || (fVar1 < 0.643832f && (iVar4 == 2))) { *param_2 = (*param_1 - mLinkLinChk.GetCross()); @@ -126,9 +191,9 @@ void daPy_lk_c::crawlBgCheck(cXyz* param_0, cXyz* param_1) { cXyz cStack_44; cXyz cStack_38; - cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_offset, &cStack_50); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_offset, &cStack_50); iVar1 = getCrawlMoveVec(&cStack_50, param_0, &cStack_44); - cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &cStack_50); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &cStack_50); iVar2 = getCrawlMoveVec(&cStack_50, param_1, &cStack_38); if ((iVar1 != 0) && (iVar2 != 0)) { if (cStack_44.abs2() > cStack_38.abs()) { @@ -174,7 +239,35 @@ BOOL daPy_lk_c::checkCrawlSideWall(cXyz* param_1, cXyz* param_2, cXyz* param_3, /* 801392BC-80139424 .text setDoStatusCrawl__9daPy_lk_cFv */ void daPy_lk_c::setDoStatusCrawl() { - /* Nonmatching */ + dComIfGp_setRStatus(dActStts_CROUCH_e); + if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x80)) { + dComIfGp_setAStatus(dActStts_RETURN_e); + if (checkSubjectEnd(1) || (m35D0 > current.pos.y)) { + dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK2000_e); + } else { + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK2000_e); + } + } else if (dCam_getBody()->ChangeModeOK(4)) { + if (m35D0 <= current.pos.y) { + onResetFlg0(daPyRFlg0_UNK4000000); + if (((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000))) && + (!dComIfGp_event_runCheck())) + { + setSubjectMode(); + } + } + } + if ((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x80)) && + ((mCurProc != daPyProc_CRAWL_MOVE_e || (mProcVar0.m3570 == 0)))) + { + setBodyAngleToCamera(); + if (mBodyAngle.x > 0) { + mBodyAngle.x = 0; + } + } else { + mBodyAngle.x = 0; + } + return; } /* 80139424-801394F0 .text procCrawlStart_init__9daPy_lk_cFv */ @@ -204,9 +297,9 @@ BOOL daPy_lk_c::procCrawlStart() { cXyz local_20(l_crawl_front_offset.x, l_crawl_front_offset.y, l_crawl_front_offset.z * m35E4); cXyz afStack_2c; cXyz cStack_38; - cMtx_multVec(mpCLModel->getBaseTRMtx(), &local_20, &afStack_2c); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &local_20, &afStack_2c); local_20.y = 50.0f; - cMtx_multVec(mpCLModel->getBaseTRMtx(), &local_20, &cStack_38); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &local_20, &cStack_38); crawlBgCheck(&cStack_38, &cStack_38); if ((!spActionButton()) || (m35D0 > 15.0f + current.pos.y)) { procCrawlEnd_init(0, shape_angle.x, shape_angle.z); @@ -261,7 +354,7 @@ BOOL daPy_lk_c::procCrawlMove_init(s16 param_0, s16 param_1) { dVar4 *= -1.0f; } current.angle.y = shape_angle.y; - setSingleMoveAnime(ANM_LIEFORWARD, (float)dVar4, 0.0f, -1, daPy_HIO_crouch_c0::m.field_0x38); + setSingleMoveAnime(ANM_LIEFORWARD, dVar4, 0.0f, -1, daPy_HIO_crouch_c0::m.field_0x38); } else { onResetFlg0(daPyRFlg0_UNK1000); } @@ -279,7 +372,177 @@ BOOL daPy_lk_c::procCrawlMove_init(s16 param_0, s16 param_1) { /* 80139878-8013A004 .text procCrawlMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrawlMove() { - /* Nonmatching */ + /* Nonmatching - cXyz */ + J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e]; + float fVar1; + short sVar3; + BOOL bVar4; + BOOL bVar5; + int iVar6; + int iVar7; + int iVar8; + int iVar9; + f32 dVar11; + cXyz aVStack_3c; + cXyz cStack_48; + cXyz VStack_54; + cXyz cStack_60; + cXyz cStack_6c; + cXyz cStack_d8; + + setDoStatusCrawl(); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_stand_up_offset, &cStack_48); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_up_offset, &aVStack_3c); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_up_offset, &VStack_54); + mDoMtx_multVecSR(mpCLModel->getBaseTRMtx(), &l_crawl_min_side_offset, &cStack_60); + iVar6 = checkNotCrawlStand(&cStack_48); + iVar7 = checkNotCrawlStand(&aVStack_3c); + iVar8 = checkNotCrawlStand(&VStack_54); + if (((((iVar6 != 0) || (iVar7 != 0)) || (iVar8 != 0)) || + ((checkNotCrawlStand(&aVStack_3c, &cStack_60) || + (checkNotCrawlStand(&VStack_54, &cStack_60))))) || + (checkNotCrawlStand(&cStack_48, &cStack_60))) + { + bVar5 = false; + onModeFlg(ModeFlg_04000000); + } else { + bVar5 = true; + offModeFlg(ModeFlg_04000000); + } + if (((bVar5 != false) && (!spActionButton())) || + ((getSlidePolygon() != NULL || (m35D0 > current.pos.y + 15.0f)))) + { + procCrawlEnd_init(1, shape_angle.x, shape_angle.z); + } else { + bVar4 = false; + dVar11 = getCrawlMoveAnmSpeed(); + if (frameCtrl.getRate() > 0.0f) { + frameCtrl.setRate(dVar11); + } else if (frameCtrl.getRate() < 0.0f) { + frameCtrl.setRate(-dVar11); + } else { + bVar4 = true; + } + if (((bVar4 == true) || (frameCtrl.checkPass(0.0f))) || (frameCtrl.checkPass(17.0f))) { + if (mStickDistance > 0.05f) { + if (getDirectionFromShapeAngle() != 1) { + frameCtrl.setRate(dVar11); + frameCtrl.setLoop(0); + } else { + frameCtrl.setRate(-dVar11); + frameCtrl.setLoop(frameCtrl.getEnd()); + } + initSeAnime(); + } else { + if (!bVar4) { + if (frameCtrl.checkPass(0.0f)) { + fVar1 = 0.0f; + } else { + fVar1 = 17.0f; + } + frameCtrl.setRate(0.0f); + frameCtrl.setFrame(fVar1); + ((mAnmRatioUnder[UNDER_MOVE0_e]).getAnmTransform())->setFrame(fVar1); + } + } + } + iVar9 = mProcVar0.m3570; + mProcVar0.m3570 = 0; + cXyz spC0; + cXyz spB4; + cXyz spA8; + cXyz sp9C; + cXyz sp90; + s16 sp16; + s16 sp14; + + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_side_offset, &spC0); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &cStack_6c); + + if (frameCtrl.getRate() >= 0.0f) { + sp90 = (aVStack_3c - cStack_6c) * 0.5f; + } else if (frameCtrl.getRate() < 0.0f) { + sp90 = (cStack_48 - cStack_6c) * 0.5f; + } + + spC0 += sp90; + cStack_6c += sp90; + spB4 = (cStack_6c * 2.0f) - spC0; + + if (((iVar9 == 0) && checkCrawlSideWall(&cStack_6c, &spC0, &spA8, &sp9C, &sp16, &sp14)) || + checkCrawlSideWall(&cStack_6c, &spB4, &sp9C, &spA8, &sp14, &sp16)) + { + mProcVar0.m3570 = 1; + mResetFlg0 = mResetFlg0 | 0x1000; + m370C = ((spA8 + sp9C) * 0.5f) - sp90; + m34D4 = sp16 + 0x4000; + } + + if (mProcVar0.m3570 != 0) { + if (frameCtrl.getRate()) { + cLib_addCalcAngleS(&shape_angle.y, m34D4, 5, 0x1000, 0x800); + current.angle.y = shape_angle.y; + } + + if (std::abs(current.pos.x - m370C.x) > 1.0f) { + cLib_addCalc(¤t.pos.x, m370C.x, 0.5f, 10.0f, 1.0f); + } + + if (std::abs(current.pos.z - m370C.z) > 1.0f) { + cLib_addCalc(¤t.pos.z, m370C.z, 0.5f, 10.0f, 1.0f); + } + } else { + if (((iVar9 != 0) && (iVar6 != 0)) && + ((iVar7 != 0 && + ((iVar8 != 0 && (iVar6 = changeCrawlAutoMoveProc(&cStack_6c), iVar6 != 0)))))) + { + return true; + } + if ((mStickDistance > 0.05f) && (frameCtrl.getRate() > 0.0f)) { + cXyz sp20; + cXyz sp2C; + cXyz sp38; + sVar3 = shape_angle.y; + + cLib_addCalcAngleS(&shape_angle.y, m34E8, daPy_HIO_crouch_c0::m.field_0x8, + daPy_HIO_crouch_c0::m.field_0xA, + daPy_HIO_crouch_c0::m.field_0xC); + + if (sVar3 != shape_angle.y) { + if ((s16)(sVar3 - shape_angle.y) > 0) { + cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_front_offset, &sp20); + cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_offset, &sp38); + } else { + cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_front_offset, &sp20); + cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_offset, &sp38); + } + + mGndChk.SetPos(&sp20); + sp2C.set(sp20.x - sp38.x, dComIfG_Bgsp()->GroundCross(&mGndChk) - sp38.y, + sp20.z - sp38.z); + + if (cLib_distanceAngleS((cM_atan2s(-sp2C.x, sp2C.absXZ())), shape_angle.x) > + 0x800) + { + shape_angle.y = sVar3; + } + current.angle.y = shape_angle.y; + } + } + } + dVar11 = getCrawlMoveSpeed(); + mVelocity = dVar11; + if (mVelocity < 0.0f) { + mVelocity *= -1.0f; + current.angle.y = shape_angle.y + 0x8000; + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_offset, &cStack_d8); + crawlBgCheck(&cStack_d8, &VStack_54); + } else { + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_offset, &cStack_d8); + crawlBgCheck(&cStack_d8, &aVStack_3c); + } + } + return true; } /* 8013A004-8013A0F0 .text procCrawlAutoMove_init__9daPy_lk_cFiP4cXyz */ @@ -432,8 +695,42 @@ BOOL daPy_lk_c::procCrawlAutoMove() { } /* 8013A630-8013A7C4 .text procCrawlEnd_init__9daPy_lk_cFiss */ -BOOL daPy_lk_c::procCrawlEnd_init(int, s16, s16) { - /* Nonmatching */ +BOOL daPy_lk_c::procCrawlEnd_init(int param_1, s16 param_2, s16 param_3) { + f32 fVar1; + J3DAnmTransform* pJVar2; + f32 dVar4; + J3DTransformInfo auStack_58; + + dVar4 = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + commonProcInit(daPyProc_CRAWL_END_e); + current.angle.y = shape_angle.y; + m34C2 = 1; + if (param_1 != 0) { + fVar1 = daPy_HIO_crouch_c0::m.field_0x4C; + } else { + fVar1 = -1.0f; + } + setSingleMoveAnime(ANM_LIE, daPy_HIO_crouch_c0::m.field_0x40, daPy_HIO_crouch_c0::m.field_0x44, + daPy_HIO_crouch_c0::m.field_0xE, fVar1); + if (param_1 == 0) { + if (daPy_HIO_crouch_c0::m.field_0x44 > dVar4) { + dVar4 = daPy_HIO_crouch_c0::m.field_0x44; + } else if (daPy_HIO_crouch_c0::m.field_0xE <= dVar4) { + dVar4 = (daPy_HIO_crouch_c0::m.field_0xE - 0.001f); + } + mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(dVar4); + mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame(dVar4); + } + pJVar2 = mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform(); + pJVar2->getTransform(0, &auStack_58); + m3700.x = auStack_58.mTranslate.x; + m3700.y = auStack_58.mTranslate.y; + m3700.z = auStack_58.mTranslate.z; + mVelocity = 0.0f; + shape_angle.x = param_2; + shape_angle.z = param_3; + m35A0 = 1.0f / (daPy_HIO_crouch_c0::m.field_0xE - daPy_HIO_crouch_c0::m.field_0x48); + return true; } /* 8013A7C4-8013A85C .text procCrawlEnd__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_hammer.inc b/src/d/actor/d_a_player_hammer.inc index c822c6bab..dba878f8d 100644 --- a/src/d/actor/d_a_player_hammer.inc +++ b/src/d/actor/d_a_player_hammer.inc @@ -13,6 +13,8 @@ #include "d/actor/d_a_player_main.h" #include "d/actor/d_a_player_HIO.h" +extern JGeometry::TVec3 l_hammer_splash_particle_scale; + /* 8015023C-80150324 .text setHammerModel__9daPy_lk_cFv */ void daPy_lk_c::setHammerModel() { J3DAnmTransform* bck = getItemAnimeResource(LKANM_BCK_HAMMERDAM); @@ -28,16 +30,145 @@ void daPy_lk_c::setHammerModel() { } /* 80150324-801508FC .text setHammerQuake__9daPy_lk_cFP13cBgS_PolyInfoPC4cXyzi */ -void daPy_lk_c::setHammerQuake(cBgS_PolyInfo*, const cXyz*, int) { - /* Nonmatching */ - static JGeometry::TVec3 smoke_kusa_particle_scale; - static JGeometry::TVec3 emitter_scale; - static JGeometry::TVec3 emitter_trans; +void daPy_lk_c::setHammerQuake(cBgS_PolyInfo* param_1, const cXyz* param_2, int param_3) { + static JGeometry::TVec3 smoke_kusa_particle_scale(2.0f, 2.0f, 2.0f); + static JGeometry::TVec3 emitter_scale(1.0f, 0.1f, 1.0f); + static JGeometry::TVec3 emitter_trans(0.0f, 10.0f, 0.0f); + float local_54; + BOOL bVar2; + int attrib_code; + int iVar6; + JPABaseEmitter* emitter; + f32 dVar9; + int iStack_58; + cXyz local_2c; + cXyz local_38; + + dComIfGp_getVibration().StartShock(6, -0x31, cXyz(0.0f, 1.0f, 0.0f)); + onResetFlg0(daPyRFlg0_HAMMER_QUAKE); + if (!checkNoResetFlg0(daPyFlg0_UNK10000000)) { + if (param_3 == -1) { + local_2c.set(mSwordTopPos.x, mSwordTopPos.y + 100.0f, mSwordTopPos.z); + mGndChk.SetPos(&local_2c); + dVar9 = dComIfG_Bgsp()->GroundCross(&mGndChk); + if (C_BG_MIN_HEIGHT != dVar9) { + iVar6 = dComIfG_Bgsp()->GetMtrlSndId(mGndChk); + } else { + iVar6 = mMtrlSndId; + } + } else { + iVar6 = param_3; + } + mDoAud_seStart(JA_SE_LK_HAMMER_HIT, &mSwordTopPos, iVar6, mReverb); + } + if ((param_1 != NULL) && (m355C == 0)) { + mDoMtx_stack_c::transS(param_2->x, param_2->y, param_2->z); + mDoMtx_stack_c::ZXYrotM(getGroundAngle(param_1, shape_angle.y), shape_angle.y, + getGroundAngle(param_1, shape_angle.y + -0x4000)); + mDoMtx_stack_c::transM(0.0f, 0.0f, -30.0f); + local_38.x = mDoMtx_stack_c::now[0][3]; + local_38.y = mDoMtx_stack_c::now[1][3]; + local_38.z = mDoMtx_stack_c::now[2][3]; + if ((!fopAcM_getWaterY(&local_38, &local_54)) || (local_54 < (5.0f + local_38.y))) { + emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0214, &local_38); + if (emitter != NULL) { + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, + emitter->mGlobalTranslation); + } + emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0215, &local_38); + if (emitter != NULL) { + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, + emitter->mGlobalTranslation); + } + emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0216, &local_38); + if (emitter != NULL) { + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, + emitter->mGlobalTranslation); + } + bVar2 = false; + } else { + bVar2 = true; + local_38.y = local_54; + mDoMtx_stack_c::transS(local_38.x, local_54, local_38.z); + mDoMtx_stack_c::YrotM(shape_angle.y); + } + if (bVar2) { + attrib_code = dBgS_Attr_WATER_e; + dComIfGp_particle_setP1(dPa_name::ID_COMMON_027C, &local_38); + dComIfGp_particle_setShipTail(dPa_name::ID_COMMON_003D, &local_38, NULL, NULL, 0xFF, + &dPa_control_c::mSingleRippleEcallBack); + } else { + attrib_code = dComIfG_Bgsp()->GetAttributeCode(*param_1); + } + emitter = dComIfGp_particle_setSimpleLand(attrib_code, &local_38, NULL, 1.0f, 1.0f, 1.0f, + &tevStr, &iStack_58, 0x1E); + if (emitter != NULL) { + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, + emitter->mGlobalTranslation); + if ((attrib_code == dBgS_Attr_WATER_e) || (attrib_code == dBgS_Attr_GRASS_e)) { + emitter->setRate(60.0f); + emitter->setSpread(1.0f); + if (attrib_code == dBgS_Attr_WATER_e) { + emitter->setDirectionalSpeed(10.0f); + emitter->setGlobalParticleScale(l_hammer_splash_particle_scale); + } else { + emitter->setDirectionalSpeed(40.0f); + emitter->setGlobalParticleScale(smoke_kusa_particle_scale); + } + } else { + emitter->setRate(45.0f); + emitter->setSpread(0.0f); + emitter->setLifeTime(0x28); + emitter->setEmitterScale(emitter_scale); + emitter->setEmitterTranslation(emitter_trans); + emitter->setAwayFromCenterSpeed(50.0f); + emitter->setGlobalParticleScale(smoke_kusa_particle_scale); + } + } + } + m355C = 1; + dKy_Sound_set(current.pos, 500, fopAcM_GetID(this), 10); + return; } /* 801508FC-80150B60 .text setHammerWaterSplash__9daPy_lk_cFv */ void daPy_lk_c::setHammerWaterSplash() { - /* Nonmatching */ + f32 local_50; + cXyz local_28; + + if ((mCurProc != daPyProc_HAMMER_FRONT_SWING_e) || + (m35EC <= mFrameCtrlUnder[UNDER_MOVE0_e].getRate())) + { + return; + } + if (m355C == 0) { + local_28 = m36C4 - mSwordTopPos; + local_28.normalize(); + local_28 = mSwordTopPos + (local_28 * 30.0f); + if ((fopAcM_getWaterY(&local_28, &local_50)) && (local_50 >= local_28.y + 5.0f)) { + local_28.y += 150.0f; + mGndChk.SetPos(&local_28); + if (!(local_50 < dComIfG_Bgsp()->GroundCross(&mGndChk) + 5.0f)) { + local_28.y = local_50; + dComIfGp_particle_setP1(dPa_name::ID_COMMON_027C, &local_28); + dComIfGp_particle_setShipTail(dPa_name::ID_COMMON_003D, &local_28, NULL, NULL, 0xFF, + &dPa_control_c::mSingleRippleEcallBack); + GXColor amb, dif; + dKy_get_seacolor(&amb, &dif); + JPABaseEmitter* emitter = dComIfGp_particle_setP1( + dPa_name::ID_COMMON_0023, &local_28, NULL, NULL, 0xFF, NULL, -1, &amb); + if (emitter != NULL) { + emitter->setRate(60.0f); + emitter->setSpread(1.0f); + emitter->setMaxFrame(1); + emitter->setDirectionalSpeed(10.0f); + emitter->setGlobalParticleScale(l_hammer_splash_particle_scale); + } + m355C = 1; + } + } + } + return; } /* 80150B60-80150C40 .text procHammerSideSwing_init__9daPy_lk_cFv */ @@ -191,7 +322,83 @@ BOOL daPy_lk_c::procHammerFrontSwing_init() { /* 801510DC-801513D4 .text procHammerFrontSwing__9daPy_lk_cFv */ BOOL daPy_lk_c::procHammerFrontSwing() { - /* Nonmatching */ + /* Nonmatching - regalloc */ + f32 fVar1; + f32 fVar2; + f32 fVar3; + f32 fVar4; + int iVar5; + int iVar6; + int iVar7; + f32 dVar8; + f32 dVar10; + cXyz local_58; + + m35EC = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + fVar1 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate(); + if (fVar1 < 0.01f) { + if (m34D0 == 0) { + procHammerFrontSwingEnd_init(); + } else { + m34D0--; + } + return true; + } + if ((m35EC > fVar1) && (changeCutReverseProc(ANM_CUTREL))) { + if (mCurProc == daPyProc_HAMMER_FRONT_SWING_e) { + local_58.set(mSwordTopPos.x, current.pos.y + 300.0f, mSwordTopPos.z); + mGndChk.SetPos(&local_58); + dVar8 = dComIfG_Bgsp()->GroundCross(&mGndChk); + local_58.y = dVar8; + if (dVar8 > mSwordTopPos.y) { + iVar5 = -1; + iVar7 = 0; + dVar8 = 300.0f; + dVar10 = C_BG_MIN_HEIGHT; + for (iVar6 = 0; iVar6 < mSwBlur.field_0x014; iVar6++, iVar7++) { + local_58.set(mSwBlur.field_0x034[iVar7].x, dVar8 + mSwBlur.field_0x034[iVar7].y, + mSwBlur.field_0x034[iVar7].z); + mGndChk.SetPos(&local_58); + local_58.y = dComIfG_Bgsp()->GroundCross(&mGndChk); + if ((dVar10 != local_58.y) && (mSwBlur.field_0x034[iVar7].y > local_58.y)) { + iVar5 = dComIfG_Bgsp()->GetMtrlSndId(mGndChk); + break; + } + } + fVar1 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate(); + fVar3 = (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - fVar1) - 0.1f * iVar6 * fVar1; + if ((iVar6 != 0) && (iVar6 < mSwBlur.field_0x014)) { + fVar2 = (&mSwBlur.field_0x034[0])[iVar6].y; + fVar4 = (&mSwBlur.field_0x028)[iVar6].y - fVar2; + if (std::abs(fVar4) > 1.0f) { + fVar3 = fVar3 + 0.1f * (1.0f - (local_58.y - fVar2) / fVar4) * fVar1; + } + } + if (fVar3 < 0.0f) { + fVar3 = 0.0f; + } + mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(fVar3); + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(0.0f); + m35EC = fVar3; + m34D0 = 10; + setHammerQuake(&mGndChk, &local_58, iVar5); + return true; + } + } else { + setHammerQuake(NULL, NULL, -1); + return true; + } + } + if (mpAttnActorLockOn != NULL) { + setShapeAngleToAtnActor(); + m34D4 = shape_angle.y; + } else { + cLib_addCalcAngleS(&shape_angle.y, m34D4, daPy_HIO_turn_c0::m.field_0x4, + daPy_HIO_turn_c0::m.field_0x0, daPy_HIO_turn_c0::m.field_0x2); + } + current.angle.y = shape_angle.y; + onResetFlg0(daPyRFlg0_UNK2); + return true; } /* 801513D4-80151450 .text procHammerFrontSwingEnd_init__9daPy_lk_cFv */ diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index a51dfa699..322f26275 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -23,6 +23,7 @@ #include "d/d_item_data.h" #include "d/d_item.h" #include "f_op/f_op_camera_mng.h" +#include "f_op/f_op_overlap_mng.h" #include "m_Do/m_Do_audio.h" #include "m_Do/m_Do_controller_pad.h" #include "m_Do/m_Do_mtx.h" @@ -46,135 +47,6 @@ JGeometry::TVec3 l_hammer_splash_particle_scale(0.67f, 0.67f, 0.67f); #include "d/actor/d_a_player_HIO_data.inc" -static void dummydatafunc(f32* temp, f64* temp2) { - // temporary hack to improve diffs until sdata2 offsets are figured out - *temp = 2.0f; - *temp = -1000000000.0f; - *temp = -1.0f; - *temp = 0.0f; - *temp = 0.08f; - *temp = 1.0f; - *temp = 12.0f; - *temp = 13.0f; - *temp = 150.0f; - *temp = 30.0f; - *temp = 0.65f; - *temp = 0.35f; - *temp = 32768.0f; - *temp = 16384.0f; - *temp = 10.0f; - *temp2 = 4503601774854144.0; - *temp2 = 4503599627370496.0; - *temp = 25.0f; - *temp = -0.05f; - *temp2 = 0.5; - *temp2 = 3.0; - *temp = 0.6f; - *temp = 0.01f; - *temp = 0.001f; - *temp = 15.0f; - *temp = 1.5f; - *temp = 3.1415927f; - *temp = 0.5f; - *temp = 0.3f; - *temp = 1.2f; - *temp = 0.4f; - *temp = 5.0f; - *temp = 0.1f; - *temp = 0.8f; - *temp = 60.0f; - *temp = 4.0f; - *temp = 0.25f; - *temp = 0.75f; - *temp = 16.0f; - *temp = 8.0f; - *temp = 18.0f; - *temp = 3.0f; - *temp = 0.2f; - *temp = 0.05f; - *temp = 45.0f; - *temp = 11.0f; - *temp = 17.5f; - *temp = 1000000000.0f; - OSReport("Adanmae"); - OSReport("d_a_player_dproc.inc"); - OSReport("0"); - OSReport("Halt"); - OSReport("Link"); - OSReport("DEFAULT_GETITEM"); - OSReport("GanonK"); - OSReport("GTower"); - OSReport("d_a_player_bow.inc"); - OSReport("d_a_player_hook.inc"); - OSReport("d_a_player_fan.inc"); - OSReport("d_a_player_hammer.inc"); - OSReport("Type"); - OSReport("Omori"); - OSReport("d_a_player_sword.inc"); - OSReport("M_DaiB"); - OSReport("Xboss2"); - OSReport("M_DragB"); - OSReport("Xboss0"); - OSReport("fall"); - OSReport("d_a_player_main.cpp"); - OSReport("(demo_mode < daPy_demo_c::DEMO_LAST_e) || (demo_mode == daPy_demo_c::DEMO_NEW_ANM0_e)"); - OSReport("Ojhous"); - OSReport("Orichh"); - OSReport("kinBOSS"); - OSReport("Xboss1"); - OSReport("ICE_FAILED"); - OSReport("pos"); - OSReport("angle"); - OSReport("prm0"); - OSReport("prm1"); - OSReport("stick"); - OSReport("face"); - OSReport("GanonM"); - OSReport("sea"); - OSReport("m_tex_anm_heap.m_buffer != 0"); - OSReport("m_texNoAnms != 0"); - OSReport("mat_anm != 0"); - OSReport("m_tex_scroll_heap.m_buffer != 0"); - OSReport("material_num == 2"); - OSReport("m_texMtxAnm != 0"); - OSReport("m_tex_eye_scroll[no] != 0"); - OSReport("tmtx != 0"); - OSReport("mtl->getMaterialAnm() != 0"); - OSReport("tmp_modelData != 0"); - OSReport("aura_p->getModel() != 0"); - OSReport("m_old_fdata != 0"); - OSReport("m_pbCalc[PART_UNDER_e] != 0"); - OSReport("m_pbCalc[PART_UPPER_e] != 0"); - OSReport("m_HIO != 0"); - OSReport("m_anm_heap_under[UNDER_MOVE0_e].m_buffer != 0"); - OSReport("m_sanm_buffer != 0"); - OSReport("m_item_bck_buffer != 0"); - OSReport("tmp_trans_bas != 0"); - OSReport("tmp_trans != 0"); - OSReport("tmp_tp != 0"); - OSReport("tmp_tk != 0"); - OSReport("*i_model != 0"); - OSReport("btk_anm != 0"); - OSReport("brk_anm != 0"); - OSReport("zoff_blend_cnt <= 4"); - OSReport("zoff_none_cnt <= 4"); - OSReport("zon_cnt <= 4"); - OSReport("zon_cnt == 4"); - OSReport("zoff_none_cnt == 4"); - OSReport("zoff_blend_cnt == 4"); - OSReport("dummy_data != 0"); - OSReport("Always"); - OSReport("tmp_tex != 0"); - OSReport("tmp_img != 0"); - OSReport("texture != 0"); - OSReport("textureName != 0"); - OSReport("linktexS3TC"); - OSReport("Pjavdou"); - OSReport("ShipD"); - OSReport("Siren"); - OSReport("data_size < l_sanm_buffer_size"); -} - cXyz l_debug_keep_pos; csXyz l_debug_current_angle; csXyz l_debug_shape_angle; @@ -384,10 +256,114 @@ static BOOL daPy_auraCallback(J3DNode* node, int calcTiming) { } /* 80103494-80103A88 .text jointBeforeCB__9daPy_lk_cFiP16J3DTransformInfoP10Quaternion */ -BOOL daPy_lk_c::jointBeforeCB(int jnt_no, J3DTransformInfo*, Quaternion*) { - /* Nonmatching */ +BOOL daPy_lk_c::jointBeforeCB(int jnt_no, J3DTransformInfo* param_2, Quaternion* param_3) { static Mtx root_mtx; static Quaternion norm_quat = {0.0f, 0.0f, 0.0f, 1.0f}; + Quaternion local_20; + Quaternion afStack_30; + + csXyz local_38(0, 0, 0); + if (jnt_no == 0xF) { + local_38.set(m3566, m3568, m3564); + } else if (jnt_no == 0x1F) { + m34C6 = 2; + m3668.mScale = param_2->mScale; + m3668.mRotation = param_2->mRotation; + m3668.mTranslate = param_2->mTranslate; + param_2->mTranslate.x = param_2->mTranslate.x - mFootData[1].field_0x030; + } else if (jnt_no == 0x24) { + m34C6 = 2; + m3668.mScale = param_2->mScale; + m3668.mRotation = param_2->mRotation; + m3668.mTranslate = param_2->mTranslate; + param_2->mTranslate.x = param_2->mTranslate.x - mFootData[0].field_0x030; + } else if (jnt_no == 0x10) { + local_38.y = m3516; + local_38.z = m351A; + } else if (jnt_no == 0x11) { + local_38.y = m3518; + local_38.z = m351A; + } else if (jnt_no == 2) { + local_38.set(-mBodyAngle.z, mBodyAngle.y, mBodyAngle.x); + m34C6 = 2; + m3668.mScale = param_2->mScale; + m3668.mRotation = param_2->mRotation; + m3668.mTranslate = param_2->mTranslate; + param_2->mTranslate.y = param_2->mTranslate.y + m35D8; + } else if (jnt_no == 0) { + local_38.x = m34F2; + local_38.z = m34F4; + } else if ((((jnt_no == 10) || (jnt_no == 0xB)) && + (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e))) && + (m_old_fdata->getOldFrameFlg() != false)) + { + if (dComIfGp_getShipActor() != NULL) { + if (!fpcM_IsCreating(fopAcM_GetID(dComIfGp_getShipActor()))) { + if (!checkShipNotNormalMode()) { + setShipRideArmAngle(jnt_no, param_2); + param_2->mTranslate.x = 0.0f; + param_2->mTranslate.y = 0.0f; + param_2->mTranslate.z = 0.0f; + JMAQuatLerp(m_old_fdata->getOldFrameQuaternion(jnt_no), &norm_quat, + (1.0f - m_old_fdata->getOldFrameRate()), param_3); + } + } + } + } + if (!checkResetFlg0(daPyRFlg0_UNK800000)) { + if (jnt_no == 0x1A) { + JMAEulerToQuat(0, m34F8, m3528 + (m34F6 + -0x8000) + m350E, param_3); + } else if (jnt_no == 0x1B) { + JMAEulerToQuat(0, m34FC, m34FA + m3510, param_3); + } else if (jnt_no == 0x1C) { + JMAEulerToQuat(0, m3500, m34FE + m3512, param_3); + } + } + if (jnt_no == 0) { + if (m34C2 == 1) { + param_2->mTranslate.x = 0.0f; + param_2->mTranslate.z = 0.0f; + } else if (m34C2 == 5) { + param_2->mTranslate.x = 0.0f; + param_2->mTranslate.y = m35E0; + param_2->mTranslate.z = 0.0f; + } + } + if ((jnt_no == 0x1E) && ((m34E0 != 0 || (m34E4 != 0)))) { + local_38.y = m34E4; + local_38.z = m34E0; + } + if ((local_38.x != 0) || (local_38.y != 0) || (local_38.z != 0)) { + m34C6 = m34C6 | 1; + m3658 = *param_3; + if ((local_38.x != 0) || (local_38.y != 0)) { + local_20 = *param_3; + JMAEulerToQuat(local_38.x, local_38.y, 0, &afStack_30); + mDoMtx_QuatConcat(&local_20, &afStack_30, param_3); + } + if (local_38.z != 0) { + local_20 = *param_3; + JMAEulerToQuat(0, 0, local_38.z, &afStack_30); + mDoMtx_QuatConcat(&local_20, &afStack_30, param_3); + } + } + if (((checkUpperGuardAnime()) && (mCurProc != daPyProc_BACK_JUMP_e)) || + (((checkGrabAnime()) || (m_anm_heap_upper[UPPER_MOVE0_e].mIdx == LKANM_BCK_ATNBOKO)) || + (m_anm_heap_upper[UPPER_MOVE0_e].mIdx == LKANM_BCK_ATNHAM)) || + (checkUpperReadyThrowAnime())) + { + if (jnt_no == 0) { + m3648 = *param_3; + } else if (jnt_no == 1) { + mDoMtx_copy(J3DSys::mCurrentMtx, root_mtx); + mDoMtx_quat(mDoMtx_stack_c::now, &m3648); + mDoMtx_stack_c::inverse(); + mDoMtx_concat(J3DSys::mCurrentMtx, mDoMtx_stack_c::get(), J3DSys::mCurrentMtx); + } else if (jnt_no == 0x1D) { + mDoMtx_copy(root_mtx, J3DSys::mCurrentMtx); + } + } + return true; } /* 80103A88-80103AAC .text daPy_jointBeforeCallback__FUlUsP16J3DTransformInfoP10Quaternion */ @@ -433,7 +409,7 @@ BOOL daPy_lk_c::jointCB0(int param_1) { if (checkEquipAnime()) { if (!checkModeFlg(ModeFlg_00000001)) { - if ((param_1 == 1) || (param_1 == 0xd)) { + if ((param_1 == 1) || (param_1 == 0xD)) { m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); } else if ((param_1 == 4) || (param_1 == 0x1c)) { m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); @@ -443,26 +419,26 @@ BOOL daPy_lk_c::jointCB0(int param_1) { (checkUpperAnime(LKANM_BCK_ROPETHROW)) || ((mCurProc != daPyProc_GRAB_WAIT_e) && checkGrabAnime())) { - if (param_1 == 0xf) { + if (param_1 == 0xF) { m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); - } else if (param_1 == 0x1c) { + } else if (param_1 == 0x1C) { m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); } } else if ((dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) && (!checkShipNotNormalMode())) { - if (param_1 == 0xf) { + if (param_1 == 0xF) { m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); - } else if (param_1 == 0x1c) { + } else if (param_1 == 0x1C) { m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); } } else if (checkUpperGuardAnime()) { - if ((param_1 == 0) || (param_1 == 0xd)) { + if ((param_1 == 0) || (param_1 == 0xD)) { if (param_1 == 0) { guard_rate = m_pbCalc[PART_UPPER_e]->getRatio(2); } m_pbCalc[PART_UPPER_e]->setRatio(2, 1.0f); - } else if ((param_1 == 4) || (param_1 == 0x1c)) { + } else if ((param_1 == 4) || (param_1 == 0x1C)) { m_pbCalc[PART_UPPER_e]->setRatio(2, guard_rate); } } else if ((dComIfGp_checkPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e)) && @@ -473,7 +449,7 @@ BOOL daPy_lk_c::jointCB0(int param_1) { } else if (param_1 == 8) { m_pbCalc[PART_UPPER_e]->setRatio(1, 1.0f); m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); - } else if (param_1 == 0xc) { + } else if (param_1 == 0xC) { m_pbCalc[PART_UPPER_e]->setRatio(1, 0.0f); } } @@ -1427,8 +1403,104 @@ BOOL daPy_lk_c::checkNoCollisionCorret() { } /* 801067D8-80106BD0 .text setDrawHandModel__9daPy_lk_cFv */ -void daPy_lk_c::setDrawHandModel() { - /* Nonmatching */ +s32 daPy_lk_c::setDrawHandModel() { + u8 uVar4; + u8 uVar5; + + mpLhandShape->hide(); + mpRhandShape->hide(); + if (mCurProc == daPyProc_DEMO_TOOL_e) { + uVar4 = mLeftHandIdx; + uVar5 = mRightHandIdx; + } else if ((checkGrabAnime()) || (checkBoomerangThrowAnime()) || (checkBoomerangCatchAnime())) { + uVar4 = 0; + uVar5 = 0; + } else if (checkHookshotReadyAnime()) { + uVar4 = 3; + uVar5 = 0; + } else if (checkBowReadyAnime()) { + uVar4 = 3; + uVar5 = 10; + } else if (checkBowShootAnime()) { + uVar4 = 6; + uVar5 = 10; + } else if (checkBoomerangReadyAnime()) { + uVar4 = 0; + uVar5 = 7; + } else if ((checkBottleItem(mEquipItem)) || (checkPhotoBoxItem(mEquipItem))) { + uVar4 = 6; + uVar5 = mRightHandIdx; + } else if (checkBowItem(mEquipItem)) { + uVar4 = mLeftHandIdx; + uVar5 = 8; + } else if (mEquipItem == daPyItem_BOKO_e) { + uVar4 = 3; + uVar5 = 9; + } else if (mEquipItem == daPyItem_SWORD_e) { + uVar4 = 3; + if (dComIfGs_getSelectEquip(1) != dItem_NONE_e) { + uVar5 = 8; + } else { + uVar5 = mRightHandIdx; + } + } else if (((mEquipItem == dItem_GRAPPLING_HOOK_e) && (!checkModeFlg(ModeFlg_ROPE))) || + ((mEquipItem == dItem_SKULL_HAMMER_e && (mCutType == 0)))) + { + uVar4 = 3; + uVar5 = 8; + } else if (mEquipItem == dItem_BOOMERANG_e) { + uVar4 = 0; + uVar5 = mRightHandIdx; + } else if (mEquipItem == dItem_WIND_WAKER_e) { + uVar4 = 5; + uVar5 = mRightHandIdx; + } else if (mEquipItem == dItem_HOOKSHOT_e) { + uVar4 = 2; + uVar5 = mRightHandIdx; + } else if (mEquipItem == dItem_DEKU_LEAF_e) { + uVar4 = 3; + uVar5 = mRightHandIdx; + } else if (mEquipItem == dItem_TELESCOPE_e) { + uVar4 = 1; + uVar5 = mRightHandIdx; + } else { + if ((mEquipItem == daPyItem_NONE_e) && (checkUpperAnime(LKANM_BCK_TAKEBOTH))) { + uVar4 = 1; + } else if ((mEquipItem == daPyItem_NONE_e) && (checkItemEquipAnime())) { + uVar4 = 0; + } else { + uVar4 = mLeftHandIdx; + } + if ((checkPlayerGuard()) || (mCurProc == daPyProc_GUARD_CRASH_e)) { + uVar5 = 8; + } else if ((mEquipItem == daPyItem_NONE_e) && (checkUpperAnime(LKANM_BCK_TAKEBOTH))) { + uVar5 = 7; + } else if ((mEquipItem == daPyItem_NONE_e) && (checkItemEquipAnime())) { + uVar5 = 0; + } else { + uVar5 = mRightHandIdx; + } + } + if (checkPlayerGuard()) { + uVar5 = 8; + } + if (uVar4 == 0) { + mpLhandShape = mpCLModelData->getJointNodePointer(0x8)->getMesh()->getShape(); + } else { + mpLhandShape = + mpHandsModel->getModelData()->getJointNodePointer(uVar4)->getMesh()->getShape(); + mpHandsModel->setAnmMtx(uVar4, mpCLModel->getAnmMtx(8)); + } + mpLhandShape->show(); + if (uVar5 == 0) { + mpRhandShape = mpCLModelData->getJointNodePointer(0xC)->getMesh()->getShape(); + } else { + mpRhandShape = + mpHandsModel->getModelData()->getJointNodePointer(uVar5)->getMesh()->getShape(); + mpHandsModel->setAnmMtx(uVar5, mpCLModel->getAnmMtx(0xC)); + } + mpRhandShape->show(); + return true; } /* 80106BD0-80106C40 .text entryDLSetLight__9daPy_lk_cFP8J3DModelUl */ @@ -1453,17 +1525,15 @@ void daPy_lk_c::updateDLSetLight(J3DModel* model, u32 param_2) { /* 80106CB0-80106D8C .text hideHatAndBackle__9daPy_lk_cFP11J3DMaterial */ void daPy_lk_c::hideHatAndBackle(J3DMaterial* param_1) { - /* Nonmatching - missing "mr" instruction */ - int iVar3; - - for (iVar3 = 0, param_1 = 0; param_1 != NULL; iVar3++, param_1 = param_1->getNext()) { - if (((!checkNoResetFlg1(daPyFlg1_FREEZE_STATE)) && ((iVar3 == 2 || (iVar3 == 5)))) || - ((iVar3 == 4) && ((checkCaughtShapeHide()) || (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES))))) + for (int i = 0; param_1 != NULL; i++) { + if (((!checkNoResetFlg1(daPyFlg1_FREEZE_STATE)) && ((i == 2 || (i == 5)))) || + ((i == 4) && ((checkCaughtShapeHide()) || (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES))))) { param_1->getShape()->hide(); } else { param_1->getShape()->show(); } + param_1 = param_1->getNext(); } if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) { mpCLModelData->getJointNodePointer(0x29)->getMesh()->getShape()->hide(); @@ -2169,8 +2239,58 @@ int daPy_lk_c::getDirectionFromCurrentAngle() { } /* 80108B68-80108D80 .text setNormalSpeedF__9daPy_lk_cFffff */ -void daPy_lk_c::setNormalSpeedF(f32, f32, f32, f32) { - /* Nonmatching */ +void daPy_lk_c::setNormalSpeedF(f32 param_1, f32 param_2, f32 param_3, f32 param_4) { + s16 uVar2; + f32 dVar6; + f32 dVar10; + + if (((dComIfGp_event_runCheck()) || (checkHeavyStateOn())) || (checkGrabWear())) { + dVar10 = mMaxNormalSpeed * mStickDistance; + } else { + dVar10 = mStickDistance * (mMaxNormalSpeed * mStickDistance); + } + if ((mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK0E_e) || (getSlidePolygon() != NULL)) { + return; + } + if (mAcch.ChkWallHit()) { + uVar2 = 0; + dBgS_AcchCir* pdVar4 = &mAcchCir[0]; + for (int i = 0; i < 3; i++, pdVar4++) { + if (pdVar4->ChkWallHit()) { + uVar2 = (current.angle.y + 0x8000) - pdVar4->GetWallAngleY(); + break; + } + } + if (abs(uVar2) < 0x4000) { + dVar10 *= (1.0f - cM_scos(uVar2) * daPy_HIO_basic_c0::m.field_0x14); + } + } + f32 temp_f3; + if (dVar10 < mVelocity) { + f32 temp_f0 = mVelocity - dVar10; + if (temp_f0 > param_3) { + temp_f3 = param_3; + } else { + temp_f3 = temp_f0; + } + if (temp_f3 < param_4) { + temp_f3 = param_4; + } + param_1 = 0.0f; + dVar6 = dVar10; + } else { + temp_f3 = param_3; + dVar6 = 0.0f; + } + if (!(cM3d_IsZero(param_1))) { + mVelocity += param_1; + if (mVelocity > dVar10) { + mVelocity = dVar10; + } + } else { + cLib_addCalc(&mVelocity, dVar6, param_2, temp_f3, param_4); + } + return; } /* 80108D80-8010959C .text posMoveFromFootPos__9daPy_lk_cFv */ @@ -2203,13 +2323,13 @@ void daPy_lk_c::posMoveFromFootPos() { mFootData[1].field_0x00C.z = rheel_pos_offset.z; } else { - mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x22), mDoMtx_stack_c::now); + mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x22), mDoMtx_stack_c::get()); mDoMtx_stack_c::multVec(&l_toe_pos, local_60); mDoMtx_stack_c::multVec(&l_heel_pos, local_78); - mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x27), mDoMtx_stack_c::now); + mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x27), mDoMtx_stack_c::get()); mDoMtx_stack_c::multVec(&l_toe_pos, local_60); mDoMtx_stack_c::multVec(&l_heel_pos, local_78); - mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x1e), mDoMtx_stack_c::now); + mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x1E), mDoMtx_stack_c::get()); dVar14 = cM_ssin(m34E0); dVar12 = cM_scos(m34E0); for (iVar7 = 0; iVar7 < 2; iVar7++) { @@ -2260,9 +2380,9 @@ void daPy_lk_c::posMoveFromFootPos() { mFrameCtrlUnder[UNDER_MOVE0_e].getEnd()))); dVar13 = std::abs(cM_scos((uVar2 & 0xFFFF))); dVar14 = getSwimTimerRate(); - fVar1 = ((1.0f + (dVar14 * daPy_HIO_swim_c0::m.field_0x7C) + - (speedF * dVar13) * daPy_HIO_swim_c0::m.field_0x60) / - (speedF * (1.0f - daPy_HIO_swim_c0::m.field_0x7C))); + fVar1 = (((1.0f + (dVar14 * daPy_HIO_swim_c0::m.field_0x7C)) / + ((1.0f - (speedF * daPy_HIO_swim_c0::m.field_0x7C)) + + (speedF * dVar13) * daPy_HIO_swim_c0::m.field_0x60))); speed.x = fVar1 * cM_ssin(current.angle.y); speed.z = fVar1 * cM_scos(current.angle.y); } else if (((mCurProc != daPyProc_CUT_ROLL_e) || (!dComIfGp_event_runCheck())) || @@ -2325,7 +2445,154 @@ void daPy_lk_c::posMoveFromFootPos() { /* 8010959C-80109E80 .text posMove__9daPy_lk_cFv */ void daPy_lk_c::posMove() { - /* Nonmatching */ + /* Nonmatching - cXyz */ + f32 fVar2; + f32 fVar4; + J3DAnmTransform* pJVar5; + int iVar7; + uint uVar8; + mDoExt_MtxCalcAnmBlendTblOld* pmVar10; + J3DTransformInfo* pJVar11; + f32 dVar13; + f32 dVar14; + f32 dVar15; + fopAc_ac_c* local_110; + cXyz local_ac; + cXyz local_a0; + cXyz local_94; + cXyz local_74; + cXyz local_54; + J3DTransformInfo info1; + J3DTransformInfo info2; + + pmVar10 = m_pbCalc[PART_UNDER_e]; + local_ac = m3700; + pJVar5 = pmVar10->getAnmTransform(0); + pJVar5->getTransform(0, &info1); + pJVar5 = pmVar10->getAnmTransform(1); + if (pJVar5 != NULL) { + pJVar5->getTransform(0, &info2); + fVar2 = pmVar10->getRatio(1); + fVar4 = 1.0f - fVar2; + local_54.x = local_54.x * fVar4 + local_74.x * fVar2; + local_54.y = local_54.y * fVar4 + local_74.y * fVar2; + local_54.z = local_54.z * fVar4 + local_74.z * fVar2; + } + pJVar11 = m_old_fdata->getOldFrameTransInfo(0); + dVar15 = cM_ssin(shape_angle.y); + dVar14 = cM_scos(shape_angle.y); + if (m34C2 == 11) { + local_a0 = current.pos - old.pos; + pJVar11->mTranslate.x -= (-dVar15 * local_a0.z) + (dVar14 * local_a0.x); + pJVar11->mTranslate.y -= local_a0.y; + pJVar11->mTranslate.z -= (dVar14 * local_a0.z) + (dVar15 * local_a0.x); + } else if (m34C2 == 10) { + local_a0.set(local_54.x - pJVar11->mTranslate.z, local_54.y - pJVar11->mTranslate.y, + local_54.z - pJVar11->mTranslate.x); + local_94.set((dVar15 * local_a0.x) + (dVar14 * local_a0.z), local_a0.y, + (dVar14 * local_a0.x) - (dVar15 * local_a0.z)); + current.pos -= local_94; + old.pos -= local_94; + pJVar11->mTranslate.x = local_54.x; + pJVar11->mTranslate.y = local_54.y; + pJVar11->mTranslate.z = local_54.z; + } else if ((m34C2 == 2) || (m34C2 == 6)) { + pJVar11->mTranslate.x = local_54.x; + pJVar11->mTranslate.z = local_54.z; + if (m34C2 == 6) { + pJVar11->mTranslate.y = local_54.y; + } + } else if (m34C2 == 4) { + m3700.x = 0.0f; + m3700.z = 0.0f; + local_94.x = 0.0f; + local_94.z = 0.0f; + local_94.y = local_54.y; + pJVar11->mTranslate.x = 0.0f; + pJVar11->mTranslate.z = 0.0f; + pJVar11->mTranslate.y = local_94.y; + m35E0 = local_94.y; + m34C2 = 5; + } else if ((m34C2 == 7) || (m34C2 == 3)) { + local_94.x = local_54.x; + local_94.y = local_54.y; + local_94.z = local_54.z; + if (m34C2 == 7) { + m34C2 = 5; + } else { + m34C2 = 1; + } + } + m3700 = local_54; + posMoveFromFootPos(); + if (!checkNoCollisionCorret()) { + current.pos += *mStts.GetCCMoveP(); + if ((!dComIfGp_event_runCheck()) && (mDemo.getDemoType() == 0)) { + if ((!checkNoResetFlg1(daPyFlg1_UNK10000000)) || (!checkHeavyStateOn())) { + current.pos.x += m3644 * cM_ssin(m3640); + current.pos.z += m3644 * cM_scos(m3640); + } + if (mWhirlId != fpcM_ERROR_PROCESS_ID_e) { + local_110 = fopAcM_SearchByID(mWhirlId); + if (local_110 != NULL) { + local_74 = current.pos - local_110->current.pos; + iVar7 = (s16)(cM_atan2s(local_74.x, local_74.z) + 0x5000); + cLib_chaseF(&m3610, 40.0f, 5.0f); + current.pos.x += m3610 * cM_ssin(iVar7); + current.pos.z += m3610 * cM_scos(iVar7); + dVar13 = local_74.absXZ(); + if (dVar13 < 500.0f) { + startRestartRoom(5, 0xC9, -1.0f, 0); + } + } else { + m3610 = 0.0f; + } + } else { + m3610 = 0.0f; + } + if ((mAcch.ChkGroundHit()) && (dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd))) { + uVar8 = getGroundAngle(&mAcch.m_gnd, 0); + current.pos.z += m36A0.z * cM_scos(uVar8 & 0xFFFF); + uVar8 = getGroundAngle(&mAcch.m_gnd, 0x4000); + current.pos.x += m36A0.x * cM_scos(uVar8 & 0xFFFF); + } + current.pos += m36B8; + if (mCurProc != daPyProc_FAN_GLIDE_e) { + current.pos.x += m3730.x; + current.pos.z += m3730.z; + } + } + } else if ((((!dComIfGp_event_runCheck()) && (mDemo.getDemoType() == 0)) && + (daPy_getPlayerActorClass() == this)) && + (mCurProc == daPyProc_HANG_MOVE_e)) + { + dVar13 = mStts.GetCCMoveP()->absXZ(); + if (dVar13 > 1.0f) { + if ((s16)(cM_atan2s(mStts.GetCCMoveP()->x, mStts.GetCCMoveP()->z) - shape_angle.y) >= 0) + { + current.pos.x += dVar13 * cM_scos(shape_angle.y); + current.pos.z -= dVar13 * cM_ssin(shape_angle.y); + } else { + current.pos.x -= dVar13 * cM_scos(shape_angle.y); + current.pos.z += dVar13 * cM_ssin(shape_angle.y); + } + } + } + m3644 = 0.0f; + mStts.GetCCMoveP()->zero(); + if ((((m34C2 == 1) || (m34C2 == 8)) || (m34C2 == 9)) || (m34C2 == 5)) { + if ((m34C2 == 1) || (m34C2 == 5)) { + local_a0 = m3700 - local_94; + } else { + local_a0 = local_94 - m3700; + } + current.pos.x += (local_a0.x * dVar15) + (local_a0.z * dVar14); + current.pos.z += (local_a0.x * dVar14) - (local_a0.z * dVar15); + if (m34C2 == 5) { + current.pos.y += local_a0.y; + } + } + return; } /* 80109E80-80109ED8 .text setShapeAngleToAtnActor__9daPy_lk_cFv */ @@ -2382,22 +2649,191 @@ s16 daPy_lk_c::checkBodyAngleX(s16 param_1) { /* 8010A204-8010A2F4 .text setBodyAngleToCamera__9daPy_lk_cFv */ BOOL daPy_lk_c::setBodyAngleToCamera() { - /* Nonmatching */ + BOOL bVar1; + s16 sVar2; + s16 local_16; + s16 local_18; + + if ((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x10)) != 0) { + bVar1 = dCam_getBody()->CalcSubjectAngle(&local_16, &local_18); + if (bVar1 != 0) { + shape_angle.y = local_18; + current.angle.y = local_18; + mBodyAngle.x = checkBodyAngleX(mBodyAngle.x); + sVar2 = mBodyAngle.x; + mBodyAngle.x = checkBodyAngleX(local_16); + if (mBodyAngle.x != local_16) { + mBodyAngle.x = sVar2; + } + } else { + camera_class* cam = dComIfGp_getCamera(mCameraInfoIdx); + shape_angle.y = cam->mAngle.y; + current.angle.y = shape_angle.y; + mBodyAngle.x = cam->mAngle.x; + } + return bVar1; + } + return false; } /* 8010A2F4-8010A4D4 .text setBodyAngleXReadyAnime__9daPy_lk_cFv */ void daPy_lk_c::setBodyAngleXReadyAnime() { - /* Nonmatching */ + s16 sVar3; + cXyz local_1c; + cXyz local_28; + + mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x2), &local_1c); + if (mpAttnActorLockOn != NULL) { + local_28 = (mpAttnActorLockOn->eyePos - local_1c); + local_28.y = local_28.y - 20.0f; + if (local_28.abs() < 1.0f) { + sVar3 = 0; + } else { + sVar3 = cM_atan2s(-local_28.y, local_28.absXZ()); + if (sVar3 > 0x2000) { + sVar3 = 0x2000; + } else if (sVar3 < -0x2000) { + sVar3 = -0x2000; + } + } + } else { + sVar3 = 0; + } + cLib_addCalcAngleS(&mBodyAngle.x, sVar3, 4, 0xc00, 0x180); + return; } /* 8010A4D4-8010A96C .text setSpeedAndAngleNormal__9daPy_lk_cFs */ -void daPy_lk_c::setSpeedAndAngleNormal(s16) { - /* Nonmatching */ +void daPy_lk_c::setSpeedAndAngleNormal(s16 param_1) { + BOOL bVar2; + s16 sVar6; + s16 sVar7; + f32 dVar11; + f32 dVar10; + f32 dVar9; + + if (mStickDistance > 0.05f) { + bVar2 = false; + dVar11 = (mStickDistance * mStickDistance); + if (checkHeavyStateOn()) { + dVar11 *= 1.0f / (daPy_HIO_move_c0::m.field_0x80 * daPy_HIO_move_c0::m.field_0x80); + } + if (checkGrabWear()) { + dVar11 *= 1.0f / (daPy_HIO_move_c0::m.field_0x74 * daPy_HIO_move_c0::m.field_0x74); + } + if (((!mpAttention->Lockon()) && (cLib_distanceAngleS(m34E8, current.angle.y) > 0x7800)) && + (mCurProc != daPyProc_MOVE_TURN_e)) + { + if (checkModeFlg(ModeFlg_00000001)) { + return; + } + if (mCurProc == daPyProc_MOVE_e) { + if ((speedF / mMaxNormalSpeed > daPy_HIO_slip_c0::m.field_0x4) && + (getDirectionFromAngle(m34EA - m34DC) == DIR_BACKWARD)) + { + return; + } + if (speedF / mMaxNormalSpeed <= daPy_HIO_slip_c0::m.field_0x4) { + cLib_addCalcAngleS(¤t.angle.y, m34E8, daPy_HIO_move_c0::m.field_0x6, + param_1, daPy_HIO_move_c0::m.field_0x4); + return; + } + bVar2 = true; + } else { + cLib_addCalcAngleS(¤t.angle.y, m34E8, daPy_HIO_move_c0::m.field_0x6, param_1, + daPy_HIO_move_c0::m.field_0x4); + } + } else { + if (dComIfGp_event_runCheck()) { + sVar6 = param_1; + sVar7 = daPy_HIO_move_c0::m.field_0x4; + } else { + sVar6 = param_1 * dVar11; + if (sVar6 < 10) { + sVar6 = 10; + } + sVar7 = daPy_HIO_move_c0::m.field_0x4 * dVar11; + if (sVar7 < 1) { + sVar7 = 1; + } + } + cLib_addCalcAngleS(¤t.angle.y, m34E8, daPy_HIO_move_c0::m.field_0x6, sVar6, + sVar7); + } + if (!bVar2) { + dVar9 = cM_scos(m34E8 - current.angle.y); + if (mVelocity > 0.5f * mMaxNormalSpeed) { + if (dVar9 < 0.7f) { + dVar9 = 0.7f; + } + } else if (dVar9 < 0.0f) { + dVar9 = 0.0f; + } + if (dComIfGp_event_runCheck()) { + dVar9 *= daPy_HIO_move_c0::m.field_0x14 * mStickDistance; + } else { + dVar10 = 0.5f - (0.5f * std::abs(mVelocity / mMaxNormalSpeed)); + if (checkHeavyStateOn()) { + dVar10 *= daPy_HIO_move_c0::m.field_0x80; + } + if (checkGrabWear()) { + dVar10 *= daPy_HIO_move_c0::m.field_0x74; + } + if (mStickDistance > dVar10) { + dVar9 *= daPy_HIO_move_c0::m.field_0x14 * dVar11; + } else { + dVar9 = 0.0f; + } + } + } else { + dVar9 = 0.0f; + } + } else { + dVar9 = 0.0f; + } + if (((!mpAttention->Lockon()) && (mCurProc != daPyProc_MOVE_TURN_e)) && + (mStickDistance > 0.05f)) + { + sVar6 = shape_angle.y; + cLib_addCalcAngleS(&shape_angle.y, m34E8, daPy_HIO_move_c0::m.field_0x6, + (s16)(param_1 << 1), (s16)(daPy_HIO_move_c0::m.field_0x4 << 1)); + sVar7 = current.angle.y; + if ((s16)(sVar6 - sVar7) * (s16)(shape_angle.y - sVar7) <= 0) { + shape_angle.y = sVar7; + } + } + setNormalSpeedF(dVar9, daPy_HIO_move_c0::m.field_0x24, daPy_HIO_move_c0::m.field_0x1C, + daPy_HIO_move_c0::m.field_0x20); + return; } /* 8010A96C-8010AA90 .text setSpeedAndAngleAtn__9daPy_lk_cFv */ void daPy_lk_c::setSpeedAndAngleAtn() { - /* Nonmatching */ + s16 sVar1; + f32 fVar2; + + if (mDirection == DIR_FORWARD) { + return setSpeedAndAngleNormal(daPy_HIO_move_c0::m.field_0x0); + } else if (mDirection == DIR_BACKWARD) { + return setSpeedAndAngleAtnBack(); + } else { + if (mStickDistance > 0.05f) { + if (getDirectionFromCurrentAngle() == DIR_BACKWARD) { + current.angle.y += 0x8000; + mVelocity *= -1.0f; + } + sVar1 = current.angle.y; + cLib_addCalcAngleS(¤t.angle.y, m34E8, daPy_HIO_atnMove_c0::m.field_0x4, + daPy_HIO_atnMove_c0::m.field_0x0, daPy_HIO_atnMove_c0::m.field_0x2); + fVar2 = daPy_HIO_atnMove_c0::m.field_0x8 * mStickDistance * + cM_scos(current.angle.y - sVar1); + } else { + fVar2 = 0.0f; + } + } + shape_angle.y = m34E6; + return setNormalSpeedF(fVar2, daPy_HIO_atnMove_c0::m.field_0x18, + daPy_HIO_atnMove_c0::m.field_0x10, daPy_HIO_atnMove_c0::m.field_0x14); } /* 8010AA90-8010AB84 .text setSpeedAndAngleAtnBack__9daPy_lk_cFv */ @@ -3305,8 +3741,64 @@ BOOL daPy_lk_c::changeDragonShield(int param_1) { } /* 8010CD34-8010CFB4 .text checkNewItemChange__9daPy_lk_cFUc */ -BOOL daPy_lk_c::checkNewItemChange(u8) { - /* Nonmatching */ +BOOL daPy_lk_c::checkNewItemChange(u8 param_1) { + u32 uVar4 = dComIfGp_getSelectItem(param_1); + + if (uVar4 == dItem_MAGIC_ARMOR_e) { + return changeDragonShield(1); + } + if ((((((uVar4 == dItem_IRON_BOOTS_e) || (uVar4 == WATER_BOOTS)) || + (uVar4 == dItem_TINGLE_TUNER_e)) || + ((uVar4 == NORMAL_SAIL || (isEsa(uVar4))))) || + ((isDaizaItem(uVar4) || ((isEmono(uVar4) || (checkBottleItem(uVar4))))))) || + ((uVar4 >= dItem_FATHER_LETTER_e && (uVar4 <= KAISEN_PRESENT2)))) + { + if ((mAcch.ChkGroundHit()) && (!daPy_lk_c::checkPlayerFly())) { + if ((uVar4 == dItem_IRON_BOOTS_e) || (uVar4 == WATER_BOOTS)) { + procBootsEquip_init(uVar4); + } else { + if (isEsa(uVar4)) { + if (uVar4 == dItem_HYOI_PEAR_e) { + return procFoodSet_init(); + } else { + return procFoodThrow_init(); + } + } else if (uVar4 == dItem_TINGLE_TUNER_e) { + fopAcM_orderTalkEvent(this, (fopAc_ac_c*)dComIfGp_getAgb()); + } else if (checkDrinkBottleItem(uVar4)) { + return procBottleDrink_init(uVar4); + } else if (checkOpenBottleItem(uVar4)) { + return procBottleOpen_init(uVar4); + } else { + if (uVar4 == dItem_EMPTY_BOTTLE_e) { + return procBottleSwing_init(1); + } else { + if (dComIfGs_checkGetItemNum(uVar4) != 0) { + return procNotUse_init(uVar4); + } else { + return false; + } + } + } + } + return true; + } + if (uVar4 != dItem_EMPTY_BOTTLE_e) { + return false; + } + } + if ((mEquipItem != uVar4) && (uVar4 != dItem_NONE_e)) { + if ((uVar4 == dItem_BOMB_BAG_e) && + ((mActivePlayerBombs >= 3) || (dComIfGs_getBombNum() == 0))) + { + mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); + return false; + } else { + mReadyItemBtn = param_1; + setAnimeEquipItem(); + } + } + return false; } /* 8010CFB4-8010D26C .text checkItemChangeFromButton__9daPy_lk_cFv */ @@ -3474,7 +3966,7 @@ void daPy_lk_c::checkItemAction() { resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); } else if (mEquipItem == daPyItem_SWORD_e) { seStartOnlyReverb(JA_SE_LK_SW_PULLOUT_S); - setSwordModel(0); + setSwordModel(FALSE); } else { makeItemType(); } @@ -3488,7 +3980,17 @@ void daPy_lk_c::checkItemAction() { /* 8010D754-8010D810 .text getSlidePolygon__9daPy_lk_cFv */ cM3dGPla* daPy_lk_c::getSlidePolygon() { - /* Nonmatching */ + if (((!checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000))) && + (mAcch.ChkGroundHit())) && + (dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd))) + { + cM3dGPla* iVar2 = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd); + int iVar3 = dComIfG_Bgsp()->GetSpecialCode(mAcch.m_gnd); + if ((iVar2 != NULL) && (dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd) != 8) && (iVar3 == 1)) { + return iVar2; + } + } + return NULL; } /* 8010D810-8010D8B0 .text checkJumpCutFromButton__9daPy_lk_cFv */ @@ -3506,17 +4008,371 @@ BOOL daPy_lk_c::checkJumpCutFromButton() { /* 8010D8B0-8010DB58 .text orderTalk__9daPy_lk_cFv */ int daPy_lk_c::orderTalk() { - /* Nonmatching */ + if (((((dComIfGp_getDoStatus() == dActStts_SPEAK_e) || + (dComIfGp_getDoStatus() == dActStts_LOOK_e)) || + (dComIfGp_getDoStatus() == dActStts_READ_e)) || + (dComIfGp_getDoStatus() == dActStts_CHECK_e)) && + (talkTrigger())) + { + fopAcM_orderTalkEvent(this, mpAttnActorA); + return true; + } + if (((mpAttnEntryX != NULL) && ((mpAttnEntryX->mType == fopAc_Attn_TYPE_SPEAK_e || + ((mpAttnEntryX->mType == fopAc_Attn_TYPE_TALK_e && + (mpAttnActorLockOn == mpAttnActorX)))))) && + (itemTriggerX())) + { + if (((isEsa(dComIfGp_getSelectItem(dItemBtn_X_e))) && + (dComIfGp_getSelectItem(dItemBtn_X_e) != dItem_HYOI_PEAR_e)) && + (m3630 != fpcM_ERROR_PROCESS_ID_e)) + { + mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); + return false; + } + fopAcM_orderTalkXBtnEvent(this, mpAttnActorX); + return true; + } + if (((mpAttnEntryY != NULL) && ((mpAttnEntryY->mType == fopAc_Attn_TYPE_SPEAK_e || + ((mpAttnEntryY->mType == fopAc_Attn_TYPE_TALK_e && + (mpAttnActorLockOn == mpAttnActorY)))))) && + (itemTriggerY())) + { + if (((isEsa(dComIfGp_getSelectItem(dItemBtn_Y_e))) && + (dComIfGp_getSelectItem(dItemBtn_Y_e) != dItem_HYOI_PEAR_e)) && + (m3630 != fpcM_ERROR_PROCESS_ID_e)) + { + mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); + return false; + } + fopAcM_orderTalkYBtnEvent(this, mpAttnActorY); + return true; + } + if ((mpAttnEntryZ != NULL) && (((mpAttnEntryZ->mType == fopAc_Attn_TYPE_SPEAK_e || + ((mpAttnEntryZ->mType == fopAc_Attn_TYPE_TALK_e && + (mpAttnActorLockOn == mpAttnActorZ)))) && + (itemTriggerZ())))) + { + if (((isEsa(dComIfGp_getSelectItem(dItemBtn_Z_e))) && + (dComIfGp_getSelectItem(dItemBtn_Z_e) != dItem_HYOI_PEAR_e)) && + (m3630 != fpcM_ERROR_PROCESS_ID_e)) + { + mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); + return false; + } + fopAcM_orderTalkZBtnEvent(this, mpAttnActorZ); + return true; + } + return false; } /* 8010DB58-8010E448 .text checkNextActionFromButton__9daPy_lk_cFv */ BOOL daPy_lk_c::checkNextActionFromButton() { - /* Nonmatching */ + int direction; + + if (checkResetFlg0(daPyRFlg0_UNK80)) { + if (mEquipItem == daPyItem_SWORD_e) { + resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); + return changeCutProc(); + } + if ((checkPhotoBoxItem(mEquipItem)) || (mEquipItem == dItem_TELESCOPE_e)) { + return procScope_init(mEquipItem); + } + if (mEquipItem == dItem_DEKU_LEAF_e) { + return procFanSwing_init(); + } + if (checkBowItem(mEquipItem)) { + return checkNextBowMode(); + } + if (mEquipItem == dItem_HOOKSHOT_e) { + return checkNextHookshotMode(); + } + if (mEquipItem == dItem_BOOMERANG_e) { + return checkNextBoomerangMode(); + } + if (mEquipItem == dItem_GRAPPLING_HOOK_e) { + return checkNextRopeMode(); + } + if (mEquipItem == dItem_WIND_WAKER_e) { + return procTactWait_init(-1); + } + } + if (checkGrabAnime()) { + if (checkNextActionGrab()) { + return true; + } + setDoStatusBasic(); + } else if (checkHookshotReadyAnime()) { + if (checkNextActionHookshotReady()) { + return true; + } + setDoStatusBasic(); + } else if (checkBowAnime()) { + if (checkNextActionBowReady()) { + return true; + } + setDoStatusBasic(); + } else { + if (checkBoomerangThrowAnime()) { + return true; + } + if (checkBoomerangReadyAnime()) { + if (checkNextActionBoomerangReady()) { + return true; + } + setDoStatusBasic(); + } else if (checkRopeAnime()) { + if (checkNextActionRopeReady()) { + return true; + } + setDoStatusBasic(); + } else { + setDoStatus(); + if ((spActionTrigger()) && (dComIfGp_getRStatus() == dActStts_GRAB_e)) { + return procPushPullWait_init(1); + } + if (orderTalk()) { + return true; + } + if (doTrigger()) { + if (dComIfGp_getDoStatus() == dActStts_ba_sake__dupe_31) { + fopAcM_orderZHintEvent(this, dComIfGp_att_getZHint()); + return true; + } + if (dComIfGp_getDoStatus() == dActStts_GET_IN_SHIP_e) { + return procShipReady_init(); + } + if (dComIfGp_getDoStatus() == dActStts_CLIMB_e) { + if (mFrontWallType == 7) { + return procHangWallCatch_init(); + } else { + return procVerticalJump_init(); + } + } + if (dComIfGp_getDoStatus() == dActStts_OPEN_e) { + if (mpAttnEntryA->mType == 5) { + fopAcM_orderDoorEvent(this, mpAttnActorA); + changeWaitProc(); + } else { + fopAcM_orderTreasureEvent(this, mpAttnActorA); + } + return true; + } + if ((dComIfGp_getDoStatus() == dActStts_LIFT_e) || + (dComIfGp_getDoStatus() == dActStts_PICK_UP_e)) + { + return procGrabReady_init(); + } + if (dComIfGp_getDoStatus() == dActStts_UNK43) { + return procJumpCut_init(0); + } + if (dComIfGp_getDoStatus() == dActStts_SIDLE_e) { + return procWHideReady_init(NULL, &m3724); + } + } + } + } + if ((!checkEquipAnime()) && (!checkPlayerGuard())) { + if (!daPy_dmEcallBack_c::checkCurse()) { + if (mEquipItem == daPyItem_SWORD_e) { + if (checkNoResetFlg0(daPyFlg0_UNK4)) { + return procCutTurnCharge_init(); + } + if ((swordTrigger()) && (abs(m3578) > 0xF800)) { + return procCutTurn_init(1); + } + if ((swordTrigger()) || (m34C5 != 0)) { + return changeCutProc(); + } + } else if (mEquipItem == daPyItem_BOKO_e) { + if (checkNoResetFlg0(daPyFlg0_UNK4)) { + return procCutTurnCharge_init(); + } + if ((swordTrigger()) && (mActorKeepEquip.getActor() != NULL)) { + if (abs(m3578) > 0xF800) { + return procCutTurn_init(1); + } else if ((fopAcM_GetParam(mActorKeepEquip.getActor()) == 0) || + (fopAcM_GetParam(mActorKeepEquip.getActor()) == 1)) + { + return procWeaponNormalSwing_init(); + } else if (fopAcM_GetParam(mActorKeepEquip.getActor()) == 4) { + return procWeaponSideSwing_init(); + } else { + return procWeaponFrontSwingReady_init(); + } + } + if ((doTrigger()) && (dComIfGp_getDoStatus() == dActStts_THROW_e)) { + return procWeaponThrow_init(); + } + } + if (itemTrigger() && (mEquipItem == getReadyItem())) { + if (mEquipItem == dItem_HOOKSHOT_e) { + if (!checkHookshotReadyAnime()) { + return checkNextHookshotMode(); + } + } else if (mEquipItem == dItem_GRAPPLING_HOOK_e) { + if (!checkRopeAnime()) { + return checkNextRopeMode(); + } + } else { + if (mEquipItem == dItem_BOOMERANG_e) { + return checkNextBoomerangMode(); + } + if (checkBowItem(mEquipItem)) { + return checkNextBowMode(); + } + if (mEquipItem == dItem_DEKU_LEAF_e) { + return procFanSwing_init(); + } + if (mEquipItem == dItem_EMPTY_BOTTLE_e) { + return procBottleSwing_init(0); + } + if (mEquipItem == dItem_SKULL_HAMMER_e) { + direction = getDirectionFromShapeAngle(); + if ((mStickDistance > 0.05f) && + ((direction == DIR_LEFT || (direction == DIR_RIGHT)))) + { + return procHammerSideSwing_init(); + } else { + return procHammerFrontSwingReady_init(); + } + } + if ((checkPhotoBoxItem(mEquipItem)) || (mEquipItem == dItem_TELESCOPE_e)) { + return procScope_init(mEquipItem); + } + if (mEquipItem == dItem_WIND_WAKER_e) { + return procTactWait_init(-1); + } + } + } + } + if (changeSpecialBattle()) + return true; + } + if (((dComIfGp_getRStatus() == dActStts_BLANK_e) && (!checkUpperReadyThrowAnime())) && + (!checkEquipAnime())) + { + if (!checkGrabAnime()) { + if (checkNoResetFlg1(daPyFlg1_NPC_CALL_COMMAND)) { + dComIfGp_setRStatus(dActStts_CALL_e); + if (spActionTrigger()) { + return procCall_init(); + } + } else if (mEquipItem == daPyItem_BOKO_e) { + dComIfGp_setRStatus(dActStts_DROP_e); + if (spActionTrigger()) { + deleteEquipItem(FALSE); + m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); + return true; + } + } else if ((dComIfGs_getSelectEquip(1) == dItem_NONE_e) || + (mEquipItem == daPyItem_NONE_e)) + { + if (checkModeFlg(ModeFlg_00000001)) { + dComIfGp_setRStatus(dActStts_CROUCH_e); + if (spActionButton()) { + return procCrouch_init(); + } + } + } else { + if (checkGuardAccept()) { + dComIfGp_setRStatus(dActStts_DEFEND_e); + if (spActionButton()) { + return procCrouchDefense_init(); + } + } + } + } + } + if (doTrigger()) { + if (dComIfGp_getDoStatus() == dActStts_JUMP_e) { + direction = getDirectionFromShapeAngle(); + if ((direction == DIR_LEFT) || (direction == DIR_RIGHT)) { + return procSideStep_init(direction); + } + if (direction == DIR_BACKWARD) { + return procBackJump_init(); + } + } else if (dComIfGp_getDoStatus() == dActStts_ATTACK_e) { + if ((!mpAttention->Lockon()) && (mStickDistance > 0.05f)) { + shape_angle.y = m34E8; + } + return procFrontRoll_init(daPy_HIO_roll_c0::m.field_0xC); + } + } + if (((daPy_getPlayerActorClass() == this) && (!dComIfGp_event_runCheck())) && + (!checkGrabWear())) + { + onResetFlg0(daPyRFlg0_UNK4000000); + if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000)) { + return procSubjectivity_init(0); + } + } + return checkItemChangeFromButton(); } /* 8010E448-8010E75C .text setShieldGuard__9daPy_lk_cFv */ void daPy_lk_c::setShieldGuard() { - /* Nonmatching */ + f32 local_18 = m_pbCalc[PART_UPPER_e]->getRatio(2); + if ((checkGuardSlip()) || (((!checkEquipAnime()) && (!checkGrabAnime())) && + ((((mpAttention->Lockon()) && (mEquipItem != daPyItem_BOKO_e)) && + (dComIfGs_getSelectEquip(1) != dItem_NONE_e)) && + (checkGuardAccept())) && + ((mActorKeepEquip.getID() == fpcM_ERROR_PROCESS_ID_e || + (mActorKeepEquip.getActor() != NULL))))) + { + dComIfGp_setRStatus(dActStts_DEFEND_e); + } + u16 uVar3; + if (mEquipItem == dItem_SKULL_HAMMER_e) { + uVar3 = LKANM_BCK_ATNGHAM; + } else { + uVar3 = LKANM_BCK_ATNG; + } + if (!checkGuardSlip()) { + if ((spActionButton()) && (dComIfGp_getRStatus() == dActStts_DEFEND_e)) { + freeGrabItem(); + if (!checkUpperAnime(uVar3)) { + resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); + setActAnimeUpper(uVar3, UPPER_MOVE2_e, daPy_HIO_atnMove_c0::m.field_0x24, 0.0f, -1, + daPy_HIO_basic_c0::m.field_0xC); + } else { + f32 dVar6 = 1.0f; + if (local_18 < dVar6) { + if (daPy_HIO_basic_c0::m.field_0xC > 0.01f) { + cLib_chaseF(&local_18, dVar6, dVar6 / daPy_HIO_basic_c0::m.field_0xC); + } else { + local_18 = 1.0f; + } + m_pbCalc[PART_UPPER_e]->setRatio(2, local_18); + } + } + if ((m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_ATNLS) || + (m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_ATNRS)) + { + mAnmRatioUpper[UPPER_MOVE2_e].getAnmTransform()->setFrame( + mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); + } + } else { + if (checkUpperGuardAnime()) { + if (daPy_HIO_basic_c0::m.field_0xC > 0.01f) { + cLib_chaseF(&local_18, 0.0f, 1.0f / daPy_HIO_basic_c0::m.field_0xC); + } else { + local_18 = 0.0f; + } + if (local_18 <= 0.0f) { + resetActAnimeUpper(UPPER_MOVE2_e, daPy_HIO_basic_c0::m.field_0xC); + } else { + m_pbCalc[PART_UPPER_e]->setRatio(2, local_18); + } + } + } + } + if (checkPlayerGuard()) { + mCyl.OnTgShield(); + } else { + mCyl.OffTgShield(); + } + return; } /* 8010E75C-8010E7C4 .text checkItemModeActorPointer__9daPy_lk_cFv */ @@ -3929,12 +4785,126 @@ void daPy_lk_c::setFrontWallType() { /* 8010F9AC-8010FEC4 .text changeFrontWallTypeProc__9daPy_lk_cFv */ BOOL daPy_lk_c::changeFrontWallTypeProc() { - /* Nonmatching */ + f32 fVar2; + f32 fVar3; + int iVar8; + s16 sVar5; + + setFrontWallType(); + sVar5 = m3544; + m3544 = 0; + if ((mStickDistance <= 0.05f) && (!checkModeFlg(ModeFlg_MIDAIR))) { + return false; + } + if (checkModeFlg(ModeFlg_MIDAIR)) { + if (mFrontWallType == 7) { + voiceStart(10); + return procHangStart_init(); + } + if (!checkNoResetFlg1(daPyFlg1_VINE_CATCH)) { + if (mFrontWallType == 3) { + deleteEquipItem(TRUE); + shape_angle.y = m352C + 0x8000; + procClimbMoveUpDown_init(1); + m35E0 = 43.67353f; + m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(0.0f); + return true; + } + if (mFrontWallType == 4) { + fVar2 = cM_ssin(m352C); + fVar3 = cM_scos(m352C); + iVar8 = (int)((current.pos.y - m3724.y) / 37.5f) - 1; + if (iVar8 < 1) { + return procFall_init(1, daPy_HIO_wallCatch_c0::m.field_0x54); + } + shape_angle.y = m352C + 0x8000; + current.angle.y = shape_angle.y; + current.pos.x = (m3724.x + 20.5f * fVar2) - fVar3; + current.pos.y = m3724.y + 37.5f * iVar8; + current.pos.z = (m3724.z + 20.5f * fVar3) + fVar2; + deleteEquipItem(TRUE); + m35E0 = 43.67353f; + if (current.pos.y > m35F8 - 150.0f) { + current.pos.y = m35F8 - 150.0f; + m370C = current.pos; + procLadderUpEnd_init(1); + } else { + procLadderMove_init(1, 0, ¤t.pos); + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(0.0f); + } + m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); + return true; + } + } + } else if (!checkResetFlg0(daPyRFlg0_UNK8)) { + if (mFrontWallType == 3) { + if (checkNoResetFlg1(daPyFlg1_VINE_CATCH)) { + return false; + } + if (checkModeFlg(ModeFlg_SWIM)) { + shape_angle.y = m352C + 0x8000; + current.pos.y = current.pos.y - 60.0f; + procClimbMoveUpDown_init(1); + m35E0 = 43.67353f; + m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); + mFrameCtrlUnder[UNDER_MOVE0_e].setRate(0.0f); + return true; + } + return procClimbUpStart_init(); + } + if (mFrontWallType == 4) { + if (checkNoResetFlg1(daPyFlg1_VINE_CATCH)) { + return false; + } + if (checkModeFlg(ModeFlg_SWIM)) { + fVar3 = cM_ssin(m352C); + fVar2 = cM_scos(m352C); + shape_angle.y = m352C + 0x8000; + current.angle.y = shape_angle.y; + iVar8 = (int)((current.pos.y - m3724.y) / 37.5f) - 2; + current.pos.x = (m3724.x + 20.5f * fVar3) - fVar2; + current.pos.y = m3724.y + 37.5f * iVar8; + current.pos.z = (m3724.z + 20.5f * fVar2) + fVar3; + while (m35D0 - current.pos.y > daPy_HIO_swim_c0::m.field_0x24) { + current.pos.y += 37.5f; + } + procLadderMove_init(1, 0, ¤t.pos); + m35E0 = 43.67353f; + m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); + return true; + } + return procLadderUpStart_init(); + } + if (mFrontWallType == 5) { + if (checkNoResetFlg1(daPyFlg1_VINE_CATCH)) { + return false; + } + return procLadderDownStart_init(); + } + m3544 = sVar5 + 1; + if (mFrontWallType == 6) { + if (m3544 > daPy_HIO_smallJump_c0::m.field_0x2) { + return procSmallJump_init(0); + } + return false; + } + if (m3544 > daPy_HIO_wallCatch_c0::m.field_0x8) { + if (mFrontWallType == 7) { + return procHangWallCatch_init(); + } + if ((mFrontWallType == 8) || (mFrontWallType == 9)) { + return procVerticalJump_init(); + } + m3544 = 0; + } + } + return false; } /* 8010FEC4-8010FFB0 .text changeSlideProc__9daPy_lk_cFv */ int daPy_lk_c::changeSlideProc() { - short sVar4; + s16 sVar4; cM3dGPla* pfVar1 = getSlidePolygon(); if (pfVar1 != NULL) { @@ -4058,12 +5028,24 @@ BOOL daPy_lk_c::checkNormalDamage(int param_1) { /* 80110448-801104E4 .text setDashDamage__9daPy_lk_cFv */ void daPy_lk_c::setDashDamage() { - /* Nonmatching */ + setActAnimeUpper(LKANM_BCK_DAMDASH, UPPER_MOVE2_e, daPy_HIO_move_c0::m.field_0x48, 0.0f, -1, + daPy_HIO_basic_c0::m.field_0xC); + setPriTextureAnime(0x40, 0); + mFrameCtrlUpper[UPPER_MOVE2_e].setFrame(mFrameCtrlUnder[UNDER_MOVE1_e].getFrame()); + mDamageWaitTimer = daPy_HIO_dam_c0::m.field_0x2; + voiceStart(2); + seStartOnlyReverb(JA_SE_LK_DAMAGE_NORMAL); + return; } /* 801104E4-8011054C .text checkAtHitEnemy__9daPy_lk_cFP12dCcD_GObjInf */ -BOOL daPy_lk_c::checkAtHitEnemy(dCcD_GObjInf*) { - /* Nonmatching */ +BOOL daPy_lk_c::checkAtHitEnemy(dCcD_GObjInf* param_1) { + if (((param_1->ChkAtHit()) && (param_1->GetAtHitAc() != NULL)) && + (fopAcM_GetGroup(param_1->GetAtHitAc()) == fopAc_ENEMY_e)) + { + return true; + } + return false; } /* 8011054C-801105D8 .text checkElecReturnDamage__9daPy_lk_cFP12dCcD_GObjInfP4cXyz */ @@ -4327,7 +5309,7 @@ BOOL daPy_lk_c::changeAutoJumpProc() { ModeFlg_SWIM | ModeFlg_LADDER | ModeFlg_CAUGHT)) && (!mAcch.ChkGroundHit())) { - f32 dVar11 = mAcch.m_ground_h - current.pos.y; + f32 dVar11 = mAcch.GetGroundH() - current.pos.y; mLavaGndChk.SetPos(¤t.pos); if (checkNoResetFlg0(daPyFlg0_HOVER_BOOTS)) { offNoResetFlg0(daPyFlg0_HOVER_BOOTS); @@ -4446,10 +5428,7 @@ BOOL daPy_lk_c::changeDemoProc() { if ((!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e))) { - if ((!mAcch.ChkGroundHit() || - (checkModeFlg(ModeFlg_MIDAIR | ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_IN_SHIP | - ModeFlg_CLIMB | ModeFlg_SWIM | ModeFlg_LADDER | ModeFlg_CAUGHT)))) - { + if ((!mAcch.ChkGroundHit() || (daPy_lk_c::checkPlayerFly()))) { return false; } } @@ -4622,8 +5601,24 @@ cXyz* daPy_lk_c::getDamageVec(dCcD_GObjInf* i_hitObj) { } /* 80111D64-80111E54 .text setOldRootQuaternion__9daPy_lk_cFsss */ -void daPy_lk_c::setOldRootQuaternion(s16, s16, s16) { - /* Nonmatching */ +void daPy_lk_c::setOldRootQuaternion(s16 param_1, s16 param_2, s16 param_3) { + Quaternion afStack_28; + Quaternion local_38; + + if (m_old_fdata->getOldFrameFlg() != false) { + Quaternion* pQVar1 = m_old_fdata->getOldFrameQuaternion(0); + if ((param_1 != 0) || (param_2 != 0)) { + JMAEulerToQuat(param_1, param_2, 0, &afStack_28); + local_38 = *pQVar1; + mDoMtx_QuatConcat(&afStack_28, &local_38, m_old_fdata->getOldFrameQuaternion(0)); + } + if (param_3 != 0) { + JMAEulerToQuat(0, 0, param_3, &afStack_28); + local_38 = *pQVar1; + mDoMtx_QuatConcat(&afStack_28, &local_38, m_old_fdata->getOldFrameQuaternion(0)); + } + } + return; } /* 80111E54-80111EFC .text checkRestHPAnime__9daPy_lk_cFv */ @@ -5058,13 +6053,7 @@ BOOL daPy_lk_c::procControllWait() { /* 80112E60-80113044 .text procWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procWait_init() { - /* Nonmatching - regalloc, uVar2 */ - u16 uVar1; - s32 uVar2; - int iVar3; - int iVar4; - f32 dVar5; - + /* Nonmatching - missing "cntlzw" instruction */ if ((mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK2A_e) && (m_tex_scroll_heap.field_0x6 == 0xFFFF)) { @@ -5081,13 +6070,13 @@ BOOL daPy_lk_c::procWait_init() { { return false; } - iVar3 = checkPlayerGuard(); + int iVar3 = checkPlayerGuard(); commonProcInit(daPyProc_WAIT_e); mVelocity = 0.0f; - iVar4 = checkRestHPAnime(); + int iVar4 = checkRestHPAnime(); if ((iVar4 != 0) && (iVar3 == 0)) { - uVar2 = (mTexAnmIndexTable[daPyFace_TMABAF].mBtpIdx - m_tex_anm_heap.mIdx) >> 5 & 0xFF; - uVar1 = m3530; + s32 uVar2 = (mTexAnmIndexTable[daPyFace_TMABAF].mBtpIdx - m_tex_anm_heap.mIdx) >> 5 & 0xFF; + u16 uVar1 = m3530; setSingleMoveAnime(ANM_WAITATOB, daPy_HIO_move_c0::m.field_0x68, daPy_HIO_move_c0::m.field_0x6C, daPy_HIO_move_c0::m.field_0x10, daPy_HIO_move_c0::m.field_0x70); @@ -5103,29 +6092,24 @@ BOOL daPy_lk_c::procWait_init() { current.angle.y = shape_angle.y; mDirection = DIR_NONE; m35A0 = 0.0f; - dVar5 = cM_rndF(150.0f); + f32 dVar5 = cM_rndF(150.0f); m34D2 = (s16)(300.0f + dVar5); return true; } /* 80113044-801133FC .text procWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procWait() { - /* Nonmatching - regalloc, uVar3 */ - s32 uVar3; - u16 uVar1; - s16 sVar4; - dBgS_AcchCir* pdVar5; - + /* Nonmatching - missing "cntlzw" instruction */ if ((m36A0.abs2XZ() <= (1.0f / 999999.9f)) && (m36AC.abs2XZ() >= 25.0f)) { return procIceSlipAlmostFall_init(); } if ((((!dComIfGp_event_runCheck()) && (mDemo.getDemoType() == 0)) && (spLTrigger())) && (mAcch.ChkWallHit())) { - pdVar5 = &mAcchCir[0]; + dBgS_AcchCir* pdVar5 = &mAcchCir[0]; for (int i = 0; i < 3; i++, pdVar5++) { if (pdVar5->ChkWallHit()) { - sVar4 = pdVar5->GetWallAngleY() + 0x8000; + s16 sVar4 = pdVar5->GetWallAngleY() + 0x8000; if (cLib_distanceAngleS(shape_angle.y, sVar4) <= 0x2000) { shape_angle.y = sVar4; current.angle.y = shape_angle.y; @@ -5135,7 +6119,7 @@ BOOL daPy_lk_c::procWait() { } } } - sVar4 = shape_angle.y; + s16 sVar2 = shape_angle.y; if (mpAttention->Lockon()) { setSpeedAndAngleAtn(); } else { @@ -5152,8 +6136,8 @@ BOOL daPy_lk_c::procWait() { } else if ((checkRestHPAnime()) && (m_anm_heap_under[UNDER_MOVE0_e].mIdx != LKANM_BCK_WAITB)) { - uVar3 = (mTexAnmIndexTable[daPyFace_TMABAF].mBtpIdx - m_tex_anm_heap.mIdx) >> 5 & 0xFF; - uVar1 = m3530; + s32 uVar3 = (mTexAnmIndexTable[daPyFace_TMABAF].mBtpIdx - m_tex_anm_heap.mIdx) >> 5 & 0xFF; + u16 uVar1 = m3530; setSingleMoveAnime(ANM_WAITATOB, daPy_HIO_move_c0::m.field_0x68, daPy_HIO_move_c0::m.field_0x6C, daPy_HIO_move_c0::m.field_0x10, daPy_HIO_move_c0::m.field_0x70); @@ -5164,11 +6148,11 @@ BOOL daPy_lk_c::procWait() { setTextureAnime(0xe, uVar1); } } else { - m35A0 = 0.005f * (s16)(shape_angle.y - sVar4); + m35A0 = 0.005f * (s16)(shape_angle.y - sVar2); setBlendMoveAnime(-1.0f); } if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK2A_e) { - if ((int)m34D0 != 0) { + if (m34D0 != 0) { m34D0--; } else if (cM_rnd() < 0.05f) { voiceStart(38); @@ -5281,7 +6265,7 @@ BOOL daPy_lk_c::procAtnMove_init() { BOOL daPy_lk_c::procAtnMove() { setSpeedAndAngleAtn(); if ((!checkNextMode(0)) && - (((mDirection != DIR_NONE) || (!changeFrontWallTypeProc())) && (!checkIceSlipFall()))) + (((mDirection != DIR_FORWARD) || (!changeFrontWallTypeProc())) && (!checkIceSlipFall()))) { setBlendAtnMoveAnime(-1.0f); } @@ -5452,12 +6436,84 @@ BOOL daPy_lk_c::procCrouchDefense_init() { /* 80113DBC-80114014 .text procCrouchDefense__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouchDefense() { - /* Nonmatching */ + dComIfGp_setRStatus(dActStts_DEFEND_e); + if ((dCam_getBody()->ChangeModeOK(4)) && (current.pos.y >= m35D0)) { + onResetFlg0(daPyRFlg0_UNK4000000); + if (((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000))) && + (!dComIfGp_event_runCheck())) + { + return procSubjectivity_init(1); + } + } + cLib_addCalc(&mVelocity, 0.0f, daPy_HIO_move_c0::m.field_0x24, daPy_HIO_move_c0::m.field_0x1C, + daPy_HIO_move_c0::m.field_0x20); + if ((mpAttention->Lockon()) || (!spActionButton())) { + current.angle.y = shape_angle.y; + mDirection = DIR_RIGHT; + checkNextMode(0); + } else { + s16 uVar2 = m34E8 - shape_angle.y; + f32 fVar1 = mStickDistance * cM_scos(uVar2); + s16 sVar5; + if (fVar1 >= 0.0f) { + sVar5 = daPy_HIO_crouch_c0::m.field_0x2 * fVar1; + } else { + sVar5 = daPy_HIO_crouch_c0::m.field_0x0 * fVar1; + } + cLib_addCalcAngleS(&mBodyAngle.x, sVar5, 4, 0xc00, 0x180); + cLib_addCalcAngleS(&mBodyAngle.y, + daPy_HIO_crouch_c0::m.field_0x4 * mStickDistance * cM_ssin(uVar2), 4, + 0xc00, 0x180); + } + return true; } /* 80114014-801142F4 .text procCrouchDefenseSlip_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouchDefenseSlip_init() { - /* Nonmatching */ + commonProcInit(daPyProc_CROUCH_DEFENSE_SLIP_e); + cXyz* pfVar2 = getDamageVec(&mCyl); + current.angle.y = cM_atan2s(pfVar2->x, pfVar2->z); + dCcD_GObjInf* pfVar3 = mCyl.GetTgHitGObj(); + f32 dVar5; + if ((pfVar3 != NULL) && + ((pfVar3->GetAtSpl() == dCcG_At_Spl_UNK5 || (pfVar3->GetAtSpl() == dCcG_At_Spl_UNK6)) || + (pfVar3->GetAtSpl() == dCcG_At_Spl_UNK7))) + { + setSingleMoveAnime(ANM_DIFENCEA, daPy_HIO_nockback_c0::m.field_0x8, + daPy_HIO_nockback_c0::m.field_0xC, daPy_HIO_nockback_c0::m.field_0x0, + daPy_HIO_nockback_c0::m.field_0x10); + dVar5 = pfVar2->absXZ(); + mVelocity = + (daPy_HIO_nockback_c0::m.field_0x18 * dVar5) + daPy_HIO_nockback_c0::m.field_0x14; + m34D0 = daPy_HIO_nockback_c0::m.field_0x2; + m35A0 = daPy_HIO_nockback_c0::m.field_0x1C; + m35A4 = daPy_HIO_nockback_c0::m.field_0x20; + m35A8 = daPy_HIO_nockback_c0::m.field_0x24; + m35AC = daPy_HIO_nockback_c0::m.field_0x28; + dVar5 = cM_rnd(); + mProcVar0.m3570 = (dVar5 < 0.2f) ? 1 : 0; + } else { + setSingleMoveAnime(ANM_DIFENCEA, daPy_HIO_guard_c0::m.field_0x4, + daPy_HIO_guard_c0::m.field_0x8, daPy_HIO_guard_c0::m.field_0x0, + daPy_HIO_guard_c0::m.field_0xC); + dVar5 = pfVar2->absXZ(); + mVelocity = (daPy_HIO_guard_c0::m.field_0x14 * dVar5) + daPy_HIO_guard_c0::m.field_0x10; + m34D0 = daPy_HIO_guard_c0::m.field_0x2; + m35A0 = daPy_HIO_guard_c0::m.field_0x18; + m35A4 = daPy_HIO_guard_c0::m.field_0x1C; + m35A8 = daPy_HIO_guard_c0::m.field_0x20; + m35AC = daPy_HIO_guard_c0::m.field_0x24; + mProcVar0.m3570 = 0; + } + if (mEquipItem == dItem_SKULL_HAMMER_e) { + mSwordAnim.changeBckOnly(getItemAnimeResource(LKANM_BCK_ATNGAHAMA)); + m35EC = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + } else { + m35E8 = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + } + m34BE = 3; + dComIfGp_setPlayerStatus1(0, daPyStts1_UNK80000_e); + return true; } /* 801142F4-801143D4 .text procCrouchDefenseSlip__9daPy_lk_cFv */ @@ -5499,7 +6555,50 @@ BOOL daPy_lk_c::procCrouch_init() { /* 80114440-8011476C .text procCrouch__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouch() { - /* Nonmatching */ + cXyz acStack_20; + cXyz cStack_2c; + cXyz cStack_38; + cXyz local_5c; + cXyz local_68; + + dComIfGp_setRStatus(dActStts_CROUCH_e); + if ((dCam_getBody()->ChangeModeOK(4)) && (current.pos.y >= m35D0)) { + onResetFlg0(daPyRFlg0_UNK4000000); + if (((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000))) && + (!dComIfGp_event_runCheck())) + { + return procSubjectivity_init(1); + } + } + cLib_addCalc(&mVelocity, 0.0f, daPy_HIO_move_c0::m.field_0x24, daPy_HIO_move_c0::m.field_0x1C, + daPy_HIO_move_c0::m.field_0x20); + if ((!spActionButton()) || + (((mpAttention->Lockon()) && (dComIfGs_getSelectEquip(1) != dItem_NONE_e)) && + (checkGuardAccept()))) + { + checkNextMode(0); + } else { + if (((m_old_fdata->getOldFrameRate() < 0.01f) && (mStickDistance > 0.05f)) && + !(m35D0 > current.pos.y + 15.0f)) + { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::ZXYrotM(m34E2, shape_angle.y, 0); + mDoMtx_stack_c::multVec(&l_crawl_start_front_offset, &acStack_20); + mDoMtx_stack_c::multVec(&l_crawl_top_offset, &cStack_2c); + if (getCrawlMoveVec(&cStack_2c, &acStack_20, &cStack_38)) { + local_5c = current.pos - cStack_38; + local_5c.y += 5.0f; + mGndChk.SetPos(&local_5c); + local_5c.y = dComIfG_Bgsp()->GroundCross(&mGndChk); + local_68 = current.pos - local_5c; + if (cLib_distanceAngleS(cM_atan2s(-local_68.y, local_68.absXZ()), m34E2) > 0x100) { + return true; + } + } + procCrawlStart_init(); + } + } + return true; } /* 8011476C-80114804 .text procWaitTurn_init__9daPy_lk_cFv */ @@ -5766,13 +6865,79 @@ BOOL daPy_lk_c::procSlideBackLand() { } /* 801152D0-80115478 .text procFrontRoll_init__9daPy_lk_cFf */ -BOOL daPy_lk_c::procFrontRoll_init(f32) { - /* Nonmatching */ +BOOL daPy_lk_c::procFrontRoll_init(f32 param_1) { + commonProcInit(daPyProc_FRONT_ROLL_e); + setSingleMoveAnime(ANM_ROLLF, daPy_HIO_roll_c0::m.field_0x8, param_1, + daPy_HIO_roll_c0::m.field_0x0, daPy_HIO_roll_c0::m.field_0x14); + mVelocity = speedF * daPy_HIO_roll_c0::m.field_0x18 + daPy_HIO_roll_c0::m.field_0x1C; + if (checkHeavyStateOn()) { + mVelocity *= daPy_HIO_move_c0::m.field_0x80; + } + if (mVelocity < daPy_HIO_roll_c0::m.field_0x20) { + mVelocity = daPy_HIO_roll_c0::m.field_0x20; + } else { + param_1 = daPy_HIO_roll_c0::m.field_0x1C + + daPy_HIO_move_c0::m.field_0x18 * daPy_HIO_roll_c0::m.field_0x18; + if (checkHeavyStateOn()) { + param_1 *= daPy_HIO_move_c0::m.field_0x80; + } + if (mVelocity > param_1) { + mVelocity = param_1; + } + } + current.angle.y = shape_angle.y; + if ((mAcchCir[0].ChkWallHit()) && + (cLib_distanceAngleS(current.angle.y + 0x8000, mAcchCir[0].GetWallAngleY()) <= + daPy_HIO_roll_c0::m.field_0x4)) + { + mProcVar0.m3570 = 0; + } else { + mProcVar0.m3570 = 1; + } + offNoResetFlg0(daPyFlg0_UNK8); + m34D4 = 0; + voiceStart(7); + return true; } /* 80115478-80115628 .text procFrontRoll__9daPy_lk_cFv */ BOOL daPy_lk_c::procFrontRoll() { - /* Nonmatching */ + if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > 6.0f) { + m34BE = 4; + endFlameDamageEmitter(); + } + if (getSlidePolygon() != NULL) { + cLib_addCalc(&mVelocity, 0.0f, 0.5f, 2.5f, 0.1f); + } + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { + if (mStickDistance <= 0.05f) { + mVelocity -= daPy_HIO_roll_c0::m.field_0x20; + } + checkNextMode(0); + } else { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > daPy_HIO_roll_c0::m.field_0x10) { + checkNextMode(1); + } else { + if ((speedF >= daPy_HIO_roll_c0::m.field_0x3C) && + (!checkNoResetFlg1(daPyFlg1_UNK100000))) + { + if ((checkNoResetFlg0(daPyFlg0_UNK8)) || + ((mProcVar0.m3570 != 0) && (mAcch.ChkWallHit()) && (mAcchCir[0].ChkWallHit()) && + (cLib_distanceAngleS(current.angle.y + 0x8000, mAcchCir[0].GetWallAngleY()) <= + daPy_HIO_roll_c0::m.field_0x4) && + (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() >= + daPy_HIO_roll_c0::m.field_0x34) && + (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() <= daPy_HIO_roll_c0::m.field_0x38))) + { + if (!checkNoResetFlg0(daPyFlg0_UNK8)) { + m3620 = dComIfG_Bgsp()->GetMtrlSndId(mAcchCir[0]); + } + procFrontRollCrash_init(); + } + } + } + } + return true; } /* 80115628-801157D8 .text procFrontRollCrash_init__9daPy_lk_cFv */ @@ -5988,12 +7153,109 @@ int daPy_lk_c::checkAutoJumpFlying() const { /* 80115EA4-8011602C .text procAutoJump_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procAutoJump_init() { - /* Nonmatching */ + commonProcInit(daPyProc_AUTO_JUMP_e); + m3688 = current.pos; + m35F0 = m3688.y; + m35F4 = m3688.y; + setSingleMoveAnime(ANM_JMPST, daPy_HIO_autoJump_c0::m.field_0x20, + daPy_HIO_autoJump_c0::m.field_0x2C, daPy_HIO_autoJump_c0::m.field_0x2, + daPy_HIO_autoJump_c0::m.field_0x30); + if (speedF > daPy_HIO_move_c0::m.field_0x18) { + speedF = daPy_HIO_move_c0::m.field_0x18; + } else if (speedF < daPy_HIO_autoJump_c0::m.field_0x14) { + speedF = daPy_HIO_autoJump_c0::m.field_0x14; + } + mVelocity = + speedF * cM_scos(daPy_HIO_autoJump_c0::m.field_0x6) * daPy_HIO_autoJump_c0::m.field_0x18; + speed.y = + speedF * cM_ssin(daPy_HIO_autoJump_c0::m.field_0x6) * daPy_HIO_autoJump_c0::m.field_0x18; + mProcVar0.m3570 = 0; + m3700 = cXyz::Zero; + m34C2 = 1; + current.angle.y = shape_angle.y; + voiceStart(6); + onNoResetFlg0(daPyFlg0_UNK20000); + offNoResetFlg0(daPyFlg0_NO_FALL_VOICE); + m34D0 = -1; + m34D2 = 3; + return true; } /* 8011602C-801163D4 .text procAutoJump__9daPy_lk_cFv */ BOOL daPy_lk_c::procAutoJump() { - /* Nonmatching */ + if (m34D0 == 0) { + if ((mStickDistance > 0.05f) && (getDirectionFromCurrentAngle() == DIR_BACKWARD)) { + cLib_chaseF(&mVelocity, 0.0f, (daPy_HIO_autoJump_c0::m.field_0x3C * mStickDistance)); + } else if (mStickDistance <= 0.05f) { + cLib_chaseF(&mVelocity, 0.0f, (0.1f * daPy_HIO_autoJump_c0::m.field_0x3C)); + } else { + cLib_chaseF(&mVelocity, daPy_HIO_move_c0::m.field_0x18, + daPy_HIO_autoJump_c0::m.field_0x1C); + } + } else { + cLib_chaseF(&mVelocity, daPy_HIO_move_c0::m.field_0x18, daPy_HIO_autoJump_c0::m.field_0x1C); + } + checkNextActionItemFly(); + if ((checkJumpFlower()) || (checkJumpRideShip())) { + return true; + } + if (mAcch.ChkGroundHit()) { + return changeLandProc(daPy_HIO_autoJump_c0::m.field_0x24); + } + if (checkFanGlideProc(0)) { + return true; + } + if ((!checkGrabAnime()) && + ((((changeFrontWallTypeProc() || (changeRopeSwingProc())) || (checkJumpCutFromButton())) || + (checkItemChangeFromButton())))) + { + return true; + } + m34C2 = 1; + if (m34D0 > 0) { + m34D0--; + dComIfGp_setDoStatus(dActStts_LET_GO_e); + if ((mAcch.ChkWallHit()) || (mCyl.ChkCoHit())) { + m34D2--; + } + if ((doTrigger()) || (m34D2 == 0)) { + if ((doTrigger()) && (mActorKeepGrab.getActor() != NULL)) { + mActorKeepGrab.getActor()->speedF = speedF; + } + freeGrabItem(); + m34D0 = 0; + } + if (m34D0 == 0) { + gravity = daPy_HIO_autoJump_c0::m.field_0xC; + } + if (speed.y > 0.0f) { + speed.y -= 0.5f; + if (speed.y <= 0.0f) { + speed.y = 0.0f; + } + } + } else if ((speed.y < -gravity) && (mProcVar0.m3570 != 2)) { + if (((mActorKeepGrab.getActor() != NULL) && + (fopAcM_GetName(mActorKeepGrab.getActor()) == PROC_NPC_MD)) && + (dComIfGs_isEventBit(0x1620))) + { + speed.y = 5.0f; + gravity = 0.0f; + m34D0 = daPy_HIO_autoJump_c0::m.field_0x8; + } + setSingleMoveAnime(ANM_JMPEDS, 0.0f, 0.0f, -1, daPy_HIO_autoJump_c0::m.field_0x38); + m34C2 = 2; + mProcVar0.m3570 = 2; + offModeFlg(ModeFlg_00000400); + setTextureAnime(0x37, 0); + resetSeAnime(); + } else if ((m3688.y > current.pos.y) && + (m_tex_anm_heap.mIdx != mTexAnmIndexTable[daPyFace_TLAVADAM].mBtpIdx)) + { + setTextureAnime(0x37, 0); + } + setFallVoice(); + return true; } /* 801163D4-8011651C .text procLand_init__9daPy_lk_cFfi */ @@ -6099,13 +7361,104 @@ BOOL daPy_lk_c::procLandDamage() { } /* 80116864-80116A38 .text procFall_init__9daPy_lk_cFif */ -BOOL daPy_lk_c::procFall_init(int, f32) { - /* Nonmatching */ +BOOL daPy_lk_c::procFall_init(int param_1, f32 param_2) { + BOOL bVar1; + BOOL bVar2; + + if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK11_e) { + mAcch.SetGrndNone(); + mAcch.OnLineCheckNone(); + } + if (mCurProc == daPyProc_SHIP_GET_OFF_e) { + bVar1 = false; + } else { + bVar1 = true; + } + if (mCurProc == daPyProc_FALL_e) { + return false; + } + if ((mCurProc == daPyProc_SLIDE_FRONT_e) || (mCurProc == daPyProc_SLIDE_BACK_e)) { + bVar2 = true; + } else { + bVar2 = false; + } + commonProcInit(daPyProc_FALL_e); + if (param_1 == 1) { + mVelocity = 0.0f; + speed.y = 0.0f; + current.angle.y = shape_angle.y; + } + if (param_1 == 2) { + m34D6 = 1; + } else { + m34D6 = 0; + } + setSingleMoveAnime(ANM_JMPEDS, 0.0f, 0.0f, -1, param_2); + setTextureAnime(0x37, 0); + resetSeAnime(); + mProcVar0.m3570 = 0; + if ((current.angle.y == shape_angle.y) && (!checkGrabAnime())) { + if (mVelocity > 1.0f) { + m34D0 = 2; + } else { + m34D0 = 1; + } + } else { + m34D0 = 0; + } + m34D2 = 8; + if ((cLib_distanceAngleS(current.angle.y, shape_angle.y) < 0x4800) && (!bVar2)) { + m34D4 = 1; + } else { + m34D4 = 0; + } + offNoResetFlg0(daPyFlg0_NO_FALL_VOICE); + m3574 = bVar1; + return true; } /* 80116A38-80116C14 .text procFall__9daPy_lk_cFv */ BOOL daPy_lk_c::procFall() { - /* Nonmatching */ + if (((mProcVar0.m3570 == 0) && (m3688.y > current.pos.y)) && + (m_tex_anm_heap.mIdx != mTexAnmIndexTable[daPyFace_TLAVADAM].mBtpIdx)) + { + setTextureAnime(0x37, 0); + mProcVar0.m3570 = 1; + } + if (m34D6 != 0) { + cLib_addCalc(&mVelocity, 0.0f, 0.2f, 1.0f, 0.1f); + } + checkNextActionItemFly(); + if (checkJumpFlower() || ((m3574 != 0) && (checkJumpRideShip()))) { + return true; + } + if (mAcch.ChkGroundHit()) { + changeLandProc(daPy_HIO_autoJump_c0::m.field_0x24); + } else { + if (checkFanGlideProc(0)) { + return true; + } + setFallVoice(); + if (m34D0 == 1) { + if ((int)m34D2 > 0) { + m34D2--; + } + if (((mStickDistance > 0.05f) && (getDirectionFromShapeAngle() == 0)) && (m34D2 == 0)) { + if (changeFrontWallTypeProc()) { + return true; + } + } + } else if (m34D0 == 2) { + if ((changeFrontWallTypeProc()) || (changeRopeSwingProc())) { + return true; + } + } + if ((m34D4 != 0) && (checkJumpCutFromButton())) { + return true; + } + } + checkItemChangeFromButton(); + return true; } /* 80116C14-80116CC4 .text procSlowFall_init__9daPy_lk_cFv */ @@ -6221,12 +7574,106 @@ BOOL daPy_lk_c::procGuardCrash() { /* 801170F0-80117448 .text procDamage_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procDamage_init() { - /* Nonmatching */ + /* Nonmatching - cXyz */ + cXyz local_54; + + cXyz* pfVar1 = getDamageVec(&mCyl); + f32 dVar5 = cM_ssin(shape_angle.y); + f32 dVar6 = cM_scos(shape_angle.y); + commonProcInit(daPyProc_DAMAGE_e); + mDamageWaitTimer = daPy_HIO_dam_c0::m.field_0x0; + local_54.set(pfVar1->z * -dVar5 + pfVar1->x * dVar6, pfVar1->y, + pfVar1->z * dVar6 + pfVar1->x * dVar5); + m34D4 = cM_atan2s(local_54.x, local_54.z); + m34D6 = cM_atan2s(-local_54.x, std::sqrtf(local_54.y * local_54.y + local_54.z * local_54.z)); + if (m34D4 > daPy_HIO_damage_c0::m.field_0x2) { + m34D4 = daPy_HIO_damage_c0::m.field_0x2; + } else { + if (m34D4 < -daPy_HIO_damage_c0::m.field_0x2) { + m34D4 = -daPy_HIO_damage_c0::m.field_0x2; + } + } + if (m34D6 > daPy_HIO_damage_c0::m.field_0x2) { + m34D6 = daPy_HIO_damage_c0::m.field_0x2; + } else { + if (m34D6 < -daPy_HIO_damage_c0::m.field_0x2) { + m34D6 = -daPy_HIO_damage_c0::m.field_0x2; + } + } + int direction = getDirectionFromAngle(cM_atan2s(local_54.x, local_54.z)); + daPy_ANM dVar2; + if (direction == DIR_BACKWARD) { + dVar2 = ANM_DAMF; + } else if (direction == DIR_LEFT) { + dVar2 = ANM_DAMR; + } else if (direction == DIR_RIGHT) { + dVar2 = ANM_DAML; + } else { + dVar2 = ANM_DAMB; + } + setSingleMoveAnime(dVar2, daPy_HIO_damage_c0::m.field_0x14, daPy_HIO_damage_c0::m.field_0x18, + daPy_HIO_damage_c0::m.field_0x0, daPy_HIO_damage_c0::m.field_0x8); + current.angle.y = cM_atan2s(pfVar1->x, pfVar1->z); + if (dVar2 != ANM_DAMR) { + m34BE = 2; + } + if (dVar2 != ANM_DAML) { + m34BE = 1; + } + mVelocity = + (daPy_HIO_damage_c0::m.field_0x10 * pfVar1->absXZ()) + daPy_HIO_damage_c0::m.field_0xC; + voiceStart(2); + seStartOnlyReverb(JA_SE_LK_DAMAGE_NORMAL); + mProcVar0.mDamageAnm = dVar2; + offNoResetFlg0(daPyFlg0_UNK2); + dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f)); + return true; } /* 80117448-801176FC .text procDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procDamage() { - /* Nonmatching */ + /* Nonmatching - uVar4 */ + f32 fVar1; + f32 fVar2; + s16 uVar4; + f32 dVar5; + f32 dVar6; + + dVar6 = (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - daPy_HIO_damage_c0::m.field_0x28); + cLib_addCalcAngleS(&m3566, 0, 4, 0x800, 0x100); + if (dVar6 < 0.0f) { + uVar4 = ((16384.0f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()) / + daPy_HIO_damage_c0::m.field_0x28); + fVar1 = cM_ssin(uVar4); + if (uVar4 < 0x2000) { + uVar4 = uVar4 << 1; + } else { + uVar4 = 0x4000; + } + fVar2 = cM_ssin(uVar4); + } else { + uVar4 = (16384.0f * (1.0f - (dVar6 / (mFrameCtrlUnder[UNDER_MOVE0_e].getEnd() - + daPy_HIO_damage_c0::m.field_0x28)))); + fVar1 = 1.0f - cM_scos(uVar4); + uVar4 = uVar4; + fVar2 = 1.0f - cM_scos((((uVar4 < 0x2000) - (uVar4 >> 0x1f)) & ~((uVar4 - 0x2000) * 2))); + } + m3564 = m34D4 * fVar1; + m3566 = 0; + m3568 = m34D6 * fVar1; + mBodyAngle.x = m34D4 * fVar2; + mBodyAngle.z = m34D6 * fVar2; + mBodyAngle.y = 0; + dVar5 = cLib_addCalc(&mVelocity, 0.0f, daPy_HIO_damage_c0::m.field_0x1C, + daPy_HIO_damage_c0::m.field_0x20, daPy_HIO_damage_c0::m.field_0x24); + if ((dVar5 <= 0.001f) && (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f)) { + checkNextMode(0); + } else { + if (mVelocity < daPy_HIO_damage_c0::m.field_0x2C) { + resetFootEffect(); + } + } + return true; } /* 801176FC-80117794 .text procPolyDamage_init__9daPy_lk_cFv */ @@ -6420,7 +7867,59 @@ BOOL daPy_lk_c::procLargeDamage_init(int param_1, int param_2, s16 param_3, s16 /* 80117EAC-8011810C .text procLargeDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procLargeDamage() { - /* Nonmatching */ + if ((int)m34D0 > 0) { + m34D0--; + if (m34D0 == 0) { + mVelocity = daPy_HIO_laDamage_c0::m.field_0x18; + speed.y = daPy_HIO_laDamage_c0::m.field_0x20; + } else { + return true; + } + } + s16* psVar3; + if ((m34D6 & 4)) { + psVar3 = &m34F2; + } else { + psVar3 = &m34F4; + } + cLib_chaseAngleS(psVar3, m34D4, m34D8); + if ((m34D6 & 1)) { + if (mAcch.ChkGroundHit()) { + if (changeSlideProc()) { + mVelocity = 0.0f; + } else { + if ((m34D6 & 2)) { + voiceStart(2); + mDoAud_seStart(JA_SE_MAJUTOU_JAIL_DOOR); + mAcch.ClrWallNone(); + mAcch.OffLineCheckNone(); + } + procLargeDamageUp_init(mProcVar0.m3570, (u32)m34D6 >> 3 & 1, m34F2, m34F4); + } + } else if ((mAcch.ChkWallHit()) && (mVelocity > m35A0)) { + dBgS_AcchCir* pdVar7 = &mAcchCir[0]; + for (int i = 0; i < 3; i++, pdVar7++) { + if (pdVar7->ChkWallHit()) { + cXyz local_1c; + cXyz local_28; + local_1c.set(current.pos.x, current.pos.y + pdVar7->GetWallH(), current.pos.z); + local_28.set( + local_1c.x + cM_ssin(current.angle.y) * (pdVar7->GetWallR() + 25.0f), + local_1c.y, + local_1c.z + cM_scos(current.angle.y) * (pdVar7->GetWallR() + 25.0f)); + mLinkLinChk.Set(&local_1c, &local_28, this); + if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { + return procLargeDamageWall_init(mProcVar0.m3570, (u32)m34D6 >> 3 & 1, m34F2, + m34F4); + break; + } + } + } + } + } else { + m34D6 = m34D6 | 1; + } + return true; } /* 8011810C-80118504 .text procLargeDamageUp_init__9daPy_lk_cFiiss */ @@ -6581,7 +8080,7 @@ BOOL daPy_lk_c::procLargeDamageUp() { /* 80118640-801189AC .text procLargeDamageWall_init__9daPy_lk_cFiiss */ BOOL daPy_lk_c::procLargeDamageWall_init(int param_1, int param_2, s16 param_3, s16 param_4) { - /* Nonmatching - branching */ + /* Nonmatching - branching (missing cBgW_CheckBWall lnline?) */ f32 fVar1; f32 fVar2; s16 sVar3; @@ -6793,10 +8292,10 @@ BOOL daPy_lk_c::procElecDamage() { } else { dComIfGp_event_reset(); endDemoMode(); - if ((mAcch.ChkGroundHit()) && ((int)m34D6 == 0)) { + if ((mAcch.ChkGroundHit()) && (m34D6 == 0)) { checkNextMode(0); } else { - if ((int)m34D6 != 0) { + if (m34D6 != 0) { current.angle.y = cM_atan2s(m370C.x, m370C.z); } else { current.angle.y = shape_angle.y + 0x8000; @@ -7187,7 +8686,6 @@ int daPy_lk_c::setLegAngle(f32 param_1, int param_2, s16* param_3, s16* param_4) f32 dVar11; f32 dVar12; f32 dVar13; - cXyz local_114; cXyz local_108; cXyz local_fc; cXyz local_f0; @@ -7292,7 +8790,6 @@ void daPy_lk_c::footBgCheck() { f32* pfVar10; int iVar11; int iVar12; - f32 dVar13; f32 dVar14; f32 dVar15; f32 dVar16; @@ -7501,9 +8998,7 @@ void daPy_lk_c::autoGroundHit() { mTinkleHoverTimer--; } } - if (checkModeFlg(ModeFlg_MIDAIR | ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_IN_SHIP | - ModeFlg_CLIMB | ModeFlg_SWIM | ModeFlg_LADDER | ModeFlg_CAUGHT)) - { + if (daPy_lk_c::checkPlayerFly()) { return; } f32 fVar1 = mAcch.GetGroundH(); @@ -7752,7 +9247,7 @@ void daPy_lk_c::setNeckAngle() { r4 = -0x1800; r23 = 0; } else if (mCurProc == daPyProc_CLIMB_MOVE_SIDE_e) { - if (abs((int)m34D4) <= 0x4000) { + if (abs(m34D4) <= 0x4000) { r4 = -0x1800 * cM_scos(m34D4); } else { r4 = 0; @@ -8263,14 +9758,95 @@ void daPy_lk_c::resetCurse() { /* 8011D110-8011D4D0 .text checkLightHit__9daPy_lk_cFv */ void daPy_lk_c::checkLightHit() { - /* Nonmatching */ - static JGeometry::TVec3 normal_scale; - static JGeometry::TVec3 boss_scale; + static JGeometry::TVec3 normal_scale(1.0f, 1.0f, 1.0f); + static JGeometry::TVec3 boss_scale(2.5f, 2.5f, 2.5f); + BOOL lightHit = FALSE; + cXyz lightVec; + + if (dComIfGp_getDetect().chk_light(¤t.pos)) { + lightHit = TRUE; + resetCurse(); + } else { + lightHit = FALSE; + } + if (dComIfGs_getSelectEquip(1) == dItem_MIRROR_SHIELD_e) { + mDoMtx_multVecSR(mpEquippedShieldModel->getBaseTRMtx(), &l_ms_light_local_vec, &lightVec); + if (lightHit) { + onResetFlg0(daPyRFlg0_UNK200000); + } else if ((mLightCyl.ChkTgHit()) && (mLightCyl.GetTgRVecP()->inprod(lightVec) < 0.0f)) { + onResetFlg0(daPyRFlg0_UNK200000); + } + if (mFanLightCps.ChkAtHit()) { + if (m3438.getEmitter() == NULL) { + dComIfGp_particle_setP1(dPa_name::ID_SCENE_8232, ¤t.pos, NULL, NULL, 0xFF, + &m3438); + } + cM3d_lineVsPosSuisenCross(mFanLightCps.GetStart(), mFanLightCps.GetEnd(), + *mFanLightCps.GetAtHitPosP(), &m3438.getPos()); + s16 angleY = cM_atan2s(lightVec.x, lightVec.z); + m3438.setAngle(cM_atan2s(-lightVec.y, lightVec.absXZ()), angleY, 0); + if (m3438.getEmitter() != NULL) { + if ((mFanLightCps.GetAtHitAc() != 0) && + (fopAcM_GetName(mFanLightCps.GetAtHitAc()) == PROC_BPW)) + { + m3438.getEmitter()->setGlobalScale(boss_scale); + } else { + m3438.getEmitter()->setGlobalScale(normal_scale); + } + } + } else { + m3438.end(); + } + } else { + m3438.end(); + } + if (checkResetFlg0(daPyRFlg0_UNK200000)) { + if (!mFanLightCps.ChkAtSet()) { + seStartOnlyReverb(JA_SE_OBJ_MIRROR_REFLECT); + } else { + seStartOnlyReverb(JA_SE_OBJ_MIRROR_LIGHT); + } + resetCurse(); + } + if ((!dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK2000_e)) && + (checkResetFlg0(daPyRFlg0_UNK200000))) + { + if (m342C.getEmitter() == NULL) { + m342C.makeEmitter(dPa_name::ID_SCENE_8226, mpEquippedShieldModel->getBaseTRMtx(), + ¤t.pos, NULL); + } + } else if (m342C.getEmitter() != NULL) { + m342C.getEmitter()->setGlobalAlpha(0); + m342C.end(); + } + return; } /* 8011D4D0-8011D6C4 .text setSwordAtCollision__9daPy_lk_cFv */ void daPy_lk_c::setSwordAtCollision() { - /* Nonmatching */ + cXyz local_34; + cXyz local_58; + cXyz local_7c; + + if (mEquipItem == daPyItem_SWORD_e) { + local_34 = ((mSwordTopPos - m36C4) * m35FC) + m36C4; + local_58 = ((m36D0 - m36DC) * m35FC) + m36DC; + } else { + local_34 = mSwordTopPos; + local_58 = m36D0; + } + mAtCps[0].SetStartEnd(m36C4, local_34); + mAtCps[1].SetStartEnd(local_58, local_34); + mAtCps[2].SetStartEnd(m36C4, local_58); + if (checkResetFlg0(daPyRFlg0_UNK1)) { + local_7c = cXyz::Zero; + } else { + local_7c = mSwordTopPos - m36D0; + } + mAtCps[0].SetAtVec(local_7c); + mAtCps[1].SetAtVec(local_7c); + mAtCps[2].SetAtVec(local_7c); + return; } /* 8011D6C4-8011D788 .text getBlurTopRate__9daPy_lk_cFv */ @@ -8304,7 +9880,7 @@ f32 daPy_lk_c::getBlurTopRate() { /* 8011D788-8011EC0C .text setCollision__9daPy_lk_cFv */ void daPy_lk_c::setCollision() { - /* Nonmatching */ + /* Nonmatching - regalloc */ static const GXColor n_roll_prm0 = {0xC8, 0xFF, 0x40, 0xFF}; static const GXColor n_roll_prm1 = {0xFF, 0xFF, 0xDC, 0xFF}; static const GXColor n_roll_env = {0xC8, 0xFF, 0x78, 0xFF}; @@ -8323,32 +9899,953 @@ void daPy_lk_c::setCollision() { static const GXColor fm_turn_prm0 = {0x40, 0x40, 0xFF, 0xFF}; static const GXColor fm_turn_prm1 = {0xDC, 0xDC, 0xFF, 0xFF}; static const GXColor fm_turn_env = {0x78, 0x78, 0xFF, 0xFF}; + f32 fVar3; + f32 fVar4; + BOOL bVar5; + u32 uVar6; + int iVar12; + int iVar13; + short sVar16; + cM3dGPla* pfVar15; + cXyz* pcVar23; + const GXColor* p_Var24; + const GXColor* p_Var20; + const GXColor* p_Var22; + JPABaseEmitter* emitter1; + JPABaseEmitter* emitter2; + JPABaseEmitter* emitter3; + MtxP pMVar25; + MtxP pMVar26; + MtxP pMVar27; + f32 dVar27; + f32 in_f31; + cXyz afStack_88; + cXyz afStack_a0; + cXyz local_ac; + cXyz local_b8; + cXyz local_c4; + cXyz local_e8; + cXyz local_100; + cXyz local_10c; + cXyz local_118; + + pMVar25 = mpCLModel->getAnmMtx(0); + pMVar26 = mpCLModel->getAnmMtx(0x23); + pMVar27 = mpCLModel->getAnmMtx(0x28); + afStack_88.x = 0.5f * (pMVar25[0][3] + mpCLModel->getAnmMtx(0xE)[0][3]); + afStack_88.z = 0.5f * (pMVar25[2][3] + mpCLModel->getAnmMtx(0xE)[2][3]); + if (mCurProc == daPyProc_JUMP_CUT_e) { + afStack_88.x -= 15.0f * cM_ssin(shape_angle.y); + afStack_88.z -= 15.0f * cM_scos(shape_angle.y); + } + if (checkGrabWear()) { + mCyl.SetR(50.0f); + } else { + mCyl.SetR(30.0f); + } + if (checkModeFlg(ModeFlg_IN_SHIP)) { + mCyl.OnCoSPrmBit(cCcD_CoSPrm_NoCrr_e); + } else { + mCyl.OffCoSPrmBit(cCcD_CoSPrm_NoCrr_e); + } + if (checkModeFlg(ModeFlg_CRAWL)) { + fVar3 = cM_ssin(shape_angle.x); + if (fVar3 >= 0.0f) { + afStack_88.y = current.pos.y - 50.0f * fVar3; + mCyl.SetH(50.0f + (35.0f * fVar3)); + } else { + afStack_88.y = current.pos.y + 25.0f * fVar3; + mCyl.SetH(50.0f - (65.0f * fVar3)); + } + } else { + if (mCurProc == daPyProc_FRONT_ROLL_e) { + afStack_88.y = current.pos.y; + mCyl.SetH(81.25f); + } else if (mCurProc == daPyProc_BACK_JUMP_e) { + afStack_88.y = 30.0f + current.pos.y; + mCyl.SetH(81.25f); + } else if ((mCurProc == daPyProc_BT_JUMP_CUT_e) || + ((mCurProc == daPyProc_BT_JUMP_e && (speed.y <= 0.0f)))) + { + afStack_88.y = pMVar25[1][3]; + mCyl.SetH(125.0f - (afStack_88.y - current.pos.y)); + mCyl.SetR(22.5f); + } else { + if (mCurProc == daPyProc_ROPE_SWING_e) { + afStack_88.y = (pMVar26[1][3] > pMVar25[1][3]) ? pMVar25[1][3] : pMVar26[1][3]; + } else { + afStack_88.y = (pMVar26[1][3] > pMVar27[1][3]) ? pMVar27[1][3] : pMVar26[1][3]; + } + mCyl.SetH(40.1f + (mpCLModel->getAnmMtx(0xE)[1][3] - afStack_88.y)); + } + } + mCyl.SetC(afStack_88); + if (checkModeFlg(ModeFlg_DAMAGE) || + (((checkGuardSlip()) || (mCurProc == daPyProc_VOMIT_WAIT_e)) || + ((s16)mDamageWaitTimer != 0))) + { + mCyl.OffTgSetBit(); + mCyl.ClrTgHit(); + } else { + mCyl.OnTgSetBit(); + } + dComIfG_Ccsp()->Set(&mCyl); + // Using the dComIfG_Ccsp inline here (and everywhere else + // in this function) breaks the match. + // dComIfG_Ccsp()->SetMass(&mCyl, 1); + g_dComIfG_gameInfo.play.mCcS.SetMass(&mCyl, 1); + mWindCyl.SetC(afStack_88); + mWindCyl.SetH(mCyl.GetH()); + mWindCyl.SetR(mCyl.GetR()); + dComIfG_Ccsp()->Set(&mWindCyl); + mLightCyl.SetC(afStack_88); + mLightCyl.SetH(mCyl.GetH()); + mLightCyl.SetR(mCyl.GetR()); + dComIfG_Ccsp()->Set(&mLightCyl); + if (checkResetFlg0(daPyRFlg0_UNK2)) { + if (checkResetFlg0(daPyRFlg0_UNK1)) { + setCutWaterSplash(); + if ((mCurProc == daPyProc_CUT_TURN_e) || (mCurProc == daPyProc_CUT_ROLL_e)) { + mAtCyl.StartCAt(current.pos); + } else { + setSwordAtCollision(); + } + onNoResetFlg0(daPyFlg0_CUT_AT_FLG); + if (mpCutfBrk != NULL) { + if (checkModeFlg(ModeFlg_PARRY)) { + mpCutfBrk->setFrame(2.0f); + } else if (checkNoResetFlg1(daPyFlg1_UNK8000)) { + mpCutfBrk->setFrame(1.0f); + } else { + mpCutfBrk->setFrame(0.0f); + } + } + if (((mCurProc != daPyProc_CUT_F_e) && (mCurProc != daPyProc_BT_VERTICAL_JUMP_CUT_e)) && + (mCurProc != daPyProc_FAN_SWING_e)) + { + if ((mCurProc == daPyProc_HAMMER_FRONT_SWING_e) || + (mCurProc == daPyProc_WEAPON_FRONT_SWING_e)) + { + iVar12 = 2.5f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + } else { + iVar12 = 10.0f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); + } + mSwBlur.initSwBlur(mpCLModel->getBaseTRMtx(), iVar12, getBlurTopRate(), + getSwordBlurColor()); + if ((mCurProc == daPyProc_CUT_TURN_e) || (mCurProc == daPyProc_CUT_ROLL_e)) { + if (mEquipItem == daPyItem_BOKO_e) { + if (mActorKeepEquip.getActor() == NULL) { + uVar6 = 0; + } else { + uVar6 = fopAcM_GetParam(mActorKeepEquip.getActor()); + } + if (uVar6 == 0) { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x48; + } else if (uVar6 == 1) { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x4C; + } else if (uVar6 == 2) { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x50; + } else if (uVar6 == 3) { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x54; + } else if (uVar6 == 4) { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x58; + } else { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x5C; + } + dVar27 *= 1.5f; + p_Var24 = &nm_turn_prm0; + p_Var20 = &nm_turn_prm1; + p_Var22 = &nm_turn_env; + } else if ((mCurProc == daPyProc_CUT_ROLL_e) || + (checkNoResetFlg1(daPyFlg1_UNK8000))) + { + if (checkNormalSwordEquip()) { + if (mCurProc == daPyProc_CUT_ROLL_e) { + dVar27 = daPy_HIO_cutRoll_c0::m.field_0x18; + } else { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x38; + } + p_Var24 = &n_roll_prm0; + p_Var20 = &n_roll_prm1; + p_Var22 = &n_roll_env; + } else if (checkFinalMasterSwordEquip()) { + if (mCurProc == daPyProc_CUT_ROLL_e) { + dVar27 = daPy_HIO_cutRoll_c0::m.field_0x1C; + } else { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x3C; + } + p_Var24 = &fm_roll_prm0; + p_Var20 = &fm_roll_prm1; + p_Var22 = &fm_roll_env; + } else { + if (mCurProc == daPyProc_CUT_ROLL_e) { + dVar27 = daPy_HIO_cutRoll_c0::m.field_0x1C; + } else { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x3C; + } + p_Var24 = &nm_roll_prm0; + p_Var20 = &nm_roll_prm1; + p_Var22 = &nm_roll_env; + } + } else { + if (checkNormalSwordEquip()) { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x38; + p_Var24 = &n_turn_prm0; + p_Var20 = &n_turn_prm1; + p_Var22 = &n_turn_env; + } else if (checkFinalMasterSwordEquip()) { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x3C; + p_Var24 = &fm_turn_prm0; + p_Var20 = &fm_turn_prm1; + p_Var22 = &fm_turn_env; + } else { + dVar27 = daPy_HIO_cutTurn_c0::m.field_0x3C; + p_Var24 = &nm_turn_prm0; + p_Var20 = &nm_turn_prm1; + p_Var22 = &nm_turn_env; + } + } + emitter1 = dComIfGp_particle_setP1( + dPa_name::ID_COMMON_0025, ¤t.pos, &shape_angle, NULL, 0xFF, &m331C, + fopAcM_GetRoomNo(this), p_Var24, p_Var22, NULL); + emitter2 = dComIfGp_particle_setP1( + dPa_name::ID_COMMON_0026, ¤t.pos, &shape_angle, NULL, 0xFF, &m332C, + fopAcM_GetRoomNo(this), p_Var20, p_Var22, NULL); + emitter3 = dComIfGp_particle_setP1( + dPa_name::ID_COMMON_0028, ¤t.pos, &shape_angle, NULL, 0xFF, &m333C, + fopAcM_GetRoomNo(this), p_Var24, p_Var22, NULL); + if (emitter1 != NULL) { + emitter1->mGlobalParticleScale.x = dVar27; + } + if (emitter2 != NULL) { + emitter2->mGlobalParticleScale.x = dVar27; + } + if (emitter3 != NULL) { + emitter3->mGlobalParticleScale.x = dVar27; + } + } + } + } else { + if (mCurProc == daPyProc_CUT_ROLL_e) { + pcVar23 = &mSwBlur.field_0x304[0] - daPy_HIO_cutRoll_c0::m.field_0x4; + local_b8 = (old.pos - current.pos) * 0.1f; + mDoMtx_stack_c::copy(mpCLModel->getBaseTRMtx()); + mDoMtx_stack_c::push(); + mDoMtx_stack_c::inverse(); + mDoMtx_stack_c::multVec(&m36C4, &local_c4); + mDoMtx_stack_c::pop(); + for (int i = 0; i < 10; i++, pcVar23++) { + mDoMtx_stack_c::multVec(&local_c4, pcVar23); + local_b8* i += *pcVar23; + mDoMtx_stack_c::YrotM(0x578); + } + mDoMtx_stack_c::copy(mpCLModel->getBaseTRMtx()); + mDoMtx_stack_c::YrotM(-0x2BC); + mDoMtx_stack_c::multVec(&local_c4, &local_ac); + if (m331C.field_0x4 == 0xFF) { + pcVar23 = &mSwBlur.field_0x304[0]; + m331C.setPosArray(pcVar23, 10); + m332C.setPosArray(pcVar23, 10); + m333C.setPosArray(pcVar23, 10); + } + mAtCyl.MoveCAt(current.pos); + seStartSwordCut(JA_SE_LK_SUGOI_KAITEN); + } else { + iVar13 = mSwBlur.field_0x018; + iVar12 = (int)(10.0f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); + if (((mCurProc != daPyProc_CUT_F_e) && + (mCurProc != daPyProc_BT_VERTICAL_JUMP_CUT_e)) && + (mCurProc != daPyProc_FAN_SWING_e)) + { + if (mCurProc == daPyProc_JUMP_CUT_LAND_e) { + iVar12 = 0x95; + } else if ((mCurProc == daPyProc_HAMMER_FRONT_SWING_e) || + (mCurProc == daPyProc_WEAPON_FRONT_SWING_e)) + { + iVar12 = (int)(2.5f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); + } else if (mCurProc == daPyProc_WEAPON_SIDE_SWING_e) { + iVar12 = iVar12 + -5; + } + mSwBlur.copySwBlur(mpCLModel->getBaseTRMtx(), iVar12); + } + if (mCurProc == daPyProc_CUT_TURN_e) { + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &mSwBlur.mpPosBuffer[iVar12 * 2 + 3], + &local_ac); + mAtCyl.MoveCAt(current.pos); + if (m331C.field_0x4 == 0xFF) { + sVar16 = mSwBlur.field_0x018 - iVar13; + m331C.setPosArray(&mSwBlur.field_0x304[0], sVar16); + m332C.setPosArray(&mSwBlur.field_0x304[0], sVar16); + m333C.setPosArray(&mSwBlur.field_0x304[0], sVar16); + } + mSwBlur.field_0x014 = 0; + } else { + setSwordAtCollision(); + } + } + } + if ((mCurProc == daPyProc_CUT_TURN_e) || (mCurProc == daPyProc_CUT_ROLL_e)) { + mDoAud_zelAudio_c::getInterface()->bgmNowKaitengiri(); + mAtCyl.OnAtSetBit(); + mAtCps[0].OffAtSetBit(); + mAtCps[1].OffAtSetBit(); + mAtCps[2].OffAtSetBit(); + } else { + mAtCyl.OffAtSetBit(); + mAtCps[0].OnAtSetBit(); + if (checkResetFlg0(daPyRFlg0_UNK1)) { + mAtCps[1].OffAtSetBit(); + mAtCps[2].OffAtSetBit(); + } else { + mAtCps[1].OnAtSetBit(); + mAtCps[2].OnAtSetBit(); + } + } + dComIfG_Ccsp()->Set(&mAtCyl); + // dComIfG_Ccsp()->SetMass(&mAtCyl, 1); + g_dComIfG_gameInfo.play.mCcS.SetMass(&mAtCyl, 1); + int i; + dCcD_Cps* pdVar21 = &mAtCps[0]; + for (i = 0; i < 3; i++, pdVar21++) { + dComIfG_Ccsp()->Set(pdVar21); + // dComIfG_Ccsp()->SetMass(&pdVar21, 1); + g_dComIfG_gameInfo.play.mCcS.SetMass(pdVar21, 1); + } + } else { + if (mSwBlur.field_0x014 < 10) { + mSwBlur.field_0x014 = 0; + } else { + mSwBlur.field_0x014 += -10; + } + if ((mCurProc == daPyProc_BOTTLE_OPEN_e) && (m34D6 != 0)) { + mAtCps[0].OnAtSetBit(); + dComIfG_Ccsp()->Set(&mAtCps[0]); + if (m34D4 != 0) { + mAtCps[1].OnAtSetBit(); + dComIfG_Ccsp()->Set(&mAtCps[1]); + } else { + mAtCps[1].OffAtSetBit(); + } + } else { + int i; + dCcD_Cps* pdVar21 = &mAtCps[0]; + for (i = 0; i < 3; i++, pdVar21++) { + pdVar21->ResetAtHit(); + pdVar21->OffAtSetBit(); + } + } + mAtCyl.ResetAtHit(); + mAtCyl.OffAtSetBit(); + offNoResetFlg0(daPyFlg0_CUT_AT_FLG); + m331C.end(); + m332C.end(); + m333C.end(); + } + if (fanWindCrashEffectDraw()) { + fVar3 = mpYbafo00Btk->getFrame() + 1.0f; + if (fVar3 > mpYbafo00Btk->getFrameMax() - 0.5f) { + fVar3 = mpYbafo00Btk->getFrameMax() - 0.001f; + } + mpYbafo00Btk->setFrame(fVar3); + } + bVar5 = false; + if ((int)m3534 != 0) { + local_e8.x = mFanWindCps.GetEndP()->x; + local_e8.y = mFanWindCps.GetEndP()->y; + local_e8.z = mFanWindCps.GetEndP()->z; + dVar27 = (m3534 / 10.0f); + fVar4 = (dVar27 * (daPy_HIO_fan_c0::m.field_0x18 - daPy_HIO_fan_c0::m.field_0x1C) + + daPy_HIO_fan_c0::m.field_0x1C); + fVar3 = cM_scos(m3538); + afStack_a0.set(fVar4 * cM_ssin(m3536) * fVar3, -fVar4 * cM_ssin(m3538), + fVar4 * cM_scos(m3536) * fVar3); + local_100 = (local_e8 + afStack_a0); + mArrowLinChk.Set(&local_e8, &local_100, this); + if (dComIfG_Bgsp()->LineCross(&mArrowLinChk)) { + pfVar15 = dComIfG_Bgsp()->GetTriPla(mArrowLinChk); + local_100.set(*mArrowLinChk.GetCrossP()); + if (!(pfVar15->GetNP()->y >= 0.5f)) { + m3534 = 0; + m33E8.end(); + mpYuchw00Brk->setFrame(mpYuchw00Brk->getFrameMax() - 0.001f); + mpYbafo00Btk->setFrame(0.0f); + mDoMtx_stack_c::transS(local_100.x, local_100.y, local_100.z); + mDoMtx_stack_c::ZXYrotM(cM_atan2s(-pfVar15->GetNP()->y, pfVar15->GetNP()->absXZ()), + cM_atan2s(-pfVar15->GetNP()->x, -pfVar15->GetNP()->z), 0); + mpYbafo00Model->setBaseTRMtx(mDoMtx_stack_c::get()); + emitter1 = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0049, &local_100); + if (emitter1 != NULL) { + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter1->mGlobalRotation, + emitter1->mGlobalTranslation); + emitter1->setGlobalPrmColor(tevStr.mColorK0.r, tevStr.mColorK0.g, + tevStr.mColorK0.b); + } + } else { + local_100.y += 70.0f; + m3538 = getGroundAngle(&mArrowLinChk, m3536); + } + } + bVar5 = true; + in_f31 = (70.0f + (230.0f * (1.0f - dVar27))); + if ((int)m3534 != 0) { + m3534--; + mDoMtx_stack_c::transS(local_100.x, local_100.y, local_100.z); + mDoMtx_stack_c::ZXYrotM(m3538, m3536, 0); + mpYuchw00Model->setBaseTRMtx(mDoMtx_stack_c::get()); + mYuchw00Bck.play(); + mYuchw00Bck.entry(mpYuchw00Model->getModelData()); + simpleAnmPlay(mpYuchw00Btk); + } + } else { + if (fanWindEffectDraw()) { + mYuchw00Bck.play(); + mYuchw00Bck.entry(mpYuchw00Model->getModelData()); + simpleAnmPlay(mpYuchw00Btk); + dVar27 = (1.0f + mpYuchw00Brk->getFrame()); + if (dVar27 > (mpYuchw00Brk->getFrameMax() - 0.5f)) { + dVar27 = (mpYuchw00Brk->getFrameMax() - 0.001f); + m33E8.end(); + } + mpYuchw00Brk->setFrame(dVar27); + } else { + if (mpYbafo00Btk->getFrame() < 5.0f) { + mDoMtx_multVecZero(mpYbafo00Model->getBaseTRMtx(), &local_e8); + local_100.x = local_e8.x; + local_100.y = 10.0f + local_e8.y; + local_100.z = local_e8.z; + afStack_a0 = cXyz::Zero; + bVar5 = true; + in_f31 = 120.0f; + } + } + } + if (bVar5) { + mFanWindCps.SetStartEnd(local_e8, local_100); + mFanWindCps.SetAtVec(afStack_a0); + mFanWindCps.SetR(in_f31); + dComIfG_Ccsp()->Set(&mFanWindCps); + // dComIfG_Ccsp()->SetMass(&mFanWindCps, 1); + g_dComIfG_gameInfo.play.mCcS.SetMass(&mFanWindCps, 1); + } else { + mFanWindCps.ResetAtHit(); + } + if (fanWindEffectDraw()) { + mDoAud_seStart(JA_SE_LK_FAN_WIND, mFanWindCps.GetEndP(), 0, mReverb); + } + if (m353A != 0) { + if (mCurProc == daPyProc_FAN_GLIDE_e) { + pMVar25 = mpCLModel->getAnmMtx(0); + mDoMtx_multVecZero(mpCLModel->getAnmMtx(0), &local_10c); + mFanWindSph.SetC(local_10c); + } else { + mFanWindSph.SetC(current.pos); + } + dComIfG_Ccsp()->Set(&mFanWindSph); + // dComIfG_Ccsp()->SetMass(&mFanWindSph, 1); + g_dComIfG_gameInfo.play.mCcS.SetMass(&mFanWindSph, 1); + m353A--; + } else { + mFanWindSph.ResetAtHit(); + } + if (checkResetFlg0(daPyRFlg0_UNK200000)) { + mDoMtx_multVec(mpEquippedShieldModel->getBaseTRMtx(), &l_ms_light_local_start, &local_e8); + mDoMtx_multVecSR(mpEquippedShieldModel->getBaseTRMtx(), &l_ms_light_local_vec, &local_118); + local_100 = local_e8 + local_118; + mMirLightLinChk.Set(&local_e8, &local_100, this); + if (dComIfG_Bgsp()->LineCross(&mMirLightLinChk)) { + local_100.set(*mMirLightLinChk.GetCrossP()); + local_118 = local_100 - local_e8; + } + mFanLightCps.SetStartEnd(local_e8, local_100); + mFanLightCps.SetAtVec(local_118); + mFanLightCps.OnAtSetBit(); + dComIfG_Ccsp()->Set(&mFanLightCps); + // dComIfG_Ccsp()->SetMass(&mFanLightCps, 1); + g_dComIfG_gameInfo.play.mCcS.SetMass(&mFanLightCps, 1); + } else { + mFanLightCps.ResetAtHit(); + mFanLightCps.OffAtSetBit(); + } + return; } /* 8011EC0C-8011EEBC .text setAttentionPos__9daPy_lk_cFv */ void daPy_lk_c::setAttentionPos() { - /* Nonmatching */ - { - static const Vec offset = {0.0f, 30.0f, 20.0f}; - } - { - static const Vec offset = {0.0f, 70.0f, 0.0f}; + cXyz* pcVar3; + cXyz afStack_18; + + attention_info.position.x = current.pos.x; + attention_info.position.z = current.pos.z; + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if (checkModeFlg(ModeFlg_CRAWL)) { + { + static const Vec offset = {0.0f, 30.0f, 20.0f}; + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &offset, &attention_info.position); + } + } else if (dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK2000_e)) { + { + static const Vec offset = {0.0f, 70.0f, 0.0f}; + mDoMtx_stack_c::ZXYrotS(mBodyAngle.x, shape_angle.y, 0); + mDoMtx_stack_c::multVec(&offset, &afStack_18); + attention_info.position.y = 26.3f + current.pos.y; + pcVar3 = &attention_info.position; + *pcVar3 += afStack_18; + } + } else if (checkModeFlg(ModeFlg_CROUCH)) { + attention_info.position.x += 20.0f * cM_ssin(shape_angle.y); + attention_info.position.y = 46.25f + current.pos.y; + attention_info.position.z += 20.0f * cM_scos(shape_angle.y); + } else if (checkModeFlg(ModeFlg_ROPE)) { + attention_info.position = current.pos; + } else if (checkModeFlg(ModeFlg_HANG)) { + attention_info.position.y = 92.5f + mCyl.GetCP()->y; + } else if (checkModeFlg(ModeFlg_SWIM)) { + attention_info.position.y = 20.05f + current.pos.y; + } else if ((checkModeFlg(ModeFlg_WHIDE)) && (checkNoResetFlg0(daPyFlg0_UNK10000))) { + attention_info.position.y = (92.5f + mpCLModel->getBaseTRMtx()[1][3]) - 30.0f; + } else { + if ((checkModeFlg(ModeFlg_IN_SHIP)) && ((ship != NULL && (!ship->getFlyFlg())))) { + // !@bug(?): l_ship_offset is probably supposed to be x, not z. + attention_info.position.x = + ship->current.pos.x + cM_ssin(ship->shape_angle.y) * l_ship_offset.z; + if (checkNoResetFlg0(daPyFlg0_UNK80)) { + attention_info.position.y = 92.5f + (m35D0 + l_ship_offset.y); + } else { + attention_info.position.y = 92.5f + mpCLModel->getBaseTRMtx()[1][3]; + } + attention_info.position.z = + ship->current.pos.z + cM_scos(ship->shape_angle.y) * l_ship_offset.z; + return; + } + attention_info.position.y = 92.5f + mpCLModel->getBaseTRMtx()[1][3]; } + return; } /* 8011EEBC-8011EF94 .text setRoomInfo__9daPy_lk_cFv */ int daPy_lk_c::setRoomInfo() { - /* Nonmatching */ + int sVar5 = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd); + tevStr.mRoomNo = sVar5; + tevStr.mEnvrIdxOverride = dComIfG_Bgsp()->GetPolyColor(mAcch.m_gnd); + mReverb = dComIfGp_getReverb(sVar5); + mStts.SetRoomId(sVar5); + current.roomNo = sVar5; + if (dStage_stagInfo_GetSTType(dComIfGp_getStageStagInfo()) == dStageType_SEA_e) { + if (dComIfG_Bgsp()->ChkMoveBG(mAcch.m_gnd)) { + mRestartPoint = 0; + } else { + mRestartPoint = dComIfG_Bgsp()->GetLinkNo(mAcch.m_gnd); + } + } else { + mRestartPoint = 0xFF; + } + return sVar5; } /* 8011EF94-8011F9C0 .text setDemoData__9daPy_lk_cFv */ void daPy_lk_c::setDemoData() { - /* Nonmatching */ + /* Nonmatching - for loop, cXyz */ + u32 unaff_r26; + f32 dVar22; + cXyz local_90; + cXyz local_84; + cXyz local_78; + + dDemo_actor_c* demo_actor_p = dComIfGp_demo_getActor(demoActorID); + cXyz* pos_p = NULL; + s16 angle; + u32 demo_mode = daPy_demo_c::DEMO_UNK01_e; + int* prm0_p = NULL; + int* prm1_p = NULL; + if (!dComIfGp_event_runCheck()) { + if (mDemo.getDemoType() != 0) { + endDemoMode(); + } + if (m3554 > 0) { + m3554--; + } else { + offNoResetFlg1(daPyFlg1_FOREST_WATER_USE); + } + return; + } + dComIfGp_clearPlayerStatus0(0, daPyStts0_BOOMERANG_WAIT_e); + if ((dComIfGp_event_chkEventFlag(0x20)) == 0) { + if (mCurProc == daPyProc_SCOPE_e) { + procWait_init(); + } else if (mCurProc == daPyProc_SHIP_SCOPE_e) { + procShipPaddle_init(); + } + } + if (mCurProc == daPyProc_SUBJECTIVITY_e) { + procWait_init(); + } + if ((mDemo.getDemoType() == 4) && (!dComIfGp_evmng_checkStartDemo())) { + mDemo.setDemoType(2); + } + if (demo_actor_p != NULL) { + demo_actor_p->setModel(mpCLModel); + mStaffIdx = -1; + if (mDemo.getDemoType() != 1) { + mDemo.setDemoType(1); + freeGrabItem(); + freeRopeItem(); + freeHookshotItem(); + deleteEquipItem(FALSE); + procWait_init(); + } + if (demo_actor_p->checkEnable(dDemo_actor_c::ENABLE_ANM_e)) { + demo_mode = demo_actor_p->getAnmId(); + } + if (demo_actor_p->checkEnable(dDemo_actor_c::ENABLE_TRANS_e)) { + pos_p = demo_actor_p->getTrans(); + } else { + pos_p = ¤t.pos; + } + if (demo_actor_p->checkEnable(dDemo_actor_c::ENABLE_ROTATE_e)) { + angle = demo_actor_p->getRatate()->y; + } else { + angle = shape_angle.y; + } + if ((demo_actor_p->checkEnable(dDemo_actor_c::ENABLE_SHAPE_e))) { + if (dComIfGs_getClearCount() == 0) { + unaff_r26 = demo_actor_p->getShapeId(); + if ((checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (unaff_r26 == 0)) || + ((!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (unaff_r26 == 1)))) + { + ResTIMG* pRVar11; + ResTIMG* local_48; + pRVar11 = mpCurrLinktex; + // f32 local_4c; + // f32* pfVar17 = &local_4c; + // u32* puVar16 = &pRVar11[-1].imageOffset; + // int iVar9 = 4; + // do { + // for (iVar9 = 0; iVar9 != NULL; iVar9++) { + // f32* pfVar1 = (f32*)(puVar16 + 1); + // puVar16 = puVar16 + 2; + // f32 fVar7 = (f32)*puVar16; + // pfVar17[1] = *pfVar1; + // pfVar17 = pfVar17 + 2; + // *pfVar17 = fVar7; + // iVar9 = iVar9 + -1; + // } while (iVar9 != 0); + // } + *pRVar11 = mOtherLinktex; + mOtherLinktex = *local_48; + if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) { + offNoResetFlg1(daPyFlg1_CASUAL_CLOTHES); + } else { + onNoResetFlg1(daPyFlg1_CASUAL_CLOTHES); + } + } + } + } + } else { + if ((mDemo.getDemoType() == 0) && (dComIfGp_event_runCheck())) { + mDemo.setDemoType(2); + } + if (mStaffIdx != -1) { + char* cut_name = dComIfGp_getPEvtManager()->getMyNowCutName((mStaffIdx)); + if (cut_name != NULL) { + // Take the first 3 chars in cut_name, convert them to integers, and calculate + // demo_mode + demo_mode = + ((cut_name[0] - '0') * 100 + (cut_name[1] - '0') * 10 + (cut_name[2] - '0')); + if ((mDemo.getDemoType() != 4) && (((demo_mode == daPy_demo_c::DEMO_UNK01_e || + (demo_mode == daPy_demo_c::DEMO_UNK2A_e)) || + (demo_mode == daPy_demo_c::DEMO_UNK17_e)))) + { + if (mAcch.ChkGroundHit() && !daPy_lk_c::checkPlayerFly()) { + mVelocity = 0.0f; + speedF = 0.0f; + } + } + pos_p = dComIfGp_evmng_getMyXyzP(mStaffIdx, "pos"); + if (pos_p == NULL) { + pos_p = dComIfGp_evmng_getGoal(); + } + int* angle_p = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "angle"); + if (angle_p != NULL) { + angle = *angle_p; + } else if (demo_mode == daPy_demo_c::DEMO_UNK05_e) { + angle = mDemo.getMoveAngle(); + } else { + angle = shape_angle.y; + } + prm0_p = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "prm0"); + prm1_p = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "prm1"); + if (mDemo.getDemoType() == 2) { + f32* stick_p = dComIfGp_evmng_getMyFloatP(mStaffIdx, "stick"); + if (stick_p != NULL) { + mDemo.setStick(*stick_p); + } else { + mDemo.setStick(1.0f); + } + } + int* face_p = dComIfGp_evmng_getMyIntegerP(mStaffIdx, "face"); + if (face_p != NULL) { + if (*face_p == 0) { + resetDemoTextureAnime(); + } else if (*face_p == 1) { + changeTextureAnime(LKANM_BTP_TMABAI, LKANM_BTK_TMABA, -1); + } + } + } + } + } + if ((demo_mode == daPy_demo_c::DEMO_UNK27_e) && (dComIfGp_getShipActor() == NULL)) { + demo_mode = daPy_demo_c::DEMO_UNK01_e; + } + if (mDemo.getDemoType() == 4) { + if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK0E_e) { + if (mDemo.getTimer() != 0) { + mDemo.decTimer(); + local_78 = (current.pos - home.pos); + dVar22 = local_78.abs2XZ(); + if (dVar22 > 90000.0f) { + mDemo.setTimer(0); + dComIfGp_evmng_cutEnd(mStaffIdx); + } + } else { + dComIfGp_evmng_cutEnd(mStaffIdx); + } + } + return; + } + if ((mDemo.getDemoType() == 1) || ((mDemo.getDemoType() == 2 && (mStaffIdx != -1)))) { + if (prm0_p != NULL) { + mDemo.setParam0(*prm0_p); + } else { + mDemo.setParam0(0); + } + if (prm1_p != NULL) { + mDemo.setParam1(*prm1_p); + } else { + mDemo.setParam1(0); + } + if ((demo_mode == daPy_demo_c::DEMO_UNK04_e) || (demo_mode == daPy_demo_c::DEMO_UNK2C_e)) { + mVelocity = 0.0f; + speedF = 0.0f; + mStts.ClrCcMove(); + setPlayerPosAndAngle(pos_p, angle); + mDemo.setMoveAngle(angle); + if (demo_mode == daPy_demo_c::DEMO_UNK04_e) { + if (mDemo.getParam0() != 0) { + deleteEquipItem(FALSE); + if ((mDemo.getParam0() == 1) && (checkSwordEquip())) { + setSwordModel(TRUE); + } else if (mDemo.getParam0() == 2) { + mEquipItem = daPyItem_NONE_e; + } else if (mDemo.getParam0() == 3) { + mEquipItem = daPyItem_NONE_e; + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { + dComIfGp_clearPlayerStatus0(0, daPyStts0_SHIP_RIDE_e); + } + } + mDemo.setParam0(0); + } + } + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { + if (dComIfGp_getShipActor() != NULL) { + dComIfGp_getShipActor()->initStartPos(¤t.pos, shape_angle.y); + } + } + } else if (demo_mode == daPy_demo_c::DEMO_UNK2B_e) { + local_84 = current.pos - *pos_p; + angle = current.angle.y; + current.angle.y = cM_atan2s(local_84.x, local_84.z); + shape_angle.y = current.angle.y; + m34EC -= current.angle.y - angle; + } else if ((demo_mode == daPy_demo_c::DEMO_UNK02_e) || + (demo_mode == daPy_demo_c::DEMO_UNK03_e)) + { + local_90 = current.pos - *pos_p; + if (std::abs(mVelocity) / mMaxNormalSpeed < daPy_HIO_move_c0::m.field_0x2C) { + demo_mode = daPy_demo_c::DEMO_UNK02_e; + } + dVar22 = local_90.abs2XZ(); + if ((dVar22 < 100.0f) || ((dVar22 < 2500.0f) && (std::abs(mVelocity) < 0.001f))) { + demo_mode = daPy_demo_c::DEMO_UNK01_e; + mVelocity = 0.0f; + } else if (((demo_mode == daPy_demo_c::DEMO_UNK02_e) && (dVar22 < 400.0f)) || + (dVar22 < 2500.0f)) + { + mDemo.setStick(0.0f); + } + mDemo.setMoveAngle(cM_atan2s(local_90.x, local_90.z)); + } else if ((demo_mode == daPy_demo_c::DEMO_UNK05_e) || + (demo_mode == daPy_demo_c::DEMO_UNK18_e)) + { + mDemo.setMoveAngle(angle); + } + mDemo.setDemoMode(demo_mode); + } else if (mDemo.getDemoType() != 3) { + mDemo.setDemoMode(demo_mode); + } + if (((checkModeFlg(ModeFlg_00080000)) || (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK06_e)) || + (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK08_e)) + { + dComIfGp_setPlayerStatus0(0, daPyStts0_UNK10_e); + } else { + dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK10_e); + } + if ((mStaffIdx != -1) && + (((((demo_mode == daPy_demo_c::DEMO_UNK01_e || (demo_mode == daPy_demo_c::DEMO_UNK04_e)) || + ((demo_mode == daPy_demo_c::DEMO_UNK17_e || + ((demo_mode == daPy_demo_c::DEMO_UNK0E_e || (demo_mode - 0x11 <= 1)))))) || + (demo_mode - 0x2a <= 2)) || + ((demo_mode == daPy_demo_c::DEMO_UNK27_e || (demo_mode == daPy_demo_c::DEMO_UNK33_e)))))) + { + dComIfGp_evmng_cutEnd(mStaffIdx); + } + return; } /* 8011F9C0-8011FF50 .text setStickData__9daPy_lk_cFv */ void daPy_lk_c::setStickData() { - /* Nonmatching */ + bool bVar1; + u8 bVar2; + + m34CA = mItemButton; + mItemTrigger = 0; + mItemButton = 0; + if (daPy_getPlayerActorClass() != this) { + mStickDistance = 0.0f; + m34E8 = 0; + } else { + if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK44_e) { + mStickDistance = g_mDoCPd_cpadInfo[0].mMainStickValue; + m34DC = g_mDoCPd_cpadInfo[0].mMainStickAngle + 0x8000; + m34E8 = m34DC + dCam_getControledAngleY(dComIfGp_getCamera(mCameraInfoIdx)); + if (CPad_CHECK_HOLD_A(0)) { + mItemButton |= BTN_A; + } + } else if ((((dComIfGp_event_runCheck() != 0) || (mDemo.getDemoType() != 0)) && + (!dComIfGp_checkPlayerStatus1(0, daPyStts1_WIND_WAKER_CONDUCT_e))) && + ((mCurProc != daPyProc_NOT_USE_e && (mCurProc != daPyProc_BOTTLE_GET_e)))) + { + if ((mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK02_e) || + (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK03_e)) + { + if (dComIfGp_demo_getActor(demoActorID) != NULL) { + mStickDistance = 1.0f; + } else { + mStickDistance = mDemo.getStick(); + } + } else { + mStickDistance = 0.0f; + } + m34E8 = mDemo.getMoveAngle(); + if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK0E_e) { + mItemButton = m34CA; + } + } else if (fopOvlpM_IsPeek() == 1) { + mStickDistance = 0.0f; + m34E8 = 0; + } else { + mStickDistance = g_mDoCPd_cpadInfo[0].mMainStickValue; + if ((checkNoResetFlg1(daPyFlg1_CONFUSE)) && (dComIfGp_event_runCheck() == 0)) { + m34DC = g_mDoCPd_cpadInfo[0].mMainStickAngle; + } else { + m34DC = g_mDoCPd_cpadInfo[0].mMainStickAngle + 0x8000; + } + m34E8 = m34DC + dCam_getControledAngleY(dComIfGp_getCamera(mCameraInfoIdx)); + bVar2 = dComIfGp_getButtonActionMode(); + bVar1 = false; + if (CPad_CHECK_TRIG_B(0)) { + if ((dComIfGp_getButtonActionMode() & 2) != 0) { + mItemTrigger |= BTN_B; + } else { + bVar1 = true; + } + } + if (CPad_CHECK_TRIG_A(0)) { + if ((bVar2 & 1) != 0) { + mItemTrigger |= BTN_A; + } else { + bVar1 = true; + } + } + if (CPad_CHECK_TRIG_X(0)) { + if (((bVar2 & 4) != 0) && (mTinkleHoverTimer == 0)) { + mItemTrigger |= BTN_X; + } else { + bVar1 = true; + } + } + if (CPad_CHECK_TRIG_Y(0)) { + if (((bVar2 & 8) != 0) && (mTinkleHoverTimer == 0)) { + mItemTrigger |= BTN_Y; + } else { + bVar1 = true; + } + } + if (CPad_CHECK_TRIG_Z(0)) { + if (((bVar2 & 0x20) != 0) && (mTinkleHoverTimer == 0)) { + mItemTrigger |= BTN_Z; + } else { + bVar1 = true; + } + } + if (CPad_CHECK_TRIG_L(0)) { + mItemTrigger |= BTN_L; + } + if (mDoCPd_R_LOCK_TRIGGER(0)) { + mItemTrigger |= BTN_R; + } + if ((CPad_CHECK_HOLD_A(0)) && ((bVar2 & 1) != 0)) { + mItemButton |= BTN_A; + } + if ((CPad_CHECK_HOLD_B(0)) && ((bVar2 & 2) != 0)) { + mItemButton |= BTN_B; + } + if (mTinkleHoverTimer == 0) { + if ((CPad_CHECK_HOLD_X(0)) && ((bVar2 & 4) != 0)) { + mItemButton |= BTN_X; + } + if ((CPad_CHECK_HOLD_Y(0)) && ((bVar2 & 8) != 0)) { + mItemButton |= BTN_Y; + } + if ((CPad_CHECK_HOLD_Z(0)) && ((bVar2 & 0x20) != 0)) { + mItemButton |= BTN_Z; + } + } + if (CPad_CHECK_HOLD_L(0)) { + mItemButton |= BTN_L; + } + if (mDoCPd_R_LOCK_BUTTON(0)) { + mItemButton |= BTN_R; + } + if (checkHeavyStateOn()) { + mStickDistance = mStickDistance * daPy_HIO_move_c0::m.field_0x80; + } + if (checkGrabWear()) { + mStickDistance = mStickDistance * daPy_HIO_move_c0::m.field_0x74; + } + if ((bVar1) && (dComIfGp_event_runCheck() == 0)) { + mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); + } + } + } + s16 angle_diff = m34DC - m34EA; + int abs_v = abs(angle_diff); + if (((abs_v < daPy_HIO_cutTurnR_c0::m.field_0x6) && + (abs_v > daPy_HIO_cutTurnR_c0::m.field_0x8)) && + (m3578 * angle_diff >= 0)) + { + m3578 = m3578 + angle_diff; + m3524 = daPy_HIO_cutTurnR_c0::m.field_0x2; + } else if (m3578 * angle_diff < 0) { + m3578 = angle_diff; + m3524 = daPy_HIO_cutTurnR_c0::m.field_0x2; + } else if (daPy_HIO_cutTurnR_c0::m.field_0x0 == 0) { + if (m3524 > 0) { + m3524--; + } else { + m3578 = 0; + } + } + return; } /* 8011FF50-801200F8 .text setBgCheckParam__9daPy_lk_cFv */ @@ -8438,7 +10935,113 @@ BOOL daPy_lk_c::checkLavaFace(cXyz* oldPos, int attributeCode) { /* 8012024C-80120724 .text checkFallCode__9daPy_lk_cFv */ void daPy_lk_c::checkFallCode() { - /* Nonmatching */ + int iVar1; + s32 bVar2; + u32 uVar3; + BOOL bVar4; + f32 dVar5; + f32 dVar6; + cXyz local_44; + + if ((m3580 == 4) || (C_BG_MIN_HEIGHT == mAcch.GetGroundH())) { + bVar4 = (m35D0 > mAcch.GetGroundH()) ? TRUE : FALSE; + if (((((!bVar4) && (checkModeFlg(ModeFlg_MIDAIR))) && + ((!checkModeFlg(ModeFlg_HOOKSHOT) && + (m35F4 - current.pos.y > 100.0f * daPy_HIO_fall_c0::m.field_0x14)))) || + ((bVar4 && (checkModeFlg(ModeFlg_SWIM))))) || + ((mAcch.ChkGroundHit() && + (!checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)))))) + { + startRestartRoom(5, 0xC9, -1.0f, 0); + mAcch.ClrGroundHit(); + } + return; + } + if ((checkNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG)) && (checkModeFlg(ModeFlg_SWIM))) { + startRestartRoom(5, 0xC9, -1.0f, 0); + return; + } + iVar1 = dComIfG_Bgsp()->GetExitId(mAcch.m_gnd); + bVar2 = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd); + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if (iVar1 == 0x3f) { + return; + } + if (((!checkModeFlg(ModeFlg_SWIM)) && (!mAcch.ChkGroundHit())) && + (mCurProc != daPyProc_FAN_GLIDE_e)) + { + if ((dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) && (ship != NULL)) { + if (!ship->checkForceMove()) + goto LAB_80120430; + } + if ((m3580 != 5) || !(m35F4 - current.pos.y > 500.0f)) + goto LAB_80120704; + } +LAB_80120430: + g_dComIfG_gameInfo.play.mFwaterTimer = 1; + dVar6 = speedF; + dVar5 = 1.5f; + if (dVar6 < dVar5) { + dVar5 = dVar5; + } else if (dVar6 > daPy_HIO_move_c0::m.field_0x18) { + dVar5 = daPy_HIO_move_c0::m.field_0x18; + } else { + dVar5 = dVar6; + } + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { + uVar3 = 1; + if (dComIfGp_getShipActor() != NULL) { + dComIfGp_getShipActor()->onSceneChange(); + } + } else { + if (checkModeFlg(ModeFlg_CRAWL)) { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() >= 0.0f) { + uVar3 = 2; + } else { + uVar3 = 3; + } + } else { + uVar3 = 0; + } + } + if (m3580 == 5) { + mAcch.ClrGroundHit(); + } + if (!eventInfo.checkCommandDoor()) { + if (!dComIfGp_event_compulsory(this)) { + return; + } + } + if (dStage_changeSceneExitId(mAcch.m_gnd, dVar5, uVar3, bVar2)) { + onNoResetFlg1(daPyFlg1_UNK100000); + if (dComIfGs_isEventBit(0x3e10)) { + dComIfGs_onEventBit(0x3e01); + } + daPy_py_c::changePlayer((daPy_py_c*)this); + if ((!strcmp(dComIfGp_getStartStageName(), "GanonM")) && (current.roomNo == 1)) { + mDoAud_seStart(JA_SE_LK_MAZE_WARP_IN); + } + if (!eventInfo.checkCommandDoor()) { + mDemo.setDemoType(3); + if (m3580 == 5) { + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK11_e); + } else if (((checkModeFlg(ModeFlg_SWIM)) || (m34C3 == 1)) || (m34C3 == 4)) { + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK0E_e); + mVelocity *= 0.75f; + } else { + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK02_e); + } + local_44 = current.pos - old.pos; + dVar5 = local_44.abs(); + if (dVar5 > 0.1f) { + mDemo.setMoveAngle(cM_atan2s(local_44.x, local_44.z)); + } else { + mDemo.setMoveAngle(current.angle.y); + } + } + } +LAB_80120704: + return; } /* 80120724-80120BBC .text startRestartRoom__9daPy_lk_cFUlifi */ @@ -8552,27 +11155,196 @@ BOOL daPy_lk_c::checkSuccessGuard(int atSpl) { /* 80120BE0-80120F94 .text setShapeAngleOnGround__9daPy_lk_cFv */ void daPy_lk_c::setShapeAngleOnGround() { - /* Nonmatching */ + s16 sVar2; + int iVar3; + f32 dVar8; + f32 dVar7; + cXyz local_44; + cXyz local_50; + cXyz local_68; + cM3dGPla* triPla; + + if (!checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000))) { + if (m35E4 < 0.0f) { + m35E4 = 0.0f; + } else if (m35E4 > 1.0f) { + m35E4 = 1.0f; + } + if (checkModeFlg(ModeFlg_CRAWL)) { + mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); + mDoMtx_stack_c::YrotM(shape_angle.y); + mDoMtx_stack_c::multVec(&l_crawl_front_up_offset, &local_44); + mDoMtx_stack_c::multVec(&l_crawl_back_up_offset, &local_50); + mGndChk.SetPos(&local_44); + local_44.y = dComIfG_Bgsp()->GroundCross(&mGndChk); + if (C_BG_MIN_HEIGHT != local_44.y) { + triPla = dComIfG_Bgsp()->GetTriPla(mGndChk); + } else { + triPla = NULL; + } + if (triPla != NULL) { + dVar8 = triPla->GetNP()->y; + } else { + dVar8 = -1.0f; + } + mGndChk.SetPos(&local_50); + local_50.y = dComIfG_Bgsp()->GroundCross(&mGndChk); + if (C_BG_MIN_HEIGHT != local_50.y) { + triPla = dComIfG_Bgsp()->GetTriPla(mGndChk); + } else { + triPla = NULL; + } + if (triPla != NULL) { + dVar7 = triPla->GetNP()->y; + } else { + dVar7 = -1.0f; + } + local_68 = local_44 - local_50; + sVar2 = cM_atan2s(-local_68.y, local_68.absXZ()); + iVar3 = cLib_distanceAngleS(sVar2, shape_angle.x); + if ((((iVar3 < 0x1000) && (dVar8 > 0.0f)) && (dVar7 > 0.0f)) && + (std::abs((dVar8 - dVar7)) > 0.05f)) + { + shape_angle.x = sVar2 * m35E4; + } else { + shape_angle.x = m34E2 * m35E4; + } + } else { + shape_angle.x = m34E2 * m35E4; + } + shape_angle.z = m35E4 * getGroundAngle(&mAcch.m_gnd, shape_angle.y + -0x4000); + } + return; } /* 80120F94-801211B8 .text setStepsOffset__9daPy_lk_cFv */ void daPy_lk_c::setStepsOffset() { - /* Nonmatching */ + f32 fVar1; + f32 dVar5; + f32 dVar6; + cXyz local_2c; + + cLib_addCalc(&m35C4, 0.0f, 0.5f, 25.0f, 5.0f); + dVar6 = (cM_ssin(m34E2) / cM_scos(m34E2)); + local_2c.x = current.pos.x + speedF * cM_ssin(current.angle.y); + local_2c.y = 30.1f + current.pos.y; + local_2c.z = current.pos.z + speedF * cM_scos(current.angle.y); + mGndChk.SetPos(&local_2c); + dVar5 = dComIfG_Bgsp()->GroundCross(&mGndChk); + if ((checkNoResetFlg0(daPyFlg0_UNK80000000)) && (current.pos.y > dVar5)) { + dVar5 = current.pos.y; + } + fVar1 = (dVar5 - current.pos.y) - (-speedF * dVar6); + if (fVar1 > 0.0f) { + current.pos.y = dVar5; + m35C4 -= fVar1 * 0.7f; + } else if (!checkNoResetFlg0(daPyFlg0_UNK80000000)) { + local_2c = old.pos - current.pos; + fVar1 = local_2c.y - (dVar6 * local_2c.absXZ()); + if (fVar1 >= 0.0f) { + m35C4 += fVar1 * 0.7f; + } + } + return; } /* 801211B8-8012135C .text setBeltConveyerPower__9daPy_lk_cFv */ void daPy_lk_c::setBeltConveyerPower() { - /* Nonmatching */ + f32 fVar1; + f32 dVar4; + f32 dVar5; + int local_58; + cXyz cStack_3c; + + if (((((!checkHeavyStateOn()) && (!dComIfGp_event_runCheck())) && (mDemo.getDemoType() == 0)) && + (!checkNoResetFlg0((daPy_FLG0)(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)))) && + ((mAcch.ChkGroundHit() || (checkModeFlg(ModeFlg_SWIM))))) + { + if ((dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd)) && + (dPath_GetPolyRoomPathVec(mAcch.m_gnd, &cStack_3c, &local_58))) + { + cStack_3c.normalizeZP(); + } else { + cStack_3c = cXyz::Zero; + local_58 = 0; + } + cStack_3c *= local_58; + dVar4 = m36B8.abs2XZ(); + dVar5 = cStack_3c.abs2XZ(); + if (dVar4 > dVar5) { + fVar1 = 3.0f; + } else { + fVar1 = 1.0f; + } + cLib_addCalcPosXZ(&m36B8, cStack_3c, 0.5f, fVar1, 0.5f); + } else { + m36B8 = cXyz::Zero; + } + return; } /* 8012135C-801216A8 .text setWindAtPower__9daPy_lk_cFv */ void daPy_lk_c::setWindAtPower() { - /* Nonmatching */ + f32 dVar6; + cXyz local_58; + f32 fVar2; + f32 fVar1; + + if (mWindCyl.ChkTgHit()) { + dCcD_GObjInf* iVar4 = mWindCyl.GetTgHitGObj(); + if ((iVar4 != NULL) && (iVar4->GetAtSpl() == dCcG_At_Spl_UNK1)) { + m34BA = 1; + } else { + m34BA = 0; + } + } + if (((mWindCyl.ChkTgHit()) && + (((mDamageWaitTimer == 0 || (m34BA == 0)) && (!dComIfGp_event_runCheck())))) && + ((mDemo.getDemoType() == 0 && (mCurProc != daPyProc_FAN_GLIDE_e)))) + { + local_58 = *mWindCyl.GetTgRVecP(); + dVar6 = local_58.absXZ(); + if (m34BA != 0) { + fVar1 = 27.0f; + fVar2 = 18.0f; + } else { + fVar1 = 30.0f; + fVar2 = 1.0f; + } + if (dVar6 < 1.0f) { + local_58 = (current.pos - *mWindCyl.GetTgHitPosP()) * fVar1; + dVar6 = local_58.absXZ(); + } + if (dVar6 > fVar1) { + local_58 *= (fVar1 / dVar6); + } + } else { + local_58 = cXyz::Zero; + if (m34BA != 0) { + fVar2 = 1.0f; + } else { + fVar2 = 3.0f; + } + } + if (mCurProc != daPyProc_FAN_GLIDE_e) { + if ((dComIfGp_event_runCheck()) || (mDemo.getDemoType() != 0)) { + m373C.x = 0.0f; + m373C.z = 0.0f; + } else { + cLib_addCalcPosXZ(&m373C, local_58, 0.5f, fVar2, 0.5f); + } + if (((checkHeavyStateOn()) || (dComIfGp_event_runCheck())) || (mDemo.getDemoType() != 0)) { + m3730.x = 0.0f; + m3730.z = 0.0f; + } else { + cLib_addCalcPosXZ(&m3730, local_58, 0.5f, fVar2, 0.5f); + } + } + return; } /* 801216A8-80121870 .text checkRoofRestart__9daPy_lk_cFv */ void daPy_lk_c::checkRoofRestart() { - /* Nonmatching - math */ if ((mAcch.ChkRoofHit()) && (mAcch.ChkGroundHit())) { if (((mCurProc != daPyProc_CRAWL_START_e)) && ((mCurProc != daPyProc_CRAWL_END_e && (mCurProc != daPyProc_WHIDE_READY_e)))) @@ -8585,19 +11357,18 @@ void daPy_lk_c::checkRoofRestart() { f32 dVar9 = mAcch.m_roof_y; if (dVar9 > mAcch.GetGroundH()) { f32 dVar10 = mHeadTopPos.y - 10.0f; - f32 fVar1 = current.pos.y; - f32 dVar8 = 10.0f + fVar1; + f32 dVar8 = 10.0f + current.pos.y; if (dVar10 < dVar8) { dVar10 = dVar8; } if (dVar9 < dVar10) { if (checkModeFlg(ModeFlg_WHIDE)) { - f32 fVar4 = 35.0f - - daPy_HIO_wall_c0::m.field_0x50 * cM_scos(shape_angle.y) + - current.pos.z; cXyz local_8; - local_8.set(current.pos.x + fVar4 * cM_ssin(shape_angle.y), fVar1, - fVar4); + local_8.set(current.pos.x + (35.0f - daPy_HIO_wall_c0::m.field_0x50) * + cM_ssin(shape_angle.y), + current.pos.y, + current.pos.z + (35.0f - daPy_HIO_wall_c0::m.field_0x50) * + cM_scos(shape_angle.y)); mRoofChk.SetPos(local_8); dVar9 = dComIfG_Bgsp()->RoofChk(&mRoofChk); if (dVar9 >= dVar10) { @@ -9841,13 +12612,212 @@ daPy_lk_c::daPy_lk_c() {} daPy_footData_c::~daPy_footData_c() {} /* 8012704C-80127160 .text __ct__15daPy_footData_cFv */ -daPy_footData_c::daPy_footData_c() { - /* Nonmatching - regalloc */ -} +daPy_footData_c::daPy_footData_c() {} /* 80127160-80127B50 .text makeBgWait__9daPy_lk_cFv */ cPhs_State daPy_lk_c::makeBgWait() { - /* Nonmatching */ + /* Nonmatching - regalloc, missing "cntlzw" instruction */ + cXyz local_38; + cXyz local_44; + cXyz local_50; + + if ((int)m352E != 0) { + m352E--; + } + mAcch.CrrPos(*dComIfG_Bgsp()); + if ((C_BG_MIN_HEIGHT == mAcch.GetGroundH()) || + (((m352E != 0 && (dComIfG_Bgsp()->ChkMoveBG(mAcch.m_gnd))) && + (fopAcM_GetName(dComIfG_Bgsp()->GetActorPointer(mAcch.m_gnd.GetBgIndex())) == + PROC_TBOX)))) + { + return cPhs_INIT_e; + } + if (((fopAcM_GetParam(this) & 0x80) != 0) && (m352E != 0)) { + if (!(dComIfG_Bgsp()->ChkMoveBG(mAcch.m_gnd)) || + (fopAcM_GetName(dComIfG_Bgsp()->GetActorPointer(mAcch.m_gnd.GetBgIndex())) != + PROC_OBJ_IKADA)) + { + return cPhs_INIT_e; + } + current.pos.y = mAcch.GetGroundH(); + m352E = 0; + } + setWaterY(); + u32 uVar5 = fopAcM_GetParam(this) & 0x40; + if (uVar5 == 0) { + dComIfGs_setRestartRoom(current.pos, shape_angle.y, getStartRoomNo()); + } + setRoomInfo(); + s32 startMode = getStartMode(); + u8 sceneMode = dComIfGs_getLastSceneMode(); + if ((((startMode == 2) || (startMode == 9)) || + ((sceneMode == 6 || ((startMode == 5 && (sceneMode == 1)))))) || + ((sceneMode == 5 && (((!strcmp(dComIfGp_getStartStageName(), "Pjavdou") || + (!strcmp(dComIfGp_getStartStageName(), "ShipD"))) || + ((!strcmp(dComIfGp_getStartStageName(), "Siren") && + ((((fopAcM_GetRoomNo(this) == 0 && (current.pos.z > 1400.0f)) && + (current.pos.x < 400.0f)) && + (current.pos.x > -400.0f)))))))))) + { + if (!dComIfGs_isEventBit(0xf80)) { + if (changeSwimProc()) { + procSwimWait_init(0); + m34C2 = 0; + } else { + procWait_init(); + } + } else { + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if (ship == NULL) { + return cPhs_INIT_e; + } + if (dComIfGs_isEventBit(0x3e10)) { + dComIfGs_onEventBit(0x3e01); + dComIfGs_onEventBit(0x3f80); + } + s16 sVar6; + if (uVar5 != 0) { + s16 sVar2 = shape_angle.y; + sVar6 = sVar2 + 0x4000; + m34DE = sVar2; + } else { + sVar6 = shape_angle.y; + } + ship->initStartPos(¤t.pos, sVar6); + if (ship->getSailOn()) { + procShipSteer_init(); + } else { + procShipPaddle_init(); + } + if (uVar5 != 0) { + procTactPlayEnd_init(-2); + } else if (sceneMode == 6) { + ship->setStartModeThrow(); + } else if ((sceneMode == 4) || (sceneMode == 5)) { + mDemo.setDemoType(4); + mDoAud_subBgmStop(); + procShipRestart_init(); + } else if (startMode == 9) { + ship->setStartModeWarp(); + local_38.set(current.pos.x, current.pos.y + 1500.0f, current.pos.z); + fpc_ProcID uVar8 = + fopAcM_create(PROC_TORNADO, 2, &local_38, fopAcM_GetRoomNo(this)); + ship->setTactWarpID(uVar8); + } + } + } else if (startMode == 4) { + mDemo.setDemoType(4); + mDoAud_bgmStart(JA_BGM_I_MAJU_JAIL); + procLargeDamage_init(-7, 0, 0, 0); + } else if ((sceneMode == 4) || (sceneMode == 5)) { + if (changeSwimProc()) { + procSwimWait_init(0); + m34C2 = 0; + } else { + current.pos.y = mAcch.GetGroundH(); + mDemo.setDemoType(4); + mDoAud_subBgmStop(); + procLargeDamageUp_init(((4 - sceneMode) >> 5) - 2, 1, 0, 0); + } + } else if ((startMode == 1) || (startMode == 5)) { + if (mEventIdx == 0xFF) { + mVelocity = g_dComIfG_gameInfo.save.getRestart().getLastSpeedF(); + mDemo.setDemoType(4); + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK0E_e); + mDemo.setMoveAngle(current.angle.y); + mDemo.setTimer(0x23); + if (changeSwimProc()) { + if (startMode == 1) { + mVelocity = 0.5f * daPy_HIO_swim_c0::m.field_0xC; + } + speedF = mVelocity; + procSwimMove_init(0); + } else if (startMode == 1) { + mVelocity = daPy_HIO_move_c0::m.field_0x2C * daPy_HIO_move_c0::m.field_0x18; + speedF = mVelocity; + procMove_init(); + } else if (sceneMode == 2) { + m34E8 = shape_angle.y; + procCrawlMove_init(0, 0); + } else if (sceneMode == 3) { + shape_angle.y += 0x8000; + current.angle.y = shape_angle.y; + m34DE = shape_angle.y; + m34E8 = shape_angle.y + 0x8000; + procCrawlMove_init(0, 0); + } else { + if (mVelocity > daPy_HIO_move_c0::m.field_0x18) { + mVelocity = daPy_HIO_move_c0::m.field_0x18; + } + speedF = mVelocity; + procMove_init(); + } + } else if (changeSwimProc()) { + procSwimWait_init(0); + m34C2 = 0; + } else { + procWait_init(); + } + } else if (startMode == 7) { + local_44.set(current.pos.x + 200.0f * cM_ssin(shape_angle.y), 150.0f + current.pos.y, + current.pos.z + 200.0f * cM_scos(shape_angle.y)); + dComIfGs_setRestartRoom(local_44, shape_angle.y, getStartRoomNo()); + procVomitJump_init(1); + mAcch.ClrGroundHit(); + } else if (startMode == 0xd) { + procSmallJump_init(1); + } else if (startMode == 0xf) { + procSlowFall_init(); + } else if (startMode == 0xe) { + mDemo.setDemoType(4); + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK01_e); + procWait_init(); + csXyz auStack_58(0, 0, 0); + fpc_ProcID fVar11 = fopAcM_createChild(PROC_FM, fopAcM_GetID(this), 0, ¤t.pos, + fopAcM_GetRoomNo(this), &auStack_58, NULL, 0xFF, 0); + if (fVar11 != fpcM_ERROR_PROCESS_ID_e) { + onNoResetFlg0(daPyFlg0_NO_DRAW); + } + } else if (changeSwimProc()) { + procSwimWait_init(0); + m34C2 = 0; + } else if (current.pos.y - mAcch.GetGroundH() > 30.1f) { + procFall_init(1, 0.0f); + } else { + procWait_init(); + } + m_old_fdata->initOldFrameMorf(0.0f, 0, 0x2A); + setWorldMatrix(); + mpCLModelData->getJointNodePointer(0)->setMtxCalc(m_pbCalc[PART_UNDER_e]); + mpCLModelData->getJointNodePointer(0x02)->setMtxCalc(m_pbCalc[PART_UPPER_e]); + mpCLModelData->getJointNodePointer(0x1D)->setMtxCalc(m_pbCalc[PART_UNDER_e]); + checkOriginalHatAnimation(); + animeUpdate(); + mpCLModel->calc(); + mpKatsuraModel->setBaseTRMtx(mpCLModel->getAnmMtx(0xF)); + mpKatsuraModel->calc(); + mpYamuModel->setBaseTRMtx(mpCLModel->getAnmMtx(0xF)); + mpYamuModel->calc(); + setItemModel(); + mCyl.SetC(current.pos); + setAttentionPos(); + m3580 = dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd); + m357C = m3580; + if (sceneMode == 4) { + mDoMtx_multVecZero(mpCLModel->getAnmMtx(0), &local_50); + dComIfGp_particle_setP1(dPa_name::ID_SCENE_8089, &local_50); + } + if ((dComIfGs_getLastSceneMode() & 0x8000) != 0) { + changeDragonShield(0); + } else { + mTinkleShieldTimer = (s16)(dComIfGs_getLastSceneMode() >> 0x10); + } + if ((dComIfGs_getLastSceneMode() & 0x4000) != 0) { + onNoResetFlg1(daPyFlg1_UNK8000); + } + l_debug_keep_pos = current.pos; + l_debug_shape_angle = shape_angle; + l_debug_current_angle = current.angle; return cPhs_NEXT_e; } @@ -9919,8 +12889,84 @@ void daPy_lk_c::resetSeAnime() { } /* 80127E08-8012821C .text setMoveAnime__9daPy_lk_cFfffQ29daPy_lk_c8daPy_ANMQ29daPy_lk_c8daPy_ANMif */ -void daPy_lk_c::setMoveAnime(f32, f32, f32, daPy_ANM, daPy_ANM, int, f32) { - /* Nonmatching */ +int daPy_lk_c::setMoveAnime(f32 param_1, f32 param_2, f32 param_3, daPy_ANM param_4, daPy_ANM param_5, int param_6, f32 param_7) { + /* Nonmatching - regalloc */ + f32 fVar2; + f32 dVar7; + f32 dVar8; + f32 dVar10; + f32 dVar12; + f32 dVar15; + J3DAnmTransform* local_c8; + J3DAnmTransform* local_c4; + J3DAnmTransform* local_c0; + J3DAnmTransform* local_bc; + + J3DAnmTransform* pJVar4 = mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform(); + J3DFrameCtrl& frameCtrl0 = mFrameCtrlUnder[UNDER_MOVE0_e]; + J3DFrameCtrl& frameCtrl1 = mFrameCtrlUnder[UNDER_MOVE1_e]; + if (((m34C3 == 0) || (m34C3 == 9)) || (m34C3 == 10)) { + dVar15 = 0.0f; + } else { + dVar15 = pJVar4->getFrame() / pJVar4->getFrameMax(); + } + const daPy_anmIndex_c* pdVar5 = getAnmData(param_4); + const daPy_anmIndex_c* pdVar6 = getAnmData(param_5); + getUnderUpperAnime(pdVar5, &local_bc, &local_c0, 0, 0x2400); + getUnderUpperAnime(pdVar6, &local_c4, &local_c8, 1, 0x2400); + dVar7 = 1.0f; + fVar2 = (dVar7 - param_1); + mAnmRatioUnder[UNDER_MOVE0_e].setRatio(fVar2); + mAnmRatioUnder[UNDER_MOVE1_e].setRatio(param_1); + mAnmRatioUpper[UPPER_MOVE0_e].setRatio(fVar2); + mAnmRatioUpper[UPPER_MOVE1_e].setRatio(param_1); + dVar10 = local_bc->getFrameMax(); + dVar12 = local_c4->getFrameMax(); + dVar7 = (dVar7 / dVar10); + fVar2 = (param_2 + (param_1 * (((param_3 * dVar10) / dVar12) - param_2))); + param_2 = fVar2; + setFrameCtrl(&frameCtrl0, local_bc->getAttribute(), 0, dVar8, fVar2, (dVar15 * dVar10)); + local_bc->setFrame(frameCtrl0.getFrame()); + setFrameCtrl(&frameCtrl1, local_c4->getAttribute(), 0, dVar12, (dVar7 * (param_2 * dVar12)), + (dVar15 * dVar12)); + local_c4->setFrame(frameCtrl1.getFrame()); + mAnmRatioUnder[UNDER_MOVE0_e].setAnmTransform(local_bc); + mAnmRatioUnder[UNDER_MOVE1_e].setAnmTransform(local_c4); + if (local_c0 != NULL) { + dVar8 = local_c0->getFrameMax(); + mAnmRatioUpper[UPPER_MOVE0_e].setAnmTransform(local_c0); + setFrameCtrl(&mFrameCtrlUpper[UPPER_MOVE0_e], local_c0->getAttribute(), 0, param_3, + (dVar7 * (param_2 * dVar8)), (dVar15 * dVar8)); + local_c0->setFrame(mFrameCtrlUpper[UPPER_MOVE0_e].getFrame()); + } else { + mAnmRatioUpper[UPPER_MOVE0_e].setAnmTransform(local_bc); + } + if (local_c8 != NULL) { + dVar8 = local_c8->getFrameMax(); + mAnmRatioUpper[UPPER_MOVE1_e].setAnmTransform(local_c8); + setFrameCtrl(&mFrameCtrlUpper[UPPER_MOVE1_e], local_c8->getAttribute(), 0, param_3, + (dVar7 * (param_2 * dVar8)), (dVar15 * dVar8)); + local_c8->setFrame(mFrameCtrlUpper[UPPER_MOVE1_e].getFrame()); + } else { + mAnmRatioUpper[UPPER_MOVE1_e].setAnmTransform(local_c4); + } + if (param_7 >= 0.0f) { + m_old_fdata->initOldFrameMorf(param_7, 0, 0x2A); + } + if ((mDirection == DIR_BACKWARD) || + ((mCurProc == daPyProc_ROPE_SWING_e && (!checkModeFlg(ModeFlg_00000400))))) + { + setTextureAnime(mAnmDataTable[param_5].mTexAnmIdx, 0); + } else { + setTextureAnime(mAnmDataTable[param_4].mTexAnmIdx, 0); + } + if ((param_6 == 5) || (param_6 == 2)) { + setSeAnime(&m_anm_heap_under[UNDER_MOVE0_e], &frameCtrl0); + } else { + setSeAnime(&m_anm_heap_under[UNDER_MOVE1_e], &frameCtrl1); + } + m34C3 = param_6; + return true; } /* 8012821C-80128494 .text setSingleMoveAnime__9daPy_lk_cFQ29daPy_lk_c8daPy_ANMffsf */ @@ -10198,14 +13244,13 @@ void daPy_lk_c::setPlayerPosAndAngle(MtxP param_1) { /* 80128DC0-80128F8C .text endDemoMode__9daPy_lk_cFv */ void daPy_lk_c::endDemoMode() { - /* Nonmatching - missing clrlwi instruction */ if (mCurProc != daPyProc_LARGE_DAMAGE_e) { current.angle.y = shape_angle.y; } offNoResetFlg0(daPyFlg0_UNK100000); dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK10_e); mDemo.setDemoType(0); - mDemo.setDemoMode(0); + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK00_e); mDemo.setParam0(0); mDemo.setParam1(0); mDemo.setStick(1.0f); @@ -10230,23 +13275,22 @@ void daPy_lk_c::endDemoMode() { return; } if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { - if (dComIfGp_getShipActor() == NULL) { + daShip_c* ship = (daShip_c*)dComIfGp_getShipActor(); + if (ship == NULL) { checkNextMode(0); } else if (daPy_getPlayerActorClass() != this) { procControllWait_init(); - } else if (dComIfGp_getShipActor()->getPart() == daShip_c::PART_CANNON_e) { + } else if (ship->getPart() == daShip_c::PART_CANNON_e) { procShipCannon_init(); - } else if (dComIfGp_getShipActor()->getPart() == daShip_c::PART_CRANE_e) { + } else if (ship->getPart() == daShip_c::PART_CRANE_e) { procShipCrane_init(); - } else if (dComIfGp_getShipActor()->getPart() == daShip_c::PART_STEER_e) { + } else if (ship->getPart() == daShip_c::PART_STEER_e) { procShipSteer_init(); } else { procShipPaddle_init(); } - } else { - if (mCurProc == daPyProc_DEMO_BOSS_WARP_e) { - procWait_init(); - } + } else if (mCurProc == daPyProc_DEMO_BOSS_WARP_e) { + procWait_init(); } return; } From 534f5d4e72b584ef200d7d1f5ad66397accb6f71 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 7 May 2025 23:00:35 -0400 Subject: [PATCH 07/31] player_crawl and player_hammer 100%, misc player cleanup --- include/d/actor/d_a_npc_so.h | 4 +- include/d/actor/d_a_player.h | 5 +- src/d/actor/d_a_item.cpp | 2 +- src/d/actor/d_a_player_bow.inc | 18 +- src/d/actor/d_a_player_crawl.inc | 396 ++++++++++++------------ src/d/actor/d_a_player_dproc.inc | 7 +- src/d/actor/d_a_player_hammer.inc | 238 +++++++------- src/d/actor/d_a_player_hang.inc | 2 +- src/d/actor/d_a_player_main.cpp | 444 ++++++++++++--------------- src/d/actor/d_a_player_main_data.inc | 2 +- src/d/actor/d_a_player_npc.cpp | 16 +- src/d/actor/d_a_player_rope.inc | 62 ++-- 12 files changed, 549 insertions(+), 647 deletions(-) diff --git a/include/d/actor/d_a_npc_so.h b/include/d/actor/d_a_npc_so.h index e7cbf4501..25ec1c9f9 100644 --- a/include/d/actor/d_a_npc_so.h +++ b/include/d/actor/d_a_npc_so.h @@ -11,7 +11,7 @@ public: }; - void getMiniGameRestArrow() {} + int getMiniGameRestArrow() { return 10 - mB78; } void isAnm(signed char) {} void modeProcInit(int) {} @@ -128,6 +128,8 @@ public: public: /* Place member variables here */ + /* 0x290 */ u8 m290[0xB78 - 0x290]; + /* 0xB78 */ int mB78; }; class daNpc_So_HIO_c { diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index b19f27d6e..8628819e2 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -469,6 +469,7 @@ public: void offConfuse() { offNoResetFlg1(daPyFlg1_CONFUSE); } bool checkConfuse() const { return checkNoResetFlg1(daPyFlg1_CONFUSE); } bool checkFreezeState() const { return checkNoResetFlg1(daPyFlg1_FREEZE_STATE); } + bool checkUseArrowEffect() const { return checkNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT); } void onUseArrowEffect() { onNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT); } void offUseArrowEffect() { offNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT); } void onLetterReadEyeMove() { onNoResetFlg1(daPyFlg1_LETTER_READ_EYE_MOVE); } @@ -516,13 +517,9 @@ public: void checkBowMiniGame() const {} void checkSoupPowerUp() const {} void checkSubjectAccept() const {} - void checkUseArrowEffect() const {} void getRopeJumpLand() const {} void checkRopeForceEnd() const {} - // This class's weak virtual functions tend to cause weak function ordering issues in TUs that use them. - // The proper way to match this is still unknown, so some of the definitions have been temporarily commented out - // here so that they can be fakematched instead. virtual MtxP getLeftHandMatrix() = 0; virtual MtxP getRightHandMatrix() = 0; virtual f32 getGroundY() = 0; diff --git a/src/d/actor/d_a_item.cpp b/src/d/actor/d_a_item.cpp index 53d445a6e..ccb7e7caa 100644 --- a/src/d/actor/d_a_item.cpp +++ b/src/d/actor/d_a_item.cpp @@ -1287,7 +1287,7 @@ void daItem_c::mode_wait() { break; } - if (mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > current.pos.y || + if ((mAcch.ChkWaterHit() && mAcch.m_wtr.GetHeight() > current.pos.y) || (daSea_ChkArea(current.pos.x, current.pos.z) && daSea_calcWave(current.pos.x, current.pos.z) > current.pos.y)) { mode_water_init(); diff --git a/src/d/actor/d_a_player_bow.inc b/src/d/actor/d_a_player_bow.inc index f54d366d1..6d4d998e7 100644 --- a/src/d/actor/d_a_player_bow.inc +++ b/src/d/actor/d_a_player_bow.inc @@ -11,6 +11,7 @@ */ #include "d/actor/d_a_arrow.h" +#include "d/actor/d_a_npc_so.h" #include "d/actor/d_a_player_HIO.h" #include "d/actor/d_a_player_main.h" #include "d/d_procname.h" @@ -66,19 +67,16 @@ BOOL daPy_lk_c::checkBowAnime() const { /* 8014A080-8014A180 .text makeArrow__9daPy_lk_cFv */ void daPy_lk_c::makeArrow() { - /* Nonmatching - missing "cntlzw" instruction, "getItemPartner" */ - s32 uVar1 = (0x44 - mDemo.getDemoMode()) >> 5 & 0xff; - if (((uVar1 == 0) && (dComIfGs_getArrowNum() != 0)) || - ((uVar1 != 0 && ((((fopAc_ac_c*)dComIfGp_event_getItemPartner() != 0 && - (fopAcM_GetName(dComIfGp_event_getPt1()) == PROC_NPC_SO)) && - (0 < 10 - (dComIfGp_event_getPt1()->actor_type))))))) + /* Nonmatching - weird gameinfo load */ + BOOL r4 = mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK44_e; + if ((!r4 && dComIfGs_getArrowNum() != 0) || + (r4 && dComIfGp_event_getPt1() != NULL && fopAcM_GetName(dComIfGp_event_getPt1()) == PROC_NPC_SO && + ((daNpc_So_c*)dComIfGp_event_getPt1())->getMiniGameRestArrow() > 0)) { - fopAc_ac_c* arrow_p = (fopAc_ac_c*)fopAcM_fastCreate(PROC_ARROW, 0, ¤t.pos, - current.roomNo, NULL, NULL, -1, NULL); + fopAc_ac_c* arrow_p = (fopAc_ac_c*)fopAcM_fastCreate(PROC_ARROW, 0, ¤t.pos, current.roomNo); mActorKeepEquip.setData(arrow_p); } m355C = 0; - return; } /* 8014A180-8014A1CC .text deleteArrow__9daPy_lk_cFv */ @@ -172,7 +170,7 @@ BOOL daPy_lk_c::checkNextActionBowReady() { if (mFrameCtrlUpper[UPPER_MOVE2_e].getRate() < 0.01f) { if (m355E == 0 && bowButton() && (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK44_e || mEquipItem == getReadyItem()) && - !checkNoResetFlg1(daPyFlg1_USE_ARROW_EFFECT)) + !checkUseArrowEffect()) { setBowReloadAnime(); makeArrow(); diff --git a/src/d/actor/d_a_player_crawl.inc b/src/d/actor/d_a_player_crawl.inc index 7e886120c..984279238 100644 --- a/src/d/actor/d_a_player_crawl.inc +++ b/src/d/actor/d_a_player_crawl.inc @@ -35,8 +35,7 @@ f32 daPy_lk_c::getCrawlMoveSpeed() { if (fVar1 >= 17.0f) { fVar1 = fVar1 - 17.0f; } - return (daPy_HIO_crouch_c0::m.field_0x3C * mFrameCtrlUnder[UNDER_MOVE0_e].getRate()) * - cM_fsin((M_PI / 17) * fVar1); + return (daPy_HIO_crouch_c0::m.field_0x3C * mFrameCtrlUnder[UNDER_MOVE0_e].getRate()) * cM_fsin((M_PI / 17) * fVar1); } /* 80138868-801389D0 .text setCrawlMoveDirectionArrow__9daPy_lk_cFv */ @@ -145,9 +144,17 @@ BOOL daPy_lk_c::changeCrawlAutoMoveProc(cXyz* param_1) { var_r29 |= 8; } } - if (cM3d_Len2dSqPntAndSegLine(0.5f * (sp34.x + sp28.x), 0.5f * (sp34.z + sp28.z), sp70.x, - sp70.z, param_1->x - (75.0f * temp_f31), - param_1->z - (75.0f * temp_f30), &sp64.x, &sp64.z, &spC)) + if (cM3d_Len2dSqPntAndSegLine( + 0.5f * (sp34.x + sp28.x), + 0.5f * (sp34.z + sp28.z), + sp70.x, + sp70.z, + param_1->x - (75.0f * temp_f31), + param_1->z - (75.0f * temp_f30), + &sp64.x, + &sp64.z, + &spC + )) { sp64.y = current.pos.y; return procCrawlAutoMove_init(var_r29, &sp64); @@ -163,7 +170,7 @@ int daPy_lk_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2) { int iVar4 = dComIfG_Bgsp()->GetSpecialCode(mLinkLinChk); f32 fVar1 = triPla->GetNP()->y; bool bVar2; - if (!((fVar1 >= 0.5f) || (fVar1 < -0.8f))) { + if (!(fVar1 >= 0.5f || fVar1 < -0.8f)) { bVar2 = true; } else { bVar2 = false; @@ -175,7 +182,7 @@ int daPy_lk_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2) { param_2->y = local_3c.y; param_2->z = -dVar7 * triPla->GetNP()->z; return true; - } else if ((iVar4 == 1) || (fVar1 < 0.643832f && (iVar4 == 2))) { + } else if (iVar4 == 1 || (fVar1 < 0.643832f && iVar4 == 2)) { *param_2 = (*param_1 - mLinkLinChk.GetCross()); return true; } @@ -195,7 +202,7 @@ void daPy_lk_c::crawlBgCheck(cXyz* param_0, cXyz* param_1) { iVar1 = getCrawlMoveVec(&cStack_50, param_0, &cStack_44); mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &cStack_50); iVar2 = getCrawlMoveVec(&cStack_50, param_1, &cStack_38); - if ((iVar1 != 0) && (iVar2 != 0)) { + if (iVar1 != 0 && iVar2 != 0) { if (cStack_44.abs2() > cStack_38.abs()) { current.pos -= cStack_44; } else { @@ -209,7 +216,9 @@ void daPy_lk_c::crawlBgCheck(cXyz* param_0, cXyz* param_1) { } /* 801390B8-801392BC .text checkCrawlSideWall__9daPy_lk_cFP4cXyzP4cXyzP4cXyzP4cXyzPsPs */ -BOOL daPy_lk_c::checkCrawlSideWall(cXyz* param_1, cXyz* param_2, cXyz* param_3, cXyz* param_4, s16* param_5, s16* param_6) { +BOOL daPy_lk_c::checkCrawlSideWall( + cXyz* param_1, cXyz* param_2, cXyz* param_3, cXyz* param_4, s16* param_5, s16* param_6 +) { cXyz local_78; cXyz local_90; @@ -225,11 +234,9 @@ BOOL daPy_lk_c::checkCrawlSideWall(cXyz* param_1, cXyz* param_2, cXyz* param_3, *param_4 = mLinkLinChk.GetCross(); pfVar1 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); *param_6 = cM_atan2s(pfVar1->GetNP()->x, pfVar1->GetNP()->z); - cXyz local_9c = (*param_3 - *param_4); + cXyz local_9c = *param_3 - *param_4; f32 temp_f31 = local_9c.abs2XZ(); - if (cLib_distanceAngleS(*param_5, *param_6) > 0x7F00 && temp_f31 < 5625.0f && - temp_f31 > 3600.0f) - { + if (cLib_distanceAngleS(*param_5, *param_6) > 0x7F00 && temp_f31 < 5625.0f && temp_f31 > 3600.0f) { return true; } } @@ -242,7 +249,7 @@ void daPy_lk_c::setDoStatusCrawl() { dComIfGp_setRStatus(dActStts_CROUCH_e); if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x80)) { dComIfGp_setAStatus(dActStts_RETURN_e); - if (checkSubjectEnd(1) || (m35D0 > current.pos.y)) { + if (checkSubjectEnd(1) || m35D0 > current.pos.y) { dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK2000_e); } else { dComIfGp_setPlayerStatus0(0, daPyStts0_UNK2000_e); @@ -250,15 +257,13 @@ void daPy_lk_c::setDoStatusCrawl() { } else if (dCam_getBody()->ChangeModeOK(4)) { if (m35D0 <= current.pos.y) { onResetFlg0(daPyRFlg0_UNK4000000); - if (((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000))) && - (!dComIfGp_event_runCheck())) - { + if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000) && !dComIfGp_event_runCheck()) { setSubjectMode(); } } } - if ((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x80)) && - ((mCurProc != daPyProc_CRAWL_MOVE_e || (mProcVar0.m3570 == 0)))) + if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x80) && + (mCurProc != daPyProc_CRAWL_MOVE_e || mProcVar0.m3570 == 0)) { setBodyAngleToCamera(); if (mBodyAngle.x > 0) { @@ -267,7 +272,6 @@ void daPy_lk_c::setDoStatusCrawl() { } else { mBodyAngle.x = 0; } - return; } /* 80139424-801394F0 .text procCrawlStart_init__9daPy_lk_cFv */ @@ -301,9 +305,9 @@ BOOL daPy_lk_c::procCrawlStart() { local_20.y = 50.0f; mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &local_20, &cStack_38); crawlBgCheck(&cStack_38, &cStack_38); - if ((!spActionButton()) || (m35D0 > 15.0f + current.pos.y)) { + if (!spActionButton() || m35D0 > 15.0f + current.pos.y) { procCrawlEnd_init(0, shape_angle.x, shape_angle.z); - } else if ((mStickDistance > 0.05f) && + } else if (mStickDistance > 0.05f && ((mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) || (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > daPy_HIO_crouch_c0::m.field_0x28))) { @@ -372,10 +376,8 @@ BOOL daPy_lk_c::procCrawlMove_init(s16 param_0, s16 param_1) { /* 80139878-8013A004 .text procCrawlMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrawlMove() { - /* Nonmatching - cXyz */ J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE0_e]; float fVar1; - short sVar3; BOOL bVar4; BOOL bVar5; int iVar6; @@ -383,25 +385,32 @@ BOOL daPy_lk_c::procCrawlMove() { int iVar8; int iVar9; f32 dVar11; - cXyz aVStack_3c; - cXyz cStack_48; - cXyz VStack_54; - cXyz cStack_60; - cXyz cStack_6c; - cXyz cStack_d8; + cXyz sp124; + cXyz sp118; + cXyz sp10C; + cXyz sp100; + cXyz spF4; + cXyz spE8; + cXyz spDC; + cXyz spD0; + cXyz spC4; + cXyz spB8; + cXyz spAC; + cXyz spA0; + cXyz sp94; + cXyz sp88; setDoStatusCrawl(); - mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_stand_up_offset, &cStack_48); - mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_up_offset, &aVStack_3c); - mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_up_offset, &VStack_54); - mDoMtx_multVecSR(mpCLModel->getBaseTRMtx(), &l_crawl_min_side_offset, &cStack_60); - iVar6 = checkNotCrawlStand(&cStack_48); - iVar7 = checkNotCrawlStand(&aVStack_3c); - iVar8 = checkNotCrawlStand(&VStack_54); - if (((((iVar6 != 0) || (iVar7 != 0)) || (iVar8 != 0)) || - ((checkNotCrawlStand(&aVStack_3c, &cStack_60) || - (checkNotCrawlStand(&VStack_54, &cStack_60))))) || - (checkNotCrawlStand(&cStack_48, &cStack_60))) + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_stand_up_offset, &sp118); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_up_offset, &sp124); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_up_offset, &sp10C); + mDoMtx_multVecSR(mpCLModel->getBaseTRMtx(), &l_crawl_min_side_offset, &sp100); + iVar6 = checkNotCrawlStand(&sp118); + iVar7 = checkNotCrawlStand(&sp124); + iVar8 = checkNotCrawlStand(&sp10C); + if ((((iVar6 != 0 || iVar7 != 0) || iVar8 != 0) || + (checkNotCrawlStand(&sp124, &sp100) || checkNotCrawlStand(&sp10C, &sp100))) || + checkNotCrawlStand(&sp118, &sp100)) { bVar5 = false; onModeFlg(ModeFlg_04000000); @@ -409,9 +418,7 @@ BOOL daPy_lk_c::procCrawlMove() { bVar5 = true; offModeFlg(ModeFlg_04000000); } - if (((bVar5 != false) && (!spActionButton())) || - ((getSlidePolygon() != NULL || (m35D0 > current.pos.y + 15.0f)))) - { + if ((bVar5 != false && !spActionButton()) || (getSlidePolygon() != NULL || m35D0 > current.pos.y + 15.0f)) { procCrawlEnd_init(1, shape_angle.x, shape_angle.z); } else { bVar4 = false; @@ -423,7 +430,7 @@ BOOL daPy_lk_c::procCrawlMove() { } else { bVar4 = true; } - if (((bVar4 == true) || (frameCtrl.checkPass(0.0f))) || (frameCtrl.checkPass(17.0f))) { + if ((bVar4 == true || frameCtrl.checkPass(0.0f)) || frameCtrl.checkPass(17.0f)) { if (mStickDistance > 0.05f) { if (getDirectionFromShapeAngle() != 1) { frameCtrl.setRate(dVar11); @@ -433,49 +440,42 @@ BOOL daPy_lk_c::procCrawlMove() { frameCtrl.setLoop(frameCtrl.getEnd()); } initSeAnime(); - } else { - if (!bVar4) { - if (frameCtrl.checkPass(0.0f)) { - fVar1 = 0.0f; - } else { - fVar1 = 17.0f; - } - frameCtrl.setRate(0.0f); - frameCtrl.setFrame(fVar1); - ((mAnmRatioUnder[UNDER_MOVE0_e]).getAnmTransform())->setFrame(fVar1); + } else if (!bVar4) { + if (frameCtrl.checkPass(0.0f)) { + fVar1 = 0.0f; + } else { + fVar1 = 17.0f; } + frameCtrl.setRate(0.0f); + frameCtrl.setFrame(fVar1); + ((mAnmRatioUnder[UNDER_MOVE0_e]).getAnmTransform())->setFrame(fVar1); } } iVar9 = mProcVar0.m3570; mProcVar0.m3570 = 0; - cXyz spC0; - cXyz spB4; - cXyz spA8; - cXyz sp9C; - cXyz sp90; - s16 sp16; - s16 sp14; + s16 sp0A; + s16 sp08; - mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_side_offset, &spC0); - mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &cStack_6c); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_side_offset, &spE8); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_top_up_offset, &spF4); if (frameCtrl.getRate() >= 0.0f) { - sp90 = (aVStack_3c - cStack_6c) * 0.5f; + spB8 = (sp124 - spF4) * 0.5f; } else if (frameCtrl.getRate() < 0.0f) { - sp90 = (cStack_48 - cStack_6c) * 0.5f; + spB8 = (sp10C - spF4) * 0.5f; } - spC0 += sp90; - cStack_6c += sp90; - spB4 = (cStack_6c * 2.0f) - spC0; + spE8 += spB8; + spF4 += spB8; + spDC = (spF4 * 2.0f) - spE8; - if (((iVar9 == 0) && checkCrawlSideWall(&cStack_6c, &spC0, &spA8, &sp9C, &sp16, &sp14)) || - checkCrawlSideWall(&cStack_6c, &spB4, &sp9C, &spA8, &sp14, &sp16)) + if (!bVar5 && (checkCrawlSideWall(&spF4, &spE8, &spD0, &spC4, &sp0A, &sp08) || + checkCrawlSideWall(&spF4, &spDC, &spC4, &spD0, &sp08, &sp0A))) { mProcVar0.m3570 = 1; mResetFlg0 = mResetFlg0 | 0x1000; - m370C = ((spA8 + sp9C) * 0.5f) - sp90; - m34D4 = sp16 + 0x4000; + m370C = ((spD0 + spC4) * 0.5f) - spB8; + m34D4 = sp0A + 0x4000; } if (mProcVar0.m3570 != 0) { @@ -492,42 +492,37 @@ BOOL daPy_lk_c::procCrawlMove() { cLib_addCalc(¤t.pos.z, m370C.z, 0.5f, 10.0f, 1.0f); } } else { - if (((iVar9 != 0) && (iVar6 != 0)) && - ((iVar7 != 0 && - ((iVar8 != 0 && (iVar6 = changeCrawlAutoMoveProc(&cStack_6c), iVar6 != 0)))))) - { + if (iVar9 != 0 && iVar6 != 0 && iVar7 != 0 && iVar8 != 0 && changeCrawlAutoMoveProc(&spF4)) { return true; } - if ((mStickDistance > 0.05f) && (frameCtrl.getRate() > 0.0f)) { - cXyz sp20; - cXyz sp2C; - cXyz sp38; - sVar3 = shape_angle.y; + if (mStickDistance > 0.05f && (frameCtrl.getRate() > 0.0f)) { + s16 r24 = shape_angle.y; - cLib_addCalcAngleS(&shape_angle.y, m34E8, daPy_HIO_crouch_c0::m.field_0x8, - daPy_HIO_crouch_c0::m.field_0xA, - daPy_HIO_crouch_c0::m.field_0xC); + cLib_addCalcAngleS( + &shape_angle.y, + m34E8, + daPy_HIO_crouch_c0::m.field_0x8, + daPy_HIO_crouch_c0::m.field_0xA, + daPy_HIO_crouch_c0::m.field_0xC + ); - if (sVar3 != shape_angle.y) { - if ((s16)(sVar3 - shape_angle.y) > 0) { - cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_front_offset, &sp20); - cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_offset, &sp38); + if (shape_angle.y != r24) { + if ((s16)(shape_angle.y - r24) > 0) { + cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_front_offset, &spAC); + cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_lside_offset, &sp94); } else { - cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_front_offset, &sp20); - cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_offset, &sp38); + cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_front_offset, &spAC); + cMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_rside_offset, &sp94); } - mGndChk.SetPos(&sp20); - sp2C.set(sp20.x - sp38.x, dComIfG_Bgsp()->GroundCross(&mGndChk) - sp38.y, - sp20.z - sp38.z); + mGndChk.SetPos(&spAC); + spA0.set(spAC.x - sp94.x, dComIfG_Bgsp()->GroundCross(&mGndChk) - sp94.y, spAC.z - sp94.z); - if (cLib_distanceAngleS((cM_atan2s(-sp2C.x, sp2C.absXZ())), shape_angle.x) > - 0x800) - { - shape_angle.y = sVar3; + if (cLib_distanceAngleS((cM_atan2s(-spA0.y, spA0.absXZ())), shape_angle.x) > 0x800) { + shape_angle.y = r24; } - current.angle.y = shape_angle.y; } + current.angle.y = shape_angle.y; } } dVar11 = getCrawlMoveSpeed(); @@ -535,11 +530,11 @@ BOOL daPy_lk_c::procCrawlMove() { if (mVelocity < 0.0f) { mVelocity *= -1.0f; current.angle.y = shape_angle.y + 0x8000; - mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_offset, &cStack_d8); - crawlBgCheck(&cStack_d8, &VStack_54); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_back_offset, &sp88); + crawlBgCheck(&sp88, &sp10C); } else { - mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_offset, &cStack_d8); - crawlBgCheck(&cStack_d8, &aVStack_3c); + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &l_crawl_front_offset, &sp88); + crawlBgCheck(&sp88, &sp124); } } return true; @@ -569,7 +564,6 @@ BOOL daPy_lk_c::procCrawlAutoMove_init(int param_0, cXyz* param_1) { /* 8013A0F0-8013A630 .text procCrawlAutoMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrawlAutoMove() { - /* Nonmatching */ f32 fVar2; f32 fVar3; @@ -579,7 +573,7 @@ BOOL daPy_lk_c::procCrawlAutoMove() { s16 sVar4 = shape_angle.y; s16 sVar5 = current.angle.y; if (m34D0 > 0) { - if ((frameCtrl.checkPass(0.0f)) || (frameCtrl.checkPass(17.0f))) { + if (frameCtrl.checkPass(0.0f) || frameCtrl.checkPass(17.0f)) { fVar3 = 0.0f; if (frameCtrl.checkPass(0.0f)) { fVar2 = 0.0f; @@ -590,105 +584,102 @@ BOOL daPy_lk_c::procCrawlAutoMove() { frameCtrl.setFrame(fVar2); mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame(fVar2); mVelocity = fVar3; - } else { - if (std::fabsf(frameCtrl.getRate()) < 0.01f) { - mVelocity = 0.0f; - m34D0--; - } + } else if (std::fabsf(frameCtrl.getRate()) < 0.01f) { + mVelocity = 0.0f; + m34D0--; } setCrawlMoveDirectionArrow(); setDoStatusCrawl(); shape_angle.y = sVar4; current.angle.y = sVar5; - } else { - if (m34D0 == 0) { - setCrawlMoveDirectionArrow(); - if (mStickDistance > 0.05f) { - int direction = getDirectionFromShapeAngle(); - f32 fVar2 = cM_ssin(shape_angle.y); - f32 fVar3 = cM_scos(shape_angle.y); - if ((direction == DIR_LEFT) && ((mProcVar0.m3570 & 4))) { - m370C.x += 75.0f * fVar3; - m370C.z -= 75.0f * fVar2; - m34D4 = current.angle.y + 0x4000; - if (current.angle.y == shape_angle.y) { - m35A0 = 1.0f; - } else { - m35A0 = -1.0f; - } - m34D0 = -1; - } else if ((direction == DIR_RIGHT) && ((mProcVar0.m3570 & 8))) { - m370C.x -= 75.0f * fVar3; - m370C.z += 75.0f * fVar2; - m34D4 = current.angle.y + -0x4000; - if (current.angle.y == shape_angle.y) { - m35A0 = 1.0f; - } else { - m35A0 = -1.0f; - } - m34D0 = -1; - } else if (((mProcVar0.m3570 & 1)) && - (((shape_angle.y == current.angle.y && (direction == DIR_FORWARD)) || - ((shape_angle.y != current.angle.y && (direction == DIR_BACKWARD)))))) - { - m370C.x += 75.0f * cM_ssin(current.angle.y); - m370C.z += 75.0f * cM_scos(current.angle.y); - m34D4 = shape_angle.y; - m35A0 = 0.0f; - m34D0 = -1; - } else if (((shape_angle.y == current.angle.y) && (direction == DIR_BACKWARD)) || ((shape_angle.y != current.angle.y && (direction == DIR_FORWARD)))) { - current.angle.y += 0x8000; - m370C.x -= 75.0f * cM_ssin(current.angle.y); - m370C.z -= 75.0f * cM_scos(current.angle.y); - m34D4 = shape_angle.y; - m35A0 = 0.0f; - m34D0 = -1; + } else if (m34D0 == 0) { + setCrawlMoveDirectionArrow(); + if (mStickDistance > 0.05f) { + int direction = getDirectionFromShapeAngle(); + f32 fVar2 = cM_ssin(shape_angle.y); + f32 fVar3 = cM_scos(shape_angle.y); + if (direction == DIR_LEFT && (mProcVar0.m3570 & 4)) { + m370C.x += 75.0f * fVar3; + m370C.z -= 75.0f * fVar2; + m34D4 = current.angle.y + 0x4000; + if (current.angle.y == shape_angle.y) { + m35A0 = 1.0f; + } else { + m35A0 = -1.0f; } - if (m34D0 == -1) { - g_dComIfG_gameInfo.play.mDirection = 0; - if (shape_angle.y == current.angle.y) { - frameCtrl.setRate(2.0f); - frameCtrl.setLoop(0); - } else { - frameCtrl.setRate(-2.0f); - frameCtrl.setLoop(frameCtrl.getEnd()); - } - initSeAnime(); + m34D0 = -1; + } else if (direction == DIR_RIGHT && (mProcVar0.m3570 & 8)) { + m370C.x -= 75.0f * fVar3; + m370C.z += 75.0f * fVar2; + m34D4 = current.angle.y + -0x4000; + if (current.angle.y == shape_angle.y) { + m35A0 = 1.0f; + } else { + m35A0 = -1.0f; } - } else { - setDoStatusCrawl(); - shape_angle.y = sVar4; - current.angle.y = sVar5; + m34D0 = -1; + } else if ((mProcVar0.m3570 & 1) && ((shape_angle.y == current.angle.y && direction == DIR_FORWARD) || + (shape_angle.y != current.angle.y && direction == DIR_BACKWARD))) + { + m370C.x += 75.0f * cM_ssin(current.angle.y); + m370C.z += 75.0f * cM_scos(current.angle.y); + m34D4 = shape_angle.y; + m35A0 = 0.0f; + m34D0 = -1; + } else if ((shape_angle.y == current.angle.y && direction == DIR_BACKWARD) || + (shape_angle.y != current.angle.y && direction == DIR_FORWARD)) + { + current.angle.y += 0x8000; + m370C.x -= 75.0f * cM_ssin(current.angle.y); + m370C.z -= 75.0f * cM_scos(current.angle.y); + m34D4 = shape_angle.y; + m35A0 = 0.0f; + m34D0 = -1; + } + if (m34D0 == -1) { + g_dComIfG_gameInfo.play.mDirection = 0; + if (shape_angle.y == current.angle.y) { + frameCtrl.setRate(2.0f); + frameCtrl.setLoop(0); + } else { + frameCtrl.setRate(-2.0f); + frameCtrl.setLoop(frameCtrl.getEnd()); + } + initSeAnime(); } } else { - BOOL bVar1 = true; - if (m34D6 > 0) { - m34D6--; + setDoStatusCrawl(); + shape_angle.y = sVar4; + current.angle.y = sVar5; + } + } else { + BOOL bVar1 = true; + if (m34D6 > 0) { + m34D6--; + } + if (std::fabsf(m35A0) > 0.5f) { + if (cLib_addCalcAngleS(&shape_angle.y, m34D4, 5, 0x480, 0x80)) { + bVar1 = 0; } - if (std::fabsf(m35A0) > 0.5f) { - if (cLib_addCalcAngleS(&shape_angle.y, m34D4, 5, 0x480, 0x80)) { - bVar1 = 0; - } - if (m35A0 < -0.5f) { - current.angle.y = shape_angle.y + 0x8000; - } else { - current.angle.y = shape_angle.y; - } - cLib_addCalc(¤t.pos.x, m370C.x, 0.5f, 3.0f, 1.0f); - cLib_addCalc(¤t.pos.z, m370C.z, 0.5f, 3.0f, 1.0f); - } - cXyz local_28 = m370C - current.pos; - if (cLib_distanceAngleS(cM_atan2s(local_28.x, local_28.z), current.angle.y) < 0x6000) { - bVar1 = false; - } - mVelocity = getCrawlMoveSpeed(); - if (mVelocity < 0.0f) { - mVelocity *=-1.0f; + if (m35A0 < -0.5f) { current.angle.y = shape_angle.y + 0x8000; + } else { + current.angle.y = shape_angle.y; } - if ((bVar1 != 0) || (m34D6 == 0)) { - procCrawlMove_init(shape_angle.x, shape_angle.z); - } + cLib_addCalc(¤t.pos.x, m370C.x, 0.5f, 3.0f, 1.0f); + cLib_addCalc(¤t.pos.z, m370C.z, 0.5f, 3.0f, 1.0f); + } + cXyz local_28 = m370C - current.pos; + if (cLib_distanceAngleS(cM_atan2s(local_28.x, local_28.z), current.angle.y) < 0x6000) { + bVar1 = false; + } + mVelocity = getCrawlMoveSpeed(); + if (mVelocity < 0.0f) { + mVelocity *= -1.0f; + current.angle.y = shape_angle.y + 0x8000; + } + if (bVar1 != 0 || m34D6 == 0) { + procCrawlMove_init(shape_angle.x, shape_angle.z); } } return true; @@ -710,13 +701,18 @@ BOOL daPy_lk_c::procCrawlEnd_init(int param_1, s16 param_2, s16 param_3) { } else { fVar1 = -1.0f; } - setSingleMoveAnime(ANM_LIE, daPy_HIO_crouch_c0::m.field_0x40, daPy_HIO_crouch_c0::m.field_0x44, - daPy_HIO_crouch_c0::m.field_0xE, fVar1); + setSingleMoveAnime( + ANM_LIE, + daPy_HIO_crouch_c0::m.field_0x40, + daPy_HIO_crouch_c0::m.field_0x44, + daPy_HIO_crouch_c0::m.field_0xE, + fVar1 + ); if (param_1 == 0) { if (daPy_HIO_crouch_c0::m.field_0x44 > dVar4) { dVar4 = daPy_HIO_crouch_c0::m.field_0x44; } else if (daPy_HIO_crouch_c0::m.field_0xE <= dVar4) { - dVar4 = (daPy_HIO_crouch_c0::m.field_0xE - 0.001f); + dVar4 = daPy_HIO_crouch_c0::m.field_0xE - 0.001f; } mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(dVar4); mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform()->setFrame(dVar4); @@ -738,14 +734,12 @@ BOOL daPy_lk_c::procCrawlEnd() { m35E4 = m35A0 * (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - daPy_HIO_crouch_c0::m.field_0x48); if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() > -0.01f) { checkNextMode(0); - } else { - if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < daPy_HIO_crouch_c0::m.field_0x48) { - if (!checkNextMode(1)) { - m34C2 = 1; - } - } else { + } else if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < daPy_HIO_crouch_c0::m.field_0x48) { + if (!checkNextMode(1)) { m34C2 = 1; } + } else { + m34C2 = 1; } return true; } diff --git a/src/d/actor/d_a_player_dproc.inc b/src/d/actor/d_a_player_dproc.inc index 384665f01..64a7e00bc 100644 --- a/src/d/actor/d_a_player_dproc.inc +++ b/src/d/actor/d_a_player_dproc.inc @@ -884,8 +884,11 @@ BOOL daPy_lk_c::dProcDead() { dGameover_c* this_01; cLib_chaseF(&m35A0, 0.0f, 0.01f); f32 dVar3 = 1.0f - m35A0; - if ((m3628 != fpcM_ERROR_PROCESS_ID_e) && (this_01 = (dGameover_c*)fopMsgM_SearchByID(m3628), this_01)) { - this_01->setBackAlpha(dVar3); + if ((m3628 != fpcM_ERROR_PROCESS_ID_e)) { + this_01 = (dGameover_c*)fopMsgM_SearchByID(m3628); + if (this_01) { + this_01->setBackAlpha(dVar3); + } } if (((m35A0 < 0.38f) && (m3628 != fpcM_ERROR_PROCESS_ID_e)) && (this_01 = (dGameover_c*)fopMsgM_SearchByID(m3628), this_01)) diff --git a/src/d/actor/d_a_player_hammer.inc b/src/d/actor/d_a_player_hammer.inc index dba878f8d..5241f420a 100644 --- a/src/d/actor/d_a_player_hammer.inc +++ b/src/d/actor/d_a_player_hammer.inc @@ -61,29 +61,27 @@ void daPy_lk_c::setHammerQuake(cBgS_PolyInfo* param_1, const cXyz* param_2, int } mDoAud_seStart(JA_SE_LK_HAMMER_HIT, &mSwordTopPos, iVar6, mReverb); } - if ((param_1 != NULL) && (m355C == 0)) { + if (param_1 != NULL && m355C == 0) { mDoMtx_stack_c::transS(param_2->x, param_2->y, param_2->z); - mDoMtx_stack_c::ZXYrotM(getGroundAngle(param_1, shape_angle.y), shape_angle.y, - getGroundAngle(param_1, shape_angle.y + -0x4000)); + mDoMtx_stack_c::ZXYrotM( + getGroundAngle(param_1, shape_angle.y), shape_angle.y, getGroundAngle(param_1, shape_angle.y + -0x4000) + ); mDoMtx_stack_c::transM(0.0f, 0.0f, -30.0f); local_38.x = mDoMtx_stack_c::now[0][3]; local_38.y = mDoMtx_stack_c::now[1][3]; local_38.z = mDoMtx_stack_c::now[2][3]; - if ((!fopAcM_getWaterY(&local_38, &local_54)) || (local_54 < (5.0f + local_38.y))) { + if (!fopAcM_getWaterY(&local_38, &local_54) || (local_54 < (5.0f + local_38.y))) { emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0214, &local_38); if (emitter != NULL) { - JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, - emitter->mGlobalTranslation); + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation); } emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0215, &local_38); if (emitter != NULL) { - JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, - emitter->mGlobalTranslation); + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation); } emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0216, &local_38); if (emitter != NULL) { - JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, - emitter->mGlobalTranslation); + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation); } bVar2 = false; } else { @@ -95,17 +93,17 @@ void daPy_lk_c::setHammerQuake(cBgS_PolyInfo* param_1, const cXyz* param_2, int if (bVar2) { attrib_code = dBgS_Attr_WATER_e; dComIfGp_particle_setP1(dPa_name::ID_COMMON_027C, &local_38); - dComIfGp_particle_setShipTail(dPa_name::ID_COMMON_003D, &local_38, NULL, NULL, 0xFF, - &dPa_control_c::mSingleRippleEcallBack); + dComIfGp_particle_setShipTail( + dPa_name::ID_COMMON_003D, &local_38, NULL, NULL, 0xFF, &dPa_control_c::mSingleRippleEcallBack + ); } else { attrib_code = dComIfG_Bgsp()->GetAttributeCode(*param_1); } - emitter = dComIfGp_particle_setSimpleLand(attrib_code, &local_38, NULL, 1.0f, 1.0f, 1.0f, - &tevStr, &iStack_58, 0x1E); + emitter = + dComIfGp_particle_setSimpleLand(attrib_code, &local_38, NULL, 1.0f, 1.0f, 1.0f, &tevStr, &iStack_58, 0x1E); if (emitter != NULL) { - JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, - emitter->mGlobalTranslation); - if ((attrib_code == dBgS_Attr_WATER_e) || (attrib_code == dBgS_Attr_GRASS_e)) { + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation); + if (attrib_code == dBgS_Attr_WATER_e || attrib_code == dBgS_Attr_GRASS_e) { emitter->setRate(60.0f); emitter->setSpread(1.0f); if (attrib_code == dBgS_Attr_WATER_e) { @@ -128,7 +126,6 @@ void daPy_lk_c::setHammerQuake(cBgS_PolyInfo* param_1, const cXyz* param_2, int } m355C = 1; dKy_Sound_set(current.pos, 500, fopAcM_GetID(this), 10); - return; } /* 801508FC-80150B60 .text setHammerWaterSplash__9daPy_lk_cFv */ @@ -136,27 +133,26 @@ void daPy_lk_c::setHammerWaterSplash() { f32 local_50; cXyz local_28; - if ((mCurProc != daPyProc_HAMMER_FRONT_SWING_e) || - (m35EC <= mFrameCtrlUnder[UNDER_MOVE0_e].getRate())) - { + if (mCurProc != daPyProc_HAMMER_FRONT_SWING_e || (m35EC <= mFrameCtrlUnder[UNDER_MOVE0_e].getRate())) { return; } if (m355C == 0) { local_28 = m36C4 - mSwordTopPos; local_28.normalize(); local_28 = mSwordTopPos + (local_28 * 30.0f); - if ((fopAcM_getWaterY(&local_28, &local_50)) && (local_50 >= local_28.y + 5.0f)) { + if (fopAcM_getWaterY(&local_28, &local_50) && local_50 >= local_28.y + 5.0f) { local_28.y += 150.0f; mGndChk.SetPos(&local_28); if (!(local_50 < dComIfG_Bgsp()->GroundCross(&mGndChk) + 5.0f)) { local_28.y = local_50; dComIfGp_particle_setP1(dPa_name::ID_COMMON_027C, &local_28); - dComIfGp_particle_setShipTail(dPa_name::ID_COMMON_003D, &local_28, NULL, NULL, 0xFF, - &dPa_control_c::mSingleRippleEcallBack); + dComIfGp_particle_setShipTail( + dPa_name::ID_COMMON_003D, &local_28, NULL, NULL, 0xFF, &dPa_control_c::mSingleRippleEcallBack + ); GXColor amb, dif; dKy_get_seacolor(&amb, &dif); - JPABaseEmitter* emitter = dComIfGp_particle_setP1( - dPa_name::ID_COMMON_0023, &local_28, NULL, NULL, 0xFF, NULL, -1, &amb); + JPABaseEmitter* emitter = + dComIfGp_particle_setP1(dPa_name::ID_COMMON_0023, &local_28, NULL, NULL, 0xFF, NULL, -1, &amb); if (emitter != NULL) { emitter->setRate(60.0f); emitter->setSpread(1.0f); @@ -168,7 +164,6 @@ void daPy_lk_c::setHammerWaterSplash() { } } } - return; } /* 80150B60-80150C40 .text procHammerSideSwing_init__9daPy_lk_cFv */ @@ -200,45 +195,43 @@ BOOL daPy_lk_c::procHammerSideSwing() { mDirection = DIR_RIGHT; checkNextMode(0); return true; - } else { - if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > daPy_HIO_ham_c0::m.field_0x10) { - f32 dVar4 = mVelocity; - u8 orig_direction = mDirection; - mVelocity = 0.0f; - mDirection = DIR_RIGHT; - if (checkNextMode(1)) { - return true; - } - mVelocity = dVar4; - mDirection = orig_direction; - } - if (changeCutReverseProc(ANM_CUTREL)) { - setHammerQuake(NULL, NULL, -1); + } + if (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() > daPy_HIO_ham_c0::m.field_0x10) { + f32 dVar4 = mVelocity; + u8 orig_direction = mDirection; + mVelocity = 0.0f; + mDirection = DIR_RIGHT; + if (checkNextMode(1)) { return true; - } else { - if (mpAttnActorLockOn != NULL) { - setShapeAngleToAtnActor(); - m34D4 = shape_angle.y; - } else { - cLib_addCalcAngleS( - &shape_angle.y, - m34D4, - daPy_HIO_turn_c0::m.field_0x4, - daPy_HIO_turn_c0::m.field_0x0, - daPy_HIO_turn_c0::m.field_0x2 - ); - } - current.angle.y = shape_angle.y; - if ((mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() >= daPy_HIO_ham_c0::m.field_0x18) && - (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < daPy_HIO_ham_c0::m.field_0x1C)) - { - if (!checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)) { - onResetFlg0(daPyRFlg0_UNK1); - seStartSwordCut(JA_SE_LK_HAMMER_SWING); - } - onResetFlg0(daPyRFlg0_UNK2); - } } + mVelocity = dVar4; + mDirection = orig_direction; + } + if (changeCutReverseProc(ANM_CUTREL)) { + setHammerQuake(NULL, NULL, -1); + return true; + } + if (mpAttnActorLockOn != NULL) { + setShapeAngleToAtnActor(); + m34D4 = shape_angle.y; + } else { + cLib_addCalcAngleS( + &shape_angle.y, + m34D4, + daPy_HIO_turn_c0::m.field_0x4, + daPy_HIO_turn_c0::m.field_0x0, + daPy_HIO_turn_c0::m.field_0x2 + ); + } + current.angle.y = shape_angle.y; + if ((mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() >= daPy_HIO_ham_c0::m.field_0x18) && + (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() < daPy_HIO_ham_c0::m.field_0x1C)) + { + if (!checkNoResetFlg0(daPyFlg0_CUT_AT_FLG)) { + onResetFlg0(daPyRFlg0_UNK1); + seStartSwordCut(JA_SE_LK_HAMMER_SWING); + } + onResetFlg0(daPyRFlg0_UNK2); } return true; } @@ -255,7 +248,7 @@ BOOL daPy_lk_c::procHammerFrontSwingReady_init() { ); current.angle.y = shape_angle.y; mVelocity = 0.0f; - if (mpAttention->Lockon() || (mStickDistance <= 0.05f)) { + if (mpAttention->Lockon() || mStickDistance <= 0.05f) { m34D4 = shape_angle.y; } else { m34D4 = m34E8; @@ -273,22 +266,21 @@ BOOL daPy_lk_c::procHammerFrontSwingReady() { m35EC = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { return procHammerFrontSwing_init(); - } else { - if (mpAttnActorLockOn != NULL) { - setShapeAngleToAtnActor(); - m34D4 = shape_angle.y; - } else { - cLib_addCalcAngleS( - &shape_angle.y, - m34D4, - daPy_HIO_turn_c0::m.field_0x4, - daPy_HIO_turn_c0::m.field_0x0, - daPy_HIO_turn_c0::m.field_0x2 - ); - } - current.angle.y = shape_angle.y; - return true; } + if (mpAttnActorLockOn != NULL) { + setShapeAngleToAtnActor(); + m34D4 = shape_angle.y; + } else { + cLib_addCalcAngleS( + &shape_angle.y, + m34D4, + daPy_HIO_turn_c0::m.field_0x4, + daPy_HIO_turn_c0::m.field_0x0, + daPy_HIO_turn_c0::m.field_0x2 + ); + } + current.angle.y = shape_angle.y; + return true; } /* 80150F98-801510DC .text procHammerFrontSwing_init__9daPy_lk_cFv */ @@ -304,7 +296,7 @@ BOOL daPy_lk_c::procHammerFrontSwing_init() { current.angle.y = shape_angle.y; mVelocity = 0.0f; voiceStart(1); - if (mpAttention->Lockon() || (mStickDistance <= 0.05f)) { + if (mpAttention->Lockon() || mStickDistance <= 0.05f) { m34D4 = shape_angle.y; } else { m34D4 = m34E8; @@ -322,66 +314,53 @@ BOOL daPy_lk_c::procHammerFrontSwing_init() { /* 801510DC-801513D4 .text procHammerFrontSwing__9daPy_lk_cFv */ BOOL daPy_lk_c::procHammerFrontSwing() { - /* Nonmatching - regalloc */ - f32 fVar1; - f32 fVar2; - f32 fVar3; - f32 fVar4; - int iVar5; - int iVar6; - int iVar7; - f32 dVar8; - f32 dVar10; - cXyz local_58; - m35EC = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); - fVar1 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate(); - if (fVar1 < 0.01f) { + f32 f1 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate(); + if (f1 < 0.01f) { if (m34D0 == 0) { - procHammerFrontSwingEnd_init(); + return procHammerFrontSwingEnd_init(); } else { m34D0--; } return true; } - if ((m35EC > fVar1) && (changeCutReverseProc(ANM_CUTREL))) { + if (m35EC > f1 && changeCutReverseProc(ANM_CUTREL)) { if (mCurProc == daPyProc_HAMMER_FRONT_SWING_e) { - local_58.set(mSwordTopPos.x, current.pos.y + 300.0f, mSwordTopPos.z); - mGndChk.SetPos(&local_58); - dVar8 = dComIfG_Bgsp()->GroundCross(&mGndChk); - local_58.y = dVar8; - if (dVar8 > mSwordTopPos.y) { - iVar5 = -1; - iVar7 = 0; - dVar8 = 300.0f; - dVar10 = C_BG_MIN_HEIGHT; - for (iVar6 = 0; iVar6 < mSwBlur.field_0x014; iVar6++, iVar7++) { - local_58.set(mSwBlur.field_0x034[iVar7].x, dVar8 + mSwBlur.field_0x034[iVar7].y, - mSwBlur.field_0x034[iVar7].z); - mGndChk.SetPos(&local_58); - local_58.y = dComIfG_Bgsp()->GroundCross(&mGndChk); - if ((dVar10 != local_58.y) && (mSwBlur.field_0x034[iVar7].y > local_58.y)) { - iVar5 = dComIfG_Bgsp()->GetMtrlSndId(mGndChk); + cXyz sp08(mSwordTopPos.x, current.pos.y + 300.0f, mSwordTopPos.z); + mGndChk.SetPos(&sp08); + sp08.y = dComIfG_Bgsp()->GroundCross(&mGndChk); + if (sp08.y > mSwordTopPos.y) { + int r27; + int r26; + r26 = -1; + f32 f30 = 300.0f; + f32 f31 = C_BG_MIN_HEIGHT; + for (r27 = 0; r27 < mSwBlur.field_0x014; r27++) { + sp08.set(mSwBlur.field_0x034[r27].x, f30 + mSwBlur.field_0x034[r27].y, mSwBlur.field_0x034[r27].z); + mGndChk.SetPos(&sp08); + sp08.y = dComIfG_Bgsp()->GroundCross(&mGndChk); + if (f31 != sp08.y && mSwBlur.field_0x034[r27].y > sp08.y) { + r26 = dComIfG_Bgsp()->GetMtrlSndId(mGndChk); break; } } - fVar1 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate(); - fVar3 = (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - fVar1) - 0.1f * iVar6 * fVar1; - if ((iVar6 != 0) && (iVar6 < mSwBlur.field_0x014)) { - fVar2 = (&mSwBlur.field_0x034[0])[iVar6].y; - fVar4 = (&mSwBlur.field_0x028)[iVar6].y - fVar2; - if (std::abs(fVar4) > 1.0f) { - fVar3 = fVar3 + 0.1f * (1.0f - (local_58.y - fVar2) / fVar4) * fVar1; + f32 f4 = mFrameCtrlUnder[UNDER_MOVE0_e].getRate(); + f32 f5 = (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() - f4) - 0.1f * (r27 * f4); + if (r27 != 0 && r27 < mSwBlur.field_0x014) { + f32 f6 = mSwBlur.field_0x034[r27].y - mSwBlur.field_0x034[r27 - 1].y; + if (std::abs(f6) > 1.0f) { + f32 temp = (1.0f - (sp08.y - (&mSwBlur.field_0x034[0])[r27 - 1].y) / f6); + f5 = f5 + 0.1f * (temp * f4); } } - if (fVar3 < 0.0f) { - fVar3 = 0.0f; + if (f5 < 0.0f) { + f5 = 0.0f; } - mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(fVar3); + mFrameCtrlUnder[UNDER_MOVE0_e].setFrame(f5); mFrameCtrlUnder[UNDER_MOVE0_e].setRate(0.0f); - m35EC = fVar3; + m35EC = f5; m34D0 = 10; - setHammerQuake(&mGndChk, &local_58, iVar5); + setHammerQuake(&mGndChk, &sp08, r26); return true; } } else { @@ -393,8 +372,13 @@ BOOL daPy_lk_c::procHammerFrontSwing() { setShapeAngleToAtnActor(); m34D4 = shape_angle.y; } else { - cLib_addCalcAngleS(&shape_angle.y, m34D4, daPy_HIO_turn_c0::m.field_0x4, - daPy_HIO_turn_c0::m.field_0x0, daPy_HIO_turn_c0::m.field_0x2); + cLib_addCalcAngleS( + &shape_angle.y, + m34D4, + daPy_HIO_turn_c0::m.field_0x4, + daPy_HIO_turn_c0::m.field_0x0, + daPy_HIO_turn_c0::m.field_0x2 + ); } current.angle.y = shape_angle.y; onResetFlg0(daPyRFlg0_UNK2); diff --git a/src/d/actor/d_a_player_hang.inc b/src/d/actor/d_a_player_hang.inc index 1fa3fedc8..03bb0a907 100644 --- a/src/d/actor/d_a_player_hang.inc +++ b/src/d/actor/d_a_player_hang.inc @@ -495,7 +495,7 @@ BOOL daPy_lk_c::procHangMove() { cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); s16 sVar6 = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z) + 0x8000; if (sVar6 != shape_angle.y) { - if ((short)(current.angle.y - shape_angle.y) > 0) { + if ((s16)(current.angle.y - shape_angle.y) > 0) { current.angle.y = sVar6 + 0x4000; } else { current.angle.y = sVar6 + -0x4000; diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 322f26275..6c137e973 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -658,7 +658,7 @@ u16 daPy_lk_c::checkNormalFace() { if (mFace != daPyFace_UNKNOWN) { return mFace; } - if ((checkResetFlg0(daPyRFlg0_UNK40000))) { + if (checkResetFlg0(daPyRFlg0_UNK40000)) { return daPyFace_TMABAG; } if (checkUpperAnime(LKANM_BCK_GRABWAITB)) { @@ -667,7 +667,7 @@ u16 daPy_lk_c::checkNormalFace() { if (checkUpperAnime(LKANM_BCK_GRABWAIT)) { return daPyFace_TMABAE; } - if ((daPy_dmEcallBack_c::checkCurse()) || (checkRestHPAnime())) { + if ((daPy_dmEcallBack_c::checkCurse()) || checkRestHPAnime()) { return daPyFace_TMABAF; } if (checkNoDamageMode()) { @@ -682,14 +682,14 @@ u16 daPy_lk_c::checkNormalFace() { if (checkNoResetFlg0(daPyFlg0_HEAVY_STATE)) { return daPyFace_TMABAH; } - if (checkNoResetFlg1(daPyFlg1_UNK1000000) && (!checkModeFlg(ModeFlg_00000001))) { + if (checkNoResetFlg1(daPyFlg1_UNK1000000) && !checkModeFlg(ModeFlg_00000001)) { return daPyFace_TDASHKAZE; } if (((checkUpperReadyAnime() || ((checkNoResetFlg1(daPyFlg1_UNK400) || - ((mpAttnActorLockOn != NULL) && + (mpAttnActorLockOn != NULL && (fopAcM_GetGroup(mpAttnActorLockOn) == fopAc_ENEMY_e))))) || - (checkEquipHeavyBoots())) || - (mEquipItem == dItem_SKULL_HAMMER_e)) + checkEquipHeavyBoots()) || + mEquipItem == dItem_SKULL_HAMMER_e) { return daPyFace_TMABAC; } @@ -716,12 +716,12 @@ u16 daPy_lk_c::checkNormalFace() { return daPyFace_TMABACC; } } - if ((mCurProc == daPyProc_WAIT_e) && (!dComIfGp_event_runCheck())) { + if (mCurProc == daPyProc_WAIT_e && !dComIfGp_event_runCheck()) { f32 dVar7 = cM_rnd(); - if ((((m_tex_anm_heap.mIdx == LKANM_BTP_TMABAA) || - (m_tex_anm_heap.mIdx == LKANM_BTP_TMABAB)) && - (dVar7 < 0.01f)) || - (((m_tex_anm_heap.mIdx == LKANM_BTP_TMABACC && (dVar7 >= 0.01f))))) + if (((m_tex_anm_heap.mIdx == LKANM_BTP_TMABAA || + m_tex_anm_heap.mIdx == LKANM_BTP_TMABAB) && + dVar7 < 0.01f) || + (((m_tex_anm_heap.mIdx == LKANM_BTP_TMABACC && dVar7 >= 0.01f)))) { return daPyFace_TMABACC; } @@ -744,9 +744,9 @@ void daPy_lk_c::setTextureAnime(u16 param_1, int param_2) { } u16 btp_idx = mTexAnmIndexTable[param_1].mBtpIdx; u16 btk_idx = mTexAnmIndexTable[param_1].mBtkIdx; - if (((param_1 < 0x13) && - (checkMabaAnimeBtp(m_tex_anm_heap.mIdx))) && - (mFace == daPyFace_UNKNOWN)) + if ((param_1 < 0x13 && + checkMabaAnimeBtp(m_tex_anm_heap.mIdx)) && + mFace == daPyFace_UNKNOWN) { param_2 = m3530; bVar3 = true; @@ -754,19 +754,19 @@ void daPy_lk_c::setTextureAnime(u16 param_1, int param_2) { bVar3 = false; } if (m_tex_anm_heap.mIdx == btp_idx) { - if ((mFace == daPyFace_UNKNOWN) && (!checkModeFlg(ModeFlg_00000100 | ModeFlg_00000400))) { + if (mFace == daPyFace_UNKNOWN && !checkModeFlg(ModeFlg_00000100 | ModeFlg_00000400)) { m3530 = param_2; } } else { m_tex_anm_heap.mIdx = btp_idx; - if ((m_tex_anm_heap.field_0x2 == 0xFFFF) && (m_tex_anm_heap.field_0x4 == 0xFFFF)) { + if (m_tex_anm_heap.field_0x2 == 0xFFFF && m_tex_anm_heap.field_0x4 == 0xFFFF) { setTextureAnimeResource(loadTextureAnimeResource(btp_idx, 0), param_2); } } dVar9 = cM_rnd(); if (m_tex_scroll_heap.mIdx != btk_idx) { - if ((((bVar3) && (checkModeFlg(ModeFlg_00000001))) && (daPy_matAnm_c::m_maba_flg != 0)) && - (((!dComIfGp_event_runCheck() && (mpAttnActorLockOn == NULL)) && (btk_idx == LKANM_BTK_TMABA)))) + if ((((bVar3) && checkModeFlg(ModeFlg_00000001)) && daPy_matAnm_c::m_maba_flg != 0) && + (((!dComIfGp_event_runCheck() && mpAttnActorLockOn == NULL) && btk_idx == LKANM_BTK_TMABA))) { if (daPy_matAnm_c::m_maba_timer == 0) { if (dVar9 < 0.44f) { @@ -834,7 +834,6 @@ void daPy_lk_c::setTextureAnime(u16 param_1, int param_2) { setTextureScrollResource(loadTextureScrollResource(m_tex_scroll_heap.mIdx, 0), 0); daPy_matAnm_c::onMabaFlg(); } - return; } /* 80104E08-80104EC8 .text setPriTextureAnime__9daPy_lk_cFUsi */ @@ -919,7 +918,6 @@ void daPy_lk_c::resetDemoTextureAnime() { } } } - return; } /* 80105164-80105220 .text setTextureScrollResource__9daPy_lk_cFP19J3DAnmTextureSRTKeyi */ @@ -1019,7 +1017,6 @@ void daPy_lk_c::playTextureAnime() { m3532 = mpTexScrollResData->getFrameMax(); } } - return; } /* 8010552C-8010558C .text checkPlayerGuard__9daPy_lk_cCFv */ @@ -1048,7 +1045,6 @@ void daPy_lk_c::setOutPower(f32 param_1, s16 param_2, int param_3) { if (param_3 != 0) { onNoResetFlg1(daPyFlg1_UNK10000000); } - return; } /* 801056E4-80105814 .text checkSightLine__9daPy_lk_cFfP4cXyz */ @@ -1094,7 +1090,6 @@ void daPy_lk_c::setBootsModel(J3DModel** pBootModels) { /* 80105910-80106660 .text setItemModel__9daPy_lk_cFv */ s32 daPy_lk_c::setItemModel() { - /* Nonmatching - regalloc */ f32 fVar1; f32 fVar2; f32 dVar15; @@ -1134,8 +1129,7 @@ s32 daPy_lk_c::setItemModel() { if (mEquipItem == daPyItem_UNK10A_e) { mDoMtx_stack_c::transS(50.0f, -48.0f, -14.0f); mDoMtx_stack_c::XYZrotM(-0x33FC, -0x2CC, 0x3519); - mDoMtx_stack_c::revConcat(dComIfGp_getShipActor()->mpHeadAnm->getModel()->getAnmMtx(0) + - 0x1e); + mDoMtx_stack_c::revConcat(dComIfGp_getShipActor()->mpHeadAnm->getModel()->getAnmMtx(0x0A)); mpEquipItemModel->setBaseTRMtx(mDoMtx_stack_c::get()); } else if (mEquipItem == daPyItem_UNK104_e) { mDoMtx_stack_c::transS(14.5f, 34.5f, 0.0f); @@ -1156,73 +1150,66 @@ s32 daPy_lk_c::setItemModel() { } else { mpEquipItemModel->setBaseTRMtx(mpCLModel->getAnmMtx(0xF)); } - } else if ((mEquipItem == dItem_DEKU_LEAF_e) || (mEquipItem == daPyItem_SWORD_e) || - (mEquipItem == dItem_WIND_WAKER_e) || - ((mEquipItem == dItem_SKULL_HAMMER_e || (mEquipItem == dItem_HOOKSHOT_e) || - ((mEquipItem == dItem_TINGLE_TUNER_e || - ((checkBottleItem(mEquipItem) || (checkPhotoBoxItem(mEquipItem))))))))) + } else if (mEquipItem == dItem_DEKU_LEAF_e || mEquipItem == daPyItem_SWORD_e || + mEquipItem == dItem_WIND_WAKER_e || mEquipItem == dItem_SKULL_HAMMER_e || + mEquipItem == dItem_HOOKSHOT_e || mEquipItem == dItem_TINGLE_TUNER_e || + checkBottleItem(mEquipItem) || checkPhotoBoxItem(mEquipItem)) { mpEquipItemModel->setBaseTRMtx(pMVar13); - if ((mEquipItem == dItem_DEKU_LEAF_e) && - ((mCurProc != daPyProc_FAN_SWING_e && (mCurProc != daPyProc_FAN_GLIDE_e)))) + if (mEquipItem == dItem_DEKU_LEAF_e && + (mCurProc != daPyProc_FAN_SWING_e && mCurProc != daPyProc_FAN_GLIDE_e)) { setShapeFanLeaf(); - } else { - if (checkBottleItem(mEquipItem)) { - if (mpBottleContentsModel != NULL) { - if (mEquipItem == dItem_FIREFLY_BOTTLE_e) { - cXyz bottleScale; // ? - fVar1 = - 1.0f + - 0.1f * cM_ssin(cM_rad2s(((37.699112f * mpEquipItemBrk->getFrame()) / - mpEquipItemBrk->getFrameMax()))); - bottleScale.setall(fVar1); - mDoMtx_stack_c::transS(11.0f, 0.0f, 0.0f); - mDoMtx_stack_c::revConcat(pMVar13); - mpBottleContentsModel->setBaseTRMtx(mDoMtx_stack_c::get()); - mpBottleContentsModel->setBaseScale(bottleScale); - simpleAnmPlay(mpEquipItemBrk); - } else { - mpBottleContentsModel->setBaseTRMtx(pMVar13); - } - } - if (mpBottleCapModel != NULL) { - mpBottleCapModel->setBaseTRMtx(pMVar13); - } - } else { - if ((mEquipItem == dItem_HOOKSHOT_e) && (pfVar11 != NULL)) { - if (fopAcM_GetParam(pfVar11) != 0) { - if (fopAcM_GetParam(pfVar11) == 1) { - m35EC += 1.0f; - } else { - m35EC -= 1.0f; - } - fVar2 = (mSwordAnim.getBckAnm()->getFrameMax()); - fVar1 = m35EC; - if (fVar1 < 0.0f) { - m35EC = fVar1 + fVar2; - } else if (fVar1 >= fVar2) { - m35EC = fVar1 - fVar2; - } - } - } else if ((mEquipItem == dItem_WIND_WAKER_e) && - ((mCurProc != daPyProc_TACT_WAIT_e && (mpEquipItemBrk != NULL)))) - { - fVar1 = mpEquipItemBrk->getFrame() - 1.0f; - if (fVar1 < 0.0f) { - fVar1 = 0.0f; - } - mpEquipItemBrk->setFrame(fVar1); + } else if (checkBottleItem(mEquipItem)) { + if (mpBottleContentsModel != NULL) { + if (mEquipItem == dItem_FIREFLY_BOTTLE_e) { + cXyz bottleScale; // ? + fVar1 = + 1.0f + 0.1f * cM_ssin(cM_rad2s( + (37.699112f * mpEquipItemBrk->getFrame()) / mpEquipItemBrk->getFrameMax() + )); + bottleScale.setall(fVar1); + mDoMtx_stack_c::transS(11.0f, 0.0f, 0.0f); + mDoMtx_stack_c::revConcat(pMVar13); + mpBottleContentsModel->setBaseTRMtx(mDoMtx_stack_c::get()); + mpBottleContentsModel->setBaseScale(bottleScale); + simpleAnmPlay(mpEquipItemBrk); + } else { + mpBottleContentsModel->setBaseTRMtx(pMVar13); } } + if (mpBottleCapModel != NULL) { + mpBottleCapModel->setBaseTRMtx(pMVar13); + } + } else if ((mEquipItem == dItem_HOOKSHOT_e) && (pfVar11 != NULL)) { + if (fopAcM_GetParam(pfVar11) != 0) { + if (fopAcM_GetParam(pfVar11) == 1) { + m35EC += 1.0f; + } else { + m35EC -= 1.0f; + } + fVar2 = (mSwordAnim.getBckAnm()->getFrameMax()); + fVar1 = m35EC; + if (fVar1 < 0.0f) { + m35EC = fVar1 + fVar2; + } else if (fVar1 >= fVar2) { + m35EC = fVar1 - fVar2; + } + } + } else if ((mEquipItem == dItem_WIND_WAKER_e) && + (mCurProc != daPyProc_TACT_WAIT_e && (mpEquipItemBrk != NULL))) + { + fVar1 = mpEquipItemBrk->getFrame() - 1.0f; + if (fVar1 < 0.0f) { + fVar1 = 0.0f; + } + mpEquipItemBrk->setFrame(fVar1); } + } else if (checkBowItem(mEquipItem)) { + mpEquipItemModel->setBaseTRMtx(pMVar6); } else { - if (checkBowItem(mEquipItem)) { - mpEquipItemModel->setBaseTRMtx(pMVar6); - } else { - if (mEquipItem == daPyItem_UNK102_e) { - mpEquipItemModel->setBaseTRMtx(mpCLModel->getAnmMtx(0x4)); - } + if (mEquipItem == daPyItem_UNK102_e) { + mpEquipItemModel->setBaseTRMtx(mpCLModel->getAnmMtx(0x4)); } } if ((mSwordAnim.getBckAnm() != NULL) && (mCurProc != daPyProc_DEMO_TALISMAN_WAIT_e)) { @@ -1238,17 +1225,17 @@ s32 daPy_lk_c::setItemModel() { } } mpEquippedSwordModel = mpSwgripmsModel; - s32 lVar12; + s32 r27; if (!checkSwordEquip()) { - lVar12 = 0; + r27 = 0; mSwgripmsabBckAnim.entry(mpSwgripmsModel->getModelData(), 0.0f); mpTswgripmsabBrk->setFrame(0.0f); } else { if (checkNormalSwordEquip()) { - lVar12 = 1; + r27 = 1; mpEquippedSwordModel = mpSwgripaModel; } else if (checkFinalMasterSwordEquip()) { - lVar12 = 3; + r27 = 3; mSwgripmsabBckAnim.entry(mpSwgripmsModel->getModelData(), 1.0f); mpTswgripmsabBrk->setFrame(1.0f); if ((mpEquipItemModel != NULL) && (mEquipItem == daPyItem_SWORD_e)) { @@ -1261,10 +1248,10 @@ s32 daPy_lk_c::setItemModel() { } else { if (dComIfGs_getSelectEquip(0) == dItem_MASTER_SWORD_2_e) { mSwgripmsabBckAnim.entry(mpSwgripmsModel->getModelData(), 1.0f); - lVar12 = 4; + r27 = 4; } else { mSwgripmsabBckAnim.entry(mpSwgripmsModel->getModelData(), 0.0f); - lVar12 = 2; + r27 = 2; } mpTswgripmsabBrk->setFrame(0.0f); if ((mpEquipItemModel != NULL) && (mEquipItem == daPyItem_SWORD_e)) { @@ -1286,17 +1273,18 @@ s32 daPy_lk_c::setItemModel() { } if (mEquipItem == daPyItem_SWORD_e) { mpEquippedSwordModel->setBaseTRMtx(pMVar13); - mDoAud_zelAudio_c::getInterface()->setLinkSwordType(lVar12, 1); + mDoAud_zelAudio_c::getInterface()->setLinkSwordType(r27, 1); } else { mDoMtx_stack_c::transS(-11.25f, 4.5f, 0.45f); mDoMtx_stack_c::ZrotM(-0x1C71); mDoMtx_stack_c::revConcat(pMVar14); mpEquippedSwordModel->setBaseTRMtx(mDoMtx_stack_c::get()); - mDoAud_zelAudio_c::getInterface()->setLinkSwordType(lVar12, 2); + mDoAud_zelAudio_c::getInterface()->setLinkSwordType(r27, 2); } mpEquippedSwordModel->calc(); + int r27_2; if (dComIfGs_getSelectEquip(1) == dItem_MIRROR_SHIELD_e) { - lVar12 = 2; + r27_2 = 2; mpEquippedShieldModel = mpShmsModel; if (mpTshmsBtk != NULL) { dVar16 = mpTshmsBtk->getFrame(); @@ -1309,24 +1297,24 @@ s32 daPy_lk_c::setItemModel() { } } } else if (dComIfGs_getSelectEquip(1) != dItem_NONE_e) { - lVar12 = 1; + r27_2 = 1; mpEquippedShieldModel = mpShaModel; } else { - lVar12 = 0; + r27_2 = 0; mpEquippedShieldModel = mpShaModel; } if (mCurProc == daPyProc_DEMO_LAST_COMBO_e) { mpEquippedShieldModel->setBaseTRMtx(mpCLModel->getBaseTRMtx()); - mDoAud_zelAudio_c::getInterface()->setLinkShieldType(lVar12, 1); + mDoAud_zelAudio_c::getInterface()->setLinkShieldType(r27_2, 1); } else if ((((mCurProc != daPyProc_DEMO_TOOL_e) && (mEquipItem == daPyItem_SWORD_e)) || ((mCurProc == daPyProc_DEMO_TOOL_e && (m34D4 == 1)))) || (((checkPlayerGuard() && (mEquipItem != dItem_SKULL_HAMMER_e)) || (mCurProc == daPyProc_GUARD_CRASH_e)))) { mpEquippedShieldModel->setBaseTRMtx(pMVar6); - mDoAud_zelAudio_c::getInterface()->setLinkShieldType(lVar12, 1); + mDoAud_zelAudio_c::getInterface()->setLinkShieldType(r27_2, 1); } else { - if (lVar12 == 2) { + if (r27_2 == 2) { mDoMtx_stack_c::transS(15.5f, 4.75f, -0.2f); } else { mDoMtx_stack_c::transS(15.5f, 4.75f, 0.0f); @@ -1334,7 +1322,7 @@ s32 daPy_lk_c::setItemModel() { mDoMtx_stack_c::ZrotM(-0x4000); mDoMtx_stack_c::revConcat(pMVar14); mpEquippedShieldModel->setBaseTRMtx(mDoMtx_stack_c::get()); - if ((lVar12 == 2) && (((m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_WALK || + if ((r27_2 == 2) && (((m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_WALK || (m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_WALKS)) || ((m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_DASHS || (m_anm_heap_under[UNDER_MOVE0_e].mIdx == LKANM_BCK_DASH)))))) @@ -1353,7 +1341,7 @@ s32 daPy_lk_c::setItemModel() { mDoMtx_stack_c::now[2][3] = dVar17; mpEquippedShieldModel->setBaseTRMtx(mDoMtx_stack_c::get()); } - mDoAud_zelAudio_c::getInterface()->setLinkShieldType(lVar12, 2); + mDoAud_zelAudio_c::getInterface()->setLinkShieldType(r27_2, 2); } mAtngshaBck.entry(mpEquippedShieldModel->getModelData(), m35E8); mpEquippedShieldModel->calc(); @@ -1538,7 +1526,6 @@ void daPy_lk_c::hideHatAndBackle(J3DMaterial* param_1) { if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) { mpCLModelData->getJointNodePointer(0x29)->getMesh()->getShape()->hide(); } - return; } /* 80106D8C-80106E50 .text drawMirrorLightModel__9daPy_lk_cFv */ @@ -1551,7 +1538,6 @@ void daPy_lk_c::drawMirrorLightModel() { dComIfGd_getXluList()->entryImm(&mMirrorPacket, 0xFF); updateDLSetLight(mpYmsls00Model, 0); } - return; } /* 80106E50-80107210 .text drawShadow__9daPy_lk_cFv */ @@ -1626,7 +1612,6 @@ void daPy_lk_c::drawShadow() { } } } - return; } /* 80107210-8010728C .text offBodyEffect__9daPy_lk_cFv */ @@ -1647,7 +1632,6 @@ void daPy_lk_c::offBodyEffect() { return; } m3460[1].getEmitter()->stopDrawParticle(); - return; } /* 8010728C-80107308 .text onBodyEffect__9daPy_lk_cFv */ @@ -1668,7 +1652,6 @@ void daPy_lk_c::onBodyEffect() { return; } m3460[1].getEmitter()->playDrawParticle(); - return; } /* 80107308-80108204 .text draw__9daPy_lk_cFv */ @@ -2023,7 +2006,6 @@ void daPy_lk_c::setAtnList() { if (mpAttnEntryZ != NULL) { mpAttnActorZ = mpAttnEntryZ->getActor(); } - return; } /* 8010841C-8010848C .text setActor__16daPy_actorKeep_cFv */ @@ -2165,7 +2147,6 @@ void daPy_lk_c::setDoStatusBasic() { } } } - return; } /* 801088E8-80108A9C .text setDoStatus__9daPy_lk_cFv */ @@ -2212,7 +2193,6 @@ void daPy_lk_c::setDoStatus() { } } setDoStatusBasic(); - return; } /* 80108A9C-80108B08 .text getDirectionFromAngle__9daPy_lk_cFs */ @@ -2290,7 +2270,6 @@ void daPy_lk_c::setNormalSpeedF(f32 param_1, f32 param_2, f32 param_3, f32 param } else { cLib_addCalc(&mVelocity, dVar6, param_2, temp_f3, param_4); } - return; } /* 80108D80-8010959C .text posMoveFromFootPos__9daPy_lk_cFv */ @@ -2333,7 +2312,7 @@ void daPy_lk_c::posMoveFromFootPos() { dVar14 = cM_ssin(m34E0); dVar12 = cM_scos(m34E0); for (iVar7 = 0; iVar7 < 2; iVar7++) { - local_90 = (local_78[0] + local_b4); + local_90 = local_78[0] + local_b4; local_b4 *= 0.5f; local_78[iVar7].x = mDoMtx_stack_c::now[1][3]; local_78[iVar7].y = mDoMtx_stack_c::now[1][3] - dVar14; @@ -2344,7 +2323,7 @@ void daPy_lk_c::posMoveFromFootPos() { } else { m34BC = 1; } - local_c0 = (local_b4 - mFootData[0].field_0x018); + local_c0 = local_b4 - mFootData[0].field_0x018; dVar12 = local_c0.absXZ(); if ((m3598 < 1.0f) && (std::abs(m35B4 - mStickDistance) < 0.2f)) { dVar12 = ((dVar12 * 0.3f) + 0.7f * m359C); @@ -2422,7 +2401,7 @@ void daPy_lk_c::posMoveFromFootPos() { if (checkHeavyStateOn()) { speed.y += gravity * 2.25f; if (speed.y < (maxFallSpeed * 1.5f)) { - speed.y = (maxFallSpeed * 1.5f); + speed.y = maxFallSpeed * 1.5f; } } else { speed.y += gravity; @@ -2440,7 +2419,6 @@ void daPy_lk_c::posMoveFromFootPos() { } m359C = dVar12; } - return; } /* 8010959C-80109E80 .text posMove__9daPy_lk_cFv */ @@ -2592,7 +2570,6 @@ void daPy_lk_c::posMove() { current.pos.y += local_a0.y; } } - return; } /* 80109E80-80109ED8 .text setShapeAngleToAtnActor__9daPy_lk_cFv */ @@ -2684,7 +2661,7 @@ void daPy_lk_c::setBodyAngleXReadyAnime() { mDoMtx_multVecZero(mpCLModel->getAnmMtx(0x2), &local_1c); if (mpAttnActorLockOn != NULL) { - local_28 = (mpAttnActorLockOn->eyePos - local_1c); + local_28 = mpAttnActorLockOn->eyePos - local_1c; local_28.y = local_28.y - 20.0f; if (local_28.abs() < 1.0f) { sVar3 = 0; @@ -2700,7 +2677,6 @@ void daPy_lk_c::setBodyAngleXReadyAnime() { sVar3 = 0; } cLib_addCalcAngleS(&mBodyAngle.x, sVar3, 4, 0xc00, 0x180); - return; } /* 8010A4D4-8010A96C .text setSpeedAndAngleNormal__9daPy_lk_cFs */ @@ -2714,7 +2690,7 @@ void daPy_lk_c::setSpeedAndAngleNormal(s16 param_1) { if (mStickDistance > 0.05f) { bVar2 = false; - dVar11 = (mStickDistance * mStickDistance); + dVar11 = mStickDistance * mStickDistance; if (checkHeavyStateOn()) { dVar11 *= 1.0f / (daPy_HIO_move_c0::m.field_0x80 * daPy_HIO_move_c0::m.field_0x80); } @@ -2804,7 +2780,6 @@ void daPy_lk_c::setSpeedAndAngleNormal(s16 param_1) { } setNormalSpeedF(dVar9, daPy_HIO_move_c0::m.field_0x24, daPy_HIO_move_c0::m.field_0x1C, daPy_HIO_move_c0::m.field_0x20); - return; } /* 8010A96C-8010AA90 .text setSpeedAndAngleAtn__9daPy_lk_cFv */ @@ -2890,7 +2865,6 @@ void daPy_lk_c::setSpeedAndAngleAtnActor() { daPy_HIO_atnMove_c0::m.field_0x10, daPy_HIO_atnMove_c0::m.field_0x14 ); - return; } /* 8010AC8C-8010ACEC .text setFrameCtrl__9daPy_lk_cFP12J3DFrameCtrlUcssff */ @@ -2939,7 +2913,7 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { } f32 dVar18 = (std::abs(mVelocity * fVar1) / mMaxNormalSpeed); J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE1_e]; - if ((dComIfGp_event_runCheck()) || (mDemo.getDemoType() != 0)) { + if (dComIfGp_event_runCheck() || (mDemo.getDemoType() != 0)) { dVar17 = daPy_HIO_move_c0::m.field_0x44; dVar16 = daPy_HIO_move_c0::m.field_0x64; } else if (checkHeavyStateOn()) { @@ -2956,7 +2930,7 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { } else if (checkHeavyStateOn()) { if (((m373C.abs2XZ() > 25.0f) && (cLib_distanceAngleS(cM_atan2s(m373C.x, m373C.z), shape_angle.y) >= 0x4000)) || - (((checkNoResetFlg1(daPyFlg1_UNK10000000)) && (m3644 > 5.0f)) && + ((checkNoResetFlg1(daPyFlg1_UNK10000000) && m3644 > 5.0f) && (cLib_distanceAngleS(m3640, shape_angle.y) >= 0x4000))) { dVar10 = ANM_WALKHBOOTSKAZE; @@ -2973,7 +2947,7 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { offNoResetFlg1(daPyFlg1_UNK1000000); } } - } else if ((m3580 != 8) && (m34E2 <= -0x11C7)) { + } else if (m3580 != 8 && m34E2 <= -0x11C7) { dVar10 = ANM_WALKSLOPE; dVar9 = ANM_WALKSLOPE; if (!checkNoResetFlg1(daPyFlg1_UNK80)) { @@ -2983,9 +2957,9 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { } else { dVar10 = ANM_WALK; dVar14 = m3730.abs2XZ(); - if (((dVar14 > 25.0f) && + if ((dVar14 > 25.0f && (cLib_distanceAngleS(cM_atan2s(m3730.x, m3730.z), shape_angle.y) >= 0x4000)) || - (((checkNoResetFlg1(daPyFlg1_UNK10000000)) && (m3644 > 5.0f)) && + ((checkNoResetFlg1(daPyFlg1_UNK10000000) && m3644 > 5.0f) && (cLib_distanceAngleS(m3640, shape_angle.y) >= 0x4000))) { dVar9 = ANM_DASHKAZE; @@ -3021,11 +2995,11 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { } else { bVar3 = false; } - if ((mStickDistance < 0.05f) && - ((dVar14 >= 25.0f || ((dVar14 >= 0.09f && ((m34C3 == 9 || (m34C3 == 10)))))))) + if (mStickDistance < 0.05f && + ((dVar14 >= 25.0f || ((dVar14 >= 0.09f && ((m34C3 == 9 || m34C3 == 10))))))) { seStartMapInfo(JA_SE_LK_SLIP_SUS); - if (((m34C3 != 9) && (bVar3)) || ((m34C3 != 10 && (!bVar3)))) { + if ((m34C3 != 9 && (bVar3)) || ((m34C3 != 10 && (!bVar3)))) { if (bVar3) { setSingleMoveAnime(ANM_SLIPICE, daPy_HIO_iceSlip_c0::m.field_0x10, daPy_HIO_iceSlip_c0::m.field_0x14, @@ -3052,14 +3026,14 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { if (m34C3 == 9) { param_1 = daPy_HIO_basic_c0::m.field_0xC; } - if ((dVar18 < daPy_HIO_move_c0::m.field_0x2C) || (checkHeavyStateOn())) { + if (dVar18 < daPy_HIO_move_c0::m.field_0x2C || checkHeavyStateOn()) { if (checkHeavyStateOn()) { - dVar14 = (dVar18 / daPy_HIO_move_c0::m.field_0x80); + dVar14 = dVar18 / daPy_HIO_move_c0::m.field_0x80; if (dVar14 > 0.55f) { bVar4 = true; } } else { - dVar14 = (dVar18 / daPy_HIO_move_c0::m.field_0x2C); + dVar14 = dVar18 / daPy_HIO_move_c0::m.field_0x2C; } dVar11 = ANM_WAITS; if (checkModeFlg(ModeFlg_00000001)) { @@ -3073,8 +3047,8 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { } fVar1 = m3598 = 0.0f; iVar6 = 2; - if (((checkNoResetFlg1(daPyFlg1_CONFUSE)) && (mDemo.getDemoType() == 0)) && - (!dComIfGp_event_runCheck())) + if ((checkNoResetFlg1(daPyFlg1_CONFUSE) && (mDemo.getDemoType() == 0)) && + !dComIfGp_event_runCheck()) { if (m_anm_heap_under[UNDER_MOVE0_e].mIdx != LKANM_BCK_WAITQ) { setSingleMoveAnime(ANM_WAITQ, daPy_HIO_move_c0::m.field_0x84, fVar1, -1, @@ -3083,7 +3057,7 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { } return; } - if ((shape_angle.y != m34DE) && (!mpAttention->Lockon())) { + if (shape_angle.y != m34DE && !mpAttention->Lockon()) { sVar5 = (s16)(shape_angle.y - m34DE); if (sVar5 > 0) { dVar10 = ANM_ATNWLS; @@ -3167,7 +3141,6 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { setHandModel(dVar10); } } - return; } /* 8010B798-8010BB08 .text setBlendAtnBackMoveAnime__9daPy_lk_cFf */ @@ -3209,7 +3182,7 @@ void daPy_lk_c::setBlendAtnBackMoveAnime(f32 param_1) { dVar6 = fVar1; setMoveAnime(fVar1, daPy_HIO_atnMoveB_c0::m.field_0x24, daPy_HIO_atnMoveB_c0::m.field_0x28, ANM_ATNWB, ANM_ATNDB, 4, param_1); - m3598 = (1.0f - dVar6); + m3598 = 1.0f - dVar6; if ((frameCtrl.checkPass(5.0f)) || (frameCtrl.checkPass(15.0f))) { onResetFlg0(daPyRFlg0_RIGHT_FOOT_ON_GROUND); } else if ((frameCtrl.checkPass(3.0f)) || (frameCtrl.checkPass(13.0f))) { @@ -3237,7 +3210,6 @@ void daPy_lk_c::setBlendAtnBackMoveAnime(f32 param_1) { resetFootEffect(); } setHandModel(ANM_ATNDB); - return; } /* 8010BB08-8010C010 .text setBlendAtnMoveAnime__9daPy_lk_cFf */ @@ -3352,7 +3324,7 @@ void daPy_lk_c::setBlendAtnMoveAnime(f32 param_1) { fVar3 = 1.9f * daPy_HIO_atnMove_c0::m.field_0x2C; onResetFlg0(daPyRFlg0_UNK40000); } else { - fVar3 = (daPy_HIO_atnMove_c0::m.field_0x2C * dVar11); + fVar3 = daPy_HIO_atnMove_c0::m.field_0x2C * dVar11; } setMoveAnime(1.0f, fVar3, fVar3, dVar9, dVar9, 4, dVar6); m3598 = 0.0f; @@ -3382,7 +3354,6 @@ void daPy_lk_c::setBlendAtnMoveAnime(f32 param_1) { } setHandModel(dVar9); } - return; } /* 8010C010-8010C100 .text setAnimeEquipSword__9daPy_lk_cFi */ @@ -3606,7 +3577,6 @@ void daPy_lk_c::setFallVoice() { setTextureAnime(0x56, 0); } } - return; } /* 8010C7F4-8010C854 .text keepItemData__9daPy_lk_cFv */ @@ -3975,7 +3945,6 @@ void daPy_lk_c::checkItemAction() { } } } - return; } /* 8010D754-8010D810 .text getSlidePolygon__9daPy_lk_cFv */ @@ -4372,7 +4341,6 @@ void daPy_lk_c::setShieldGuard() { } else { mCyl.OffTgShield(); } - return; } /* 8010E75C-8010E7C4 .text checkItemModeActorPointer__9daPy_lk_cFv */ @@ -4396,7 +4364,6 @@ BOOL daPy_lk_c::checkNextActionItemFly() { checkNextActionBoomerangFly(); } } - return; } /* 8010E828-8010EC78 .text checkNextMode__9daPy_lk_cFi */ @@ -4605,7 +4572,7 @@ void daPy_lk_c::setFrontWallType() { iVar10 = dComIfG_Bgsp()->GetWallCode(mLinkLinChk); if (iVar10 != 4 && iVar10 != 5) { iVar9 = 2; - dVar12 = (2.0f * dVar12); + dVar12 = 2.0f * dVar12; for (; iVar9 >= 0; iVar9--) { spA8.set(current.pos.x, current.pos.y + ((mAcchCir[iVar9]).GetWallH()), current.pos.z); sp9C.set(spA8.x - (dVar12 * pVVar6->GetNP()->x), spA8.y, spA8.z - (dVar12 * pVVar6->GetNP()->z)); @@ -4946,7 +4913,7 @@ BOOL daPy_lk_c::changeLandProc(f32 param_1) { f32 dVar6; f32 dVar7; - dVar7 = (m35F0 - current.pos.y); + dVar7 = m35F0 - current.pos.y; if ((mCurrAttributeCode != dBgS_Attr_GIANT_FLOWER_e) && ((dVar7 >= (100.0f * daPy_HIO_fall_c0::m.field_0x14)))) { @@ -5035,7 +5002,6 @@ void daPy_lk_c::setDashDamage() { mDamageWaitTimer = daPy_HIO_dam_c0::m.field_0x2; voiceStart(2); seStartOnlyReverb(JA_SE_LK_DAMAGE_NORMAL); - return; } /* 801104E4-8011054C .text checkAtHitEnemy__9daPy_lk_cFP12dCcD_GObjInf */ @@ -5618,7 +5584,6 @@ void daPy_lk_c::setOldRootQuaternion(s16 param_1, s16 param_2, s16 param_3) { mDoMtx_QuatConcat(&afStack_28, &local_38, m_old_fdata->getOldFrameQuaternion(0)); } } - return; } /* 80111E54-80111EFC .text checkRestHPAnime__9daPy_lk_cFv */ @@ -8700,7 +8665,7 @@ int daPy_lk_c::setLegAngle(f32 param_1, int param_2, s16* param_3, s16* param_4) if (std::abs(param_1) < 0.1f) { return false; } - dVar9 = (0.5f * param_1); + dVar9 = 0.5f * param_1; if (dVar9 > 10.0f) { dVar9 = 10.0f; } @@ -8822,7 +8787,7 @@ void daPy_lk_c::footBgCheck() { dVar15 = C_BG_MIN_HEIGHT; do { cStack_dc = ((local_ac[iVar11] + local_a0[iVar11]) * 0.5f); - local_f4 = (cStack_dc - pdVar9->field_0x018); + local_f4 = cStack_dc - pdVar9->field_0x018; dVar14 = local_f4.abs2XZ(); if ((dVar14 < dVar20) && (uVar2 != 0)) { if (pdVar9->field_0x001 != 0) { @@ -8960,7 +8925,6 @@ void daPy_lk_c::footBgCheck() { iVar8 = iVar8 + 4; pdVar9 = pdVar9 + 1; } while (iVar11 < 2); - return; } /* 8011ABB0-8011AC78 .text setWaterY__9daPy_lk_cFv */ @@ -8983,7 +8947,6 @@ void daPy_lk_c::setWaterY() { dPa_control_c::onStatus(1); } } - return; } /* 8011AC78-8011AD9C .text autoGroundHit__9daPy_lk_cFv */ @@ -9027,7 +8990,6 @@ void daPy_lk_c::autoGroundHit() { mAcch.SetGroundHit(); speed.y = 0.0f; onNoResetFlg0(daPyFlg0_UNK80000000); - return; } /* 8011AD9C-8011AE20 .text checkAttentionPosAngle__9daPy_lk_cFP10fopAc_ac_cPP4cXyz */ @@ -9187,7 +9149,7 @@ void daPy_lk_c::setNeckAngle() { mDoMtx_multVec(r25, &l_head_center_offset, &spC4); mDoMtx_multVec(r25, &l_eye_offset, &sp88); - spAC = (sp88 - spC4); + spAC = sp88 - spC4; s16 r23_3; s16 r24_2; @@ -9200,7 +9162,7 @@ void daPy_lk_c::setNeckAngle() { if (((checkModeFlg(ModeFlg_00000080 | ModeFlg_08000000)) && (sp18 != NULL)) && (!checkUpperAnime(LKANM_BCK_DAMDASH))) { - spB8 = (*sp18 - spC4); + spB8 = *sp18 - spC4; r27 = cM_atan2s(-spB8.y, spB8.absXZ()); r23_3 = cM_atan2s(spB8.x, spB8.z) - m34DE; if (spB8.absXZ() < 30.0f) { @@ -9394,7 +9356,6 @@ void daPy_lk_c::checkOriginalHatAnimation() { { onResetFlg0(daPyRFlg0_UNK800000); } - return; } /* 8011BEA4-8011CBA4 .text setHatAngle__9daPy_lk_cFv */ @@ -9448,7 +9409,7 @@ void daPy_lk_c::setHatAngle() { } mDoMtx_multVec(pMVar12, &l_head_center_offset, &VStack_10c); mDoMtx_multVec(pMVar12, &l_eye_offset, &VStack_10c); - local_130 = (local_130 - VStack_10c); + local_130 = local_130 - VStack_10c; uVar14 = cM_atan2s(local_130.x, local_130.z); if (local_fc - pMVar12[1][3] < 0.0f) { uVar14 += 0x8000; @@ -9496,7 +9457,7 @@ void daPy_lk_c::setHatAngle() { local_dc.y = (m3718.y - local_d0.y) - 7.5f; local_dc.z = m3718.z - local_d0.z; if (!(checkModeFlg(ModeFlg_WHIDE)) || (checkGrabWear())) { - cStack_13c = (local_dc * dVar18); + cStack_13c = local_dc * dVar18; local_dc += cStack_13c; } if (std::abs(local_dc.x) < 0.01f) { @@ -9621,7 +9582,6 @@ void daPy_lk_c::setHatAngle() { m3518 = -0x1000; } } - return; } /* 8011CBA4-8011CCF4 .text setMoveSlantAngle__9daPy_lk_cFv */ @@ -9642,7 +9602,7 @@ void daPy_lk_c::setMoveSlantAngle() { daPy_HIO_move_c0::m.field_0xC, daPy_HIO_move_c0::m.field_0x8, daPy_HIO_move_c0::m.field_0xA); } else { - sVar2 = (m351C * daPy_HIO_move_c0::m.field_0x54); + sVar2 = m351C * daPy_HIO_move_c0::m.field_0x54; if (sVar2 == 0) { m351C = 0; } else { @@ -9673,11 +9633,10 @@ void daPy_lk_c::setWaistAngle() { if (m3580 == 8) { sVar2 = 0; } else { - sVar2 = (0.7f * m34E2 * fVar1); + sVar2 = 0.7f * m34E2 * fVar1; } } cLib_addCalcAngleS(&m34E0, sVar2, 2, 0x800, 0x200); - return; } /* 8011CDB4-8011D070 .text setWorldMatrix__9daPy_lk_cFv */ @@ -9724,7 +9683,6 @@ void daPy_lk_c::setWorldMatrix() { shape_angle.z = cM_atan2s(-dVar6, local_44.x); } } - return; } /* 8011D070-8011D0E4 .text setAtParam__9daPy_lk_cFUli11dCcG_At_SplUcUcUcf */ @@ -9819,7 +9777,6 @@ void daPy_lk_c::checkLightHit() { m342C.getEmitter()->setGlobalAlpha(0); m342C.end(); } - return; } /* 8011D4D0-8011D6C4 .text setSwordAtCollision__9daPy_lk_cFv */ @@ -9846,7 +9803,6 @@ void daPy_lk_c::setSwordAtCollision() { mAtCps[0].SetAtVec(local_7c); mAtCps[1].SetAtVec(local_7c); mAtCps[2].SetAtVec(local_7c); - return; } /* 8011D6C4-8011D788 .text getBlurTopRate__9daPy_lk_cFv */ @@ -10253,13 +10209,13 @@ void daPy_lk_c::setCollision() { local_e8.x = mFanWindCps.GetEndP()->x; local_e8.y = mFanWindCps.GetEndP()->y; local_e8.z = mFanWindCps.GetEndP()->z; - dVar27 = (m3534 / 10.0f); + dVar27 = m3534 / 10.0f; fVar4 = (dVar27 * (daPy_HIO_fan_c0::m.field_0x18 - daPy_HIO_fan_c0::m.field_0x1C) + daPy_HIO_fan_c0::m.field_0x1C); fVar3 = cM_scos(m3538); afStack_a0.set(fVar4 * cM_ssin(m3536) * fVar3, -fVar4 * cM_ssin(m3538), fVar4 * cM_scos(m3536) * fVar3); - local_100 = (local_e8 + afStack_a0); + local_100 = local_e8 + afStack_a0; mArrowLinChk.Set(&local_e8, &local_100, this); if (dComIfG_Bgsp()->LineCross(&mArrowLinChk)) { pfVar15 = dComIfG_Bgsp()->GetTriPla(mArrowLinChk); @@ -10366,7 +10322,6 @@ void daPy_lk_c::setCollision() { mFanLightCps.ResetAtHit(); mFanLightCps.OffAtSetBit(); } - return; } /* 8011EC0C-8011EEBC .text setAttentionPos__9daPy_lk_cFv */ @@ -10419,7 +10374,6 @@ void daPy_lk_c::setAttentionPos() { } attention_info.position.y = 92.5f + mpCLModel->getBaseTRMtx()[1][3]; } - return; } /* 8011EEBC-8011EF94 .text setRoomInfo__9daPy_lk_cFv */ @@ -10600,7 +10554,7 @@ void daPy_lk_c::setDemoData() { if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK0E_e) { if (mDemo.getTimer() != 0) { mDemo.decTimer(); - local_78 = (current.pos - home.pos); + local_78 = current.pos - home.pos; dVar22 = local_78.abs2XZ(); if (dVar22 > 90000.0f) { mDemo.setTimer(0); @@ -10698,7 +10652,6 @@ void daPy_lk_c::setDemoData() { { dComIfGp_evmng_cutEnd(mStaffIdx); } - return; } /* 8011F9C0-8011FF50 .text setStickData__9daPy_lk_cFv */ @@ -10845,7 +10798,6 @@ void daPy_lk_c::setStickData() { m3578 = 0; } } - return; } /* 8011FF50-801200F8 .text setBgCheckParam__9daPy_lk_cFv */ @@ -10943,21 +10895,19 @@ void daPy_lk_c::checkFallCode() { f32 dVar6; cXyz local_44; - if ((m3580 == 4) || (C_BG_MIN_HEIGHT == mAcch.GetGroundH())) { - bVar4 = (m35D0 > mAcch.GetGroundH()) ? TRUE : FALSE; - if (((((!bVar4) && (checkModeFlg(ModeFlg_MIDAIR))) && - ((!checkModeFlg(ModeFlg_HOOKSHOT) && - (m35F4 - current.pos.y > 100.0f * daPy_HIO_fall_c0::m.field_0x14)))) || - ((bVar4 && (checkModeFlg(ModeFlg_SWIM))))) || - ((mAcch.ChkGroundHit() && - (!checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)))))) + if (m3580 == 4 || C_BG_MIN_HEIGHT == mAcch.GetGroundH()) { + bVar4 = m35D0 > mAcch.GetGroundH() ? TRUE : FALSE; + if (((((!bVar4) && checkModeFlg(ModeFlg_MIDAIR)) && + (!checkModeFlg(ModeFlg_HOOKSHOT) && (m35F4 - current.pos.y > 100.0f * daPy_HIO_fall_c0::m.field_0x14))) || + (bVar4 && checkModeFlg(ModeFlg_SWIM))) || + (mAcch.ChkGroundHit() && (!checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000))))) { startRestartRoom(5, 0xC9, -1.0f, 0); mAcch.ClrGroundHit(); } return; } - if ((checkNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG)) && (checkModeFlg(ModeFlg_SWIM))) { + if (checkNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG) && checkModeFlg(ModeFlg_SWIM)) { startRestartRoom(5, 0xC9, -1.0f, 0); return; } @@ -10967,81 +10917,73 @@ void daPy_lk_c::checkFallCode() { if (iVar1 == 0x3f) { return; } - if (((!checkModeFlg(ModeFlg_SWIM)) && (!mAcch.ChkGroundHit())) && - (mCurProc != daPyProc_FAN_GLIDE_e)) + if ((checkModeFlg(ModeFlg_SWIM) || mAcch.ChkGroundHit()) || mCurProc == daPyProc_FAN_GLIDE_e || + ((dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && ship != NULL && !ship->checkForceMove()) || + (m3580 == 5 && m35F4 - current.pos.y > 500.0f))) { - if ((dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) && (ship != NULL)) { - if (!ship->checkForceMove()) - goto LAB_80120430; + g_dComIfG_gameInfo.play.mFwaterTimer = 1; + dVar6 = speedF; + dVar5 = 1.5f; + if (dVar6 < dVar5) { + dVar5 = dVar5; + } else if (dVar6 > daPy_HIO_move_c0::m.field_0x18) { + dVar5 = daPy_HIO_move_c0::m.field_0x18; + } else { + dVar5 = dVar6; } - if ((m3580 != 5) || !(m35F4 - current.pos.y > 500.0f)) - goto LAB_80120704; - } -LAB_80120430: - g_dComIfG_gameInfo.play.mFwaterTimer = 1; - dVar6 = speedF; - dVar5 = 1.5f; - if (dVar6 < dVar5) { - dVar5 = dVar5; - } else if (dVar6 > daPy_HIO_move_c0::m.field_0x18) { - dVar5 = daPy_HIO_move_c0::m.field_0x18; - } else { - dVar5 = dVar6; - } - if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { - uVar3 = 1; - if (dComIfGp_getShipActor() != NULL) { - dComIfGp_getShipActor()->onSceneChange(); - } - } else { - if (checkModeFlg(ModeFlg_CRAWL)) { - if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() >= 0.0f) { - uVar3 = 2; - } else { - uVar3 = 3; + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { + uVar3 = 1; + if (dComIfGp_getShipActor() != NULL) { + dComIfGp_getShipActor()->onSceneChange(); } } else { - uVar3 = 0; + if (checkModeFlg(ModeFlg_CRAWL)) { + if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() >= 0.0f) { + uVar3 = 2; + } else { + uVar3 = 3; + } + } else { + uVar3 = 0; + } } - } - if (m3580 == 5) { - mAcch.ClrGroundHit(); - } - if (!eventInfo.checkCommandDoor()) { - if (!dComIfGp_event_compulsory(this)) { - return; - } - } - if (dStage_changeSceneExitId(mAcch.m_gnd, dVar5, uVar3, bVar2)) { - onNoResetFlg1(daPyFlg1_UNK100000); - if (dComIfGs_isEventBit(0x3e10)) { - dComIfGs_onEventBit(0x3e01); - } - daPy_py_c::changePlayer((daPy_py_c*)this); - if ((!strcmp(dComIfGp_getStartStageName(), "GanonM")) && (current.roomNo == 1)) { - mDoAud_seStart(JA_SE_LK_MAZE_WARP_IN); + if (m3580 == 5) { + mAcch.ClrGroundHit(); } if (!eventInfo.checkCommandDoor()) { - mDemo.setDemoType(3); - if (m3580 == 5) { - mDemo.setDemoMode(daPy_demo_c::DEMO_UNK11_e); - } else if (((checkModeFlg(ModeFlg_SWIM)) || (m34C3 == 1)) || (m34C3 == 4)) { - mDemo.setDemoMode(daPy_demo_c::DEMO_UNK0E_e); - mVelocity *= 0.75f; - } else { - mDemo.setDemoMode(daPy_demo_c::DEMO_UNK02_e); + if (!dComIfGp_event_compulsory(this)) { + return; } - local_44 = current.pos - old.pos; - dVar5 = local_44.abs(); - if (dVar5 > 0.1f) { - mDemo.setMoveAngle(cM_atan2s(local_44.x, local_44.z)); - } else { - mDemo.setMoveAngle(current.angle.y); + } + if (dStage_changeSceneExitId(mAcch.m_gnd, dVar5, uVar3, bVar2)) { + onNoResetFlg1(daPyFlg1_UNK100000); + if (dComIfGs_isEventBit(0x3e10)) { + dComIfGs_onEventBit(0x3e01); + } + daPy_py_c::changePlayer((daPy_py_c*)this); + if ((!strcmp(dComIfGp_getStartStageName(), "GanonM")) && current.roomNo == 1) { + mDoAud_seStart(JA_SE_LK_MAZE_WARP_IN); + } + if (!eventInfo.checkCommandDoor()) { + mDemo.setDemoType(3); + if (m3580 == 5) { + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK11_e); + } else if ((checkModeFlg(ModeFlg_SWIM) || m34C3 == 1) || m34C3 == 4) { + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK0E_e); + mVelocity *= 0.75f; + } else { + mDemo.setDemoMode(daPy_demo_c::DEMO_UNK02_e); + } + local_44 = current.pos - old.pos; + dVar5 = local_44.abs(); + if (dVar5 > 0.1f) { + mDemo.setMoveAngle(cM_atan2s(local_44.x, local_44.z)); + } else { + mDemo.setMoveAngle(current.angle.y); + } } } } -LAB_80120704: - return; } /* 80120724-80120BBC .text startRestartRoom__9daPy_lk_cFUlifi */ @@ -11202,7 +11144,7 @@ void daPy_lk_c::setShapeAngleOnGround() { local_68 = local_44 - local_50; sVar2 = cM_atan2s(-local_68.y, local_68.absXZ()); iVar3 = cLib_distanceAngleS(sVar2, shape_angle.x); - if ((((iVar3 < 0x1000) && (dVar8 > 0.0f)) && (dVar7 > 0.0f)) && + if (((iVar3 < 0x1000 && dVar8 > 0.0f) && dVar7 > 0.0f) && (std::abs((dVar8 - dVar7)) > 0.05f)) { shape_angle.x = sVar2 * m35E4; @@ -11214,7 +11156,6 @@ void daPy_lk_c::setShapeAngleOnGround() { } shape_angle.z = m35E4 * getGroundAngle(&mAcch.m_gnd, shape_angle.y + -0x4000); } - return; } /* 80120F94-801211B8 .text setStepsOffset__9daPy_lk_cFv */ @@ -11245,7 +11186,6 @@ void daPy_lk_c::setStepsOffset() { m35C4 += fVar1 * 0.7f; } } - return; } /* 801211B8-8012135C .text setBeltConveyerPower__9daPy_lk_cFv */ @@ -11280,7 +11220,6 @@ void daPy_lk_c::setBeltConveyerPower() { } else { m36B8 = cXyz::Zero; } - return; } /* 8012135C-801216A8 .text setWindAtPower__9daPy_lk_cFv */ @@ -11340,7 +11279,6 @@ void daPy_lk_c::setWindAtPower() { cLib_addCalcPosXZ(&m3730, local_58, 0.5f, fVar2, 0.5f); } } - return; } /* 801216A8-80121870 .text checkRoofRestart__9daPy_lk_cFv */ @@ -11383,7 +11321,6 @@ void daPy_lk_c::checkRoofRestart() { } } } - return; } /* 80121870-80122D30 .text execute__9daPy_lk_cFv */ @@ -12915,14 +12852,14 @@ int daPy_lk_c::setMoveAnime(f32 param_1, f32 param_2, f32 param_3, daPy_ANM para getUnderUpperAnime(pdVar5, &local_bc, &local_c0, 0, 0x2400); getUnderUpperAnime(pdVar6, &local_c4, &local_c8, 1, 0x2400); dVar7 = 1.0f; - fVar2 = (dVar7 - param_1); + fVar2 = dVar7 - param_1; mAnmRatioUnder[UNDER_MOVE0_e].setRatio(fVar2); mAnmRatioUnder[UNDER_MOVE1_e].setRatio(param_1); mAnmRatioUpper[UPPER_MOVE0_e].setRatio(fVar2); mAnmRatioUpper[UPPER_MOVE1_e].setRatio(param_1); dVar10 = local_bc->getFrameMax(); dVar12 = local_c4->getFrameMax(); - dVar7 = (dVar7 / dVar10); + dVar7 = dVar7 / dVar10; fVar2 = (param_2 + (param_1 * (((param_3 * dVar10) / dVar12) - param_2))); param_2 = fVar2; setFrameCtrl(&frameCtrl0, local_bc->getAttribute(), 0, dVar8, fVar2, (dVar15 * dVar10)); @@ -13106,7 +13043,6 @@ void daPy_lk_c::simpleAnmPlay(J3DAnmBase* i_anm) { } } i_anm->setFrame(frame); - return; } /* 8012887C-801288A0 .text setHandModel__9daPy_lk_cFQ29daPy_lk_c8daPy_ANM */ @@ -13202,7 +13138,6 @@ void daPy_lk_c::setPlayerPosAndAngle(cXyz* param_1, s16 param_2) { l_debug_keep_pos = current.pos; l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; - return; } /* 80128C10-80128CE4 .text setPlayerPosAndAngle__9daPy_lk_cFP4cXyzP5csXyz */ @@ -13222,7 +13157,6 @@ void daPy_lk_c::setPlayerPosAndAngle(cXyz* param_1, csXyz* param_2) { l_debug_keep_pos = current.pos; l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; - return; } /* 80128CE4-80128DC0 .text setPlayerPosAndAngle__9daPy_lk_cFPA4_f */ @@ -13239,7 +13173,6 @@ void daPy_lk_c::setPlayerPosAndAngle(MtxP param_1) { l_debug_shape_angle = shape_angle; l_debug_current_angle = current.angle; } - return; } /* 80128DC0-80128F8C .text endDemoMode__9daPy_lk_cFv */ @@ -13292,7 +13225,6 @@ void daPy_lk_c::endDemoMode() { } else if (mCurProc == daPyProc_DEMO_BOSS_WARP_e) { procWait_init(); } - return; } /* 80128F8C-8012901C .text getBokoFlamePos__9daPy_lk_cFP4cXyz */ diff --git a/src/d/actor/d_a_player_main_data.inc b/src/d/actor/d_a_player_main_data.inc index bf0fa9cf3..36614b807 100644 --- a/src/d/actor/d_a_player_main_data.inc +++ b/src/d/actor/d_a_player_main_data.inc @@ -2,7 +2,7 @@ #include "d/actor/d_a_player_main.h" #include "d/actor/d_a_player_main_data.h" -#include "weak_data_1811.h" // IWYU pragma: keep +#include "weak_data_2100_2080.h" // IWYU pragma: keep char l_arcName[] = "Link"; diff --git a/src/d/actor/d_a_player_npc.cpp b/src/d/actor/d_a_player_npc.cpp index 19da6988b..b6d819005 100644 --- a/src/d/actor/d_a_player_npc.cpp +++ b/src/d/actor/d_a_player_npc.cpp @@ -15,16 +15,14 @@ int daPy_npc_c::check_initialRoom() { mAcch.CrrPos(*dComIfG_Bgsp()); if (mAcch.GetGroundH() == C_BG_MIN_HEIGHT || dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd) == 4) { return 0; - } else { - int roomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd); - if (roomNo < 0 || !dComIfGp_roomControl_checkStatusFlag(roomNo, 0x10)) { - return 0; - } else { - fopAcM_SetHomeRoomNo(this, roomNo); - fopAcM_SetRoomNo(this, roomNo); - return -1; - } } + int roomNo = dComIfG_Bgsp()->GetRoomId(mAcch.m_gnd); + if (roomNo < 0 || !dComIfGp_roomControl_checkStatusFlag(roomNo, 0x10)) { + return 0; + } + fopAcM_SetHomeRoomNo(this, roomNo); + fopAcM_SetRoomNo(this, roomNo); + return -1; } return 1; } diff --git a/src/d/actor/d_a_player_rope.inc b/src/d/actor/d_a_player_rope.inc index 8d79689aa..a923e79ef 100644 --- a/src/d/actor/d_a_player_rope.inc +++ b/src/d/actor/d_a_player_rope.inc @@ -58,7 +58,7 @@ int daPy_lk_c::changeRopeSwingProc() { if (mCyl.ChkCoHit() != 0) { fopAc_ac_c* pfVar2 = mCyl.GetCoHitAc(); if ((pfVar2 != NULL) && (fopAcM_GetName(pfVar2) == PROC_HIMO3)) { - cXyz local_24 = (pfVar2->current.pos - current.pos); + cXyz local_24 = pfVar2->current.pos - current.pos; if ((local_24.abs() - 95.0f >= 100.0f) && (pfVar2->current.pos.y > current.pos.y)) { return procRopeSwing_init(pfVar2, 0x1800); } @@ -109,16 +109,15 @@ int daPy_lk_c::changeRopeToHangProc() { mLinkLinChk.Set(&local_1c, &local_28, this); if (!dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { return false; + } + cM3dGPla* pfVar4 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); + s16 iVar5 = cM_atan2s(pfVar4->GetNP()->x, pfVar4->GetNP()->z); + if (cLib_distanceAngleS(iVar5, shape_angle.y + 0x8000) > 0x2000) { + return false; } else { - cM3dGPla* pfVar4 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); - s16 iVar5 = cM_atan2s(pfVar4->GetNP()->x, pfVar4->GetNP()->z); - if (cLib_distanceAngleS(iVar5, shape_angle.y + 0x8000) > 0x2000) { - return false; - } else { - m352C = iVar5; - procRopeUpHang_init(); - return true; - } + m352C = iVar5; + procRopeUpHang_init(); + return true; } } @@ -274,7 +273,8 @@ BOOL daPy_lk_c::checkNextActionRopeReady() { u32 uVar2 = fopAcM_GetParam(rope); if (uVar2 == 2) { return procRopeReady_init(); - } else if (uVar2 == 0) { + } + if (uVar2 == 0) { if (checkUpperAnime(LKANM_BCK_ROPETHROW)) { if (mFrameCtrlUpper[UPPER_MOVE2_e].getRate() < 0.01f) { return procRopeThrowCatch_init(); @@ -465,7 +465,7 @@ BOOL daPy_lk_c::procRopeReady() { mRopePos = mActorKeepEquip.getActor()->current.pos; m370C.x = mRopePos.x; m370C.z = mRopePos.z; - cXyz local_48 = (m370C - current.pos); + cXyz local_48 = m370C - current.pos; f32 dVar5 = local_48.abs(); cLib_chaseF(&m35A0, 50.0f, 5.0f); shape_angle.x = (0.025f * (m34D4 * m35A0)); @@ -493,7 +493,7 @@ BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c* param_0, s16 param_1) { fopAcM_SetParam(param_0, 1); deleteEquipItem(TRUE); mEquipItem = dItem_GRAPPLING_HOOK_e; - local_84 = (param_0->current.pos - current.pos); + local_84 = param_0->current.pos - current.pos; dVar8 = (local_84.abs() - 95.0f); dVar9 = ((himo2_class*)param_0)->field_0x15F8.y; if (dVar8 > dVar9) { @@ -505,11 +505,11 @@ BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c* param_0, s16 param_1) { } else { param_0 = mActorKeepRope.getActor(); } - local_84 = (param_0->current.pos - current.pos); + local_84 = param_0->current.pos - current.pos; m35A0 = local_84.abs(); f32 dVar11 = std::sqrtf(2.0f / m35A0); m35A4 = dVar11; - dVar11 = (M_PI / 2 / m35A4); + dVar11 = M_PI / 2 / m35A4; if (pfVar7 != NULL) { m34D4 = daPy_HIO_rope_c0::m.field_0x0; if (checkSpecialRope()) { @@ -530,7 +530,7 @@ BOOL daPy_lk_c::procRopeSwing_init(fopAc_ac_c* param_0, s16 param_1) { dVar8 = ((f32)sVar4 / m34D4); dVar9 = std::sqrtf(1.0f - (dVar8 * dVar8)); dVar8 = cM_atan2f(dVar8, dVar9); - m35A8 = (dVar8 / m35A4); + m35A8 = dVar8 / m35A4; dVar8 = std::sqrtf(local_78.y * local_78.y + local_78.z * local_78.z); m34D6 = cM_atan2s(-local_78.x, dVar8); if (m34D6 > 0) { @@ -585,8 +585,8 @@ BOOL daPy_lk_c::procRopeSwing() { fopAc_ac_c* rope = mActorKeepRope.getActor(); mRopePos = rope->current.pos; dComIfGp_setRStatus(dActStts_STOP_e); - f32 f30 = (m35A8 * m35A4); - f32 dVar13 = (m35AC * m35A4); + f32 f30 = m35A8 * m35A4; + f32 dVar13 = m35AC * m35A4; mDoMtx_stack_c::ZrotS(-shape_angle.z); mDoMtx_stack_c::XrotM(-shape_angle.x); mDoMtx_stack_c::YrotM(-shape_angle.y); @@ -622,14 +622,14 @@ BOOL daPy_lk_c::procRopeSwing() { m35A8 = m35A8 + (dVar11 + f30); m35AC = m35AC + (dVar11 + dVar13); f32 sp0C = m35A8 * m35A4; - f30 = (m35AC * m35A4); + f30 = m35AC * m35A4; if (sp0C >= M_PI) { sp0C = sp0C - M_PI * 2; m35A8 = sp0C / m35A4; } if (f30 >= M_PI) { - f30 = (f30 - M_PI * 2); - m35AC = (f30 / m35A4); + f30 = f30 - M_PI * 2; + m35AC = f30 / m35A4; } if ((checkModeFlg(ModeFlg_00000400)) && (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f)) { offModeFlg(ModeFlg_00000400); @@ -680,11 +680,7 @@ BOOL daPy_lk_c::procRopeSwing() { cLib_addCalcAngleS(&shape_angle.x, r28_2, 8, 0xc00, 0x100); dVar13 = cM_fcos(f30); cLib_addCalcAngleS( - &shape_angle.z, - m34D6 * cM_fsin(f30 - 1.0995574f), - 8, - 0x400 + (0x800 * dVar13), - 0x80 + (0x80 * dVar13) + &shape_angle.z, m34D6 * cM_fsin(f30 - 1.0995574f), 8, 0x400 + (0x800 * dVar13), 0x80 + (0x80 * dVar13) ); cXyz sp1C(0.0f, -m35A0, 0.0f); mDoMtx_stack_c::transS(mRopePos.x, mRopePos.y, mRopePos.z); @@ -879,11 +875,11 @@ BOOL daPy_lk_c::procRopeUp_init() { mProcVar0.m3570 = 0; f32 dVar4; if (checkBossGomaStage()) { - dVar4 = (mRopePos.y - 200.0f); + dVar4 = mRopePos.y - 200.0f; } else { - dVar4 = (mRopePos.y - 100.0f); + dVar4 = mRopePos.y - 100.0f; f32 dVar5 = checkRopeRoofHit(shape_angle.y); - dVar5 = (dVar5 - 60.0f); + dVar5 = dVar5 - 60.0f; if (dVar5 < dVar4) { dVar4 = dVar5; } else if ((fopAcM_GetName(rope)) == PROC_HIMO2 || (checkSpecialRope())) { @@ -893,12 +889,10 @@ BOOL daPy_lk_c::procRopeUp_init() { if (dVar4 <= current.pos.y) { if (specialRopeHangUp()) { return true; + } else if (changeRopeToHangProc()) { + return true; } else { - if (changeRopeToHangProc()) { - return true; - } else { - return procRopeHangWait_init(0); - } + return procRopeHangWait_init(0); } } else { commonProcInit(daPyProc_ROPE_UP_e); From dbadb130a57858e6b243845a37d15af257e2a59c Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 7 May 2025 23:26:48 -0400 Subject: [PATCH 08/31] Fix more minor player nonmatches --- src/d/actor/d_a_player_main.cpp | 72 ++++++++++++++------------------- 1 file changed, 31 insertions(+), 41 deletions(-) diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 6c137e973..6417b763e 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -5208,8 +5208,8 @@ BOOL daPy_lk_c::changeDamageProc() { mCyl.GetTgHitAc() && fopAcM_GetName(mCyl.GetTgHitAc()) == PROC_NZ && grab_actor != NULL ) { - cXyz* damageVec = getDamageVec(&mCyl); - grab_actor->shape_angle.y = cM_atan2s(damageVec->x, damageVec->z); + cXyz* damage_vec = getDamageVec(&mCyl); + grab_actor->shape_angle.y = cM_atan2s(damage_vec->x, damage_vec->z); grab_actor->shape_angle.x = 0x2000; return procLargeDamage_init(-4, 1, 0, 0); } @@ -6018,7 +6018,6 @@ BOOL daPy_lk_c::procControllWait() { /* 80112E60-80113044 .text procWait_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procWait_init() { - /* Nonmatching - missing "cntlzw" instruction */ if ((mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK2A_e) && (m_tex_scroll_heap.field_0x6 == 0xFFFF)) { @@ -6040,7 +6039,7 @@ BOOL daPy_lk_c::procWait_init() { mVelocity = 0.0f; int iVar4 = checkRestHPAnime(); if ((iVar4 != 0) && (iVar3 == 0)) { - s32 uVar2 = (mTexAnmIndexTable[daPyFace_TMABAF].mBtpIdx - m_tex_anm_heap.mIdx) >> 5 & 0xFF; + s32 uVar2 = m_tex_anm_heap.mIdx == mTexAnmIndexTable[daPyFace_TMABAF].mBtpIdx; u16 uVar1 = m3530; setSingleMoveAnime(ANM_WAITATOB, daPy_HIO_move_c0::m.field_0x68, daPy_HIO_move_c0::m.field_0x6C, daPy_HIO_move_c0::m.field_0x10, @@ -6064,7 +6063,6 @@ BOOL daPy_lk_c::procWait_init() { /* 80113044-801133FC .text procWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procWait() { - /* Nonmatching - missing "cntlzw" instruction */ if ((m36A0.abs2XZ() <= (1.0f / 999999.9f)) && (m36AC.abs2XZ() >= 25.0f)) { return procIceSlipAlmostFall_init(); } @@ -6101,7 +6099,7 @@ BOOL daPy_lk_c::procWait() { } else if ((checkRestHPAnime()) && (m_anm_heap_under[UNDER_MOVE0_e].mIdx != LKANM_BCK_WAITB)) { - s32 uVar3 = (mTexAnmIndexTable[daPyFace_TMABAF].mBtpIdx - m_tex_anm_heap.mIdx) >> 5 & 0xFF; + s32 uVar3 = m_tex_anm_heap.mIdx == mTexAnmIndexTable[daPyFace_TMABAF].mBtpIdx; u16 uVar1 = m3530; setSingleMoveAnime(ANM_WAITATOB, daPy_HIO_move_c0::m.field_0x68, daPy_HIO_move_c0::m.field_0x6C, daPy_HIO_move_c0::m.field_0x10, @@ -6436,8 +6434,8 @@ BOOL daPy_lk_c::procCrouchDefense() { /* 80114014-801142F4 .text procCrouchDefenseSlip_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procCrouchDefenseSlip_init() { commonProcInit(daPyProc_CROUCH_DEFENSE_SLIP_e); - cXyz* pfVar2 = getDamageVec(&mCyl); - current.angle.y = cM_atan2s(pfVar2->x, pfVar2->z); + cXyz* damage_vec = getDamageVec(&mCyl); + current.angle.y = cM_atan2s(damage_vec->x, damage_vec->z); dCcD_GObjInf* pfVar3 = mCyl.GetTgHitGObj(); f32 dVar5; if ((pfVar3 != NULL) && @@ -6447,7 +6445,7 @@ BOOL daPy_lk_c::procCrouchDefenseSlip_init() { setSingleMoveAnime(ANM_DIFENCEA, daPy_HIO_nockback_c0::m.field_0x8, daPy_HIO_nockback_c0::m.field_0xC, daPy_HIO_nockback_c0::m.field_0x0, daPy_HIO_nockback_c0::m.field_0x10); - dVar5 = pfVar2->absXZ(); + dVar5 = damage_vec->absXZ(); mVelocity = (daPy_HIO_nockback_c0::m.field_0x18 * dVar5) + daPy_HIO_nockback_c0::m.field_0x14; m34D0 = daPy_HIO_nockback_c0::m.field_0x2; @@ -6461,7 +6459,7 @@ BOOL daPy_lk_c::procCrouchDefenseSlip_init() { setSingleMoveAnime(ANM_DIFENCEA, daPy_HIO_guard_c0::m.field_0x4, daPy_HIO_guard_c0::m.field_0x8, daPy_HIO_guard_c0::m.field_0x0, daPy_HIO_guard_c0::m.field_0xC); - dVar5 = pfVar2->absXZ(); + dVar5 = damage_vec->absXZ(); mVelocity = (daPy_HIO_guard_c0::m.field_0x14 * dVar5) + daPy_HIO_guard_c0::m.field_0x10; m34D0 = daPy_HIO_guard_c0::m.field_0x2; m35A0 = daPy_HIO_guard_c0::m.field_0x18; @@ -7539,17 +7537,13 @@ BOOL daPy_lk_c::procGuardCrash() { /* 801170F0-80117448 .text procDamage_init__9daPy_lk_cFv */ BOOL daPy_lk_c::procDamage_init() { - /* Nonmatching - cXyz */ - cXyz local_54; - - cXyz* pfVar1 = getDamageVec(&mCyl); - f32 dVar5 = cM_ssin(shape_angle.y); - f32 dVar6 = cM_scos(shape_angle.y); + cXyz* damage_vec = getDamageVec(&mCyl); + f32 f31 = cM_ssin(shape_angle.y); + f32 f30 = cM_scos(shape_angle.y); commonProcInit(daPyProc_DAMAGE_e); mDamageWaitTimer = daPy_HIO_dam_c0::m.field_0x0; - local_54.set(pfVar1->z * -dVar5 + pfVar1->x * dVar6, pfVar1->y, - pfVar1->z * dVar6 + pfVar1->x * dVar5); - m34D4 = cM_atan2s(local_54.x, local_54.z); + cXyz local_54(damage_vec->z * -f31 + damage_vec->x * f30, damage_vec->y, damage_vec->z * f30 + damage_vec->x * f31); + m34D4 = cM_atan2s(local_54.z, local_54.y); m34D6 = cM_atan2s(-local_54.x, std::sqrtf(local_54.y * local_54.y + local_54.z * local_54.z)); if (m34D4 > daPy_HIO_damage_c0::m.field_0x2) { m34D4 = daPy_HIO_damage_c0::m.field_0x2; @@ -7578,7 +7572,7 @@ BOOL daPy_lk_c::procDamage_init() { } setSingleMoveAnime(dVar2, daPy_HIO_damage_c0::m.field_0x14, daPy_HIO_damage_c0::m.field_0x18, daPy_HIO_damage_c0::m.field_0x0, daPy_HIO_damage_c0::m.field_0x8); - current.angle.y = cM_atan2s(pfVar1->x, pfVar1->z); + current.angle.y = cM_atan2s(damage_vec->x, damage_vec->z); if (dVar2 != ANM_DAMR) { m34BE = 2; } @@ -7586,7 +7580,7 @@ BOOL daPy_lk_c::procDamage_init() { m34BE = 1; } mVelocity = - (daPy_HIO_damage_c0::m.field_0x10 * pfVar1->absXZ()) + daPy_HIO_damage_c0::m.field_0xC; + (daPy_HIO_damage_c0::m.field_0x10 * damage_vec->absXZ()) + daPy_HIO_damage_c0::m.field_0xC; voiceStart(2); seStartOnlyReverb(JA_SE_LK_DAMAGE_NORMAL); mProcVar0.mDamageAnm = dVar2; @@ -7597,7 +7591,6 @@ BOOL daPy_lk_c::procDamage_init() { /* 80117448-801176FC .text procDamage__9daPy_lk_cFv */ BOOL daPy_lk_c::procDamage() { - /* Nonmatching - uVar4 */ f32 fVar1; f32 fVar2; s16 uVar4; @@ -7621,7 +7614,7 @@ BOOL daPy_lk_c::procDamage() { daPy_HIO_damage_c0::m.field_0x28)))); fVar1 = 1.0f - cM_scos(uVar4); uVar4 = uVar4; - fVar2 = 1.0f - cM_scos((((uVar4 < 0x2000) - (uVar4 >> 0x1f)) & ~((uVar4 - 0x2000) * 2))); + fVar2 = 1.0f - cM_scos(uVar4 < 0x2000 ? 0 : (s16)((uVar4 - 0x2000) * 2)); } m3564 = m34D4 * fVar1; m3566 = 0; @@ -7633,10 +7626,8 @@ BOOL daPy_lk_c::procDamage() { daPy_HIO_damage_c0::m.field_0x20, daPy_HIO_damage_c0::m.field_0x24); if ((dVar5 <= 0.001f) && (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f)) { checkNextMode(0); - } else { - if (mVelocity < daPy_HIO_damage_c0::m.field_0x2C) { - resetFootEffect(); - } + } else if (mVelocity < daPy_HIO_damage_c0::m.field_0x2C) { + resetFootEffect(); } return true; } @@ -7666,7 +7657,7 @@ BOOL daPy_lk_c::procPolyDamage() { BOOL daPy_lk_c::procLargeDamage_init(int param_1, int param_2, s16 param_3, s16 param_4) { f32 fVar2; s16 sVar3; - cXyz* pfVar5; + cXyz* damage_vec; int iVar7; if (mCurProc == daPyProc_LARGE_DAMAGE_e) { @@ -7708,8 +7699,8 @@ BOOL daPy_lk_c::procLargeDamage_init(int param_1, int param_2, s16 param_3, s16 current.angle.y = m3550; setDamagePoint(-1.0f); } else { - pfVar5 = getDamageVec(&mCyl); - current.angle.y = cM_atan2s(pfVar5->x, pfVar5->z); + damage_vec = getDamageVec(&mCyl); + current.angle.y = cM_atan2s(damage_vec->x, damage_vec->z); } sVar3 = current.angle.y - shape_angle.y; if (std::abs(sVar3) < 8192.0f) { @@ -7724,8 +7715,8 @@ BOOL daPy_lk_c::procLargeDamage_init(int param_1, int param_2, s16 param_3, s16 seStartOnlyReverb(JA_SE_LK_DAMAGE_LARGE); dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f)); } else if ((param_1 == -1) || (param_1 == -6)) { - pfVar5 = getDamageVec(&mCyl); - current.angle.y = cM_atan2s(pfVar5->x, pfVar5->z); + damage_vec = getDamageVec(&mCyl); + current.angle.y = cM_atan2s(damage_vec->x, damage_vec->z); iVar7 = getDirectionFromAngle(current.angle.y - shape_angle.y); seStartOnlyReverb(JA_SE_LK_DAMAGE_LARGE); dComIfGp_getVibration().StartShock(6, -0x21, cXyz(0.0f, 1.0f, 0.0f)); @@ -8235,8 +8226,8 @@ BOOL daPy_lk_c::procElecDamage_init(const cXyz* param_1) { m34D6 = 1; } else { if (mCyl.ChkTgHit()) { - cXyz* pfVar4 = getDamageVec(&mCyl); - m370C = *pfVar4; + cXyz* damage_vec = getDamageVec(&mCyl); + m370C = *damage_vec; m34D6 = 1; } else { m34D6 = 0; @@ -8275,7 +8266,7 @@ BOOL daPy_lk_c::procElecDamage() { BOOL daPy_lk_c::procGuardSlip_init() { daPy_ANM dVar5; - cXyz* pfVar2 = getDamageVec(&mCyl); + cXyz* damage_vec = getDamageVec(&mCyl); commonProcInit(daPyProc_GUARD_SLIP_e); if (mEquipItem == dItem_SKULL_HAMMER_e) { dVar5 = ANM_ATNGAHAM; @@ -8293,7 +8284,7 @@ BOOL daPy_lk_c::procGuardSlip_init() { setSingleMoveAnime(dVar5, daPy_HIO_nockback_c0::m.field_0x8, daPy_HIO_nockback_c0::m.field_0xC, daPy_HIO_nockback_c0::m.field_0x0, daPy_HIO_nockback_c0::m.field_0x10); - mVelocity = (daPy_HIO_nockback_c0::m.field_0x18 * pfVar2->absXZ()) + + mVelocity = (daPy_HIO_nockback_c0::m.field_0x18 * damage_vec->absXZ()) + daPy_HIO_nockback_c0::m.field_0x14; m34D0 = daPy_HIO_nockback_c0::m.field_0x2; m35A0 = daPy_HIO_nockback_c0::m.field_0x1C; @@ -8305,7 +8296,7 @@ BOOL daPy_lk_c::procGuardSlip_init() { setSingleMoveAnime(dVar5, daPy_HIO_guard_c0::m.field_0x4, daPy_HIO_guard_c0::m.field_0x8, daPy_HIO_guard_c0::m.field_0x0, daPy_HIO_guard_c0::m.field_0xC); mVelocity = - (daPy_HIO_guard_c0::m.field_0x14 * pfVar2->absXZ()) + daPy_HIO_guard_c0::m.field_0x10; + (daPy_HIO_guard_c0::m.field_0x14 * damage_vec->absXZ()) + daPy_HIO_guard_c0::m.field_0x10; m34D0 = daPy_HIO_guard_c0::m.field_0x2; m35A0 = daPy_HIO_guard_c0::m.field_0x18; m35A4 = daPy_HIO_guard_c0::m.field_0x1C; @@ -8318,7 +8309,7 @@ BOOL daPy_lk_c::procGuardSlip_init() { } else { m35E8 = mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); } - current.angle.y = cM_atan2s(pfVar2->x, pfVar2->z); + current.angle.y = cM_atan2s(damage_vec->x, damage_vec->z); m34BE = 3; m_pbCalc[PART_UPPER_e]->setRatio(2, 0.0f); return true; @@ -12553,7 +12544,6 @@ daPy_footData_c::daPy_footData_c() {} /* 80127160-80127B50 .text makeBgWait__9daPy_lk_cFv */ cPhs_State daPy_lk_c::makeBgWait() { - /* Nonmatching - regalloc, missing "cntlzw" instruction */ cXyz local_38; cXyz local_44; cXyz local_50; @@ -12585,7 +12575,7 @@ cPhs_State daPy_lk_c::makeBgWait() { dComIfGs_setRestartRoom(current.pos, shape_angle.y, getStartRoomNo()); } setRoomInfo(); - s32 startMode = getStartMode(); + int startMode = getStartMode(); u8 sceneMode = dComIfGs_getLastSceneMode(); if ((((startMode == 2) || (startMode == 9)) || ((sceneMode == 6 || ((startMode == 5 && (sceneMode == 1)))))) || @@ -12654,7 +12644,7 @@ cPhs_State daPy_lk_c::makeBgWait() { current.pos.y = mAcch.GetGroundH(); mDemo.setDemoType(4); mDoAud_subBgmStop(); - procLargeDamageUp_init(((4 - sceneMode) >> 5) - 2, 1, 0, 0); + procLargeDamageUp_init(sceneMode == 4 ? -1 : -2, 1, 0, 0); } } else if ((startMode == 1) || (startMode == 5)) { if (mEventIdx == 0xFF) { From cbbd4c2dc0526c82bccd3be61b6e792421397fd3 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Thu, 8 May 2025 23:00:19 -0400 Subject: [PATCH 09/31] Match more player_main regalloc/stack/etc issues --- include/SSystem/SComponent/c_bg_w.h | 16 +- include/d/actor/d_a_player_main.h | 6 +- include/d/d_particle.h | 14 +- src/SSystem/SComponent/c_bg_w.cpp | 8 - src/d/actor/d_a_arrow.cpp | 2 +- src/d/actor/d_a_bk.cpp | 2 +- src/d/actor/d_a_hookshot.cpp | 2 +- src/d/actor/d_a_leaflift.cpp | 7 +- src/d/actor/d_a_player_climb.inc | 2 +- src/d/actor/d_a_player_crawl.inc | 11 +- src/d/actor/d_a_player_grab.inc | 8 +- src/d/actor/d_a_player_main.cpp | 1295 +++++++++++++-------------- src/d/actor/d_a_player_swim.inc | 2 +- src/d/actor/d_a_player_sword.inc | 16 +- src/d/actor/d_a_player_whide.inc | 9 +- src/d/d_bg_s_acch.cpp | 2 +- src/d/d_particle.cpp | 2 +- 17 files changed, 656 insertions(+), 748 deletions(-) diff --git a/include/SSystem/SComponent/c_bg_w.h b/include/SSystem/SComponent/c_bg_w.h index 04dd17289..6918c9272 100644 --- a/include/SSystem/SComponent/c_bg_w.h +++ b/include/SSystem/SComponent/c_bg_w.h @@ -273,8 +273,18 @@ public: /* 0xA4 */ int m_rootGrpIdx; }; -bool cBgW_CheckBGround(f32 ny); -bool cBgW_CheckBRoof(f32 ny); -bool cBgW_CheckBWall(f32 ny); +inline bool cBgW_CheckBGround(f32 ny) { + return ny >= 0.5f; +} + +inline bool cBgW_CheckBRoof(f32 ny) { + return ny < (-4.0f / 5.0f); +} + +inline bool cBgW_CheckBWall(float y) { + if (!cBgW_CheckBGround(y) && !cBgW_CheckBRoof(y)) + return true; + return false; +} #endif /* C_BG_W_H */ diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 11f4c9030..8b9545f35 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -179,15 +179,15 @@ public: void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8); void end(); ~daPy_followEcallBack_c() {} + JPABaseEmitter* getEmitter() { return mpEmitter; } - void setPos(const cXyz* pos) { mPos = *pos; } cXyz& getPos() { return mPos; } + void setPos(const cXyz* pos) { mPos = *pos; } void setAngle(s16 x, s16 y, s16 z) { mAngle.set(x, y, z); } /* 0x04 */ JPABaseEmitter* mpEmitter; /* 0x08 */ cXyz mPos; /* 0x14 */ csXyz mAngle; - /* 0x1A */ u8 field_0x1A[0x1C - 0x1A]; }; // Size: 0x1C class daPy_waterDropEcallBack_c : public daPy_followEcallBack_c { @@ -1011,7 +1011,7 @@ public: BOOL checkNextActionFromButton(); void setShieldGuard(); BOOL checkItemModeActorPointer(); - BOOL checkNextActionItemFly(); + void checkNextActionItemFly(); BOOL checkNextMode(int); BOOL checkIceSlipFall(); void setFrontWallType(); diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 8f58f71e6..0e75e5c41 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -310,19 +310,19 @@ public: virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8); void end(); - void getAlpha() {} - void remove() {} - void setAlpha(u8) {} - void setPosArray(cXyz* param_1, s16 param_2) { - field_0x8 = param_1; + u8 getAlpha() { return mAlpha; } + void setAlpha(u8 alpha) { mAlpha = alpha;} + void remove() { end(); } + void setPosArray(cXyz* pos_array, s16 param_2) { + mPosArray = pos_array; field_0x6 = param_2; } public: - /* 0x04 */ u8 field_0x4; + /* 0x04 */ u8 mAlpha; /* 0x05 */ u8 field_0x5; /* 0x06 */ u16 field_0x6; - /* 0x08 */ cXyz* field_0x8; + /* 0x08 */ cXyz* mPosArray; /* 0x0C */ JPABaseEmitter* mpBaseEmitter; }; // Size: 0x10 diff --git a/src/SSystem/SComponent/c_bg_w.cpp b/src/SSystem/SComponent/c_bg_w.cpp index f1baa6cbd..c5aafd61e 100644 --- a/src/SSystem/SComponent/c_bg_w.cpp +++ b/src/SSystem/SComponent/c_bg_w.cpp @@ -138,14 +138,6 @@ void cBgW::BlckConnect(u16* rwg, int* prev, int i_no) { pm_rwg[*prev].next = -1; } -inline bool cBgW_CheckBGround(f32 ny) { - return ny >= 0.5f; -} - -inline bool cBgW_CheckBRoof(f32 ny) { - return ny < (-4.0f / 5.0f); -} - /* 80247A24-80247BF8 .text ClassifyPlane__4cBgWFv */ void cBgW::ClassifyPlane() { if (pm_vtx_tbl == NULL) diff --git a/src/d/actor/d_a_arrow.cpp b/src/d/actor/d_a_arrow.cpp index f587d9e55..31c826aa5 100644 --- a/src/d/actor/d_a_arrow.cpp +++ b/src/d/actor/d_a_arrow.cpp @@ -904,7 +904,7 @@ BOOL daArrow_c::procReturn() { s32 temp3 = -field_0x69c; field_0x69c = (temp3 / 2); triPla = dComIfG_Bgsp()->GetTriPla(mLinChk); - if (triPla->mNormal.y >= 0.5f) { + if (cBgW_CheckBGround(triPla->GetNP()->y)) { field_0x69a = true; } } else if (field_0x69a && speed.y < 0.0f) { diff --git a/src/d/actor/d_a_bk.cpp b/src/d/actor/d_a_bk.cpp index fe86d014e..1ddbd865f 100644 --- a/src/d/actor/d_a_bk.cpp +++ b/src/d/actor/d_a_bk.cpp @@ -3264,7 +3264,7 @@ static void rope_on(bk_class* i_this) { break; case 2: { i_this->speedF = 70.0f; - s16 targetAngle = fopAcM_searchPlayerAngleY((i_this)); + s16 targetAngle = fopAcM_searchPlayerAngleY(i_this); cLib_addCalcAngleS2(&i_this->current.angle.y, targetAngle, 4, 0x1000); if (i_this->dr.mAcch.ChkWallHit()) { i_this->speed.y = 100.0f + REG0_F(16); diff --git a/src/d/actor/d_a_hookshot.cpp b/src/d/actor/d_a_hookshot.cpp index 598ed4f8b..e579cfeda 100644 --- a/src/d/actor/d_a_hookshot.cpp +++ b/src/d/actor/d_a_hookshot.cpp @@ -280,7 +280,7 @@ BOOL daHookshot_c::procShot() { if ( strcmp(dComIfGp_getStartStageName(), "kazeB") == 0 && ( - (sp8C.y < 950.0f && dComIfG_Bgsp()->GetTriPla(mLinChk)->GetNP()->y >= 0.5f) || + (sp8C.y < 950.0f && cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mLinChk)->GetNP()->y)) || dComIfG_Bgsp()->GetAttributeCode(mLinChk) == dBgS_Attr_SAND_e ) ) { diff --git a/src/d/actor/d_a_leaflift.cpp b/src/d/actor/d_a_leaflift.cpp index 707755006..5a09029dd 100644 --- a/src/d/actor/d_a_leaflift.cpp +++ b/src/d/actor/d_a_leaflift.cpp @@ -240,8 +240,11 @@ bool daLlift_c::_execute() { cXyz adjustedPosition; float distXZ = fopAcM_searchActorDistanceXZ(this, dComIfGp_getPlayer(0)); mActorLifetimeFrameCount++; - if ((m43F) && (m43F--, !m43F)) { - m43E = TRUE; + if (m43F > 0) { + m43F--; + if (m43F == 0) { + m43E = TRUE; + } } if ((!m43C) && (m43E)) { mTargetRotation = ZeroQuat; diff --git a/src/d/actor/d_a_player_climb.inc b/src/d/actor/d_a_player_climb.inc index 571b29e22..bc302e7d3 100644 --- a/src/d/actor/d_a_player_climb.inc +++ b/src/d/actor/d_a_player_climb.inc @@ -190,7 +190,7 @@ void daPy_lk_c::checkBgClimbMove() { local_5c.set(current.pos.x + (25.0f * dVar7), local_68.y + 30.0f, current.pos.z + (25.0f * dVar6)); mGndChk.SetPos(&local_5c); dVar3 = dComIfG_Bgsp()->GroundCross(&mGndChk); - if (C_BG_MIN_HEIGHT != dVar3 && dComIfG_Bgsp()->GetTriPla(mGndChk)->GetNP()->y >= 0.5f && + if (C_BG_MIN_HEIGHT != dVar3 && cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mGndChk)->GetNP()->y) && dVar3 >= local_68.y - 30.0f) { dVar4 = 3.0f; diff --git a/src/d/actor/d_a_player_crawl.inc b/src/d/actor/d_a_player_crawl.inc index 984279238..43ab781a8 100644 --- a/src/d/actor/d_a_player_crawl.inc +++ b/src/d/actor/d_a_player_crawl.inc @@ -168,21 +168,14 @@ int daPy_lk_c::getCrawlMoveVec(cXyz* param_0, cXyz* param_1, cXyz* param_2) { if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); int iVar4 = dComIfG_Bgsp()->GetSpecialCode(mLinkLinChk); - f32 fVar1 = triPla->GetNP()->y; - bool bVar2; - if (!(fVar1 >= 0.5f || fVar1 < -0.8f)) { - bVar2 = true; - } else { - bVar2 = false; - } - if (bVar2) { + if (cBgW_CheckBWall(triPla->GetNP()->y)) { cXyz local_3c = (*param_1 - mLinkLinChk.GetCross()); f32 dVar7 = local_3c.absXZ(); param_2->x = -dVar7 * triPla->GetNP()->x; param_2->y = local_3c.y; param_2->z = -dVar7 * triPla->GetNP()->z; return true; - } else if (iVar4 == 1 || (fVar1 < 0.643832f && iVar4 == 2)) { + } else if (iVar4 == 1 || (triPla->GetNP()->y < 0.643832f && iVar4 == 2)) { *param_2 = (*param_1 - mLinkLinChk.GetCross()); return true; } diff --git a/src/d/actor/d_a_player_grab.inc b/src/d/actor/d_a_player_grab.inc index 8536a7035..d3d7a4b3b 100644 --- a/src/d/actor/d_a_player_grab.inc +++ b/src/d/actor/d_a_player_grab.inc @@ -661,13 +661,7 @@ BOOL daPy_lk_c::procGrabPut() { mLinkLinChk.Set(&m370C, &local_2c, this); if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); - bool bVar1; - if ((!(triPla->GetNP()->y >= 0.5f)) && (!(triPla->GetNP()->y < -0.8f))) { - bVar1 = true; - } else { - bVar1 = false; - } - if (bVar1) { + if (cBgW_CheckBWall(triPla->GetNP()->y)) { cXyz local_44 = (local_2c - mLinkLinChk.GetCross()); f32 dVar7 = local_44.abs(); f32 dVar5 = local_44.absXZ(); diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index 6417b763e..ae5557784 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -482,19 +482,19 @@ BOOL daPy_lk_c::jointCB1() { mDoMtx_stack_c::revConcat(mpCLModel->getAnmMtx(0x20)); mpCLModel->setAnmMtx(0x20, mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(pJVar4->mTranslate.x, pJVar4->mTranslate.y, pJVar4->mTranslate.z); - mDoMtx_stack_c::quatM((pQVar2)); + mDoMtx_stack_c::quatM(pQVar2); pJVar4++; pQVar2++; mDoMtx_stack_c::ZrotM(mFootData[1].field_0x00A); mpCLModel->setAnmMtx(0x21, mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(pJVar4->mTranslate.x, pJVar4->mTranslate.y, pJVar4->mTranslate.z); - mDoMtx_stack_c::quatM((pQVar2)); + mDoMtx_stack_c::quatM(pQVar2); pJVar4++; pQVar2++; mDoMtx_stack_c::ZrotM(mFootData[1].field_0x002); mpCLModel->setAnmMtx(0x22, mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(pJVar4->mTranslate.x, pJVar4->mTranslate.y, pJVar4->mTranslate.z); - mDoMtx_stack_c::quatM((pQVar2)); + mDoMtx_stack_c::quatM(pQVar2); mpCLModel->setAnmMtx(0x23, mDoMtx_stack_c::get()); pJVar4 = m_old_fdata->getOldFrameTransInfo(0x26); pQVar2 = m_old_fdata->getOldFrameQuaternion(0x26); @@ -502,19 +502,19 @@ BOOL daPy_lk_c::jointCB1() { mDoMtx_stack_c::revConcat(mpCLModel->getAnmMtx(0x25)); mpCLModel->setAnmMtx(0x25, mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(pJVar4->mTranslate.x, pJVar4->mTranslate.y, pJVar4->mTranslate.z); - mDoMtx_stack_c::quatM((pQVar2)); + mDoMtx_stack_c::quatM(pQVar2); pJVar4++; pQVar2++; mDoMtx_stack_c::ZrotM(mFootData[0].field_0x00A); mpCLModel->setAnmMtx(0x26, mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(pJVar4->mTranslate.x, pJVar4->mTranslate.y, pJVar4->mTranslate.z); - mDoMtx_stack_c::quatM((pQVar2)); + mDoMtx_stack_c::quatM(pQVar2); pJVar4++; pQVar2++; mDoMtx_stack_c::ZrotM(mFootData[0].field_0x002); mpCLModel->setAnmMtx(0x27, mDoMtx_stack_c::get()); mDoMtx_stack_c::transM(pJVar4->mTranslate.x, pJVar4->mTranslate.y, pJVar4->mTranslate.z); - mDoMtx_stack_c::quatM((pQVar2)); + mDoMtx_stack_c::quatM(pQVar2); mpCLModel->setAnmMtx(0x28, mDoMtx_stack_c::get()); return true; } @@ -765,7 +765,7 @@ void daPy_lk_c::setTextureAnime(u16 param_1, int param_2) { } dVar9 = cM_rnd(); if (m_tex_scroll_heap.mIdx != btk_idx) { - if ((((bVar3) && checkModeFlg(ModeFlg_00000001)) && daPy_matAnm_c::m_maba_flg != 0) && + if (((bVar3 && checkModeFlg(ModeFlg_00000001)) && daPy_matAnm_c::m_maba_flg != 0) && (((!dComIfGp_event_runCheck() && mpAttnActorLockOn == NULL) && btk_idx == LKANM_BTK_TMABA))) { if (daPy_matAnm_c::m_maba_timer == 0) { @@ -808,7 +808,7 @@ void daPy_lk_c::setTextureAnime(u16 param_1, int param_2) { setTextureScrollResource(loadTextureScrollResource(btk_idx, 0), param_2); } } - } else if (((((bVar3) && (checkModeFlg(ModeFlg_00000001))) && (!dComIfGp_event_runCheck())) && + } else if ((((bVar3 && (checkModeFlg(ModeFlg_00000001))) && (!dComIfGp_event_runCheck())) && ((daPy_matAnm_c::m_maba_timer == 0 && (mpAttnActorLockOn == NULL)))) && (((btk_idx == LKANM_BTK_TMABA && ((m_tex_scroll_heap.field_0x2 == 0xFFFF && (m_tex_scroll_heap.field_0x4 == 0xFFFF)))) && @@ -2274,24 +2274,11 @@ void daPy_lk_c::setNormalSpeedF(f32 param_1, f32 param_2, f32 param_3, f32 param /* 80108D80-8010959C .text posMoveFromFootPos__9daPy_lk_cFv */ void daPy_lk_c::posMoveFromFootPos() { - /* Nonmatching - first for loop, math */ - static const Vec rtoe_pos_offset = {-14.05f, 0.0f, 5.02f}; - static const Vec rheel_pos_offset = {-10.85f, 0.0f, -6.52f}; - s16 sVar5; - uint uVar2; - int iVar7; - f32 dVar12; - f32 dVar13; - f32 dVar14; - cXyz local_c0; - cXyz local_b4; - cXyz local_90; - cXyz local_78[3]; - cXyz local_60[3]; - if (m_old_fdata->getOldFrameFlg() == false) { m34BC = 2; speedF = 0.0f; + static const Vec rtoe_pos_offset = {-14.05f, 0.0f, 5.02f}; + static const Vec rheel_pos_offset = {-10.85f, 0.0f, -6.52f}; mFootData[0].field_0x018 = rtoe_pos_offset; mFootData[0].field_0x00C = rheel_pos_offset; mFootData[1].field_0x018.x = -rtoe_pos_offset.x; @@ -2300,125 +2287,126 @@ void daPy_lk_c::posMoveFromFootPos() { mFootData[1].field_0x00C.x = -rheel_pos_offset.x; mFootData[1].field_0x00C.y = rheel_pos_offset.y; mFootData[1].field_0x00C.z = rheel_pos_offset.z; - - } else { - mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x22), mDoMtx_stack_c::get()); - mDoMtx_stack_c::multVec(&l_toe_pos, local_60); - mDoMtx_stack_c::multVec(&l_heel_pos, local_78); - mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x27), mDoMtx_stack_c::get()); - mDoMtx_stack_c::multVec(&l_toe_pos, local_60); - mDoMtx_stack_c::multVec(&l_heel_pos, local_78); - mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x1E), mDoMtx_stack_c::get()); - dVar14 = cM_ssin(m34E0); - dVar12 = cM_scos(m34E0); - for (iVar7 = 0; iVar7 < 2; iVar7++) { - local_90 = local_78[0] + local_b4; - local_b4 *= 0.5f; - local_78[iVar7].x = mDoMtx_stack_c::now[1][3]; - local_78[iVar7].y = mDoMtx_stack_c::now[1][3] - dVar14; - local_78[iVar7].z = mDoMtx_stack_c::now[2][3] - dVar12; - } - if (local_b4.y < local_b4.x) { - m34BC = 0; - } else { - m34BC = 1; - } - local_c0 = local_b4 - mFootData[0].field_0x018; - dVar12 = local_c0.absXZ(); - if ((m3598 < 1.0f) && (std::abs(m35B4 - mStickDistance) < 0.2f)) { - dVar12 = ((dVar12 * 0.3f) + 0.7f * m359C); - } - dVar14 = mVelocity; - local_c0.x = dVar14 * (1.0f - m3598); - if (mVelocity < 0.0f) { - local_c0.x -= (dVar12 * dVar14); - } else { - local_c0.x += (dVar12 * dVar14); - } - if (((!mAcch.ChkGroundHit()) || (!dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd))) || - (m3580 == 8)) - { - sVar5 = 0; - } else { - sVar5 = getGroundAngle(&mAcch.m_gnd, current.angle.y); - } - f32 fVar1 = 0.0f; - local_c0.x *= cM_scos(sVar5); - if (local_c0.x < 0) { - local_c0.x *= 0.85f; - } - if (std::abs(local_c0.x) < 0.05f) { - speedF = 0.0f; - speed.x = fVar1; - speed.z = fVar1; - } else { - speedF = local_c0.x; - fVar1 = 0.0f; - if (mCurProc == daPyProc_SWIM_MOVE_e) { - uVar2 = cM_rad2s((M_PI * (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() / - mFrameCtrlUnder[UNDER_MOVE0_e].getEnd()))); - dVar13 = std::abs(cM_scos((uVar2 & 0xFFFF))); - dVar14 = getSwimTimerRate(); - fVar1 = (((1.0f + (dVar14 * daPy_HIO_swim_c0::m.field_0x7C)) / - ((1.0f - (speedF * daPy_HIO_swim_c0::m.field_0x7C)) + - (speedF * dVar13) * daPy_HIO_swim_c0::m.field_0x60))); - speed.x = fVar1 * cM_ssin(current.angle.y); - speed.z = fVar1 * cM_scos(current.angle.y); - } else if (((mCurProc != daPyProc_CUT_ROLL_e) || (!dComIfGp_event_runCheck())) || - ((mDemo.getDemoType() != 0 || - (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK2B_e)))) - { - speed.x = speedF * cM_ssin(current.angle.y); - speed.z = speedF * cM_scos(current.angle.y); - } else { - speed.x = 0.0f; - speed.z = fVar1; - } - } - m36AC = m36A0; - if (((!checkModeFlg(ModeFlg_MIDAIR | ModeFlg_WHIDE | ModeFlg_HANG | ModeFlg_ROPE | - ModeFlg_IN_SHIP | ModeFlg_CLIMB | ModeFlg_PUSHPULL | ModeFlg_LADDER | - ModeFlg_CRAWL | ModeFlg_CAUGHT)) && - (!dComIfGp_event_runCheck())) && - ((mDemo.getDemoType() == 0 && - ((((!checkHeavyStateOn() && (mCurrAttributeCode == dBgS_Attr_ICE_e)) && - (!checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)))) && - ((!mAcch.ChkWallHit() && (mAcch.ChkGroundHit())))))))) - { - cLib_addCalc(&m36A0.x, 0.0f, 0.03f, 100.0f, 0.5f); - cLib_addCalc(&m36A0.z, 0.0f, 0.03f, 100.0f, 0.5f); - m36A0 += (mOldSpeed - speed) * 0.75f; - speed += (mOldSpeed - speed) * 0.25f; - } else { - fVar1 = 0.0f; - m36A0.x = 0.0f; - m36A0.z = fVar1; - } - m36A0.y = 0.0f; - setBeltConveyerPower(); - setWindAtPower(); - dVar14 = speed.y; - if (checkHeavyStateOn()) { - speed.y += gravity * 2.25f; - if (speed.y < (maxFallSpeed * 1.5f)) { - speed.y = maxFallSpeed * 1.5f; - } - } else { - speed.y += gravity; - if (speed.y < maxFallSpeed) { - speed.y = maxFallSpeed; - } - } - if ((speed.y <= 0.0f) && (dVar14 > 0.0f)) { - m35F0 = current.pos.y; - } - current.pos += speed; - for (iVar7 = 0; iVar7 < 2; iVar7++) { - mFootData[iVar7].field_0x018 = local_60[iVar7]; - mFootData[iVar7].field_0x00C = local_78[iVar7]; - } - m359C = dVar12; + return; } + + cXyz spB0[2]; + cXyz sp98[2]; + mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x22), mDoMtx_stack_c::get()); + mDoMtx_stack_c::multVec(&l_toe_pos, &spB0[1]); + mDoMtx_stack_c::multVec(&l_heel_pos, &sp98[1]); + mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x27), mDoMtx_stack_c::get()); + mDoMtx_stack_c::multVec(&l_toe_pos, &spB0[0]); + mDoMtx_stack_c::multVec(&l_heel_pos, &sp98[0]); + mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x1E), mDoMtx_stack_c::get()); + MtxP r26 = mDoMtx_stack_c::get(); + f32 f31 = cM_ssin(m34E0); + f32 f30 = cM_scos(m34E0); + f32 sp0C[2]; + cXyz sp80[2]; + for (int i = 0; i < 2; i++) { + sp80[i] = sp98[i] + spB0[i]; + sp80[i] *= 0.5f; + f32 f2 = r26[1][3] + f30 * (sp80[i].y - r26[1][3]); + sp0C[i] = f2 + f31 * (sp80[i].z - r26[2][3]); + } + if (sp0C[0] < sp0C[1]) { + m34BC = 0; + } else { + m34BC = 1; + } + cXyz sp7C; + cXyz sp68; + sp68 = spB0[m34BC] - mFootData[m34BC].field_0x018; + f32 f31_2 = sp68.absXZ(); + if ((m3598 < 1.0f) && (std::abs(m35B4 - mStickDistance) < 0.2f)) { + f31_2 = ((f31_2 * 0.3f) + 0.7f * m359C); + } + sp7C.z = mVelocity * (1.0f - m3598); + if (mVelocity < 0.0f) { + sp7C.z -= (f31_2 * m3598); + } else { + sp7C.z += (f31_2 * m3598); + } + s16 r3; + if (((!mAcch.ChkGroundHit()) || (!dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd))) || (m3580 == 8)) { + r3 = 0; + } else { + r3 = getGroundAngle(&mAcch.m_gnd, current.angle.y); + } + sp7C.z *= cM_scos(r3); + if (r3 < 0) { + sp7C.z *= 0.85f; + } + if (std::abs(sp7C.z) < 0.05f) { + speedF = 0.0f; + speed.x = 0.0f; + speed.z = 0.0f; + } else { + speedF = sp7C.z; + if (mCurProc == daPyProc_SWIM_MOVE_e) { + u16 r3 = + cM_rad2s(M_PI * (mFrameCtrlUnder[UNDER_MOVE0_e].getFrame() / mFrameCtrlUnder[UNDER_MOVE0_e].getEnd())); + f32 f30; + f30 = std::abs(cM_scos(r3 & 0xFFFF)); + f32 f1 = + ((speedF * (1.0f - daPy_HIO_swim_c0::m.field_0x60)) + daPy_HIO_swim_c0::m.field_0x60 * (speedF * f30)) / + (1.0f + (daPy_HIO_swim_c0::m.field_0x7C * getSwimTimerRate())); + speed.x = f1 * cM_ssin(current.angle.y); + speed.z = f1 * cM_scos(current.angle.y); + } else if (((mCurProc != daPyProc_CUT_ROLL_e) || (!dComIfGp_event_runCheck())) || + (mDemo.getDemoType() != 0 || (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK2B_e))) + { + speed.x = speedF * cM_ssin(current.angle.y); + speed.z = speedF * cM_scos(current.angle.y); + } else { + speed.x = 0.0f; + speed.z = 0.0f; + } + } + m36AC = m36A0; + if (!checkModeFlg( + // Note: These flags combine into 0x11612832. + ModeFlg_MIDAIR | ModeFlg_WHIDE | ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_IN_SHIP | ModeFlg_CLIMB | + ModeFlg_PUSHPULL | ModeFlg_LADDER | ModeFlg_CRAWL | ModeFlg_CAUGHT + ) && + !dComIfGp_event_runCheck() && mDemo.getDemoType() == 0 && !checkHeavyStateOn() && + mCurrAttributeCode == dBgS_Attr_ICE_e && + !checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)) && !mAcch.ChkWallHit() && + mAcch.ChkGroundHit()) + { + cLib_addCalc(&m36A0.x, 0.0f, 0.03f, 100.0f, 0.5f); + cLib_addCalc(&m36A0.z, 0.0f, 0.03f, 100.0f, 0.5f); + m36A0 += (mOldSpeed - speed) * 0.75f; + speed += (mOldSpeed - speed) * 0.25f; + } else { + m36A0.x = 0.0f; + m36A0.z = 0.0f; + } + m36A0.y = 0.0f; + setBeltConveyerPower(); + setWindAtPower(); + f32 f1 = speed.y; + if (checkHeavyStateOn()) { + speed.y += gravity * 2.25f; + if (speed.y < (maxFallSpeed * 1.5f)) { + speed.y = maxFallSpeed * 1.5f; + } + } else { + speed.y += gravity; + if (speed.y < maxFallSpeed) { + speed.y = maxFallSpeed; + } + } + if (speed.y <= 0.0f && f1 > 0.0f) { + m35F0 = current.pos.y; + } + current.pos += speed; + for (int i = 0; i < 2; i++) { + mFootData[i].field_0x018 = spB0[i]; + mFootData[i].field_0x00C = sp98[i]; + } + m359C = f31_2; } /* 8010959C-80109E80 .text posMove__9daPy_lk_cFv */ @@ -2474,7 +2462,7 @@ void daPy_lk_c::posMove() { pJVar11->mTranslate.x = local_54.x; pJVar11->mTranslate.y = local_54.y; pJVar11->mTranslate.z = local_54.z; - } else if ((m34C2 == 2) || (m34C2 == 6)) { + } else if (m34C2 == 2 || m34C2 == 6) { pJVar11->mTranslate.x = local_54.x; pJVar11->mTranslate.z = local_54.z; if (m34C2 == 6) { @@ -2491,7 +2479,7 @@ void daPy_lk_c::posMove() { pJVar11->mTranslate.y = local_94.y; m35E0 = local_94.y; m34C2 = 5; - } else if ((m34C2 == 7) || (m34C2 == 3)) { + } else if (m34C2 == 7 || m34C2 == 3) { local_94.x = local_54.x; local_94.y = local_54.y; local_94.z = local_54.z; @@ -2505,8 +2493,8 @@ void daPy_lk_c::posMove() { posMoveFromFootPos(); if (!checkNoCollisionCorret()) { current.pos += *mStts.GetCCMoveP(); - if ((!dComIfGp_event_runCheck()) && (mDemo.getDemoType() == 0)) { - if ((!checkNoResetFlg1(daPyFlg1_UNK10000000)) || (!checkHeavyStateOn())) { + if (!dComIfGp_event_runCheck() && mDemo.getDemoType() == 0) { + if (!checkNoResetFlg1(daPyFlg1_UNK10000000) || !checkHeavyStateOn()) { current.pos.x += m3644 * cM_ssin(m3640); current.pos.z += m3644 * cM_scos(m3640); } @@ -2528,7 +2516,7 @@ void daPy_lk_c::posMove() { } else { m3610 = 0.0f; } - if ((mAcch.ChkGroundHit()) && (dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd))) { + if (mAcch.ChkGroundHit() && dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd)) { uVar8 = getGroundAngle(&mAcch.m_gnd, 0); current.pos.z += m36A0.z * cM_scos(uVar8 & 0xFFFF); uVar8 = getGroundAngle(&mAcch.m_gnd, 0x4000); @@ -2540,9 +2528,9 @@ void daPy_lk_c::posMove() { current.pos.z += m3730.z; } } - } else if ((((!dComIfGp_event_runCheck()) && (mDemo.getDemoType() == 0)) && - (daPy_getPlayerActorClass() == this)) && - (mCurProc == daPyProc_HANG_MOVE_e)) + } else if (((!dComIfGp_event_runCheck() && mDemo.getDemoType() == 0) && + daPy_getPlayerActorClass() == this) && + mCurProc == daPyProc_HANG_MOVE_e) { dVar13 = mStts.GetCCMoveP()->absXZ(); if (dVar13 > 1.0f) { @@ -2558,8 +2546,8 @@ void daPy_lk_c::posMove() { } m3644 = 0.0f; mStts.GetCCMoveP()->zero(); - if ((((m34C2 == 1) || (m34C2 == 8)) || (m34C2 == 9)) || (m34C2 == 5)) { - if ((m34C2 == 1) || (m34C2 == 5)) { + if (((m34C2 == 1 || m34C2 == 8) || m34C2 == 9) || m34C2 == 5) { + if (m34C2 == 1 || m34C2 == 5) { local_a0 = m3700 - local_94; } else { local_a0 = local_94 - m3700; @@ -2582,7 +2570,7 @@ void daPy_lk_c::setShapeAngleToAtnActor() { /* 80109ED8-80109F4C .text cancelItemUpperReadyAnime__9daPy_lk_cFv */ BOOL daPy_lk_c::cancelItemUpperReadyAnime() { - if ((dComIfGp_getDoStatus() == dActStts_RETURN_e) && (doTrigger())) { + if (dComIfGp_getDoStatus() == dActStts_RETURN_e && doTrigger()) { seStartOnlyReverb(JA_SE_CANCEL_1); resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); procWait_init(); @@ -2631,7 +2619,7 @@ BOOL daPy_lk_c::setBodyAngleToCamera() { s16 local_16; s16 local_18; - if ((dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x10)) != 0) { + if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x10) != 0) { bVar1 = dCam_getBody()->CalcSubjectAngle(&local_16, &local_18); if (bVar1 != 0) { shape_angle.y = local_18; @@ -2697,15 +2685,15 @@ void daPy_lk_c::setSpeedAndAngleNormal(s16 param_1) { if (checkGrabWear()) { dVar11 *= 1.0f / (daPy_HIO_move_c0::m.field_0x74 * daPy_HIO_move_c0::m.field_0x74); } - if (((!mpAttention->Lockon()) && (cLib_distanceAngleS(m34E8, current.angle.y) > 0x7800)) && - (mCurProc != daPyProc_MOVE_TURN_e)) + if ((!mpAttention->Lockon() && cLib_distanceAngleS(m34E8, current.angle.y) > 0x7800) && + mCurProc != daPyProc_MOVE_TURN_e) { if (checkModeFlg(ModeFlg_00000001)) { return; } if (mCurProc == daPyProc_MOVE_e) { if ((speedF / mMaxNormalSpeed > daPy_HIO_slip_c0::m.field_0x4) && - (getDirectionFromAngle(m34EA - m34DC) == DIR_BACKWARD)) + getDirectionFromAngle(m34EA - m34DC) == DIR_BACKWARD) { return; } @@ -2767,8 +2755,8 @@ void daPy_lk_c::setSpeedAndAngleNormal(s16 param_1) { } else { dVar9 = 0.0f; } - if (((!mpAttention->Lockon()) && (mCurProc != daPyProc_MOVE_TURN_e)) && - (mStickDistance > 0.05f)) + if ((!mpAttention->Lockon() && mCurProc != daPyProc_MOVE_TURN_e) && + mStickDistance > 0.05f) { sVar6 = shape_angle.y; cLib_addCalcAngleS(&shape_angle.y, m34E8, daPy_HIO_move_c0::m.field_0x6, @@ -2883,9 +2871,9 @@ void daPy_lk_c::setFrameCtrl(J3DFrameCtrl* frameCtrl, u8 attribute, s16 start, s /* 8010ACEC-8010AD2C .text checkAtnWaitAnime__9daPy_lk_cFv */ BOOL daPy_lk_c::checkAtnWaitAnime() { - if (((mpAttnActorLockOn != NULL) && - (((fopAcM_GetGroup(mpAttnActorLockOn) == fopAc_ENEMY_e) || - (fopAcM_GetName(mpAttnActorLockOn) == PROC_BOOMERANG)))) || + if ((mpAttnActorLockOn != NULL && + ((fopAcM_GetGroup(mpAttnActorLockOn) == fopAc_ENEMY_e || + fopAcM_GetName(mpAttnActorLockOn) == PROC_BOOMERANG))) || (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK17_e)) { return true; @@ -2895,80 +2883,73 @@ BOOL daPy_lk_c::checkAtnWaitAnime() { /* 8010AD2C-8010B798 .text setBlendMoveAnime__9daPy_lk_cFf */ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { - /* Nonmatching - regalloc */ - f32 fVar1; - s16 sVar5; - int iVar6; - daPy_ANM dVar9; - daPy_ANM dVar10; - f32 dVar14; - f32 in_f27; - f32 dVar16; - f32 dVar17; - + f32 f1_1; if (m3580 == 8) { - fVar1 = 1.0f; + f1_1 = 1.0f; } else { - fVar1 = cM_scos(m34E2); + f1_1 = cM_scos(m34E2); } - f32 dVar18 = (std::abs(mVelocity * fVar1) / mMaxNormalSpeed); + f32 f30 = (std::abs(mVelocity * f1_1) / mMaxNormalSpeed); J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE1_e]; - if (dComIfGp_event_runCheck() || (mDemo.getDemoType() != 0)) { - dVar17 = daPy_HIO_move_c0::m.field_0x44; - dVar16 = daPy_HIO_move_c0::m.field_0x64; + f32 f29; + f32 f28; + if (dComIfGp_event_runCheck() || mDemo.getDemoType() != 0) { + f29 = daPy_HIO_move_c0::m.field_0x44; + f28 = daPy_HIO_move_c0::m.field_0x64; } else if (checkHeavyStateOn()) { - dVar17 = daPy_HIO_move_c0::m.field_0x78; - dVar16 = daPy_HIO_move_c0::m.field_0x7C; + f29 = daPy_HIO_move_c0::m.field_0x78; + f28 = daPy_HIO_move_c0::m.field_0x7C; } else { - dVar17 = daPy_HIO_move_c0::m.field_0x40; - dVar16 = daPy_HIO_move_c0::m.field_0x60; + f29 = daPy_HIO_move_c0::m.field_0x40; + f28 = daPy_HIO_move_c0::m.field_0x60; } - daPy_ANM dVar11 = ANM_WAITS; + daPy_ANM r28 = ANM_WAITS; + daPy_ANM r27; + daPy_ANM r26; if (checkGrabWear()) { - dVar10 = ANM_WALKBARREL; - dVar9 = ANM_WALKBARREL; + r27 = ANM_WALKBARREL; + r26 = ANM_WALKBARREL; } else if (checkHeavyStateOn()) { - if (((m373C.abs2XZ() > 25.0f) && + if ((m373C.abs2XZ() > 25.0f && (cLib_distanceAngleS(cM_atan2s(m373C.x, m373C.z), shape_angle.y) >= 0x4000)) || ((checkNoResetFlg1(daPyFlg1_UNK10000000) && m3644 > 5.0f) && - (cLib_distanceAngleS(m3640, shape_angle.y) >= 0x4000))) + cLib_distanceAngleS(m3640, shape_angle.y) >= 0x4000)) { - dVar10 = ANM_WALKHBOOTSKAZE; - dVar9 = ANM_WALKHBOOTSKAZE; + r27 = ANM_WALKHBOOTSKAZE; + r26 = ANM_WALKHBOOTSKAZE; if (!checkNoResetFlg1(daPyFlg1_UNK1000000)) { param_1 = daPy_HIO_basic_c0::m.field_0xC; onNoResetFlg1(daPyFlg1_UNK1000000); } } else { - dVar10 = ANM_WALKHBOOTS; - dVar9 = ANM_WALKHBOOTS; + r27 = ANM_WALKHBOOTS; + r26 = ANM_WALKHBOOTS; if (checkNoResetFlg1(daPyFlg1_UNK1000000)) { param_1 = daPy_HIO_basic_c0::m.field_0xC; offNoResetFlg1(daPyFlg1_UNK1000000); } } } else if (m3580 != 8 && m34E2 <= -0x11C7) { - dVar10 = ANM_WALKSLOPE; - dVar9 = ANM_WALKSLOPE; + r27 = ANM_WALKSLOPE; + r26 = ANM_WALKSLOPE; if (!checkNoResetFlg1(daPyFlg1_UNK80)) { param_1 = daPy_HIO_basic_c0::m.field_0xC; onNoResetFlg1(daPyFlg1_UNK80); } } else { - dVar10 = ANM_WALK; - dVar14 = m3730.abs2XZ(); - if ((dVar14 > 25.0f && + r27 = ANM_WALK; + if ((m3730.abs2XZ() > 25.0f && (cLib_distanceAngleS(cM_atan2s(m3730.x, m3730.z), shape_angle.y) >= 0x4000)) || ((checkNoResetFlg1(daPyFlg1_UNK10000000) && m3644 > 5.0f) && - (cLib_distanceAngleS(m3640, shape_angle.y) >= 0x4000))) + cLib_distanceAngleS(m3640, shape_angle.y) >= 0x4000)) { - dVar9 = ANM_DASHKAZE; + r26 = ANM_DASHKAZE; if (!checkNoResetFlg1(daPyFlg1_UNK1000000)) { param_1 = daPy_HIO_basic_c0::m.field_0xC; onNoResetFlg1(daPyFlg1_UNK1000000); } } else { - dVar9 = ANM_DASH; + r26 = ANM_DASH; if (checkNoResetFlg1(daPyFlg1_UNK1000000)) { param_1 = daPy_HIO_basic_c0::m.field_0xC; offNoResetFlg1(daPyFlg1_UNK1000000); @@ -2979,24 +2960,24 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { offNoResetFlg1(daPyFlg1_UNK80); } } - BOOL bVar4 = false; - f32 dVar12 = m36A0.abs2XZ(); - f32 dVar13 = m3730.abs2XZ(); - dVar14 = m36B8.abs2XZ(); + BOOL r25 = false; + f32 f31 = m36A0.abs2XZ(); + f32 f25 = m3730.abs2XZ(); + f32 f1_2 = m36B8.abs2XZ(); BOOL bVar3; - if (dVar12 > dVar13) { - if (dVar12 > dVar14) { - dVar14 = dVar12; + if (f31 > f25) { + if (f31 > f1_2) { + f1_2 = f31; } bVar3 = true; - } else if (dVar13 > dVar14) { - dVar14 = dVar13; + } else if (f25 > f1_2) { + f1_2 = f25; bVar3 = false; } else { bVar3 = false; } if (mStickDistance < 0.05f && - ((dVar14 >= 25.0f || ((dVar14 >= 0.09f && ((m34C3 == 9 || m34C3 == 10))))))) + ((f1_2 >= 25.0f || ((f1_2 >= 0.09f && ((m34C3 == 9 || m34C3 == 10))))))) { seStartMapInfo(JA_SE_LK_SLIP_SUS); if ((m34C3 != 9 && (bVar3)) || ((m34C3 != 10 && (!bVar3)))) { @@ -3026,16 +3007,22 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { if (m34C3 == 9) { param_1 = daPy_HIO_basic_c0::m.field_0xC; } - if (dVar18 < daPy_HIO_move_c0::m.field_0x2C || checkHeavyStateOn()) { + if (f30 < daPy_HIO_move_c0::m.field_0x2C || checkHeavyStateOn()) { if (checkHeavyStateOn()) { - dVar14 = dVar18 / daPy_HIO_move_c0::m.field_0x80; - if (dVar14 > 0.55f) { - bVar4 = true; + f25 = f30 / daPy_HIO_move_c0::m.field_0x80; + if (f25 > 0.55f) { + r25 = true; } } else { - dVar14 = dVar18 / daPy_HIO_move_c0::m.field_0x2C; + f25 = f30 / daPy_HIO_move_c0::m.field_0x2C; } - dVar11 = ANM_WAITS; + r28 = ANM_WAITS; + int r24; + f32 in_f27; // Bug? This variable is uninitialized in some paths. TODO: Look into this. + #ifdef __clang__ + // Just a quick hack to hide clangd's warning for now. + in_f27 = 0.0f; + #endif if (checkModeFlg(ModeFlg_00000001)) { if (mpAttention->Lockon()) { if (checkUpperGuardAnime()) { @@ -3045,36 +3032,36 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { return; } } - fVar1 = m3598 = 0.0f; - iVar6 = 2; - if ((checkNoResetFlg1(daPyFlg1_CONFUSE) && (mDemo.getDemoType() == 0)) && + f32 f1 = m3598 = 0.0f; + r24 = 2; + if ((checkNoResetFlg1(daPyFlg1_CONFUSE) && mDemo.getDemoType() == 0) && !dComIfGp_event_runCheck()) { if (m_anm_heap_under[UNDER_MOVE0_e].mIdx != LKANM_BCK_WAITQ) { - setSingleMoveAnime(ANM_WAITQ, daPy_HIO_move_c0::m.field_0x84, fVar1, -1, + setSingleMoveAnime(ANM_WAITQ, daPy_HIO_move_c0::m.field_0x84, f1, -1, daPy_HIO_basic_c0::m.field_0xC); m34C3 = 2; } return; } if (shape_angle.y != m34DE && !mpAttention->Lockon()) { - sVar5 = (s16)(shape_angle.y - m34DE); - if (sVar5 > 0) { - dVar10 = ANM_ATNWLS; + s16 r3 = (s16)(shape_angle.y - m34DE); + if (r3 > 0) { + r27 = ANM_ATNWLS; } else { - dVar10 = ANM_ATNWRS; + r27 = ANM_ATNWRS; } - dVar14 = (0.5f + 0.001f * abs(sVar5)); - if (dVar14 > 1.0f) { - dVar14 = 1.0f; + f25 = (0.5f + 0.001f * abs(r3)); + if (f25 > 1.0f) { + f25 = 1.0f; } if (!checkNoResetFlg1(daPyFlg1_UNK800000)) { param_1 = daPy_HIO_basic_c0::m.field_0xC; } onNoResetFlg1(daPyFlg1_UNK800000); - dVar17 = daPy_HIO_atnMove_c0::m.field_0x28; + f29 = daPy_HIO_atnMove_c0::m.field_0x28; } else if (checkRestHPAnime()) { - dVar11 = ANM_WAITB; + r28 = ANM_WAITB; in_f27 = daPy_HIO_move_c0::m.field_0x3C; if (checkNoResetFlg1(daPyFlg1_UNK800000)) { param_1 = daPy_HIO_basic_c0::m.field_0xC; @@ -3088,13 +3075,13 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { offNoResetFlg1(daPyFlg1_UNK800000); } } else { - m3598 = (1.0f - ((1.0f - dVar16) * dVar14)); - iVar6 = 1; + m3598 = (1.0f - ((1.0f - f28) * f25)); + r24 = 1; in_f27 = daPy_HIO_move_c0::m.field_0x38; } - setMoveAnime(dVar14, in_f27, dVar17, dVar11, dVar10, iVar6, param_1); - if (((dVar11 == ANM_WAITB) && - ((!dComIfGp_event_runCheck() || (mDemo.getDemoType() != 3)))) && + setMoveAnime(f25, in_f27, f29, r28, r27, r24, param_1); + if ((r28 == ANM_WAITB && + ((!dComIfGp_event_runCheck() || mDemo.getDemoType() != 3))) && (mFrameCtrlUnder[UNDER_MOVE0_e].checkPass(15.0f))) { if (dComIfGs_getLife() <= 2) { @@ -3103,24 +3090,24 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { voiceStart(20); } } - } else if (dVar18 < daPy_HIO_move_c0::m.field_0x30) { - fVar1 = (dVar18 - daPy_HIO_move_c0::m.field_0x2C) / + } else if (f30 < daPy_HIO_move_c0::m.field_0x30) { + f32 f1 = (f30 - daPy_HIO_move_c0::m.field_0x2C) / (daPy_HIO_move_c0::m.field_0x30 - daPy_HIO_move_c0::m.field_0x2C); - dVar14 = fVar1; - setMoveAnime(fVar1, dVar17, daPy_HIO_move_c0::m.field_0x48, dVar10, dVar9, 1, param_1); - m3598 = (dVar16 * (1.0f - dVar14)); + setMoveAnime(f1, f29, daPy_HIO_move_c0::m.field_0x48, r27, r26, 1, param_1); + m3598 = (f28 * (1.0f - f1)); } else { - if (dVar12 >= 169.0f) { - fVar1 = 1.7f * daPy_HIO_move_c0::m.field_0x48; + f32 f1; + if (f31 >= 169.0f) { + f1 = 1.7f * daPy_HIO_move_c0::m.field_0x48; onResetFlg0(daPyRFlg0_UNK40000); } else { - fVar1 = daPy_HIO_move_c0::m.field_0x48; + f1 = daPy_HIO_move_c0::m.field_0x48; } - setMoveAnime(1.0f, fVar1, fVar1, dVar9, dVar9, 1, param_1); + setMoveAnime(1.0f, f1, f1, r26, r26, 1, param_1); m3598 = 0.0f; } } - if ((dVar18 >= 0.9f) || (bVar4)) { + if (f30 >= 0.9f || (r25)) { onResetFlg0(daPyRFlg0_UNK10); } if (!checkModeFlg(ModeFlg_00000001)) { @@ -3132,13 +3119,13 @@ void daPy_lk_c::setBlendMoveAnime(f32 param_1) { resetFootEffect(); } } - if ((m34C3 != 9) && (m34C3 != 10)) { - if (dVar18 > daPy_HIO_move_c0::m.field_0x34) { - setHandModel(dVar9); - } else if (dVar18 > 0.0f) { - setHandModel(dVar11); + if (m34C3 != 9 && m34C3 != 10) { + if (f30 > daPy_HIO_move_c0::m.field_0x34) { + setHandModel(r26); + } else if (f30 > 0.0f) { + setHandModel(r27); } else { - setHandModel(dVar10); + setHandModel(r28); } } } @@ -3183,9 +3170,9 @@ void daPy_lk_c::setBlendAtnBackMoveAnime(f32 param_1) { setMoveAnime(fVar1, daPy_HIO_atnMoveB_c0::m.field_0x24, daPy_HIO_atnMoveB_c0::m.field_0x28, ANM_ATNWB, ANM_ATNDB, 4, param_1); m3598 = 1.0f - dVar6; - if ((frameCtrl.checkPass(5.0f)) || (frameCtrl.checkPass(15.0f))) { + if (frameCtrl.checkPass(5.0f) || frameCtrl.checkPass(15.0f)) { onResetFlg0(daPyRFlg0_RIGHT_FOOT_ON_GROUND); - } else if ((frameCtrl.checkPass(3.0f)) || (frameCtrl.checkPass(13.0f))) { + } else if (frameCtrl.checkPass(3.0f) || frameCtrl.checkPass(13.0f)) { onResetFlg0(daPyRFlg0_LEFT_FOOT_ON_GROUND); } } else { @@ -3197,9 +3184,9 @@ void daPy_lk_c::setBlendAtnBackMoveAnime(f32 param_1) { } setMoveAnime(1.0f, fVar1, fVar1, ANM_ATNDB, ANM_ATNDB, 4, dVar6); m3598 = 0.0f; - if ((frameCtrl.checkPass(5.0f)) || (frameCtrl.checkPass(15.0f))) { + if (frameCtrl.checkPass(5.0f) || frameCtrl.checkPass(15.0f)) { onResetFlg0(daPyRFlg0_RIGHT_FOOT_ON_GROUND); - } else if ((frameCtrl.checkPass(3.0f)) || (frameCtrl.checkPass(13.0f))) { + } else if (frameCtrl.checkPass(3.0f) || frameCtrl.checkPass(13.0f)) { onResetFlg0(daPyRFlg0_LEFT_FOOT_ON_GROUND); } } @@ -3213,21 +3200,16 @@ void daPy_lk_c::setBlendAtnBackMoveAnime(f32 param_1) { } /* 8010BB08-8010C010 .text setBlendAtnMoveAnime__9daPy_lk_cFf */ -void daPy_lk_c::setBlendAtnMoveAnime(f32 param_1) { - /* Nonmatching - "fmr" instruction in wrong place */ - f32 dVar6 = param_1; - s16 uVar5; - daPy_ANM dVar8; - daPy_ANM dVar9; - - if ((mAcch.ChkGroundHit()) || (!dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd))) { - uVar5 = 0; +void daPy_lk_c::setBlendAtnMoveAnime(f32 f30) { + s16 r3; + if (mAcch.ChkGroundHit() || !dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd)) { + r3 = 0; } else { - uVar5 = getGroundAngle(&mAcch.m_gnd, current.angle.y); + r3 = getGroundAngle(&mAcch.m_gnd, current.angle.y); } - f32 dVar13 = std::abs((mVelocity * cM_scos(uVar5)) / mMaxNormalSpeed); + f32 f31 = std::abs((mVelocity * cM_scos(r3)) / mMaxNormalSpeed); int iVar6 = current.angle.y - shape_angle.y; - f32 fVar3 = cM_ssin(iVar6); + f32 f2 = cM_ssin(iVar6); f32 fVar4 = cM_scos(iVar6); u8 uVar1 = mDirection; if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK17_e) { @@ -3237,8 +3219,8 @@ void daPy_lk_c::setBlendAtnMoveAnime(f32 param_1) { mDirection = DIR_RIGHT; } } else if (mStickDistance > 0.05f) { - if ((mpAttnActorLockOn == NULL) && ((fVar4 <= daPy_HIO_atnMoveB_c0::m.field_0x30 || - (fVar4 >= daPy_HIO_atnMoveB_c0::m.field_0x2C)))) + if (mpAttnActorLockOn == NULL && + (fVar4 <= daPy_HIO_atnMoveB_c0::m.field_0x30 || (fVar4 >= daPy_HIO_atnMoveB_c0::m.field_0x2C))) { if (fVar4 <= daPy_HIO_atnMoveB_c0::m.field_0x30) { mDirection = DIR_BACKWARD; @@ -3246,41 +3228,43 @@ void daPy_lk_c::setBlendAtnMoveAnime(f32 param_1) { mDirection = DIR_FORWARD; } } else { - if ((uVar1 == DIR_BACKWARD) || (uVar1 == DIR_FORWARD)) { + if (uVar1 == DIR_BACKWARD || uVar1 == DIR_FORWARD) { mDirection = DIR_RIGHT; mMaxNormalSpeed = daPy_HIO_atnMove_c0::m.field_0xC; } - if (fVar3 > 0.0f) { + if (f2 > 0.0f) { mDirection = DIR_LEFT; - } else if (fVar3 < 0.0f) { + } else if (f2 < 0.0f) { mDirection = DIR_RIGHT; } } } u8 uVar2 = mDirection; if (uVar1 != uVar2) { - dVar6 = daPy_HIO_basic_c0::m.field_0xC; + f30 = daPy_HIO_basic_c0::m.field_0xC; } if (uVar2 == DIR_BACKWARD) { mMaxNormalSpeed = daPy_HIO_atnMoveB_c0::m.field_0xC; - setBlendAtnBackMoveAnime(dVar6); + setBlendAtnBackMoveAnime(f30); } else if (uVar2 == DIR_FORWARD) { mMaxNormalSpeed = daPy_HIO_move_c0::m.field_0x18; - setBlendMoveAnime(dVar6); + setBlendMoveAnime(f30); } else { - if ((uVar2 != DIR_RIGHT) && (uVar2 != DIR_LEFT)) { + daPy_ANM dVar8; + daPy_ANM dVar9; + if (uVar2 != DIR_RIGHT && uVar2 != DIR_LEFT) { mDirection = DIR_RIGHT; - dVar6 = daPy_HIO_basic_c0::m.field_0xC; + f30 = daPy_HIO_basic_c0::m.field_0xC; } J3DFrameCtrl& frameCtrl = mFrameCtrlUnder[UNDER_MOVE1_e]; + f32 f29; if (checkHeavyStateOn()) { - fVar3 = 0.6f; + f29 = 0.6f; } else { - fVar3 = 1.0f; + f29 = 1.0f; } - f32 dVar11 = fVar3; - if (dVar13 < daPy_HIO_atnMove_c0::m.field_0x1C) { - fVar3 = dVar13 / daPy_HIO_atnMove_c0::m.field_0x1C; + if (f31 < daPy_HIO_atnMove_c0::m.field_0x1C) { + f32 f1 = f31 / daPy_HIO_atnMove_c0::m.field_0x1C; if (mDirection == DIR_LEFT) { dVar8 = ANM_ATNLS; dVar9 = ANM_ATNWLS; @@ -3295,14 +3279,13 @@ void daPy_lk_c::setBlendAtnMoveAnime(f32 param_1) { iVar6 = 4; m3598 = 1.0f; } - setMoveAnime(fVar3, daPy_HIO_atnMove_c0::m.field_0x24, - (daPy_HIO_atnMove_c0::m.field_0x28 * dVar11), dVar8, dVar9, iVar6, dVar6); + f32 f2 = daPy_HIO_atnMove_c0::m.field_0x24; + f32 f3 = daPy_HIO_atnMove_c0::m.field_0x28 * f29; + setMoveAnime(f1, f2, f3, dVar8, dVar9, iVar6, f30); } else { - f32 dVar10; - if (dVar13 < daPy_HIO_atnMove_c0::m.field_0x20) { - fVar3 = (dVar13 - daPy_HIO_atnMove_c0::m.field_0x1C) / - (daPy_HIO_atnMove_c0::m.field_0x20 - daPy_HIO_atnMove_c0::m.field_0x1C); - dVar10 = fVar3; + if (f31 < daPy_HIO_atnMove_c0::m.field_0x20) { + f32 f28 = (f31 - daPy_HIO_atnMove_c0::m.field_0x1C) / + (daPy_HIO_atnMove_c0::m.field_0x20 - daPy_HIO_atnMove_c0::m.field_0x1C); if (mDirection == DIR_LEFT) { dVar8 = ANM_ATNWLS; dVar9 = ANM_ATNDLS; @@ -3310,27 +3293,28 @@ void daPy_lk_c::setBlendAtnMoveAnime(f32 param_1) { dVar8 = ANM_ATNWRS; dVar9 = ANM_ATNDRS; } - setMoveAnime(fVar3, (daPy_HIO_atnMove_c0::m.field_0x28 * dVar11), - (daPy_HIO_atnMove_c0::m.field_0x2C * dVar11), dVar8, dVar9, 4, dVar6); - m3598 = 1.0f - (dVar10 * m3598); + f32 f2 = daPy_HIO_atnMove_c0::m.field_0x28 * f29; + f32 f3 = daPy_HIO_atnMove_c0::m.field_0x2C * f29; + setMoveAnime(f28, f2, f3, dVar8, dVar9, 4, f30); + m3598 = 1.0f - (f28 * m3598); } else { if (mDirection == DIR_LEFT) { dVar9 = ANM_ATNDLS; } else { dVar9 = ANM_ATNDRS; } - dVar10 = m36A0.abs2XZ(); - if (dVar10 >= 49.0f) { - fVar3 = 1.9f * daPy_HIO_atnMove_c0::m.field_0x2C; + f32 f2; + if (m36A0.abs2XZ() >= 49.0f) { + f2 = 1.9f * daPy_HIO_atnMove_c0::m.field_0x2C; onResetFlg0(daPyRFlg0_UNK40000); } else { - fVar3 = daPy_HIO_atnMove_c0::m.field_0x2C * dVar11; + f2 = daPy_HIO_atnMove_c0::m.field_0x2C * f29; } - setMoveAnime(1.0f, fVar3, fVar3, dVar9, dVar9, 4, dVar6); + setMoveAnime(1.0f, f2, f2, dVar9, dVar9, 4, f30); m3598 = 0.0f; } } - if (dVar13 >= 0.9f) { + if (f31 >= 0.9f) { onResetFlg0(daPyRFlg0_UNK10); } if (!checkModeFlg(ModeFlg_00000001)) { @@ -3566,9 +3550,9 @@ void daPy_lk_c::deleteEquipItem(BOOL param_1) { /* 8010C71C-8010C7F4 .text setFallVoice__9daPy_lk_cFv */ void daPy_lk_c::setFallVoice() { - if (((!checkNoResetFlg0(daPyFlg0_NO_FALL_VOICE)) && - ((((!checkNoResetFlg0(daPyFlg0_UNK80) || (m35D0 < mAcch.GetGroundH())) || (m3580 == 4)) || - (C_BG_MIN_HEIGHT == mAcch.GetGroundH())))) && + if ((!checkNoResetFlg0(daPyFlg0_NO_FALL_VOICE) && + ((((!checkNoResetFlg0(daPyFlg0_UNK80) || m35D0 < mAcch.GetGroundH()) || m3580 == 4) || + C_BG_MIN_HEIGHT == mAcch.GetGroundH()))) && (m35F0 - current.pos.y > 500.0f)) { if (current.pos.y - mAcch.GetGroundH() >= 100.0f * daPy_HIO_fall_c0::m.field_0x14) { @@ -3717,14 +3701,14 @@ BOOL daPy_lk_c::checkNewItemChange(u8 param_1) { if (uVar4 == dItem_MAGIC_ARMOR_e) { return changeDragonShield(1); } - if ((((((uVar4 == dItem_IRON_BOOTS_e) || (uVar4 == WATER_BOOTS)) || - (uVar4 == dItem_TINGLE_TUNER_e)) || - ((uVar4 == NORMAL_SAIL || (isEsa(uVar4))))) || - ((isDaizaItem(uVar4) || ((isEmono(uVar4) || (checkBottleItem(uVar4))))))) || - ((uVar4 >= dItem_FATHER_LETTER_e && (uVar4 <= KAISEN_PRESENT2)))) + if (((((uVar4 == dItem_IRON_BOOTS_e || uVar4 == WATER_BOOTS) || + uVar4 == dItem_TINGLE_TUNER_e) || + ((uVar4 == NORMAL_SAIL || isEsa(uVar4)))) || + ((isDaizaItem(uVar4) || ((isEmono(uVar4) || checkBottleItem(uVar4)))))) || + ((uVar4 >= dItem_FATHER_LETTER_e && uVar4 <= KAISEN_PRESENT2))) { - if ((mAcch.ChkGroundHit()) && (!daPy_lk_c::checkPlayerFly())) { - if ((uVar4 == dItem_IRON_BOOTS_e) || (uVar4 == WATER_BOOTS)) { + if (mAcch.ChkGroundHit() && (!daPy_lk_c::checkPlayerFly())) { + if (uVar4 == dItem_IRON_BOOTS_e || uVar4 == WATER_BOOTS) { procBootsEquip_init(uVar4); } else { if (isEsa(uVar4)) { @@ -3757,9 +3741,9 @@ BOOL daPy_lk_c::checkNewItemChange(u8 param_1) { return false; } } - if ((mEquipItem != uVar4) && (uVar4 != dItem_NONE_e)) { - if ((uVar4 == dItem_BOMB_BAG_e) && - ((mActivePlayerBombs >= 3) || (dComIfGs_getBombNum() == 0))) + if (mEquipItem != uVar4 && uVar4 != dItem_NONE_e) { + if (uVar4 == dItem_BOMB_BAG_e && + (mActivePlayerBombs >= 3 || dComIfGs_getBombNum() == 0)) { mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); return false; @@ -3828,25 +3812,25 @@ BOOL daPy_lk_c::checkItemChangeFromButton() { /* 8010D26C-8010D754 .text checkItemAction__9daPy_lk_cFv */ void daPy_lk_c::checkItemAction() { - if ((mEquipItem == dComIfGp_getSelectItem(dItemBtn_X_e)) && - (mEquipItem != dComIfGp_getSelectItem(dItemBtn_Y_e)) && - (mEquipItem != dComIfGp_getSelectItem(dItemBtn_Z_e))) + if (mEquipItem == dComIfGp_getSelectItem(dItemBtn_X_e) && + mEquipItem != dComIfGp_getSelectItem(dItemBtn_Y_e) && + mEquipItem != dComIfGp_getSelectItem(dItemBtn_Z_e)) { mReadyItemBtn = dItemBtn_X_e; - } else if (((mEquipItem == dComIfGp_getSelectItem(dItemBtn_Y_e)) && - (mEquipItem != dComIfGp_getSelectItem(dItemBtn_X_e))) && - (mEquipItem != dComIfGp_getSelectItem(dItemBtn_Z_e))) + } else if ((mEquipItem == dComIfGp_getSelectItem(dItemBtn_Y_e) && + mEquipItem != dComIfGp_getSelectItem(dItemBtn_X_e)) && + mEquipItem != dComIfGp_getSelectItem(dItemBtn_Z_e)) { mReadyItemBtn = dItemBtn_Y_e; - } else if (((mEquipItem == dComIfGp_getSelectItem(dItemBtn_Z_e)) && - (mEquipItem != dComIfGp_getSelectItem(dItemBtn_X_e))) && - (mEquipItem != dComIfGp_getSelectItem(dItemBtn_Y_e))) + } else if ((mEquipItem == dComIfGp_getSelectItem(dItemBtn_Z_e) && + mEquipItem != dComIfGp_getSelectItem(dItemBtn_X_e)) && + mEquipItem != dComIfGp_getSelectItem(dItemBtn_Y_e)) { mReadyItemBtn = dItemBtn_Z_e; } - if ((((checkEquipAnime()) || (checkUpperAnime(LKANM_BCK_BOOMTHROW))) || - (checkUpperAnime(LKANM_BCK_BOOMCATCH))) || - (checkUpperAnime(LKANM_BCK_ROPETHROW))) + if (((checkEquipAnime() || checkUpperAnime(LKANM_BCK_BOOMTHROW)) || + checkUpperAnime(LKANM_BCK_BOOMCATCH)) || + checkUpperAnime(LKANM_BCK_ROPETHROW)) { J3DFrameCtrl& frameCtrl = mFrameCtrlUpper[UPPER_MOVE2_e]; if (checkUpperAnime(LKANM_BCK_BOOMCATCH)) { @@ -3863,7 +3847,7 @@ void daPy_lk_c::checkItemAction() { procShipPaddle_init(); } } else if (checkUpperAnime(LKANM_BCK_BOOMTHROW)) { - if ((frameCtrl.getRate() < 0.01f) || + if (frameCtrl.getRate() < 0.01f || ((mStickDistance > 0.05f && (frameCtrl.getFrame() > daPy_HIO_boom_c0::m.field_0x10)))) { @@ -3882,7 +3866,7 @@ void daPy_lk_c::checkItemAction() { } } else { if (checkEquipAnime()) { - if ((mEquipItem == daPyItem_SWORD_e) && + if (mEquipItem == daPyItem_SWORD_e && (((checkUpperAnime(LKANM_BCK_REST) && (frameCtrl.checkPass(7.0f - frameCtrl.getRate()))) || ((((checkUpperAnime(LKANM_BCK_TAKE) && @@ -3899,17 +3883,17 @@ void daPy_lk_c::checkItemAction() { if (std::fabsf(frameCtrl.getRate()) < 0.01f) { resetActAnimeUpper(UPPER_MOVE2_e, daPy_HIO_basic_c0::m.field_0xC); } else { - if (((((checkUpperAnime(LKANM_BCK_REST)) && - (frameCtrl.checkPass(7.0f))) || + if ((((checkUpperAnime(LKANM_BCK_REST) && + frameCtrl.checkPass(7.0f)) || ((checkUpperAnime(LKANM_BCK_TAKE) && - (frameCtrl.checkPass(7.0f))))) || + frameCtrl.checkPass(7.0f)))) || ((checkUpperAnime(LKANM_BCK_TAKEBOTH) && - (frameCtrl.checkPass(daPy_HIO_item_c0::m.field_0x30))))) || + frameCtrl.checkPass(daPy_HIO_item_c0::m.field_0x30)))) || ((checkSingleItemEquipAnime() && - (frameCtrl.checkPass(daPy_HIO_item_c0::m.field_0x20))))) + frameCtrl.checkPass(daPy_HIO_item_c0::m.field_0x20)))) { - if (((mEquipItem != daPyItem_NONE_e) && (mEquipItem != daPyItem_SWORD_e)) || - ((m3562 != daPyItem_NONE_e && (m3562 != daPyItem_SWORD_e)))) + if ((mEquipItem != daPyItem_NONE_e && mEquipItem != daPyItem_SWORD_e) || + ((m3562 != daPyItem_NONE_e && m3562 != daPyItem_SWORD_e))) { seStartOnlyReverb(JA_SE_LK_ITEM_TAKEOUT); } @@ -3921,11 +3905,11 @@ void daPy_lk_c::checkItemAction() { } deleteEquipItem(FALSE); mEquipItem = m3562; - if ((!dComIfGp_event_runCheck()) && (mDemo.getDemoType() == 0)) { - if ((mEquipItem != daPyItem_SWORD_e) || - (!checkNoResetFlg1(daPyFlg1_UNK4000000))) + if (!dComIfGp_event_runCheck() && mDemo.getDemoType() == 0) { + if (mEquipItem != daPyItem_SWORD_e || + !checkNoResetFlg1(daPyFlg1_UNK4000000)) { - if (((mpAttention->Lockon()) || (mEquipItem != daPyItem_SWORD_e)) || + if ((mpAttention->Lockon() || mEquipItem != daPyItem_SWORD_e) || var_r28) { onResetFlg0(daPyRFlg0_UNK80); @@ -3950,12 +3934,12 @@ void daPy_lk_c::checkItemAction() { /* 8010D754-8010D810 .text getSlidePolygon__9daPy_lk_cFv */ cM3dGPla* daPy_lk_c::getSlidePolygon() { if (((!checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000))) && - (mAcch.ChkGroundHit())) && - (dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd))) + mAcch.ChkGroundHit()) && + dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd)) { cM3dGPla* iVar2 = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd); int iVar3 = dComIfG_Bgsp()->GetSpecialCode(mAcch.m_gnd); - if ((iVar2 != NULL) && (dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd) != 8) && (iVar3 == 1)) { + if (iVar2 != NULL && dComIfG_Bgsp()->GetGroundCode(mAcch.m_gnd) != 8 && iVar3 == 1) { return iVar2; } } @@ -3964,11 +3948,11 @@ cM3dGPla* daPy_lk_c::getSlidePolygon() { /* 8010D810-8010D8B0 .text checkJumpCutFromButton__9daPy_lk_cFv */ BOOL daPy_lk_c::checkJumpCutFromButton() { - if ((((mEquipItem == daPyItem_SWORD_e) && - ((checkResetFlg0(daPyRFlg0_UNK80) || (swordTrigger())))) || - ((mEquipItem == daPyItem_BOKO_e && (swordTrigger())))) || - (((mEquipItem == dItem_SKULL_HAMMER_e && (itemTrigger())) && - (mEquipItem == getReadyItem())))) + if (((mEquipItem == daPyItem_SWORD_e && + ((checkResetFlg0(daPyRFlg0_UNK80) || swordTrigger()))) || + ((mEquipItem == daPyItem_BOKO_e && swordTrigger()))) || + (((mEquipItem == dItem_SKULL_HAMMER_e && itemTrigger()) && + mEquipItem == getReadyItem()))) { return procJumpCut_init(1); } @@ -3977,23 +3961,21 @@ BOOL daPy_lk_c::checkJumpCutFromButton() { /* 8010D8B0-8010DB58 .text orderTalk__9daPy_lk_cFv */ int daPy_lk_c::orderTalk() { - if (((((dComIfGp_getDoStatus() == dActStts_SPEAK_e) || - (dComIfGp_getDoStatus() == dActStts_LOOK_e)) || - (dComIfGp_getDoStatus() == dActStts_READ_e)) || - (dComIfGp_getDoStatus() == dActStts_CHECK_e)) && - (talkTrigger())) + if ((dComIfGp_getDoStatus() == dActStts_SPEAK_e || dComIfGp_getDoStatus() == dActStts_LOOK_e || + dComIfGp_getDoStatus() == dActStts_READ_e || dComIfGp_getDoStatus() == dActStts_CHECK_e) && + talkTrigger()) { fopAcM_orderTalkEvent(this, mpAttnActorA); return true; } - if (((mpAttnEntryX != NULL) && ((mpAttnEntryX->mType == fopAc_Attn_TYPE_SPEAK_e || + if ((mpAttnEntryX != NULL && ((mpAttnEntryX->mType == fopAc_Attn_TYPE_SPEAK_e || ((mpAttnEntryX->mType == fopAc_Attn_TYPE_TALK_e && - (mpAttnActorLockOn == mpAttnActorX)))))) && - (itemTriggerX())) + mpAttnActorLockOn == mpAttnActorX))))) && + itemTriggerX()) { if (((isEsa(dComIfGp_getSelectItem(dItemBtn_X_e))) && - (dComIfGp_getSelectItem(dItemBtn_X_e) != dItem_HYOI_PEAR_e)) && - (m3630 != fpcM_ERROR_PROCESS_ID_e)) + dComIfGp_getSelectItem(dItemBtn_X_e) != dItem_HYOI_PEAR_e) && + m3630 != fpcM_ERROR_PROCESS_ID_e) { mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); return false; @@ -4001,14 +3983,14 @@ int daPy_lk_c::orderTalk() { fopAcM_orderTalkXBtnEvent(this, mpAttnActorX); return true; } - if (((mpAttnEntryY != NULL) && ((mpAttnEntryY->mType == fopAc_Attn_TYPE_SPEAK_e || + if ((mpAttnEntryY != NULL && ((mpAttnEntryY->mType == fopAc_Attn_TYPE_SPEAK_e || ((mpAttnEntryY->mType == fopAc_Attn_TYPE_TALK_e && - (mpAttnActorLockOn == mpAttnActorY)))))) && - (itemTriggerY())) + mpAttnActorLockOn == mpAttnActorY))))) && + itemTriggerY()) { if (((isEsa(dComIfGp_getSelectItem(dItemBtn_Y_e))) && - (dComIfGp_getSelectItem(dItemBtn_Y_e) != dItem_HYOI_PEAR_e)) && - (m3630 != fpcM_ERROR_PROCESS_ID_e)) + dComIfGp_getSelectItem(dItemBtn_Y_e) != dItem_HYOI_PEAR_e) && + m3630 != fpcM_ERROR_PROCESS_ID_e) { mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); return false; @@ -4016,14 +3998,14 @@ int daPy_lk_c::orderTalk() { fopAcM_orderTalkYBtnEvent(this, mpAttnActorY); return true; } - if ((mpAttnEntryZ != NULL) && (((mpAttnEntryZ->mType == fopAc_Attn_TYPE_SPEAK_e || + if (mpAttnEntryZ != NULL && (((mpAttnEntryZ->mType == fopAc_Attn_TYPE_SPEAK_e || ((mpAttnEntryZ->mType == fopAc_Attn_TYPE_TALK_e && - (mpAttnActorLockOn == mpAttnActorZ)))) && - (itemTriggerZ())))) + mpAttnActorLockOn == mpAttnActorZ))) && + itemTriggerZ()))) { if (((isEsa(dComIfGp_getSelectItem(dItemBtn_Z_e))) && - (dComIfGp_getSelectItem(dItemBtn_Z_e) != dItem_HYOI_PEAR_e)) && - (m3630 != fpcM_ERROR_PROCESS_ID_e)) + dComIfGp_getSelectItem(dItemBtn_Z_e) != dItem_HYOI_PEAR_e) && + m3630 != fpcM_ERROR_PROCESS_ID_e) { mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); return false; @@ -4043,7 +4025,7 @@ BOOL daPy_lk_c::checkNextActionFromButton() { resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); return changeCutProc(); } - if ((checkPhotoBoxItem(mEquipItem)) || (mEquipItem == dItem_TELESCOPE_e)) { + if (checkPhotoBoxItem(mEquipItem) || mEquipItem == dItem_TELESCOPE_e) { return procScope_init(mEquipItem); } if (mEquipItem == dItem_DEKU_LEAF_e) { @@ -4096,7 +4078,7 @@ BOOL daPy_lk_c::checkNextActionFromButton() { setDoStatusBasic(); } else { setDoStatus(); - if ((spActionTrigger()) && (dComIfGp_getRStatus() == dActStts_GRAB_e)) { + if (spActionTrigger() && dComIfGp_getRStatus() == dActStts_GRAB_e) { return procPushPullWait_init(1); } if (orderTalk()) { @@ -4126,8 +4108,8 @@ BOOL daPy_lk_c::checkNextActionFromButton() { } return true; } - if ((dComIfGp_getDoStatus() == dActStts_LIFT_e) || - (dComIfGp_getDoStatus() == dActStts_PICK_UP_e)) + if (dComIfGp_getDoStatus() == dActStts_LIFT_e || + dComIfGp_getDoStatus() == dActStts_PICK_UP_e) { return procGrabReady_init(); } @@ -4140,23 +4122,23 @@ BOOL daPy_lk_c::checkNextActionFromButton() { } } } - if ((!checkEquipAnime()) && (!checkPlayerGuard())) { + if (!checkEquipAnime() && !checkPlayerGuard()) { if (!daPy_dmEcallBack_c::checkCurse()) { if (mEquipItem == daPyItem_SWORD_e) { if (checkNoResetFlg0(daPyFlg0_UNK4)) { return procCutTurnCharge_init(); } - if ((swordTrigger()) && (abs(m3578) > 0xF800)) { + if (swordTrigger() && abs(m3578) > 0xF800) { return procCutTurn_init(1); } - if ((swordTrigger()) || (m34C5 != 0)) { + if (swordTrigger() || m34C5 != 0) { return changeCutProc(); } } else if (mEquipItem == daPyItem_BOKO_e) { if (checkNoResetFlg0(daPyFlg0_UNK4)) { return procCutTurnCharge_init(); } - if ((swordTrigger()) && (mActorKeepEquip.getActor() != NULL)) { + if (swordTrigger() && mActorKeepEquip.getActor() != NULL) { if (abs(m3578) > 0xF800) { return procCutTurn_init(1); } else if ((fopAcM_GetParam(mActorKeepEquip.getActor()) == 0) || @@ -4169,11 +4151,11 @@ BOOL daPy_lk_c::checkNextActionFromButton() { return procWeaponFrontSwingReady_init(); } } - if ((doTrigger()) && (dComIfGp_getDoStatus() == dActStts_THROW_e)) { + if (doTrigger() && dComIfGp_getDoStatus() == dActStts_THROW_e) { return procWeaponThrow_init(); } } - if (itemTrigger() && (mEquipItem == getReadyItem())) { + if (itemTrigger() && mEquipItem == getReadyItem()) { if (mEquipItem == dItem_HOOKSHOT_e) { if (!checkHookshotReadyAnime()) { return checkNextHookshotMode(); @@ -4197,15 +4179,15 @@ BOOL daPy_lk_c::checkNextActionFromButton() { } if (mEquipItem == dItem_SKULL_HAMMER_e) { direction = getDirectionFromShapeAngle(); - if ((mStickDistance > 0.05f) && - ((direction == DIR_LEFT || (direction == DIR_RIGHT)))) + if (mStickDistance > 0.05f && + ((direction == DIR_LEFT || direction == DIR_RIGHT))) { return procHammerSideSwing_init(); } else { return procHammerFrontSwingReady_init(); } } - if ((checkPhotoBoxItem(mEquipItem)) || (mEquipItem == dItem_TELESCOPE_e)) { + if (checkPhotoBoxItem(mEquipItem) || mEquipItem == dItem_TELESCOPE_e) { return procScope_init(mEquipItem); } if (mEquipItem == dItem_WIND_WAKER_e) { @@ -4217,8 +4199,8 @@ BOOL daPy_lk_c::checkNextActionFromButton() { if (changeSpecialBattle()) return true; } - if (((dComIfGp_getRStatus() == dActStts_BLANK_e) && (!checkUpperReadyThrowAnime())) && - (!checkEquipAnime())) + if ((dComIfGp_getRStatus() == dActStts_BLANK_e && !checkUpperReadyThrowAnime()) && + !checkEquipAnime()) { if (!checkGrabAnime()) { if (checkNoResetFlg1(daPyFlg1_NPC_CALL_COMMAND)) { @@ -4233,8 +4215,8 @@ BOOL daPy_lk_c::checkNextActionFromButton() { m_old_fdata->initOldFrameMorf(5.0f, 0, 0x2A); return true; } - } else if ((dComIfGs_getSelectEquip(1) == dItem_NONE_e) || - (mEquipItem == daPyItem_NONE_e)) + } else if (dComIfGs_getSelectEquip(1) == dItem_NONE_e || + mEquipItem == daPyItem_NONE_e) { if (checkModeFlg(ModeFlg_00000001)) { dComIfGp_setRStatus(dActStts_CROUCH_e); @@ -4255,21 +4237,21 @@ BOOL daPy_lk_c::checkNextActionFromButton() { if (doTrigger()) { if (dComIfGp_getDoStatus() == dActStts_JUMP_e) { direction = getDirectionFromShapeAngle(); - if ((direction == DIR_LEFT) || (direction == DIR_RIGHT)) { + if (direction == DIR_LEFT || direction == DIR_RIGHT) { return procSideStep_init(direction); } if (direction == DIR_BACKWARD) { return procBackJump_init(); } } else if (dComIfGp_getDoStatus() == dActStts_ATTACK_e) { - if ((!mpAttention->Lockon()) && (mStickDistance > 0.05f)) { + if (!mpAttention->Lockon() && mStickDistance > 0.05f) { shape_angle.y = m34E8; } return procFrontRoll_init(daPy_HIO_roll_c0::m.field_0xC); } } - if (((daPy_getPlayerActorClass() == this) && (!dComIfGp_event_runCheck())) && - (!checkGrabWear())) + if ((daPy_getPlayerActorClass() == this && !dComIfGp_event_runCheck()) && + !checkGrabWear()) { onResetFlg0(daPyRFlg0_UNK4000000); if (dComIfGp_checkCameraAttentionStatus(mCameraInfoIdx, 0x1000)) { @@ -4282,12 +4264,10 @@ BOOL daPy_lk_c::checkNextActionFromButton() { /* 8010E448-8010E75C .text setShieldGuard__9daPy_lk_cFv */ void daPy_lk_c::setShieldGuard() { f32 local_18 = m_pbCalc[PART_UPPER_e]->getRatio(2); - if ((checkGuardSlip()) || (((!checkEquipAnime()) && (!checkGrabAnime())) && - ((((mpAttention->Lockon()) && (mEquipItem != daPyItem_BOKO_e)) && - (dComIfGs_getSelectEquip(1) != dItem_NONE_e)) && - (checkGuardAccept())) && - ((mActorKeepEquip.getID() == fpcM_ERROR_PROCESS_ID_e || - (mActorKeepEquip.getActor() != NULL))))) + if (checkGuardSlip() || + (!checkEquipAnime() && !checkGrabAnime() && mpAttention->Lockon() && mEquipItem != daPyItem_BOKO_e && + dComIfGs_getSelectEquip(1) != dItem_NONE_e && checkGuardAccept() && + (mActorKeepEquip.getID() == fpcM_ERROR_PROCESS_ID_e || mActorKeepEquip.getActor() != NULL))) { dComIfGp_setRStatus(dActStts_DEFEND_e); } @@ -4298,7 +4278,7 @@ void daPy_lk_c::setShieldGuard() { uVar3 = LKANM_BCK_ATNG; } if (!checkGuardSlip()) { - if ((spActionButton()) && (dComIfGp_getRStatus() == dActStts_DEFEND_e)) { + if (spActionButton() && dComIfGp_getRStatus() == dActStts_DEFEND_e) { freeGrabItem(); if (!checkUpperAnime(uVar3)) { resetActAnimeUpper(UPPER_MOVE2_e, -1.0f); @@ -4356,7 +4336,7 @@ BOOL daPy_lk_c::checkItemModeActorPointer() { } /* 8010E7C4-8010E828 .text checkNextActionItemFly__9daPy_lk_cFv */ -BOOL daPy_lk_c::checkNextActionItemFly() { +void daPy_lk_c::checkNextActionItemFly() { if (!daPy_dmEcallBack_c::checkCurse()) { if (checkBowItem(mEquipItem)) { checkNextActionBowFly(); @@ -4367,115 +4347,98 @@ BOOL daPy_lk_c::checkNextActionItemFly() { } /* 8010E828-8010EC78 .text checkNextMode__9daPy_lk_cFi */ -BOOL daPy_lk_c::checkNextMode(int param_1) { - /* Nonmatching - regalloc */ - bool bVar2; - bool bVar3; - bool bVar4; - bool bVar5; - f32 dVar11; - - dVar11 = mMaxNormalSpeed; +BOOL daPy_lk_c::checkNextMode(int r29) { + f32 f31 = mMaxNormalSpeed; setFrontWallType(); + if (checkNoResetFlg1(daPyFlg1_FORCE_VOMIT_JUMP)) { return procVomitJump_init(2); } if (checkNoResetFlg1(daPyFlg1_FORCE_VOMIT_JUMP_SHORT)) { return procVomitJump_init(3); } - bVar5 = true; - bVar4 = true; - bVar3 = true; - if (!mpAttention->Lockon()) { - bVar2 = false; - if ((mActorKeepThrow.getActor() != NULL) && - (mpAttnActorLockOn == mActorKeepThrow.getActor())) - { - bVar2 = true; - } - if (!bVar2) { - bVar3 = false; - } - } - if ((!bVar3) && (!checkUpperReadyThrowAnime())) { - bVar4 = false; - } - if ((!bVar4) && (mDemo.getDemoMode() != daPy_demo_c::DEMO_UNK17_e)) { - bVar5 = false; - } - if (bVar5) { + + BOOL r24 = mpAttention->Lockon() || + (mActorKeepThrow.getActor() != NULL && mpAttnActorLockOn == mActorKeepThrow.getActor()) || + checkUpperReadyThrowAnime() || + mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK17_e; + + if (r24) { mMaxNormalSpeed = daPy_HIO_atnMove_c0::m.field_0xC; } else { mMaxNormalSpeed = daPy_HIO_move_c0::m.field_0x18; } + if (changeSlideProc()) { return true; } if (checkNextActionFromButton()) { return true; } - if ((param_1 != 0) && ((!(mStickDistance > 0.05f) && (!spActionButton())))) { - mMaxNormalSpeed = dVar11; + if (r29 != 0 && ((!(mStickDistance > 0.05f) && !spActionButton()))) { + mMaxNormalSpeed = f31; return false; } - if (bVar5) { + + BOOL r3; + if (r24) { if (checkBoomerangAnime()) { - param_1 = checkNextBoomerangMode(); + r3 = checkNextBoomerangMode(); } else if (checkBowAnime()) { - param_1 = checkNextBowMode(); + r3 = checkNextBowMode(); } else if (checkHookshotReadyAnime()) { - param_1 = checkNextHookshotMode(); + r3 = checkNextHookshotMode(); } else if (checkRopeAnime()) { - param_1 = checkNextRopeMode(); - } else { - if ((mpAttnActorLockOn != NULL) || (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK17_e)) { - if (std::abs(mVelocity) <= 0.001f) { - param_1 = procAtnActorWait_init(); - } else { - param_1 = procAtnActorMove_init(); - } - } else if (std::abs(mVelocity) <= 0.001f) { - param_1 = changeWaitProc(); + r3 = checkNextRopeMode(); + } else if (mpAttnActorLockOn != NULL || (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK17_e)) { + if (std::abs(mVelocity) <= 0.001f) { + r3 = procAtnActorWait_init(); } else { - param_1 = procAtnMove_init(); + r3 = procAtnActorMove_init(); } + } else if (std::abs(mVelocity) <= 0.001f) { + r3 = changeWaitProc(); + } else { + r3 = procAtnMove_init(); } } else { mDirection = DIR_NONE; int direction = getDirectionFromCurrentAngle(); if (std::abs(mVelocity) <= 0.001f) { - if ((cLib_distanceAngleS(m34E8, current.angle.y) > 0x7800) && (mStickDistance > 0.05f)) + if (cLib_distanceAngleS(m34E8, current.angle.y) > 0x7800 && mStickDistance > 0.05f) { - if (((!procWaitTurn_init()) && (!dComIfGp_event_runCheck())) && - (mDemo.getDemoType() == 0)) + r3 = procWaitTurn_init(); + if (!r3 && !dComIfGp_event_runCheck() && mDemo.getDemoType() == 0) { - param_1 = changeWaitProc(); + r3 = changeWaitProc(); } } else { - param_1 = changeWaitProc(); + r3 = changeWaitProc(); } - } else if ((mCurProc == daPyProc_MOVE_TURN_e) && (current.angle.y != shape_angle.y)) { - param_1 = procMoveTurn_init(0); - } else if ((cLib_distanceAngleS(m34E8, current.angle.y) > 0x7800) && - (mStickDistance > 0.05f)) + } else if (mCurProc == daPyProc_MOVE_TURN_e && current.angle.y != shape_angle.y) { + r3 = procMoveTurn_init(0); + } else if (cLib_distanceAngleS(m34E8, current.angle.y) > 0x7800 && + mStickDistance > 0.05f) { if ((speedF / mMaxNormalSpeed > daPy_HIO_slip_c0::m.field_0x4) && - (mCurrAttributeCode != dBgS_Attr_ICE_e) && - ((!checkGrabAnime()) && (getDirectionFromAngle(m34EA - m34DC) == DIR_BACKWARD))) + mCurrAttributeCode != dBgS_Attr_ICE_e && + (!checkGrabAnime() && getDirectionFromAngle(m34EA - m34DC) == DIR_BACKWARD)) { - param_1 = procSlip_init(); + r3 = procSlip_init(); } else { - param_1 = procMoveTurn_init(1); + r3 = procMoveTurn_init(1); } - } else if ((direction == DIR_BACKWARD) && (mStickDistance > 0.05f)) { - param_1 = procMoveTurn_init(1); + } else if (direction == DIR_BACKWARD && mStickDistance > 0.05f) { + r3 = procMoveTurn_init(1); } else { - param_1 = procMove_init(); + r3 = procMove_init(); } } - if (param_1 == 0) { - checkJumpFlower(); + + if (!r3) { + r3 = checkJumpFlower(); } + return r3; } /* 8010EC78-8010ED68 .text checkIceSlipFall__9daPy_lk_cFv */ @@ -4493,8 +4456,8 @@ BOOL daPy_lk_c::checkIceSlipFall() { } f32 dVar5 = fVar2; f32 dVar6 = fVar1; - if ((cLib_distanceAngleS(sVar3, current.angle.y) > 0x7000) && (mVelocity >= dVar6) && - (m36A0.abs2XZ() >= dVar5)) + if (cLib_distanceAngleS(sVar3, current.angle.y) > 0x7000 && mVelocity >= dVar6 && + m36A0.abs2XZ() >= dVar5) { m34D0--; if (m34D0 == 0) { @@ -4611,7 +4574,7 @@ void daPy_lk_c::setFrontWallType() { dVar16 = dComIfG_Bgsp()->GroundCross(&mGndChk); if (dVar16 >= current.pos.y) { uVar7 = dComIfG_Bgsp()->GetTriPla(mGndChk); - if (uVar7->GetNP()->y >= 0.5f) { + if (cBgW_CheckBGround(uVar7->GetNP()->y)) { sp78.set(pVVar6->GetNP()->z, 0.0f, pVVar6->GetNP()->x); sp78.normalize(); cM3dGPla spC8(&sp78, -(sp78.x * m3724.x + sp78.z * m3724.z)); @@ -4630,7 +4593,7 @@ void daPy_lk_c::setFrontWallType() { mFrontWallType = 3; return; } - if ((iVar10 == 4) || (iVar10 == 5 && (!checkModeFlg(ModeFlg_MIDAIR)))) { + if (iVar10 == 4 || (iVar10 == 5 && !checkModeFlg(ModeFlg_MIDAIR))) { if (iVar10 == 4) { mFrontWallType = 4; } else { @@ -4687,7 +4650,7 @@ void daPy_lk_c::setFrontWallType() { } } if (cVar8 != 0) { - if ((!checkGrabAnime()) && (!checkModeFlg(ModeFlg_MIDAIR | ModeFlg_SWIM))) { + if (!checkGrabAnime() && !checkModeFlg(ModeFlg_MIDAIR | ModeFlg_SWIM)) { spA8.set(current.pos.x, current.pos.y + 149.9f, current.pos.z); sp9C.set( spA8.x + (2.0f * dVar16) * cM_ssin(current.angle.y), @@ -4712,7 +4675,7 @@ void daPy_lk_c::setFrontWallType() { if (!checkModeFlg(ModeFlg_SWIM) && dVar16 < current.pos.y) { return; } - if (dVar16 == C_BG_MIN_HEIGHT || !(dComIfG_Bgsp()->GetTriPla(mGndChk)->GetNP()->y >= 0.5f)) { + if (dVar16 == C_BG_MIN_HEIGHT || !cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mGndChk)->GetNP()->y)) { return; } cXyz sp3C; @@ -4725,16 +4688,16 @@ void daPy_lk_c::setFrontWallType() { m3724 = sp3C; f32 fVar3 = m3724.y - current.pos.y; if (checkModeFlg(ModeFlg_SWIM)) { - if ((fVar3 <= 0.1f + daPy_HIO_swim_c0::m.field_0x6C) && (fVar3 >= -5.0f)) { + if ((fVar3 <= 0.1f + daPy_HIO_swim_c0::m.field_0x6C) && fVar3 >= -5.0f) { mFrontWallType = 7; } } else if (checkModeFlg(ModeFlg_MIDAIR)) { - if (((dVar16 - mAcch.GetGroundH()) > 125.0f) && (mCurProc != daPyProc_HOOKSHOT_FLY_e || (fVar3 < 100.0f))) { + if (((dVar16 - mAcch.GetGroundH()) > 125.0f) && (mCurProc != daPyProc_HOOKSHOT_FLY_e || fVar3 < 100.0f)) { mFrontWallType = 7; } } else if (fVar3 >= 0.1f + daPy_HIO_wallCatch_c0::m.field_0x18) { - // - } else if ((!checkGrabAnime()) || !(fVar3 >= 0.1f + daPy_HIO_wallCatch_c0::m.field_0xC)) { + // TODO? + } else if (!checkGrabAnime() || !(fVar3 >= 0.1f + daPy_HIO_wallCatch_c0::m.field_0xC)) { if (fVar3 < 27.09f) { return; } else if (fVar3 < daPy_HIO_wallCatch_c0::m.field_0xC + 0.1f) { @@ -4760,7 +4723,7 @@ BOOL daPy_lk_c::changeFrontWallTypeProc() { setFrontWallType(); sVar5 = m3544; m3544 = 0; - if ((mStickDistance <= 0.05f) && (!checkModeFlg(ModeFlg_MIDAIR))) { + if (mStickDistance <= 0.05f && !checkModeFlg(ModeFlg_MIDAIR)) { return false; } if (checkModeFlg(ModeFlg_MIDAIR)) { @@ -4860,7 +4823,7 @@ BOOL daPy_lk_c::changeFrontWallTypeProc() { if (mFrontWallType == 7) { return procHangWallCatch_init(); } - if ((mFrontWallType == 8) || (mFrontWallType == 9)) { + if (mFrontWallType == 8 || mFrontWallType == 9) { return procVerticalJump_init(); } m3544 = 0; @@ -4879,7 +4842,7 @@ int daPy_lk_c::changeSlideProc() { if (m34C3 != 0) { cLib_addCalc(&mVelocity, 0.0f, 0.4f, 5.0f, 1.0f); m3526--; - if ((mVelocity > 5.0f) || (m3526 > 0)) { + if (mVelocity > 5.0f || m3526 > 0) { return false; } } @@ -4914,7 +4877,7 @@ BOOL daPy_lk_c::changeLandProc(f32 param_1) { f32 dVar7; dVar7 = m35F0 - current.pos.y; - if ((mCurrAttributeCode != dBgS_Attr_GIANT_FLOWER_e) && + if (mCurrAttributeCode != dBgS_Attr_GIANT_FLOWER_e && ((dVar7 >= (100.0f * daPy_HIO_fall_c0::m.field_0x14)))) { if (dVar7 >= (100.0f * daPy_HIO_fall_c0::m.field_0x10)) { @@ -4925,16 +4888,16 @@ BOOL daPy_lk_c::changeLandProc(f32 param_1) { } dVar6 = param_1; int direction = getDirectionFromAngle(current.angle.y - shape_angle.y); - if ((mCurProc == daPyProc_CUT_EX_MJ_e) && ((m34C5 != 0 || (checkNoResetFlg0(daPyFlg0_UNK4))))) { + if (mCurProc == daPyProc_CUT_EX_MJ_e && ((m34C5 != 0 || checkNoResetFlg0(daPyFlg0_UNK4)))) { bVar2 = true; } else { bVar2 = false; } - if (((((!checkGrabAnime()) && (mStickDistance > 0.5f)) && (direction != DIR_BACKWARD)) && + if ((((!checkGrabAnime() && mStickDistance > 0.5f) && direction != DIR_BACKWARD) && (!bVar2)) && (((mCurProc == daPyProc_CUT_EX_MJ_e || (m3688.y - current.pos.y >= 300.0f)) && ((!checkNoResetFlg1(daPyFlg1_UNK8000000) && - (getDirectionFromCurrentAngle() == DIR_FORWARD)))))) + getDirectionFromCurrentAngle() == DIR_FORWARD))))) { voiceStart(7); if (direction == DIR_FORWARD) { @@ -4945,8 +4908,8 @@ BOOL daPy_lk_c::changeLandProc(f32 param_1) { } } else { if (((dVar7 >= (0.5f * (daPy_HIO_fall_c0::m.field_0x14 * 100.0f))) && - (!checkBossGomaStage())) && - (mCurrAttributeCode != dBgS_Attr_GIANT_FLOWER_e)) + !checkBossGomaStage()) && + mCurrAttributeCode != dBgS_Attr_GIANT_FLOWER_e) { procLandDamage_init(0); } else { @@ -4982,10 +4945,10 @@ BOOL daPy_lk_c::setDamagePoint(f32 amount) { /* 80110338-80110448 .text checkNormalDamage__9daPy_lk_cFi */ BOOL daPy_lk_c::checkNormalDamage(int param_1) { f32 fVar2; - if (((checkGrabAnime()) || (mCurProc != daPyProc_MOVE_e)) || + if ((checkGrabAnime() || mCurProc != daPyProc_MOVE_e) || (std::abs((mVelocity * (m3580 == 8 ? fVar2 = 1.0f : fVar2 = cM_scos(m34E2))) / mMaxNormalSpeed) < 0.9f) || - (((!checkNoDamageMode()) && (!dComIfGs_checkBottle(dItem_FAIRY_BOTTLE_e))) && + ((!checkNoDamageMode() && !dComIfGs_checkBottle(dItem_FAIRY_BOTTLE_e)) && !(dComIfGs_getLife() > param_1))) { return true; @@ -5006,7 +4969,7 @@ void daPy_lk_c::setDashDamage() { /* 801104E4-8011054C .text checkAtHitEnemy__9daPy_lk_cFP12dCcD_GObjInf */ BOOL daPy_lk_c::checkAtHitEnemy(dCcD_GObjInf* param_1) { - if (((param_1->ChkAtHit()) && (param_1->GetAtHitAc() != NULL)) && + if ((param_1->ChkAtHit() && param_1->GetAtHitAc() != NULL) && (fopAcM_GetGroup(param_1->GetAtHitAc()) == fopAc_ENEMY_e)) { return true; @@ -5016,7 +4979,7 @@ BOOL daPy_lk_c::checkAtHitEnemy(dCcD_GObjInf* param_1) { /* 8011054C-801105D8 .text checkElecReturnDamage__9daPy_lk_cFP12dCcD_GObjInfP4cXyz */ BOOL daPy_lk_c::checkElecReturnDamage(dCcD_GObjInf* param_1, cXyz* param_2) { - if ((param_1->ChkAtHit()) && (param_1->GetAtHitGObj() != NULL)) { + if (param_1->ChkAtHit() && param_1->GetAtHitGObj() != NULL) { dCcD_GObjInf* gobj_p = (dCcD_GObjInf*)param_1->GetAtHitGObj(); if (gobj_p->GetTgSpl() == dCcG_Tg_Spl_UNK1) { param_2->x = param_1->GetAtHitPosP()->x; @@ -5030,9 +4993,9 @@ BOOL daPy_lk_c::checkElecReturnDamage(dCcD_GObjInf* param_1, cXyz* param_2) { /* 801105D8-80110654 .text checkWallAtributeDamage__9daPy_lk_cFP12dBgS_AcchCir */ s32 daPy_lk_c::checkWallAtributeDamage(dBgS_AcchCir* param_1) { - if ((param_1->ChkWallHit()) && (dComIfG_Bgsp()->ChkPolySafe(*param_1))) { + if (param_1->ChkWallHit() && dComIfG_Bgsp()->ChkPolySafe(*param_1)) { int attrib_code = dComIfG_Bgsp()->GetAttributeCode(*param_1); - if ((attrib_code == dBgS_Attr_DAMAGE_e || (attrib_code == dBgS_Attr_ELECTRICITY_e))) { + if ((attrib_code == dBgS_Attr_DAMAGE_e || attrib_code == dBgS_Attr_ELECTRICITY_e)) { return attrib_code; } } @@ -5273,7 +5236,7 @@ BOOL daPy_lk_c::changeDamageProc() { BOOL daPy_lk_c::changeAutoJumpProc() { if ((!checkModeFlg(ModeFlg_MIDAIR | ModeFlg_ROPE | ModeFlg_IN_SHIP | ModeFlg_CLIMB | ModeFlg_SWIM | ModeFlg_LADDER | ModeFlg_CAUGHT)) && - (!mAcch.ChkGroundHit())) + !mAcch.ChkGroundHit()) { f32 dVar11 = mAcch.GetGroundH() - current.pos.y; mLavaGndChk.SetPos(¤t.pos); @@ -5307,11 +5270,9 @@ BOOL daPy_lk_c::changeAutoJumpProc() { pcVar4 = NULL; } dVar10 = mVelocity; - if ((dComIfGs_getLife() != 0) || (dComIfGs_checkBottle(dItem_FAIRY_BOTTLE_e))) { - if ((m357C != 3) && - ((((!(checkGrabWear()) && (dVar10 >= daPy_HIO_autoJump_c0::m.field_0x14)) && - (mStickDistance > 0.85f)) && - (cLib_distanceAngleS(sVar3, shape_angle.y) < 0x800)))) + if (dComIfGs_getLife() != 0 || dComIfGs_checkBottle(dItem_FAIRY_BOTTLE_e)) { + if (m357C != 3 && !checkGrabWear() && dVar10 >= daPy_HIO_autoJump_c0::m.field_0x14 && + mStickDistance > 0.85f && cLib_distanceAngleS(sVar3, shape_angle.y) < 0x800) { if (pcVar4 != NULL) { current.pos.x = mLinkLinChk.GetCrossP()->x; @@ -5319,10 +5280,9 @@ BOOL daPy_lk_c::changeAutoJumpProc() { } return procAutoJump_init(); } - if ((((pcVar4 != NULL) && (std::abs((pcVar4->mNormal).y) <= 0.05f)) && - ((dComIfG_Bgsp()->GetWallCode(mLinkLinChk) != 2 && - ((dVar11 < -125.0f && ((m35D0 - current.pos.y) < -125.0f)))))) && - (current.pos.y - m35D4 > 125.0f)) + if (pcVar4 != NULL && std::abs(pcVar4->GetNP()->y) <= 0.05f && + dComIfG_Bgsp()->GetWallCode(mLinkLinChk) != 2 && dVar11 < -125.0f && + m35D0 - current.pos.y < -125.0f && current.pos.y - m35D4 > 125.0f) { current.pos.x = mLinkLinChk.GetCrossP()->x; current.pos.z = mLinkLinChk.GetCrossP()->z; @@ -6200,13 +6160,17 @@ BOOL daPy_lk_c::procMove_init() { /* 80113628-801136D4 .text procMove__9daPy_lk_cFv */ BOOL daPy_lk_c::procMove() { - /* Nonmatching - regalloc */ setSpeedAndAngleNormal(daPy_HIO_move_c0::m.field_0x0); if (((!checkNextMode(0)) && (!changeFrontWallTypeProc())) && (!checkIceSlipFall())) { - if ((mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK02_e) && - (mVelocity > mMaxNormalSpeed * daPy_HIO_move_c0::m.field_0x2C)) - { - mVelocity = mMaxNormalSpeed * daPy_HIO_move_c0::m.field_0x2C; + if ((mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK02_e)) { + // Fakematch? Regalloc doesn't match unless all three of these vars are given temps. + f32 vel = mVelocity; + f32 temp1 = mMaxNormalSpeed; + f32 temp2 = daPy_HIO_move_c0::m.field_0x2C; + if (vel > temp1 * temp2) { + vel = temp1 * temp2; + mVelocity = vel; + } } setBlendMoveAnime(-1.0f); } @@ -6687,13 +6651,7 @@ BOOL daPy_lk_c::procSlip() { mLinkLinChk.Set(&local_1c, &local_28, this); if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { cM3dGPla* iVar3 = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); - bool bVar2; - if (!(iVar3->GetNP()->y >= 0.5f) && !(iVar3->GetNP()->y < -0.8f)) { - bVar2 = true; - } else { - bVar2 = false; - } - if (bVar2) { + if (cBgW_CheckBWall(iVar3->GetNP()->y)) { mVelocity = 0.0f; checkNextMode(0); } @@ -8036,11 +7994,9 @@ BOOL daPy_lk_c::procLargeDamageUp() { /* 80118640-801189AC .text procLargeDamageWall_init__9daPy_lk_cFiiss */ BOOL daPy_lk_c::procLargeDamageWall_init(int param_1, int param_2, s16 param_3, s16 param_4) { - /* Nonmatching - branching (missing cBgW_CheckBWall lnline?) */ f32 fVar1; f32 fVar2; s16 sVar3; - bool bVar4; f32 fVar5; s16 sVar6; s16 sVar7; @@ -8051,16 +8007,9 @@ BOOL daPy_lk_c::procLargeDamageWall_init(int param_1, int param_2, s16 param_3, } cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); sVar6 = cM_atan2s(triPla->GetNP()->x, triPla->GetNP()->z); - if (!(param_1 < 0)) { - if (!(triPla->GetNP()->y >= 0.5f) && !(triPla->GetNP()->y < -0.8f)) { - bVar4 = true; - } else { - bVar4 = false; - } - if ((bVar4) && (cLib_distanceAngleS(sVar6, current.angle.y + -0x8000) > 0x1555)) { - return false; - } - } + if (param_1 < 0 || !cBgW_CheckBWall(triPla->GetNP()->y) || cLib_distanceAngleS(sVar6, current.angle.y + -0x8000) > 0x1555) { + return false; + } commonProcInit(daPyProc_LARGE_DAMAGE_WALL_e); sVar7 = cM_atan2s(triPla->GetNP()->y, triPla->GetNP()->absXZ()); current.angle.y = sVar6; @@ -8619,7 +8568,7 @@ BOOL daPy_lk_c::procNotUse() { /* 80119DA0-80119EBC .text getGroundAngle__9daPy_lk_cFP13cBgS_PolyInfos */ s16 daPy_lk_c::getGroundAngle(cBgS_PolyInfo* param_1, s16 param_2) { cM3dGPla* plane = dComIfG_Bgsp()->GetTriPla(*param_1); - if ((plane == NULL) || (!(plane->GetNP()->y >= 0.5f))) { + if ((plane == NULL) || (!cBgW_CheckBGround(plane->GetNP()->y))) { return 0; } f32 cos = cM_scos((cM_atan2s(plane->GetNP()->x, plane->GetNP()->z) - param_2)); @@ -8631,27 +8580,25 @@ s16 daPy_lk_c::getGroundAngle(cBgS_PolyInfo* param_1, s16 param_2) { /* 80119EBC-8011A508 .text setLegAngle__9daPy_lk_cFfiPsPs */ int daPy_lk_c::setLegAngle(f32 param_1, int param_2, s16* param_3, s16* param_4) { - /* Nonmatching - regalloc, cXyz */ - s16 sVar1; - s16 sVar2; - int iVar6; - s16 sVar7; f32 dVar8; f32 dVar9; f32 dVar10; f32 dVar11; f32 dVar12; f32 dVar13; - cXyz local_108; - cXyz local_fc; - cXyz local_f0; - cXyz local_e4; - cXyz local_d8; - cXyz local_c0; - cXyz local_78; - cXyz local_6c; - cXyz local_60; - cXyz local_54; + cXyz spE8; + cXyz spDC; + cXyz spD0; + cXyz spC4; + cXyz spB8; + cXyz spAC; + cXyz spA0; + cXyz sp94; + cXyz sp88; + cXyz sp7C; + cXyz sp70; + cXyz sp64; + cXyz sp58; if (std::abs(param_1) < 0.1f) { return false; @@ -8661,34 +8608,35 @@ int daPy_lk_c::setLegAngle(f32 param_1, int param_2, s16* param_3, s16* param_4) dVar9 = 10.0f; } dVar8 = param_1; - mDoMtx_concat(m37B4, mFootData[0].field_0x088[0], mDoMtx_stack_c::get()); - local_54.x = 0.0f; - local_54.y = mDoMtx_stack_c::now[1][3]; - local_54.z = mDoMtx_stack_c::now[2][3]; + mDoMtx_concat(m37B4, mFootData[param_2].field_0x088[0], mDoMtx_stack_c::get()); + spE8.x = 0.0f; + spE8.y = mDoMtx_stack_c::now[1][3]; + spE8.z = mDoMtx_stack_c::now[2][3]; - mDoMtx_concat(m37B4, mFootData[0].field_0x088[1], mDoMtx_stack_c::get()); - local_60.x = 0.0f; - local_60.y = mDoMtx_stack_c::now[1][3]; - local_60.z = mDoMtx_stack_c::now[2][3]; + mDoMtx_concat(m37B4, mFootData[param_2].field_0x088[1], mDoMtx_stack_c::get()); + spDC.x = 0.0f; + spDC.y = mDoMtx_stack_c::now[1][3]; + spDC.z = mDoMtx_stack_c::now[2][3]; - mDoMtx_concat(m37B4, mFootData[0].field_0x088[2], mDoMtx_stack_c::get()); - local_6c.x = 0.0f; - local_6c.y = mDoMtx_stack_c::now[1][3] + 3.25f; - local_6c.z = mDoMtx_stack_c::now[2][3]; - local_e4 = local_60 - local_54; - local_f0 = local_6c - local_60; - local_78.set(local_60.x, local_60.y + dVar8, local_60.z + dVar9); - local_78.y += param_1; - if (local_78.y >= local_54.y) { + mDoMtx_concat(m37B4, mFootData[param_2].field_0x088[2], mDoMtx_stack_c::get()); + spD0.x = 0.0f; + spD0.y = mDoMtx_stack_c::now[1][3] + 3.25f; + spD0.z = mDoMtx_stack_c::now[2][3]; + spAC = spDC - spE8; + spA0 = spD0 - spDC; + spB8.set(spD0.x, spD0.y, spD0.z); + spB8.y += dVar8; + spB8.z += dVar9; + if (spB8.y >= spE8.y) { return false; } - local_fc = local_e4 - local_78; - dVar9 = local_fc.abs2(); + sp7C = spB8 - spE8; + dVar9 = sp7C.abs2(); if (cM3d_IsZero(dVar9)) { return false; } - dVar10 = local_e4.abs2(); - dVar11 = local_f0.abs2(); + dVar10 = spAC.abs2(); + dVar11 = spA0.abs2(); dVar8 = std::sqrtf(dVar10); dVar12 = std::sqrtf(dVar11); dVar13 = std::sqrtf(dVar9); @@ -8696,38 +8644,42 @@ int daPy_lk_c::setLegAngle(f32 param_1, int param_2, s16* param_3, s16* param_4) return false; } dVar8 = (((dVar9 + dVar10) - dVar11) / (2.0f * dVar9)); - local_d8.set(0.0f, local_54.y + (dVar8 * local_fc.y), local_54.z + (dVar8 * local_fc.z)); - dVar9 = std::sqrtf(dVar10 - (dVar8 * (dVar9 * dVar8))); - local_c0.set(0.0f, local_fc.y, -local_fc.z); - dVar8 = local_e4.abs(); + sp58.set(0.0f, spE8.y + (dVar8 * sp7C.y), spE8.z + (dVar8 * sp7C.z)); + f32 f4 = dVar10 - (dVar8 * (dVar9 * dVar8)); + if (f4 < 0.0f) { + f4 = 0.0f; + } + dVar9 = std::sqrtf(f4); + sp70.set(0.0f, sp7C.z, -sp7C.y); + dVar8 = sp70.abs(); if (cM3d_IsZero(dVar8)) { return false; } - local_6c.set(0.0f, local_d8.y + (dVar9 / dVar8) * local_c0.y, - local_d8.z + (dVar9 / dVar8) * local_c0.z); - local_d8 = local_108 - local_6c; - local_c0 = local_fc - local_108; + f32 f2 = dVar9 / dVar8; + spC4.set(0.0f, sp58.y + f2 * sp70.y, sp58.z + f2 * sp70.z); + sp94 = spC4 - spE8; + sp88 = spB8 - spC4; mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0), mDoMtx_stack_c::get()); - local_60.x = 0.0f; - local_60.y = mDoMtx_stack_c::now[1][3]; - local_60.z = mDoMtx_stack_c::now[2][3]; - sVar7 = cM_atan2s(-mDoMtx_stack_c::now[1][3], -mDoMtx_stack_c::now[2][3]); - sVar1 = cM_atan2s(local_d8.y, local_d8.z); - iVar6 = cM_atan2s(local_c0.y, local_c0.z); - if ((s16)(sVar1 - sVar7) > 0x6000) { - sVar1 = sVar7 + 0x6000; - } else if ((s16)(sVar1 - sVar7) < -0x4000) { - sVar1 = sVar7 + -0x4000; + sp64.x = 0.0f; + sp64.y = mDoMtx_stack_c::now[1][3]; + sp64.z = mDoMtx_stack_c::now[2][3]; + s16 r29 = cM_atan2s(-mDoMtx_stack_c::now[1][3], -mDoMtx_stack_c::now[2][3]); + s16 r27 = cM_atan2s(sp94.y, sp94.z); + s16 r26 = cM_atan2s(sp88.y, sp88.z); + s16 r3 = r27 - r29; + if (r3 > 0x6000) { + r27 = r29 + 0x6000; + } else if (r3 < -0x4000) { + r27 = r29 + -0x4000; } - sVar2 = (s16)iVar6 - sVar1; - sVar7 = sVar1; - if (sVar2 > 0) { - sVar7 = (s16)iVar6; - } else if (sVar2 < -0x7000) { - sVar7 = sVar1 + -0x7000; + s16 r0 = r26 - r27; + if (r0 > 0) { + r26 = r27; + } else if (r0 < -0x7000) { + r26 = r27 + -0x7000; } - *param_3 = cM_atan2s(local_f0.y, local_f0.z) - sVar1; - *param_4 = cM_atan2s(local_e4.y, local_e4.z) - sVar7; + *param_3 = cM_atan2s(spAC.y, spAC.z) - r27; + *param_4 = cM_atan2s(spA0.y, spA0.z) - r26; return true; } @@ -9544,7 +9496,7 @@ void daPy_lk_c::setHatAngle() { dVar18 = 1.0f; } dVar17 = dVar18; - if ((bVar6) && (!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES))) { + if (bVar6 && (!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES))) { dVar18 = 3.5f; dVar17 = 1.0f; mDoAud_seStart(JA_SE_LK_HAT_SWING, &eyePos, 0, mReverb); @@ -9553,8 +9505,8 @@ void daPy_lk_c::setHatAngle() { m3514 = m3514 + sVar8; fVar1 = cM_scos(m3514); m350E = (s16)((2280.0f * dVar17) * fVar1); - m3510 = (s16)((3908.0f * dVar17) * cM_scos((m3514)-3.0f * (sVar8))); - m3512 = (s16)((7568.0f * dVar17) * cM_scos((m3514)-6.0f * (sVar8))); + m3510 = (s16)((3908.0f * dVar17) * cM_scos(m3514-3.0f * (sVar8))); + m3512 = (s16)((7568.0f * dVar17) * cM_scos(m3514-6.0f * (sVar8))); m3718 = local_d0; if (checkModeFlg(ModeFlg_SWIM)) { m351A = 0; @@ -10089,7 +10041,7 @@ void daPy_lk_c::setCollision() { mDoMtx_stack_c::copy(mpCLModel->getBaseTRMtx()); mDoMtx_stack_c::YrotM(-0x2BC); mDoMtx_stack_c::multVec(&local_c4, &local_ac); - if (m331C.field_0x4 == 0xFF) { + if (m331C.getAlpha() == 0xFF) { pcVar23 = &mSwBlur.field_0x304[0]; m331C.setPosArray(pcVar23, 10); m332C.setPosArray(pcVar23, 10); @@ -10119,7 +10071,7 @@ void daPy_lk_c::setCollision() { mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &mSwBlur.mpPosBuffer[iVar12 * 2 + 3], &local_ac); mAtCyl.MoveCAt(current.pos); - if (m331C.field_0x4 == 0xFF) { + if (m331C.getAlpha() == 0xFF) { sVar16 = mSwBlur.field_0x018 - iVar13; m331C.setPosArray(&mSwBlur.field_0x304[0], sVar16); m332C.setPosArray(&mSwBlur.field_0x304[0], sVar16); @@ -10211,7 +10163,7 @@ void daPy_lk_c::setCollision() { if (dComIfG_Bgsp()->LineCross(&mArrowLinChk)) { pfVar15 = dComIfG_Bgsp()->GetTriPla(mArrowLinChk); local_100.set(*mArrowLinChk.GetCrossP()); - if (!(pfVar15->GetNP()->y >= 0.5f)) { + if (!cBgW_CheckBGround(pfVar15->GetNP()->y)) { m3534 = 0; m33E8.end(); mpYuchw00Brk->setFrame(mpYuchw00Brk->getFrameMax() - 0.001f); @@ -10389,13 +10341,6 @@ int daPy_lk_c::setRoomInfo() { /* 8011EF94-8011F9C0 .text setDemoData__9daPy_lk_cFv */ void daPy_lk_c::setDemoData() { - /* Nonmatching - for loop, cXyz */ - u32 unaff_r26; - f32 dVar22; - cXyz local_90; - cXyz local_84; - cXyz local_78; - dDemo_actor_c* demo_actor_p = dComIfGp_demo_getActor(demoActorID); cXyz* pos_p = NULL; s16 angle; @@ -10453,30 +10398,13 @@ void daPy_lk_c::setDemoData() { } if ((demo_actor_p->checkEnable(dDemo_actor_c::ENABLE_SHAPE_e))) { if (dComIfGs_getClearCount() == 0) { - unaff_r26 = demo_actor_p->getShapeId(); - if ((checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (unaff_r26 == 0)) || - ((!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (unaff_r26 == 1)))) + u32 shape = demo_actor_p->getShapeId(); + if ((checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (shape == 0)) || + ((!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (shape == 1)))) { - ResTIMG* pRVar11; - ResTIMG* local_48; - pRVar11 = mpCurrLinktex; - // f32 local_4c; - // f32* pfVar17 = &local_4c; - // u32* puVar16 = &pRVar11[-1].imageOffset; - // int iVar9 = 4; - // do { - // for (iVar9 = 0; iVar9 != NULL; iVar9++) { - // f32* pfVar1 = (f32*)(puVar16 + 1); - // puVar16 = puVar16 + 2; - // f32 fVar7 = (f32)*puVar16; - // pfVar17[1] = *pfVar1; - // pfVar17 = pfVar17 + 2; - // *pfVar17 = fVar7; - // iVar9 = iVar9 + -1; - // } while (iVar9 != 0); - // } - *pRVar11 = mOtherLinktex; - mOtherLinktex = *local_48; + ResTIMG casualLinktex = *mpCurrLinktex; + *mpCurrLinktex = mOtherLinktex; + mOtherLinktex = casualLinktex; if (checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES)) { offNoResetFlg1(daPyFlg1_CASUAL_CLOTHES); } else { @@ -10490,7 +10418,7 @@ void daPy_lk_c::setDemoData() { mDemo.setDemoType(2); } if (mStaffIdx != -1) { - char* cut_name = dComIfGp_getPEvtManager()->getMyNowCutName((mStaffIdx)); + char* cut_name = dComIfGp_getPEvtManager()->getMyNowCutName(mStaffIdx); if (cut_name != NULL) { // Take the first 3 chars in cut_name, convert them to integers, and calculate // demo_mode @@ -10545,9 +10473,8 @@ void daPy_lk_c::setDemoData() { if (mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK0E_e) { if (mDemo.getTimer() != 0) { mDemo.decTimer(); - local_78 = current.pos - home.pos; - dVar22 = local_78.abs2XZ(); - if (dVar22 > 90000.0f) { + cXyz sp5C = current.pos - home.pos; + if (sp5C.abs2XZ() > 90000.0f) { mDemo.setTimer(0); dComIfGp_evmng_cutEnd(mStaffIdx); } @@ -10596,19 +10523,19 @@ void daPy_lk_c::setDemoData() { } } } else if (demo_mode == daPy_demo_c::DEMO_UNK2B_e) { - local_84 = current.pos - *pos_p; - angle = current.angle.y; - current.angle.y = cM_atan2s(local_84.x, local_84.z); + cXyz sp50 = *pos_p - current.pos; + s16 r24 = current.angle.y; + current.angle.y = cM_atan2s(sp50.x, sp50.z); shape_angle.y = current.angle.y; - m34EC -= current.angle.y - angle; + m34EC -= (s16)(current.angle.y - r24); } else if ((demo_mode == daPy_demo_c::DEMO_UNK02_e) || (demo_mode == daPy_demo_c::DEMO_UNK03_e)) { - local_90 = current.pos - *pos_p; + cXyz sp44 = *pos_p - current.pos; if (std::abs(mVelocity) / mMaxNormalSpeed < daPy_HIO_move_c0::m.field_0x2C) { demo_mode = daPy_demo_c::DEMO_UNK02_e; } - dVar22 = local_90.abs2XZ(); + f32 dVar22 = sp44.abs2XZ(); if ((dVar22 < 100.0f) || ((dVar22 < 2500.0f) && (std::abs(mVelocity) < 0.001f))) { demo_mode = daPy_demo_c::DEMO_UNK01_e; mVelocity = 0.0f; @@ -10617,7 +10544,7 @@ void daPy_lk_c::setDemoData() { { mDemo.setStick(0.0f); } - mDemo.setMoveAngle(cM_atan2s(local_90.x, local_90.z)); + mDemo.setMoveAngle(cM_atan2s(sp44.x, sp44.z)); } else if ((demo_mode == daPy_demo_c::DEMO_UNK05_e) || (demo_mode == daPy_demo_c::DEMO_UNK18_e)) { @@ -10766,7 +10693,7 @@ void daPy_lk_c::setStickData() { if (checkGrabWear()) { mStickDistance = mStickDistance * daPy_HIO_move_c0::m.field_0x74; } - if ((bVar1) && (dComIfGp_event_runCheck() == 0)) { + if (bVar1 && (dComIfGp_event_runCheck() == 0)) { mDoAud_seStart(JA_SE_ITEM_TARGET_OUT); } } @@ -11604,7 +11531,7 @@ BOOL daPy_lk_c::execute() { offNoResetFlg0(daPyFlg0_UNK400000); if (current.pos.y < 2000.0f && dComIfG_Bgsp()->GetSpecialCode(mAcch.m_gnd) != 1) { cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd); - if (triPla->GetNP()->y >= 0.5f) { + if (cBgW_CheckBGround(triPla->GetNP()->y)) { offNoResetFlg0(daPyFlg0_DEKU_SP_RETURN_FLG); } } @@ -11880,10 +11807,10 @@ BOOL daPy_lk_c::playerDelete() { m32E4.end(); m32F0.end(); m33E8.end(); - mSmokeEcallBack.end(); - m331C.end(); - m332C.end(); - m333C.end(); + mSmokeEcallBack.remove(); + m331C.remove(); + m332C.remove(); + m333C.remove(); m3400.end(); m3410.end(); m3438.end(); @@ -12816,83 +12743,73 @@ void daPy_lk_c::resetSeAnime() { } /* 80127E08-8012821C .text setMoveAnime__9daPy_lk_cFfffQ29daPy_lk_c8daPy_ANMQ29daPy_lk_c8daPy_ANMif */ -int daPy_lk_c::setMoveAnime(f32 param_1, f32 param_2, f32 param_3, daPy_ANM param_4, daPy_ANM param_5, int param_6, f32 param_7) { - /* Nonmatching - regalloc */ - f32 fVar2; - f32 dVar7; - f32 dVar8; - f32 dVar10; - f32 dVar12; - f32 dVar15; - J3DAnmTransform* local_c8; - J3DAnmTransform* local_c4; - J3DAnmTransform* local_c0; - J3DAnmTransform* local_bc; - - J3DAnmTransform* pJVar4 = mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform(); +int daPy_lk_c::setMoveAnime(f32 f27, f32 f28, f32 f25, daPy_ANM r27, daPy_ANM r28, int r29, f32 f29) { + J3DAnmTransform* r3 = mAnmRatioUnder[UNDER_MOVE0_e].getAnmTransform(); J3DFrameCtrl& frameCtrl0 = mFrameCtrlUnder[UNDER_MOVE0_e]; J3DFrameCtrl& frameCtrl1 = mFrameCtrlUnder[UNDER_MOVE1_e]; + f32 f31; if (((m34C3 == 0) || (m34C3 == 9)) || (m34C3 == 10)) { - dVar15 = 0.0f; + f31 = 0.0f; } else { - dVar15 = pJVar4->getFrame() / pJVar4->getFrameMax(); + f31 = r3->getFrame() / r3->getFrameMax(); } - const daPy_anmIndex_c* pdVar5 = getAnmData(param_4); - const daPy_anmIndex_c* pdVar6 = getAnmData(param_5); - getUnderUpperAnime(pdVar5, &local_bc, &local_c0, 0, 0x2400); - getUnderUpperAnime(pdVar6, &local_c4, &local_c8, 1, 0x2400); - dVar7 = 1.0f; - fVar2 = dVar7 - param_1; - mAnmRatioUnder[UNDER_MOVE0_e].setRatio(fVar2); - mAnmRatioUnder[UNDER_MOVE1_e].setRatio(param_1); - mAnmRatioUpper[UPPER_MOVE0_e].setRatio(fVar2); - mAnmRatioUpper[UPPER_MOVE1_e].setRatio(param_1); - dVar10 = local_bc->getFrameMax(); - dVar12 = local_c4->getFrameMax(); - dVar7 = dVar7 / dVar10; - fVar2 = (param_2 + (param_1 * (((param_3 * dVar10) / dVar12) - param_2))); - param_2 = fVar2; - setFrameCtrl(&frameCtrl0, local_bc->getAttribute(), 0, dVar8, fVar2, (dVar15 * dVar10)); - local_bc->setFrame(frameCtrl0.getFrame()); - setFrameCtrl(&frameCtrl1, local_c4->getAttribute(), 0, dVar12, (dVar7 * (param_2 * dVar12)), - (dVar15 * dVar12)); - local_c4->setFrame(frameCtrl1.getFrame()); - mAnmRatioUnder[UNDER_MOVE0_e].setAnmTransform(local_bc); - mAnmRatioUnder[UNDER_MOVE1_e].setAnmTransform(local_c4); - if (local_c0 != NULL) { - dVar8 = local_c0->getFrameMax(); - mAnmRatioUpper[UPPER_MOVE0_e].setAnmTransform(local_c0); - setFrameCtrl(&mFrameCtrlUpper[UPPER_MOVE0_e], local_c0->getAttribute(), 0, param_3, - (dVar7 * (param_2 * dVar8)), (dVar15 * dVar8)); - local_c0->setFrame(mFrameCtrlUpper[UPPER_MOVE0_e].getFrame()); + const daPy_anmIndex_c* r25 = getAnmData(r27); + const daPy_anmIndex_c* r24 = getAnmData(r28); + J3DAnmTransform* sp14; + J3DAnmTransform* sp10; + getUnderUpperAnime(r25, &sp14, &sp10, 0, 0x2400); + J3DAnmTransform* sp0C; + J3DAnmTransform* sp08; + getUnderUpperAnime(r24, &sp0C, &sp08, 1, 0x2400); + mAnmRatioUnder[UNDER_MOVE0_e].setRatio(1.0f - f27); + mAnmRatioUnder[UNDER_MOVE1_e].setRatio(f27); + mAnmRatioUpper[UPPER_MOVE0_e].setRatio(1.0f - f27); + mAnmRatioUpper[UPPER_MOVE1_e].setRatio(f27); + f32 f3 = sp14->getFrameMax(); + f32 f26 = sp0C->getFrameMax(); + f32 f30 = 1.0f / f3; + f27 = (f28 + (f27 * (((f25 * f3) / f26) - f28))); + setFrameCtrl(&frameCtrl0, sp14->getAttribute(), 0, f3, f27, (f31 * f3)); + sp14->setFrame(frameCtrl0.getFrame()); + setFrameCtrl(&frameCtrl1, sp0C->getAttribute(), 0, f26, (f30 * (f27 * f26)), + (f31 * f26)); + sp0C->setFrame(frameCtrl1.getFrame()); + mAnmRatioUnder[UNDER_MOVE0_e].setAnmTransform(sp14); + mAnmRatioUnder[UNDER_MOVE1_e].setAnmTransform(sp0C); + if (sp10 != NULL) { + f32 f2 = sp10->getFrameMax(); + mAnmRatioUpper[UPPER_MOVE0_e].setAnmTransform(sp10); + setFrameCtrl(&mFrameCtrlUpper[UPPER_MOVE0_e], sp10->getAttribute(), 0, f2, + (f30 * (f27 * f2)), (f31 * f2)); + sp10->setFrame(mFrameCtrlUpper[UPPER_MOVE0_e].getFrame()); } else { - mAnmRatioUpper[UPPER_MOVE0_e].setAnmTransform(local_bc); + mAnmRatioUpper[UPPER_MOVE0_e].setAnmTransform(sp14); } - if (local_c8 != NULL) { - dVar8 = local_c8->getFrameMax(); - mAnmRatioUpper[UPPER_MOVE1_e].setAnmTransform(local_c8); - setFrameCtrl(&mFrameCtrlUpper[UPPER_MOVE1_e], local_c8->getAttribute(), 0, param_3, - (dVar7 * (param_2 * dVar8)), (dVar15 * dVar8)); - local_c8->setFrame(mFrameCtrlUpper[UPPER_MOVE1_e].getFrame()); + if (sp08 != NULL) { + f32 f2 = sp08->getFrameMax(); + mAnmRatioUpper[UPPER_MOVE1_e].setAnmTransform(sp08); + setFrameCtrl(&mFrameCtrlUpper[UPPER_MOVE1_e], sp08->getAttribute(), 0, f2, + (f30 * (f27 * f2)), (f31 * f2)); + sp08->setFrame(mFrameCtrlUpper[UPPER_MOVE1_e].getFrame()); } else { - mAnmRatioUpper[UPPER_MOVE1_e].setAnmTransform(local_c4); + mAnmRatioUpper[UPPER_MOVE1_e].setAnmTransform(sp0C); } - if (param_7 >= 0.0f) { - m_old_fdata->initOldFrameMorf(param_7, 0, 0x2A); + if (f29 >= 0.0f) { + m_old_fdata->initOldFrameMorf(f29, 0, 0x2A); } if ((mDirection == DIR_BACKWARD) || ((mCurProc == daPyProc_ROPE_SWING_e && (!checkModeFlg(ModeFlg_00000400))))) { - setTextureAnime(mAnmDataTable[param_5].mTexAnmIdx, 0); + setTextureAnime(mAnmDataTable[r28].mTexAnmIdx, 0); } else { - setTextureAnime(mAnmDataTable[param_4].mTexAnmIdx, 0); + setTextureAnime(mAnmDataTable[r27].mTexAnmIdx, 0); } - if ((param_6 == 5) || (param_6 == 2)) { + if ((r29 == 5) || (r29 == 2)) { setSeAnime(&m_anm_heap_under[UNDER_MOVE0_e], &frameCtrl0); } else { setSeAnime(&m_anm_heap_under[UNDER_MOVE1_e], &frameCtrl1); } - m34C3 = param_6; + m34C3 = r29; return true; } diff --git a/src/d/actor/d_a_player_swim.inc b/src/d/actor/d_a_player_swim.inc index 54fcd2a88..ea4d0e7ba 100644 --- a/src/d/actor/d_a_player_swim.inc +++ b/src/d/actor/d_a_player_swim.inc @@ -231,7 +231,7 @@ BOOL daPy_lk_c::changeSwimOutProc() { return procFall_init(1, daPy_HIO_wallCatch_c0::m.field_0x54); } - if (!checkNoResetFlg0(daPyFlg0_UNK80) || (pcVar1 && pcVar1->mNormal.y >= 0.5f && m35D0 - mAcch.GetGroundH() < daPy_HIO_swim_c0::m.field_0x24 - 5.0f)) { + if (!checkNoResetFlg0(daPyFlg0_UNK80) || (pcVar1 && cBgW_CheckBGround(pcVar1->GetNP()->y) && m35D0 - mAcch.GetGroundH() < daPy_HIO_swim_c0::m.field_0x24 - 5.0f)) { current.pos.y = m35D0; if (mCurProc == daPyProc_SWIM_MOVE_e && mDirection != DIR_FORWARD) { diff --git a/src/d/actor/d_a_player_sword.inc b/src/d/actor/d_a_player_sword.inc index e4ce847e9..8d3b24809 100644 --- a/src/d/actor/d_a_player_sword.inc +++ b/src/d/actor/d_a_player_sword.inc @@ -458,7 +458,7 @@ int daPy_lk_c::changeCutReverseProc(daPy_ANM param_0) { mLinkLinChk.Set(&local_24, &mSwordTopPos, this); if (dComIfG_Bgsp()->LineCross(&mLinkLinChk)) { cM3dGPla* triPla = dComIfG_Bgsp()->GetTriPla(mLinkLinChk); - if (!(triPla->GetNP()->y >= 0.5f) || + if (!cBgW_CheckBGround(triPla->GetNP()->y) || (mCurProc == daPyProc_HAMMER_FRONT_SWING_e && triPla->GetNP()->y < 0.64278764f)) { if (mEquipItem != dItem_DEKU_LEAF_e) { @@ -1454,13 +1454,13 @@ BOOL daPy_lk_c::procCutTurn() { } if (frameCtrl.checkPass(daPy_HIO_cutTurn_c0::m.field_0x34)) { - m331C.field_0x4 = 0x80; - m332C.field_0x4 = 0x80; - m333C.field_0x4 = 0x80; - } else if (m331C.field_0x4 == 0x80) { - m331C.field_0x4 = 0; - m332C.field_0x4 = 0; - m333C.field_0x4 = 0; + m331C.setAlpha(0x80); + m332C.setAlpha(0x80); + m333C.setAlpha(0x80); + } else if (m331C.getAlpha() == 0x80) { + m331C.setAlpha(0x00); + m332C.setAlpha(0x00); + m333C.setAlpha(0x00); } m34C2 = 1; return true; diff --git a/src/d/actor/d_a_player_whide.inc b/src/d/actor/d_a_player_whide.inc index 8aff325ae..16762518a 100644 --- a/src/d/actor/d_a_player_whide.inc +++ b/src/d/actor/d_a_player_whide.inc @@ -99,7 +99,7 @@ cM3dGPla* daPy_lk_c::getWHideModePolygon(cXyz* param_0, cXyz* param_1, cXyz* par local_3c.z = param_2->z + cM_ssin(uVar3) * daPy_HIO_wall_c0::m.field_0x50; mGndChk.SetPos(&local_3c); float f31 = bgs->GroundCross(&mGndChk); - if (C_BG_MIN_HEIGHT != f31 && (!(bgs->GetTriPla(mGndChk)->GetNP()->y >= 0.5f))) { + if (C_BG_MIN_HEIGHT != f31 && (!cBgW_CheckBGround(bgs->GetTriPla(mGndChk)->GetNP()->y))) { return NULL; } @@ -350,7 +350,6 @@ BOOL daPy_lk_c::procWHideWait_init() { /* 80137DF0-80138074 .text procWHideWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procWHideWait() { - cXyz cStack_24; cXyz cStack_3c; cXyz cStack_48; @@ -385,7 +384,7 @@ BOOL daPy_lk_c::procWHideWait() { } if (mStickDistance > 0.05f && C_BG_MIN_HEIGHT != mAcch.GetGroundH() && - dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y >= 0.5f) + cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y)) { int direction = getDirectionFromCurrentAngle(); if (direction == DIR_RIGHT || direction == DIR_LEFT) { @@ -453,7 +452,7 @@ BOOL daPy_lk_c::procWHideMove() { if (checkWHideModeChange(&acStack_24) != 0) { fVar2 = 0.0f; } else if (mStickDistance > 0.05f && C_BG_MIN_HEIGHT != mAcch.GetGroundH() && - dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y >= 0.5f) + cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y)) { int direction = getDirectionFromCurrentAngle(); if (direction == DIR_BACKWARD) { @@ -492,7 +491,7 @@ BOOL daPy_lk_c::procWHideMove() { if (std::fabsf(mVelocity) <= 0.001f) { return procWHideWait_init(); } - if (mAcch.GetGroundH() == C_BG_MIN_HEIGHT || !(dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y >= 0.5f) || + if (mAcch.GetGroundH() == C_BG_MIN_HEIGHT || !cBgW_CheckBGround(dComIfG_Bgsp()->GetTriPla(mAcch.m_gnd)->GetNP()->y) || !checkWHideBackWall(&cStack_30)) { mVelocity = 0.0f; diff --git a/src/d/d_bg_s_acch.cpp b/src/d/d_bg_s_acch.cpp index 2380ac545..65102d746 100644 --- a/src/d/d_bg_s_acch.cpp +++ b/src/d/d_bg_s_acch.cpp @@ -198,7 +198,7 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) { pm_out_poly_info->SetPolyInfo(linChk); cM3dGPla* pla = i_bgs.GetTriPla(linChk); - if (!(pla->GetNP()->y >= 0.5f)) { + if (!cBgW_CheckBGround(pla->GetNP()->y)) { VECAdd(pm_pos, pla->GetNP(), pm_pos); if (!cM3d_IsZero(std::sqrtf(pla->GetNP()->x*pla->GetNP()->x + pla->GetNP()->z*pla->GetNP()->z))) pm_acch_cir[i].SetWallHDirect(pm_pos->y); diff --git a/src/d/d_particle.cpp b/src/d/d_particle.cpp index 36bc99cf3..853bbcc06 100644 --- a/src/d/d_particle.cpp +++ b/src/d/d_particle.cpp @@ -1059,7 +1059,7 @@ void dPa_cutTurnEcallBack_c::setup(JPABaseEmitter* param_1, const cXyz* param_2, mpBaseEmitter = param_1; field_0x6 = 0; field_0x5 = 0; - field_0x4 = 0xFF; + mAlpha = 0xFF; } /* 8007E9D4-8007EAC4 .text executeAfter__22dPa_cutTurnEcallBack_cFP14JPABaseEmitter */ From 95f230eb155fe5aa35ef107bc418281b1071052b Mon Sep 17 00:00:00 2001 From: Mattias Blum <142374929+mattias-blum@users.noreply.github.com> Date: Fri, 9 May 2025 15:18:16 -0400 Subject: [PATCH 10/31] d_a_ks 100% (#746) * initial progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * more progress * symbol cleanup * more progress * more progress * d_a_ks 100% * more symbol cleanup * likely real-match for `useHeapInit` * removed `csXyz` type from class member * changed int to BOOL for `HEAVY_IN` * documented matching issue * PR changes --- configure.py | 2 +- include/d/actor/d_a_gm.h | 4 +- include/d/actor/d_a_ks.h | 54 +- include/d/d_snap.h | 2 +- src/d/actor/d_a_ks.cpp | 1585 ++++++++++++++++++++++++++++++++++++-- 5 files changed, 1592 insertions(+), 55 deletions(-) diff --git a/configure.py b/configure.py index 74fc276a2..dc9a333d2 100755 --- a/configure.py +++ b/configure.py @@ -1468,7 +1468,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_kantera"), ActorRel(NonMatching, "d_a_kn"), ActorRel(NonMatching, "d_a_kokiie"), - ActorRel(NonMatching, "d_a_ks"), + ActorRel(NonMatching, "d_a_ks"), # code 100%, possible issue unique to this TU ActorRel(NonMatching, "d_a_kt"), # regalloc, weak func order ActorRel(NonMatching, "d_a_mflft"), ActorRel(NonMatching, "d_a_npc_cb1"), diff --git a/include/d/actor/d_a_gm.h b/include/d/actor/d_a_gm.h index f41284fa0..6b3d77c5a 100644 --- a/include/d/actor/d_a_gm.h +++ b/include/d/actor/d_a_gm.h @@ -7,7 +7,9 @@ class gm_class : public fopEn_enemy_c { public: /* 0x2AC */ u8 m2AC[0x2CD - 0x2AC]; /* 0x2CD */ u8 m2CD; - /* 0x2CE */ u8 m2CE[0x3D0 - 0x2CE]; + /* 0x2CE */ u8 m2CE[0x31E - 0x2CE]; + /* 0x31E */ s16 m31E; + /* 0x320 */ u8 m320[0x3D0 - 0x320]; /* 0x3D0 */ f32 z; /* 0x3D4 */ u8 m3D4[0x3DC - 0x3D4]; /* 0x3DC */ f32 m3DC; diff --git a/include/d/actor/d_a_ks.h b/include/d/actor/d_a_ks.h index d22c1f1df..135fd024d 100644 --- a/include/d/actor/d_a_ks.h +++ b/include/d/actor/d_a_ks.h @@ -2,13 +2,59 @@ #define D_A_KS_H #include "f_op/f_op_actor.h" -#include "SSystem/SComponent/c_bg_s_poly_info.h" +#include "c/c_damagereaction.h" + +class mDoExt_McaMorf; +class mDoExt_brkAnm; +class mDoExt_btkAnm; +class daPy_lk_c; class ks_class : public fopEn_enemy_c { public: - /* 0x2AC */ u8 m2AC[0x44C - 0x2AC]; - /* 0x44C */ cBgS_PolyInfo m44C; - /* 0x45C */ u8 m45C[0xC88 - 0x45C]; + /* 0x2AC */ request_of_phase_process_class mPhs; + /* 0x2B4 */ mDoExt_McaMorf* mpBodyMorf; + /* 0x2B8 */ mDoExt_McaMorf* mpEyeMorf; + /* 0x2BC */ mDoExt_btkAnm* mpEyeBtkAnm; + /* 0x2C0 */ mDoExt_brkAnm* mpBodyBrkAnm; + /* 0x2C4 */ mDoExt_brkAnm* mpEyeBrkAnm; + /* 0x2C8 */ u8 m2C8; + /* 0x2C9 */ u8 m2C9; + /* 0x2CA */ u8 m2CA; + /* 0x2CB */ u8 m2CB; + /* 0x2CC */ u8 m2CC; + /* 0x2CD */ u8 m2CD; + /* 0x2CE */ u8 m2CE; + /* 0x2CF */ u8 m2CF; + /* 0x2D0 */ u8 m2D0; + /* 0x2D1 */ u8 m2D1; + /* 0x2D2 */ u8 m2D2; + /* 0x2D3 */ u8 m2D3; + /* 0x2D4 */ fpc_ProcID mGmID; // Mothula + /* 0x2D8 */ fpc_ProcID mKsID; // Morth + /* 0x2DC */ cXyz m2DC; + /* 0x2E8 */ s16 m2E8[4]; + /* 0x2F0 */ s16 m2F0[5]; + /* 0x2FA */ s16 m2FA; + /* 0x2FC */ s16 m2FC; + /* 0x2FE */ s16 m2FE; + /* 0x300 */ s16 m300; + /* 0x302 */ s16 m302; + /* 0x304 */ f32 m304; + /* 0x308 */ f32 m308; + /* 0x30C */ f32 m30C; + /* 0x310 */ f32 m310; + /* 0x314 */ f32 m314; + /* 0x318 */ f32 m318; + /* 0x31C */ f32 m31C; + /* 0x320 */ f32 m320; + /* 0x324 */ dBgS_AcchCir mAcchCir; + /* 0x364 */ dBgS_ObjAcch mAcch; + /* 0x528 */ MtxP m528; + /* 0x52C */ dPa_rippleEcallBack m52C; + /* 0x540 */ dCcD_Stts mStts; + /* 0x57C */ dCcD_Sph mSph; + /* 0x6A8 */ enemyice mEnemyIce; + /* 0xA60 */ enemyfire mEnemyFire; }; #endif /* D_A_KS_H */ diff --git a/include/d/d_snap.h b/include/d/d_snap.h index 1a44d128b..1c9b49822 100644 --- a/include/d/d_snap.h +++ b/include/d/d_snap.h @@ -184,7 +184,7 @@ enum { /* 0xB0 */ DSNAP_TYPE_UNKB0, /* 0xB1 */ DSNAP_TYPE_UNKB1, /* 0xB2 */ DSNAP_TYPE_UNKB2, - /* 0xB3 */ DSNAP_TYPE_UNKB3, + /* 0xB3 */ DSNAP_TYPE_KS, /* 0xB4 */ DSNAP_TYPE_UNKB4, /* 0xB5 */ DSNAP_TYPE_UNKB5, /* 0xB6 */ DSNAP_TYPE_AM2, diff --git a/src/d/actor/d_a_ks.cpp b/src/d/actor/d_a_ks.cpp index 81daf8f6c..ee4344784 100644 --- a/src/d/actor/d_a_ks.cpp +++ b/src/d/actor/d_a_ks.cpp @@ -5,125 +5,1614 @@ #include "d/actor/d_a_ks.h" #include "d/d_procname.h" +#include "d/d_com_inf_game.h" +#include "d/d_s_play.h" +#include "f_op/f_op_camera.h" +#include "d/d_snap.h" +#include "d/actor/d_a_player_main.h" +#include "d/actor/d_a_gm.h" +#include "d/res/res_ks.h" + +#include "weak_bss_936_to_1036.h" // IWYU pragma: keep +#include "weak_data_1811.h" // IWYU pragma: keep + +static int KS_ALL_COUNT = 0; +static int KUTTUKU_ALL_COUNT = 0; +static BOOL HEAVY_IN = FALSE; +static int GORON_COUNT = 0; /* 00000078-000002CC .text draw_SUB__FP8ks_class */ -void draw_SUB(ks_class*) { - /* Nonmatching */ +void draw_SUB(ks_class* i_this) { + J3DModel* pBodyModel = i_this->mpBodyMorf->getModel(); + J3DModel* pEyeModel = i_this->mpEyeMorf->getModel(); + + cXyz local_24 = dComIfGp_getCamera(0)->mLookat.mEye - i_this->current.pos; + + int iVar3 = cM_atan2s(local_24.x, local_24.z); + int iVar4 = (s16)-cM_atan2s(local_24.y, std::sqrtf(local_24.x * local_24.x + local_24.z * local_24.z)); + + f32 fVar1 = 0.0f; + if (i_this->m2D0) { + fVar1 = i_this->m304; + } + + mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y + fVar1, i_this->current.pos.z); + + mDoMtx_stack_c::YrotM(iVar3); + mDoMtx_stack_c::XrotM(iVar4); + mDoMtx_stack_c::ZrotM(i_this->shape_angle.z + i_this->m2FA); + + cXyz local_18; + local_18.setall(1.0f); + + i_this->m2FA += i_this->m2FE; + + mDoMtx_stack_c::scaleM(1.0f,1.0f,1.0f); + + mDoMtx_stack_c::ZrotM(i_this->shape_angle.z - i_this->m2FA); + + pBodyModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + mDoMtx_stack_c::transS(i_this->current.pos.x, i_this->current.pos.y + fVar1, i_this->current.pos.z); + + mDoMtx_stack_c::YrotM(i_this->shape_angle.y); + mDoMtx_stack_c::XrotM(i_this->shape_angle.x); + mDoMtx_stack_c::ZrotM(i_this->shape_angle.z); + + mDoMtx_stack_c::scaleM(local_18); + + pEyeModel->setBaseTRMtx(mDoMtx_stack_c::get()); + + enemy_fire(&i_this->mEnemyFire); } /* 000002CC-00000568 .text daKS_Draw__FP8ks_class */ -static BOOL daKS_Draw(ks_class*) { - /* Nonmatching */ +static BOOL daKS_Draw(ks_class* i_this) { + cXyz local_24 = i_this->current.pos - dComIfGp_getCamera(0)->mLookat.mEye; + + if (local_24.abs() < REG0_F(10) + 100.0f) { + return TRUE; + } + + J3DModel* pBodyModel = i_this->mpBodyMorf->getModel(); + J3DModel* pEyeModel = i_this->mpEyeMorf->getModel(); + + cXyz local_18 = i_this->current.pos; + local_18.y += 40.0f; + + dSnap_RegistFig(DSNAP_TYPE_KS, i_this, 1.0f, 1.0f, 1.0f); + + if (i_this->m2C8 == 6) { + return TRUE; + } + + if (i_this->m2D0 == 0 && i_this->m2CD == 0) { + draw_SUB(i_this); + } + + i_this->m2CD = 0; + + g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &i_this->current.pos, &i_this->tevStr); + g_env_light.setLightTevColorType(pBodyModel, &i_this->tevStr); + + i_this->mpBodyBrkAnm->entry(pBodyModel->getModelData()); + i_this->mpBodyBrkAnm->setFrame(i_this->m320); + + i_this->mpBodyMorf->updateDL(); + + i_this->mpBodyBrkAnm->remove(pBodyModel->getModelData()); + + g_env_light.setLightTevColorType(pEyeModel, &i_this->tevStr); + + i_this->mpEyeBtkAnm->entry(pEyeModel->getModelData()); + i_this->mpEyeBtkAnm->setFrame(i_this->m302); + + i_this->mpEyeBrkAnm->entry(pEyeModel->getModelData()); + i_this->mpEyeBrkAnm->setFrame(i_this->m320); + + i_this->mpEyeMorf->updateDL(); + + i_this->mpEyeBrkAnm->remove(pEyeModel->getModelData()); + i_this->mpEyeBtkAnm->remove(pEyeModel->getModelData()); + + return TRUE; } /* 00000568-0000074C .text naraku_check__FP8ks_class */ -void naraku_check(ks_class*) { - /* Nonmatching */ +void naraku_check(ks_class* i_this) { + cXyz local_24; + cXyz local_18; + + if (i_this->mAcch.GetGroundH() != C_BG_MIN_HEIGHT && dComIfG_Bgsp()->ChkPolySafe(i_this->mAcch.m_gnd) && dComIfG_Bgsp()->GetGroundCode(i_this->mAcch.m_gnd) == 4) { + i_this->m2D3++; + + if (i_this->current.pos.y < -500.0f || i_this->m2D3 > 0x32) { + i_this->speedF = 0.0; + i_this->speed.setall(0.0f); + i_this->gravity = 0.0f; + + fopAcM_delete(i_this); + + return; + } + } + + if (i_this->mAcch.ChkWaterIn() && i_this->current.pos.y < i_this->mAcch.m_wtr.GetHeight() + 20.0f) { + if (!i_this->m2CF) { + local_24 = i_this->current.pos; + + i_this->m2CF = 1; + + local_18.setall(0.5f); + + i_this->m52C.remove(); + dComIfGp_particle_setShipTail(dPa_name::ID_COMMON_0033, &i_this->current.pos, NULL, &local_18, 0xFF, &i_this->m52C); + i_this->m52C.setRate(0.0f); + } + + cLib_addCalc2(&i_this->current.pos.y, i_this->mAcch.m_wtr.GetHeight() + 20.0f, 1.0f, 10.0); + + i_this->gravity = 0.0f; + i_this->speed.y = 0.0f; + } + else if (i_this->m2CF && (i_this->mAcch.ChkGroundHit() || i_this->current.pos.y > i_this->mAcch.m_wtr.GetHeight() + 100.0f)) { + i_this->m2CF = 0; + + i_this->m52C.remove(); + } } /* 0000074C-00000788 .text tyaku_check__FP8ks_class */ -void tyaku_check(ks_class*) { - /* Nonmatching */ +BOOL tyaku_check(ks_class* i_this) { + if (i_this->mAcch.ChkGroundHit()) { + return TRUE; + } + + if (i_this->mAcch.ChkWaterIn()) { + i_this->speed.y = 0.0f; + i_this->gravity = 0.0f; + return TRUE; + } + + return FALSE; } /* 00000788-0000087C .text ks_kuttuki_check__FP8ks_class */ -void ks_kuttuki_check(ks_class*) { - /* Nonmatching */ +BOOL ks_kuttuki_check(ks_class* i_this) { + fopAc_ac_c* mAtHitAc; + if (i_this->mSph.ChkAtHit() && !i_this->mSph.ChkAtShieldHit() && (mAtHitAc = i_this->mSph.GetAtHitAc(), mAtHitAc) && mAtHitAc == dComIfGp_getLinkPlayer() && KUTTUKU_ALL_COUNT >= 0 && KUTTUKU_ALL_COUNT < 0x14 && GORON_COUNT == 0) { + i_this->mSph.OffTgSetBit(); + i_this->mSph.ClrCoSet(); + i_this->mSph.ClrTgHit(); + + if (i_this->m2CF) { + i_this->m2CF = 0; + + i_this->m52C.remove(); + } + + i_this->m2CB = 4; + i_this->m2CC = 0x28; + + return TRUE; + } + else { + return FALSE; + } } /* 0000087C-000008F4 .text gm_birth_delet__FP8ks_class */ -void gm_birth_delet(ks_class*) { - /* Nonmatching */ +void gm_birth_delet(ks_class* i_this) { + if (i_this->mGmID) { + gm_class* i_gm = (gm_class*)fopAcM_SearchByID(i_this->mGmID); + if (i_gm && fopAc_IsActor(i_gm) && fopAcM_GetName(i_gm) == PROC_GM && i_gm->m31E > 0) { + i_gm->m31E--; + } + } } /* 000008F4-00000A98 .text shock_damage_check__FP8ks_class */ -void shock_damage_check(ks_class*) { - /* Nonmatching */ +BOOL shock_damage_check(ks_class* i_this) { + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + + if (link->checkHammerQuake()) { + cXyz mSwordTopPos = link->getSwordTopPos(); + + mSwordTopPos.x -= i_this->current.pos.x; + mSwordTopPos.y -= i_this->current.pos.y; + mSwordTopPos.z -= i_this->current.pos.z; + + float distXZ = std::sqrtf(mSwordTopPos.x * mSwordTopPos.x + mSwordTopPos.z * mSwordTopPos.z); + + if (distXZ < 200.0f) { + if (std::sqrtf(mSwordTopPos.y * mSwordTopPos.y) < 40.0f) { + i_this->m2CB = 3; + i_this->m2CC = 0x20; + + return TRUE; + } + } + } + return FALSE; } /* 00000A98-00000DE8 .text body_atari_check__FP8ks_class */ -void body_atari_check(ks_class*) { - /* Nonmatching */ +BOOL body_atari_check(ks_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + cXyz mTgHitPos; + cXyz mParticleScale; + + i_this->mStts.Move(); + + if (i_this->mSph.ChkTgHit()) { + daPy_py_c* mpCurPlayerActor = (daPy_py_c*)daPy_getPlayerActorClass(); + + cCcD_Obj* mTgHitObj = i_this->mSph.GetTgHitObj(); + + mTgHitPos = *i_this->mSph.GetTgHitPosP(); + + if (!mTgHitObj) { + return FALSE; + } + + a_this->current.angle.y = fopAcM_searchPlayerAngleY(a_this) + 0x8000; + + i_this->m2CB = 3; + + switch (mTgHitObj->GetAtType()) { + case AT_TYPE_WIND: { + a_this->current.angle.y = cM_atan2s(a_this->current.pos.x - mTgHitPos.x, a_this->current.pos.z - mTgHitPos.z); + + i_this->m2CB = 2; + i_this->m2CC = 20; + + return FALSE; + } + case AT_TYPE_UNK8: { + i_this->m2CC = 0x20; + + a_this->health = 0; + + i_this->m2CC = 30; + + return FALSE; + } + case AT_TYPE_SWORD: { + if (i_this->m2CC != 43 || i_this->m2CE) { + dScnPly_ply_c::setPauseTimer(2); + a_this->stealItemBitNo = 1; + } + + mParticleScale.setall(REG8_F(0) + 0.8f); + dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, &mTgHitPos, &mpCurPlayerActor->shape_angle, &mParticleScale); + + break; + } + case AT_TYPE_SKULL_HAMMER: { + if (mpCurPlayerActor->getCutType() == 0x12 || mpCurPlayerActor->getCutType() == 0x13) { + a_this->speedF = 0.0f; + a_this->gravity = 0.0f; + a_this->speed.setall(0.0f); + + a_this->health = 0; + + dScnPly_ply_c::setPauseTimer(2); + + a_this->stealItemBitNo = 1; + + i_this->m2CC = 0x20; + + return TRUE; + } + + break; + } + case AT_TYPE_FIRE: + case AT_TYPE_FIRE_ARROW: { + i_this->mEnemyFire.mFireDuration = 100; + + break; + } + case AT_TYPE_ICE_ARROW: { + i_this->mEnemyIce.mFreezeDuration = 200; + + i_this->m2D0 = 1; + + i_this->mEnemyIce.mParticleScale = 0.2f; + i_this->mEnemyIce.mYOffset = 0.0f; + + enemy_fire_remove(&i_this->mEnemyFire); + + break; + } + case AT_TYPE_LIGHT_ARROW: { + i_this->mEnemyIce.mLightShrinkTimer = 1; + i_this->mEnemyIce.mParticleScale = 0.2f; + i_this->mEnemyIce.mYOffset = 0.0f; + + i_this->m2D0 = 1; + + break; + } + default: { + mParticleScale.setall(REG8_F(0) + 0.8f); + dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, &mTgHitPos, &mpCurPlayerActor->shape_angle, &mParticleScale); + } + } + + a_this->health = 0; + + i_this->m2CC = 30; + + return TRUE; + } + else { + return shock_damage_check(i_this) ? 1 : 0; + } } /* 00000DE8-00000EBC .text speed_keisan__FP8ks_classs */ -void speed_keisan(ks_class*, short) { - /* Nonmatching */ +void speed_keisan(ks_class* i_this, short i_speed) { + cMtx_YrotS(*calc_mtx, i_speed); + + s16 sVar1 = i_this->m30C * cM_ssin(i_this->m2F0[0]); + + cXyz local_14; + local_14.x = sVar1; + local_14.y = 0.0f; + local_14.z = 0.0f; + + cXyz local_8; + MtxPosition(&local_14, &local_8); + + i_this->current.pos.x += local_8.x; + i_this->current.pos.z += local_8.z; } /* 00000EBC-00001314 .text action_dousa_move__FP8ks_class */ -void action_dousa_move(ks_class*) { - /* Nonmatching */ +void action_dousa_move(ks_class* i_this) { + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + + switch (i_this->m2CC) { + case 0: + i_this->m30C = 0.0f; + + i_this->gravity = -3.0f; + + for (int i = 0; i < 5; i++) { + i_this->m2F0[i] = 0; + } + + i_this->m2CC++; + case 1: + cLib_addCalcAngleS2(&i_this->shape_angle.z, 0, 1, 0x1000); + + if (fopAcM_searchActorDistance(i_this, dComIfGp_getPlayer(0)) > 10000.0f) { + break; + } + + if (i_this->shape_angle.z > 0x100) { + return; + } + + i_this->shape_angle.z = 0; + + fopAcM_seStart(i_this, JA_SE_CM_KS_MOVE, 0); + + if (tyaku_check(i_this) != 0) { + i_this->gravity = -3.0f; + + i_this->speed.y = 1.0f; + i_this->speed.y += cM_rndF(5.0f); + } + + i_this->current.angle.y = i_this->m2FC + fopAcM_searchPlayerAngleY(i_this); + + i_this->m2CC++; + case 2: + if (i_this->mAcch.ChkGroundHit()) { + i_this->current.angle.y = i_this->m2FC + fopAcM_searchPlayerAngleY(i_this); + } + + if (KUTTUKU_ALL_COUNT >= 0 && KUTTUKU_ALL_COUNT < 0x14 && + (link->getSpeedF() > 12.0f || HEAVY_IN) && + fopAcM_searchActorDistance(i_this, dComIfGp_getPlayer(0)) < 500.0f && + !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e) && + tyaku_check(i_this)) { + + i_this->m2CB = 1; + i_this->m2CC = 10; + + return; + } + + if (link->getSpeedF() <= 12.0f || dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e)) { + cLib_addCalc0(&i_this->speedF, 0.3f, cM_rndF(1.0f) + 0.3f); + + cLib_addCalcAngleS2(&i_this->shape_angle.z, 0, 1, 0x1000); + + i_this->m2FC = 0; + break; + } + + if (i_this->m2FC == 0) { + i_this->m2FC = (fopAcM_GetID(i_this) & 0xf) * cM_rndFX(512.0f); + } + + i_this->shape_angle.z = cM_rndFX(2000.0f); + + speed_keisan(i_this, i_this->current.angle.y); + + i_this->speedF = 12.0f; + + i_this->m2F0[0] += 1000; + + i_this->m30C = 10.0f; + + if (tyaku_check(i_this)) { + fopAcM_seStart(i_this, JA_SE_CM_KS_MOVE, 0); + + i_this->gravity = -3.0f; + + i_this->speed.y = 1.0f; + i_this->speed.y += cM_rndF(5.0f); + } + break; + case 3: + if (fopAcM_searchActorDistance(i_this, dComIfGp_getPlayer(0)) < 500.0f) { + i_this->current.angle.y = fopAcM_searchPlayerAngleY(i_this); + } + } + + if (i_this->m2CC == 2 || i_this->m2CC == 3) { + cLib_addCalcAngleS2(&i_this->shape_angle.y, i_this->current.angle.y, 1, 0x1000); + } + + if (body_atari_check(i_this) != 0) { + fopAcM_seStart(i_this, JA_SE_LK_LAST_HIT, 0); + } } /* 00001314-00001630 .text action_kougeki_move__FP8ks_class */ -void action_kougeki_move(ks_class*) { - /* Nonmatching */ +void action_kougeki_move(ks_class* i_this) { + cXyz head_top_pos = daPy_getPlayerActorClass()->getHeadTopPos(); + + i_this->m31C = 20.0f; + + if (head_top_pos.y > i_this->current.pos.y) { + i_this->m31C = 60.0f; + } + + switch (i_this->m2CC) { + case 0xa: { + i_this->mSph.OffCoSetBit(); + + i_this->speedF = 26.0f; + i_this->gravity = -4.0f; + i_this->speed.y = 28.0f; + + for (int i = 0; i < 5; i++) { + i_this->m2F0[i] = 0; + } + + i_this->m30C = 0.0f; + + i_this->current.angle.y = fopAcM_searchPlayerAngleY(i_this); + + mDoAud_seStart(JA_SE_CM_KS_ATTACK, &i_this->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); + + fopAcM_monsSeStart(i_this, JA_SE_CV_KS_ATTACK, 0); + + i_this->m2CC++; + + break; + } + case 0xb: { + if (i_this->speedF > 0.0f && i_this->m2F0[1] == 0 && i_this->mSph.ChkAtShieldHit()) { + i_this->gravity = -4.0f; + i_this->speed.y = 25.0f; + i_this->speedF *= -0.5f; + + i_this->m2F0[1] = 1; + } + + if (!i_this->m2F0[1] && ks_kuttuki_check(i_this)) { + return; + } + + if (!i_this->mAcch.ChkGroundHit() && !i_this->mAcch.ChkWaterIn()) { + break; + } + + i_this->mSph.OnCoSetBit(); + + i_this->m2E8[2] = (s16)(cM_rndF(20.0f) + 20.0f); + + i_this->m2CC++; + } + case 0xc: + ks_kuttuki_check(i_this); + + if (tyaku_check(i_this)) { + i_this->gravity = -4.0f; + i_this->speed.y = 1.0f; + i_this->speed.y += cM_rndF(5.0f); + i_this->speedF = 16.0f; + } + + if (i_this->m2E8[2] == 0) { + i_this->speedF = 0.0f; + i_this->m31C = 20.0f; + i_this->m2CB = 0; + i_this->m2CC = 0; + } + } + + cLib_addCalcAngleS2(&i_this->shape_angle.y, i_this->current.angle.y, 1, 0x1000); + + if (body_atari_check(i_this)) { + fopAcM_seStart(i_this, JA_SE_LK_LAST_HIT, 0); + } } /* 00001630-00001874 .text action_kaze_move__FP8ks_class */ -void action_kaze_move(ks_class*) { - /* Nonmatching */ +void action_kaze_move(ks_class* i_this) { + switch (i_this->m2CC) { + case 0x14: { + for (int i = 0; i < 5; i++) { + i_this->m2F0[i] = 0; + } + + i_this->m2E8[1] = 0x32; + + fopAcM_monsSeStart(i_this, JA_SE_CV_KS_BLOW, 0); + + i_this->m310 = i_this->current.pos.y; + + i_this->m30C = 0.0f; + + i_this->speedF = cM_rndF(15.0f) + 10.0f; + i_this->m314 = cM_rndF(15.0f) + 10.0f; + + i_this->m308 = 0.0f; + + i_this->m2CC++; + } + case 0x15: { + cLib_addCalc2(&i_this->speed.y, i_this->m314, 0.8f, i_this->m308); + + cLib_addCalc2(&i_this->m308, 5.0f, 1.0f, 0.5f); + + if (i_this->m310 + 200.0f < i_this->current.pos.y || i_this->m2E8[1] == 0) { + i_this->m2CC++; + } + + break; + } + case 0x16: { + cLib_addCalc2(&i_this->gravity, -1.0f, 0.3f, 0.5f); + + if (i_this->speed.y < -2.0f) { + i_this->speed.y = -2.0f; + } + + cLib_addCalc0(&i_this->speedF, 0.5f, 2.0f); + + speed_keisan(i_this, i_this->shape_angle.y); + + i_this->m2F0[0] += 3000; + + i_this->m30C = 2.0f; + + if (tyaku_check(i_this)) { + i_this->m2CB = 0; + i_this->m2CC = 0; + return; + } + } + } + + i_this->shape_angle.z += 0x500; + + if (body_atari_check(i_this)) { + fopAcM_seStart(i_this, JA_SE_LK_LAST_HIT, 0); + } } +static u8 item_tbl[4] = {0xA, 0xB, 0xC, 0xA}; + /* 00001874-00001A14 .text dead_eff_set__FP8ks_classP4cXyz */ -void dead_eff_set(ks_class*, cXyz*) { - /* Nonmatching */ +void dead_eff_set(ks_class* i_this, cXyz* i_pos) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + u8 drop_type; + if (!strcmp(dComIfGp_getStartStageName(), "GanonK") && (i_this->stealItemBitNo != 0)) { + if (dComIfGs_getLife() <= 8) { + drop_type = daDisItem_HEART_e; + } + else if (cM_rndF(1.0f) < 0.5f) { + if (dComIfGs_getArrowNum() == 0) { + drop_type = daDisItem_ARROW_e; + } + else if (dComIfGs_getMagic() < dComIfGs_getMaxMagic() / 2) { + drop_type = daDisItem_MAGIC_e; + } + else if (dComIfGs_getArrowNum() < 10) { + drop_type = daDisItem_ARROW_e; + } + else { + drop_type = item_tbl[(int)cM_rndF(2.99f)]; + } + } + else { + drop_type = daDisItem_UNK13_e; // Might just be a void drop (ie. getting nothing) + } + + fopAcM_createDisappear(i_this, i_pos, 3, drop_type, 0xff); + } + else { + fopAcM_seStart(i_this, JA_SE_CM_KS_DIE, 0); + + dComIfGp_particle_setSimple(dPa_name::ID_SCENE_8068, i_pos); + + gm_birth_delet(i_this); + } + + fopAcM_delete(a_this); } /* 00001A14-00001C5C .text action_dead_move__FP8ks_class */ -void action_dead_move(ks_class*) { - /* Nonmatching */ +void action_dead_move(ks_class* i_this) { + cXyz local_28; + + switch (i_this->m2CC) { + case 0x1e: { + for (int i = 0; i < 5; i++) { + i_this->m2F0[i] = 0; + } + + i_this->mSph.OffTgSetBit(); + i_this->mSph.ClrCoSet(); + i_this->mSph.ClrTgHit(); + + fopAcM_monsSeStart(i_this, JA_SE_CV_KS_DAMAGE, 0); + + i_this->speedF = cM_rndF(5.0f) + 15.0f; + i_this->gravity = -3.0f; + i_this->speed.y = cM_rndF(5.0f) + 20.0f; + + i_this->m2CC++; + + i_this->m2F0[1] = (s16)cM_rndFX(4096.0f); + + i_this->mSph.OffAtSPrmBit(cCcD_AtSPrm_Set_e); + i_this->mSph.OffAtSPrmBit(cCcD_AtSPrm_Set_e); + } + case 0x1f: { + i_this->shape_angle.z += i_this->m2F0[1]; + + if (tyaku_check(i_this)) { + i_this->gravity = -3.0f; + i_this->speedF *= 0.5f; + + switch (i_this->m2F0[0]) { + case 0: + i_this->speed.y = 13.0f; + i_this->m2F0[0]++; + break; + case 1: + i_this->speed.y = 7.0f; + i_this->m2F0[0]++; + break; + case 2: + local_28 = i_this->current.pos; + local_28.y += 20.0f; + dead_eff_set(i_this, &local_28); + } + } + break; + } + case 0x20: { + local_28 = i_this->current.pos; + local_28.y += 45.0f; + dead_eff_set(i_this, &local_28); + } + } } +u32 pl_harituki_joint_dt[20] = { + 0x20, + 0x21, + 0x25, + 0x26, + 0x02, + 0x03, + 0x04, + 0x1E, + 0x29, + 0x1F, + 0x24, + 0x08, + 0x06, + 0x07, + 0x05, + 0x0C, + 0x0A, + 0x0B, + 0x09, + 0x0e, +}; + /* 00001C5C-000026DC .text action_omoi__FP8ks_class */ -void action_omoi(ks_class*) { - /* Nonmatching */ +void action_omoi(ks_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + cXyz local_1c; + cXyz local_10; + + daPy_py_c* mpCurPlayerActor = (daPy_py_c*)daPy_getPlayerActorClass(); + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + + if (i_this->m2CE == 1 && HEAVY_IN == TRUE) { + link->onHeavyState(); + } + + switch (i_this->m2CC) { + case 0x28: { + i_this->m52C.remove(); + + a_this->speedF = 0.0f; + a_this->gravity = 0.0f; + a_this->speed.setall(0.0f); + + if (GORON_COUNT != 0 || KUTTUKU_ALL_COUNT >= 0x14) { + i_this->m528 = 0; + + fopAcM_OffStatus(a_this, fopAcStts_UNK4000_e); + + i_this->m2CC = 0x2a; + + break; + } + + for (int i = 0; i < 5; i++) { + i_this->m2F0[i] = 0; + } + + if (KUTTUKU_ALL_COUNT >= 0x14) { + i_this->m300 = 0x13; + } + + if (KUTTUKU_ALL_COUNT < 0) { + i_this->m300 = 0; + } + else { + i_this->m300 = KUTTUKU_ALL_COUNT; + } + + i_this->m528 = link->getModelJointMtx(pl_harituki_joint_dt[i_this->m300]); + + if (KUTTUKU_ALL_COUNT == 0) { + GORON_COUNT = 0; + + i_this->m2CE = 1; + } + + KUTTUKU_ALL_COUNT++; + + if (HEAVY_IN == FALSE && KUTTUKU_ALL_COUNT >= 5) { + link->onHeavyState(); + HEAVY_IN = TRUE; + } + + i_this->m2D2 = 0; + + i_this->m2E8[1] = 0; + i_this->m2E8[2] = 0; + + fopAcM_OnStatus(a_this, fopAcStts_UNK4000_e); + + fopAcM_setStageLayer(a_this); + + i_this->m2CC++; + } + case 0x29: { + fopAcM_SetRoomNo(a_this, fopAcM_GetRoomNo(mpCurPlayerActor)); + + if (!(fopAcM_GetID(a_this) & 1)) { + a_this->shape_angle.y += i_this->m2FE * 0.25f; + } + else { + a_this->shape_angle.y -= i_this->m2FE * 0.25f; + } + + if (i_this->m528) { + local_10.x = i_this->m528[0][3]; + local_10.y = i_this->m528[1][3]; + local_10.z = i_this->m528[2][3]; + } + else { + local_10 = mpCurPlayerActor->current.pos; + } + + if (!(local_10.x || local_10.y || local_10.z)) { + local_10 = mpCurPlayerActor->current.pos; + } + + local_1c.x = std::fabsf(mpCurPlayerActor->speed.x * 10.0f); + if (local_1c.x < REG12_F(16) + 10.0f) { + local_1c.x = REG12_F(16) + 10.0f; + } + + local_1c.y = std::fabsf(mpCurPlayerActor->speed.y * 10.0f); + if (local_1c.y < REG12_F(16) + 10.0f) { + local_1c.y = REG12_F(16) + 10.0f; + } + + local_1c.z = std::fabsf(mpCurPlayerActor->speed.z * 10.0f); + if (local_1c.z < REG12_F(16) + 10.0f) { + local_1c.z = REG12_F(16) + 10.0f; + } + + if (std::sqrtf(mpCurPlayerActor->speed.x * mpCurPlayerActor->speed.x + mpCurPlayerActor->speed.y * mpCurPlayerActor->speed.y + mpCurPlayerActor->speed.z * mpCurPlayerActor->speed.z) < REG12_F(17) + 8.0f) { + local_1c.setall(REG12_F(18) + 8.0f); + + f32 x = a_this->current.pos.x - local_10.x; + f32 y = a_this->current.pos.y - local_10.y; + f32 z = a_this->current.pos.z - local_10.z; + + if (std::sqrtf(x * x + y * y + z * z) < 2.0f && i_this->m2E8[1] == 0) { + i_this->m2E8[1] = cM_rndF(10.0f) + 10.0f; + + switch (i_this->m2D2) { + case 0: { + if (i_this->m300 < 0x13) { + i_this->m300++; + } + else { + i_this->m2D2 = 1; + i_this->m300--; + } + break; + } + case 1: { + if (i_this->m300 > 0) { + i_this->m300--; + } + else { + i_this->m2D2 = 0; + i_this->m300++; + } + } + } + + if (i_this->m300 >= 0x14) { + i_this->m300 = 0x13; + } + else if (i_this->m300 < 0) { + i_this->m300 = 1; + } + + i_this->m528 = link->getModelJointMtx(pl_harituki_joint_dt[i_this->m300]); + } + } + + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_UNK800000_e) || dComIfGp_checkPlayerStatus1(0, daPyStts1_UNK10_e)) { + local_1c.setall(100.0f); + } + + cLib_addCalc2(&a_this->current.pos.x, local_10.x, 1.0f, local_1c.x); + cLib_addCalc2(&a_this->current.pos.y, local_10.y, 1.0f, local_1c.y); + cLib_addCalc2(&a_this->current.pos.z, local_10.z, 1.0f, local_1c.z); + + if (link->checkFrontRollCrash() || link->getCutType() == 8 || link->getCutType() == 9 || dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e)) { + i_this->mSph.OnCoSetBit(); + i_this->mSph.OnTgSetBit(); + + if (i_this->m2CE) { + link->offHeavyState(); + HEAVY_IN = FALSE; + + KUTTUKU_ALL_COUNT = 0; + GORON_COUNT = 0; + + i_this->m2F0[0] = 0; + i_this->m2F0[1] = 0; + } + + i_this->m2CC = 0x2a; + + return; + } + + if (!link->checkFrontRoll()) { + if (i_this->m2CE == 0) { + return; + } + + if (i_this->m2F0[1]) { + i_this->m2F0[1] = 0; + i_this->m2E8[2] = 0x32; + } + + if (i_this->m2E8[2] != 1) { + return; + } + + if (i_this->m2F0[0] <= 0) { + return; + } + + i_this->m2F0[0] = 0; + + return; + } + + if (i_this->m2CE) { + if (i_this->m2F0[1]) { + return; + } + + switch (i_this->m2F0[0]) { + case 0: + GORON_COUNT = KUTTUKU_ALL_COUNT * 0.25f; + break; + case 1: + GORON_COUNT = KUTTUKU_ALL_COUNT * 0.5f; + break; + case 2: + GORON_COUNT = KUTTUKU_ALL_COUNT; + } + + if (GORON_COUNT == 0) { + GORON_COUNT = 1; + } + i_this->m2F0[0]++; + i_this->m2F0[1] = 1; + + if (i_this->m2F0[0] < 3 && KUTTUKU_ALL_COUNT >= 3) { + return; + } + + i_this->m2CE = 0; + + link->offHeavyState(); + HEAVY_IN = FALSE; + + i_this->m2F0[0] = 0; + i_this->m2F0[1] = 0; + + if (KUTTUKU_ALL_COUNT > 0) { + KUTTUKU_ALL_COUNT--; + } + + GORON_COUNT = KUTTUKU_ALL_COUNT; + + i_this->m2CC = 0x2a; + + return; + } + + if (KUTTUKU_ALL_COUNT != 0 && GORON_COUNT > 0) { + GORON_COUNT--; + KUTTUKU_ALL_COUNT--; + + if (HEAVY_IN && KUTTUKU_ALL_COUNT < 5) { + HEAVY_IN = FALSE; + link->offHeavyState(); + } + + i_this->m2CC = 0x2a; + } + + break; + } + case 0x2a: { + if (i_this->m528) { + fopAcM_OffStatus(a_this, fopAcStts_UNK4000_e); + + fopAcM_setRoomLayer(a_this, fopAcM_GetRoomNo(a_this)); + + i_this->m528 = 0; + } + + i_this->current.angle.y = fopAcM_searchPlayerAngleY(a_this) + 0x8000; + i_this->current.angle.y += (s16)cM_rndFX(16384.0f); + + i_this->speedF = 15.0f; + i_this->gravity = -3.0f; + i_this->speed.y = 26.0f; + + i_this->m2CC++; + } + case 0x2b: { + if (i_this->mAcch.ChkGroundHit() || i_this->mAcch.ChkWaterIn()) { + i_this->m2E8[2] = (s16)(cM_rndF(40.0f) + 40.0f); + + i_this->mSph.OnCoSetBit(); + i_this->mSph.OnTgSetBit(); + + i_this->m2CB = 1; + i_this->m2CC = 0xc; + } + } + } + + if (i_this->m2CC == 0x2b && body_atari_check(i_this) && i_this->m2CE) { + fopAcM_seStart(a_this, JA_SE_LK_LAST_HIT, 0); + i_this->m2CE = 0; + } } /* 000026DC-000027A0 .text tsubo_search__FPvPv */ -void tsubo_search(void*, void*) { - /* Nonmatching */ +BOOL tsubo_search(void* param_1, void* param_2) { + ks_class* i_ks1 = (ks_class*)param_1; + ks_class* i_ks2 = (ks_class*)param_2; + + if (fopAc_IsActor(i_ks1) && (fopAcM_GetName(i_ks1) == 0x1cb) && + std::fabsf(i_ks1->current.pos.x - i_ks2->current.pos.x) < 20.0f && + std::fabsf(i_ks1->current.pos.y - i_ks2->current.pos.y) < 20.0f && + std::fabsf(i_ks1->current.pos.z - i_ks2->current.pos.z) < 20.0f) { + i_ks2->mKsID = fopAcM_GetID(i_ks1); + } + return FALSE; } /* 000027A0-00002A40 .text action_tubo_search__FP8ks_class */ -void action_tubo_search(ks_class*) { - /* Nonmatching */ +void action_tubo_search(ks_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; + switch (i_this->m2CC) { + case 0x32: { + i_this->mKsID = fpcM_ERROR_PROCESS_ID_e; + + fpcEx_Search((fpcLyIt_JudgeFunc)tsubo_search, a_this); + + if (i_this->mKsID == fpcM_ERROR_PROCESS_ID_e) { + fopAcM_delete(a_this); + } + else { + i_this->m2CC++; + } + + break; + } + case 0x33: { + fopAc_ac_c* mpCurrActor = (fopAc_ac_c*)fopAcM_SearchByID(i_this->mKsID); + + if (mpCurrActor) { + a_this->current.pos = mpCurrActor->current.pos; + + if (!i_this->m318) { + return; + } + + if (fopAcM_searchActorDistance(a_this, daPy_getPlayerActorClass()) > i_this->m318) { + return; + } + } + + i_this->m31C = 100.0f; + + i_this->mSph.OffAtNoTgHitInfSet(); + + i_this->mSph.OnAtVsBitSet(cCcD_AtSPrm_VsOther_e); + + i_this->mSph.OffAtVsBitSet(cCcD_AtSPrm_VsPlayer_e); + i_this->mSph.OffAtVsBitSet(cCcD_AtSPrm_NoTgHitInfSet_e); + + i_this->mSph.OnAtSPrmBit(cCcD_AtSPrm_Set_e); + + i_this->mSph.OnAtHitBit(); + + i_this->mSph.SetC(i_this->current.pos); + i_this->mSph.SetR(i_this->m31C); + + dComIfG_Ccsp()->Set(&i_this->mSph); + + i_this->m2CC++; + + break; + } + case 0x34: { + i_this->mSph.SetC(a_this->current.pos); + i_this->mSph.SetR(i_this->m31C); + + dComIfG_Ccsp()->Set(&i_this->mSph); + + if (i_this->m2C9 > 0x15 || i_this->m2C9 == 0) { + i_this->m2C9 = 1; + } + + for (int i = 0; i < i_this->m2C9; i++) { + cXyz local_24 = a_this->current.pos; + local_24.y += cM_rndF(40.0f); + + if (i != 0) { + local_24.x += cM_rndFX(40.0f); + local_24.z += cM_rndFX(40.0f); + } + + a_this->shape_angle = a_this->current.angle; + a_this->shape_angle.x = 0; + + fopAcM_create(PROC_KS, 3, &local_24, fopAcM_GetRoomNo(a_this), &a_this->shape_angle, &a_this->scale, 0); + } + + fopAcM_delete(a_this); + } + } } /* 00002A40-00002BC4 .text action_kb_birth_check__FP8ks_class */ -void action_kb_birth_check(ks_class*) { - /* Nonmatching */ +void action_kb_birth_check(ks_class* i_this) { + switch (i_this->m2CC) { + case 0x3c: { + i_this->current.pos.y += REG8_F(13) + 30.0f; + i_this->current.angle.y = cM_rndFX(32767.0f); + + i_this->speedF = REG8_F(8) + 4.0f + cM_rndF(REG8_F(9) + 4.0f); + i_this->speed.y = REG8_F(10) + 20.0f + cM_rndF(REG8_F(11) + 5.0f); + i_this->gravity = -(REG8_F(12) + 2.0f); + + i_this->m2CC++; + } + case 0x3d: { + if (i_this->speed.y <= 0.0f && (i_this->mAcch.ChkGroundHit() || i_this->mAcch.GetGroundH() + (REG8_F(19) + 10.0f) > i_this->current.pos.y )) { + fopAcM_OffStatus(i_this, fopAcStts_UNK4000_e); + + i_this->speedF = 0.0f; + i_this->gravity = 0.0f; + i_this->speed.setall(0.0f); + + i_this->m2CB = 0; + i_this->m2CC = 0; + } + } + } } /* 00002BC4-00002C54 .text BG_check__FP8ks_class */ -void BG_check(ks_class*) { - /* Nonmatching */ +void BG_check(ks_class* i_this) { + i_this->mAcchCir.SetWall(30.0f, 30.0f); + + i_this->current.pos.y -= i_this->m304; + i_this->old.pos.y -= i_this->m304; + + i_this->mAcch.CrrPos(*dComIfG_Bgsp()); + + i_this->current.pos.y += i_this->m304; + i_this->old.pos.y += i_this->m304; } /* 00002C54-00003054 .text daKS_Execute__FP8ks_class */ -static BOOL daKS_Execute(ks_class*) { - /* Nonmatching */ +static BOOL daKS_Execute(ks_class* i_this) { + if (enemy_ice(&i_this->mEnemyIce)) { + i_this->mpBodyMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + i_this->mpEyeMorf->getModel()->setBaseTRMtx(mDoMtx_stack_c::get()); + if (i_this->m2D0 && (i_this->m320++, i_this->m320 > 7.0f)) { + i_this->m320 = 7.0f; + } + return TRUE; + } + + for (int i = 0; i < 4; i++) { + if (i_this->m2E8[i]) { + i_this->m2E8[i]--; + } + } + + if (i_this->mGmID != 0 && i_this->m2CB != 3) { + fopAc_ac_c* mpGmActor = fopAcM_SearchByID(i_this->mGmID); + + bool bVar5 = false; + + if (mpGmActor && ((fopAcM_GetParam(mpGmActor) & 0xff0000) == 0xff0000 || (fopAcM_GetParam(mpGmActor) & 0xff0000) == 0)) { + if (fopAcM_GetName(mpGmActor) == PROC_GM) { + if (mpGmActor->health <= 0) { + bVar5 = true; + } + } + else { + bVar5 = true; + } + + if (bVar5) { + if (i_this->m2CB != 4) { + i_this->m2CB = 3; + i_this->m2CC = 30; + } + else { + if (i_this->m2CC != 43) { + daPy_py_c* link = (daPy_py_c*)daPy_getPlayerLinkActorClass(); + link->offHeavyState(); + + HEAVY_IN = FALSE; + GORON_COUNT = 0; + + i_this->m2F0[0] = 0; + i_this->m2F0[1] = 0; + + i_this->m2CC = 0x2a; + } + } + } + } + } + + switch(i_this->m2CB) { + case 0: + action_dousa_move(i_this); + ks_kuttuki_check(i_this); + break; + case 1: + action_kougeki_move(i_this); + break; + case 2: + action_kaze_move(i_this); + break; + case 3: + action_dead_move(i_this); + break; + case 4: + action_omoi(i_this); + break; + case 10: + action_tubo_search(i_this); + break; + case 20: + action_kb_birth_check(i_this); + break; + } + + if (i_this->m2C8 == 6) { + return TRUE; + } + + if (i_this->m302 && (i_this->m302++, i_this->m302 > 7)) { + i_this->m302 = 0; + } + + if (i_this->m2E8[0] == 0) { + i_this->m2E8[0] = cM_rndFX(25.0f) + 50.0f; + + i_this->m302 = 1; + } + + cMtx_YrotS(*calc_mtx, i_this->current.angle.y); + + cXyz local_18; + local_18.x = 0.0f; + local_18.y = 0.0f; + local_18.z = i_this->speedF; + + cXyz local_c; + MtxPosition(&local_18, &local_c); + + i_this->speed.x = local_c.x; + i_this->speed.z = local_c.z; + + if (i_this->m2CC != 41 && !i_this->mAcch.ChkGroundHit() && !i_this->mAcch.ChkWaterIn()) { + i_this->speed.y += i_this->gravity; + + if (i_this->speed.y < -20.0f) { + i_this->speed.y = -20.0f; + } + } + + i_this->eyePos = i_this->current.pos; + + i_this->attention_info.position = i_this->eyePos; + + i_this->mSph.SetC(i_this->current.pos); + i_this->mSph.SetR(i_this->m31C); + + dComIfG_Ccsp()->Set(&i_this->mSph); + + if (i_this->mSph.ChkCoSet() && (i_this->m2CB == 0 || i_this->m2CB == 2)) { + fopAcM_posMove(i_this, i_this->mStts.GetCCMoveP()); + } + else { + fopAcM_posMove(i_this, NULL); + } + + if (i_this->m2CC != 41) { + BG_check(i_this); + naraku_check(i_this); + } + + draw_SUB(i_this); + + i_this->m2CD = 1; + + return TRUE; } /* 00003054-0000305C .text daKS_IsDelete__FP8ks_class */ -static BOOL daKS_IsDelete(ks_class*) { - /* Nonmatching */ +static BOOL daKS_IsDelete(ks_class* i_this) { + return TRUE; } /* 0000305C-000030F4 .text daKS_Delete__FP8ks_class */ -static BOOL daKS_Delete(ks_class*) { - /* Nonmatching */ +static BOOL daKS_Delete(ks_class* i_this) { + dComIfG_resDelete(&i_this->mPhs, "KS"); + + i_this->m52C.remove(); + + enemy_fire_remove(&i_this->mEnemyFire); + + KS_ALL_COUNT--; + if (KS_ALL_COUNT == 0) { + daPy_lk_c* link = daPy_getPlayerLinkActorClass(); + link->offHeavyState(); + + KUTTUKU_ALL_COUNT = 0; + HEAVY_IN = FALSE; + GORON_COUNT = 0; + } + + return TRUE; } /* 000030F4-000034B0 .text useHeapInit__FP10fopAc_ac_c */ -static BOOL useHeapInit(fopAc_ac_c*) { - /* Nonmatching */ +static BOOL useHeapInit(fopAc_ac_c* i_act) { + J3DModel* mpBodyModel; + J3DModel* mpEyeModel; + + ks_class* i_this = (ks_class*)i_act; + + i_this->mpBodyMorf = new mDoExt_McaMorf((J3DModelData *)dComIfG_getObjectRes("KS", KS_BDL_KS_BODY), NULL, NULL, NULL, + J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, 0, NULL, 0, 0x11020203); + if (i_this->mpBodyMorf == NULL || i_this->mpBodyMorf->getModel() == NULL) + return FALSE; + mpBodyModel = i_this->mpBodyMorf->getModel(); + + i_this->mpBodyBrkAnm = new mDoExt_brkAnm(); + if (i_this->mpBodyBrkAnm == NULL) + return FALSE; + + if (i_this->mpBodyBrkAnm->init(mpBodyModel->getModelData(), (J3DAnmTevRegKey *)dComIfG_getObjectRes("KS", KS_BRK_KS_BODY), TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, FALSE, 0) == 0) + return FALSE; + + + i_this->mpEyeMorf = new mDoExt_McaMorf((J3DModelData *)dComIfG_getObjectRes("KS", KS_BDL_KS_EYE), NULL, NULL, + (J3DAnmTransformKey *)dComIfG_getObjectRes("KS", KS_BCK_MABATAKI), + J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, 1, NULL, 0, 0x11020203); + + if (i_this->mpEyeMorf == NULL || i_this->mpEyeMorf->getModel() == NULL) + return FALSE; + mpEyeModel = i_this->mpEyeMorf->getModel(); + + i_this->mpEyeBtkAnm = new mDoExt_btkAnm(); + if (i_this->mpEyeBtkAnm == NULL) + return FALSE; + + if (i_this->mpEyeBtkAnm->init(mpEyeModel->getModelData(), (J3DAnmTextureSRTKey *)dComIfG_getObjectRes("KS", KS_BTK_KS_EYE), TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, FALSE, 0) == 0) + return FALSE; + + i_this->mpEyeBrkAnm = new mDoExt_brkAnm(); + if (i_this->mpEyeBrkAnm == NULL) + return FALSE; + + if (i_this->mpEyeBrkAnm->init(mpEyeModel->getModelData(), (J3DAnmTevRegKey *)dComIfG_getObjectRes("KS", KS_BRK_KS_EYE), TRUE, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, FALSE, 0) == 0) { + return FALSE; + } + return TRUE; } +static dCcD_SrcSph body_co_sph_src = { + // dCcD_SrcGObjInf + { + /* Flags */ 0, + /* SrcObjAt Type */ AT_TYPE_STALFOS_MACE, + /* SrcObjAt Atp */ 0, + /* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_VsPlayer_e | cCcD_AtSPrm_NoTgHitInfSet_e, + /* SrcObjTg Type */ ~(AT_TYPE_WATER | AT_TYPE_UNK20000 | AT_TYPE_UNK400000 | AT_TYPE_LIGHT), + /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e, + /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsPlayer_e | cCcD_CoSPrm_VsOther_e, + /* SrcGObjAt Se */ dCcG_SE_UNK6, + /* SrcGObjAt HitMark */ 0, + /* SrcGObjAt Spl */ 0, + /* SrcGObjAt Mtrl */ 0, + /* SrcGObjAt SPrm */ 0, + /* SrcGObjTg Se */ 0, + /* SrcGObjTg HitMark */ 0, + /* SrcGObjTg Spl */ 0, + /* SrcGObjTg Mtrl */ 0, + /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoConHit_e | dCcG_TgSPrm_NoHitMark_e, + /* SrcGObjCo SPrm */ 0, + }, + // cM3dGSphS + { + /* Center */ 0.0f, 0.0f, 0.0f, + /* Radius */ 15.0f, + }, +}; + +static s8 fire_j[10] = { + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + +}; + +static f32 fire_sc[10] = { + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, + 1.0f, +}; + /* 000034F8-00003A94 .text daKS_Create__FP10fopAc_ac_c */ -static cPhs_State daKS_Create(fopAc_ac_c*) { - /* Nonmatching */ +static cPhs_State daKS_Create(fopAc_ac_c* i_this) { + fopAcM_SetupActor(i_this, ks_class); + ks_class* a_this = (ks_class*)i_this; + + cPhs_State res; + u32 parameters; + res = dComIfG_resLoad(&a_this->mPhs, "KS"); + if (res == cPhs_COMPLEATE_e) { + if (!fopAcM_entrySolidHeap(i_this, useHeapInit, 0x1060)) { + return cPhs_ERROR_e; + } + + a_this->m2C8 = fopAcM_GetParam(i_this); + a_this->m2C9 = fopAcM_GetParam(i_this) >> 8; + a_this->m2CA = fopAcM_GetParam(i_this) >> 0x10; + + if (a_this->m2C8 == 0xff) { + a_this->m2C8 = 0; + } + + if (a_this->m2C8 <= 1 && (a_this->m2C9 > 0x15 || a_this->m2C9 == 0)) { + a_this->m2C9 = 1; + } + + if (a_this->m2CA == 0xff) { + a_this->m2CA = 0; + } + + a_this->m318 = a_this->m2CA * 10.0f; + + if (a_this->m2C8 <= 1) { + parameters = 2; + if (a_this->m2C8 == 0) { + parameters = 3; + } + + for (int i = 0; i < a_this->m2C9; i++) { + cXyz local_4c = i_this->current.pos; + if (i != 0) { + if (i_this->current.angle.x != 0) { + local_4c.y += cM_rndFX(120.0f); + f32 ground_y = a_this->mAcch.GetGroundH(); + if (local_4c.y < ground_y) { + local_4c.y = ground_y + cM_rndF(120.0f); + } + } + else { + local_4c.x += cM_rndFX(40.0f); + local_4c.z += cM_rndFX(40.0f); + } + } + i_this->shape_angle = i_this->current.angle; + i_this->shape_angle.x = 0; + + fopAcM_create(PROC_KS, parameters, &local_4c, fopAcM_GetRoomNo(i_this), &i_this->shape_angle, &i_this->scale, 0); + } + + return cPhs_ERROR_e; + } + + if (KS_ALL_COUNT == 0) { + KUTTUKU_ALL_COUNT = 0; + HEAVY_IN = FALSE; + GORON_COUNT = 0; + } + + KS_ALL_COUNT++; + + fopAcM_SetMtx(i_this, a_this->mpBodyMorf->getModel()->getBaseTRMtx()); + + fopAcM_setCullSizeBox(i_this, -20.0f, -20.0f, -20.0f, 20.0f, 20.0f, 20.0f); + + i_this->attention_info.flags = 0; + + a_this->mAcch.Set(&i_this->current.pos, &i_this->old.pos, i_this, 1, &a_this->mAcchCir, &i_this->speed, NULL, NULL); + + a_this->mStts.Init(2, 1, i_this); + + i_this->max_health = 1; + i_this->health = 1; + + a_this->m304 = 25.0f; + + a_this->m2E8[0] = cM_rndFX(25.0f) + 50.0f; + + a_this->m2DC.setall(1.0f); + + a_this->m2FE = (fopAcM_GetID(i_this) & 7) * 0x32 + 1000; + + a_this->mSph.Set(body_co_sph_src); + a_this->mSph.SetStts(&a_this->mStts); + + a_this->mEnemyIce.mpActor = i_this; + a_this->mEnemyIce.mWallRadius = 20.0f; + a_this->mEnemyIce.mCylHeight = 20.0f; + a_this->mEnemyIce.m1B0 = 1; + + a_this->mEnemyFire.mpMcaMorf = a_this->mpBodyMorf; + a_this->mEnemyFire.mpActor = i_this; + + for (int i = 0; i < 10; i++) { + a_this->mEnemyFire.mFlameJntIdxs[i] = fire_j[i]; + a_this->mEnemyFire.mParticleScale[i] = fire_sc[i]; + } + + i_this->itemTableIdx = dComIfGp_CharTbl()->GetNameIndex("kuro_s", 0); + + if (a_this->m2C8 == 4 || a_this->m2C8 == 5) { + a_this->mGmID = fopAcM_GetLinkId(i_this); + if (a_this->mGmID == fpcM_ERROR_PROCESS_ID_e) { + return cPhs_ERROR_e; + } + + fopAc_ac_c* i_act = fopAcM_SearchByID(a_this->mGmID); + if (i_act && fopAc_IsActor(i_act) && fopAcM_GetName(i_act) == PROC_GM && a_this->m2C8 == 5) { + i_this->current.angle.y += cM_rndFX(8192.0f); + i_this->speedF = cM_rndF(6.0f) + 34.0f; + i_this->speed.y = cM_rndF(8.0f) + 22.0f; + } + } + + a_this->m31C = 20.0f; + + if (a_this->m2C8 == 6) { + a_this->mSph.OffTgSetBit(); + a_this->mSph.OffCoSetBit(); + a_this->mSph.ClrTgHit(); + + a_this->m2CB = 10; + a_this->m2CC = 0x32; + + return res; + } + + if (a_this->m2C8 == 7) { + fopAcM_OnStatus(i_this, fopAcStts_UNK4000_e); + + a_this->m2CB = 0x14; + a_this->m2CC = 0x3c; + + return res; + } + + if (a_this->m2C8 == 2) { + a_this->m2CB = 0; + a_this->m2CC = 3; + + fopAcM_SetGravity(i_this, -3.0f); + + BG_check(a_this); + + if (!a_this->mAcch.ChkGroundHit()) { + i_this->gravity = 0.0f; + } + + } + } + + return res; } static actor_method_class l_daKS_Method = { From 36fec0f7fddea841b5955cd4b5915015e416d8d8 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 9 May 2025 16:34:02 -0400 Subject: [PATCH 11/31] Disappear drop type cleanup --- configure.py | 2 +- include/f_op/f_op_actor_mng.h | 6 +++--- src/d/actor/d_a_am.cpp | 2 +- src/d/actor/d_a_am2.cpp | 2 +- src/d/actor/d_a_bk.cpp | 8 +++----- src/d/actor/d_a_disappear.cpp | 4 ++-- src/d/actor/d_a_ks.cpp | 4 ++-- src/d/actor/d_a_rd.cpp | 2 +- src/d/actor/d_a_ship.cpp | 8 ++++---- src/d/d_jnt_hit.cpp | 1 - src/f_op/f_op_actor_mng.cpp | 4 ++-- 11 files changed, 20 insertions(+), 23 deletions(-) diff --git a/configure.py b/configure.py index dc9a333d2..54e5e5ed6 100755 --- a/configure.py +++ b/configure.py @@ -1468,7 +1468,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_kantera"), ActorRel(NonMatching, "d_a_kn"), ActorRel(NonMatching, "d_a_kokiie"), - ActorRel(NonMatching, "d_a_ks"), # code 100%, possible issue unique to this TU + ActorRel(Equivalent, "d_a_ks", extra_cflags=["-sym off"]), # weak func order ActorRel(NonMatching, "d_a_kt"), # regalloc, weak func order ActorRel(NonMatching, "d_a_mflft"), ActorRel(NonMatching, "d_a_npc_cb1"), diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index ac561088d..861e60b71 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -86,7 +86,7 @@ enum daItemAction_e { }; enum daDisappearItemType_e { - daDisItem_NORMAL_e = 0, + daDisItem_IBALL_e = 0, daDisItem_NONE1_e = 1, daDisItem_HEART_CONTAINER_e = 2, daDisItem_NONE3_e = 3, @@ -94,7 +94,7 @@ enum daDisappearItemType_e { daDisItem_HEART_e = 10, daDisItem_MAGIC_e = 11, daDisItem_ARROW_e = 12, - daDisItem_UNK13_e = 13, + daDisItem_NONE13_e = 13, }; class l_HIO { @@ -606,7 +606,7 @@ BOOL stealItem_CB(void* actor); fopAc_ac_c* fopAcM_myRoomSearchEnemy(s8 roomNo); -fpc_ProcID fopAcM_createDisappear(fopAc_ac_c* i_actor, cXyz* p_pos, u8 i_scale, u8 i_health = 0, u8 i_itemBitNo = -1); +fpc_ProcID fopAcM_createDisappear(fopAc_ac_c* i_actor, cXyz* p_pos, u8 i_scale, u8 i_dropType, u8 i_itemBitNo = -1); void fopAcM_setCarryNow(fopAc_ac_c* i_this, BOOL stageLayer); void fopAcM_cancelCarryNow(fopAc_ac_c* i_this); s32 fopAcM_otoCheck(fopAc_ac_c*, f32); diff --git a/src/d/actor/d_a_am.cpp b/src/d/actor/d_a_am.cpp index 7dfa12722..bf9cd5494 100644 --- a/src/d/actor/d_a_am.cpp +++ b/src/d/actor/d_a_am.cpp @@ -917,7 +917,7 @@ static void action_itai_move(am_class* i_this) { // fopAcM_seStart(i_this, JA_SE_LK_LAST_HIT, 0); mDoAud_seStart(JA_SE_LK_LAST_HIT, &i_this->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); - fopAcM_createDisappear(i_this, ¢erPos, 5); + fopAcM_createDisappear(i_this, ¢erPos, 5, daDisItem_IBALL_e); fopAcM_onActor(i_this); fopAcM_delete(i_this); break; diff --git a/src/d/actor/d_a_am2.cpp b/src/d/actor/d_a_am2.cpp index c61fdcb45..d3461013a 100644 --- a/src/d/actor/d_a_am2.cpp +++ b/src/d/actor/d_a_am2.cpp @@ -934,7 +934,7 @@ static void action_itai(am2_class* i_this) { dComIfGp_particle_set(dPa_name::ID_SCENE_81AF, &i_this->current.pos, &i_this->shape_angle); dComIfGp_particle_set(dPa_name::ID_SCENE_81B0, &i_this->current.pos, &i_this->shape_angle); fopAcM_seStart(i_this, JA_SE_CM_AM2_EXPLODE, 0); - fopAcM_createDisappear(i_this, ¢erPos, 5); + fopAcM_createDisappear(i_this, ¢erPos, 5, daDisItem_IBALL_e); fopAcM_onActor(i_this); fopAcM_delete(i_this); break; diff --git a/src/d/actor/d_a_bk.cpp b/src/d/actor/d_a_bk.cpp index 1ddbd865f..7d71542bd 100644 --- a/src/d/actor/d_a_bk.cpp +++ b/src/d/actor/d_a_bk.cpp @@ -2623,11 +2623,11 @@ static void fail(bk_class* i_this) { case 1: cXyz sp08 = i_this->current.pos; sp08.y += 100.0f + l_bkHIO.m020; - u8 dropType = daDisItem_NORMAL_e; + u8 drop_type = daDisItem_IBALL_e; if (i_this->m0300[2] >= 1000) { - dropType = daDisItem_NONE1_e; + drop_type = daDisItem_NONE1_e; } - fopAcM_createDisappear(i_this, &sp08, 10, dropType, i_this->stealItemBitNo); + fopAcM_createDisappear(i_this, &sp08, 10, drop_type, i_this->stealItemBitNo); if (i_this->mType == 10) { i_this->m02DE = 1; i_this->dr.m004 = -1; @@ -3907,8 +3907,6 @@ static void demo_camera(bk_class* i_this) { s8 r28 = true; cXyz sp8C; cXyz sp80; - cXyz sp44; - cXyz sp38; camera_class* r3; switch (i_this->m1234) { case 0: diff --git a/src/d/actor/d_a_disappear.cpp b/src/d/actor/d_a_disappear.cpp index 149482841..9fdb963fe 100644 --- a/src/d/actor/d_a_disappear.cpp +++ b/src/d/actor/d_a_disappear.cpp @@ -27,7 +27,7 @@ static BOOL daDisappear_Execute(disappear_class* i_this) { if (dropType == daDisItem_HEART_CONTAINER_e) { fopAcM_createItemForBoss(&i_this->current.pos, 0, i_this->current.roomNo, &i_this->current.angle, NULL, 0); } - else if (dropType >= daDisItem_HEART_e && dropType <= daDisItem_UNK13_e) { + else if (dropType >= daDisItem_HEART_e && dropType <= daDisItem_NONE13_e) { // Special type for Keese (ki) spawned in the Puppet Ganon fight. // This also seems to be used by several other enemies, such as Molgera's spawn. static u32 ki_item_d[] = { @@ -101,7 +101,7 @@ static cPhs_State daDisappear_Create(fopAc_ac_c* i_this) { fopAcM_SetupActor(dis, disappear_class); - dis->health = fopAcM_GetParam(dis) & 0xFF; + dis->health = fopAcM_GetParam(dis) & 0xFF; // Drop type param is stored in health f32 scaleMag = ((fopAcM_GetParam(dis) >> 8) & 0xFF) * 0.1f; dis->mItemBitNo = (fopAcM_GetParam(dis) >> 0x10) & 0xFF; diff --git a/src/d/actor/d_a_ks.cpp b/src/d/actor/d_a_ks.cpp index ee4344784..cf6420f55 100644 --- a/src/d/actor/d_a_ks.cpp +++ b/src/d/actor/d_a_ks.cpp @@ -644,7 +644,7 @@ void dead_eff_set(ks_class* i_this, cXyz* i_pos) { } } else { - drop_type = daDisItem_UNK13_e; // Might just be a void drop (ie. getting nothing) + drop_type = daDisItem_NONE13_e; } fopAcM_createDisappear(i_this, i_pos, 3, drop_type, 0xff); @@ -1096,7 +1096,7 @@ void action_tubo_search(ks_class* i_this) { i_this->mSph.OnAtVsBitSet(cCcD_AtSPrm_VsOther_e); i_this->mSph.OffAtVsBitSet(cCcD_AtSPrm_VsPlayer_e); - i_this->mSph.OffAtVsBitSet(cCcD_AtSPrm_NoTgHitInfSet_e); + i_this->mSph.OffAtSPrmBit(cCcD_AtSPrm_NoTgHitInfSet_e); i_this->mSph.OnAtSPrmBit(cCcD_AtSPrm_Set_e); diff --git a/src/d/actor/d_a_rd.cpp b/src/d/actor/d_a_rd.cpp index cc308959d..dc593358e 100644 --- a/src/d/actor/d_a_rd.cpp +++ b/src/d/actor/d_a_rd.cpp @@ -800,7 +800,7 @@ void daRd_c::modeDeath() { fopAcM_SetGroup(this, fopAc_ENV_e); if (cLib_calcTimer(&mTimer1) == 0) { - fopAcM_createDisappear(this, ¤t.pos, 5); + fopAcM_createDisappear(this, ¤t.pos, 5, daDisItem_IBALL_e); fopAcM_delete(this); } } diff --git a/src/d/actor/d_a_ship.cpp b/src/d/actor/d_a_ship.cpp index e4eb43fd7..f4b012a6f 100644 --- a/src/d/actor/d_a_ship.cpp +++ b/src/d/actor/d_a_ship.cpp @@ -4252,20 +4252,20 @@ BOOL daShip_c::execute() { cyl->SetC(sp9C); dComIfG_Ccsp()->Set(cyl); if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { - cyl->SetTgGrp(cCcD_AtSPrm_VsPlayer_e); + cyl->SetTgGrp(cCcD_TgSPrm_IsPlayer_e); } else { - cyl->SetTgGrp(cCcD_AtSPrm_VsPlayer_e | cCcD_AtSPrm_VsOther_e); + cyl->SetTgGrp(cCcD_TgSPrm_IsPlayer_e | cCcD_TgSPrm_IsOther_e); } } cMtx_multVec(mpHeadAnm->getModel()->getAnmMtx(8), &sph_offset, &sp9C); if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) { - mSph.SetTgGrp(cCcD_AtSPrm_VsPlayer_e); + mSph.SetTgGrp(cCcD_TgSPrm_IsPlayer_e); } else { - mSph.SetTgGrp(cCcD_AtSPrm_VsPlayer_e | cCcD_AtSPrm_VsOther_e); + mSph.SetTgGrp(cCcD_TgSPrm_IsPlayer_e | cCcD_TgSPrm_IsOther_e); } mSph.SetC(sp9C); diff --git a/src/d/d_jnt_hit.cpp b/src/d/d_jnt_hit.cpp index 75ee7c9f6..10ff0872c 100644 --- a/src/d/d_jnt_hit.cpp +++ b/src/d/d_jnt_hit.cpp @@ -256,7 +256,6 @@ s32 JntHit_c::searchJntHitPosAngleOffset(cXyz* r18, csXyz* r28, cXyz* r29, csXyz cXyz r1_11C; cXyz r1_110; cXyz r1_104; - cXyz r1_2C; csXyz r1_24; J3DModel* model = mpModel; f32 f31 = 10000.0f; diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index c311a1cb7..b3321bfbf 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -1273,8 +1273,8 @@ fopAc_ac_c* fopAcM_myRoomSearchEnemy(s8 roomNo) { } /* 80027A9C-80027B24 .text fopAcM_createDisappear__FP10fopAc_ac_cP4cXyzUcUcUc */ -fpc_ProcID fopAcM_createDisappear(fopAc_ac_c* i_actor, cXyz* p_pos, u8 i_scale, u8 i_health, u8 i_itemBitNo) { - u32 params = (i_itemBitNo & 0xFF) << 0x10 | (i_scale & 0xFF) << 0x08 | (i_health & 0xFF); +fpc_ProcID fopAcM_createDisappear(fopAc_ac_c* i_actor, cXyz* p_pos, u8 i_scale, u8 i_dropType, u8 i_itemBitNo) { + u32 params = (i_itemBitNo & 0xFF) << 0x10 | (i_scale & 0xFF) << 0x08 | (i_dropType & 0xFF); fopAc_ac_c* disappear = (fopAc_ac_c*)fopAcM_fastCreate(PROC_DISAPPEAR, params, p_pos, fopAcM_GetRoomNo(i_actor), fopAcM_GetAngle_p(i_actor)); if (disappear) { disappear->itemTableIdx = i_actor->itemTableIdx; From 4a54a410b1041ff169b102c5a34b9aee9a138981 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 14 May 2025 16:00:12 -0400 Subject: [PATCH 12/31] More player_main match fixes --- include/d/actor/d_a_demo_item.h | 7 + include/d/actor/d_a_player_main.h | 2 +- .../J3DGraphLoader/J3DMaterialFactory.cpp | 4 - .../J3DGraphLoader/J3DMaterialFactory_v21.cpp | 4 - src/d/actor/d_a_demo_item.cpp | 16 +- src/d/actor/d_a_npc_roten.cpp | 4 +- src/d/actor/d_a_obj_figure.cpp | 45 +- src/d/actor/d_a_player_bow.inc | 6 +- src/d/actor/d_a_player_dproc.inc | 47 +- src/d/actor/d_a_player_main.cpp | 1521 ++++++++--------- src/d/actor/d_a_player_rope.inc | 99 +- src/f_op/f_op_actor_mng.cpp | 6 +- 12 files changed, 844 insertions(+), 917 deletions(-) diff --git a/include/d/actor/d_a_demo_item.h b/include/d/actor/d_a_demo_item.h index 8e9385fd9..f1648ea4b 100644 --- a/include/d/actor/d_a_demo_item.h +++ b/include/d/actor/d_a_demo_item.h @@ -9,6 +9,13 @@ class JPABaseEmitter; class daDitem_c : public daItemBase_c { public: + enum ArgFlag { + FLAG_UNK01 = 0x01, + FLAG_UNK02 = 0x02, + FLAG_UNK04 = 0x04, + FLAG_UNK08 = 0x08, + }; + BOOL chkArgFlag(u8 flag) { return mArgFlag & flag; } void clrFlag() { cLib_setBit(mFlag, (u8)0); } void setOffsetPos(cXyz pos) { mOffsetPos = pos; } diff --git a/include/d/actor/d_a_player_main.h b/include/d/actor/d_a_player_main.h index 8b9545f35..59a10809c 100644 --- a/include/d/actor/d_a_player_main.h +++ b/include/d/actor/d_a_player_main.h @@ -326,7 +326,7 @@ public: /* 0x030 */ f32 field_0x030; /* 0x034 */ dBgS_LinkGndChk field_0x034; /* 0x088 */ Mtx field_0x088[3]; -}; +}; // Size: 0x118 struct daPy_aura_c { public: diff --git a/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp b/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp index 89d1c3d2e..e611e20c3 100644 --- a/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp +++ b/src/JSystem/J3DGraphLoader/J3DMaterialFactory.cpp @@ -431,7 +431,6 @@ u32 J3DMaterialFactory::calcSizeLockedMaterial(J3DMaterial* i_material, int i_id J3DGXColor J3DMaterialFactory::newMatColor(int idx, int stage) const { GXColor _ret = { 0xFF, 0xFF, 0xFF, 0xFF }; J3DGXColor ret(_ret); - J3DMaterialInitData* initData = &mpMaterialInitData[mpMaterialID[idx]]; u16 no = mpMaterialInitData[mpMaterialID[idx]].mMatColorIdx[stage]; if (no != 0xFFFF) return mpMatColor[no]; @@ -461,7 +460,6 @@ J3DColorChan J3DMaterialFactory::newColorChan(int idx, int stage) const { J3DGXColor J3DMaterialFactory::newAmbColor(int idx, int stage) const { GXColor _ret = { 0x32, 0x32, 0x32, 0x32 }; J3DGXColor ret(_ret); - J3DMaterialInitData* initData = &mpMaterialInitData[mpMaterialID[idx]]; u16 no = mpMaterialInitData[mpMaterialID[idx]].mAmbColorIdx[stage]; if (no != 0xFFFF) return mpAmbColor[no]; @@ -527,7 +525,6 @@ J3DTevOrder J3DMaterialFactory::newTevOrder(int idx, int stage) const { J3DGXColorS10 J3DMaterialFactory::newTevColor(int idx, int stage) const { GXColorS10 _ret = { 0x00, 0x00, 0x00, 0x00 }; J3DGXColorS10 ret(_ret); - J3DMaterialInitData* initData = &mpMaterialInitData[mpMaterialID[idx]]; u16 no = mpMaterialInitData[mpMaterialID[idx]].mTevColorIdx[stage]; if (no != 0xFFFF) return mpTevColor[no]; @@ -539,7 +536,6 @@ J3DGXColorS10 J3DMaterialFactory::newTevColor(int idx, int stage) const { J3DGXColor J3DMaterialFactory::newTevKColor(int idx, int stage) const { GXColor _ret = { 0xFF, 0xFF, 0xFF, 0xFF }; J3DGXColor ret(_ret); - J3DMaterialInitData* initData = &mpMaterialInitData[mpMaterialID[idx]]; u16 no = mpMaterialInitData[mpMaterialID[idx]].mTevKColorIdx[stage]; if (no != 0xFFFF) return mpTevKColor[no]; diff --git a/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp b/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp index 05e7862d1..3ea568d5d 100644 --- a/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp +++ b/src/JSystem/J3DGraphLoader/J3DMaterialFactory_v21.cpp @@ -6,7 +6,6 @@ #include "JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h" #include "JSystem/J3DGraphLoader/J3DModelLoader.h" #include "JSystem/J3DGraphBase/J3DMatBlock.h" -#include "JSystem/JMath/JMath.h" #include "JSystem/JSupport/JSupport.h" /* 802F9A88-802F9C68 .text __ct__22J3DMaterialFactory_v21FRC20J3DMaterialBlock_v21 */ @@ -172,7 +171,6 @@ J3DMaterial* J3DMaterialFactory_v21::create(J3DMaterial* i_material, int i_idx, J3DGXColor J3DMaterialFactory_v21::newMatColor(int idx, int stage) const { GXColor _ret = { 0xFF, 0xFF, 0xFF, 0xFF }; J3DGXColor ret(_ret); - J3DMaterialInitData_v21* initData = &mpMaterialInitData[mpMaterialID[idx]]; u16 no = mpMaterialInitData[mpMaterialID[idx]].mMatColorIdx[stage]; if (no != 0xFFFF) return mpMatColor[no]; @@ -256,7 +254,6 @@ J3DTevOrder J3DMaterialFactory_v21::newTevOrder(int idx, int stage) const { J3DGXColorS10 J3DMaterialFactory_v21::newTevColor(int idx, int stage) const { GXColorS10 _ret = { 0x00, 0x00, 0x00, 0x00 }; J3DGXColorS10 ret(_ret); - J3DMaterialInitData_v21* initData = &mpMaterialInitData[mpMaterialID[idx]]; u16 no = mpMaterialInitData[mpMaterialID[idx]].mTevColorIdx[stage]; if (no != 0xFFFF) return mpTevColor[no]; @@ -268,7 +265,6 @@ J3DGXColorS10 J3DMaterialFactory_v21::newTevColor(int idx, int stage) const { J3DGXColor J3DMaterialFactory_v21::newTevKColor(int idx, int stage) const { GXColor _ret = { 0xFF, 0xFF, 0xFF, 0xFF }; J3DGXColor ret(_ret); - J3DMaterialInitData_v21* initData = &mpMaterialInitData[mpMaterialID[idx]]; u16 no = mpMaterialInitData[mpMaterialID[idx]].mTevKColorIdx[stage]; if (no != 0xFFFF) return mpTevKColor[no]; diff --git a/src/d/actor/d_a_demo_item.cpp b/src/d/actor/d_a_demo_item.cpp index 6837566ae..32d6d38fe 100644 --- a/src/d/actor/d_a_demo_item.cpp +++ b/src/d/actor/d_a_demo_item.cpp @@ -285,7 +285,7 @@ void daDitem_c::setParticle() { if (mpEmitters[0] || mpEmitters[1] || mpEmitters[2] || mpEmitters[3]) { return; } - if (chkArgFlag(0x02) || chkArgFlag(0x04) || chkArgFlag(0x08)) { + if (chkArgFlag(FLAG_UNK02) || chkArgFlag(FLAG_UNK04) || chkArgFlag(FLAG_UNK08)) { return; } @@ -314,7 +314,7 @@ bool daDitem_c::CreateInit() { hide(); clrFlag(); mArgFlag = daDitem_prm::getFlag(this); - if (!chkArgFlag(0x02) && !chkArgFlag(0x04) && !chkArgFlag(0x08)) { + if (!chkArgFlag(FLAG_UNK02) && !chkArgFlag(FLAG_UNK04) && !chkArgFlag(FLAG_UNK08)) { current.angle.y = -0x2000; } for (int i = 0; i < ARRAY_SIZE(mpEmitters); i++) { @@ -351,17 +351,17 @@ void daDitem_c::set_pos() { cXyz pos; cXyz offset; - if (chkArgFlag(0x02)) { + if (chkArgFlag(FLAG_UNK02)) { offset = offset_tbl[1]; - } else if (chkArgFlag(0x04)) { + } else if (chkArgFlag(FLAG_UNK04)) { offset = offset_tbl[2]; - } else if (chkArgFlag(0x08)) { + } else if (chkArgFlag(FLAG_UNK08)) { offset = mOffsetPos; } else { offset = offset_tbl[0]; } - if (!chkArgFlag(0x08)) { + if (!chkArgFlag(FLAG_UNK08)) { fopAc_ac_c* player = dComIfGp_getPlayer(0); mDoMtx_stack_c::ZXYrotS(player->current.angle.x, player->shape_angle.y, player->current.angle.z); mDoMtx_stack_c::multVec(&offset, &offset); @@ -410,7 +410,7 @@ void daDitem_c::set_mtx() { mpModel->setBaseScale(scale); fopAcM_addAngleY(this, current.angle.y + 0x0111, 0x0111); - if (chkArgFlag(0x02) || chkArgFlag(0x04) || chkArgFlag(0x08)) { + if (chkArgFlag(FLAG_UNK02) || chkArgFlag(FLAG_UNK04) || chkArgFlag(FLAG_UNK08)) { mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); } else { @@ -437,7 +437,7 @@ void daDitem_c::setListStart() { } BOOL daDitem_c::Delete() { - if (!chkArgFlag(0x01)) { + if (!chkArgFlag(FLAG_UNK01)) { execItemGet(m_itemNo); } diff --git a/src/d/actor/d_a_npc_roten.cpp b/src/d/actor/d_a_npc_roten.cpp index 118bcf715..dc9499f59 100644 --- a/src/d/actor/d_a_npc_roten.cpp +++ b/src/d/actor/d_a_npc_roten.cpp @@ -2277,7 +2277,7 @@ void daNpcRoten_c::eventSetItemInit() { u8 itemIdx = l_item_dat[mNpcNo][field_0x9BE]; cXyz pos(0.0f, 0.0f, 0.0f); u8 itemNo = itemIdx + FLOWER_1; - field_0x6F8 = fopAcM_createItemForPresentDemo(&pos, itemNo, 9, -1, fopAcM_GetRoomNo(this)); + field_0x6F8 = fopAcM_createItemForPresentDemo(&pos, itemNo, daDitem_c::FLAG_UNK01 | daDitem_c::FLAG_UNK08, -1, fopAcM_GetRoomNo(this)); } /* 000028C4-0000290C .text eventSetItem__12daNpcRoten_cFv */ @@ -2323,7 +2323,7 @@ void daNpcRoten_c::eventGetItemInit(int staffIdx) { u8 itemNo = FLOWER_1; itemNo += itemIdx; // fakematch? - pcId = fopAcM_createItemForPresentDemo(¤t.pos, itemNo, 1, -1, fopAcM_GetRoomNo(this)); + pcId = fopAcM_createItemForPresentDemo(¤t.pos, itemNo, daDitem_c::FLAG_UNK01, -1, fopAcM_GetRoomNo(this)); } if(pcId != fpcM_ERROR_PROCESS_ID_e) { diff --git a/src/d/actor/d_a_obj_figure.cpp b/src/d/actor/d_a_obj_figure.cpp index 0c04959af..363337ad9 100644 --- a/src/d/actor/d_a_obj_figure.cpp +++ b/src/d/actor/d_a_obj_figure.cpp @@ -926,7 +926,7 @@ cPhs_State daObjFigure_c::_create() { NULL, }; - dComLbG_PhaseHandler(&mPhsLoad, l_method, this); + return dComLbG_PhaseHandler(&mPhsLoad, l_method, this); } /* 00000720-00000A90 .text createHeap__13daObjFigure_cFv */ @@ -1512,9 +1512,9 @@ void linkDraw(mDoExt_McaMorf* pMorf) { J3DShape* ZOnShape[4]; J3DJoint* link_root_joint = modelData->getJointNodePointer(0x00); // link_root joint - J3DJoint* cl_eye_joint = modelData->getJointNodePointer(0x13); // cl_eye joint - J3DJoint* cl_mayu_joint = modelData->getJointNodePointer(0x15); // cl_mayu joint - + J3DJoint* cl_eye_joint = modelData->getJointNodePointer(0x13); // cl_eye joint + J3DJoint* cl_mayu_joint = modelData->getJointNodePointer(0x15); // cl_mayu joint + J3DMaterial* mtl; mtl = modelData->getJointNodePointer(0x13)->getMesh(); // cl_eye joint int zoff_blend_cnt = 0; @@ -1525,20 +1525,16 @@ void linkDraw(mDoExt_McaMorf* pMorf) { while (mtl) { mtl->setMaterialMode(1); if (mtl->getZMode()->getCompareEnable() == 0) { - // TODO: debug map indicates J3DBlend::getType inline was used - if (mtl->getBlend()->mBlendMode == GX_BM_BLEND) { - ZOffBlendShape[zoff_blend_cnt] = mtl->getShape(); - zoff_blend_cnt++; - JUT_ASSERT(0x6E7, zoff_blend_cnt <= 4); + if ((u8)mtl->getBlend()->getType() == GX_BM_BLEND) { + ZOffBlendShape[zoff_blend_cnt++] = mtl->getShape(); + JUT_ASSERT(1767, zoff_blend_cnt <= 4); } else { - ZOffNoneShape[zoff_none_cnt] = mtl->getShape(); - zoff_none_cnt++; - JUT_ASSERT(0x6EA, zoff_none_cnt <= 4); + ZOffNoneShape[zoff_none_cnt++] = mtl->getShape(); + JUT_ASSERT(1770, zoff_none_cnt <= 4); } } else { - ZOnShape[zon_cnt] = mtl->getShape(); - zon_cnt++; - JUT_ASSERT(0x6EE, zon_cnt <= 4); + ZOnShape[zon_cnt++] = mtl->getShape(); + JUT_ASSERT(1774, zon_cnt <= 4); } mtl = mtl->getNext(); } @@ -1548,7 +1544,7 @@ void linkDraw(mDoExt_McaMorf* pMorf) { dComIfGd_setListP0(); l_onCupOffAupPacket2.entryOpa(); - for(i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { ZOffBlendShape[i]->hide(); ZOnShape[i]->hide(); ZOffNoneShape[i]->show(); @@ -1558,7 +1554,7 @@ void linkDraw(mDoExt_McaMorf* pMorf) { cl_mayu_joint->entryIn(); l_offCupOnAupPacket2.entryOpa(); - for(i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { ZOffBlendShape[i]->show(); ZOffNoneShape[i]->hide(); } @@ -1568,25 +1564,24 @@ void linkDraw(mDoExt_McaMorf* pMorf) { mtl = link_root_joint->getMesh(); for (i = 0; mtl != NULL; i++, mtl = mtl->getNext()) { - if(i != 2 && i != 5) { + if (i != 2 && i != 5) { mtl->getShape()->hide(); } } link_root_joint->entryIn(); - + for (i = 0, mtl = link_root_joint->getMesh(); mtl != NULL; i++, mtl = mtl->getNext()) { - if(i != 2 && i != 5) { + if (i != 2 && i != 5) { mtl->getShape()->show(); - } - else { + } else { mtl->getShape()->hide(); } } l_onCupOffAupPacket1.entryOpa(); - for(i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { ZOffBlendShape[i]->hide(); ZOnShape[i]->show(); ZOffNoneShape[i]->hide(); @@ -1594,10 +1589,10 @@ void linkDraw(mDoExt_McaMorf* pMorf) { cl_eye_joint->entryIn(); cl_mayu_joint->entryIn(); - + l_offCupOnAupPacket1.entryOpa(); - for(i = 0; i < 4; i++) { + for (i = 0; i < 4; i++) { ZOnShape[i]->hide(); } diff --git a/src/d/actor/d_a_player_bow.inc b/src/d/actor/d_a_player_bow.inc index 6d4d998e7..a2b161add 100644 --- a/src/d/actor/d_a_player_bow.inc +++ b/src/d/actor/d_a_player_bow.inc @@ -67,10 +67,12 @@ BOOL daPy_lk_c::checkBowAnime() const { /* 8014A080-8014A180 .text makeArrow__9daPy_lk_cFv */ void daPy_lk_c::makeArrow() { - /* Nonmatching - weird gameinfo load */ + // Fakematch: The first call to getPt1 needs to load gameinfo differently from the other two. + // Adding a redundant (dEvt_control_c*) cast to just that one fixes it. BOOL r4 = mDemo.getDemoMode() == daPy_demo_c::DEMO_UNK44_e; if ((!r4 && dComIfGs_getArrowNum() != 0) || - (r4 && dComIfGp_event_getPt1() != NULL && fopAcM_GetName(dComIfGp_event_getPt1()) == PROC_NPC_SO && + (r4 && ((dEvt_control_c*)&g_dComIfG_gameInfo.play.getEvent())->getPt1() != NULL && + fopAcM_GetName(dComIfGp_event_getPt1()) == PROC_NPC_SO && ((daNpc_So_c*)dComIfGp_event_getPt1())->getMiniGameRestArrow() > 0)) { fopAc_ac_c* arrow_p = (fopAc_ac_c*)fopAcM_fastCreate(PROC_ARROW, 0, ¤t.pos, current.roomNo); diff --git a/src/d/actor/d_a_player_dproc.inc b/src/d/actor/d_a_player_dproc.inc index 64a7e00bc..f5578b6c8 100644 --- a/src/d/actor/d_a_player_dproc.inc +++ b/src/d/actor/d_a_player_dproc.inc @@ -12,6 +12,7 @@ #include "SSystem/SComponent/c_counter.h" #include "d/actor/d_a_boko.h" +#include "d/actor/d_a_demo_item.h" #include "d/actor/d_a_itembase.h" #include "d/actor/d_a_player_HIO.h" #include "d/actor/d_a_player_main.h" @@ -527,7 +528,7 @@ BOOL daPy_lk_c::dProcGetItem_init() { item_no = dComIfGp_event_getGtItm(); } fpc_ProcID itemID = - fopAcM_createItemForPresentDemo(¤t.pos, item_no, 0, 0xffffffff, fopAcM_GetRoomNo(this), NULL, NULL); + fopAcM_createItemForPresentDemo(¤t.pos, item_no, 0, -1, fopAcM_GetRoomNo(this)); if (itemID != fpcM_ERROR_PROCESS_ID_e) { dComIfGp_event_setItemPartnerId(itemID); } @@ -590,12 +591,12 @@ BOOL daPy_lk_c::dProcGetItem() { mProcVar0.m3570 = 0; onModeFlg(ModeFlg_00000400); } - if ((item != NULL) && (fopAcM_GetName(item) == PROC_ITEM || (fopAcM_GetName(item) == PROC_Demo_Item))) { + if (item != NULL && (fopAcM_GetName(item) == PROC_ITEM || (fopAcM_GetName(item) == PROC_Demo_Item))) { item->hide(); } } else { if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { - if ((item != NULL) && (fopAcM_GetName(item) == PROC_ITEM || fopAcM_GetName(item) == PROC_Demo_Item)) { + if (item != NULL && (fopAcM_GetName(item) == PROC_ITEM || fopAcM_GetName(item) == PROC_Demo_Item)) { item->show(); if ((m3624 == 0) && (m34D4 != -1)) { if ((m34D4 == 7) && (dComIfGs_getMaxLife() % 4)) { @@ -618,7 +619,7 @@ BOOL daPy_lk_c::dProcGetItem() { setBlendMoveAnime(daPy_HIO_basic_c0::m.field_0xC); } } - } else if ((item != NULL) && (fopAcM_GetName(item) == PROC_ITEM || (fopAcM_GetName(item) == PROC_Demo_Item))) { + } else if (item != NULL && (fopAcM_GetName(item) == PROC_ITEM || (fopAcM_GetName(item) == PROC_Demo_Item))) { item->hide(); } } @@ -820,25 +821,25 @@ BOOL daPy_lk_c::dProcDead_init() { } mVelocity = 0.0f; m34D4 = 0; + if (iVar4 != 0) { dVar6 = ANM_SHIPDIE; - } else { - if (uVar2 != 0) { - dVar6 = ANM_SWIMDIE; - onModeFlg(ModeFlg_SWIM); - dComIfGp_setPlayerStatus0(0, daPyStts0_SWIM_e); - if (uVar3 == 0) { - offNoResetFlg0(daPyFlg0_UNK100); - dVar8 = 0.0f; - m34D4 = 1; - } else { - m34C2 = 0; - } + } else if (uVar2 != 0) { + dVar6 = ANM_SWIMDIE; + onModeFlg(ModeFlg_SWIM); + dComIfGp_setPlayerStatus0(0, daPyStts0_SWIM_e); + if (uVar3 == 0) { + offNoResetFlg0(daPyFlg0_UNK100); + dVar8 = 0.0f; + m34D4 = 1; } else { - dVar6 = ANM_DIELONG; - onModeFlg(ModeFlg_02000000); + m34C2 = 0; } + } else { + dVar6 = ANM_DIELONG; + onModeFlg(ModeFlg_02000000); } + setSingleMoveAnime(dVar6, dVar8, daPy_HIO_restart_c0::m.field_0x10, -1, daPy_HIO_restart_c0::m.field_0x14); mDamageWaitTimer = 0; m35E4 = 0.0f; @@ -1425,7 +1426,13 @@ void daPy_lk_c::dProcPresent_init_sub() { onModeFlg(ModeFlg_00000400); if (!checkBottleItem(dComIfGp_event_getPreItemNo())) { dComIfGp_event_setItemPartnerId(fopAcM_createItemForPresentDemo( - ¤t.pos, dComIfGp_event_getPreItemNo(), 3, -1, fopAcM_GetRoomNo(this), &shape_angle, &scale + ¤t.pos, + dComIfGp_event_getPreItemNo(), + daDitem_c::FLAG_UNK01 | daDitem_c::FLAG_UNK02, + -1, + fopAcM_GetRoomNo(this), + &shape_angle, + &scale )); } keepItemData(); @@ -1477,7 +1484,7 @@ BOOL daPy_lk_c::dProcPresent() { } } else { daItemBase_c* item = (daItemBase_c*)fopAcM_getItemEventPartner(this); - if ((item != NULL) && (fopAcM_GetName(item) == PROC_ITEM || fopAcM_GetName(item) == PROC_Demo_Item)) { + if (item != NULL && (fopAcM_GetName(item) == PROC_ITEM || fopAcM_GetName(item) == PROC_Demo_Item)) { item->show(); } } diff --git a/src/d/actor/d_a_player_main.cpp b/src/d/actor/d_a_player_main.cpp index ae5557784..94d9e2e9a 100644 --- a/src/d/actor/d_a_player_main.cpp +++ b/src/d/actor/d_a_player_main.cpp @@ -9,6 +9,7 @@ */ #include "d/actor/d_a_player_main.h" +#include "d/actor/d_a_demo_item.h" #include "d/actor/d_a_obj_movebox.h" #include "d/actor/d_a_player_HIO.h" #include "d/actor/d_a_sea.h" @@ -2411,85 +2412,71 @@ void daPy_lk_c::posMoveFromFootPos() { /* 8010959C-80109E80 .text posMove__9daPy_lk_cFv */ void daPy_lk_c::posMove() { - /* Nonmatching - cXyz */ - f32 fVar2; - f32 fVar4; - J3DAnmTransform* pJVar5; - int iVar7; - uint uVar8; - mDoExt_MtxCalcAnmBlendTblOld* pmVar10; - J3DTransformInfo* pJVar11; - f32 dVar13; - f32 dVar14; - f32 dVar15; - fopAc_ac_c* local_110; - cXyz local_ac; - cXyz local_a0; - cXyz local_94; - cXyz local_74; - cXyz local_54; - J3DTransformInfo info1; - J3DTransformInfo info2; - - pmVar10 = m_pbCalc[PART_UNDER_e]; - local_ac = m3700; - pJVar5 = pmVar10->getAnmTransform(0); - pJVar5->getTransform(0, &info1); + mDoExt_MtxCalcAnmBlendTblOld* pmVar10 = m_pbCalc[PART_UNDER_e]; + cXyz sp8C = m3700; + J3DAnmTransform* pJVar5 = pmVar10->getAnmTransform(0); + J3DTransformInfo spB8; + pJVar5->getTransform(0, &spB8); pJVar5 = pmVar10->getAnmTransform(1); if (pJVar5 != NULL) { - pJVar5->getTransform(0, &info2); - fVar2 = pmVar10->getRatio(1); - fVar4 = 1.0f - fVar2; - local_54.x = local_54.x * fVar4 + local_74.x * fVar2; - local_54.y = local_54.y * fVar4 + local_74.y * fVar2; - local_54.z = local_54.z * fVar4 + local_74.z * fVar2; + J3DTransformInfo sp98; + pJVar5->getTransform(0, &sp98); + f32 fVar2 = pmVar10->getRatio(1); + f32 fVar4 = 1.0f - fVar2; + spB8.mTranslate.x = spB8.mTranslate.x * fVar4 + sp98.mTranslate.x * fVar2; + spB8.mTranslate.y = spB8.mTranslate.y * fVar4 + sp98.mTranslate.y * fVar2; + spB8.mTranslate.z = spB8.mTranslate.z * fVar4 + sp98.mTranslate.z * fVar2; } - pJVar11 = m_old_fdata->getOldFrameTransInfo(0); - dVar15 = cM_ssin(shape_angle.y); - dVar14 = cM_scos(shape_angle.y); + J3DTransformInfo* pJVar11 = m_old_fdata->getOldFrameTransInfo(0); + f32 dVar15 = cM_ssin(shape_angle.y); + f32 dVar14 = cM_scos(shape_angle.y); + cXyz sp80; + cXyz sp74; if (m34C2 == 11) { - local_a0 = current.pos - old.pos; - pJVar11->mTranslate.x -= (-dVar15 * local_a0.z) + (dVar14 * local_a0.x); - pJVar11->mTranslate.y -= local_a0.y; - pJVar11->mTranslate.z -= (dVar14 * local_a0.z) + (dVar15 * local_a0.x); + sp80 = current.pos - old.pos; + pJVar11->mTranslate.x -= (-dVar15 * sp80.z) + (dVar14 * sp80.x); + pJVar11->mTranslate.y -= sp80.y; + pJVar11->mTranslate.z -= (dVar14 * sp80.z) + (dVar15 * sp80.x); } else if (m34C2 == 10) { - local_a0.set(local_54.x - pJVar11->mTranslate.z, local_54.y - pJVar11->mTranslate.y, - local_54.z - pJVar11->mTranslate.x); - local_94.set((dVar15 * local_a0.x) + (dVar14 * local_a0.z), local_a0.y, - (dVar14 * local_a0.x) - (dVar15 * local_a0.z)); - current.pos -= local_94; - old.pos -= local_94; - pJVar11->mTranslate.x = local_54.x; - pJVar11->mTranslate.y = local_54.y; - pJVar11->mTranslate.z = local_54.z; + sp80.set( + spB8.mTranslate.x - pJVar11->mTranslate.x, + spB8.mTranslate.y - pJVar11->mTranslate.y, + spB8.mTranslate.z - pJVar11->mTranslate.z + ); + sp74.set((dVar15 * sp80.z) + (dVar14 * sp80.x), sp80.y, (dVar14 * sp80.z) - (dVar15 * sp80.x)); + current.pos -= sp74; + old.pos -= sp74; + pJVar11->mTranslate.x = spB8.mTranslate.x; + pJVar11->mTranslate.y = spB8.mTranslate.y; + pJVar11->mTranslate.z = spB8.mTranslate.z; } else if (m34C2 == 2 || m34C2 == 6) { - pJVar11->mTranslate.x = local_54.x; - pJVar11->mTranslate.z = local_54.z; + pJVar11->mTranslate.x = spB8.mTranslate.x; + pJVar11->mTranslate.z = spB8.mTranslate.z; if (m34C2 == 6) { - pJVar11->mTranslate.y = local_54.y; + pJVar11->mTranslate.y = spB8.mTranslate.y; } } else if (m34C2 == 4) { m3700.x = 0.0f; m3700.z = 0.0f; - local_94.x = 0.0f; - local_94.z = 0.0f; - local_94.y = local_54.y; + sp8C.x = 0.0f; + sp8C.z = 0.0f; + sp8C.y = spB8.mTranslate.y; pJVar11->mTranslate.x = 0.0f; pJVar11->mTranslate.z = 0.0f; - pJVar11->mTranslate.y = local_94.y; - m35E0 = local_94.y; + pJVar11->mTranslate.y = spB8.mTranslate.y; + m35E0 = spB8.mTranslate.y; m34C2 = 5; } else if (m34C2 == 7 || m34C2 == 3) { - local_94.x = local_54.x; - local_94.y = local_54.y; - local_94.z = local_54.z; + sp8C.x = spB8.mTranslate.x; + sp8C.y = spB8.mTranslate.y; + sp8C.z = spB8.mTranslate.z; if (m34C2 == 7) { m34C2 = 5; } else { m34C2 = 1; } } - m3700 = local_54; + m3700 = spB8.mTranslate; posMoveFromFootPos(); if (!checkNoCollisionCorret()) { current.pos += *mStts.GetCCMoveP(); @@ -2499,14 +2486,14 @@ void daPy_lk_c::posMove() { current.pos.z += m3644 * cM_scos(m3640); } if (mWhirlId != fpcM_ERROR_PROCESS_ID_e) { - local_110 = fopAcM_SearchByID(mWhirlId); + fopAc_ac_c* local_110 = fopAcM_SearchByID(mWhirlId); if (local_110 != NULL) { - local_74 = current.pos - local_110->current.pos; - iVar7 = (s16)(cM_atan2s(local_74.x, local_74.z) + 0x5000); + cXyz sp68 = current.pos - local_110->current.pos; + s16 iVar7 = cM_atan2s(sp68.x, sp68.z) + 0x5000; cLib_chaseF(&m3610, 40.0f, 5.0f); current.pos.x += m3610 * cM_ssin(iVar7); current.pos.z += m3610 * cM_scos(iVar7); - dVar13 = local_74.absXZ(); + f32 dVar13 = sp68.absXZ(); if (dVar13 < 500.0f) { startRestartRoom(5, 0xC9, -1.0f, 0); } @@ -2517,10 +2504,10 @@ void daPy_lk_c::posMove() { m3610 = 0.0f; } if (mAcch.ChkGroundHit() && dComIfG_Bgsp()->ChkPolySafe(mAcch.m_gnd)) { - uVar8 = getGroundAngle(&mAcch.m_gnd, 0); - current.pos.z += m36A0.z * cM_scos(uVar8 & 0xFFFF); + s16 uVar8 = getGroundAngle(&mAcch.m_gnd, 0); + current.pos.z += m36A0.z * cM_scos(uVar8); uVar8 = getGroundAngle(&mAcch.m_gnd, 0x4000); - current.pos.x += m36A0.x * cM_scos(uVar8 & 0xFFFF); + current.pos.x += m36A0.x * cM_scos(uVar8); } current.pos += m36B8; if (mCurProc != daPyProc_FAN_GLIDE_e) { @@ -2528,14 +2515,12 @@ void daPy_lk_c::posMove() { current.pos.z += m3730.z; } } - } else if (((!dComIfGp_event_runCheck() && mDemo.getDemoType() == 0) && - daPy_getPlayerActorClass() == this) && + } else if (((!dComIfGp_event_runCheck() && mDemo.getDemoType() == 0) && daPy_getPlayerActorClass() == this) && mCurProc == daPyProc_HANG_MOVE_e) { - dVar13 = mStts.GetCCMoveP()->absXZ(); + f32 dVar13 = mStts.GetCCMoveP()->absXZ(); if (dVar13 > 1.0f) { - if ((s16)(cM_atan2s(mStts.GetCCMoveP()->x, mStts.GetCCMoveP()->z) - shape_angle.y) >= 0) - { + if ((s16)(cM_atan2s(mStts.GetCCMoveP()->x, mStts.GetCCMoveP()->z) - shape_angle.y) >= 0) { current.pos.x += dVar13 * cM_scos(shape_angle.y); current.pos.z -= dVar13 * cM_ssin(shape_angle.y); } else { @@ -2547,15 +2532,16 @@ void daPy_lk_c::posMove() { m3644 = 0.0f; mStts.GetCCMoveP()->zero(); if (((m34C2 == 1 || m34C2 == 8) || m34C2 == 9) || m34C2 == 5) { + cXyz sp5C; if (m34C2 == 1 || m34C2 == 5) { - local_a0 = m3700 - local_94; + sp5C = m3700 - sp8C; } else { - local_a0 = local_94 - m3700; + sp5C = sp8C - m3700; } - current.pos.x += (local_a0.x * dVar15) + (local_a0.z * dVar14); - current.pos.z += (local_a0.x * dVar14) - (local_a0.z * dVar15); + current.pos.x += (sp5C.z * dVar15) + (sp5C.x * dVar14); + current.pos.z += (sp5C.z * dVar14) - (sp5C.x * dVar15); if (m34C2 == 5) { - current.pos.y += local_a0.y; + current.pos.y += sp5C.y; } } } @@ -3609,7 +3595,6 @@ void daPy_lk_c::makeItemType() { } else if (mEquipItem == dItem_BOOMERANG_e) { fopAc_ac_c* boomerang = (fopAc_ac_c*)fopAcM_fastCreate(PROC_BOOMERANG, 0, ¤t.pos); mActorKeepEquip.setData(boomerang); - return; } else if (mEquipItem == dItem_BOMB_BAG_e) { fopAc_ac_c* bomb = (fopAc_ac_c*)fopAcM_fastCreate(PROC_BOMB, daBomb_c::prm_make(daBomb_c::STATE_3, false, false), ¤t.pos); mActorKeepGrab.setData(bomb); @@ -5341,20 +5326,15 @@ BOOL daPy_lk_c::changeDemoProc() { deleteEquipItem(FALSE); } u32 demo_mode = mDemo.getDemoMode(); - JUT_ASSERT(9342, (demo_mode < daPy_demo_c::DEMO_LAST_e) || - (demo_mode == daPy_demo_c::DEMO_NEW_ANM0_e)); - if ((((demo_mode != daPy_demo_c::DEMO_NEW_ANM0_e) && - (demo_mode != daPy_demo_c::DEMO_UNK1E_e)) && - (demo_mode != daPy_demo_c::DEMO_UNK09_e)) && - (((demo_mode != daPy_demo_c::DEMO_UNK11_e && (demo_mode != daPy_demo_c::DEMO_UNK40_e)) && - ((demo_mode != daPy_demo_c::DEMO_UNK04_e && - ((demo_mode != daPy_demo_c::DEMO_UNK2F_e && - (demo_mode != daPy_demo_c::DEMO_UNK3E_e)))))))) + JUT_ASSERT(9342, (demo_mode < daPy_demo_c::DEMO_LAST_e) || (demo_mode == daPy_demo_c::DEMO_NEW_ANM0_e)); + if (demo_mode != daPy_demo_c::DEMO_NEW_ANM0_e && demo_mode != daPy_demo_c::DEMO_UNK1E_e && + demo_mode != daPy_demo_c::DEMO_UNK09_e && demo_mode != daPy_demo_c::DEMO_UNK11_e && + demo_mode != daPy_demo_c::DEMO_UNK40_e && demo_mode != daPy_demo_c::DEMO_UNK04_e && + demo_mode != daPy_demo_c::DEMO_UNK2F_e && demo_mode != daPy_demo_c::DEMO_UNK3E_e) { - if ((!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && - !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e))) + if (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e)) { - if ((!mAcch.ChkGroundHit() || (daPy_lk_c::checkPlayerFly()))) { + if (!mAcch.ChkGroundHit() || daPy_lk_c::checkPlayerFly()) { return false; } } @@ -5378,12 +5358,11 @@ BOOL daPy_lk_c::changeDemoProc() { } return var_r28; } - if ((demo_mode == daPy_demo_c::DEMO_UNK06_e) || (demo_mode == daPy_demo_c::DEMO_UNK08_e)) { + if ((demo_mode == daPy_demo_c::DEMO_UNK06_e) || demo_mode == daPy_demo_c::DEMO_UNK08_e) { if (checkModeFlg(ModeFlg_04000000)) { return true; } - if (((dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) && - (fopAcM_getTalkEventPartner(this) != NULL)) && + if (((dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) && (fopAcM_getTalkEventPartner(this) != NULL)) && (fopAcM_getTalkEventPartner(this) == dComIfGp_getShipActor())) { return procShipPaddle_init(); @@ -5391,7 +5370,7 @@ BOOL daPy_lk_c::changeDemoProc() { onNoResetFlg0(daPyFlg0_UNK100000); fopAc_ac_c* grab_actor = mActorKeepGrab.getActor(); if (grab_actor != NULL) { - if ((fopAcM_CheckStatus(grab_actor, fopAcStts_UNK10000_e)) && (!checkGrabSpecialHeavyState())) { + if ((fopAcM_CheckStatus(grab_actor, fopAcStts_UNK10000_e)) && !checkGrabSpecialHeavyState()) { return procGrabThrow_init(0); } else { return procGrabPut_init(); @@ -5401,8 +5380,7 @@ BOOL daPy_lk_c::changeDemoProc() { } } else if (demo_mode == daPy_demo_c::DEMO_UNK09_e) { onNoResetFlg0(daPyFlg0_UNK100000); - if ((mCurProc == daPyProc_LARGE_DAMAGE_UP_e) || (mCurProc == daPyProc_LARGE_DAMAGE_WALL_e)) - { + if ((mCurProc == daPyProc_LARGE_DAMAGE_UP_e) || mCurProc == daPyProc_LARGE_DAMAGE_WALL_e) { return false; } if (checkModeFlg(ModeFlg_SWIM)) { @@ -5429,12 +5407,12 @@ BOOL daPy_lk_c::changeDemoProc() { } return procSlowFall_init(); } else if (demo_mode == daPy_demo_c::DEMO_UNK1F_e) { - if (((!checkModeFlg(ModeFlg_MIDAIR | ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_IN_SHIP | - ModeFlg_CLIMB | ModeFlg_SWIM | ModeFlg_LADDER | ModeFlg_04000000 | - ModeFlg_CAUGHT)) && - (((((checkUpperReadyThrowAnime() || (m34C3 == 2)) || (m34C3 == 1)) || - ((m34C3 == 4 || (m34C3 == 9)))) || - ((m34C3 == 10 || (mCurProc == daPyProc_GRAB_WAIT_e)))))) || + if (((!checkModeFlg( + ModeFlg_MIDAIR | ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_IN_SHIP | ModeFlg_CLIMB | ModeFlg_SWIM | + ModeFlg_LADDER | ModeFlg_04000000 | ModeFlg_CAUGHT + )) && + ((((checkUpperReadyThrowAnime() || m34C3 == 2) || m34C3 == 1) || (m34C3 == 4 || m34C3 == 9)) || + (m34C3 == 10 || mCurProc == daPyProc_GRAB_WAIT_e))) || (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e))) { onNoResetFlg0(daPyFlg0_UNK100000); @@ -5445,7 +5423,7 @@ BOOL daPy_lk_c::changeDemoProc() { } } else if (demo_mode == daPy_demo_c::DEMO_UNK22_e) { onNoResetFlg0(daPyFlg0_UNK100000); - if ((mCurProc == daPyProc_TACT_PLAY_e) || (mCurProc == daPyProc_TACT_PLAY_END_e)) { + if ((mCurProc == daPyProc_TACT_PLAY_e) || mCurProc == daPyProc_TACT_PLAY_END_e) { return true; } return procTactWait_init(mDemo.getParam0()); @@ -5461,11 +5439,11 @@ BOOL daPy_lk_c::changeDemoProc() { } else if (demo_mode == daPy_demo_c::DEMO_UNK3D_e) { onNoResetFlg0(daPyFlg0_UNK100000); return procBottleOpen_init(dComIfGp_event_getPreItemNo()); - } else if ((((checkNoResetFlg0(daPyFlg0_UNK100000)) || (mCurProc == daPyProc_SUBJECTIVITY_e)) || - (checkUpperReadyThrowAnime())) && - (((demo_mode == daPy_demo_c::DEMO_UNK2A_e || (demo_mode - 1 <= 2)) || - ((demo_mode == daPy_demo_c::DEMO_UNK17_e || - (demo_mode == daPy_demo_c::DEMO_UNK12_e)))))) + } else if ((((checkNoResetFlg0(daPyFlg0_UNK100000)) || mCurProc == daPyProc_SUBJECTIVITY_e) || + checkUpperReadyThrowAnime()) && + (demo_mode == daPy_demo_c::DEMO_UNK2A_e || demo_mode == daPy_demo_c::DEMO_UNK01_e || + demo_mode == daPy_demo_c::DEMO_UNK02_e || demo_mode == daPy_demo_c::DEMO_UNK03_e || + (demo_mode == daPy_demo_c::DEMO_UNK17_e || demo_mode == daPy_demo_c::DEMO_UNK12_e))) { offNoResetFlg0(daPyFlg0_UNK100000); if (checkUpperReadyThrowAnime()) { @@ -7856,7 +7834,7 @@ BOOL daPy_lk_c::procLargeDamageUp_init(int param_1, int param_2, s16 param_3, s1 dVar7 = 0.5f; m34D0 = 0; m35A0 = 36.0f; - } else if ((param_1 == -1) || (param_1 == -2)) { + } else if ((param_1 == -1) || param_1 == -2) { dVar4 = ANM_DAMFBUP; dVar6 = 7.0f; sVar3 = -1; @@ -7869,7 +7847,7 @@ BOOL daPy_lk_c::procLargeDamageUp_init(int param_1, int param_2, s16 param_3, s1 m34D0 = 0; dVar7 = 0.5f; } - } else if ((param_1 == -4) || (dComIfGp_evmng_startCheck("ICE_FAILED"))) { + } else if ((param_1 == -4) || dComIfGp_evmng_startCheck("ICE_FAILED")) { dVar4 = ANM_DAMFBUP; dVar7 = 0.0f; dVar6 = 7.0f; @@ -8197,7 +8175,7 @@ BOOL daPy_lk_c::procElecDamage() { } else { dComIfGp_event_reset(); endDemoMode(); - if ((mAcch.ChkGroundHit()) && (m34D6 == 0)) { + if ((mAcch.ChkGroundHit()) && m34D6 == 0) { checkNextMode(0); } else { if (m34D6 != 0) { @@ -8332,7 +8310,7 @@ BOOL daPy_lk_c::procIceSlipFall() { psVar1 = &m34F4; } cLib_chaseAngleS(psVar1, m34D4, daPy_HIO_iceSlip_c0::m.field_0x2); - if ((mAcch.ChkGroundHit()) && (!changeSlideProc())) { + if ((mAcch.ChkGroundHit()) && !changeSlideProc()) { procIceSlipFallUp_init(mProcVar0.m3570, m34F2, m34F4); } return true; @@ -8479,7 +8457,7 @@ BOOL daPy_lk_c::procBootsEquip() { checkNextMode(1); } } else { - if ((frameCtrl.checkPass(15.0f)) && (checkEquipHeavyBoots())) { + if ((frameCtrl.checkPass(15.0f)) && checkEquipHeavyBoots()) { dComIfGp_getVibration().StartShock(5, -0x31, cXyz(0.0f, 1.0f, 0.0f)); } } @@ -8516,20 +8494,24 @@ BOOL daPy_lk_c::procNotUse_init(int param_1) { /* 80119BA0-80119DA0 .text procNotUse__9daPy_lk_cFv */ BOOL daPy_lk_c::procNotUse() { - if ((m34D4 == 0) && (!checkBottleItem((u16)mProcVar0.mBottleItem))) { - dComIfGp_event_setItemPartnerId( - fopAcM_createItemForPresentDemo(¤t.pos, mProcVar0.mBottleItem, 5, -1, - fopAcM_GetRoomNo(this), &shape_angle, &scale)); + if (m34D4 == 0 && !checkBottleItem((u16)mProcVar0.mBottleItem)) { + dComIfGp_event_setItemPartnerId(fopAcM_createItemForPresentDemo( + ¤t.pos, + mProcVar0.mBottleItem, + daDitem_c::FLAG_UNK01 | daDitem_c::FLAG_UNK04, + -1, + fopAcM_GetRoomNo(this), + &shape_angle, + &scale + )); m34D4 = 1; } if (mFrameCtrlUnder[UNDER_MOVE0_e].getRate() < 0.01f) { daItemBase_c* item = (daItemBase_c*)fopAcM_getItemEventPartner(this); - if ((item != NULL) && - ((fopAcM_GetName(item) == PROC_ITEM || (fopAcM_GetName(item) == PROC_Demo_Item)))) - { + if (item != NULL && (fopAcM_GetName(item) == PROC_ITEM || fopAcM_GetName(item) == PROC_Demo_Item)) { item->show(); } - if ((m34D4 == 0) && (checkBottleItem((u16)mProcVar0.mBottleItem))) { + if (m34D4 == 0 && checkBottleItem((u16)mProcVar0.mBottleItem)) { setBottleModel(mProcVar0.mBottleItem); m34D4 = 1; } @@ -8539,20 +8521,17 @@ BOOL daPy_lk_c::procNotUse() { msg_class* msg_p = fopMsgM_SearchByID(m3628); if (msg_p != 0) { if (msg_p->mStatus == fopMsgStts_MSG_DISPLAYED_e) { - if ((m3624 == 0xf0c) && (msg_p->mSelectNum == 1)) { + if (m3624 == 0xf0c && msg_p->mSelectNum == 1) { msg_p->mStatus = fopMsgStts_MSG_CONTINUES_e; m3624 = 0xf10; fopMsgM_messageSet(m3624); - g_dComIfG_gameInfo.save.getPlayer().getBagItem().setReserveItemEmpty( - mReadyItemBtn); + g_dComIfG_gameInfo.save.getPlayer().getBagItem().setReserveItemEmpty(mReadyItemBtn); } else { msg_p->mStatus = fopMsgStts_MSG_ENDS_e; } } else if (msg_p->mStatus == fopMsgStts_BOX_CLOSED_e) { msg_p->mStatus = fopMsgStts_MSG_DESTROYED_e; - if ((item != NULL) && ((fopAcM_GetName(item) == PROC_ITEM || - (fopAcM_GetName(item) == PROC_Demo_Item)))) - { + if (item != NULL && (fopAcM_GetName(item) == PROC_ITEM || fopAcM_GetName(item) == PROC_Demo_Item)) { item->dead(); } dComIfGp_event_reset(); @@ -8685,189 +8664,148 @@ int daPy_lk_c::setLegAngle(f32 param_1, int param_2, s16* param_3, s16* param_4) /* 8011A508-8011ABB0 .text footBgCheck__9daPy_lk_cFv */ void daPy_lk_c::footBgCheck() { - /* Nonmatching - cXyz, for loops */ - f32 fVar1; - uint uVar2; - uint uVar3; - J3DModel* pJVar4; - int iVar5; - s16 sVar6; - int iVar7; - int iVar8; - daPy_footData_c* pdVar9; - f32* pfVar10; - int iVar11; - int iVar12; - f32 dVar14; - f32 dVar15; - f32 dVar16; - f32 dVar17; - f32 dVar18; - f32 dVar19; - f32 dVar20; - f32 dVar21; - s16 local_118[2]; - s16 local_114[2]; - int local_110[2]; - f32 local_108[4]; - cXyz local_f4; - cXyz cStack_dc; - cXyz local_ac[2]; - cXyz local_a0[2]; + u32 r28; + f32 sp18[2]; + int sp10[2]; + int i; + f32* r26; - pJVar4 = mpCLModel; - uVar2 = checkModeFlg(ModeFlg_00000001); - mDoMtx_concat(m37B4, pJVar4->getAnmMtx(0x1E), mDoMtx_stack_c::get()); - dVar18 = cM_ssin(m34E0); - dVar17 = cM_scos(m34E0); - pdVar9 = mFootData; - pfVar10 = local_108; - iVar11 = 0; - iVar8 = 0; - dVar19 = 0.0f; - dVar20 = 100.0f; - dVar21 = 30.1f; - dVar15 = C_BG_MIN_HEIGHT; - do { - cStack_dc = ((local_ac[iVar11] + local_a0[iVar11]) * 0.5f); - local_f4 = cStack_dc - pdVar9->field_0x018; - dVar14 = local_f4.abs2XZ(); - if ((dVar14 < dVar20) && (uVar2 != 0)) { - if (pdVar9->field_0x001 != 0) { - pdVar9->field_0x001--; + MtxP r30 = mpCLModel->getBaseTRMtx(); + u32 r29 = checkModeFlg(ModeFlg_00000001); + mDoMtx_concat(m37B4, mpCLModel->getAnmMtx(0x1E), mDoMtx_stack_c::get()); + MtxP r31 = mDoMtx_stack_c::get(); + + daPy_footData_c* r25_r26; + f32 f28 = cM_ssin(m34E0); + f32 f27 = cM_scos(m34E0); + r25_r26 = mFootData; + r26 = sp18; + for (i = 0; i < 2; i++, r25_r26++, r26++) { + cXyz sp74; + cXyz sp68; + cXyz sp5C; + cXyz sp50; + sp74 = (r25_r26->field_0x018 + r25_r26->field_0x00C) * 0.5f; + sp50 = sp74 - r25_r26->field_0x024; + if (sp50.abs2XZ() < 100.0f && r29 != 0) { + if (r25_r26->field_0x001 != 0) { + r25_r26->field_0x001--; } else { - cStack_dc = pdVar9->field_0x024; + sp74 = r25_r26->field_0x024; } } else { - pdVar9->field_0x001 = 5; + r25_r26->field_0x001 = 5; } - pdVar9->field_0x024 = cStack_dc; - dVar16 = - (mDoMtx_stack_c::now[1][3] + (dVar17 * (local_ac[0].y - mDoMtx_stack_c::now[1][3])) + - (dVar18 * (local_ac[0].z - mDoMtx_stack_c::now[2][3]))); - mDoMtx_multVec(pJVar4->getBaseTRMtx(), &local_ac[0], &local_a0[2]); - local_a0[0].set(cStack_dc.x, dVar21 + current.pos.y, cStack_dc.z); - pdVar9->field_0x034.SetPos(&local_a0[0]); - dVar14 = dComIfG_Bgsp()->GroundCross(&pdVar9->field_0x034); - if (checkNoResetFlg0(daPyFlg0_UNK80000000) && current.pos.y > dVar14) { - dVar14 = current.pos.y; - local_110[iVar8] = 1; + r25_r26->field_0x024 = sp74; + f32 f26 = r31[1][3] + (f27 * (sp74.y - r31[1][3])) + (f28 * (sp74.z - r31[2][3])); + mDoMtx_multVec(r30, &sp74, &sp68); + sp5C.set(sp68.x, current.pos.y + 30.1f, sp68.z); + r25_r26->field_0x034.SetPos(&sp5C); + f32 f1 = dComIfG_Bgsp()->GroundCross(&r25_r26->field_0x034); + if (checkNoResetFlg0(daPyFlg0_UNK80000000) && current.pos.y > f1) { + f1 = current.pos.y; + sp10[i] = 1; } else { - local_110[iVar8] = 0; + sp10[i] = 0; } - if ((dVar15 != dVar14) && (local_a0[0].y - dVar14 < 60.2f)) { - *pfVar10 = dVar14; - pdVar9->field_0x000 = 1; + if (f1 != C_BG_MIN_HEIGHT && sp5C.y - f1 < 60.2f) { + *r26 = f1; + r25_r26->field_0x000 = 1; } else { - *pfVar10 = current.pos.y; - pdVar9->field_0x000 = 0; + *r26 = current.pos.y; + r25_r26->field_0x000 = 0; } - if ((checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000))) && - (*pfVar10 <= current.pos.y)) - { - *pfVar10 = current.pos.y; + if (checkNoResetFlg0(daPy_FLG0(daPyFlg0_UNK20000000 | daPyFlg0_UNK80000000)) && *r26 <= current.pos.y) { + *r26 = current.pos.y; } - *pfVar10 = *pfVar10 - (local_a0[0].y - dVar16); - iVar11 = iVar11 + 1; - iVar8 = iVar8 + 4; - pdVar9 = pdVar9 + 1; - pfVar10 = pfVar10 + 1; - } while (iVar11 < 2); - if ((!mAcch.ChkGroundHit()) || - (checkModeFlg(ModeFlg_MIDAIR | ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_IN_SHIP | - ModeFlg_00008000 | ModeFlg_CLIMB | ModeFlg_SWIM | ModeFlg_LADDER | - ModeFlg_CAUGHT))) + *r26 -= (sp74.y - f26); + } + + int r23; + if (!mAcch.ChkGroundHit() || checkModeFlg( + // Note: These flags combine into 0x1045A822. + ModeFlg_MIDAIR | ModeFlg_HANG | ModeFlg_ROPE | ModeFlg_IN_SHIP | ModeFlg_00008000 | + ModeFlg_CLIMB | ModeFlg_SWIM | ModeFlg_LADDER | ModeFlg_CAUGHT + )) { - iVar8 = 2; - } else if (local_108[0] > local_108[1]) { - iVar8 = 1; + r23 = 2; + } else if (sp18[0] > sp18[1]) { + r23 = 1; } else { - iVar8 = 0; + r23 = 0; } - if (((iVar8 == 2) || (mCurProc == daPyProc_DEMO_TOOL_e)) || (std::abs(m35C4) > 1.0f)) { - fVar1 = 0.0f; + f32 f1; + if (r23 == 2 || mCurProc == daPyProc_DEMO_TOOL_e || std::abs(m35C4) > 1.0f) { + f1 = 0.0f; } else { - if (local_108[0] > local_108[1]) { - local_108[0] = local_108[1]; + if (sp18[0] > sp18[1]) { + f1 = sp18[1]; + } else { + f1 = sp18[0]; } - fVar1 = local_108[0] - current.pos.y; + f1 -= current.pos.y; } - cLib_addCalc(&m35B8, fVar1, 0.5f, 7.5f, 2.5f); - pJVar4->getBaseTRMtx()[1][3] += m35B8; + cLib_addCalc(&m35B8, f1, 0.5f, 7.5f, 2.5f); + r30[1][3] += m35B8; m37B4[1][3] = m37B4[1][3] - m35B8; - fVar1 = 0.0f; - if (iVar8 == 2) { - iVar8 = 0; - iVar11 = 0; - iVar12 = 2; - do { - local_118[iVar11 + 4] = 0; - local_114[iVar11] = 0; - mFootData[iVar8].field_0x030 = fVar1; - iVar8 = iVar8 + 0x118; - iVar11 = iVar11 + 2; - iVar12 = iVar12 + -1; - } while (iVar12 != 0); - } else { - uVar3 = iVar8 + 1U & 1; - mFootData[iVar8].field_0x030 = 0.0f; - if (!setLegAngle(local_108[iVar8] - pJVar4->getBaseTRMtx()[1][3], iVar8, &local_118[iVar8], - &local_114[iVar8])) - { - local_118[iVar8] = 0; - local_114[iVar8] = 0; + s16 sp0C[2]; + s16 sp08[2]; + if (r23 == 2) { + for (int i = 0; i < 2; i++) { + sp0C[i] = 0; + sp08[i] = 0; + mFootData[i].field_0x030 = 0.0f; } - fVar1 = local_108[uVar3] - pJVar4->getBaseTRMtx()[1][3]; - if ((fVar1 > 0.0f) || (uVar2 != 0)) { - pdVar9[0].field_0x030 = 0.3f * fVar1; - if (!setLegAngle(0.7f * fVar1, uVar3, &local_118[uVar3], &local_114[uVar3])) { - local_118[uVar3] = 0; - local_114[uVar3] = 0; + } else { + r28 = r23 + 1 & 1; + r25_r26 = &mFootData[r28]; + daPy_footData_c* temp_foot_data = &mFootData[r23]; + temp_foot_data->field_0x030 = 0.0f; + if (!setLegAngle(sp18[r23] - r30[1][3], r23, &sp0C[r23], &sp08[r23])) { + sp0C[r23] = 0; + sp08[r23] = 0; + } + f32 f1 = sp18[r28] - r30[1][3]; + if (f1 > 0.0f || r29 != 0) { + r25_r26->field_0x030 = 0.3f * f1; + if (!setLegAngle(0.7f * f1, r28, &sp0C[r28], &sp08[r28])) { + sp0C[r28] = 0; + sp08[r28] = 0; } } else { - pdVar9[0].field_0x030 = 0.0f; - local_118[uVar3] = 0; - local_114[uVar3] = 0; + r25_r26->field_0x030 = 0.0f; + sp0C[r28] = 0; + sp08[r28] = 0; } } - iVar12 = 0; - iVar8 = 0; - iVar11 = 0; - do { - iVar7 = pdVar9[iVar11].field_0x008; - iVar5 = local_118[iVar8 + 4]; - if (iVar7 * iVar5 < 0 && abs(iVar5 - iVar7) >= 0x8000) { - sVar6 = local_118[iVar8 + 4]; - if (sVar6 >= 0) { - local_118[iVar8 + 4] = sVar6 + -0x4000; + + for (i = 0; i < 2; i++) { + r25_r26 = &mFootData[i]; + if (r25_r26->field_0x008 * sp0C[i] < 0 && abs(sp0C[i] - r25_r26->field_0x008) >= 0x8000) { + if (sp0C[i] >= 0) { + sp0C[i] -= 0x4000; } else { - local_118[iVar8 + 4] = sVar6 + 0x4000; + sp0C[i] += 0x4000; } } - cLib_addCalcAngleS(&pdVar9[iVar11].field_0x008, local_118[iVar8 + 4], 2, 0x1800, 0x10); - cLib_addCalcAngleS(&pdVar9[iVar11].field_0x006, local_118[iVar8 + 0], 2, 0x1800, 0x10); - pdVar9[iVar11].field_0x00A = pdVar9[iVar11].field_0x006 - pdVar9[iVar11].field_0x008; - pdVar9[iVar11].field_0x002 = -(m34E0 + pdVar9[iVar11].field_0x006); - iVar12 = iVar12 + 1; - iVar8 = iVar8 + 2; - iVar11 = iVar11 + 0x118; - } while (iVar12 < 2); - pdVar9 = mFootData; - iVar11 = 0; - iVar8 = 0; - do { - if (((local_110[iVar8] == 0) && (pdVar9->field_0x000 != 0)) && (uVar2 != 0)) { - sVar6 = getGroundAngle(&pdVar9->field_0x034, shape_angle.y); - pdVar9->field_0x002 = pdVar9->field_0x002 + sVar6; - sVar6 = getGroundAngle(&pdVar9->field_0x034, shape_angle.y + -0x4000); + cLib_addCalcAngleS(&r25_r26->field_0x008, sp0C[i], 2, 0x1800, 0x10); + cLib_addCalcAngleS(&r25_r26->field_0x006, sp08[i], 2, 0x1800, 0x10); + r25_r26->field_0x00A = r25_r26->field_0x006 - r25_r26->field_0x008; + r25_r26->field_0x002 = -(m34E0 + r25_r26->field_0x006); + } + + r25_r26 = mFootData; + for (i = 0; i < 2; i++, r25_r26++) { + s16 r4; + if (sp10[i] == 0 && r25_r26->field_0x000 != 0 && r29 != 0) { + r4 = getGroundAngle(&r25_r26->field_0x034, shape_angle.y); + r25_r26->field_0x002 = r25_r26->field_0x002 + r4; + r4 = getGroundAngle(&r25_r26->field_0x034, shape_angle.y + -0x4000); } else { - sVar6 = 0; + r4 = 0; } - cLib_addCalcAngleS(&pdVar9->field_0x004, sVar6, 2, 0x1800, 0x10); - iVar11 = iVar11 + 1; - iVar8 = iVar8 + 4; - pdVar9 = pdVar9 + 1; - } while (iVar11 < 2); + cLib_addCalcAngleS(&r25_r26->field_0x004, r4, 2, 0x1800, 0x10); + } } /* 8011ABB0-8011AC78 .text setWaterY__9daPy_lk_cFv */ @@ -9303,222 +9241,214 @@ void daPy_lk_c::checkOriginalHatAnimation() { /* 8011BEA4-8011CBA4 .text setHatAngle__9daPy_lk_cFv */ void daPy_lk_c::setHatAngle() { - /* Nonmatching - cXyz */ - f32 fVar1; - s16 sVar2; - s16 sVar3; - bool bVar4; - bool bVar5; - BOOL bVar6; - s16 sVar8; - s16 sVar9; - s16 sVar10; - s16 sVar11; - MtxP pMVar12; - s16 uVar14; - f32 dVar17; - f32 dVar18; - f32 dVar19; - f32 dVar20; - f32 local_158; - cXyz cStack_13c; - cXyz local_130; - f32 local_124; - f32 local_11c; - cXyz VStack_10c; - f32 local_fc; - cXyz local_e8; - cXyz local_dc; - cXyz local_d0; - cXyz local_c4; - - if ((m_old_fdata->getOldFrameFlg() == false) || (checkNoResetFlg1(daPyFlg1_FREEZE_STATE))) { + if (m_old_fdata->getOldFrameFlg() == false || checkNoResetFlg1(daPyFlg1_FREEZE_STATE)) { return; } - pMVar12 = mpCLModel->getAnmMtx(0xF); - bVar6 = true; - bVar5 = true; - bVar4 = true; - if ((dComIfGp_evmng_startCheck(l_tact_wind_change_event_label)) || - (!dComIfGp_evmng_startCheck(l_tact_wind_change_event_label2))) - { - bVar4 = false; + + cXyz spAC; + cXyz spA0; + cXyz sp94; + cXyz sp88; + cXyz sp7C; + cXyz sp70; + cXyz sp64; + + s16 r25; + s16 r26; + + s16 r27; + s16 r26_2; + + s16 r26_3; + s16 r27_2; + + s16 r26_4; + s16 r27_3; + + MtxP head_jnt_mtx = mpCLModel->getAnmMtx(0xF); + BOOL r31 = dComIfGp_evmng_startCheck(l_tact_wind_change_event_label) || + dComIfGp_evmng_startCheck(l_tact_wind_change_event_label2) || + mCurProc == daPyProc_FAN_GLIDE_e || + mWindCyl.ChkTgHit(); + + mDoMtx_multVec(head_jnt_mtx, &l_head_center_offset, &sp70); + mDoMtx_multVec(head_jnt_mtx, &l_eye_offset, &sp64); + cXyz sp58 = sp64 - sp70; + s16 r3_3; + r3_3 = cM_atan2s(sp58.x, sp58.z); + if (sp70.y - head_jnt_mtx[1][3] < 0.0f) { + r3_3 += 0x8000; } - if ((!bVar4) && (mCurProc != daPyProc_FAN_GLIDE_e)) { - bVar5 = false; + f32 f31; + f31 = cM_ssin(r3_3); + f32 f30; + f30 = cM_scos(r3_3); + MtxP hat_a_jnt_mtx = mpCLModel->getAnmMtx(0x1A); + spA0.x = hat_a_jnt_mtx[0][3]; + spA0.y = hat_a_jnt_mtx[1][3]; + spA0.z = hat_a_jnt_mtx[2][3]; + f32 sp18; + dKyw_get_AllWind_vec(&spA0, &spAC, &sp18); + if (r31) { + sp18 = 1.0f; } - if ((!bVar5) && (!mWindCyl.ChkTgHit())) { - bVar6 = false; - } - mDoMtx_multVec(pMVar12, &l_head_center_offset, &VStack_10c); - mDoMtx_multVec(pMVar12, &l_eye_offset, &VStack_10c); - local_130 = local_130 - VStack_10c; - uVar14 = cM_atan2s(local_130.x, local_130.z); - if (local_fc - pMVar12[1][3] < 0.0f) { - uVar14 += 0x8000; - } - dVar20 = cM_ssin(uVar14); - dVar19 = cM_scos(uVar14); - pMVar12 = mpCLModel->getAnmMtx(0x1A); - local_d0.x = pMVar12[0][3]; - local_d0.y = pMVar12[1][3]; - local_d0.z = pMVar12[2][3]; - dKyw_get_AllWind_vec(&local_d0, &local_c4, &local_158); - if (bVar6) { - local_158 = 1.0f; - } - dVar18 = ((local_158 * local_158) * 25.0f); - mDoMtx_multVecSR(mpCLModel->getAnmMtx(0xF), &l_neck_front, &VStack_10c); - mDoMtx_multVecSR(mpCLModel->getAnmMtx(0xF), &l_neck_top, &VStack_10c); - sVar8 = m3528; - sVar9 = m352A; - if (local_e8.x < 0.0f) { - dVar17 = local_130.absXZ(); - m3528 = cM_atan2s(local_e8.y, -dVar17); - m352A = cM_atan2s(local_e8.x, local_e8.z) + 0x8000; + f32 f29 = (sp18 * sp18) * 25.0f; + mDoMtx_multVecSR(mpCLModel->getAnmMtx(0xF), &l_neck_front, &sp88); + mDoMtx_multVecSR(mpCLModel->getAnmMtx(0xF), &l_neck_top, &sp7C); + + r25 = m3528; + r26 = m352A; + if (sp7C.y < 0.0f) { + m3528 = cM_atan2s(sp88.y, -sp88.absXZ()); + m352A = cM_atan2s(sp88.x, sp88.z) + 0x8000; } else { - dVar17 = local_130.absXZ(); - m3528 = cM_atan2s(local_e8.y, dVar17); - m352A = cM_atan2s(local_e8.x, local_e8.z); + m3528 = cM_atan2s(sp88.y, sp88.absXZ()); + m352A = cM_atan2s(sp88.x, sp88.z); } - if (std::abs(local_e8.y) > 0.7f) { - m352A = sVar9; + if (std::abs(sp88.y) > 0.7f) { + m352A = r26; } - sVar8 = (s16)(m3528 - sVar8) >> 1; - sVar9 = (s16)(m352A - sVar9) >> 1; - if (sVar8 > 0x200) { - sVar8 = 0x200; - } else if (sVar8 < -0x200) { - sVar8 = -0x200; + s16 r28_r29; + r28_r29 = (s16)(m3528 - r25) >> 1; + s16 r25_r28; + r25_r28 = (s16)(m352A - r26) >> 1; + if (r28_r29 > 0x200) { + r28_r29 = 0x200; + } else if (r28_r29 < -0x200) { + r28_r29 = -0x200; } - if (sVar9 > 0x800) { - sVar9 = 0x800; - } else if (sVar9 < -0x800) { - sVar9 = -0x800; + if (r25_r28 > 0x800) { + r25_r28 = 0x800; + } else if (r25_r28 < -0x800) { + r25_r28 = -0x800; } - local_dc.x = m3718.x - local_d0.x; - local_dc.y = (m3718.y - local_d0.y) - 7.5f; - local_dc.z = m3718.z - local_d0.z; + sp94.x = m3718.x - spA0.x; + sp94.y = (m3718.y - spA0.y) - 7.5f; + sp94.z = m3718.z - spA0.z; if (!(checkModeFlg(ModeFlg_WHIDE)) || (checkGrabWear())) { - cStack_13c = local_dc * dVar18; - local_dc += cStack_13c; + sp94 += spAC * f29; } - if (std::abs(local_dc.x) < 0.01f) { - local_dc.x = 0.0f; + if (std::abs(sp94.x) < 0.01f) { + sp94.x = 0.0f; } - if (std::abs(local_dc.z) < 0.01f) { - local_dc.z = 0.0f; + if (std::abs(sp94.z) < 0.01f) { + sp94.z = 0.0f; } - sVar2 = m34F6; - sVar3 = m34F8; - dVar17 = ((local_dc.z * dVar19) + (local_dc.x * dVar20)); - sVar11 = cM_atan2s(-dVar17, -local_dc.y); + r26_2 = m34F6; + r27 = m34F8; + f32 f28; + f28 = (sp94.z * f30) + (sp94.x * f31); + s16 r4_3; + r4_3 = cM_atan2s(-f28, -sp94.y); if (m34F6 < 0) { - sVar11 = 0x7800; - } else if ((sVar11 < 0x800) && (-0x7800 < sVar11)) { - sVar11 = 0x800; - } else if ((0x7800 < sVar11) || (sVar11 <= -0x7800)) { - sVar11 = 0x7800; + r4_3 = 0x7800; + } else if ((r4_3 < 0x800) && (-0x7800 < r4_3)) { + r4_3 = 0x800; + } else if ((0x7800 < r4_3) || (r4_3 <= -0x7800)) { + r4_3 = 0x7800; } - cLib_addCalcAngleS2(&m34F6, sVar11, 5, 0x400); - m34F6 = m3502 + sVar8 + m34F6; - sVar11 = m3528; - sVar10 = m34F6 + -0x4000 + sVar11; - if (sVar10 < -0x3000) { - m34F6 = 0x1000 - sVar11; - } else if (0x3800 < sVar10) { - m34F6 = 0x7800 - sVar11; + cLib_addCalcAngleS2(&m34F6, r4_3, 5, 0x400); + m34F6 = m3502 + r28_r29 + m34F6; + s16 r4_4 = m3528; + s16 r0_2; + r0_2 = m34F6 + -0x4000 + r4_4; + if (r0_2 < -0x3000) { + m34F6 = 0x1000 - r4_4; + } else if (r0_2 > 0x3800) { + m34F6 = 0x7800 - r4_4; } - dVar17 = std::sqrtf((dVar17 * dVar17) + local_dc.y * local_dc.y); - sVar11 = cM_atan2s(-((local_dc.x * dVar19) - (local_dc.z * dVar20)), dVar17); - if (sVar11 > 0x3800) { - sVar11 = 0x3800; - } else if (sVar11 < -0x3800) { - sVar11 = -0x3800; + f32 f0_2 = std::sqrtf((f28 * f28) + sp94.y * sp94.y); + s16 r4_5 = cM_atan2s(-((sp94.x * f30) - (sp94.z * f31)), f0_2); + if (r4_5 > 0x3800) { + r4_5 = 0x3800; + } else if (r4_5 < -0x3800) { + r4_5 = -0x3800; } - cLib_addCalcAngleS2(&m34F8, sVar11, 5, 0x400); - m34F8 = m34F8 + (m3504 - sVar9); + cLib_addCalcAngleS2(&m34F8, r4_5, 5, 0x400); + m34F8 = m34F8 + (m3504 - r25_r28); if (m34F8 > 0x3800) { m34F8 = 0x3800; } else if (m34F8 < -0x3800) { m34F8 = -0x3800; } - m3502 = (s16)((m34F6 - sVar2) * 0.2f); - m3504 = (s16)((m34F8 - sVar3) * 0.2f); - m34F8 = m34F8 - (m34F6 - sVar2); - m34FC = m34FC - (m34FA - sVar3); - sVar2 = m34FA; - sVar3 = m34FC; + m3502 = (s16)(m34F6 - r26_2) * 0.2f; + m3504 = (s16)(m34F8 - r27) * 0.2f; + s16 r3 = m34F6 - r26_2; + s16 r4 = m34F8 - r27; + m34FA -= r3; + m34FC -= r4; + r27_2 = m34FA; + r26_3 = m34FC; cLib_addCalcAngleS2(&m34FA, 0, 5, 0x400); cLib_addCalcAngleS2(&m34FC, 0, 5, 0x400); - m34FA = m3506 + sVar8 + m34FA; - m34FC = m34FC + (m3508 - sVar9); + m34FA = m3506 + r28_r29 + m34FA; + m34FC = m34FC + (m3508 - r25_r28); if (m34FA > 0x1000) { m34FA = 0x1000; } else if (m34FA < -0x800) { m34FA = -0x800; } - sVar11 = m34FC; - sVar10 = m34F8 + sVar11; - if (sVar10 > 0x3800) { - m34FC = 0x3800 - sVar11; - } else if (sVar10 < -0x3800) { - m34FC = -0x3800 - sVar11; + s16 r0 = m34FC + m34F8; + if (r0 > 0x3800) { + m34FC = 0x3800 - m34F8; + } else if (r0 < -0x3800) { + m34FC = -0x3800 - m34F8; } - m3506 = (s16)((m34FA - sVar2) * 0.2f); - m3508 = (s16)((m34FC - sVar3) * 0.2f); - m34FC = m34FC - (m34FA - sVar2); - m3500 = m3500 - (m34FE - sVar3); - sVar2 = m34FE; - sVar3 = m3500; + m3506 = (m34FA - r27_2) * 0.2f; + m3508 = (m34FC - r26_3) * 0.2f; + r3 = m34FA - r27_2; + r4 = m34FC - r26_3; + m34FE -= r3; + m3500 -= r4; + r27_3 = m34FE; + r26_4 = m3500; cLib_addCalcAngleS2(&m34FE, 0, 5, 0x400); cLib_addCalcAngleS2(&m3500, 0, 5, 0x400); - m34FE = m350A + sVar8 + m34FE; - m3500 = m3500 + (m350C - sVar9); + m34FE = m350A + r28_r29 + m34FE; + m3500 = m3500 + (m350C - r25_r28); if (m34FE > 0x1000) { m34FE = 0x1000; } else if (m34FE < -0x800) { m34FE = -0x800; } - sVar8 = m34F8; - sVar9 = m3500; - sVar11 = m34FC + sVar9 + sVar8; - if (sVar11 > 0x3800) { - m3500 = (0x3800 - sVar8) - sVar9; - } else if (sVar11 < -0x3800) { - m3500 = (-0x3800 - sVar8) - sVar9; + s16 r4_6 = m3500 + m34FC + m34F8; + if (r4_6 > 0x3800) { + m3500 = (0x3800 - m34F8) - m34FC; + } else if (r4_6 < -0x3800) { + m3500 = (-0x3800 - m34F8) - m34FC; } - m350A = (s16)((m34FE - sVar2) * 0.2f); - m350C = (s16)((m3500 - sVar3) * 0.2f); - dVar17 = m3718.abs(local_d0); - dVar18 = ((dVar17 * 0.65f) / (dVar17 + 30.0f)); - if (dVar18 > 1.0f) { - dVar18 = 1.0f; + m350A = (s16)((m34FE - r27_3) * 0.2f); + m350C = (s16)((m3500 - r26_4) * 0.2f); + f32 f28_2 = (f29 + (m3718.abs(spA0) * 0.65f)) / 30.0f; + if (f28_2 > 1.0f) { + f28_2 = 1.0f; } - dVar17 = dVar18; - if (bVar6 && (!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES))) { - dVar18 = 3.5f; - dVar17 = 1.0f; + f32 f29_2; + f29_2 = f28_2; + if (r31 && (!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES))) { + f28_2 = 3.5f; + f29_2 = 1.0f; mDoAud_seStart(JA_SE_LK_HAT_SWING, &eyePos, 0, mReverb); } - sVar8 = (s16)(1500.0f + (4060.0f * dVar18)); - m3514 = m3514 + sVar8; - fVar1 = cM_scos(m3514); - m350E = (s16)((2280.0f * dVar17) * fVar1); - m3510 = (s16)((3908.0f * dVar17) * cM_scos(m3514-3.0f * (sVar8))); - m3512 = (s16)((7568.0f * dVar17) * cM_scos(m3514-6.0f * (sVar8))); - m3718 = local_d0; + s16 r25_2 = (s16)(1500.0f + (4060.0f * f28_2)); + m3514 = m3514 + r25_2; + f32 f0 = cM_scos(m3514); + m350E = (s16)((2280.0f * f29_2) * f0); + m3510 = (s16)((3908.0f * f29_2) * cM_scos(m3514 - 3.0f * r25_2)); + m3512 = (s16)((7568.0f * f29_2) * cM_scos(m3514 - 6.0f * r25_2)); + m3718 = spA0; if (checkModeFlg(ModeFlg_SWIM)) { m351A = 0; m3516 = 0; m3518 = 0; } else { - fVar1 = 0.5f + 0.25f * (1.0f + fVar1); - local_124 = (local_c4.x * dVar19) - (local_c4.y * dVar20); - local_11c = (local_c4.z * dVar20) + (local_c4.y * dVar19); - m3516 = (s16)((fVar1 * -8192.0f) * local_124 * local_158); + f32 f5 = 0.5f + 0.25f * (1.0f + f0); + cXyz sp4C; + sp4C.x = (spAC.x * f30) - (spAC.z * f31); + sp4C.z = (spAC.x * f31) + (spAC.z * f30); + m3516 = (s16)(-8192.0f * sp4C.x * sp18 * f5); m3518 = m3516; - m351A = (s16)((fVar1 * -8192.0f) * local_11c * local_158); + m351A = (s16)(-8192.0f * sp4C.z * sp18 * f5); if (m3516 > 0x1000) { m3516 = 0x1000; } else if (m3518 < -0x1000) { @@ -9529,33 +9459,33 @@ void daPy_lk_c::setHatAngle() { /* 8011CBA4-8011CCF4 .text setMoveSlantAngle__9daPy_lk_cFv */ void daPy_lk_c::setMoveSlantAngle() { - f32 fVar1; - s16 sVar2; - - fVar1 = std::abs(speedF / mMaxNormalSpeed); + f32 fVar1 = std::abs(speedF / mMaxNormalSpeed); if (checkModeFlg(ModeFlg_02000000)) { mBodyAngle.z = 0; m351C = 0; - } else { - if ((mCurProc == 6) && (fVar1 > daPy_HIO_move_c0::m.field_0x4C)) { - cLib_addCalcAngleS(&m351C, - daPy_HIO_move_c0::m.field_0x50 * (s16)(m34DE - shape_angle.y) * - ((fVar1 - daPy_HIO_move_c0::m.field_0x4C) / - (1.0f - daPy_HIO_move_c0::m.field_0x4C)), - daPy_HIO_move_c0::m.field_0xC, daPy_HIO_move_c0::m.field_0x8, - daPy_HIO_move_c0::m.field_0xA); - } else { - sVar2 = m351C * daPy_HIO_move_c0::m.field_0x54; - if (sVar2 == 0) { - m351C = 0; - } else { - m351C = m351C - sVar2; - } - } - shape_angle.z = m351C >> 1; - mBodyAngle.z = shape_angle.z; return; } + + if (mCurProc == daPyProc_MOVE_e && fVar1 > daPy_HIO_move_c0::m.field_0x4C) { + cLib_addCalcAngleS( + &m351C, + daPy_HIO_move_c0::m.field_0x50 * (s16)(m34DE - shape_angle.y) * + ((fVar1 - daPy_HIO_move_c0::m.field_0x4C) / (1.0f - daPy_HIO_move_c0::m.field_0x4C)), + daPy_HIO_move_c0::m.field_0xC, + daPy_HIO_move_c0::m.field_0x8, + daPy_HIO_move_c0::m.field_0xA + ); + } else { + s16 sVar2 = m351C * daPy_HIO_move_c0::m.field_0x54; + if (sVar2 == 0) { + m351C = 0; + } else { + m351C = m351C - sVar2; + } + } + + shape_angle.z = m351C >> 1; + mBodyAngle.z = shape_angle.z; } /* 8011CCF4-8011CDB4 .text setWaistAngle__9daPy_lk_cFv */ @@ -9592,23 +9522,22 @@ void daPy_lk_c::setWorldMatrix() { mDoMtx_stack_c::transS(current.pos.x, current.pos.y + m35C4 + m3608, current.pos.z); ship = dComIfGp_getShipActor(); - if ((dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e)) && (ship != NULL)) { + if (dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && ship != NULL) { mDoMtx_stack_c::ZXYrotM(m353C, ship->shape_angle.y, m353E); mDoMtx_stack_c::YrotM(shape_angle.y - ship->shape_angle.y); mDoMtx_copy(mDoMtx_stack_c::get(), afStack_38); bVar1 = true; + } else if (checkModeFlg(ModeFlg_CLIMB)) { + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); + mDoMtx_stack_c::transM(0.0f, 0.0f, 20.5f); + mDoMtx_stack_c::YrotM(m34EC); + mDoMtx_stack_c::transM(0.0f, 0.0f, -20.5f); + bVar1 = false; } else { - if (checkModeFlg(ModeFlg_CLIMB)) { - mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); - mDoMtx_stack_c::transM(0.0f, 0.0f, 20.5f); - mDoMtx_stack_c::YrotM(m34EC); - mDoMtx_stack_c::transM(0.0f, 0.0f, -20.5f); - bVar1 = false; - } else { - mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y + m34EC, shape_angle.z); - bVar1 = false; - } + mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y + m34EC, shape_angle.z); + bVar1 = false; } + mpCLModel->setBaseScale(scale); mpCLModel->setBaseTRMtx(mDoMtx_stack_c::get()); mDoMtx_stack_c::inverse(); @@ -9779,63 +9708,15 @@ f32 daPy_lk_c::getBlurTopRate() { /* 8011D788-8011EC0C .text setCollision__9daPy_lk_cFv */ void daPy_lk_c::setCollision() { - /* Nonmatching - regalloc */ - static const GXColor n_roll_prm0 = {0xC8, 0xFF, 0x40, 0xFF}; - static const GXColor n_roll_prm1 = {0xFF, 0xFF, 0xDC, 0xFF}; - static const GXColor n_roll_env = {0xC8, 0xFF, 0x78, 0xFF}; - static const GXColor nm_roll_prm0 = {0xC8, 0xFF, 0x40, 0xFF}; - static const GXColor nm_roll_prm1 = {0xFF, 0xFF, 0xDC, 0xFF}; - static const GXColor nm_roll_env = {0xC8, 0xFF, 0x78, 0xFF}; - static const GXColor fm_roll_prm0 = {0xC8, 0xFF, 0x40, 0xFF}; - static const GXColor fm_roll_prm1 = {0xFF, 0xFF, 0xDC, 0xFF}; - static const GXColor fm_roll_env = {0xC8, 0xFF, 0x78, 0xFF}; - static const GXColor n_turn_prm0 = {0x40, 0x60, 0x40, 0xFF}; - static const GXColor n_turn_prm1 = {0xDC, 0xE6, 0xDC, 0xFF}; - static const GXColor n_turn_env = {0xA0, 0xE6, 0xA0, 0xFF}; - static const GXColor nm_turn_prm0 = {0x40, 0x40, 0x60, 0xFF}; - static const GXColor nm_turn_prm1 = {0xDC, 0xDC, 0xE6, 0xFF}; - static const GXColor nm_turn_env = {0xA0, 0xA0, 0xE6, 0xFF}; - static const GXColor fm_turn_prm0 = {0x40, 0x40, 0xFF, 0xFF}; - static const GXColor fm_turn_prm1 = {0xDC, 0xDC, 0xFF, 0xFF}; - static const GXColor fm_turn_env = {0x78, 0x78, 0xFF, 0xFF}; - f32 fVar3; - f32 fVar4; - BOOL bVar5; - u32 uVar6; - int iVar12; - int iVar13; - short sVar16; - cM3dGPla* pfVar15; - cXyz* pcVar23; - const GXColor* p_Var24; - const GXColor* p_Var20; - const GXColor* p_Var22; - JPABaseEmitter* emitter1; - JPABaseEmitter* emitter2; - JPABaseEmitter* emitter3; - MtxP pMVar25; - MtxP pMVar26; - MtxP pMVar27; - f32 dVar27; - f32 in_f31; - cXyz afStack_88; - cXyz afStack_a0; - cXyz local_ac; - cXyz local_b8; - cXyz local_c4; - cXyz local_e8; - cXyz local_100; - cXyz local_10c; - cXyz local_118; - - pMVar25 = mpCLModel->getAnmMtx(0); - pMVar26 = mpCLModel->getAnmMtx(0x23); - pMVar27 = mpCLModel->getAnmMtx(0x28); - afStack_88.x = 0.5f * (pMVar25[0][3] + mpCLModel->getAnmMtx(0xE)[0][3]); - afStack_88.z = 0.5f * (pMVar25[2][3] + mpCLModel->getAnmMtx(0xE)[2][3]); + MtxP link_root_mtx = mpCLModel->getAnmMtx(0x00); + MtxP ltoe_jnt_mtx = mpCLModel->getAnmMtx(0x23); + MtxP rtoe_jnt_mtx = mpCLModel->getAnmMtx(0x28); + cXyz spD0; + spD0.x = 0.5f * (link_root_mtx[0][3] + mpCLModel->getAnmMtx(0xE)[0][3]); + spD0.z = 0.5f * (link_root_mtx[2][3] + mpCLModel->getAnmMtx(0xE)[2][3]); if (mCurProc == daPyProc_JUMP_CUT_e) { - afStack_88.x -= 15.0f * cM_ssin(shape_angle.y); - afStack_88.z -= 15.0f * cM_scos(shape_angle.y); + spD0.x -= 15.0f * cM_ssin(shape_angle.y); + spD0.z -= 15.0f * cM_scos(shape_angle.y); } if (checkGrabWear()) { mCyl.SetR(50.0f); @@ -9848,44 +9729,39 @@ void daPy_lk_c::setCollision() { mCyl.OffCoSPrmBit(cCcD_CoSPrm_NoCrr_e); } if (checkModeFlg(ModeFlg_CRAWL)) { - fVar3 = cM_ssin(shape_angle.x); + f32 fVar3 = cM_ssin(shape_angle.x); if (fVar3 >= 0.0f) { - afStack_88.y = current.pos.y - 50.0f * fVar3; + spD0.y = current.pos.y - 50.0f * fVar3; mCyl.SetH(50.0f + (35.0f * fVar3)); } else { - afStack_88.y = current.pos.y + 25.0f * fVar3; + spD0.y = current.pos.y + 25.0f * fVar3; mCyl.SetH(50.0f - (65.0f * fVar3)); } + } else if (mCurProc == daPyProc_FRONT_ROLL_e) { + spD0.y = current.pos.y; + mCyl.SetH(81.25f); + } else if (mCurProc == daPyProc_BACK_JUMP_e) { + spD0.y = 30.0f + current.pos.y; + mCyl.SetH(81.25f); + } else if ((mCurProc == daPyProc_BT_JUMP_CUT_e) || (mCurProc == daPyProc_BT_JUMP_e && (speed.y <= 0.0f))) { + spD0.y = link_root_mtx[1][3]; + mCyl.SetH(125.0f - (spD0.y - current.pos.y)); + mCyl.SetR(22.5f); } else { - if (mCurProc == daPyProc_FRONT_ROLL_e) { - afStack_88.y = current.pos.y; - mCyl.SetH(81.25f); - } else if (mCurProc == daPyProc_BACK_JUMP_e) { - afStack_88.y = 30.0f + current.pos.y; - mCyl.SetH(81.25f); - } else if ((mCurProc == daPyProc_BT_JUMP_CUT_e) || - ((mCurProc == daPyProc_BT_JUMP_e && (speed.y <= 0.0f)))) - { - afStack_88.y = pMVar25[1][3]; - mCyl.SetH(125.0f - (afStack_88.y - current.pos.y)); - mCyl.SetR(22.5f); + if (mCurProc == daPyProc_ROPE_SWING_e) { + spD0.y = (ltoe_jnt_mtx[1][3] > link_root_mtx[1][3]) ? link_root_mtx[1][3] : ltoe_jnt_mtx[1][3]; } else { - if (mCurProc == daPyProc_ROPE_SWING_e) { - afStack_88.y = (pMVar26[1][3] > pMVar25[1][3]) ? pMVar25[1][3] : pMVar26[1][3]; - } else { - afStack_88.y = (pMVar26[1][3] > pMVar27[1][3]) ? pMVar27[1][3] : pMVar26[1][3]; - } - mCyl.SetH(40.1f + (mpCLModel->getAnmMtx(0xE)[1][3] - afStack_88.y)); + spD0.y = (ltoe_jnt_mtx[1][3] > rtoe_jnt_mtx[1][3]) ? rtoe_jnt_mtx[1][3] : ltoe_jnt_mtx[1][3]; } + mCyl.SetH(40.1f + (mpCLModel->getAnmMtx(0xE)[1][3] - spD0.y)); } - mCyl.SetC(afStack_88); + mCyl.SetC(spD0); if (checkModeFlg(ModeFlg_DAMAGE) || - (((checkGuardSlip()) || (mCurProc == daPyProc_VOMIT_WAIT_e)) || - ((s16)mDamageWaitTimer != 0))) + (((checkGuardSlip()) || (mCurProc == daPyProc_VOMIT_WAIT_e)) || (mDamageWaitTimer != 0))) { mCyl.OffTgSetBit(); mCyl.ClrTgHit(); - } else { + } else if (mDamageWaitTimer == 0) { mCyl.OnTgSetBit(); } dComIfG_Ccsp()->Set(&mCyl); @@ -9893,14 +9769,17 @@ void daPy_lk_c::setCollision() { // in this function) breaks the match. // dComIfG_Ccsp()->SetMass(&mCyl, 1); g_dComIfG_gameInfo.play.mCcS.SetMass(&mCyl, 1); - mWindCyl.SetC(afStack_88); + mWindCyl.SetC(spD0); mWindCyl.SetH(mCyl.GetH()); mWindCyl.SetR(mCyl.GetR()); dComIfG_Ccsp()->Set(&mWindCyl); - mLightCyl.SetC(afStack_88); + mLightCyl.SetC(spD0); mLightCyl.SetH(mCyl.GetH()); mLightCyl.SetR(mCyl.GetR()); dComIfG_Ccsp()->Set(&mLightCyl); + + cXyz spC4; + cXyz spB8; if (checkResetFlg0(daPyRFlg0_UNK2)) { if (checkResetFlg0(daPyRFlg0_UNK1)) { setCutWaterSplash(); @@ -9922,17 +9801,38 @@ void daPy_lk_c::setCollision() { if (((mCurProc != daPyProc_CUT_F_e) && (mCurProc != daPyProc_BT_VERTICAL_JUMP_CUT_e)) && (mCurProc != daPyProc_FAN_SWING_e)) { - if ((mCurProc == daPyProc_HAMMER_FRONT_SWING_e) || - (mCurProc == daPyProc_WEAPON_FRONT_SWING_e)) - { + int iVar12; + if ((mCurProc == daPyProc_HAMMER_FRONT_SWING_e) || (mCurProc == daPyProc_WEAPON_FRONT_SWING_e)) { iVar12 = 2.5f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); } else { iVar12 = 10.0f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame(); } - mSwBlur.initSwBlur(mpCLModel->getBaseTRMtx(), iVar12, getBlurTopRate(), - getSwordBlurColor()); + mSwBlur.initSwBlur(mpCLModel->getBaseTRMtx(), iVar12, getBlurTopRate(), getSwordBlurColor()); if ((mCurProc == daPyProc_CUT_TURN_e) || (mCurProc == daPyProc_CUT_ROLL_e)) { + static const GXColor n_roll_prm0 = {0xC8, 0xFF, 0x40, 0xFF}; + static const GXColor n_roll_prm1 = {0xFF, 0xFF, 0xDC, 0xFF}; + static const GXColor n_roll_env = {0xC8, 0xFF, 0x78, 0xFF}; + static const GXColor nm_roll_prm0 = {0xC8, 0xFF, 0x40, 0xFF}; + static const GXColor nm_roll_prm1 = {0xFF, 0xFF, 0xDC, 0xFF}; + static const GXColor nm_roll_env = {0xC8, 0xFF, 0x78, 0xFF}; + static const GXColor fm_roll_prm0 = {0xC8, 0xFF, 0x40, 0xFF}; + static const GXColor fm_roll_prm1 = {0xFF, 0xFF, 0xDC, 0xFF}; + static const GXColor fm_roll_env = {0xC8, 0xFF, 0x78, 0xFF}; + static const GXColor n_turn_prm0 = {0x40, 0x60, 0x40, 0xFF}; + static const GXColor n_turn_prm1 = {0xDC, 0xE6, 0xDC, 0xFF}; + static const GXColor n_turn_env = {0xA0, 0xE6, 0xA0, 0xFF}; + static const GXColor nm_turn_prm0 = {0x40, 0x40, 0x60, 0xFF}; + static const GXColor nm_turn_prm1 = {0xDC, 0xDC, 0xE6, 0xFF}; + static const GXColor nm_turn_env = {0xA0, 0xA0, 0xE6, 0xFF}; + static const GXColor fm_turn_prm0 = {0x40, 0x40, 0xFF, 0xFF}; + static const GXColor fm_turn_prm1 = {0xDC, 0xDC, 0xFF, 0xFF}; + static const GXColor fm_turn_env = {0x78, 0x78, 0xFF, 0xFF}; + const GXColor* prm0; + const GXColor* prm1; + const GXColor* env; + f32 dVar27; if (mEquipItem == daPyItem_BOKO_e) { + u32 uVar6; if (mActorKeepEquip.getActor() == NULL) { uVar6 = 0; } else { @@ -9952,67 +9852,92 @@ void daPy_lk_c::setCollision() { dVar27 = daPy_HIO_cutTurn_c0::m.field_0x5C; } dVar27 *= 1.5f; - p_Var24 = &nm_turn_prm0; - p_Var20 = &nm_turn_prm1; - p_Var22 = &nm_turn_env; - } else if ((mCurProc == daPyProc_CUT_ROLL_e) || - (checkNoResetFlg1(daPyFlg1_UNK8000))) - { + prm0 = &nm_turn_prm0; + prm1 = &nm_turn_prm1; + env = &nm_turn_env; + } else if ((mCurProc == daPyProc_CUT_ROLL_e) || (checkNoResetFlg1(daPyFlg1_UNK8000))) { if (checkNormalSwordEquip()) { if (mCurProc == daPyProc_CUT_ROLL_e) { dVar27 = daPy_HIO_cutRoll_c0::m.field_0x18; } else { dVar27 = daPy_HIO_cutTurn_c0::m.field_0x38; } - p_Var24 = &n_roll_prm0; - p_Var20 = &n_roll_prm1; - p_Var22 = &n_roll_env; + prm0 = &n_roll_prm0; + prm1 = &n_roll_prm1; + env = &n_roll_env; } else if (checkFinalMasterSwordEquip()) { if (mCurProc == daPyProc_CUT_ROLL_e) { dVar27 = daPy_HIO_cutRoll_c0::m.field_0x1C; } else { dVar27 = daPy_HIO_cutTurn_c0::m.field_0x3C; } - p_Var24 = &fm_roll_prm0; - p_Var20 = &fm_roll_prm1; - p_Var22 = &fm_roll_env; + prm0 = &fm_roll_prm0; + prm1 = &fm_roll_prm1; + env = &fm_roll_env; } else { if (mCurProc == daPyProc_CUT_ROLL_e) { dVar27 = daPy_HIO_cutRoll_c0::m.field_0x1C; } else { dVar27 = daPy_HIO_cutTurn_c0::m.field_0x3C; } - p_Var24 = &nm_roll_prm0; - p_Var20 = &nm_roll_prm1; - p_Var22 = &nm_roll_env; + prm0 = &nm_roll_prm0; + prm1 = &nm_roll_prm1; + env = &nm_roll_env; } } else { if (checkNormalSwordEquip()) { dVar27 = daPy_HIO_cutTurn_c0::m.field_0x38; - p_Var24 = &n_turn_prm0; - p_Var20 = &n_turn_prm1; - p_Var22 = &n_turn_env; + prm0 = &n_turn_prm0; + prm1 = &n_turn_prm1; + env = &n_turn_env; } else if (checkFinalMasterSwordEquip()) { dVar27 = daPy_HIO_cutTurn_c0::m.field_0x3C; - p_Var24 = &fm_turn_prm0; - p_Var20 = &fm_turn_prm1; - p_Var22 = &fm_turn_env; + prm0 = &fm_turn_prm0; + prm1 = &fm_turn_prm1; + env = &fm_turn_env; } else { dVar27 = daPy_HIO_cutTurn_c0::m.field_0x3C; - p_Var24 = &nm_turn_prm0; - p_Var20 = &nm_turn_prm1; - p_Var22 = &nm_turn_env; + prm0 = &nm_turn_prm0; + prm1 = &nm_turn_prm1; + env = &nm_turn_env; } } - emitter1 = dComIfGp_particle_setP1( - dPa_name::ID_COMMON_0025, ¤t.pos, &shape_angle, NULL, 0xFF, &m331C, - fopAcM_GetRoomNo(this), p_Var24, p_Var22, NULL); - emitter2 = dComIfGp_particle_setP1( - dPa_name::ID_COMMON_0026, ¤t.pos, &shape_angle, NULL, 0xFF, &m332C, - fopAcM_GetRoomNo(this), p_Var20, p_Var22, NULL); - emitter3 = dComIfGp_particle_setP1( - dPa_name::ID_COMMON_0028, ¤t.pos, &shape_angle, NULL, 0xFF, &m333C, - fopAcM_GetRoomNo(this), p_Var24, p_Var22, NULL); + JPABaseEmitter* emitter1 = dComIfGp_particle_setP1( + dPa_name::ID_COMMON_0025, + ¤t.pos, + &shape_angle, + NULL, + 0xFF, + &m331C, + fopAcM_GetRoomNo(this), + prm0, + env, + NULL + ); + JPABaseEmitter* emitter2 = dComIfGp_particle_setP1( + dPa_name::ID_COMMON_0026, + ¤t.pos, + &shape_angle, + NULL, + 0xFF, + &m332C, + fopAcM_GetRoomNo(this), + prm1, + env, + NULL + ); + JPABaseEmitter* emitter3 = dComIfGp_particle_setP1( + dPa_name::ID_COMMON_0028, + ¤t.pos, + &shape_angle, + NULL, + 0xFF, + &m333C, + fopAcM_GetRoomNo(this), + prm0, + env, + NULL + ); if (emitter1 != NULL) { emitter1->mGlobalParticleScale.x = dVar27; } @@ -10024,65 +9949,61 @@ void daPy_lk_c::setCollision() { } } } + } else if (mCurProc == daPyProc_CUT_ROLL_e) { + cXyz* pcVar23 = &mSwBlur.field_0x304[0]; + s16 r27 = daPy_HIO_cutRoll_c0::m.field_0x4 / 10; + cXyz spAC = (old.pos - current.pos) * 0.1f; + mDoMtx_stack_c::copy(mpCLModel->getBaseTRMtx()); + mDoMtx_stack_c::push(); + mDoMtx_stack_c::inverse(); + cXyz spA0; + mDoMtx_stack_c::multVec(&m36C4, &spA0); + mDoMtx_stack_c::pop(); + for (int i = 0; i < 10; i++, pcVar23++) { + mDoMtx_stack_c::multVec(&spA0, pcVar23); + *pcVar23 += spAC * i; + mDoMtx_stack_c::YrotM(r27); + } + mDoMtx_stack_c::copy(mpCLModel->getBaseTRMtx()); + mDoMtx_stack_c::YrotM(-(r27 >> 1)); + mDoMtx_stack_c::multVec(&spA0, &spB8); + if (m331C.getAlpha() == 0xFF) { + m331C.setPosArray(&mSwBlur.field_0x304[0], 10); + m332C.setPosArray(&mSwBlur.field_0x304[0], 10); + m333C.setPosArray(&mSwBlur.field_0x304[0], 10); + } + mAtCyl.MoveCAt(current.pos); + seStartSwordCut(JA_SE_LK_SUGOI_KAITEN); } else { - if (mCurProc == daPyProc_CUT_ROLL_e) { - pcVar23 = &mSwBlur.field_0x304[0] - daPy_HIO_cutRoll_c0::m.field_0x4; - local_b8 = (old.pos - current.pos) * 0.1f; - mDoMtx_stack_c::copy(mpCLModel->getBaseTRMtx()); - mDoMtx_stack_c::push(); - mDoMtx_stack_c::inverse(); - mDoMtx_stack_c::multVec(&m36C4, &local_c4); - mDoMtx_stack_c::pop(); - for (int i = 0; i < 10; i++, pcVar23++) { - mDoMtx_stack_c::multVec(&local_c4, pcVar23); - local_b8* i += *pcVar23; - mDoMtx_stack_c::YrotM(0x578); - } - mDoMtx_stack_c::copy(mpCLModel->getBaseTRMtx()); - mDoMtx_stack_c::YrotM(-0x2BC); - mDoMtx_stack_c::multVec(&local_c4, &local_ac); - if (m331C.getAlpha() == 0xFF) { - pcVar23 = &mSwBlur.field_0x304[0]; - m331C.setPosArray(pcVar23, 10); - m332C.setPosArray(pcVar23, 10); - m333C.setPosArray(pcVar23, 10); + int r26 = mSwBlur.field_0x018; + int r23 = (int)(10.0f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); + if (((mCurProc != daPyProc_CUT_F_e) && (mCurProc != daPyProc_BT_VERTICAL_JUMP_CUT_e)) && + (mCurProc != daPyProc_FAN_SWING_e)) + { + if (mCurProc == daPyProc_JUMP_CUT_LAND_e) { + r23 = 0x95; + } else if ((mCurProc == daPyProc_HAMMER_FRONT_SWING_e) || (mCurProc == daPyProc_WEAPON_FRONT_SWING_e)) { + r23 = (int)(2.5f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); + } else if (mCurProc == daPyProc_WEAPON_SIDE_SWING_e) { + r23 = (int)(10.0f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()) + -5; } + mSwBlur.copySwBlur(mpCLModel->getBaseTRMtx(), r23); + } + if (mCurProc == daPyProc_CUT_TURN_e) { + mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &mSwBlur.mpPosBuffer[r23 * 2 + 3], &spB8); mAtCyl.MoveCAt(current.pos); - seStartSwordCut(JA_SE_LK_SUGOI_KAITEN); + if (m331C.getAlpha() == 0xFF) { + s16 sVar16 = mSwBlur.field_0x018 - r26; + m331C.setPosArray(&mSwBlur.field_0x304[0], sVar16); + m332C.setPosArray(&mSwBlur.field_0x304[0], sVar16); + m333C.setPosArray(&mSwBlur.field_0x304[0], sVar16); + } + mSwBlur.field_0x014 = 0; } else { - iVar13 = mSwBlur.field_0x018; - iVar12 = (int)(10.0f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); - if (((mCurProc != daPyProc_CUT_F_e) && - (mCurProc != daPyProc_BT_VERTICAL_JUMP_CUT_e)) && - (mCurProc != daPyProc_FAN_SWING_e)) - { - if (mCurProc == daPyProc_JUMP_CUT_LAND_e) { - iVar12 = 0x95; - } else if ((mCurProc == daPyProc_HAMMER_FRONT_SWING_e) || - (mCurProc == daPyProc_WEAPON_FRONT_SWING_e)) - { - iVar12 = (int)(2.5f * mFrameCtrlUnder[UNDER_MOVE0_e].getFrame()); - } else if (mCurProc == daPyProc_WEAPON_SIDE_SWING_e) { - iVar12 = iVar12 + -5; - } - mSwBlur.copySwBlur(mpCLModel->getBaseTRMtx(), iVar12); - } - if (mCurProc == daPyProc_CUT_TURN_e) { - mDoMtx_multVec(mpCLModel->getBaseTRMtx(), &mSwBlur.mpPosBuffer[iVar12 * 2 + 3], - &local_ac); - mAtCyl.MoveCAt(current.pos); - if (m331C.getAlpha() == 0xFF) { - sVar16 = mSwBlur.field_0x018 - iVar13; - m331C.setPosArray(&mSwBlur.field_0x304[0], sVar16); - m332C.setPosArray(&mSwBlur.field_0x304[0], sVar16); - m333C.setPosArray(&mSwBlur.field_0x304[0], sVar16); - } - mSwBlur.field_0x014 = 0; - } else { - setSwordAtCollision(); - } + setSwordAtCollision(); } } + if ((mCurProc == daPyProc_CUT_TURN_e) || (mCurProc == daPyProc_CUT_ROLL_e)) { mDoAud_zelAudio_c::getInterface()->bgmNowKaitengiri(); mAtCyl.OnAtSetBit(); @@ -10141,46 +10062,51 @@ void daPy_lk_c::setCollision() { m333C.end(); } if (fanWindCrashEffectDraw()) { - fVar3 = mpYbafo00Btk->getFrame() + 1.0f; + f32 fVar3 = mpYbafo00Btk->getFrame() + 1.0f; if (fVar3 > mpYbafo00Btk->getFrameMax() - 0.5f) { fVar3 = mpYbafo00Btk->getFrameMax() - 0.001f; } mpYbafo00Btk->setFrame(fVar3); } - bVar5 = false; + + BOOL bVar5 = false; + cXyz sp94; + cXyz sp88; + f32 in_f31; if ((int)m3534 != 0) { - local_e8.x = mFanWindCps.GetEndP()->x; - local_e8.y = mFanWindCps.GetEndP()->y; - local_e8.z = mFanWindCps.GetEndP()->z; - dVar27 = m3534 / 10.0f; - fVar4 = (dVar27 * (daPy_HIO_fan_c0::m.field_0x18 - daPy_HIO_fan_c0::m.field_0x1C) + - daPy_HIO_fan_c0::m.field_0x1C); - fVar3 = cM_scos(m3538); - afStack_a0.set(fVar4 * cM_ssin(m3536) * fVar3, -fVar4 * cM_ssin(m3538), - fVar4 * cM_scos(m3536) * fVar3); - local_100 = local_e8 + afStack_a0; - mArrowLinChk.Set(&local_e8, &local_100, this); + sp94.x = mFanWindCps.GetEndP()->x; + sp94.y = mFanWindCps.GetEndP()->y; + sp94.z = mFanWindCps.GetEndP()->z; + f32 dVar27 = m3534 / 10.0f; + f32 fVar4 = + (dVar27 * (daPy_HIO_fan_c0::m.field_0x18 - daPy_HIO_fan_c0::m.field_0x1C) + daPy_HIO_fan_c0::m.field_0x1C); + spC4.set( + fVar4 * cM_ssin(m3536) * cM_scos(m3538), -fVar4 * cM_ssin(m3538), fVar4 * cM_scos(m3536) * cM_scos(m3538) + ); + sp88 = sp94 + spC4; + mArrowLinChk.Set(&sp94, &sp88, this); if (dComIfG_Bgsp()->LineCross(&mArrowLinChk)) { - pfVar15 = dComIfG_Bgsp()->GetTriPla(mArrowLinChk); - local_100.set(*mArrowLinChk.GetCrossP()); + cM3dGPla* pfVar15 = dComIfG_Bgsp()->GetTriPla(mArrowLinChk); + sp88.set(*mArrowLinChk.GetCrossP()); if (!cBgW_CheckBGround(pfVar15->GetNP()->y)) { m3534 = 0; m33E8.end(); mpYuchw00Brk->setFrame(mpYuchw00Brk->getFrameMax() - 0.001f); mpYbafo00Btk->setFrame(0.0f); - mDoMtx_stack_c::transS(local_100.x, local_100.y, local_100.z); - mDoMtx_stack_c::ZXYrotM(cM_atan2s(-pfVar15->GetNP()->y, pfVar15->GetNP()->absXZ()), - cM_atan2s(-pfVar15->GetNP()->x, -pfVar15->GetNP()->z), 0); + mDoMtx_stack_c::transS(sp88.x, sp88.y, sp88.z); + mDoMtx_stack_c::ZXYrotM( + cM_atan2s(-pfVar15->GetNP()->y, pfVar15->GetNP()->absXZ()), + cM_atan2s(-pfVar15->GetNP()->x, -pfVar15->GetNP()->z), + 0 + ); mpYbafo00Model->setBaseTRMtx(mDoMtx_stack_c::get()); - emitter1 = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0049, &local_100); - if (emitter1 != NULL) { - JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter1->mGlobalRotation, - emitter1->mGlobalTranslation); - emitter1->setGlobalPrmColor(tevStr.mColorK0.r, tevStr.mColorK0.g, - tevStr.mColorK0.b); + JPABaseEmitter* emitter = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0049, &sp88); + if (emitter != NULL) { + JPASetRMtxTVecfromMtx(mDoMtx_stack_c::get(), emitter->mGlobalRotation, emitter->mGlobalTranslation); + emitter->setGlobalPrmColor(tevStr.mColorK0.r, tevStr.mColorK0.g, tevStr.mColorK0.b); } } else { - local_100.y += 70.0f; + sp88.y += 70.0f; m3538 = getGroundAngle(&mArrowLinChk, m3536); } } @@ -10188,39 +10114,38 @@ void daPy_lk_c::setCollision() { in_f31 = (70.0f + (230.0f * (1.0f - dVar27))); if ((int)m3534 != 0) { m3534--; - mDoMtx_stack_c::transS(local_100.x, local_100.y, local_100.z); + mDoMtx_stack_c::transS(sp88.x, sp88.y, sp88.z); mDoMtx_stack_c::ZXYrotM(m3538, m3536, 0); mpYuchw00Model->setBaseTRMtx(mDoMtx_stack_c::get()); mYuchw00Bck.play(); mYuchw00Bck.entry(mpYuchw00Model->getModelData()); simpleAnmPlay(mpYuchw00Btk); } + } else if (fanWindEffectDraw()) { + mYuchw00Bck.play(); + mYuchw00Bck.entry(mpYuchw00Model->getModelData()); + simpleAnmPlay(mpYuchw00Btk); + f32 dVar27 = (1.0f + mpYuchw00Brk->getFrame()); + if (dVar27 > (mpYuchw00Brk->getFrameMax() - 0.5f)) { + dVar27 = (mpYuchw00Brk->getFrameMax() - 0.001f); + m33E8.end(); + } + mpYuchw00Brk->setFrame(dVar27); } else { - if (fanWindEffectDraw()) { - mYuchw00Bck.play(); - mYuchw00Bck.entry(mpYuchw00Model->getModelData()); - simpleAnmPlay(mpYuchw00Btk); - dVar27 = (1.0f + mpYuchw00Brk->getFrame()); - if (dVar27 > (mpYuchw00Brk->getFrameMax() - 0.5f)) { - dVar27 = (mpYuchw00Brk->getFrameMax() - 0.001f); - m33E8.end(); - } - mpYuchw00Brk->setFrame(dVar27); - } else { - if (mpYbafo00Btk->getFrame() < 5.0f) { - mDoMtx_multVecZero(mpYbafo00Model->getBaseTRMtx(), &local_e8); - local_100.x = local_e8.x; - local_100.y = 10.0f + local_e8.y; - local_100.z = local_e8.z; - afStack_a0 = cXyz::Zero; - bVar5 = true; - in_f31 = 120.0f; - } + if (mpYbafo00Btk->getFrame() < 5.0f) { + mDoMtx_multVecZero(mpYbafo00Model->getBaseTRMtx(), &sp94); + sp88.x = sp94.x; + sp88.y = 10.0f + sp94.y; + sp88.z = sp94.z; + spC4 = cXyz::Zero; + bVar5 = true; + in_f31 = 120.0f; } } + if (bVar5) { - mFanWindCps.SetStartEnd(local_e8, local_100); - mFanWindCps.SetAtVec(afStack_a0); + mFanWindCps.SetStartEnd(sp94, sp88); + mFanWindCps.SetAtVec(spC4); mFanWindCps.SetR(in_f31); dComIfG_Ccsp()->Set(&mFanWindCps); // dComIfG_Ccsp()->SetMass(&mFanWindCps, 1); @@ -10233,7 +10158,7 @@ void daPy_lk_c::setCollision() { } if (m353A != 0) { if (mCurProc == daPyProc_FAN_GLIDE_e) { - pMVar25 = mpCLModel->getAnmMtx(0); + cXyz local_10c; mDoMtx_multVecZero(mpCLModel->getAnmMtx(0), &local_10c); mFanWindSph.SetC(local_10c); } else { @@ -10247,15 +10172,16 @@ void daPy_lk_c::setCollision() { mFanWindSph.ResetAtHit(); } if (checkResetFlg0(daPyRFlg0_UNK200000)) { - mDoMtx_multVec(mpEquippedShieldModel->getBaseTRMtx(), &l_ms_light_local_start, &local_e8); + mDoMtx_multVec(mpEquippedShieldModel->getBaseTRMtx(), &l_ms_light_local_start, &sp94); + cXyz local_118; mDoMtx_multVecSR(mpEquippedShieldModel->getBaseTRMtx(), &l_ms_light_local_vec, &local_118); - local_100 = local_e8 + local_118; - mMirLightLinChk.Set(&local_e8, &local_100, this); + sp88 = sp94 + local_118; + mMirLightLinChk.Set(&sp94, &sp88, this); if (dComIfG_Bgsp()->LineCross(&mMirLightLinChk)) { - local_100.set(*mMirLightLinChk.GetCrossP()); - local_118 = local_100 - local_e8; + sp88.set(*mMirLightLinChk.GetCrossP()); + local_118 = sp88 - sp94; } - mFanLightCps.SetStartEnd(local_e8, local_100); + mFanLightCps.SetStartEnd(sp94, sp88); mFanLightCps.SetAtVec(local_118); mFanLightCps.OnAtSetBit(); dComIfG_Ccsp()->Set(&mFanLightCps); @@ -10301,20 +10227,17 @@ void daPy_lk_c::setAttentionPos() { attention_info.position.y = 20.05f + current.pos.y; } else if ((checkModeFlg(ModeFlg_WHIDE)) && (checkNoResetFlg0(daPyFlg0_UNK10000))) { attention_info.position.y = (92.5f + mpCLModel->getBaseTRMtx()[1][3]) - 30.0f; - } else { - if ((checkModeFlg(ModeFlg_IN_SHIP)) && ((ship != NULL && (!ship->getFlyFlg())))) { - // !@bug(?): l_ship_offset is probably supposed to be x, not z. - attention_info.position.x = - ship->current.pos.x + cM_ssin(ship->shape_angle.y) * l_ship_offset.z; - if (checkNoResetFlg0(daPyFlg0_UNK80)) { - attention_info.position.y = 92.5f + (m35D0 + l_ship_offset.y); - } else { - attention_info.position.y = 92.5f + mpCLModel->getBaseTRMtx()[1][3]; - } - attention_info.position.z = - ship->current.pos.z + cM_scos(ship->shape_angle.y) * l_ship_offset.z; - return; + } else if ((checkModeFlg(ModeFlg_IN_SHIP)) && (ship != NULL && (!ship->getFlyFlg()))) { + // !@bug(?): l_ship_offset is probably supposed to be x, not z. + attention_info.position.x = ship->current.pos.x + cM_ssin(ship->shape_angle.y) * l_ship_offset.z; + if (checkNoResetFlg0(daPyFlg0_UNK80)) { + attention_info.position.y = 92.5f + (m35D0 + l_ship_offset.y); + } else { + attention_info.position.y = 92.5f + mpCLModel->getBaseTRMtx()[1][3]; } + attention_info.position.z = ship->current.pos.z + cM_scos(ship->shape_angle.y) * l_ship_offset.z; + return; + } else { attention_info.position.y = 92.5f + mpCLModel->getBaseTRMtx()[1][3]; } } @@ -10396,11 +10319,11 @@ void daPy_lk_c::setDemoData() { } else { angle = shape_angle.y; } - if ((demo_actor_p->checkEnable(dDemo_actor_c::ENABLE_SHAPE_e))) { + if (demo_actor_p->checkEnable(dDemo_actor_c::ENABLE_SHAPE_e)) { if (dComIfGs_getClearCount() == 0) { u32 shape = demo_actor_p->getShapeId(); if ((checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (shape == 0)) || - ((!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (shape == 1)))) + (!checkNoResetFlg1(daPyFlg1_CASUAL_CLOTHES) && (shape == 1))) { ResTIMG casualLinktex = *mpCurrLinktex; *mpCurrLinktex = mOtherLinktex; @@ -10422,11 +10345,10 @@ void daPy_lk_c::setDemoData() { if (cut_name != NULL) { // Take the first 3 chars in cut_name, convert them to integers, and calculate // demo_mode - demo_mode = - ((cut_name[0] - '0') * 100 + (cut_name[1] - '0') * 10 + (cut_name[2] - '0')); - if ((mDemo.getDemoType() != 4) && (((demo_mode == daPy_demo_c::DEMO_UNK01_e || - (demo_mode == daPy_demo_c::DEMO_UNK2A_e)) || - (demo_mode == daPy_demo_c::DEMO_UNK17_e)))) + demo_mode = ((cut_name[0] - '0') * 100 + (cut_name[1] - '0') * 10 + (cut_name[2] - '0')); + if ((mDemo.getDemoType() != 4) && + ((demo_mode == daPy_demo_c::DEMO_UNK01_e || (demo_mode == daPy_demo_c::DEMO_UNK2A_e)) || + (demo_mode == daPy_demo_c::DEMO_UNK17_e))) { if (mAcch.ChkGroundHit() && !daPy_lk_c::checkPlayerFly()) { mVelocity = 0.0f; @@ -10484,7 +10406,7 @@ void daPy_lk_c::setDemoData() { } return; } - if ((mDemo.getDemoType() == 1) || ((mDemo.getDemoType() == 2 && (mStaffIdx != -1)))) { + if ((mDemo.getDemoType() == 1) || (mDemo.getDemoType() == 2 && (mStaffIdx != -1))) { if (prm0_p != NULL) { mDemo.setParam0(*prm0_p); } else { @@ -10528,9 +10450,7 @@ void daPy_lk_c::setDemoData() { current.angle.y = cM_atan2s(sp50.x, sp50.z); shape_angle.y = current.angle.y; m34EC -= (s16)(current.angle.y - r24); - } else if ((demo_mode == daPy_demo_c::DEMO_UNK02_e) || - (demo_mode == daPy_demo_c::DEMO_UNK03_e)) - { + } else if ((demo_mode == daPy_demo_c::DEMO_UNK02_e) || (demo_mode == daPy_demo_c::DEMO_UNK03_e)) { cXyz sp44 = *pos_p - current.pos; if (std::abs(mVelocity) / mMaxNormalSpeed < daPy_HIO_move_c0::m.field_0x2C) { demo_mode = daPy_demo_c::DEMO_UNK02_e; @@ -10539,15 +10459,11 @@ void daPy_lk_c::setDemoData() { if ((dVar22 < 100.0f) || ((dVar22 < 2500.0f) && (std::abs(mVelocity) < 0.001f))) { demo_mode = daPy_demo_c::DEMO_UNK01_e; mVelocity = 0.0f; - } else if (((demo_mode == daPy_demo_c::DEMO_UNK02_e) && (dVar22 < 400.0f)) || - (dVar22 < 2500.0f)) - { + } else if (((demo_mode == daPy_demo_c::DEMO_UNK02_e) && (dVar22 < 400.0f)) || (dVar22 < 2500.0f)) { mDemo.setStick(0.0f); } mDemo.setMoveAngle(cM_atan2s(sp44.x, sp44.z)); - } else if ((demo_mode == daPy_demo_c::DEMO_UNK05_e) || - (demo_mode == daPy_demo_c::DEMO_UNK18_e)) - { + } else if ((demo_mode == daPy_demo_c::DEMO_UNK05_e) || (demo_mode == daPy_demo_c::DEMO_UNK18_e)) { mDemo.setMoveAngle(angle); } mDemo.setDemoMode(demo_mode); @@ -10561,12 +10477,12 @@ void daPy_lk_c::setDemoData() { } else { dComIfGp_clearPlayerStatus0(0, daPyStts0_UNK10_e); } - if ((mStaffIdx != -1) && - (((((demo_mode == daPy_demo_c::DEMO_UNK01_e || (demo_mode == daPy_demo_c::DEMO_UNK04_e)) || - ((demo_mode == daPy_demo_c::DEMO_UNK17_e || - ((demo_mode == daPy_demo_c::DEMO_UNK0E_e || (demo_mode - 0x11 <= 1)))))) || - (demo_mode - 0x2a <= 2)) || - ((demo_mode == daPy_demo_c::DEMO_UNK27_e || (demo_mode == daPy_demo_c::DEMO_UNK33_e)))))) + if (mStaffIdx != -1 && (demo_mode == daPy_demo_c::DEMO_UNK01_e || demo_mode == daPy_demo_c::DEMO_UNK04_e || + demo_mode == daPy_demo_c::DEMO_UNK17_e || demo_mode == daPy_demo_c::DEMO_UNK0E_e || + demo_mode == daPy_demo_c::DEMO_UNK11_e || demo_mode == daPy_demo_c::DEMO_UNK12_e || + demo_mode == daPy_demo_c::DEMO_UNK2A_e || demo_mode == daPy_demo_c::DEMO_UNK2B_e || + demo_mode == daPy_demo_c::DEMO_UNK2C_e || demo_mode == daPy_demo_c::DEMO_UNK27_e || + demo_mode == daPy_demo_c::DEMO_UNK33_e)) { dComIfGp_evmng_cutEnd(mStaffIdx); } @@ -11922,44 +11838,48 @@ void daPy_lk_c::initTextureScroll() { for (u16 no = 0; no < material_num; no++) { u16 matID = btk->getUpdateMaterialID(no); - if (matID != 0xFFFF) { - m_tex_eye_scroll[no] = new daPy_matAnm_c(); - JUT_ASSERT(20972, m_tex_eye_scroll[no] != NULL); - - mpCLModelData->getMaterialNodePointer(matID)->change(); - mpCLModelData->getMaterialNodePointer(matID)->setMaterialAnm(m_tex_eye_scroll[no]); - - J3DMaterial* mtl = mpCLModelData->getMaterialNodePointer(matID); - u8 texMtxID = btk->getUpdateTexMtxID(no); - if (texMtxID != 0xFF) { - J3DTexMtx* tmtx; - if (mtl->getTexMtx(texMtxID) == NULL) { - tmtx = new J3DTexMtx(); - JUT_ASSERT(20984, tmtx != NULL); - mtl->setTexMtx(no, tmtx); - } - if (mtl->getTexCoord(texMtxID) != NULL) { - mtl->getTexCoord(texMtxID)->setTexGenMtx(GX_TEXMTX0 + (texMtxID & 0xFF) * 3); - } - tmtx = mtl->getTexMtx(no); - - m_texMtxAnm[no].setAnmTransform(btk); - m_texMtxAnm[no].setAnmIndex(no); - - tmtx->getTexMtxInfo().mInfo = (tmtx->getTexMtxInfo().mInfo & 0x7F) | btk->getTexMtxCalcType() << 7; - // Fakematch? The codegen doesn't match unless a temp variable is used and assigned to multiple times. - Vec* temp = &btk->getSRTCenter(no); - tmtx->getTexMtxInfo().mCenter.x = temp->x; - temp = &btk->getSRTCenter(no); - tmtx->getTexMtxInfo().mCenter.y = temp->y; - temp = &btk->getSRTCenter(no); - tmtx->getTexMtxInfo().mCenter.z = temp->z; - - JUT_ASSERT(21001, mtl->getMaterialAnm() != NULL); - - mtl->getMaterialAnm()->setTexMtxAnm(texMtxID, &m_texMtxAnm[no]); - } + if (matID == 0xFFFF) { + continue; } + + m_tex_eye_scroll[no] = new daPy_matAnm_c(); + JUT_ASSERT(20972, m_tex_eye_scroll[no] != NULL); + + mpCLModelData->getMaterialNodePointer(matID)->change(); + mpCLModelData->getMaterialNodePointer(matID)->setMaterialAnm(m_tex_eye_scroll[no]); + + J3DMaterial* mtl = mpCLModelData->getMaterialNodePointer(matID); + u8 texMtxID = btk->getUpdateTexMtxID(no); + if (texMtxID == 0xFF) { + continue; + } + + J3DTexMtx* tmtx; + if (mtl->getTexMtx(texMtxID) == NULL) { + tmtx = new J3DTexMtx(); + JUT_ASSERT(20984, tmtx != NULL); + mtl->setTexMtx(no, tmtx); + } + if (mtl->getTexCoord(texMtxID) != NULL) { + mtl->getTexCoord(texMtxID)->setTexGenMtx(GX_TEXMTX0 + (texMtxID & 0xFF) * 3); + } + tmtx = mtl->getTexMtx(no); + + m_texMtxAnm[no].setAnmTransform(btk); + m_texMtxAnm[no].setAnmIndex(no); + + tmtx->getTexMtxInfo().mInfo = (tmtx->getTexMtxInfo().mInfo & 0x7F) | btk->getTexMtxCalcType() << 7; + // Fakematch? The codegen doesn't match unless a temp variable is used and assigned to multiple times. + Vec* temp = &btk->getSRTCenter(no); + tmtx->getTexMtxInfo().mCenter.x = temp->x; + temp = &btk->getSRTCenter(no); + tmtx->getTexMtxInfo().mCenter.y = temp->y; + temp = &btk->getSRTCenter(no); + tmtx->getTexMtxInfo().mCenter.z = temp->z; + + JUT_ASSERT(21001, mtl->getMaterialAnm() != NULL); + + mtl->getMaterialAnm()->setTexMtxAnm(texMtxID, &m_texMtxAnm[no]); } } @@ -12159,7 +12079,7 @@ J3DAnmTevRegKey* daPy_lk_c::entryBrk(J3DModelData* param_1, int param_2) { /* 80124C98-80125CC8 .text playerInit__9daPy_lk_cFv */ void daPy_lk_c::playerInit() { if (!fopAcM_entrySolidHeap(this, daPy_createHeap, 0xB0000)) { - JUT_ASSERT(0x53B6, FALSE); + JUT_ASSERT(21430, FALSE); } fopAcM_SetMtx(this, mpCLModel->getBaseTRMtx()); @@ -12196,28 +12116,25 @@ void daPy_lk_c::playerInit() { while (mtl) { mtl->setMaterialMode(1); if (mtl->getZMode()->getCompareEnable() == 0) { - // TODO: debug map indicates J3DBlend::getType inline was used - if (mtl->getBlend()->mBlendMode == GX_BM_BLEND) { - mpZOffBlendShape[zoff_blend_cnt] = mtl->getShape(); - zoff_blend_cnt++; - JUT_ASSERT(0x53EE, zoff_blend_cnt <= 4); + if ((u8)mtl->getBlend()->getType() == GX_BM_BLEND) { + mpZOffBlendShape[zoff_blend_cnt++] = mtl->getShape(); + JUT_ASSERT(21486, zoff_blend_cnt <= 4); } else { - mpZOffNoneShape[zoff_none_cnt] = mtl->getShape(); - zoff_none_cnt++; - JUT_ASSERT(0x53F2, zoff_none_cnt <= 4); + mpZOffNoneShape[zoff_none_cnt++] = mtl->getShape(); + JUT_ASSERT(21490, zoff_none_cnt <= 4); } } else { - mpZOnShape[zon_cnt] = mtl->getShape(); - zon_cnt++; - JUT_ASSERT(0x53F6, zon_cnt <= 4); + mpZOnShape[zon_cnt++] = mtl->getShape(); + JUT_ASSERT(21494, zon_cnt <= 4); } mtl = mtl->getNext(); } mtl = mpCLModelData->getJointNodePointer(0x15)->getMesh(); // cl_mayu joint } - JUT_ASSERT(0x53FD, zon_cnt == 4); - JUT_ASSERT(0x53FE, zoff_none_cnt == 4); - JUT_ASSERT(0x53FF, zoff_blend_cnt == 4); + + JUT_ASSERT(21501, zon_cnt == 4); + JUT_ASSERT(21502, zoff_none_cnt == 4); + JUT_ASSERT(21503, zoff_blend_cnt == 4); mpLhandShape = mpCLModelData->getJointNodePointer(0x08)->getMesh()->getShape(); // cl_LhandA joint mpRhandShape = mpCLModelData->getJointNodePointer(0x0C)->getMesh()->getShape(); // cl_RhandA joint @@ -12310,13 +12227,13 @@ void daPy_lk_c::playerInit() { mpItemHeaps[0] = mDoExt_createSolidHeapFromGameToCurrent(0xE600, 0x20); u8* dummy_data = new u8[0xE600]; - JUT_ASSERT(0x5493, dummy_data != NULL); + JUT_ASSERT(21651, dummy_data != NULL); mDoExt_restoreCurrentHeap(); mDoExt_adjustSolidHeap(mpItemHeaps[0]); mpItemHeaps[1] = mDoExt_createSolidHeapFromGameToCurrent(0xE600, 0x20); dummy_data = new u8[0xE600]; - JUT_ASSERT(0x5499, dummy_data != NULL); + JUT_ASSERT(21657, dummy_data != NULL); mDoExt_restoreCurrentHeap(); mDoExt_adjustSolidHeap(mpItemHeaps[1]); diff --git a/src/d/actor/d_a_player_rope.inc b/src/d/actor/d_a_player_rope.inc index a923e79ef..5afa9b6a3 100644 --- a/src/d/actor/d_a_player_rope.inc +++ b/src/d/actor/d_a_player_rope.inc @@ -750,9 +750,8 @@ BOOL daPy_lk_c::procRopeHangWait_init(int param_0) { /* 801457FC-80145B38 .text procRopeHangWait__9daPy_lk_cFv */ BOOL daPy_lk_c::procRopeHangWait() { - /* Nonmatching */ - bool bVar1; - s16 unaff_r29; + BOOL r30; + s16 r29; float dVar4; dComIfGp_setRStatus(dActStts_STOP_e); @@ -763,72 +762,80 @@ BOOL daPy_lk_c::procRopeHangWait() { return true; } if (!changeRopeEndProc(1)) { - bVar1 = false; + r30 = false; fopAc_ac_c* rope = mActorKeepRope.getActor(); mRopePos = rope->current.pos; current.pos.x = mRopePos.x; current.pos.z = mRopePos.z; - s16 r30 = 0; if (mStickDistance > 0.05f) { int direction = getDirectionFromAngle(m34DC); if (spActionButton()) { if (direction == DIR_FORWARD) { if (abs((int)m34D4) <= 0x80) { procRopeUp_init(); + } else { + r30 = true; + r29 = 0; } - bVar1 = true; - unaff_r29 = 0; } else if (direction == DIR_BACKWARD) { if (abs((int)m34D4) <= 0x80) { procRopeDown_init(); - } - bVar1 = true; - unaff_r29 = 0; - } else if (direction == DIR_LEFT) { - s16 r5 = 512.0f * mStickDistance; - if (r5 > m34D4) { - s16 r0 = 64.0f * mStickDistance; - m34D4 += r0; - if (m34D4 > r5) { - m34D4 = r5; - } - unaff_r29 = m34D4; } else { - unaff_r29 = r5; + r30 = true; + r29 = 0; } - } else { // DIR_RIGHT - s16 r5 = -512.0f * mStickDistance; - if (r5 < m34D4) { - s16 r0 = 64.0f * mStickDistance; - m34D4 -= r0; - if (m34D4 < r5) { - m34D4 = r5; + } else { + if (direction == DIR_LEFT) { + s16 r5 = 512.0f * mStickDistance; + if (r5 > m34D4) { + s16 r0 = 64.0f * mStickDistance; + m34D4 += r0; + if (m34D4 > r5) { + m34D4 = r5; + } + r29 = m34D4; + } else { + r29 = r5; + } + } else { // DIR_RIGHT + s16 r5 = -512.0f * mStickDistance; + if (r5 < m34D4) { + s16 r0 = 64.0f * mStickDistance; + m34D4 -= r0; + if (m34D4 < r5) { + m34D4 = r5; + } + r29 = m34D4; + } else { + r29 = r5; } - unaff_r29 = m34D4; - } else { - unaff_r29 = r5; } - } - bVar1 = true; - if (m34D0 != -1) { - m34D0 = -1; - setSingleMoveAnime( - ANM_ROPEWAIT, daPy_HIO_rope_c0::m.field_0x24, 0.0f, -1, daPy_HIO_rope_c0::m.field_0x2C - ); + r30 = true; + if (m34D0 != -1) { + m34D0 = -1; + setSingleMoveAnime( + ANM_ROPEWAIT, daPy_HIO_rope_c0::m.field_0x24, 0.0f, -1, daPy_HIO_rope_c0::m.field_0x2C + ); + } } } else if ((direction == DIR_FORWARD) || (direction == DIR_BACKWARD)) { procRopeSwingStart_init(); + } else { + r29 = 0; + r30 = true; } - unaff_r29 = 0; - bVar1 = true; - } else if (m34D0 == 0) { - m34D0 = -1; - setSingleMoveAnime(ANM_ROPEWAIT, daPy_HIO_rope_c0::m.field_0x24, 0.0f, -1, daPy_HIO_rope_c0::m.field_0x2C); + } else { + if (m34D0 == 0) { + m34D0 = -1; + setSingleMoveAnime( + ANM_ROPEWAIT, daPy_HIO_rope_c0::m.field_0x24, 0.0f, -1, daPy_HIO_rope_c0::m.field_0x2C + ); + } + r29 = 0; + r30 = true; } - unaff_r29 = 0; - bVar1 = true; - if (bVar1) { - cLib_addCalcAngleS(&m34D4, unaff_r29, 3, 0x40, 0x10); + if (r30) { + cLib_addCalcAngleS(&m34D4, r29, 3, 0x40, 0x10); if (m34D4 > 0) { dVar4 = checkRopeRoofHit(shape_angle.y + 0x2000); } else { diff --git a/src/f_op/f_op_actor_mng.cpp b/src/f_op/f_op_actor_mng.cpp index b3321bfbf..1aea40fa4 100644 --- a/src/f_op/f_op_actor_mng.cpp +++ b/src/f_op/f_op_actor_mng.cpp @@ -938,14 +938,14 @@ fpc_ProcID fopAcM_createRaceItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz } /* 80026980-80026A68 .text fopAcM_createDemoItem__FP4cXyziiP5csXyziP4cXyzUc */ -fpc_ProcID fopAcM_createDemoItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* angle, int roomNo, cXyz* scale, u8 argFlag) { +fpc_ProcID fopAcM_createDemoItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* i_angle, int i_roomNo, cXyz* i_scale, u8 i_argFlag) { JUT_ASSERT(2813, 0 <= i_itemNo && i_itemNo < 256 && (-1 <= i_itemBitNo && i_itemBitNo <= 79) || i_itemBitNo == 127); if (i_itemNo == dItem_NONE_e) { return fpcM_ERROR_PROCESS_ID_e; } - u32 params = (i_itemNo & 0xFF) | (i_itemBitNo & 0x7F) << 0x08 | (argFlag & 0xFF) << 0x10; - return fopAcM_create(PROC_Demo_Item, params, pos, roomNo, angle, scale); + u32 params = (i_itemNo & 0xFF) | (i_itemBitNo & 0x7F) << 0x08 | (i_argFlag & 0xFF) << 0x10; + return fopAcM_create(PROC_Demo_Item, params, pos, i_roomNo, i_angle, i_scale); } /* 80026A68-80026ADC .text fopAcM_createItemForBoss__FP4cXyziiP5csXyzP4cXyzi */ From db2f66125d5c8bcc860588252cab251a4bdf0d38 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 14 May 2025 16:03:35 -0400 Subject: [PATCH 13/31] Fix python linter warning --- configure.py | 1 + 1 file changed, 1 insertion(+) diff --git a/configure.py b/configure.py index 54e5e5ed6..276fdb733 100755 --- a/configure.py +++ b/configure.py @@ -1761,6 +1761,7 @@ out_dir = config.build_dir / version # This generates the build steps needed for preprocessing def emit_build_rule(asset): + assert config.custom_build_steps is not None steps = config.custom_build_steps.setdefault("pre-compile", []) custom_data = asset.get("custom_data") or {} From 32d9614d63d9610f14773a4f02f0ded33e569398 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Wed, 14 May 2025 16:12:56 -0400 Subject: [PATCH 14/31] Fix d_a_ks weak func order with pragmas --- configure.py | 2 +- src/d/actor/d_a_ks.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/configure.py b/configure.py index 276fdb733..ce84020f4 100755 --- a/configure.py +++ b/configure.py @@ -1468,7 +1468,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_kantera"), ActorRel(NonMatching, "d_a_kn"), ActorRel(NonMatching, "d_a_kokiie"), - ActorRel(Equivalent, "d_a_ks", extra_cflags=["-sym off"]), # weak func order + ActorRel(Matching, "d_a_ks", extra_cflags=["-sym off"]), ActorRel(NonMatching, "d_a_kt"), # regalloc, weak func order ActorRel(NonMatching, "d_a_mflft"), ActorRel(NonMatching, "d_a_npc_cb1"), diff --git a/src/d/actor/d_a_ks.cpp b/src/d/actor/d_a_ks.cpp index cf6420f55..a327a69d7 100644 --- a/src/d/actor/d_a_ks.cpp +++ b/src/d/actor/d_a_ks.cpp @@ -3,12 +3,18 @@ // Translation Unit: d_a_ks.cpp // +// Fakematch? Having sym off before d_a_ks.h but then turning it on before +// d_a_player_main.h fixes the weak function ordering of +// `daPy_py_c::getSwordTopPos() const` and `daPy_py_c::getHeadTopPos() const` +// in this TU. +#pragma sym off #include "d/actor/d_a_ks.h" #include "d/d_procname.h" #include "d/d_com_inf_game.h" #include "d/d_s_play.h" #include "f_op/f_op_camera.h" #include "d/d_snap.h" +#pragma sym on #include "d/actor/d_a_player_main.h" #include "d/actor/d_a_gm.h" #include "d/res/res_ks.h" From 7ac14b85a1965a8fa713a14d7a56fa42e8ba23b3 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 16 May 2025 14:34:46 -0400 Subject: [PATCH 15/31] GXFifo OK --- configure.py | 2 +- include/dolphin/gx/GXFifo.h | 6 +-- include/dolphin/os/OSThread.h | 1 - include/f_pc/f_pc_priority.h | 2 - src/dolphin/gx/GXFifo.c | 72 ++++++++++++++++++----------------- src/dolphin/os/OSThread.c | 3 -- 6 files changed, 42 insertions(+), 44 deletions(-) diff --git a/configure.py b/configure.py index ce84020f4..5f91627f4 100755 --- a/configure.py +++ b/configure.py @@ -1150,7 +1150,7 @@ config.libs = [ "gx", [ Object(NonMatching, "dolphin/gx/GXInit.c", extra_cflags=["-opt nopeephole"]), - Object(NonMatching, "dolphin/gx/GXFifo.c"), + Object(Matching, "dolphin/gx/GXFifo.c"), Object(NonMatching, "dolphin/gx/GXAttr.c"), Object(NonMatching, "dolphin/gx/GXMisc.c"), Object(NonMatching, "dolphin/gx/GXGeometry.c"), diff --git a/include/dolphin/gx/GXFifo.h b/include/dolphin/gx/GXFifo.h index c234c51fe..94ab66e2f 100644 --- a/include/dolphin/gx/GXFifo.h +++ b/include/dolphin/gx/GXFifo.h @@ -24,9 +24,9 @@ GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb); void __GXFifoInit(void); void __GXFifoReadEnable(void); void __GXFifoReadDisable(void); -void __GXFifoLink(u8); -void __GXWriteFifoIntEnable(u32 p1, u32 p2); -void __GXWriteFifoIntReset(u32 p1, u32 p2); +void __GXFifoLink(u8 en); +void __GXWriteFifoIntEnable(u8 hiWatermarkEn, u8 loWatermarkEn); +void __GXWriteFifoIntReset(u8 hiWatermarkClr, u8 loWatermarkClr); void __GXCleanGPFifo(void); OSThread* GXSetCurrentGXThread(void); OSThread* GXGetCurrentGXThread(void); diff --git a/include/dolphin/os/OSThread.h b/include/dolphin/os/OSThread.h index af9ac6b23..4109ae184 100644 --- a/include/dolphin/os/OSThread.h +++ b/include/dolphin/os/OSThread.h @@ -109,7 +109,6 @@ s32 OSGetThreadPriority(OSThread* thread); static s32 CheckThreadQueue(OSThreadQueue* thread); s32 OSCheckActiveThreads(void); static void OSClearStack(u8 value); -extern u8 data_804516D0[8]; #ifdef __cplusplus }; diff --git a/include/f_pc/f_pc_priority.h b/include/f_pc/f_pc_priority.h index 0436996dc..4646db688 100644 --- a/include/f_pc/f_pc_priority.h +++ b/include/f_pc/f_pc_priority.h @@ -34,6 +34,4 @@ s32 fpcPi_Handler(void); s32 fpcPi_Init(process_priority_class* i_procPriority, void* pUserData, uint i_layer, u16 i_listID, u16 i_priority); -extern s8 data_804505F0; // roomReadId - #endif diff --git a/src/dolphin/gx/GXFifo.c b/src/dolphin/gx/GXFifo.c index 13e33336d..23c28f6d5 100644 --- a/src/dolphin/gx/GXFifo.c +++ b/src/dolphin/gx/GXFifo.c @@ -11,7 +11,7 @@ static GXFifoObj* GPFifo; static OSThread* __GXCurrentThread; -static GXBool data_80451954; +static GXBool CPGPLinked; static u32 GXOverflowSuspendInProgress; @@ -37,7 +37,7 @@ static void GXUnderflowHandler() { static void GXBreakPointHandler(OSContext* context) { OSContext bpContext; - SET_REG_FIELD(gx->cpEnable, 1, 5, 2); + SET_REG_FIELD(gx->cpEnable, 1, 5, 0); GX_SET_CP_REG(1, gx->cpEnable); if (BreakPointCB) { @@ -101,27 +101,27 @@ void GXSetCPUFifo(GXFifoObj* fifo) { GX_SET_PI_REG(3, (u32)fifo->base & 0x3FFFFFFF); GX_SET_PI_REG(4, (u32)fifo->end & 0x3FFFFFFF); reg = 0; - GX_BITFIELD_SET(reg, 6, 21, (u32)fifo->write_ptr >> 5); + GX_BITFIELD_SET(reg, 6, 21, ((u32)fifo->write_ptr & 0x3FFFFFFF) >> 5); GX_BITFIELD_SET(reg, 5, 1, 0); GX_SET_PI_REG(5, reg); - data_80451954 = GX_TRUE; + CPGPLinked = GX_TRUE; __GXWriteFifoIntReset(1, 1); __GXWriteFifoIntEnable(1, 0); __GXFifoLink(1); } else { u32 reg; - if (data_80451954) { + if (CPGPLinked) { __GXFifoLink(0); - data_80451954 = GX_FALSE; + CPGPLinked = GX_FALSE; } __GXWriteFifoIntEnable(0, 0); GX_SET_PI_REG(3, (u32)fifo->base & 0x3FFFFFFF); GX_SET_PI_REG(4, (u32)fifo->end & 0x3FFFFFFF); reg = 0; - GX_BITFIELD_SET(reg, 6, 21, (u32)fifo->write_ptr >> 5); + GX_BITFIELD_SET(reg, 6, 21, ((u32)fifo->write_ptr & 0x3FFFFFFF) >> 5); GX_BITFIELD_SET(reg, 5, 1, 0); GX_SET_PI_REG(5, reg); } @@ -156,38 +156,48 @@ void GXSetGPFifo(GXFifoObj* fifo) { PPCSync(); if (CPUFifo == GPFifo) { - data_80451954 = 1; + CPGPLinked = 1; __GXWriteFifoIntEnable(1, 0); __GXFifoLink(1); } else { - data_80451954 = 0; + CPGPLinked = 0; __GXWriteFifoIntEnable(0, 0); __GXFifoLink(0); } reg = gx->cpEnable; - GX_BITFIELD_SET(reg, 0x1e, 1, 0); - GX_BITFIELD_SET(reg, 0x1a, 1, 0); - GX_SET_CP_REG(1, reg); - GX_SET_CP_REG(1, gx->cpEnable); __GXWriteFifoIntReset(1, 1); __GXFifoReadEnable(); OSRestoreInterrupts(interrupts); } void GXSaveCPUFifo(GXFifoObj* fifo) { - GXFlush(); __GXSaveCPUFifoAux(fifo); } +#define SOME_MACRO1(fifo) \ +do { \ + u32 temp = GX_GET_CP_REG(29) << 16; \ + temp |= GX_GET_CP_REG(28); \ + fifo->read_ptr = OSPhysicalToCached(temp); \ +} while (0) + +#define SOME_MACRO2(fifo) \ +do { \ + u32 temp = GX_GET_CP_REG(25) << 16; \ + temp |= GX_GET_CP_REG(24); \ + fifo->rw_dst = temp; \ +} while (0) + void __GXSaveCPUFifoAux(GXFifoObj* fifo) { int interrupts = OSDisableInterrupts(); + + GXFlush(); fifo->base = OSPhysicalToCached(GX_GET_PI_REG(3)); fifo->end = OSPhysicalToCached(GX_GET_PI_REG(4)); fifo->write_ptr = OSPhysicalToCached(GX_GET_PI_REG(5) & ~0x4000000); - if (data_80451954 != 0) { - u32 reg2 = GX_GET_CP_REG(28) | (GX_GET_CP_REG(29) << 16); - fifo->read_ptr = (void*)(reg2 + -0x80000000); - fifo->rw_dst = (((u32)GX_GET_CP_REG(24) | (GX_GET_CP_REG(25) << 16))); + if (CPGPLinked != 0) { + SOME_MACRO1(fifo); + SOME_MACRO2(fifo); } else { fifo->rw_dst = (u32)fifo->write_ptr - (u32)fifo->read_ptr; if (fifo->rw_dst < 0) { @@ -233,35 +243,29 @@ void __GXFifoInit(void) { } void __GXFifoReadEnable(void) { - SET_REG_FIELD(gx->cpEnable, 1, 0, 2); + SET_REG_FIELD(gx->cpEnable, 1, 0, 1); GX_SET_CP_REG(1, gx->cpEnable); } void __GXFifoReadDisable(void) { - SET_REG_FIELD(gx->cpEnable, 1, 0, 2); + SET_REG_FIELD(gx->cpEnable, 1, 0, 0); GX_SET_CP_REG(1, gx->cpEnable); } -void __GXFifoLink(u8 link) { - u32 b; - if (link) { - b = 1; - } else { - b = 0; - } - SET_REG_FIELD(gx->cpEnable, 1, 4, 2); +void __GXFifoLink(u8 en) { + SET_REG_FIELD(gx->cpEnable, 1, 4, (en != 0) ? 1 : 0); GX_SET_CP_REG(1, gx->cpEnable); } -void __GXWriteFifoIntEnable(u32 p1, u32 p2) { - SET_REG_FIELD(gx->cpEnable, 1, 2, 2); - SET_REG_FIELD(gx->cpEnable, 1, 3, 2); +void __GXWriteFifoIntEnable(u8 hiWatermarkEn, u8 loWatermarkEn) { + SET_REG_FIELD(gx->cpEnable, 1, 2, hiWatermarkEn); + SET_REG_FIELD(gx->cpEnable, 1, 3, loWatermarkEn); GX_SET_CP_REG(1, gx->cpEnable); } -void __GXWriteFifoIntReset(u32 p1, u32 p2) { - SET_REG_FIELD(gx->cpClr, 1, 0, 2); - SET_REG_FIELD(gx->cpClr, 1, 1, 2); +void __GXWriteFifoIntReset(u8 hiWatermarkClr, u8 loWatermarkClr) { + SET_REG_FIELD(gx->cpClr, 1, 0, hiWatermarkClr); + SET_REG_FIELD(gx->cpClr, 1, 1, loWatermarkClr); GX_SET_CP_REG(2, gx->cpClr); } diff --git a/src/dolphin/os/OSThread.c b/src/dolphin/os/OSThread.c index 4ac9aa657..b156818f9 100644 --- a/src/dolphin/os/OSThread.c +++ b/src/dolphin/os/OSThread.c @@ -932,6 +932,3 @@ void OSClearStack(u8 val) { *p = pattern; } } - -extern u8 data_804516D0[8]; -u8 data_804516D0[8] ALIGN_DECL(8); From 9223242a106ef2febb9ce3c942825d452c859fe2 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 16 May 2025 19:01:43 -0400 Subject: [PATCH 16/31] Add section on switch statements to decomp tutorial --- docs/decompiling.md | 218 +++++++++++++++++++++- docs/images/ghidra_jump_table_switch.png | Bin 0 -> 37873 bytes docs/images/ghidra_tree_switch.png | Bin 0 -> 22140 bytes docs/images/m2c_jump_table_switch.png | Bin 0 -> 46989 bytes docs/images/objdiff_tree_switch.png | Bin 0 -> 52336 bytes docs/images/objdiff_tree_switch_small.png | Bin 0 -> 31371 bytes 6 files changed, 213 insertions(+), 5 deletions(-) create mode 100644 docs/images/ghidra_jump_table_switch.png create mode 100644 docs/images/ghidra_tree_switch.png create mode 100644 docs/images/m2c_jump_table_switch.png create mode 100644 docs/images/objdiff_tree_switch.png create mode 100644 docs/images/objdiff_tree_switch_small.png diff --git a/docs/decompiling.md b/docs/decompiling.md index e99f0a4d6..dccc8fdd8 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -10,9 +10,10 @@ If you haven't already, you should first follow the instructions in the [readme] 2. [Setting up classes/structs](#setting-up-classesstructs) 3. [Decompiling functions](#decompiling-functions) 4. [Inline functions and how to read the debug maps](#inline-functions-and-how-to-read-the-debug-maps) -5. [Fixing minor nonmatching issues](#fixing-minor-nonmatching-issues) -6. [Linking a 100% matching object](#linking-a-100-matching-object) -7. [Documentation and naming](#documentation-and-naming) +5. [Recognizing switch statements](#recognizing-switch-statements) +6. [Fixing minor nonmatching issues](#fixing-minor-nonmatching-issues) +7. [Linking a 100% matching object](#linking-a-100-matching-object) +8. [Documentation and naming](#documentation-and-naming) ## Choosing an object to decompile @@ -210,7 +211,7 @@ void daWall_c::set_se() { } ``` -That does match in this case (it won't always), but we can improve it by checking this function in the debug map for this actor. Copy paste the function's *mangled* name (the last part of the comment after .text, e.g. `set_se__8daWall_cFv`) and Ctrl+F for it in the `D.map` for your actor. +That does match in this case (it won't always), but we can improve it by checking this function in the debug map for this actor. Copy paste the function's *mangled* name (the last part of the comment after .text, e.g. `set_se__8daWall_cFv`) and `Ctrl+F` for it in the `D.map` for your actor. You should see something along these lines: ``` @@ -302,6 +303,213 @@ Specifically, inlines at the same depth/indentation as each other in the linker This doesn't tell us as much as the real linker trees, and is based on guesswork, but going through this process can sometimes help you to determine what inlines you should be using where. +## Recognizing switch statements + +The way that switch statements get compiled into assembly is not always obvious, and you usually can't rely on Ghidra to decompile them properly either. So we'll go over some things to watch out for that can indicate when a switch should be used. + +The compiler can choose to compile a switch statement in two possible ways: As a tree of comparisons, or as a jump table. + +We'll go over how to recognize what each of these types of switches looks like in both Ghidra and objdiff/assembly. We'll also cover how to use m2c to help decompile them, as m2c handles switches better than Ghidra. + +### Comparison tree switches + +The most common way for a switch to be compiled is as a tree of comparisons: `cmpwi`, `beq`, `bge`, `cmpwi`, etc, eventually ending in `b`, and then followed by the case blocks. Here's what an example with seven cases looks like in objdiff: + +![A comparison tree switch in objdiff](images/objdiff_tree_switch.png) + +The comparison tree starts at offset 4 in this function and ends at offset 48. The first case block starts at offset 4c, the second at offset 54, etc. + +Be aware that Ghidra does not handle this type of switch statement very well. It sees the comparisons and assumes they are if/else statements instead of a switch. If you only looked at Ghidra, you probably wouldn't be able to tell this was a switch at all, and would be tempted to write it with if statements instead (which will not match): + +![A comparison tree switch in Ghidra](images/ghidra_tree_switch.png) + +Furthermore, note that Ghidra almost always displays the case blocks in the wrong order for this type of switch statement. +In this example, the return values in Ghidra are ordered like so: 3, 4, -1, 1, 0, 2, 5. The assembly in objdiff shows them as 0, 1, 5, 2, 3, 4, -1. You need to write the cases in the order shown by objdiff, not the order shown by Ghidra. + +But decompiling switch statements with just Ghidra and objdiff can be difficult not only because Ghidra shows case blocks in the wrong order, but also because neither Ghidra nor objdiff show all of the case constants needed for the switch. +For example, the `return 4;` case block in the above function is reached only when `mAnswer` is equal to `5`, so you need to write `case 5:`. But the constant 5 is not shown anywhere in either Ghidra or objdiff, as the compiler optimized it into the tree as a comparison against 4 and a comparison against 6 instead. + +But there's another decompiler you can use instead of Ghidra that handles switch statements better: [m2c](https://github.com/matt-kempster/m2c). + +To decompile a switch with m2c, first open the `.s` assembly file for your TU. Then find the function that has the switch in it and copy the whole thing to your clipboard, starting with the `.fn` line and ending with the `.endfn` line for that function. + +Next go to [this online version of m2c](https://simonsoftware.se/other/m2c.html) and paste the contents of your function into the assembly field. Switch the "Target arch, compiler, & language:" field to "PPC, MWCC, C++" and hit decompile. + +m2c should give you output similar to this: +```c++ +s32 getAnswer__10daSwTact_cFv(daSwTact_c *this) { + u8 temp_r0; + + temp_r0 = this->unk2A4; + switch ((s32) temp_r0) { /* irregular */ + case 0x0: + return 0; + case 0x1: + return 1; + case 0x2: + return 5; + case 0x3: + return 2; + case 0x4: + return 3; + case 0x5: + return 4; + default: + return -1; + } +} +``` + +m2c isn't aware of field names/types defined in Ghidra or the decomp, but other than that, its output is almost perfect in this example. For comparison, here is the same function when fully decompiled and matching: + +```c++ +/* 0000038C-00000410 .text getAnswer__10daSwTact_cFv */ +s32 daSwTact_c::getAnswer() { + switch (mAnswer) { + case 0: + return 0; + case 1: + return 1; + case 2: + return 5; + case 3: + return 2; + case 4: + return 3; + case 5: + return 4; + case 0xFF: + default: + return -1; + } +} +``` + +Note that occasionally, you may run into a very small switch statement that only has a single case label (optionally plus the default label). In these cases, there will be no `bge` in the assembly, just `cmpwi`, `beq`, `b`. For example: + +![A comparison tree switch in objdiff](images/objdiff_tree_switch_small.png) + +Both Ghidra *and* m2c will decompile these as if statements, but if you try writing them like that you'll see that the code doesn't match as the compiler produces `cmpwi`, `bne` with no `beq` or `b`. Here is how the small switch above should be decompiled to match: + +```c++ +/* 8006C910-8006C948 .text keyCreate__12dDoor_key2_cFi */ +BOOL dDoor_key2_c::keyCreate(int type) { + mbIsBossDoor = type; + switch (type) { + case 1: return keyCreate_Bkey(); + default: return keyCreate_Nkey(); + } +} +``` + +Rarely, you may run into a comparison tree switch where there are comparisons missing even after you've decompiled it in a way that's equivalent to the original. This can happen because cases that immediately `break;` without doing anything still affect which constants appear in the comparison tree, even though they have no effect on what the code actually does. +If you run into this, try adding one or more `case N: break;` blocks, where `N` is a number that either appears in the comparison tree or is close in value to one of the numbers that does appear in the comparison tree. This will take some trial and error but should eventually match the tree. + +### Jump table switches + +The other way the compiler may choose to compile a switch statement is as a jump table: `lis`, `addi`, `slwi`, `lwzx`, `mtcr`, `bctr`. +This type of switch first loads a table located in the .data section (`lis`, `addi`), indexes into it with a variable (`slwi`, `lwzx`), and then jumps to the address read from the table (`mtcr`, `bctr`). + +Unlike comparison tree switches, Ghidra is able to correctly recognize jump table switches as being switches, and will show them as such. For example: + +![A jump table switch in Ghidra](images/ghidra_jump_table_switch.png) + +However, Ghidra still has the issue where it will show the case blocks out of order for this type of switch as well sometimes. The last 4 cases in the above example are not in the correct order and won't match when written like that. + +You could write them in Ghidra's wrong order and then shuffle them around until they match in objdiff. +However, note that even if a function shows 100% matching in objdiff, it's possible that the contents of the jump table could still be wrong. You would need to look at the .data section in objdiff, as the mismatch won't be shown within the function itself in this situation. + +Alternatively, we can use m2c for this type of switch statement as well, and it will decompile the cases in the proper order. +The process for decompiling jump table switches with m2c is similar to comparison tree switches, but there's an extra step required for m2c to find the jump table. + +First open the assembly file and copy paste the function containing the switch into [m2c](https://simonsoftware.se/other/m2c.html) as mentioned earlier. +Next, find where the assembly loads the jump table. It will look something like `lis r5, "@7298"@ha` followed by `addi r5, r5, "@7298"@l`, but the number after the `@` will be different. `Ctrl+F` for that `@` + number in the assembly file to find the contents of the jump table. It will look similar to this: + +```asm +.obj "@7298", local + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A48 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A58 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A78 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A48 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A88 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A98 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A58 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A58 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A68 + .rel setAnmFromMsgTagSa__13daNpcPeople_cFi, .L_00007A58 +.endobj "@7298" +``` + +Copy the table, and paste it at the top of "Assembly" field in m2c (above the function itself). Then, replace the compiler-generated name (e.g. `@7298`) with the name `jtbl` (both the ones inside the function and the one before jump table itself). +Finally, add a new line `.section .data` before the jump table, as well as a new line `.section .text` after the table, before the function. It will look like this: + +![Jump table switch assembly for m2c](images/m2c_jump_table_switch.png) + +Now you can click "Decompile" and m2c will decompile the switch statement with its cases in the proper order, like this: + +```cpp +void setAnmFromMsgTagSa__13daNpcPeople_cFi(daNpcPeople_c *this, u32 arg0) { + switch (arg0) { + case 0: + case 3: + setAnmTbl__13daNpcPeople_cFP13sPeopleAnmDati(this, &@2100 + 0x490, 1); + return; + case 1: + case 6: + case 7: + case 9: + setAnmTbl__13daNpcPeople_cFP13sPeopleAnmDati(this, &@2100 + 0x494, 1); + return; + case 8: + setAnmTbl__13daNpcPeople_cFP13sPeopleAnmDati(this, &@2100 + 0x5D4, 1); + return; + case 2: + setAnmTbl__13daNpcPeople_cFP13sPeopleAnmDati(this, &@2100 + 0x5D8, 1); + return; + case 4: + setAnmTbl__13daNpcPeople_cFP13sPeopleAnmDati(this, &@2100 + 0x5DC, 1); + return; + case 5: + setAnmTbl__13daNpcPeople_cFP13sPeopleAnmDati(this, &@2100 + 0x5E0, 1); + /* fallthrough */ + default: + return; + } +} +``` + +For comparison, here is how that switch statement should actually be decompiled: + +```cpp +/* 00007A14-00007AB4 .text setAnmFromMsgTagSa__13daNpcPeople_cFi */ +void daNpcPeople_c::setAnmFromMsgTagSa(int param_1) { + switch(param_1) { + case 0: + case 3: + setAnmTbl(l_npc_anm_wait, 1); + break; + case 1: + case 6: + case 7: + case 9: + setAnmTbl(l_npc_anm_talk, 1); + break; + case 8: + setAnmTbl(l_npc_anm_talk_sa, 1); + break; + case 2: + setAnmTbl(l_npc_anm_talk2_sa, 1); + break; + case 4: + setAnmTbl(l_npc_anm_talk3_sa, 1); + break; + case 5: + setAnmTbl(l_npc_anm_kiai_sa, 1); + break; + } +} +``` + ## Fixing minor nonmatching issues Once you've gone through and decompiled every function in your chosen TU, you might have run into a few functions that you could only get *mostly* matching, falling short of showing a 100% match in objdiff. @@ -377,7 +585,7 @@ Your web browser will be opened automatically, and you should see a blank page t Switch from the "Source code" tab to the "Context" tab. Search through this tab for the specific function you had opened up. Cut (don't copy) this entire function out of the Context tab and paste it into the Source code tab. You also might need to go back to the Context tab and delete all the code that comes *after* the function you just cut in order for it to compile properly (don't touch the context that comes before it though). -If done correctly, the scratch should compile and show the same issue as you were seeing in objdiff. Save (Ctrl+S) the scratch. Now you can share this scratch's URL in the [tww-decomp-help](https://discord.com/channels/688807550715560050/1150077114347966545) channel of the ZeldaRET Discord server and ask for help. +If done correctly, the scratch should compile and show the same issue as you were seeing in objdiff. Save (`Ctrl+S`) the scratch. Now you can share this scratch's URL in the [tww-decomp-help](https://discord.com/channels/688807550715560050/1150077114347966545) channel of the ZeldaRET Discord server and ask for help. Note that scratches only show functions, not data. So if all the functions match 100% but some data doesn't, you'll have to figure that out locally using objdiff. diff --git a/docs/images/ghidra_jump_table_switch.png b/docs/images/ghidra_jump_table_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..fb167e3892045e384e35ea24244841324736b6e1 GIT binary patch literal 37873 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 LvLYoydOrUbH-ESn literal 0 HcmV?d00001 diff --git a/docs/images/ghidra_tree_switch.png b/docs/images/ghidra_tree_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..2f80251e19e3ab4f57277ed79b0ac99095e85bba GIT binary patch literal 22140 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 literal 0 HcmV?d00001 diff --git a/docs/images/m2c_jump_table_switch.png b/docs/images/m2c_jump_table_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..54cf9feed9cbdaed276f40848f86ab08dcf9a661 GIT binary patch literal 46989 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 literal 0 HcmV?d00001 diff --git a/docs/images/objdiff_tree_switch.png b/docs/images/objdiff_tree_switch.png new file mode 100644 index 0000000000000000000000000000000000000000..bd545719584f633a8eae10bd497289b01c8f7979 GIT binary patch literal 52336 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 literal 0 HcmV?d00001 From 98b8f3f559118903a5bec2dc0b8288f5e609d503 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Fri, 16 May 2025 19:12:40 -0400 Subject: [PATCH 17/31] Improve explanation of 'useless' switch cases in tutorial --- docs/decompiling.md | 13 ++++++++----- docs/images/objdiff_tree_switch_useless.png | Bin 0 -> 99601 bytes 2 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 docs/images/objdiff_tree_switch_useless.png diff --git a/docs/decompiling.md b/docs/decompiling.md index dccc8fdd8..fb808f070 100644 --- a/docs/decompiling.md +++ b/docs/decompiling.md @@ -360,7 +360,7 @@ s32 getAnswer__10daSwTact_cFv(daSwTact_c *this) { } ``` -m2c isn't aware of field names/types defined in Ghidra or the decomp, but other than that, its output is almost perfect in this example. For comparison, here is the same function when fully decompiled and matching: +m2c isn't aware of field names/types defined in Ghidra or the decomp, but other than that, its output is pretty close. For comparison, here is the same function when fully decompiled and matching: ```c++ /* 0000038C-00000410 .text getAnswer__10daSwTact_cFv */ @@ -385,7 +385,13 @@ s32 daSwTact_c::getAnswer() { } ``` -Note that occasionally, you may run into a very small switch statement that only has a single case label (optionally plus the default label). In these cases, there will be no `bge` in the assembly, just `cmpwi`, `beq`, `b`. For example: +One important detail in the above example is the `case 0xFF:`. Because this case leads to the same block as the default case, it has no functional effect on what the code does, and so m2c does not include it. However, if you don't include that useless case, the comparison tree will be missing some parts and the function will not match: + +![A comparison tree missing a useless case label in objdiff](images/objdiff_tree_switch_useless.png) + +If you run into a situation like this, try looking through values that are compared against in objdiff or Ghidra and adding them as cases above `default:` (or if no default label exists, just make them immediately `break;` without doing anything). Sometimes the value you need to add as a case will be plus or minus one compared to the actual value being compared against, so it may take some trial and error to find which specific cases are required to get the tree to generate correctly. + +Also note that occasionally, you may run into a very small switch statement that only has a single case label (optionally plus the default label). In these cases, there will be no `bge` in the assembly, just `cmpwi`, `beq`, `b`. For example: ![A comparison tree switch in objdiff](images/objdiff_tree_switch_small.png) @@ -402,9 +408,6 @@ BOOL dDoor_key2_c::keyCreate(int type) { } ``` -Rarely, you may run into a comparison tree switch where there are comparisons missing even after you've decompiled it in a way that's equivalent to the original. This can happen because cases that immediately `break;` without doing anything still affect which constants appear in the comparison tree, even though they have no effect on what the code actually does. -If you run into this, try adding one or more `case N: break;` blocks, where `N` is a number that either appears in the comparison tree or is close in value to one of the numbers that does appear in the comparison tree. This will take some trial and error but should eventually match the tree. - ### Jump table switches The other way the compiler may choose to compile a switch statement is as a jump table: `lis`, `addi`, `slwi`, `lwzx`, `mtcr`, `bctr`. diff --git a/docs/images/objdiff_tree_switch_useless.png b/docs/images/objdiff_tree_switch_useless.png new file mode 100644 index 0000000000000000000000000000000000000000..8e23351c337b24b6ba633b09dc43d3f91e9b71a7 GIT binary patch literal 99601 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 a6J+#;Y7OyoExZE$WF?g(Dn1!~`+oq-i%5e2 literal 0 HcmV?d00001 From 337303fc79e9d82c2c4adeb8e2510fb37d9ffc96 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 14:01:12 -0400 Subject: [PATCH 18/31] Standardize mMode/mAction names in C-style actors --- include/c/c_damagereaction.h | 8 +- include/d/actor/d_a_am.h | 2 +- include/d/actor/d_a_am2.h | 2 +- include/d/actor/d_a_dr.h | 2 +- include/d/actor/d_a_fganon.h | 4 +- include/d/actor/d_a_ks.h | 4 +- include/d/actor/d_a_kt.h | 2 +- include/d/actor/d_a_pw.h | 2 +- src/c/c_damagereaction.cpp | 28 +- src/d/actor/d_a_am.cpp | 122 ++++---- src/d/actor/d_a_am2.cpp | 110 +++---- src/d/actor/d_a_bk.cpp | 578 +++++++++++++++++------------------ src/d/actor/d_a_dr.cpp | 16 +- src/d/actor/d_a_fganon.cpp | 304 +++++++++--------- src/d/actor/d_a_ks.cpp | 206 +++++++------ src/d/actor/d_a_kt.cpp | 24 +- src/d/actor/d_a_kytag00.cpp | 5 +- src/d/actor/d_a_npc_bs1.cpp | 348 +++++++++++---------- src/d/actor/d_a_npc_ji1.cpp | 110 +++---- src/d/actor/d_a_pw.cpp | 56 ++-- src/d/actor/d_a_rd.cpp | 8 +- 21 files changed, 979 insertions(+), 962 deletions(-) diff --git a/include/c/c_damagereaction.h b/include/c/c_damagereaction.h index 5370a60da..dbf406772 100644 --- a/include/c/c_damagereaction.h +++ b/include/c/c_damagereaction.h @@ -17,7 +17,7 @@ public: /* 0x007 */ u8 m007[0x008 - 0x007]; /* 0x008 */ f32 mYOffset; /* 0x00C */ s8 m00C; - /* 0x00D */ s8 mState; + /* 0x00D */ s8 mMode; /* 0x00E */ s16 mFreezeTimer; /* 0x010 */ s16 mMoveDelayTimer; /* 0x012 */ s16 mAngleY; @@ -46,7 +46,7 @@ struct enemyfire { public: /* 0x000 */ fopAc_ac_c* mpActor; /* 0x004 */ s16 mFireDuration; - /* 0x006 */ s8 mState; + /* 0x006 */ s8 mMode; /* 0x007 */ u8 m007[0x008 - 0x007]; /* 0x008 */ s16 mFireTimer; /* 0x00A */ u8 m00A[0x00C - 0x00A]; @@ -77,8 +77,8 @@ public: }; /* 0x000 */ fopEn_enemy_c* mpEnemy; - /* 0x004 */ s16 m004; - /* 0x006 */ s16 mState; + /* 0x004 */ s16 mMode; + /* 0x006 */ s16 mAction; /* 0x008 */ s16 mEnemyType; /* 0x00A */ u8 m00A[0x00C - 0x00A]; /* 0x00C */ int mTimer; diff --git a/include/d/actor/d_a_am.h b/include/d/actor/d_a_am.h index b4c5afeac..484350a6f 100644 --- a/include/d/actor/d_a_am.h +++ b/include/d/actor/d_a_am.h @@ -19,7 +19,7 @@ public: /* 0x02C2 */ u8 mStartsInactive; /* 0x02C3 */ u8 mSwitch; /* 0x02C4 */ u8 mAction; - /* 0x02C5 */ u8 mState; + /* 0x02C5 */ u8 mMode; /* 0x02C6 */ u8 mHugeKnockback; /* 0x02C7 */ bool mbIsBodyBeingHit; /* 0x02C8 */ s16 mCountDownTimers[4]; diff --git a/include/d/actor/d_a_am2.h b/include/d/actor/d_a_am2.h index 0d8632396..6128c619f 100644 --- a/include/d/actor/d_a_am2.h +++ b/include/d/actor/d_a_am2.h @@ -21,7 +21,7 @@ public: /* 0x2CA */ u8 mStartsInactive; /* 0x2CB */ u8 mSwitch; /* 0x2CC */ u8 mAction; - /* 0x2CD */ u8 mState; + /* 0x2CD */ u8 mMode; /* 0x2CE */ u8 m2CE; /* 0x2CF */ bool mbIsWeakBeingHit; /* 0x2D0 */ bool mbNotInHomeRoom; diff --git a/include/d/actor/d_a_dr.h b/include/d/actor/d_a_dr.h index adba4a25d..99be10431 100644 --- a/include/d/actor/d_a_dr.h +++ b/include/d/actor/d_a_dr.h @@ -16,7 +16,7 @@ public: /* 0x290 */ u8 m290[0x2AC - 0x290]; /* 0x2AC */ request_of_phase_process_class mPhs; /* 0x2B4 */ mDoExt_McaMorf* mpMorf; - /* 0x2B8 */ u8 mState; + /* 0x2B8 */ u8 mMode; /* 0x2B9 */ u8 m2B9[0x2BA - 0x2B9]; /* 0x2BA */ s16 mCountDownTimers[3]; /* 0x2C0 */ int mCurrBckIdx; diff --git a/include/d/actor/d_a_fganon.h b/include/d/actor/d_a_fganon.h index 347770926..f06c8599c 100644 --- a/include/d/actor/d_a_fganon.h +++ b/include/d/actor/d_a_fganon.h @@ -30,8 +30,8 @@ public: /* 0x2D1 */ u8 m2D1[0x2D4 - 0x2D1]; /* 0x2D4 */ dKy_tevstr_c mKenTevStr; /* 0x384 */ s16 m384; - /* 0x386 */ s16 m386; - /* 0x388 */ s16 m388; + /* 0x386 */ s16 mAction; + /* 0x388 */ s16 mMode; /* 0x38A */ s16 m38A; /* 0x38C */ cXyz m38C; /* 0x398 */ s16 m398; diff --git a/include/d/actor/d_a_ks.h b/include/d/actor/d_a_ks.h index 135fd024d..b1313ab55 100644 --- a/include/d/actor/d_a_ks.h +++ b/include/d/actor/d_a_ks.h @@ -20,8 +20,8 @@ public: /* 0x2C8 */ u8 m2C8; /* 0x2C9 */ u8 m2C9; /* 0x2CA */ u8 m2CA; - /* 0x2CB */ u8 m2CB; - /* 0x2CC */ u8 m2CC; + /* 0x2CB */ u8 mAction; + /* 0x2CC */ u8 mMode; /* 0x2CD */ u8 m2CD; /* 0x2CE */ u8 m2CE; /* 0x2CF */ u8 m2CF; diff --git a/include/d/actor/d_a_kt.h b/include/d/actor/d_a_kt.h index f24b2671e..74e7e6af3 100644 --- a/include/d/actor/d_a_kt.h +++ b/include/d/actor/d_a_kt.h @@ -26,7 +26,7 @@ public: /* 0x308 */ cXyz mHomePos; /* 0x314 */ s16 mTimer[3]; /* 0x31A */ s16 mAngleRoll; - /* 0x31C */ s8 mState; + /* 0x31C */ s8 mMode; /* 0x31D */ u8 field_0x31d; /* 0x31E */ bool mHitGround; /* 0x31E */ u8 field_0x31f; diff --git a/include/d/actor/d_a_pw.h b/include/d/actor/d_a_pw.h index ef1fcee9f..61392cb93 100644 --- a/include/d/actor/d_a_pw.h +++ b/include/d/actor/d_a_pw.h @@ -47,7 +47,7 @@ public: /* 0x359 */ u8 mPathIndex; /* 0x35A */ u8 m35A[0x366 - 0x35A]; /* 0x366 */ s16 mAction; - /* 0x368 */ s16 mState; + /* 0x368 */ s16 mMode; /* 0x36A */ u8 m36A[0x36C - 0x36A]; /* 0x36C */ fpc_ProcID mJalhallaID; /* 0x370 */ fpc_ProcID mKanteraID; diff --git a/src/c/c_damagereaction.cpp b/src/c/c_damagereaction.cpp index 2a584ac79..a36f22ec4 100644 --- a/src/c/c_damagereaction.cpp +++ b/src/c/c_damagereaction.cpp @@ -175,7 +175,7 @@ BOOL enemy_ice(enemyice* ei) { BOOL frozen = FALSE; BOOL moveAndCollide = FALSE; - switch (ei->mState) { + switch (ei->mMode) { case 0: // Not initialized // Initialize the enemyice now. ei->mStts.Init(250, 0xFF, ac); @@ -192,7 +192,7 @@ BOOL enemy_ice(enemyice* ei) { if (std::fabsf(ei->mYOffset) < 0.1f) { ei->mYOffset = 80.0f; } - ei->mState = 1; + ei->mMode = 1; ei->mScaleY = 1.0f; ei->mScaleXZ = 1.0f; fopAcM_OnStatus(ac, fopAcStts_UNK8000000_e); @@ -202,7 +202,7 @@ BOOL enemy_ice(enemyice* ei) { // The enemy has signaled that it wants to be frozen for some length of time. ei->mFreezeTimer = ei->mFreezeDuration; ei->mFreezeDuration = 0; - ei->mState = 2; + ei->mMode = 2; if (ei->m00C == 0) { ei->mSpeed.y = 30.0f; ei->mAngularVelY = (s16)cM_rndFX(3000.0f); @@ -232,7 +232,7 @@ BOOL enemy_ice(enemyice* ei) { ac->attention_info.distances[fopAc_Attn_TYPE_CARRY_e] = 0x12; if (fopAcM_CheckStatus(ac, fopAcStts_CARRY_e)) { cLib_offBit(ac->attention_info.flags, fopAc_Attn_ACTION_CARRY_e); - ei->mState = 3; + ei->mMode = 3; if (ei->m00C == 2) { ei->m00C = 0; } @@ -250,7 +250,7 @@ BOOL enemy_ice(enemyice* ei) { ei->mSpeed.y = -15.0f; } ei->mAngleY = player->shape_angle.y; - ei->mState = 2; + ei->mMode = 2; } break; } @@ -349,7 +349,7 @@ BOOL enemy_ice(enemyice* ei) { } if (ei->mFreezeTimer == 0) { - ei->mState = 1; + ei->mMode = 1; ei->mCyl.SetC(non_pos); dComIfG_Ccsp()->Set(&ei->mCyl); @@ -440,7 +440,7 @@ void enemy_fire(enemyfire* ef) { cXyz pos; offset.setall(0.0f); - switch (ef->mState) { + switch (ef->mMode) { case 0: // Not on fire. if (ef->mFireDuration == 0) { return; @@ -449,7 +449,7 @@ void enemy_fire(enemyfire* ef) { ef->mFireTimer = ef->mFireDuration; ef->mFireDuration = 0; - ef->mState = 1; // On fire + ef->mMode = 1; // On fire dKy_plight_set(&ef->mLight); @@ -562,7 +562,7 @@ void enemy_fire(enemyfire* ef) { fopAcM_seStart(ac, JA_SE_OBJ_TORCH_BURNING, 0); if (ef->mFireTimer == 0) { - ef->mState = 0; // Not on fire + ef->mMode = 0; // Not on fire dKy_plight_cut(&ef->mLight); ef->mSph.SetC(non_pos); dComIfG_Ccsp()->Set(&ef->mSph); @@ -579,7 +579,7 @@ void enemy_fire(enemyfire* ef) { /* 8001D3B0-8001D428 .text enemy_fire_remove__FP9enemyfire */ void enemy_fire_remove(enemyfire* ef) { - ef->mState = 0; // Not on fire + ef->mMode = 0; // Not on fire dKy_plight_cut(&ef->mLight); for (int i = 0; i < 10; i++) { @@ -641,7 +641,7 @@ void dr_body_bg_check(damagereaction* dr) { dr->m71E--; } - if (dr->mState != 21 && dr->mState != 22) { + if (dr->mAction != 21 && dr->mAction != 22) { dBgS_ObjGndChk_Spl gndChk; f32 x = dr->mpEnemy->current.pos.x; f32 y = dr->mpEnemy->current.pos.y; @@ -655,14 +655,14 @@ void dr_body_bg_check(damagereaction* dr) { f32 floor_y = dComIfG_Bgsp()->GroundCross(&gndChk); if (floor_y != C_BG_MIN_HEIGHT && dr->mpEnemy->current.pos.y <= floor_y) { dr->mpEnemy->current.pos.y = floor_y + REG0_F(13); - dr->m004 = 0; + dr->mMode = 0; dr->m47C = 0; if (dComIfG_Bgsp()->ChkGrpInf(gndChk, 0x100)) { - dr->mState = 22; + dr->mAction = 22; cXyz sp14(x, floor_y, z); fopKyM_createWpillar(&sp14, REG0_F(9) + 1.0f, REG0_F(10) + 1.0f, 0); } else { - dr->mState = 21; + dr->mAction = 21; cXyz sp08(x, floor_y, z); fopKyM_createMpillar(&sp08, REG0_F(14) + 0.5f); } diff --git a/src/d/actor/d_a_am.cpp b/src/d/actor/d_a_am.cpp index bf9cd5494..b51b20f41 100644 --- a/src/d/actor/d_a_am.cpp +++ b/src/d/actor/d_a_am.cpp @@ -34,17 +34,17 @@ enum Action { ACTION_ITAI_MOVE = 3, }; -enum State { - STATE_DOUSA_INIT = 0, - STATE_DOUSA_OKIRU = 2, - STATE_DOUSA_SLEEP_INIT = 9, - STATE_DOUSA_SLEEP_MAIN = 10, - STATE_MODORU_MOVE_INIT = 20, - STATE_MODORU_MOVE_MAIN = 21, - STATE_MODORU_MOVE_END = 22, - STATE_HANDOU_MOVE_INIT = 30, - STATE_HANDOU_MOVE_MAIN = 31, - STATE_ITAI_MOVE_INIT = 40, +enum Mode { + MODE_DOUSA_INIT = 0, + MODE_DOUSA_OKIRU = 2, + MODE_DOUSA_SLEEP_INIT = 9, + MODE_DOUSA_SLEEP_MAIN = 10, + MODE_MODORU_MOVE_INIT = 20, + MODE_MODORU_MOVE_MAIN = 21, + MODE_MODORU_MOVE_END = 22, + MODE_HANDOU_MOVE_INIT = 30, + MODE_HANDOU_MOVE_MAIN = 31, + MODE_ITAI_MOVE_INIT = 40, }; /* 00000078-0000021C .text nodeCallBack__FP7J3DNodei */ @@ -195,7 +195,7 @@ static void body_atari_check(am_class* i_this) { return; } i_this->mAction = ACTION_HANDOU_MOVE; - i_this->mState = STATE_HANDOU_MOVE_INIT; + i_this->mMode = MODE_HANDOU_MOVE_INIT; i_this->mHugeKnockback = 0; if (player->getCutType() == 0x11) { // If the player hits the Armos Knight with the Skull Hammer's side swing, knock it back much farther than normal. @@ -284,14 +284,14 @@ static BOOL medama_atari_check(am_class* i_this) { i_this->mNeedleCyl.OnAtSPrmBit(cCcD_AtSPrm_Set_e); i_this->mNeedleCyl.OnAtHitBit(); i_this->mAction = ACTION_DOUSA; - i_this->mState = STATE_DOUSA_OKIRU; + i_this->mMode = MODE_DOUSA_OKIRU; } else { dComIfGp_particle_set(dPa_name::ID_COMMON_0010, &i_this->mEyeballPos, &player->shape_angle); // fopAcM_seStart(i_this, JA_SE_CM_AM_EYE_DAMAGE, 0); mDoAud_seStart(JA_SE_CM_AM_EYE_DAMAGE, &i_this->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); fopAcM_monsSeStart(i_this, JA_SE_CV_AM_EYE_DAMAGE, 0x42); i_this->mAction = ACTION_ITAI_MOVE; - i_this->mState = STATE_ITAI_MOVE_INIT; + i_this->mMode = MODE_ITAI_MOVE_INIT; } break; default: @@ -394,7 +394,7 @@ static BOOL bomb_nomi_check(am_class* i_this) { bomb->setBombNoHit(); bomb_move_set(i_this, 0); i_this->mAction = ACTION_ITAI_MOVE; - i_this->mState = 44; + i_this->mMode = 44; return TRUE; } } @@ -409,7 +409,7 @@ static BOOL bomb_nomi_check(am_class* i_this) { bomb2->set_no_hit(); bomb_move_set(i_this, 0); i_this->mAction = ACTION_ITAI_MOVE; - i_this->mState = 44; + i_this->mMode = 44; return TRUE; } } @@ -481,13 +481,13 @@ static void medama_move(am_class* i_this) { /* 00001B00-00002564 .text action_dousa__FP8am_class */ static void action_dousa(am_class* i_this) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); - switch (i_this->mState) { - case STATE_DOUSA_INIT: + switch (i_this->mMode) { + case MODE_DOUSA_INIT: for (int i = 0; i < ARRAY_SIZE(i_this->mCountUpTimers); i++) { i_this->mCountUpTimers[i] = 0; } anm_init(i_this, AM_BCK_SLEEP_LOOP, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 1: if (i_this->mStartsInactive == 1 && i_this->mSwitch != 0xFF && !dComIfGs_isSwitch(i_this->mSwitch, dComIfGp_roomControl_getStayNo())) { @@ -506,15 +506,15 @@ static void action_dousa(am_class* i_this) { i_this->attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e; i_this->mNeedleCyl.OnAtSetBit(); i_this->mNeedleCyl.OnAtHitBit(); - i_this->mState += 1; // STATE_DOUSA_OKIRU + i_this->mMode += 1; // MODE_DOUSA_OKIRU } } break; - case STATE_DOUSA_OKIRU: + case MODE_DOUSA_OKIRU: if (!i_this->mpMorf->isStop()) { break; } - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 3: if (i_this->mCurrBckIdx != AM_BCK_CLOSE && i_this->mCurrBckIdx != AM_BCK_CLOSE_LOOP) { @@ -528,7 +528,7 @@ static void action_dousa(am_class* i_this) { i_this->mCountDownTimers[2] = 6; } i_this->mTargetAngleY = fopAcM_searchPlayerAngleY(i_this); - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 4: { if (i_this->mCountDownTimers[2] == 1) { @@ -544,24 +544,24 @@ static void action_dousa(am_class* i_this) { f32 xzDist = std::sqrtf(xDist*xDist + zDist*zDist); if (xzDist > i_this->mAreaRadius) { i_this->mAction = ACTION_MODORU_MOVE; - i_this->mState = STATE_MODORU_MOVE_INIT; + i_this->mMode = MODE_MODORU_MOVE_INIT; return; } } else { if (fopAcM_searchPlayerDistance(i_this) > 2000.0f) { - i_this->mState = STATE_DOUSA_SLEEP_INIT; + i_this->mMode = MODE_DOUSA_SLEEP_INIT; break; } f32 yDist = player->current.pos.y - i_this->current.pos.y; yDist = std::sqrtf(yDist*yDist); // ??? if (yDist > 300.0f) { - i_this->mState = STATE_DOUSA_SLEEP_INIT; + i_this->mMode = MODE_DOUSA_SLEEP_INIT; break; } } s16 yRotDiff = cLib_distanceAngleS(i_this->shape_angle.y, i_this->mTargetAngleY); if (yRotDiff < 0x100) { - i_this->mState += 1; + i_this->mMode += 1; } break; } @@ -573,7 +573,7 @@ static void action_dousa(am_class* i_this) { if (!Line_check(i_this, player->current.pos) || player->getDamageWaitTimer() != 0) { i_this->speedF = 0.0f; } - i_this->mState += 1; + i_this->mMode += 1; break; case 6: if (i_this->mCurrBckIdx == AM_BCK_CLOSE) { @@ -596,7 +596,7 @@ static void action_dousa(am_class* i_this) { if (i_this->mCountUpTimers[0] < 2) { i_this->mCountDownTimers[0] = 10; } - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 7: if (i_this->mCountDownTimers[0] != 0) { @@ -621,9 +621,9 @@ static void action_dousa(am_class* i_this) { 0xB9, &i_this->mSmokeCbs[2], fopAcM_GetRoomNo(i_this) ); } - i_this->mState = 8; + i_this->mMode = 8; } else { - i_this->mState = 3; + i_this->mMode = 3; } break; case 8: @@ -635,27 +635,27 @@ static void action_dousa(am_class* i_this) { } if (i_this->mCountDownTimers[0] == 0) { i_this->mSmokeCbs[2].remove(); - i_this->mState = 3; + i_this->mMode = 3; } break; - case STATE_DOUSA_SLEEP_INIT: + case MODE_DOUSA_SLEEP_INIT: anm_init(i_this, AM_BCK_SLEEP, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); fopAcM_seStart(i_this, JA_SE_CM_AM_NEEDLE_IN, 0); i_this->mNeedleCyl.OffAtSetBit(); i_this->mNeedleCyl.OffAtSetBit(); i_this->attention_info.flags = 0; - i_this->mState += 1; + i_this->mMode += 1; break; - case STATE_DOUSA_SLEEP_MAIN: + case MODE_DOUSA_SLEEP_MAIN: if (i_this->mpMorf->isStop()) { - i_this->mState = 0; + i_this->mMode = 0; } break; } medama_move(i_this); - if (i_this->mState != 2 && medama_atari_check(i_this)) { + if (i_this->mMode != 2 && medama_atari_check(i_this)) { i_this->mSmokeCbs[2].remove(); } else if (bomb_nomi_check(i_this)) { i_this->mSmokeCbs[2].remove(); @@ -664,8 +664,8 @@ static void action_dousa(am_class* i_this) { /* 00002564-000028C4 .text action_modoru_move__FP8am_class */ static void action_modoru_move(am_class* i_this) { - switch (i_this->mState) { - case STATE_MODORU_MOVE_INIT: { + switch (i_this->mMode) { + case MODE_MODORU_MOVE_INIT: { anm_init(i_this, AM_BCK_CLOSE_LOOP, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); i_this->mNeedleCyl.OnAtSetBit(); i_this->mNeedleCyl.OnAtHitBit(); @@ -677,10 +677,10 @@ static void action_modoru_move(am_class* i_this) { f32 xDistToSpawn = i_this->mSpawnPos.x - i_this->current.pos.x; f32 zDistToSpawn = i_this->mSpawnPos.z - i_this->current.pos.z; i_this->mTargetAngleY = cM_atan2s(xDistToSpawn, zDistToSpawn); - i_this->mState += 1; + i_this->mMode += 1; break; } - case STATE_MODORU_MOVE_MAIN: { + case MODE_MODORU_MOVE_MAIN: { f32 xDistToSpawn = i_this->mSpawnPos.x - i_this->current.pos.x; f32 zDistToSpawn = i_this->mSpawnPos.z - i_this->current.pos.z; if (i_this->mAcch.ChkGroundHit()) { @@ -705,18 +705,18 @@ static void action_modoru_move(am_class* i_this) { if (xzDist < 20.0f) { i_this->mTargetAngleY = i_this->mSpawnRotY; i_this->speedF = 0.0f; - i_this->mState += 1; + i_this->mMode += 1; } break; } - case STATE_MODORU_MOVE_END: { + case MODE_MODORU_MOVE_END: { s16 angleDiff = cLib_distanceAngleS(i_this->shape_angle.y, i_this->mTargetAngleY); if (angleDiff < 0x100) { i_this->mNeedleCyl.OffAtSetBit(); i_this->mNeedleCyl.OffAtSetBit(); i_this->attention_info.flags = 0; i_this->mAction = ACTION_DOUSA; - i_this->mState = STATE_DOUSA_INIT; + i_this->mMode = MODE_DOUSA_INIT; } break; } @@ -726,8 +726,8 @@ static void action_modoru_move(am_class* i_this) { /* 000028C4-00002A6C .text action_handou_move__FP8am_class */ static void action_handou_move(am_class* i_this) { daPy_py_c* player = daPy_getPlayerActorClass(); - switch (i_this->mState) { - case STATE_HANDOU_MOVE_INIT: { + switch (i_this->mMode) { + case MODE_HANDOU_MOVE_INIT: { i_this->speedF = 20.0f; s16 angleToPlayer = fopAcM_searchPlayerAngleY(i_this); i_this->current.angle.y = angleToPlayer + 0x8000; @@ -743,17 +743,17 @@ static void action_handou_move(am_class* i_this) { mDoAud_seStart(JA_SE_CM_AM_MOUTH_CLOSE, &i_this->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); anm_init(i_this, AM_BCK_CLOSE, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); } - i_this->mState += 1; + i_this->mMode += 1; // Fall-through } - case STATE_HANDOU_MOVE_MAIN: { + case MODE_HANDOU_MOVE_MAIN: { cLib_addCalc0(&i_this->speedF, 0.8f, 2.0f); if (i_this->speedF < 0.1f) { i_this->speedF = 0.0f; i_this->mCountDownTimers[2] = 6; i_this->current.angle.y = i_this->shape_angle.y; i_this->mAction = ACTION_DOUSA; - i_this->mState = 3; + i_this->mMode = 3; } break; } @@ -762,8 +762,8 @@ static void action_handou_move(am_class* i_this) { /* 00002A6C-000034F4 .text action_itai_move__FP8am_class */ static void action_itai_move(am_class* i_this) { - switch (i_this->mState) { - case STATE_ITAI_MOVE_INIT: + switch (i_this->mMode) { + case MODE_ITAI_MOVE_INIT: i_this->mEyeRot.setall(0); i_this->mNeedleCyl.OffAtSetBit(); i_this->mNeedleCyl.OffAtSetBit(); @@ -772,7 +772,7 @@ static void action_itai_move(am_class* i_this) { i_this->mTargetAngleY = i_this->current.angle.y; fopAcM_seStart(i_this, JA_SE_CM_AM_NEEDLE_IN, 0); anm_init(i_this, AM_BCK_DAMAGE, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 41: cLib_addCalc0(&i_this->speedF, 0.8f, 2.0f); @@ -782,7 +782,7 @@ static void action_itai_move(am_class* i_this) { i_this->mCountDownTimers[0] = 100; i_this->speedF = 0.0f; anm_init(i_this, AM_BCK_DAMAGE_LOOP, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->mState += 1; + i_this->mMode += 1; break; case 42: if (i_this->mCountDownTimers[0] != 0) { @@ -793,7 +793,7 @@ static void action_itai_move(am_class* i_this) { // Using the fopAcM_seStart inline multiple times in a single case makes the codegen not match. // fopAcM_seStart(i_this, JA_SE_CM_AM_MOUTH_CLOSE, 0); mDoAud_seStart(JA_SE_CM_AM_MOUTH_CLOSE, &i_this->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); - i_this->mState += 1; + i_this->mMode += 1; break; case 43: if (!i_this->mpMorf->isStop()) { @@ -803,7 +803,7 @@ static void action_itai_move(am_class* i_this) { i_this->mNeedleCyl.OnAtHitBit(); i_this->mCountUpTimers[0] = 0; i_this->mAction = ACTION_DOUSA; - i_this->mState = 3; + i_this->mMode = 3; break; case 44: i_this->mSmokeCbs[3].remove(); @@ -819,7 +819,7 @@ static void action_itai_move(am_class* i_this) { i_this->mNeedleCyl.OffAtSetBit(); i_this->mNeedleCyl.OffAtSetBit(); i_this->mCountDownTimers[1] = 10; - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 45: bomb_move_set(i_this, 0); @@ -846,7 +846,7 @@ static void action_itai_move(am_class* i_this) { } i_this->mCountDownTimers[0] = 100; i_this->mTargetAngleY = fopAcM_searchPlayerAngleY(i_this); - i_this->mState += 1; + i_this->mMode += 1; break; case 46: bomb_move_set(i_this, 1); @@ -889,7 +889,7 @@ static void action_itai_move(am_class* i_this) { i_this->m0340 = NULL; } i_this->speedF = 0.0f; - i_this->mState += 1; + i_this->mMode += 1; break; case 47: bomb_move_set(i_this, 1); @@ -930,7 +930,7 @@ static void action_itai_move(am_class* i_this) { i_this->m0340->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(2)); } - if (i_this->mState == 41 || i_this->mState == 42) { + if (i_this->mMode == 41 || i_this->mMode == 42) { bomb_nomi_check(i_this); } } @@ -987,11 +987,11 @@ static BOOL daAM_Execute(am_class* i_this) { i_this->speedF = 0.0f; i_this->mAction = ACTION_ITAI_MOVE; - i_this->mState = 47; + i_this->mMode = 47; } cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->mTargetAngleY, 1, 0x500); - if (i_this->mState != 46 && i_this->mState != 47 && i_this->mState != 31) { + if (i_this->mMode != 46 && i_this->mMode != 47 && i_this->mMode != 31) { cLib_addCalcAngleS2(&i_this->shape_angle.y, i_this->current.angle.y, 1, 0x500); } diff --git a/src/d/actor/d_a_am2.cpp b/src/d/actor/d_a_am2.cpp index d3461013a..2d26f1522 100644 --- a/src/d/actor/d_a_am2.cpp +++ b/src/d/actor/d_a_am2.cpp @@ -177,7 +177,7 @@ static BOOL medama_atari_check(am2_class* i_this) { i_this->mNeedleCyl.OnAtHitBit(); i_this->mNeedleCyl.OnTgSetBit(); i_this->mAction = ACTION_DOUSA; - i_this->mState = 2; + i_this->mMode = 2; } else { dComIfGp_particle_set(dPa_name::ID_COMMON_0010, &hitPos, &player->shape_angle); // Using the fopAcM_seStart inline breaks the codegen. @@ -185,7 +185,7 @@ static BOOL medama_atari_check(am2_class* i_this) { mDoAud_seStart(JA_SE_CM_AM2_PARALYZED, &i_this->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); fopAcM_monsSeStart(i_this, JA_SE_CV_AM2_PARALYZED, 0x42); i_this->mAction = ACTION_MAHI; - i_this->mState = 10; + i_this->mMode = 10; } return TRUE; } @@ -294,7 +294,7 @@ static BOOL week_atari_check(am2_class* i_this) { } i_this->mAction = ACTION_ITAI; - i_this->mState = 20; + i_this->mMode = 20; if (i_this->m2CE == 7 || i_this->m2CE == 8) { actor->health = 0; } @@ -341,7 +341,7 @@ static BOOL body_atari_check(am2_class* i_this) { break; } i_this->mAction = ACTION_HANDOU_MOVE; - i_this->mState = 30; + i_this->mMode = 30; i_this->m2CE = 7; if (player->getCutType() == 0x11) { i_this->m2CE = 8; @@ -448,7 +448,7 @@ static void action_dousa(am2_class* i_this) { cXyz offset; cXyz rotOffset; - if (i_this->mState == 4 || i_this->mState == 5) { + if (i_this->mMode == 4 || i_this->mMode == 5) { cMtx_YrotS(*calc_mtx, i_this->current.angle.y); offset.set(0.0f, 0.0f, 200.0f); MtxPosition(&offset, &rotOffset); @@ -456,7 +456,7 @@ static void action_dousa(am2_class* i_this) { rotOffset.y += 100.0f + REG12_F(19); } - switch (i_this->mState) { + switch (i_this->mMode) { case 0: for (int i = 0; i < ARRAY_SIZE(i_this->mCountUpTimers); i++) { i_this->mCountUpTimers[i] = 0; @@ -465,7 +465,7 @@ static void action_dousa(am2_class* i_this) { if (i_this->mCurrBckIdx != AM2_BCK_WAIT) { anm_init(i_this, AM2_BCK_WAIT, 10.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); } - i_this->mState++; + i_this->mMode++; // Fall-through case 1: { f32 playerDist = fopAcM_searchPlayerDistance(i_this); @@ -479,7 +479,7 @@ static void action_dousa(am2_class* i_this) { fopAcM_monsSeStart(i_this, JA_SE_CV_AM2_AWAKE, 0); i_this->mEyeSph.OnTgSetBit(); i_this->mWeakSph.OnTgSetBit(); - i_this->mState += 1; + i_this->mMode += 1; } } break; @@ -491,7 +491,7 @@ static void action_dousa(am2_class* i_this) { if (!i_this->mpMorf->isStop()) { break; } - i_this->mState++; + i_this->mMode++; // Fall-through case 3: { for (int i = 0; i < ARRAY_SIZE(i_this->mCountUpTimers); i++) { @@ -501,7 +501,7 @@ static void action_dousa(am2_class* i_this) { f32 playerDist = fopAcM_searchPlayerDistance(i_this); f32 radiusAdjust = 200.0f; if (playerDist > i_this->mAreaRadius + radiusAdjust) { - i_this->mState = 6; + i_this->mMode = 6; } else { i_this->mNeedleCyl.OnAtSetBit(); i_this->mNeedleCyl.OnAtHitBit(); @@ -512,7 +512,7 @@ static void action_dousa(am2_class* i_this) { if (i_this->mCurrBckIdx != AM2_BCK_JUMP) { anm_init(i_this, AM2_BCK_JUMP, 2.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); } - i_this->mState++; + i_this->mMode++; } break; } @@ -521,11 +521,11 @@ static void action_dousa(am2_class* i_this) { i_this->gravity = -3.0f; i_this->speed.y = 12.0f; fopAcM_seStart(i_this, JA_SE_CM_AM2_LANDING, 0); - i_this->mState = 3; + i_this->mMode = 3; s16 angleDiff = cLib_distanceAngleS(i_this->shape_angle.y, i_this->current.angle.y); if (angleDiff < 0x1000) { if (Line_check(i_this, rotOffset) || player->getDamageWaitTimer() == 0) { - i_this->mState = 5; + i_this->mMode = 5; } } } @@ -552,7 +552,7 @@ static void action_dousa(am2_class* i_this) { } if (i_this->mCountUpTimers[0] > 8) { - i_this->mState = 3; + i_this->mMode = 3; } else { i_this->speedF = 9.0f; i_this->gravity = -8.0f; @@ -570,7 +570,7 @@ static void action_dousa(am2_class* i_this) { fopAcM_seStart(i_this, JA_SE_CM_AM2_SPIKE_IN, 0); i_this->mWeakSph.OffTgSetBit(); i_this->mWeakSph.ClrTgHit(); - i_this->mState++; + i_this->mMode++; // Fall-through case 7: if (i_this->mpMorf->isStop()) { @@ -583,7 +583,7 @@ static void action_dousa(am2_class* i_this) { i_this->mNeedleCyl.ClrTgHit(); i_this->m304 = i_this->current.pos; i_this->mAction = ACTION_DOUSA; - i_this->mState = 1; + i_this->mMode = 1; } break; } @@ -598,10 +598,10 @@ static void action_dousa(am2_class* i_this) { fopAcM_delete(i_this); } else { i_this->mAction = ACTION_MODORU_MOVE; - i_this->mState = 40; + i_this->mMode = 40; } } else if (!medama_atari_check(i_this)) { - if (i_this->mState < 3 || !week_atari_check(i_this)) { + if (i_this->mMode < 3 || !week_atari_check(i_this)) { body_atari_check(i_this); } } @@ -612,7 +612,7 @@ static void action_mahi(am2_class* i_this) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); fopAc_ac_c* actor = i_this; // Fixes regswaps - switch (i_this->mState) { + switch (i_this->mMode) { case 10: for (int i = 0; i < ARRAY_SIZE(i_this->mCountUpTimers); i++) { i_this->mCountUpTimers[i] = 0; @@ -631,7 +631,7 @@ static void action_mahi(am2_class* i_this) { fopAcM_seStart(actor, JA_SE_CM_AM2_SPIKE_IN, 0); anm_init(i_this, AM2_BCK_DAMAGE, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->mState++; + i_this->mMode++; break; case 11: cLib_addCalc0(&actor->speedF, 0.5f, 1.0f); @@ -640,7 +640,7 @@ static void action_mahi(am2_class* i_this) { actor->speedF = 0.0f; i_this->mCountDownTimers[2] = 20*30; anm_init(i_this, AM2_BCK_MAHI, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->mState++; + i_this->mMode++; } } break; @@ -653,7 +653,7 @@ static void action_mahi(am2_class* i_this) { fopAcM_delete(actor); } else { i_this->mAction = ACTION_MODORU_MOVE; - i_this->mState = 40; + i_this->mMode = 40; } } else { if (i_this->mCountUpTimers[1] != 0 && i_this->mAcch.ChkGroundHit()) { @@ -672,7 +672,7 @@ static void action_mahi(am2_class* i_this) { actor->speedF = 0.0f; i_this->mbNotInHomeRoom = false; i_this->mBodyCyl.OffCoSetBit(); - i_this->mState++; + i_this->mMode++; } } break; @@ -692,11 +692,11 @@ static void action_mahi(am2_class* i_this) { actor->speed.y = 25.0f; actor->speedF = 35.0f; i_this->mAcch.OnLineCheck(); - i_this->mState = 14; + i_this->mMode = 14; } else { actor->gravity = -3.0f; i_this->mCountUpTimers[1] = 1; - i_this->mState = 12; + i_this->mMode = 12; } } break; @@ -710,7 +710,7 @@ static void action_mahi(am2_class* i_this) { } else { i_this->mAcch.OffLineCheck(); i_this->mAction = ACTION_MODORU_MOVE; - i_this->mState = 40; + i_this->mMode = 40; } } else { if (i_this->mAcch.ChkGroundHit()) { @@ -740,7 +740,7 @@ static void action_mahi(am2_class* i_this) { } else { actor->speedF = 0.0f; i_this->mCountUpTimers[0] = 0; - i_this->mState = 12; + i_this->mMode = 12; } } @@ -753,7 +753,7 @@ static void action_mahi(am2_class* i_this) { fopAcM_delete(actor); } else { i_this->mAction = ACTION_MODORU_MOVE; - i_this->mState = 40; + i_this->mMode = 40; return; } } @@ -764,14 +764,14 @@ static void action_mahi(am2_class* i_this) { actor->attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e; fopAcM_OnStatus(actor, fopAcStts_SHOWMAP_e); i_this->mAction = ACTION_DOUSA; - i_this->mState = 3; + i_this->mMode = 3; } break; } i_this->mTargetAngleY = actor->current.angle.y; - if (i_this->mState >= 12 && i_this->mState != 15) { + if (i_this->mMode >= 12 && i_this->mMode != 15) { if (i_this->mStartsInactive == 1 && i_this->mSwitch != 0xFF) { if (!dComIfGs_isSwitch(i_this->mSwitch, dComIfGp_roomControl_getStayNo())) { i_this->mCountDownTimers[2] = 20*30; @@ -781,7 +781,7 @@ static void action_mahi(am2_class* i_this) { i_this->mSwitch = 0xFF; i_this->mAction = ACTION_DOUSA; - i_this->mState = 0; + i_this->mMode = 0; if (fopAcM_CheckStatus(actor, fopAcStts_CARRY_e)) { fopAcM_cancelCarryNow(actor); @@ -811,19 +811,19 @@ static void action_mahi(am2_class* i_this) { actor->gravity = -4.0f; actor->speed.y = 20.0f; i_this->mBodyCyl.OnCoSetBit(); - i_this->mState = 15; + i_this->mMode = 15; } } } - if (fopAcM_CheckStatus(actor, fopAcStts_CARRY_e) || i_this->mState == 15 || !week_atari_check(i_this)) { + if (fopAcM_CheckStatus(actor, fopAcStts_CARRY_e) || i_this->mMode == 15 || !week_atari_check(i_this)) { body_atari_check(i_this); } } /* 00002B08-000032AC .text action_itai__FP9am2_class */ static void action_itai(am2_class* i_this) { - switch (i_this->mState) { + switch (i_this->mMode) { case 20: for (int i = 0; i < ARRAY_SIZE(i_this->mCountUpTimers); i++) { i_this->mCountUpTimers[i] = 0; @@ -845,9 +845,9 @@ static void action_itai(am2_class* i_this) { if (i_this->mCountDownTimers[2] > 5) { i_this->speedF = 5.0f; } - i_this->mState++; + i_this->mMode++; } else { - i_this->mState = 22; + i_this->mMode = 22; } break; case 21: @@ -857,11 +857,11 @@ static void action_itai(am2_class* i_this) { i_this->gravity = -3.0f; if (i_this->mCountDownTimers[2] < 5) { i_this->mAction = ACTION_DOUSA; - i_this->mState = 3; + i_this->mMode = 3; } else { anm_init(i_this, AM2_BCK_MAHI, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); i_this->mAction = ACTION_MAHI; - i_this->mState = 12; + i_this->mMode = 12; } } break; @@ -871,7 +871,7 @@ static void action_itai(am2_class* i_this) { i_this->mEyeSph.ClrTgHit(); i_this->mWeakSph.ClrTgHit(); anm_init(i_this, AM2_BCK_DEAD1, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->mState++; + i_this->mMode++; break; case 23: if (!i_this->mpMorf->isStop()) { @@ -885,7 +885,7 @@ static void action_itai(am2_class* i_this) { i_this->mCountDownTimers[0] = 100; i_this->current.angle.y = fopAcM_searchPlayerAngleY(i_this); anm_init(i_this, AM2_BCK_DEAD2, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->mState++; + i_this->mMode++; // Fall-through case 24: if (i_this->speed.y > 0.0f && i_this->mCountUpTimers[1] == 0) { @@ -921,7 +921,7 @@ static void action_itai(am2_class* i_this) { i_this->speedF = 0.0f; - i_this->mState++; + i_this->mMode++; } break; case 25: @@ -942,15 +942,15 @@ static void action_itai(am2_class* i_this) { if (naraku_check(i_this)) { if (i_this->mbNotInHomeRoom || i_this->health <= 0) { - if (i_this->mState != 25) { + if (i_this->mMode != 25) { anm_init(i_this, AM2_BCK_DEAD3, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); fopAcM_seStart(i_this, JA_SE_CM_AM2_BEF_EXPLODE, 0); i_this->speedF = 0.0f; - i_this->mState = 25; + i_this->mMode = 25; } } else { i_this->mAction = ACTION_MODORU_MOVE; - i_this->mState = 40; + i_this->mMode = 40; } } } @@ -958,7 +958,7 @@ static void action_itai(am2_class* i_this) { /* 000032AC-000034A4 .text action_handou_move__FP9am2_class */ static void action_handou_move(am2_class* i_this) { daPy_py_c* player = daPy_getPlayerActorClass(); - switch (i_this->mState) { + switch (i_this->mMode) { case 30: { i_this->speedF = 40.0f; s16 angleToPlayer = fopAcM_searchPlayerAngleY(i_this); @@ -972,7 +972,7 @@ static void action_handou_move(am2_class* i_this) { i_this->mNeedleCyl.OffTgSetBit(); i_this->mNeedleCyl.ClrTgHit(); i_this->mTargetAngleY = i_this->current.angle.y; - i_this->mState++; + i_this->mMode++; // Fall-through } case 31: @@ -982,12 +982,12 @@ static void action_handou_move(am2_class* i_this) { i_this->speedF = 0.0f; i_this->current.angle.y = i_this->shape_angle.y; i_this->mAction = ACTION_DOUSA; - i_this->mState = 3; + i_this->mMode = 3; if (i_this->mStartsInactive == 1 && i_this->mSwitch != 0xFF && !dComIfGs_isSwitch(i_this->mSwitch, dComIfGp_roomControl_getStayNo())) { i_this->attention_info.flags = 0; i_this->mCountDownTimers[2] = 20*30; i_this->mAction = ACTION_MAHI; - i_this->mState = 12; + i_this->mMode = 12; } } } @@ -997,7 +997,7 @@ static void action_handou_move(am2_class* i_this) { fopAcM_delete(i_this); } else { i_this->mAction = ACTION_MODORU_MOVE; - i_this->mState = 40; + i_this->mMode = 40; } } } @@ -1005,7 +1005,7 @@ static void action_handou_move(am2_class* i_this) { /* 000034A4-0000379C .text action_modoru_move__FP9am2_class */ static void action_modoru_move(am2_class* i_this) { // Respawns the Armos back at its spawn point after it falls into an abyss. - switch (i_this->mState) { + switch (i_this->mMode) { case 40: dCam_getBody()->ForceLockOff(fopAcM_GetID(i_this)); i_this->mInAbyssTimer = 0; @@ -1013,7 +1013,7 @@ static void action_modoru_move(am2_class* i_this) { i_this->mRippleCb.remove(); anm_init(i_this, AM2_BCK_WAIT, 10.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); fopAcM_seStart(i_this, JA_SE_CM_AM2_WTR_RECOVER, 0); - i_this->mState++; + i_this->mMode++; // Fall-through case 41: cLib_addCalc0(&i_this->scale.x, 1.0f, 0.1f); @@ -1034,7 +1034,7 @@ static void action_modoru_move(am2_class* i_this) { i_this->current.pos = i_this->mSpawnPos; i_this->mTargetAngleY = i_this->current.angle.y; - i_this->mState++; + i_this->mMode++; } break; case 42: @@ -1056,13 +1056,13 @@ static void action_modoru_move(am2_class* i_this) { i_this->mWeakSph.ClrTgHit(); i_this->mNeedleCyl.ClrTgHit(); i_this->mAction = ACTION_DOUSA; - i_this->mState = 0; + i_this->mMode = 0; if (i_this->mStartsInactive == 1 && i_this->mSwitch != 0xFF && !dComIfGs_isSwitch(i_this->mSwitch, dComIfGp_roomControl_getStayNo())) { i_this->attention_info.flags = 0; i_this->mCountDownTimers[2] = 20*30; i_this->mAction = ACTION_MAHI; - i_this->mState = 12; + i_this->mMode = 12; } } break; @@ -1456,7 +1456,7 @@ static cPhs_State daAM2_Create(fopAc_ac_c* i_actor) { i_this->attention_info.flags = 0; i_this->mCountDownTimers[2] = 20*30; i_this->mAction = ACTION_MAHI; - i_this->mState = 12; + i_this->mMode = 12; } i_this->mAcchRadius = 40.0f + REG8_F(10); diff --git a/src/d/actor/d_a_bk.cpp b/src/d/actor/d_a_bk.cpp index 7d71542bd..c5f008ff6 100644 --- a/src/d/actor/d_a_bk.cpp +++ b/src/d/actor/d_a_bk.cpp @@ -82,7 +82,7 @@ static s8 joint_check[] = { /* 000000EC-00000234 .text anm_init__FP8bk_classifUcfi */ static void anm_init(bk_class* i_this, int bckFileIdx, f32 morf, u8 loopMode, f32 speed, int soundFileIdx) { - if (i_this->dr.mState == 19 && bckFileIdx != BK_BCK_BK_OTISOU1 && bckFileIdx != BK_BCK_BK_OTISOU2) { + if (i_this->dr.mAction == 19 && bckFileIdx != BK_BCK_BK_OTISOU1 && bckFileIdx != BK_BCK_BK_OTISOU2) { return; } if (soundFileIdx >= 0) { @@ -931,7 +931,7 @@ static BOOL daBk_player_way_check(bk_class* i_this) { static void wait_set(bk_class* i_this) { if (i_this->m0B30 != 0 || i_this->m11F3 != 0) { anm_init(i_this, BK_BCK_BK_KYORO1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_KYORO1); - } else if (i_this->dr.mState >= 4) { + } else if (i_this->dr.mAction >= 4) { anm_init(i_this, BK_BCK_BK_KYORO1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_KYORO1); } else { anm_init(i_this, BK_BCK_BK_KYORO2, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_KYORO2); @@ -1033,16 +1033,16 @@ static void jyunkai(bk_class* i_this) { fopAc_ac_c* i_actor = i_this; if (i_this->mType == 4 || i_this->mType == 0xA) { - i_this->dr.mState = 1; - i_this->dr.m004 = 50; + i_this->dr.mAction = 1; + i_this->dr.mMode = 50; return; } else if (i_this->mType == 6) { - i_this->dr.mState = 2; - i_this->dr.m004 = 50; + i_this->dr.mAction = 2; + i_this->dr.mMode = 50; return; } else if (i_this->mType == 9) { - i_this->dr.mState = 3; - i_this->dr.m004 = 0; + i_this->dr.mAction = 3; + i_this->dr.mMode = 0; i_this->m0300[2] = 0; i_this->m120C = 0; i_this->m1210 = 0; @@ -1052,12 +1052,12 @@ static void jyunkai(bk_class* i_this) { cXyz sp10; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: walk_set(i_this); // Fall-through case -1: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; if (i_this->m0B30 != 0 || i_this->m11F3 != 0) { if (i_this->m1215 != 0) { i_this->m1216 += i_this->m1217; @@ -1106,9 +1106,9 @@ static void jyunkai(bk_class* i_this) { if (std::sqrtf(sp10.x*sp10.x + sp10.z*sp10.z) < f31 * 0.25f * 2.0f) { if (i_this->ppd->m_points[i_this->m1216].mArg3 == 3) { wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } else { - i_this->dr.m004 = -1; + i_this->dr.mMode = -1; } } } else if (std::sqrtf(sp10.x*sp10.x + sp10.z*sp10.z) < f31 * 0.25f * 2.0f || @@ -1120,7 +1120,7 @@ static void jyunkai(bk_class* i_this) { ) ) { wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->dr.m4D0, 4, r29); cLib_addCalc2(&i_this->speedF, f31, 1.0f, 5.0f); @@ -1134,7 +1134,7 @@ static void jyunkai(bk_class* i_this) { } } if (i_this->m0300[1] == 0) { - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; if (i_this->m0B30 == 0 && i_this->m11F3 == 0 && i_this->m030A == 0) { i_this->m11F3 = 1; } @@ -1147,7 +1147,7 @@ static void jyunkai(bk_class* i_this) { fopAcM_monsSeStart(i_this, JA_SE_CV_BK_SEARCH, 0); } if (i_this->m0300[1] == 0) { - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } break; } @@ -1162,11 +1162,11 @@ static void jyunkai(bk_class* i_this) { daBk_player_view_check(i_this, &i_this->dr.m714->current.pos, i_this->m0332, l_bkHIO.m034) ) ) { - i_this->dr.mState = 4; + i_this->dr.mAction = 4; i_this->m0300[1] = 0; - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } - } else if (i_this->m11F3 == 0 && i_this->dr.m004 == 2) { + } else if (i_this->m11F3 == 0 && i_this->dr.mMode == 2) { int frame = i_this->mpMorf->getFrame(); if ((frame == 0xB || frame == 0x19) && cM_rndF(1.0f) < 0.5f) { fopAcM_monsSeStart(i_this, JA_SE_CV_BK_SEARCH_BOKO, 0); @@ -1174,13 +1174,13 @@ static void jyunkai(bk_class* i_this) { } if (i_this->m0B30 == 0 && daBk_wepon_view_check(i_this)) { - i_this->dr.mState = 12; - i_this->dr.m004 = -1; + i_this->dr.mAction = 12; + i_this->dr.mMode = -1; } if (daBk_bomb_view_check(i_this)) { - i_this->dr.mState = 9; - i_this->dr.m004 = 0; + i_this->dr.mAction = 9; + i_this->dr.mMode = 0; } } @@ -1205,11 +1205,11 @@ static void stand(bk_class* i_this) { s32 r31 = fopAcM_otoCheck(i_this, 1000.0f); cXyz sp28; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case -20: fopAcM_OnStatus(i_this, fopAcStts_UNK4000_e); anm_init(i_this, BK_BCK_BK_WAIT, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_WAIT); - i_this->dr.m004 = -19; + i_this->dr.mMode = -19; i_this->m0300[1] = 20; i_this->m02B5 = 0; // Fall-through @@ -1220,10 +1220,10 @@ static void stand(bk_class* i_this) { sp28 = player->current.pos - ken->current.pos; if (sp28.abs() < 800.0f) { i_this->m1234 = 1; - i_this->dr.m004 = -18; + i_this->dr.mMode = -18; } } else { - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; break; } } @@ -1233,7 +1233,7 @@ static void stand(bk_class* i_this) { i_this->m0300[1] = l_bkHIO.m104 + cM_rndF(l_bkHIO.m106 - l_bkHIO.m104); // Fall-through case -1: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; if (i_this->m02DC != 0) { if (cM_rndF(1.0f) < 0.5f) { anm_init(i_this, BK_BCK_BK_NOZOKU, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); @@ -1256,9 +1256,9 @@ static void stand(bk_class* i_this) { anm_init(i_this, BK_BCK_BK_NOBI, 10.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_NOBI); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_NOBI, 0); if (i_this->m121E < 3) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } else { - i_this->dr.m004 = 3; + i_this->dr.mMode = 3; i_this->m121E = 0; } } @@ -1267,7 +1267,7 @@ static void stand(bk_class* i_this) { r28 = true; i_this->m02CA = 2; if (i_this->mpMorf->isStop()) { - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } break; case 3: @@ -1276,7 +1276,7 @@ static void stand(bk_class* i_this) { if (i_this->mpMorf->isStop()) { anm_init(i_this, BK_BCK_BK_SLEEP, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_SLEEP); i_this->m0300[1] = l_bkHIO.m108 + cM_rndF(l_bkHIO.m10A - l_bkHIO.m108); - i_this->dr.m004 += 1; + i_this->dr.mMode += 1; } break; case 4: @@ -1285,7 +1285,7 @@ static void stand(bk_class* i_this) { if (i_this->m0300[1] == 0) { anm_init(i_this, BK_BCK_BK_NOBI, 10.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_NOBI); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_NOBI, 0); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; case 10: @@ -1294,13 +1294,13 @@ static void stand(bk_class* i_this) { } if (i_this->m0300[1] == 0) { anm_init(i_this, BK_BCK_BK_KYORO2, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_KYORO2); - i_this->dr.m004 = 11; + i_this->dr.mMode = 11; i_this->m0300[3] = 30.0f + cM_rndF(30.0f); } break; case 11: if (i_this->m0300[3] == 0) { - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } break; case 20: @@ -1308,15 +1308,15 @@ static void stand(bk_class* i_this) { i_this->dr.m710 = 1; } if (i_this->m0300[1] == 0) { - i_this->dr.mState = 4; + i_this->dr.mAction = 4; i_this->m0300[1] = 0; - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; return; } break; case 50: anm_init(i_this, BK_BCK_BK_KYORO1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_KYORO1); - i_this->dr.m004 += 1; + i_this->dr.mMode += 1; i_this->m0300[1] = 50; // Fall-through case 51: @@ -1326,7 +1326,7 @@ static void stand(bk_class* i_this) { } if (i_this->m0300[1] == 0) { anm_init(i_this, BK_BCK_BK_RUN, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_RUN); - i_this->dr.m004 += 1; + i_this->dr.mMode += 1; i_this->m0300[2] = 60; } break; @@ -1334,14 +1334,14 @@ static void stand(bk_class* i_this) { sp28 = i_this->home.pos - i_this->current.pos; i_this->dr.m4D0 = cM_atan2s(sp28.x, sp28.z); if (std::sqrtf(sp28.x*sp28.x + sp28.z*sp28.z) < l_bkHIO.m054 * 0.25f * 5.0f) { - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->dr.m4D0, 4, 0x1000); cLib_addCalc2(&i_this->speedF, l_bkHIO.m054, 1.0f, 5.0f); if (i_this->dr.mAcch.ChkGroundHit() && i_this->dr.mAcch.ChkWallHit()) { if (i_this->m02DC != 0) { - i_this->dr.m004 = 60; + i_this->dr.mMode = 60; i_this->m0300[2] = 20; break; } @@ -1349,7 +1349,7 @@ static void stand(bk_class* i_this) { i_this->speed.y = 100.0f + REG0_F(16); anm_init(i_this, BK_BCK_BK_JUMP1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP1); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_JUMP, 0); - i_this->dr.m004 = 53; + i_this->dr.mMode = 53; } break; @@ -1359,19 +1359,19 @@ static void stand(bk_class* i_this) { break; } anm_init(i_this, BK_BCK_BK_JUMP2, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP2); - i_this->dr.m004 += 1; + i_this->dr.mMode += 1; break; case 54: i_this->speedF = 0.0f; if (i_this->mpMorf->isStop()) { - i_this->dr.m004 = 51; + i_this->dr.mMode = 51; } break; case 60: cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->dr.m4D0 + 0x4000, 4, 0x1000); cLib_addCalc2(&i_this->speedF, l_bkHIO.m054, 1.0f, 5.0f); if (i_this->m0300[2] == 0) { - i_this->dr.m004 = 52; + i_this->dr.mMode = 52; } break; } @@ -1379,11 +1379,11 @@ static void stand(bk_class* i_this) { if (r27) { return; } - if (i_this->dr.m004 < 10 && r31 != 0) { - i_this->dr.m004 = 10; + if (i_this->dr.mMode < 10 && r31 != 0) { + i_this->dr.mMode = 10; i_this->m0300[1] = 45.0f + cM_rndF(10.0f); } - if (!r28 && i_this->m0300[2] == 0 && i_this->dr.m004 != 20) { + if (!r28 && i_this->m0300[2] == 0 && i_this->dr.mMode != 20) { f32 f1; if (i_this->m02B5 != 0xFF) { f1 = i_this->m02B5 * 10.0f; @@ -1394,12 +1394,12 @@ static void stand(bk_class* i_this) { if (i_this->mPlayerDistance < f1 && daBk_player_view_check(i_this, &i_this->dr.m714->current.pos, i_this->m0332, l_bkHIO.m034) ) { - if (i_this->dr.m004 >= 50) { - i_this->dr.mState = 4; + if (i_this->dr.mMode >= 50) { + i_this->dr.mAction = 4; i_this->m0300[1] = 0; - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } else { - i_this->dr.m004 = 20; + i_this->dr.mMode = 20; anm_init(i_this, BK_BCK_BK_BIKKURI, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->m0300[1] = 30; fopAcM_monsSeStart(i_this, JA_SE_CV_BK_FOUND_LINK, 0); @@ -1407,13 +1407,13 @@ static void stand(bk_class* i_this) { } if (daBk_bomb_view_check(i_this)) { - i_this->dr.mState = 9; - i_this->dr.m004 = 0; + i_this->dr.mAction = 9; + i_this->dr.mMode = 0; } } if (i_this->m0B30 == 0 && daBk_wepon_view_check(i_this)) { - i_this->dr.mState = 12; - i_this->dr.m004 = -1; + i_this->dr.mAction = 12; + i_this->dr.mMode = -1; } } @@ -1455,9 +1455,9 @@ static void stand2(bk_class* i_this) { i_this->home.angle.y = i_this->mpSearchLight->current.angle.y + REG8_S(4); } - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; // Fall-through case 1: { if (i_this->mpSearchLight != NULL) { @@ -1500,13 +1500,13 @@ static void stand2(bk_class* i_this) { } if (i_this->m0300[1] == 0) { anm_init(i_this, BK_BCK_BK_KYORO2, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_KYORO2); - i_this->dr.m004 = 11; + i_this->dr.mMode = 11; i_this->m0300[3] = 30.0f + cM_rndF(30.0f); } break; case 11: if (i_this->m0300[3] == 0) { - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } break; case 20: @@ -1515,22 +1515,22 @@ static void stand2(bk_class* i_this) { i_this->dr.m710 = 1; } if (i_this->m0300[1] == 0) { - i_this->dr.mState = 4; + i_this->dr.mAction = 4; i_this->m0300[1] = 0; - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; return; } break; case 50: anm_init(i_this, BK_BCK_BK_KYORO1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_KYORO1); - i_this->dr.m004 += 1; + i_this->dr.mMode += 1; i_this->m0300[1] = 50; // Fall-through case 51: i_this->speedF = 0.0f; if (i_this->m0300[1] == 0) { anm_init(i_this, BK_BCK_BK_RUN, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_RUN); - i_this->dr.m004 += 1; + i_this->dr.mMode += 1; path_check(i_this, 1); if (i_this->m1216 >= 4) { i_this->m1217 = 1; @@ -1551,10 +1551,10 @@ static void stand2(bk_class* i_this) { temp_568: i_this->dr.m4D0 = cM_atan2s(sp24.x, sp24.z); if (std::sqrtf(sp24.x*sp24.x + sp24.z*sp24.z) < l_bkHIO.m054 * 0.25f * 5.0f) { - if (i_this->dr.m004 == 60) { - i_this->dr.m004 = 0; + if (i_this->dr.mMode == 60) { + i_this->dr.mMode = 0; } else if (i_this->m1216 == 0) { - i_this->dr.m004 = 60; + i_this->dr.mMode = 60; } else { i_this->m1216 += i_this->m1217; if (i_this->m1216 >= (s8)i_this->ppd->m_num) { @@ -1569,12 +1569,12 @@ temp_568: break; } - if (i_this->dr.m004 < 10 && r31 != 0) { - i_this->dr.m004 = 10; + if (i_this->dr.mMode < 10 && r31 != 0) { + i_this->dr.mMode = 10; i_this->m0300[1] = cM_rndF(10.0f) + 45.0f; } - if (i_this->m0300[2] == 0 && i_this->dr.m004 != 20) { + if (i_this->m0300[2] == 0 && i_this->dr.mMode != 20) { f32 f1; if (i_this->m02B5 != 0xFF) { f1 = i_this->m02B5 * 10.0f; @@ -1585,12 +1585,12 @@ temp_568: if (i_this->mPlayerDistance < f1 && daBk_player_view_check(i_this, &i_this->dr.m714->current.pos, i_this->m0332, l_bkHIO.m034) ) { - if (i_this->dr.m004 >= 50) { - i_this->dr.mState = 4; + if (i_this->dr.mMode >= 50) { + i_this->dr.mAction = 4; i_this->m0300[1] = 0; - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } else { - i_this->dr.m004 = 20; + i_this->dr.mMode = 20; anm_init(i_this, BK_BCK_BK_BIKKURI, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->m0300[1] = 30; fopAcM_monsSeStart(i_this, JA_SE_CV_BK_FOUND_LINK, 0); @@ -1598,14 +1598,14 @@ temp_568: } if (daBk_bomb_view_check(i_this)) { - i_this->dr.mState = 9; - i_this->dr.m004 = 0; + i_this->dr.mAction = 9; + i_this->dr.mMode = 0; } } if (i_this->m0B30 == 0 && daBk_wepon_view_check(i_this)) { - i_this->dr.mState = 12; - i_this->dr.m004 = -1; + i_this->dr.mAction = 12; + i_this->dr.mMode = -1; } } @@ -1613,10 +1613,10 @@ temp_568: static void path_run(bk_class* i_this) { i_this->dr.m710 = 0; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: anm_init(i_this, BK_BCK_BK_RUN, 10.0f, J3DFrameCtrl::EMode_LOOP, l_bkHIO.m070, BK_BAS_BK_RUN); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; // Fall-through case 1: dPnt* point = &i_this->ppd->m_points[i_this->m1216]; @@ -1696,9 +1696,9 @@ static void path_run(bk_class* i_this) { if (i_this->mPlayerDistance < l_bkHIO.m028 && daBk_player_view_check(i_this, &i_this->dr.m714->current.pos, i_this->m0332, l_bkHIO.m034) ) { - i_this->dr.mState = 4; + i_this->dr.mAction = 4; i_this->m0300[1] = 0; - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } } @@ -1775,9 +1775,9 @@ static void fight_run(bk_class* i_this) { } i_this->dr.m4D0 = i_this->m0332; - if (i_this->dr.m004 != 0) { + if (i_this->dr.mMode != 0) { s16 r6 = 0x400; - if (i_this->dr.m004 == 1) { + if (i_this->dr.mMode == 1) { r6 = 0x800; } if (i_this->dr.mAcch.ChkGroundHit()) { @@ -1785,11 +1785,11 @@ static void fight_run(bk_class* i_this) { } } - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: if (i_this->m0300[1] == 0) { fight_run_set(i_this); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->m120C = 0; i_this->m1212 = cM_rndF(1000.0f); } else { @@ -1812,7 +1812,7 @@ static void fight_run(bk_class* i_this) { i_this->m120C = 0; } if (i_this->mPlayerDistance < l_bkHIO.m02C) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; i_this->m0300[4] = 50; } break; @@ -1859,8 +1859,8 @@ static void fight_run(bk_class* i_this) { } if (i_this->mPlayerDistance < l_bkHIO.m030) { - i_this->dr.mState = 5; - i_this->dr.m004 = 0; + i_this->dr.mAction = 5; + i_this->dr.mMode = 0; return; } break; @@ -1868,7 +1868,7 @@ static void fight_run(bk_class* i_this) { i_this->m120C = 0; if (cM_rndF(1.0f) < 0.3f && i_this->m0B30 == 0) { - i_this->dr.m004 = 8; + i_this->dr.mMode = 8; wait_set(i_this); i_this->m0300[1] = 20.0f + cM_rndF(20.0f); break; @@ -1880,9 +1880,9 @@ static void fight_run(bk_class* i_this) { anm_init(i_this, BK_BCK_BK_WALK2, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_WALK2); } if (stickPosX > 0.0f) { - i_this->dr.m004 = 5; + i_this->dr.mMode = 5; } else { - i_this->dr.m004 = 6; + i_this->dr.mMode = 6; } } else if (i_this->mPlayerDistance < l_bkHIO.m030) { if (i_this->m0B30 != 0 || i_this->m11F3 != 0) { @@ -1890,14 +1890,14 @@ static void fight_run(bk_class* i_this) { } else { anm_init(i_this, BK_BCK_BK_WALK2, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_WALK2); } - i_this->dr.m004 = 4; + i_this->dr.mMode = 4; } else { if (i_this->m0B30 != 0 || i_this->m11F3 != 0) { anm_init(i_this, BK_BCK_BK_WALK2, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_WALK2); } else { anm_init(i_this, BK_BCK_BK_WALK2, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_WALK2); } - i_this->dr.m004 = 3; + i_this->dr.mMode = 3; } i_this->m0300[1] = 20.0f + cM_rndF(20.0f); break; @@ -1907,34 +1907,34 @@ static void fight_run(bk_class* i_this) { i_this->speed.y = 100.0f + REG0_F(16); anm_init(i_this, BK_BCK_BK_JUMP1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP1); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_JUMP, 0); - i_this->dr.m004 = 33; + i_this->dr.mMode = 33; break; } if (i_this->m0300[1] == 0) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; case 33: if (i_this->dr.mAcch.ChkGroundHit()) { anm_init(i_this, BK_BCK_BK_JUMP2, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP2); - i_this->dr.m004++; + i_this->dr.mMode++; } break; case 34: i_this->speedF = 0.0f; if (i_this->mpMorf->isStop()) { - i_this->dr.m004 = 3; + i_this->dr.mMode = 3; } break; case 4: if ((i_this->m02DD & 0x2) == 0) { cLib_addCalc2(&i_this->speedF, -l_bkHIO.m060, 1.0f, 20.0f); if (i_this->m0300[1] == 0) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; } - i_this->dr.m004 = 3; + i_this->dr.mMode = 3; if (i_this->m0B30 != 0 || i_this->m11F3 != 0) { anm_init(i_this, BK_BCK_BK_WALK2, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_WALK2); } else { @@ -1960,29 +1960,29 @@ static void fight_run(bk_class* i_this) { temp_860: cLib_addCalc2(&i_this->speedF, l_bkHIO.m064, 1.0f, 30.0f); if (i_this->m0300[1] == 0) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; case 8: i_this->speedF = 0.0f; if (i_this->m0300[1] == 0) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; } - if (i_this->dr.m004 >= 3 && i_this->m0314 <= 2) { + if (i_this->dr.mMode >= 3 && i_this->m0314 <= 2) { if (i_this->mPlayerDistance > l_bkHIO.m02C + 75.0f) { - i_this->dr.mState = 0; - i_this->dr.m004 = 0; + i_this->dr.mAction = 0; + i_this->dr.mMode = 0; path_check(i_this, 0); } if (i_this->mPlayerDistance < l_bkHIO.m030 + 62.5f && i_this->mPlayerDistance > l_bkHIO.m030 - 62.5f) { if (i_this->m0300[4] == 0) { i_this->m0300[4] = l_bkHIO.m078; if (cM_rndF(100.0f) < l_bkHIO.m07C) { - i_this->dr.mState = 5; - i_this->dr.m004 = 0; + i_this->dr.mAction = 5; + i_this->dr.mMode = 0; } } } @@ -2011,8 +2011,8 @@ static void fight_run(bk_class* i_this) { ) ) { if (i_this->m02D4 != 0 && (cM_rndF(1.0f) <= 0.5f || l_bkHIO.m008 != 0)) { - i_this->dr.mState = 10; - i_this->dr.m004 = 0; + i_this->dr.mAction = 10; + i_this->dr.mMode = 0; if (player->getCutType() == 0xA) { i_this->m0300[1] = 0x1E; } else { @@ -2021,10 +2021,10 @@ static void fight_run(bk_class* i_this) { } else { i_this->m030E = 0xA; if ((ground_4_check(i_this, 4, i_this->current.angle.y, 200.0f) & 0xD) == 0) { - i_this->dr.mState = 5; + i_this->dr.mAction = 5; attack_set(i_this, 1); anm_init(i_this, BK_BCK_BK_JUMP1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP1); - i_this->dr.m004 = -10; + i_this->dr.mMode = -10; i_this->speedF = -60.0f + REG0_F(3); i_this->speed.y = 80.0f + REG0_F(4); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_JUMP, 0); @@ -2043,8 +2043,8 @@ static void fight_run(bk_class* i_this) { if (cM_rndF(1.0f) < 0.5f + REG0_F(0) && (ground_4_check(i_this, 4, i_this->current.angle.y, 200.0f) & 0xD) == 0 ) { - i_this->dr.mState = 7; - i_this->dr.m004 = 0; + i_this->dr.mAction = 7; + i_this->dr.mMode = 0; } i_this->m02FC = 0; } @@ -2052,17 +2052,17 @@ static void fight_run(bk_class* i_this) { i_this->m02FC = 0; } if (daBk_player_bg_check(i_this, &i_this->dr.m714->current.pos)) { - i_this->dr.mState = 0; - i_this->dr.m004 = 0; + i_this->dr.mAction = 0; + i_this->dr.mMode = 0; path_check(i_this, 0); } if (i_this->m0B30 == 0 && daBk_wepon_view_check(i_this)) { - i_this->dr.mState = 12; - i_this->dr.m004 = -1; + i_this->dr.mAction = 12; + i_this->dr.mMode = -1; } if (daBk_bomb_view_check(i_this)) { - i_this->dr.mState = 9; - i_this->dr.m004 = 0; + i_this->dr.mAction = 9; + i_this->dr.mMode = 0; } i_this->m02DD = ground_4_check(i_this, 4, i_this->current.angle.y, 90.0f + REG6_F(7)); if (i_this->m0314 != 0) { @@ -2143,17 +2143,17 @@ static fopAc_ac_c* yari_hit_check(bk_class* i_this) { /* 000075E8-00007EF4 .text fight__FP8bk_class */ static void fight(bk_class* i_this) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case -10: if (i_this->dr.mAcch.ChkGroundHit()) { anm_init(i_this, BK_BCK_BK_JUMP2, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP2); - i_this->dr.m004 = -9; + i_this->dr.mMode = -9; i_this->speedF = 0.0f; } break; case -9: if (i_this->mpMorf->isStop()) { - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->m0300[2] = 8; anm_init(i_this, BK_BCK_BK_JATTACK1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->speedF = 80.0f + REG0_F(5); @@ -2170,7 +2170,7 @@ static void fight(bk_class* i_this) { i_this->speed.y = 105.0f + REG0_F(8); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_ATTACK_L, 0); } - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->m0300[2] = 8; // Fall-through temp_1B8: @@ -2255,8 +2255,8 @@ temp_1B8: i_this->mpMorf->play(&i_this->eyePos, 0, 0); if (i_this->m0B30 != 0 && i_this->m02D5 == 0 && cM_rndF(1.0f) < 0.5f) { i_this->m0B34 = 1; - i_this->dr.mState = 8; - i_this->dr.m004 = -10; + i_this->dr.mAction = 8; + i_this->dr.mMode = -10; i_this->m0300[0] = 10; i_this->m0300[1] = 100; } @@ -2276,10 +2276,10 @@ temp_1B8: i_this->m0B7A = -1; i_this->mpMorf->play(&i_this->eyePos, 0, 0); } else { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } i_this->m0318 = 1; i_this->m0314 = 0x10; @@ -2299,32 +2299,32 @@ temp_1B8: (i_this->m0B5C == 2 && i_this->m0B60 == 1) ) { if (i_this->m11FC != fpcM_ERROR_PROCESS_ID_e) { - i_this->dr.mState = 14; - i_this->dr.m004 = 0; + i_this->dr.mAction = 14; + i_this->dr.mMode = 0; } else if (i_this->mPlayerDistance < l_bkHIO.m02C) { if (daBk_player_view_check(i_this, &i_this->dr.m714->current.pos, i_this->m0332, l_bkHIO.m034)) { if (cM_rndF(1.0f) < 0.8f || i_this->m0B7A < 0) { - i_this->dr.mState = 4; - i_this->dr.m004 = 2; + i_this->dr.mAction = 4; + i_this->dr.mMode = 2; i_this->m0300[1] = 0; } else { - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } } else { if (i_this->m0B30 != 0 || i_this->m11F3 != 0) { - i_this->dr.mState = 8; - i_this->dr.m004 = 0; + i_this->dr.mAction = 8; + i_this->dr.mMode = 0; } else { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } } } else { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } } else if (i_this->dr.mAcch.ChkGroundHit()) { attack_info_s* r6 = attack_info[i_this->m0B5C]; @@ -2346,10 +2346,10 @@ temp_1B8: /* 00007EF4-00008108 .text p_lost__FP8bk_class */ static void p_lost(bk_class* i_this) { i_this->dr.m710 = 0; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case -10: if (i_this->mpMorf->isStop() || i_this->m0300[0] == 0) { - i_this->dr.m004++; + i_this->dr.mMode++; i_this->m0300[0] = 5; } break; @@ -2359,7 +2359,7 @@ static void p_lost(bk_class* i_this) { } // Fall-through case 0: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; anm_init(i_this, BK_BCK_BK_KYORO2, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_KYORO2); i_this->speedF = 0.0f; i_this->m0300[1] = 30.0f + cM_rndF(30.0f); @@ -2370,17 +2370,17 @@ static void p_lost(bk_class* i_this) { fopAcM_monsSeStart(i_this, JA_SE_CV_BK_SEARCH, 0); } if (i_this->m0300[1] == 0) { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; } if (i_this->m0300[1] < 10 && daBk_player_view_check(i_this, &i_this->dr.m714->current.pos, i_this->m0332, l_bkHIO.m034)) { - i_this->dr.mState = 4; - i_this->dr.m004 = 2; + i_this->dr.mAction = 4; + i_this->dr.mMode = 2; i_this->m0300[1] = 0; } } @@ -2388,10 +2388,10 @@ static void p_lost(bk_class* i_this) { /* 00008108-00008470 .text b_nige__FP8bk_class */ static void b_nige(bk_class* i_this) { if (!daBk_bomb_check(i_this)) { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; return; } @@ -2401,9 +2401,9 @@ static void b_nige(bk_class* i_this) { sp10.z = r3->current.pos.z - i_this->current.pos.z; i_this->dr.m4D0 = cM_atan2s(-sp10.x, -sp10.z); - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; anm_init(i_this, BK_BCK_BK_HAKKEN, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_HAKKEN); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_FOUND_LINK, 0); i_this->m0300[1] = 20; @@ -2412,7 +2412,7 @@ static void b_nige(bk_class* i_this) { i_this->speedF = 0.0f; cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->dr.m4D0 + 0x8000, 2, 0x3000); if (i_this->m0300[1] == 0) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; anm_init(i_this, BK_BCK_BK_NIGERU, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_NIGERU); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_LOST_BOKO, 0); } @@ -2423,7 +2423,7 @@ static void b_nige(bk_class* i_this) { i_this->m034E = 4; cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->dr.m4D0, 4, 0x1000); if (std::sqrtf(sp10.x*sp10.x + sp10.z*sp10.z) > 800.0f) { - i_this->dr.m004 = 3; + i_this->dr.mMode = 3; anm_init(i_this, BK_BCK_BK_WAIT, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_WAIT); } break; @@ -2432,7 +2432,7 @@ static void b_nige(bk_class* i_this) { i_this->dr.m4D0 = i_this->m0332; cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->dr.m4D0, 3, 0x1000); if (std::sqrtf(sp10.x*sp10.x + sp10.z*sp10.z) < 700.0f) { - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } break; } @@ -2444,9 +2444,9 @@ static void defence(bk_class* i_this) { i_this->dr.m4D0 = i_this->m0332; cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->dr.m4D0, 4, 0x400); - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; anm_init(i_this, BK_BCK_BK_BOUGYO1, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->speedF = 0.0f; // Fall-through @@ -2455,12 +2455,12 @@ static void defence(bk_class* i_this) { i_this->m11D8 = i_this->m11CC; if (i_this->m0300[1] == 0) { if (cM_rndF(1.0f) < 0.5f) { - i_this->dr.mState = 5; - i_this->dr.m004 = 0; + i_this->dr.mAction = 5; + i_this->dr.mMode = 0; } else { - i_this->dr.mState = 4; + i_this->dr.mAction = 4; i_this->m0300[1] = 0; - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } } break; @@ -2469,10 +2469,10 @@ static void defence(bk_class* i_this) { /* 00008580-00008654 .text oshi__FP8bk_class */ static void oshi(bk_class* i_this) { - i_this->dr.mState = 5; + i_this->dr.mAction = 5; attack_set(i_this, 1); anm_init(i_this, BK_BCK_BK_JUMP1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP1); - i_this->dr.m004 = -10; + i_this->dr.mMode = -10; i_this->speedF = -90.0f + REG6_F(10); i_this->speed.y = 85.0f + REG6_F(11); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_JUMP, 0); @@ -2489,7 +2489,7 @@ static void hukki(bk_class* i_this) { sp24.x = sp24.y = 0.0f; i_this->m030E = 2; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 10: anm_init(i_this, BK_BCK_BK_OKIRUA, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_OKIRUA); i_this->m0300[2] = 15; @@ -2499,7 +2499,7 @@ static void hukki(bk_class* i_this) { i_this->m0300[2] = 15 + REG0_S(5); temp_194: i_this->speedF = 0.0f; - i_this->dr.m004 = 13; + i_this->dr.mMode = 13; i_this->dr.m480 = 0; i_this->current.pos.y -= i_this->dr.m44C.y; i_this->old.pos.y -= i_this->dr.m44C.y; @@ -2522,13 +2522,13 @@ temp_194: } if (i_this->mpMorf->isStop()) { if (i_this->mPlayerDistance < l_bkHIO.m02C) { - i_this->dr.m004 = 14; + i_this->dr.mMode = 14; i_this->m0300[1] = 10; } else { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } i_this->dr.m488 = 0; } @@ -2539,7 +2539,7 @@ temp_194: cLib_addCalcAngleS2(&i_this->current.angle.y, i_this->dr.m4D0, 3, 0x1000); if (i_this->m0300[1] == 0) { if (!player->checkGrabWear() && l_bkHIO.m00A == 0 && i_this->m0B30 != 0) { - i_this->dr.mState = 5; + i_this->dr.mAction = 5; i_this->m0B5C = 0; i_this->m0B64 = 29.0f + REG0_F(8); i_this->m0B68 = 32.0f; @@ -2551,11 +2551,11 @@ temp_194: attack_info_s* info = attack_info[i_this->m0B5C]; info += 1; anm_init(i_this, info->bckFileIdx, 5.0f, J3DFrameCtrl::EMode_NONE, info->speed, info->soundFileIdx); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->m11F2 = 1; } else { - i_this->dr.mState = 4; - i_this->dr.m004 = 0; + i_this->dr.mAction = 4; + i_this->dr.mMode = 0; } } break; @@ -2578,11 +2578,11 @@ temp_194: /* 00008C38-00008D1C .text aite_miru__FP8bk_class */ static void aite_miru(bk_class* i_this) { - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: i_this->m0300[1] = 20 + REG0_S(8); i_this->speedF = 0.0f; - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; // Fall-through case 1: cLib_addCalcAngleS2(&i_this->m11F4, 0x2EE0, 2, 0x1800); @@ -2595,8 +2595,8 @@ static void aite_miru(bk_class* i_this) { } if (i_this->m0300[1] == 0) { i_this->m11FC = fpcM_ERROR_PROCESS_ID_e; - i_this->dr.mState = 0; - i_this->dr.m004 = 0; + i_this->dr.mAction = 0; + i_this->dr.mMode = 0; path_check(i_this, 0); } break; @@ -2611,14 +2611,14 @@ static void fail(bk_class* i_this) { i_this->speedF = 0.0f; i_this->speed.y = 0.0f; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case -1: if (i_this->m1234 == 0) { fopAcM_delete(i_this); } break; case 0: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; // Fall-through case 1: cXyz sp08 = i_this->current.pos; @@ -2630,7 +2630,7 @@ static void fail(bk_class* i_this) { fopAcM_createDisappear(i_this, &sp08, 10, drop_type, i_this->stealItemBitNo); if (i_this->mType == 10) { i_this->m02DE = 1; - i_this->dr.m004 = -1; + i_this->dr.mMode = -1; mDoAud_subBgmStop(); } else { fopAcM_delete(i_this); @@ -2660,10 +2660,10 @@ static void yogan_fail(bk_class* i_this) { i_this->attention_info.flags = 0; i_this->speedF = 0.0f; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: anm_init(i_this, BK_BCK_BK_NIGERU, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_NIGERU); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->speed.y = 190.0f + REG0_F(19); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_SURPRISE, 0); i_this->dr.m458.y = 0.0f; @@ -2685,8 +2685,8 @@ static void yogan_fail(bk_class* i_this) { cLib_addCalcAngleS2(&i_this->current.angle.x, -0x4000, 10, 0x200); if (i_this->speed.y < 0.0f) { - i_this->dr.mState = 20; - i_this->dr.m004 = 0; + i_this->dr.mAction = 20; + i_this->dr.mMode = 0; i_this->m0300[2] = 2000; } break; @@ -2701,10 +2701,10 @@ static void water_fail(bk_class* i_this) { i_this->attention_info.flags = 0; i_this->speedF = 0.0f; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: anm_init(i_this, BK_BCK_BK_NIGERU, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_NIGERU); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; fopAcM_monsSeStart(i_this, JA_SE_CV_BK_SURPRISE, 0); i_this->dr.m458.y = 0.0f; i_this->dr.m44C.y = 0.0f; @@ -2734,11 +2734,11 @@ static void wepon_search(bk_class* i_this) { daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); daBoko_c* boko = (daBoko_c*)fopAcM_SearchByID(i_this->m1200); - if (i_this->dr.m004 < 2 && (boko == NULL || (boko != NULL && fopAcM_checkCarryNow(boko)))) { - i_this->dr.mState = 0; + if (i_this->dr.mMode < 2 && (boko == NULL || (boko != NULL && fopAcM_checkCarryNow(boko)))) { + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; return; } @@ -2751,9 +2751,9 @@ static void wepon_search(bk_class* i_this) { f31 = std::sqrtf(delta.x*delta.x + delta.z*delta.z); } - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case -1: - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; i_this->m11F3 = 0; anm_init(i_this, BK_BCK_BK_HAKKEN, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_HAKKEN); if (f31 < 900.0f) { @@ -2769,7 +2769,7 @@ static void wepon_search(bk_class* i_this) { if (i_this->m030C == 0) { cLib_addCalcAngleS2(&actor->current.angle.y, i_this->dr.m4D0, 2, 0x3000); if (i_this->mpMorf->isStop() || i_this->m0300[1] == 0) { - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->m030A = l_bkHIO.m08E; anm_init(i_this, BK_BCK_BK_RUN, 3.0f, J3DFrameCtrl::EMode_LOOP, l_bkHIO.m074, BK_BAS_BK_RUN); i_this->m02CE = 0; @@ -2782,12 +2782,12 @@ static void wepon_search(bk_class* i_this) { i_this->m034E = 4; cLib_addCalcAngleS2(&actor->current.angle.y, i_this->dr.m4D0, 4, 0x1000); if (f31 < REG8_F(2) + 150.0f) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; anm_init(i_this, BK_BCK_BK_CATCH, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_CATCH); i_this->m0300[1] = 29; } else { if (i_this->m030A == 0) { - i_this->dr.mState = 4; + i_this->dr.mAction = 4; i_this->m0300[1] = 0; i_this->m11F3 = 1; } else if (i_this->dr.mAcch.ChkGroundHit() && i_this->dr.mAcch.ChkWallHit()) { @@ -2795,13 +2795,13 @@ static void wepon_search(bk_class* i_this) { actor->speed.y = 100.0f + REG0_F(16); anm_init(i_this, BK_BCK_BK_JUMP1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP1); fopAcM_monsSeStart(actor, JA_SE_CV_BK_JUMP, 0); - i_this->dr.m004 = 5; + i_this->dr.mMode = 5; i_this->m02CE++; } else { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; i_this->m02CC = 70; } } @@ -2823,10 +2823,10 @@ static void wepon_search(bk_class* i_this) { } fopAcM_setCarryNow(boko, FALSE); } else { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } } if (i_this->m0300[1] < 14) { @@ -2836,7 +2836,7 @@ static void wepon_search(bk_class* i_this) { } if (i_this->mpMorf->isStop()) { if (l_bkHIO.m00A == 0 && !player->checkGrabWear() && i_this->mPlayerDistance < l_bkHIO.m02C) { - i_this->dr.mState = 5; + i_this->dr.mAction = 5; i_this->m0B5C = 0; i_this->m0B64 = 18.0f; i_this->m0B68 = REG6_F(6) + 23.0f; @@ -2848,13 +2848,13 @@ static void wepon_search(bk_class* i_this) { attack_info_s* info = attack_info[i_this->m0B5C]; info++; // TODO: fakematch? anm_init(i_this, info->bckFileIdx, 5.0f, J3DFrameCtrl::EMode_NONE, info->speed, info->soundFileIdx); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->m11F2 = 1; } else { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } } break; @@ -2862,13 +2862,13 @@ static void wepon_search(bk_class* i_this) { actor->speedF = l_bkHIO.m05C * 0.5f; if (i_this->dr.mAcch.ChkGroundHit()) { anm_init(i_this, BK_BCK_BK_JUMP2, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP2); - i_this->dr.m004++; + i_this->dr.mMode++; } break; case 6: actor->speedF = 0.0f; if (i_this->mpMorf->isStop()) { - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; anm_init(i_this, BK_BCK_BK_RUN, 3.0f, J3DFrameCtrl::EMode_LOOP, l_bkHIO.m074, BK_BAS_BK_RUN); } break; @@ -2881,9 +2881,9 @@ static void d_dozou(bk_class* i_this) { fopAcM_OffStatus(i_this, 0); i_this->attention_info.flags = 0; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->dr.mStts.Init(0xFF, 0xFF, i_this); if (i_this->m02B5 == 0) { anm_init(i_this, BK_BCK_BK_ATTACK2, 1.0f, J3DFrameCtrl::EMode_NONE, 0.0f, BK_BAS_BK_ATTACK2); @@ -2899,14 +2899,14 @@ static void d_dozou(bk_class* i_this) { (i_this->m02B7 == 0xFF && dComIfGs_isEventBit(0x3802)) ) { i_this->mpMorf->setPlaySpeed(1.0f); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; case 2: if (i_this->mpMorf->isStop()) { i_this->dr.mStts.Init(200, 0xFF, i_this); - i_this->dr.mState = 0; - i_this->dr.m004 = 0; + i_this->dr.mAction = 0; + i_this->dr.mMode = 0; i_this->attention_info.flags = fopAc_Attn_LOCKON_BATTLE_e; } break; @@ -2928,16 +2928,16 @@ static void carry_drop(bk_class* i_this) { cLib_addCalcAngleS2(&i_this->shape_angle.z, 0, 1, 0x100); cLib_addCalcAngleS2(&i_this->shape_angle.y, i_this->m0332, 4, 0x800); - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: dComIfGs_onEventBit(0x0004); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; anm_init(i_this, BK_BCK_BK_KOUKA, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); // Fall-through case 1: if (i_this->dr.mAcch.ChkGroundHit()) { anm_init(i_this, BK_BCK_BK_TYAKU, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; i_this->m034C = l_bkHIO.m00C + 15; i_this->m034E = 3; i_this->dr.mMaxFallDistance = 1000.0f; @@ -2952,15 +2952,15 @@ static void carry_drop(bk_class* i_this) { cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f); if (i_this->mpMorf->isStop()) { anm_init(i_this, BK_BCK_BK_KIME, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->dr.m004 = 3; + i_this->dr.mMode = 3; fopAcM_monsSeStart(actor, JA_SE_CV_BK_SURPRISE, 0); } break; case 3: cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f); if (i_this->mpMorf->isStop()) { - i_this->dr.mState = 0; - i_this->dr.m004 = 0; + i_this->dr.mAction = 0; + i_this->dr.mMode = 0; i_this->current.angle = i_this->shape_angle; } break; @@ -2969,9 +2969,9 @@ static void carry_drop(bk_class* i_this) { /* 00009DF0-00009F1C .text d_mahi__FP8bk_class */ static void d_mahi(bk_class* i_this) { - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; anm_init(i_this, BK_BCK_BK_SUWARI, 20.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_SUWARI); i_this->m0300[0] = 100; // Fall-through @@ -2987,10 +2987,10 @@ static void d_mahi(bk_class* i_this) { i_this->dr.m49E = 0xF; } if (i_this->m0300[0] == 0) { - i_this->dr.mState = 0; + i_this->dr.mAction = 0; path_check(i_this, 0); wait_set(i_this); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; } @@ -3005,21 +3005,21 @@ static void tubo_wait(bk_class* i_this) { cLib_addCalc2(&actor->scale.x, 1.0f, 1.0f, 0.1f); actor->scale.y = actor->scale.z = actor->scale.x; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: if (i_this->m0300[0] != 0) { i_this->m0300[0] = REG0_S(3) + 30; anm_init(i_this, BK_BCK_BK_SUWARI, 0.0f, J3DFrameCtrl::EMode_NONE, 0.01f, BK_BAS_BK_SUWARI); - i_this->dr.m004 = 20; + i_this->dr.mMode = 20; } else { if (i_this->mType == 3) { anm_init(i_this, BK_BCK_BK_JATTACK1, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; actor->speed.y = REG0_F(8) + 120.0f; actor->speedF = REG0_F(9) + 40.0f; } else { anm_init(i_this, BK_BCK_BK_JUMP1, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP1); - i_this->dr.m004 = 10; + i_this->dr.mMode = 10; actor->speed.y = REG8_F(8) + 120.0f; actor->speedF = REG8_F(9) + 40.0f; } @@ -3033,7 +3033,7 @@ static void tubo_wait(bk_class* i_this) { break; case 1: if (i_this->dr.mAcch.ChkGroundHit()) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; anm_init(i_this, BK_BCK_BK_JATTACK2, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JATTACK2); fopAcM_monsSeStart(actor, JA_SE_CV_BK_ATTACK_L, 0); } @@ -3041,14 +3041,14 @@ static void tubo_wait(bk_class* i_this) { case 2: r28 = true; if (i_this->mpMorf->isStop()) { - i_this->dr.m004 = 11; + i_this->dr.mMode = 11; anm_init(i_this, BK_BCK_BK_JATTACK3, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JATTACK3); } break; case 10: if (i_this->m0300[0] == 0 && i_this->dr.mAcch.ChkGroundHit()) { anm_init(i_this, BK_BCK_BK_JUMP2, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP2); - i_this->dr.m004 = 11; + i_this->dr.mMode = 11; i_this->m034C = l_bkHIO.m00C + 6; i_this->m034E = 3; } @@ -3056,8 +3056,8 @@ static void tubo_wait(bk_class* i_this) { case 11: cLib_addCalc0(&i_this->speedF, 1.0f, 20.0f); if (i_this->mpMorf->isStop()) { - i_this->dr.mState = 0; - i_this->dr.m004 = 0; + i_this->dr.mAction = 0; + i_this->dr.mMode = 0; } break; case 20: @@ -3066,8 +3066,8 @@ static void tubo_wait(bk_class* i_this) { anm_init(i_this, BK_BCK_BK_SUWARI, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_SUWARI); } } else if (i_this->mpMorf->isStop()) { - i_this->dr.mState = 0; - i_this->dr.m004 = 0; + i_this->dr.mAction = 0; + i_this->dr.mMode = 0; } break; } @@ -3092,7 +3092,7 @@ static void z_demo_1(bk_class* i_this) { i_this->attention_info.flags = 0; i_this->m030E = 10; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: if (i_this->m0300[0] == 0) { f32 f1 = cM_rndF(1.0f); @@ -3101,7 +3101,7 @@ static void z_demo_1(bk_class* i_this) { } else { i_this->m0300[0] = 90; } - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; anm_init(i_this, BK_BCK_BK_TUTUKU1, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_TUTUKU1); } break; @@ -3122,7 +3122,7 @@ static void z_demo_1(bk_class* i_this) { } else { i_this->m0300[0] = 180; } - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; anm_init(i_this, BK_BCK_BK_TUTUKU2, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); } break; @@ -3134,7 +3134,7 @@ static void z_demo_1(bk_class* i_this) { } else { i_this->m0300[0] = 150; } - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; anm_init(i_this, BK_BCK_BK_TUTUKU3, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); } break; @@ -3151,8 +3151,8 @@ static void z_demo_1(bk_class* i_this) { && std::fabsf(player->current.pos.y - actor->current.pos.y) < 250.0f ) { i_this->mType = 0; - i_this->dr.mState = 1; - i_this->dr.m004 = 20; + i_this->dr.mAction = 1; + i_this->dr.mMode = 20; anm_init(i_this, BK_BCK_BK_BIKKURI, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->m0300[1] = 30; fopAcM_monsSeStart(actor, JA_SE_CV_BK_FOUND_LINK, 0); @@ -3168,18 +3168,18 @@ static void b_hang(bk_class* i_this) { if (i_this->dr.m7B8 != fpcM_ERROR_PROCESS_ID_e) { r29 = (bridge_class*)fopAcM_SearchByID(i_this->dr.m7B8); if (r29 == NULL) { - i_this->dr.mState = 4; - i_this->dr.m004 = 0; + i_this->dr.mAction = 4; + i_this->dr.mMode = 0; return; } } i_this->m0B88.OffCoSetBit(); i_this->dr.m71E = 5; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: anm_init(i_this, BK_BCK_BK_OTISOU1, REG12_F(9) + 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, BK_BAS_BK_OTISOU1); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->dr.m798 = 0.0f; i_this->m0300[0] = 100; if (i_this->m0B30 != 0) { @@ -3193,7 +3193,7 @@ static void b_hang(bk_class* i_this) { } if (i_this->m0300[0] == 0) { anm_init(i_this, BK_BCK_BK_OTISOU2, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_OTISOU2); - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; } break; case 2: @@ -3237,8 +3237,8 @@ static void b_hang(bk_class* i_this) { } if (r30) { - i_this->dr.mState = 4; - i_this->dr.m004 = 0; + i_this->dr.mAction = 4; + i_this->dr.mMode = 0; i_this->dr.m71E = 0; i_this->dr.mSpawnY = actor->current.pos.y; } @@ -3249,16 +3249,16 @@ static void rope_on(bk_class* i_this) { i_this->dr.m710 = 1; i_this->m030E = 2; - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: i_this->speedF = 0.0f; anm_init(i_this, BK_BCK_BK_KYORO2, 10.0f, J3DFrameCtrl::EMode_LOOP, 2.0f, BK_BAS_BK_KYORO2); - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->m0300[0] = 40; // Fall-through case 1: if (i_this->m0300[0] == 0) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; anm_init(i_this, BK_BCK_BK_WALK, 10.0f, J3DFrameCtrl::EMode_LOOP, 2.0f, BK_BAS_BK_WALK); } break; @@ -3270,11 +3270,11 @@ static void rope_on(bk_class* i_this) { i_this->speed.y = 100.0f + REG0_F(16); anm_init(i_this, BK_BCK_BK_JUMP1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP1); fopAcM_monsSeStart(i_this, JA_SE_CV_BK_JUMP, 0); - i_this->dr.m004 = 3; + i_this->dr.mMode = 3; } if (fopAcM_searchPlayerDistance(i_this) < 200.0f) { anm_init(i_this, BK_BCK_BK_SUWARI, 10.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_SUWARI); - i_this->dr.m004 = 5; + i_this->dr.mMode = 5; } break; } @@ -3282,20 +3282,20 @@ static void rope_on(bk_class* i_this) { i_this->speedF = 35.0f; if (i_this->dr.mAcch.ChkGroundHit()) { anm_init(i_this, BK_BCK_BK_JUMP2, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_JUMP2); - i_this->dr.m004 = 4; + i_this->dr.mMode = 4; } break; case 4: i_this->speedF = 0.0f; if (i_this->mpMorf->isStop()) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; anm_init(i_this, BK_BCK_BK_WALK, 10.0f, J3DFrameCtrl::EMode_LOOP, 2.0f, BK_BAS_BK_WALK); } break; case 5: i_this->speedF = 0.0f; if (fopAcM_searchPlayerDistance(i_this) > 250.0f) { - i_this->dr.m004 = 2; + i_this->dr.mMode = 2; anm_init(i_this, BK_BCK_BK_WALK, 10.0f, J3DFrameCtrl::EMode_LOOP, 2.0f, BK_BAS_BK_WALK); } break; @@ -3318,7 +3318,7 @@ static void Bk_move(bk_class* i_this) { i_this->dr.m711 = 0; cLib_addCalcAngleS2(&i_this->m11F4, 0, 2, 0x800); - if (i_this->dr.m004 <= -100) { + if (i_this->dr.mMode <= -100) { i_this->m030E = 5; if (std::fabsf(i_this->dr.m478) > 40.0f && !i_this->dr.mAcch.ChkGroundHit()) { i_this->m1040.SetC(i_this->dr.m100[12]); @@ -3346,8 +3346,8 @@ static void Bk_move(bk_class* i_this) { if (i_this->dr.m48A != 0 && i_this->dr.m488 == 0) { if (i_this->dr.m48A == 1) { - i_this->dr.mState = 4; - i_this->dr.m004 = 0; + i_this->dr.mAction = 4; + i_this->dr.mMode = 0; i_this->m0300[1] = 0; } else { i_this->dr.m4D0 = i_this->m0332; @@ -3367,12 +3367,12 @@ static void Bk_move(bk_class* i_this) { if (i_this->m122C != 0) { i_this->m122C--; if (i_this->m122C == 0) { - i_this->dr.mState = 18; - i_this->dr.m004 = 0; + i_this->dr.mAction = 18; + i_this->dr.mMode = 0; } } - switch (i_this->dr.mState) { + switch (i_this->dr.mAction) { case 0: jyunkai(i_this); break; @@ -3448,7 +3448,7 @@ static void Bk_move(bk_class* i_this) { } } - if ((i_this->mType == 4 || i_this->mType == 10 || i_this->mType == 6) && i_this->dr.mState == 4) { + if ((i_this->mType == 4 || i_this->mType == 10 || i_this->mType == 6) && i_this->dr.mAction == 4) { sp28 = actor->home.pos - actor->current.pos; f32 f31; @@ -3460,22 +3460,22 @@ static void Bk_move(bk_class* i_this) { if (sp28.abs() > f31) { if (i_this->mType == 4 || i_this->mType == 10) { - i_this->dr.mState = 1; + i_this->dr.mAction = 1; } if (i_this->mType == 6) { - i_this->dr.mState = 2; + i_this->dr.mAction = 2; } - i_this->dr.m004 = 51; + i_this->dr.mMode = 51; i_this->m0300[1] = 0; i_this->m0300[2] = 60; } } - if (i_this->dr.mState != 30) { + if (i_this->dr.mAction != 30) { sp28.x = 0.0f; sp28.y = 0.0f; sp28.z = actor->speedF; - if (i_this->dr.mState != 11 && i_this->dr.mState != 20 && i_this->dr.m48A == 0) { + if (i_this->dr.mAction != 11 && i_this->dr.mAction != 20 && i_this->dr.m48A == 0) { i_this->dr.m482 = actor->current.angle.y; cMtx_YrotS(*calc_mtx, actor->current.angle.y + i_this->m0334); } else { @@ -3572,7 +3572,7 @@ static void damage_check(bk_class* i_this) { at_power_check(&atInfo); if (atInfo.mDamage < 4) { - if (r26 || (i_this->dr.mState == 15 && i_this->m0310 != 0)) { + if (r26 || (i_this->dr.mAction == 15 && i_this->m0310 != 0)) { return; } } @@ -3580,8 +3580,8 @@ static void damage_check(bk_class* i_this) { if (atInfo.mpObj->ChkAtType(AT_TYPE_ICE_ARROW | AT_TYPE_LIGHT_ARROW)) { if (atInfo.mpObj->ChkAtType(AT_TYPE_ICE_ARROW)) { i_this->mEnemyIce.mFreezeDuration = REG0_S(3) + 300; - i_this->dr.mState = 0; - i_this->dr.m004 = 0; + i_this->dr.mAction = 0; + i_this->dr.mMode = 0; path_check(i_this, 0); } else { i_this->mEnemyIce.mLightShrinkTimer = 1; @@ -3718,8 +3718,8 @@ static void damage_check(bk_class* i_this) { } if (i_this->dr.m424 != 0) { - if (i_this->dr.mState == 19) { - i_this->dr.m004 = -100; + if (i_this->dr.mAction == 19) { + i_this->dr.mMode = -100; i_this->dr.m488 = 1; i_this->dr.m486 = -0x4000; i_this->dr.m71E = 20; @@ -3785,10 +3785,10 @@ static void waki_set(bk_class* i_this) { bool r30 = false; i_this->mpSearchLight = (daObj_Search::Act_c*)fpcM_Search(&s_s2_sub, i_this); - switch (i_this->dr.m004) { + switch (i_this->dr.mMode) { case 0: if (i_this->mpSearchLight != NULL) { - i_this->dr.m004 = 1; + i_this->dr.mMode = 1; i_this->m0300[0] = 1000; } break; @@ -3800,7 +3800,7 @@ static void waki_set(bk_class* i_this) { } else { daObj_Search::Act_c::setFindFlag(false); mDoAud_seStop(JA_SE_MAJUTOU_ALERM, 30); - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; i_this->m1212 = 0; } break; @@ -4016,9 +4016,9 @@ static void demo_camera(bk_class* i_this) { if (i_this->m1236 == 45) { i_this->m02B5 = 200; - i_this->dr.mState = 4; + i_this->dr.mAction = 4; i_this->m0300[1] = 0; - i_this->dr.m004 = 0; + i_this->dr.mMode = 0; } if (i_this->m1236 > 55) { @@ -4288,7 +4288,7 @@ static BOOL daBk_Execute(bk_class* i_this) { i_this->dr.mpEnemy = i_this; i_this->dr.mEnemyType = 2; } - if (i_this->dr.mState != 31) { + if (i_this->dr.mAction != 31) { i_this->shape_angle = i_this->current.angle; } @@ -4302,16 +4302,16 @@ static BOOL daBk_Execute(bk_class* i_this) { if (i_this->m0B30 != 0) { i_this->m0B34 = 1; } - i_this->dr.mState = 0; + i_this->dr.mAction = 0; break; case 2: anm_init(i_this, BK_BCK_BK_UTUBUSE, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, BK_BAS_BK_UTUBUSE); break; case 5: - if (i_this->dr.mState != 4 && i_this->dr.mState != 11) { + if (i_this->dr.mAction != 4 && i_this->dr.mAction != 11) { wait_set(i_this); - i_this->dr.mState = 4; - i_this->dr.m004 = 0; + i_this->dr.mAction = 4; + i_this->dr.mMode = 0; i_this->m0300[1] = 30; } i_this->m0336 = 5; @@ -4319,8 +4319,8 @@ static BOOL daBk_Execute(bk_class* i_this) { break; case 10: wait_set(i_this); - i_this->dr.m004 = 2; - i_this->dr.mState = 0; + i_this->dr.mMode = 2; + i_this->dr.mAction = 0; path_check(i_this, 0); break; case 20: @@ -4340,7 +4340,7 @@ static BOOL daBk_Execute(bk_class* i_this) { if (i_this->m0B30 != 0) { i_this->m0B34 = 1; } - i_this->dr.mState = 0; + i_this->dr.mAction = 0; fopAcM_monsSeStart(i_this, JA_SE_CV_BK_FAINTED, 0); break; } @@ -4424,7 +4424,7 @@ static BOOL daBk_Execute(bk_class* i_this) { sp40.y -= 20000.0f; sp34.y -= 20000.0f; } - if (i_this->dr.mState == 10) { + if (i_this->dr.mAction == 10) { sp40.y -= 20000.0f; sp34.y -= 100.0f; } @@ -4441,7 +4441,7 @@ static BOOL daBk_Execute(bk_class* i_this) { } } - if (i_this->dr.mAcch.ChkGroundHit() || i_this->dr.mState == 19) { + if (i_this->dr.mAcch.ChkGroundHit() || i_this->dr.mAction == 19) { dBgS_GndChk gndChk; s16 r21 = 0x7FFF; s16 r23 = 0x7FFF; @@ -4475,7 +4475,7 @@ static BOOL daBk_Execute(bk_class* i_this) { } } } - if (i_this->dr.mState == 19) { + if (i_this->dr.mAction == 19) { r23 = 0; r21 = 0; } @@ -4808,33 +4808,33 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { } if (i_this->mType == 4 || i_this->mType == 0xA) { - i_this->dr.mState = 1; + i_this->dr.mAction = 1; if (i_this->mType == 0xA) { - i_this->dr.m004 = -20; + i_this->dr.mMode = -20; fopAcM_OnStatus(i_this, fopAcStts_BOSS_e); #if VERSION != VERSION_USA search_sp = 1; #endif } else { - i_this->dr.m004 = -1; + i_this->dr.mMode = -1; } i_this->m0300[1] = 1000.0f + cM_rndF(1000.0f); } else if (i_this->mType == 6) { - i_this->dr.mState = 2; + i_this->dr.mAction = 2; i_this->dr.mMaxFallDistance = 300.0f; } else if (i_this->mType == 7) { - i_this->dr.mState = 29; + i_this->dr.mAction = 29; i_this->dr.mMaxFallDistance = 300.0f; } else if (i_this->mType == 5) { anm_init(i_this, BK_BCK_BK_HAKOBI, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->dr.mState = 30; + i_this->dr.mAction = 30; i_this->dr.mMaxFallDistance = 100000.0f; } else if (i_this->mType == 2 || i_this->mType == 3) { i_this->m02BA = 0xFF; - i_this->dr.mState = 15; + i_this->dr.mAction = 15; i_this->m030E = 0xA; } else if (i_this->mType == 9) { - i_this->dr.mState = 3; + i_this->dr.mAction = 3; i_this->m1216 = i_this->current.angle.z; i_this->m1217 = i_this->current.angle.y; i_this->current.angle.z = 0; @@ -4848,7 +4848,7 @@ static cPhs_State daBk_Create(fopAc_ac_c* i_actor) { } if (i_this->mType == 0xF) { - i_this->dr.mState = 23; + i_this->dr.mAction = 23; i_this->m02BA = 0; } diff --git a/src/d/actor/d_a_dr.cpp b/src/d/actor/d_a_dr.cpp index 493d71e75..6b42d1cc6 100644 --- a/src/d/actor/d_a_dr.cpp +++ b/src/d/actor/d_a_dr.cpp @@ -58,29 +58,29 @@ static void anm_init(dr_class* i_this, int bckFileIdx, f32 morf, u8 loopMode, f3 /* 00000320-0000091C .text move__FP8dr_class */ static void move(dr_class* i_this) { bool isIdle = false; - switch (i_this->mState) { + switch (i_this->mMode) { case 0: isIdle = true; anm_init(i_this, DR_BCK_DR_WAIT1, l_HIO.mWait1Morf, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->mState++; + i_this->mMode++; i_this->mCountDownTimers[0] = (s16)(200.0f + cM_rndF(200.0f)); break; case 1: isIdle = true; if (i_this->mCountDownTimers[0] == 0) { anm_init(i_this, DR_BCK_DR_AKUBI1, l_HIO.mAkubi1Morf, J3DFrameCtrl::EMode_NONE, 1.0f, DR_BAS_AKUBI1); - i_this->mState++; + i_this->mMode++; } break; case 2: isIdle = true; if (i_this->mpMorf->isStop()) { - i_this->mState = 0; + i_this->mMode = 0; } break; case 10: anm_init(i_this, DR_BCK_DR_BIKU1, l_HIO.mBiku1Morf, J3DFrameCtrl::EMode_NONE, 1.0f, DR_BAS_BIKU1); - i_this->mState++; + i_this->mMode++; i_this->mCountDownTimers[0] = l_HIO.m0E; i_this->mpBreathEmitter = dComIfGp_particle_set(dPa_name::ID_SCENE_81C4, &i_this->current.pos); i_this->m2C9 = 0; @@ -118,7 +118,7 @@ static void move(dr_class* i_this) { } else { anm_init(i_this, DR_BCK_DR_HO1, l_HIO.mHo1Morf, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->mpBreathEmitter = dComIfGp_particle_set(dPa_name::ID_SCENE_81C6, &i_this->current.pos); - i_this->mState++; + i_this->mMode++; } } @@ -138,7 +138,7 @@ static void move(dr_class* i_this) { } if (i_this->mpMorf->isStop()) { - i_this->mState = 0; + i_this->mMode = 0; if (i_this->mpBreathEmitter) { i_this->mpBreathEmitter->becomeInvalidEmitter(); i_this->mpBreathEmitter = NULL; @@ -151,7 +151,7 @@ static void move(dr_class* i_this) { if ((isIdle && (l_HIO.m0C || dComIfGp_getVibration().CheckQuake())) || i_this->m2C8 != 0) { l_HIO.m0C = false; i_this->m2C8 = 0; - i_this->mState = 10; + i_this->mMode = 10; } } diff --git a/src/d/actor/d_a_fganon.cpp b/src/d/actor/d_a_fganon.cpp index 9e1721971..27317c7d4 100644 --- a/src/d/actor/d_a_fganon.cpp +++ b/src/d/actor/d_a_fganon.cpp @@ -185,23 +185,23 @@ void fly(fganon_class* i_this) { fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); dBgS_LinChk linChk; - if ((((i_this->m384 & 0xF) == 0) && (cM_rndF(1.0f) < 0.5f)) || (i_this->m388 == -10)) { + if ((((i_this->m384 & 0xF) == 0) && (cM_rndF(1.0f) < 0.5f)) || (i_this->mMode == -10)) { i_this->m398 = player->shape_angle.y; } - switch (i_this->m388) { + switch (i_this->mMode) { case -10: deru_brk(i_this); i_this->current.pos = i_this->home.pos; i_this->current.pos.y = player->current.pos.y + l_HIO.m10; i_this->shape_angle.y = fopAcM_searchPlayerAngleY(a_this); - i_this->m388 = 1; + i_this->mMode = 1; anm_init(i_this, FGANON_BCK_WAIT1, 20.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); i_this->m3A4[1] = 60; break; case 0: anm_init(i_this, FGANON_BCK_WAIT1, 20.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->m388++; + i_this->mMode++; i_this->m3A0 = 0.0f; i_this->m3A4[1] = (short)(cM_rndF(50.0f) + 50.0f); // Fall-through @@ -235,24 +235,24 @@ void fly(fganon_class* i_this) { fly_se_set(i_this); if (i_this->m3A4[1] == 0) { - i_this->m386 = 6; - i_this->m388 = 0; + i_this->mAction = 6; + i_this->mMode = 0; } if (i_this->m3A4[2] == 0) { - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; } } /* 000015A8-00001BD0 .text shot__FP12fganon_class */ void shot(fganon_class* i_this) { cLib_addCalcAngleS2(&i_this->shape_angle.y, fopAcM_searchPlayerAngleY(i_this), 10, 0x400); - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { if (!i_this->m408) { anm_init(i_this, FGANON_BCK_TAME1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->m388++; + i_this->mMode++; i_this->m3A4[0] = 40; fopAcM_monsSeStart(i_this, JA_SE_CV_PG_EBALL_MAKE_S, 0); // Fall-through @@ -269,7 +269,7 @@ void shot(fganon_class* i_this) { } if (i_this->m3A4[0] == 0) { anm_init(i_this, FGANON_BCK_NAGERU1, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->m388++; + i_this->mMode++; fopAcM_monsSeStart(i_this, JA_SE_CV_PG_EBALL_FIRE_S, 0); mDoAud_seStart(JA_SE_CM_PG_EBALL_FIRE_S, &i_this->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); } @@ -285,7 +285,7 @@ void shot(fganon_class* i_this) { } if (i_this->mpMorf->isStop()) { anm_init(i_this, FGANON_BCK_WAIT1, 3.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->m388++; + i_this->mMode++; } // Fall-through } @@ -300,7 +300,7 @@ void shot(fganon_class* i_this) { else { anm_init(i_this, FGANON_BCK_TENNISRL1, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); } - i_this->m388++; + i_this->mMode++; fopAcM_monsSeStart(i_this, JA_SE_CV_PG_REFLECT_EBALL, 0); mDoAud_seStart(JA_SE_CM_PG_SWING_S, &i_this->eyePos, 0, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); i_this->m687++; @@ -309,8 +309,8 @@ void shot(fganon_class* i_this) { } } else if (i_this->m2BC == 2) { - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; return; } } @@ -324,7 +324,7 @@ void shot(fganon_class* i_this) { if (i_this->mpMorf->isStop() || ((i_this->m2BC >= 1) && (i_this->mpMorf->getFrame() >= 20.0f))) { anm_init(i_this, FGANON_BCK_WAIT1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->m388 = 3; + i_this->mMode = 3; } // Fall-through } @@ -332,11 +332,11 @@ void shot(fganon_class* i_this) { cLib_addCalc0(&i_this->speedF, 1.0f, REG0_F(14) + 1.0f); pos_move(i_this, 0); fly_se_set(i_this); - if ((i_this->m388 >= 2) && (i_this->m408 == 0)) { - i_this->m386 = 5; - i_this->m388 = 0; + if ((i_this->mMode >= 2) && (i_this->m408 == 0)) { + i_this->mAction = 5; + i_this->mMode = 0; } - if ((i_this->m388 == 3) || (i_this->m388 == 4)) { + if ((i_this->mMode == 3) || (i_this->mMode == 4)) { mDoAud_monsSeStart(JA_SE_OBJ_PG_EBALL_FLY_S, &i_this->m3E0, 100, dComIfGp_getReverb(fopAcM_GetRoomNo(i_this))); } } @@ -347,10 +347,10 @@ void spinattack(fganon_class* i_this) { fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); dBgS_LinChk linChk; int mFrame = i_this->mpMorf->mFrameCtrl.getFrame(); - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { i_this->shape_angle.y = player->shape_angle.y; - i_this->m388 = 1; + i_this->mMode = 1; // Fall-through } case 1: { @@ -363,7 +363,7 @@ void spinattack(fganon_class* i_this) { if (!dComIfG_Bgsp()->LineCross(&linChk)) { i_this->current.pos.y -= 100.0f; anm_init(i_this, FGANON_BCK_WAIT1, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->m388 = 2; + i_this->mMode = 2; i_this->m3A4[0] = 30; deru_brk(i_this); // Fall-through @@ -376,7 +376,7 @@ void spinattack(fganon_class* i_this) { case 2: { if (i_this->m3A4[0] == 0) { anm_init(i_this, FGANON_BCK_KAITEN1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->m388 = 3; + i_this->mMode = 3; i_this->speedF = 0.0f; fopAcM_monsSeStart(i_this, JA_SE_CV_PG_EBALL_FIRE_S, 0); } @@ -406,8 +406,8 @@ void spinattack(fganon_class* i_this) { i_this->current.angle.x = 0; pos_move(i_this, 1); if (i_this->mpMorf->isStop()) { - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; } break; } @@ -420,22 +420,22 @@ void fly2(fganon_class* i_this) { fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); dBgS_LinChk linChk; - if ((((i_this->m384 & 0xF) == 0) && (cM_rndF(1.0f) < 0.5f)) || (i_this->m388 == -10)) { + if ((((i_this->m384 & 0xF) == 0) && (cM_rndF(1.0f) < 0.5f)) || (i_this->mMode == -10)) { i_this->m398 = player->shape_angle.y; } - switch (i_this->m388) { + switch (i_this->mMode) { case -10: deru_brk(i_this); i_this->current.pos = i_this->home.pos; i_this->current.pos.y = player->current.pos.y + l_HIO.m18; i_this->shape_angle.y = fopAcM_searchPlayerAngleY(a_this); - i_this->m388 = 1; + i_this->mMode = 1; anm_init(i_this, FGANON_BCK_WAIT1, 20.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); i_this->m3A4[1] = 40; break; case 0: anm_init(i_this, FGANON_BCK_WAIT1, 20.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->m388++; + i_this->mMode++; i_this->m3A0 = 0.0f; i_this->m3A4[1] = (short)(cM_rndF(50.0f) + 50.0f); // Fall-through @@ -469,13 +469,13 @@ void fly2(fganon_class* i_this) { fly_se_set(i_this); if (i_this->m3A4[1] == 0) { - i_this->m386 = 11; - i_this->m388 = 0; + i_this->mAction = 11; + i_this->mMode = 0; } if (i_this->m3A4[2] == 0) { - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; } } @@ -568,7 +568,7 @@ void mahou_set(fganon_class* i_this) { void shot2(fganon_class* i_this) { cLib_addCalcAngleS2(&i_this->shape_angle.y, fopAcM_searchPlayerAngleY(i_this), 10, 0x400); int mFrame = i_this->mpMorf->mFrameCtrl.getFrame(); - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { anm_init(i_this, FGANON_BCK_TAME_S1, 5.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); for (int i = 0; i < 2; i++) { @@ -580,7 +580,7 @@ void shot2(fganon_class* i_this) { i_this->mEmitters2[0] = dComIfGp_particle_set(dPa_name::ID_SCENE_8218, &i_this->current.pos, NULL); i_this->mEmitters2[1] = dComIfGp_particle_set(dPa_name::ID_SCENE_8219, &i_this->current.pos, NULL); fopAcM_monsSeStart(i_this, JA_SE_CV_PG_EBALL_MAKE_L, 0); - i_this->m388++; + i_this->mMode++; // Fall-through } case 1: { @@ -593,7 +593,7 @@ void shot2(fganon_class* i_this) { if (i_this->mpMorf->isStop()) { anm_init(i_this, FGANON_BCK_TAME_S2, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); i_this->m3A4[0] = l_HIO.m3C; - i_this->m388++; + i_this->mMode++; for (int i = 0; i < 2; i++) { if (i_this->mEmitters2[i] != NULL) { i_this->mEmitters2[i]->becomeInvalidEmitter(); @@ -611,7 +611,7 @@ void shot2(fganon_class* i_this) { fopAcM_seStart(i_this, JA_SE_CM_PG_EBALL_MAKING_L, 0); if (i_this->m3A4[0] == 0) { anm_init(i_this, FGANON_BCK_NAGERU_S1, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->m388++; + i_this->mMode++; i_this->mEmitters2[0] = dComIfGp_particle_set(dPa_name::ID_SCENE_821C, &i_this->current.pos, NULL); i_this->mEmitters2[1] = dComIfGp_particle_set(dPa_name::ID_SCENE_821D, &i_this->current.pos, NULL); } @@ -642,7 +642,7 @@ void shot2(fganon_class* i_this) { } if (i_this->mpMorf->isStop()) { i_this->m3A4[0] = 60; - i_this->m388 = 4; + i_this->mMode = 4; for (int i = 0; i < 2; i++) { if (i_this->mEmitters2[i] != NULL) { i_this->mEmitters2[i]->becomeInvalidEmitter(); @@ -657,8 +657,8 @@ void shot2(fganon_class* i_this) { anm_init(i_this, FGANON_BCK_WAIT1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); } if (i_this->m3A4[0] == 0) { - i_this->m386 = 9; - i_this->m388 = 0; + i_this->mAction = 9; + i_this->mMode = 0; } break; } @@ -678,10 +678,10 @@ void spinattack2(fganon_class* i_this) { fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); dBgS_LinChk linChk; int mFrame = i_this->mpMorf->mFrameCtrl.getFrame(); - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { i_this->shape_angle.y = player->shape_angle.y + i_this->m68F * 0x3333; - i_this->m388 = 1; + i_this->mMode = 1; if (i_this->m68F == 0) { for (int i = 1; i < 5; i++) { fopAcM_create(PROC_FGANON, (i * 16) | 3, &i_this->current.pos, i_this->current.roomNo); @@ -698,7 +698,7 @@ void spinattack2(fganon_class* i_this) { MtxPosition(&offset, &transformedPos); i_this->current.pos = player->current.pos + transformedPos; anm_init(i_this, 10, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->m388 = 2; + i_this->mMode = 2; deru_brk(i_this); i_this->m38C = player->current.pos; } @@ -711,7 +711,7 @@ void spinattack2(fganon_class* i_this) { local_e4 = i_this->m38C - i_this->current.pos; if (local_e4.abs() < l_HIO.m38) { anm_init(i_this, 9, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->m388 = 3; + i_this->mMode = 3; i_this->speedF = 0.0f; fopAcM_monsSeStart(i_this, JA_SE_CV_PG_EBALL_FIRE_S, 0); break; @@ -731,21 +731,21 @@ void spinattack2(fganon_class* i_this) { } if (i_this->mpMorf->isStop()) { if (i_this->m68F == 0) { - i_this->m388 = 4; + i_this->mMode = 4; i_this->m3A4[0] = 40; anm_init(i_this, FGANON_BCK_WAIT1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); } else { - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; } } break; } case 4: { if (i_this->m3A4[0] == 0) { - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; } break; } @@ -756,17 +756,17 @@ void spinattack2(fganon_class* i_this) { /* 00003690-00003B3C .text down__FP12fganon_class */ void down(fganon_class* i_this) { - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { anm_init(i_this, 6, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->m388++; + i_this->mMode++; i_this->speed.y = 0.0f; } case 1: { i_this->m3AE = 5; if (i_this->mAcch.ChkGroundHit()) { if (i_this->mpMorf->isStop()) { - i_this->m388++; + i_this->mMode++; anm_init(i_this, FGANON_BCK_TYAKUTI1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); } } @@ -775,7 +775,7 @@ void down(fganon_class* i_this) { } case 2: { if (i_this->mpMorf->isStop()) { - i_this->m388++; + i_this->mMode++; anm_init(i_this, 8, 2.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); } break; @@ -789,7 +789,7 @@ void down(fganon_class* i_this) { } case 10: { anm_init(i_this, 7, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->m388 = 2; + i_this->mMode = 2; } default: break; @@ -811,8 +811,8 @@ void down(fganon_class* i_this) { bVar3 = TRUE; } if ((i_this->m3A4[0] == 0) || bVar3) { - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; if (i_this->m2BC != 0) { i_this->health = 100; } @@ -844,54 +844,54 @@ BOOL kabe_check(fganon_class* i_this) { /* 00004300-000044CC .text deru__FP12fganon_class */ void deru(fganon_class* i_this) { i_this->m3AE = 3; - switch(i_this->m388) { + switch(i_this->mMode) { case 0: if(l_HIO.m06 != 0) { if (l_HIO.m06 == 1) { - i_this->m386 = 5; - i_this->m388 = -10; + i_this->mAction = 5; + i_this->mMode = -10; i_this->m3A4[2] = l_HIO.m0A; } else if (l_HIO.m06 == 2) { - i_this->m386 = 7; - i_this->m388 = 0; + i_this->mAction = 7; + i_this->mMode = 0; } else if (l_HIO.m06 == 3) { - i_this->m386 = 9; - i_this->m388 = -10; + i_this->mAction = 9; + i_this->mMode = -10; i_this->m3A4[2] = l_HIO.m0A; } else if (l_HIO.m06 == 4) { - i_this->m386 = 10; - i_this->m388 = 0; + i_this->mAction = 10; + i_this->mMode = 0; } } else { if (i_this->m2BC == 0) { if (cM_rndF(1.0f) < 0.5f) { - i_this->m386 = 5; - i_this->m388 = -10; + i_this->mAction = 5; + i_this->mMode = -10; i_this->m3A4[2] = l_HIO.m0A; } else { - i_this->m386 = 7; - i_this->m388 = 0; + i_this->mAction = 7; + i_this->mMode = 0; } } else { if ((cM_rndF(1.0f) < 0.4f) && !kabe_check(i_this)) { - i_this->m386 = 10; - i_this->m388 = 0; + i_this->mAction = 10; + i_this->mMode = 0; } else { if (cM_rndF(1.0f) < 0.5f) { - i_this->m386 = 9; - i_this->m388 = -10; + i_this->mAction = 9; + i_this->mMode = -10; i_this->m3A4[2] = l_HIO.m0A; } else { - i_this->m386 = 5; - i_this->m388 = -10; + i_this->mAction = 5; + i_this->mMode = -10; i_this->m3A4[2] = l_HIO.m0A; } } @@ -904,19 +904,19 @@ void deru(fganon_class* i_this) { /* 000044CC-00004584 .text kieru__FP12fganon_class */ void kieru(fganon_class* i_this) { i_this->m3AE = 3; - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { if ((i_this->m408 == 1) || (i_this->m408 == 2)) { i_this->m408 = 35; } kieru_brk(i_this, 0); if (i_this->m68F != 0) { - i_this->m388 = 1; + i_this->mMode = 1; i_this->m3A4[0] = 30; } else { - i_this->m386 = 0; - i_this->m388 = 0; + i_this->mAction = 0; + i_this->mMode = 0; } break; } @@ -934,16 +934,16 @@ void fail(fganon_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; i_this->m3AE = 3; - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { kieru_brk(i_this, 1); - i_this->m388 = 1; + i_this->mMode = 1; anm_init(i_this, 7, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); break; } case 1: { if (i_this->mpMorf->isStop()) { - i_this->m388 = 2; + i_this->mMode = 2; i_this->m3A4[0] = 30; dBgS_LinChk linChk; @@ -1013,7 +1013,7 @@ void fail(fganon_class* i_this) { else { i_this->m698 = 0.0f; i_this->m3A4[0] = 0; - i_this->m388 = 3; + i_this->mMode = 3; } } } @@ -1023,7 +1023,7 @@ void fail(fganon_class* i_this) { if (i_this->m3A4[0] == 0) { kieru_brk(i_this, 2); i_this->m3A4[0] = 10; - i_this->m388 = 4; + i_this->mMode = 4; i_this->mBokoID = fopAcM_create(PROC_BOKO, 5, &i_this->current.pos, i_this->current.roomNo); } break; @@ -1052,7 +1052,7 @@ void fail(fganon_class* i_this) { void standby(fganon_class* i_this) { fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); i_this->m3AE = 3; - switch(i_this->m388) { + switch(i_this->mMode) { case -1: { if (i_this->m2BC == 2) { if (!dComIfGs_checkGetItem(dItem_LIGHT_ARROW_e)) { @@ -1069,7 +1069,7 @@ void standby(fganon_class* i_this) { float distXZ = std::sqrtf(xOffset * xOffset + zOffset * zOffset); if (distXZ < i_this->m2BD * 10.0f) { i_this->m3A4[0] = l_HIO.m08; - i_this->m388 = 1; + i_this->mMode = 1; fopAcM_OnStatus(i_this, fopAcStts_SHOWMAP_e); i_this->mB89 = 22; } @@ -1077,13 +1077,13 @@ void standby(fganon_class* i_this) { } case 0: { i_this->m3A4[0] = l_HIO.m08; - i_this->m388++; + i_this->mMode++; // fallthrough } case 1: { if (i_this->m3A4[0] == 0) { - i_this->m386 = 1; - i_this->m388 = 0; + i_this->mAction = 1; + i_this->mMode = 0; i_this->m69C = 0.0f; i_this->m698 = 0.0f; i_this->m694 = 0.0f; @@ -1101,13 +1101,13 @@ void start(fganon_class* i_this) { i_this->m3AE = 3; fopAcM_OffStatus(i_this, 0); i_this->attention_info.flags = 0; - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { offset = player->current.pos - i_this->home.pos; float distXZ = std::sqrtf(offset.x * offset.x + offset.z * offset.z); if (distXZ < i_this->m2BD * 10.0f) { i_this->mB54 = 1; - i_this->m388 = 1; + i_this->mMode = 1; anm_init(i_this, FGANON_BCK_WAIT1, 0.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); mDoAud_bgmAllMute(30); } @@ -1120,11 +1120,11 @@ void start(fganon_class* i_this) { case 2: { anm_init(i_this, FGANON_BCK_WARAU1, 5.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); fopAcM_monsSeStart(i_this, JA_SE_CV_PG_LAUGH_2, 0); - i_this->m388 = 3; + i_this->mMode = 3; break; } case 4: { - i_this->m388 = 5; + i_this->mMode = 5; i_this->m3A4[0] = REG0_S(0) + 0x50; anm_init(i_this, FGANON_BCK_TAME1, 10.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); } @@ -1162,9 +1162,9 @@ void end(fganon_class* i_this) { fopAcM_OffStatus(i_this, 0); i_this->attention_info.flags = 0; s32 mFrame = i_this->mpMorf->mFrameCtrl.getFrame(); - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { - i_this->m388 = 1; + i_this->mMode = 1; anm_init(i_this, FGANON_BCK_LAST_DAMAGE1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->mB54 = 50; dComIfGs_onEventBit(0x3f20); // PG_DEFEATED? It appears further down in `energy_ball_move` @@ -1179,13 +1179,13 @@ void end(fganon_class* i_this) { deru_brk(i_this); anm_init(i_this, FGANON_BCK_WARAU1, 1.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); fopAcM_monsSeStart(i_this, JA_SE_CV_PG_LAUGH_2, 0); - i_this->m388 = 3; + i_this->mMode = 3; break; } case 4: { deru_brk(i_this); anm_init(i_this, FGANON_BCK_SARU1, 1.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->m388 = 5; + i_this->mMode = 5; i_this->speed.y = 0.0f; fopAcM_seStart(i_this, JA_SE_CM_PG_END_1, 0); } @@ -1199,7 +1199,7 @@ void end(fganon_class* i_this) { kieru_brk2(i_this); } if (mFrame == 48) { - i_this->m388 = 6; + i_this->mMode = 6; } } case 6: @@ -1214,9 +1214,9 @@ void last_end(fganon_class* i_this) { i_this->m3AE = 3; fopAcM_OffStatus(i_this, 0); i_this->attention_info.flags = 0; - switch(i_this->m388) { + switch(i_this->mMode) { case 0: { - i_this->m388 = 1; + i_this->mMode = 1; anm_init(i_this, FGANON_BCK_MOGAKU1, 2.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->mB54 = 100; i_this->m3C0 = 10000.0f; @@ -1225,7 +1225,7 @@ void last_end(fganon_class* i_this) { } case 1: { if (i_this->m3A4[1] == 0) { - i_this->m388 = 2; + i_this->mMode = 2; i_this->m3A4[1] = 20; i_this->m2D0 = 1; i_this->mB54++; @@ -1237,7 +1237,7 @@ void last_end(fganon_class* i_this) { cLib_addCalc2(&i_this->scale.z, 0.1f, 1.0f, 0.05f); cLib_addCalc2(&i_this->scale.y, 0.1f, 1.0f, 0.05f); if (i_this->m3A4[1] == 0) { - i_this->m388 = 3; + i_this->mMode = 3; i_this->m3A4[1] = 30; fopAcM_seStart(i_this, JA_SE_CM_L_ARROW_PASS_AWAY, 0); } @@ -1251,7 +1251,7 @@ void last_end(fganon_class* i_this) { i_this->scale.x = 0.0f; i_this->scale.y = 0.0f; i_this->scale.z = 0.0f; - i_this->m388 = 4; + i_this->mMode = 4; i_this->m3A4[1] = 30; } break; @@ -1270,7 +1270,7 @@ void last_end(fganon_class* i_this) { mBoko->setMatrix(i_this->mpKenModel->getBaseTRMtx()); if (i_this->m3A4[1] == 1) { fopAcM_cancelCarryNow(mBoko); - i_this->m388 = 5; + i_this->mMode = 5; i_this->mB54++; i_this->mB56 = 0; } @@ -1340,8 +1340,8 @@ void damage_check(fganon_class* i_this) { dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, &i_this->eyePos, &local_a0, &local_44); dKy_SordFlush_set(i_this->eyePos, 1); - i_this->m386 = 22; - i_this->m388 = 0; + i_this->mAction = 22; + i_this->mMode = 0; i_this->m3AE = 1000; mDoAud_subBgmStop(); @@ -1364,8 +1364,8 @@ void damage_check(fganon_class* i_this) { i_this->speedF = 0.0f; } else { - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; if ((i_this->m408 == 1) || (i_this->m408 == 2)) { i_this->m408 = 35; } @@ -1408,8 +1408,8 @@ void damage_check(fganon_class* i_this) { dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, &i_this->eyePos, &local_a0, &local_44); dKy_SordFlush_set(i_this->eyePos, 1); - i_this->m386 = 8; - i_this->m388 = 0; + i_this->mAction = 8; + i_this->mMode = 0; i_this->m3B0 = REG8_F(11) + 80.0f; i_this->m3B8 = REG8_S(2) + 7; @@ -1426,7 +1426,7 @@ void damage_check(fganon_class* i_this) { } } if (i_this->m68F) { - if ((i_this->mCyl.ChkTgHit()) || (master->m386 == 8)) { + if ((i_this->mCyl.ChkTgHit()) || (master->mAction == 8)) { mEmitter = dComIfGp_particle_set(dPa_name::ID_SCENE_826B, &i_this->current.pos, NULL); if (mEmitter != NULL) { mEmitter->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(0)); @@ -1438,7 +1438,7 @@ void damage_check(fganon_class* i_this) { if ((i_this->mCyl.ChkTgHit()) || (i_this->m68C)) { i_this->m3AE = 6; if (i_this->mCyl.ChkTgHit()) { - if(((i_this->m386 == 8) || (i_this->m386 == 7)) || (i_this->m386 == 10)) { + if(((i_this->mAction == 8) || (i_this->mAction == 7)) || (i_this->mAction == 10)) { atInfo.mpObj = i_this->mCyl.GetTgHitObj(); pPos = i_this->mCyl.GetTgHitPosP(); atInfo.pParticlePos = pPos; @@ -1472,14 +1472,14 @@ void damage_check(fganon_class* i_this) { dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, pPos, &local_a0, &local_44); - if ((i_this->m386 == 7) || (i_this->m386 == 10)) { - i_this->m386 = 8; - i_this->m388 = 0; + if ((i_this->mAction == 7) || (i_this->mAction == 10)) { + i_this->mAction = 8; + i_this->mMode = 0; } else if (i_this->m2BC == 0) { if (i_this->health <= 0) { - i_this->m386 = 21; - i_this->m388 = 0; + i_this->mAction = 21; + i_this->mMode = 0; i_this->m3AE = 1000; mDoAud_subBgmStop(); } @@ -1487,17 +1487,17 @@ void damage_check(fganon_class* i_this) { i_this->m690 -= atInfo.mDamage; if (i_this->m690 <= 0) { i_this->m690 = 10; - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; } else { - i_this->m388 = 10; + i_this->mMode = 10; } } } else if (i_this->m2BC == 1) { - i_this->m386 = 3; - i_this->m388 = 0; + i_this->mAction = 3; + i_this->mMode = 0; i_this->health = 0; mDoAud_subBgmStop(); } @@ -1519,8 +1519,8 @@ void damage_check(fganon_class* i_this) { dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, &i_this->eyePos, &local_a0, &local_44); dKy_SordFlush_set(i_this->eyePos, 1); - i_this->m386 = 8; - i_this->m388 = 0; + i_this->mAction = 8; + i_this->mMode = 0; i_this->m3B0 = REG8_F(11) + 80.0f; i_this->m3B8 = REG8_S(2) + 7; @@ -1537,8 +1537,8 @@ void damage_check(fganon_class* i_this) { /* 00006288-00006560 .text move__FP12fganon_class */ s32 move(fganon_class* i_this) { int res = 0; - if (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e) && i_this->m386) { - if (i_this->m386 == 10) { + if (!dComIfGp_checkPlayerStatus0(0, daPyStts0_SHIP_RIDE_e) && !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e) && i_this->mAction) { + if (i_this->mAction == 10) { dCam_getBody()->SetTypeForce("P_Ganon3", NULL); } else if (i_this->m2BC != 1) { @@ -1548,17 +1548,17 @@ s32 move(fganon_class* i_this) { dCam_getBody()->SetTypeForce("P_Ganon2", NULL); } } - if ((i_this->m2BC == 0) && (i_this->m386 < 20)) { + if ((i_this->m2BC == 0) && (i_this->mAction < 20)) { fopAc_ac_c* player = (fopAc_ac_c*)dComIfGp_getPlayer(0); - if ((i_this->m386 == 0) && (player->current.pos.y < 710.0f)) { + if ((i_this->mAction == 0) && (player->current.pos.y < 710.0f)) { return 0; } - if ((i_this->m386 != 2) && (player->current.pos.y < 710.0f)) { - i_this->m386 = 2; - i_this->m388 = 0; + if ((i_this->mAction != 2) && (player->current.pos.y < 710.0f)) { + i_this->mAction = 2; + i_this->mMode = 0; } } - switch(i_this->m386) { + switch(i_this->mAction) { case 0: standby(i_this); break; @@ -1734,14 +1734,14 @@ void demo_camera(fganon_class* i_this) { cLib_addCalc2(&i_this->mB80, 0.1f, 1.0f, REG8_F(7) + 0.01f); } if (i_this->mB56 == 110) { - i_this->m388 = 2; + i_this->mMode = 2; } if (i_this->mB56 == 180) { - i_this->m388 = 4; + i_this->mMode = 4; } if (i_this->mB56 == 280) { - i_this->m386 = 6; - i_this->m388 = 1; + i_this->mAction = 6; + i_this->mMode = 1; i_this->m3A4[0] = 29; i_this->mB54 = 150; if (i_this->m2BF != 0xFF) { @@ -1822,7 +1822,7 @@ void demo_camera(fganon_class* i_this) { player->setPlayerPosAndAngle(&transformedPos, 0.0f); if (i_this->mB56 == 10) { - i_this->m388++; + i_this->mMode++; } i_this->current.pos.x = (i_this->mB68.x - 50.0f) + REG0_F(4); @@ -1859,7 +1859,7 @@ void demo_camera(fganon_class* i_this) { i_this->mB68 = i_this->eyePos; i_this->mB68.y -= REG0_F(11) + 30.0f; - i_this->m388++; + i_this->mMode++; } case 54: { cLib_addCalc2(&i_this->mB68.y, (i_this->eyePos.y - 30.0f) + REG0_F(11), 0.1f, 20.0f); @@ -2130,8 +2130,8 @@ void energy_ball_move(fganon_class* i_this) { if (i_this->m40A != 0) { return; } - i_this->m386 = 2; - i_this->m388 = 0; + i_this->mAction = 2; + i_this->mMode = 0; i_this->m40A = 50; return; } @@ -2283,10 +2283,10 @@ void energy_ball_move(fganon_class* i_this) { if (i_this->mBallAtSph.ChkAtHit() != 0) { atInfo.mpActor = i_this->mBallAtSph.GetAtHitObj()->GetAc(); - if ((atInfo.mpActor && (fopAcM_GetName(atInfo.mpActor) == PROC_PLAYER)) && (i_this->m386 != 22)) { + if ((atInfo.mpActor && (fopAcM_GetName(atInfo.mpActor) == PROC_PLAYER)) && (i_this->mAction != 22)) { i_this->m68B = 1; - i_this->m386 = 5; - i_this->m388 = 1; + i_this->mAction = 5; + i_this->mMode = 1; i_this->m3A4[1] = (cM_rndF(30.0f)) + 70.f; } } @@ -2336,7 +2336,7 @@ static BOOL daFganon_Execute(fganon_class* i_this) { fpcM_Search(&mahou_se_set, i_this); g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &i_this->current.pos, &i_this->tevStr); - if (((((i_this->m386 == 5) || (i_this->m386 == 9)) || (i_this->m386 == 7)) || (i_this->m386 == 10)) && ((i_this->m68B != 0 && (i_this->m68A == 0)))) { + if (((((i_this->mAction == 5) || (i_this->mAction == 9)) || (i_this->mAction == 7)) || (i_this->mAction == 10)) && ((i_this->m68B != 0 && (i_this->m68A == 0)))) { i_this->m68B = 0; anm_init(i_this, FGANON_BCK_WARAU1, 6.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); i_this->m68A = 60; @@ -2431,7 +2431,7 @@ static BOOL daFganon_Execute(fganon_class* i_this) { energy_ball_move(i_this); for (int i = 0; i < 2; i++) { - if ((i_this->mbIsMaterialized != 0) && (i_this->m386 != 22)) { + if ((i_this->mbIsMaterialized != 0) && (i_this->mAction != 22)) { if (i_this->mEmitters1[i] != NULL) { i_this->mEmitters1[i]->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(jno[i])); } @@ -2831,8 +2831,8 @@ static cPhs_State daFganon_Create(fopAc_ac_c* i_act) { if (i_this->m68F == 0) { master = i_this; if (i_this->m2BC == 0) { - i_this->m386 = 20; - i_this->m388 = 0; + i_this->mAction = 20; + i_this->mMode = 0; kieru_brk(i_this, 0); i_this->max_health = 30; i_this->health = 30; @@ -2841,14 +2841,14 @@ static cPhs_State daFganon_Create(fopAc_ac_c* i_act) { else { i_this->max_health = 100; i_this->health = 100; - i_this->m386 = 0; - i_this->m388= -1; + i_this->mAction = 0; + i_this->mMode= -1; } i_this->current.pos.y += 10000.0f; } else { - i_this->m386 = 10; - i_this->m388 = 0; + i_this->mAction = 10; + i_this->mMode = 0; deru_brk(i_this); } i_this->initBt(REG8_F(8) + 300.0f, 300.0f); diff --git a/src/d/actor/d_a_ks.cpp b/src/d/actor/d_a_ks.cpp index a327a69d7..7c9ed5c3c 100644 --- a/src/d/actor/d_a_ks.cpp +++ b/src/d/actor/d_a_ks.cpp @@ -186,25 +186,26 @@ BOOL tyaku_check(ks_class* i_this) { /* 00000788-0000087C .text ks_kuttuki_check__FP8ks_class */ BOOL ks_kuttuki_check(ks_class* i_this) { fopAc_ac_c* mAtHitAc; - if (i_this->mSph.ChkAtHit() && !i_this->mSph.ChkAtShieldHit() && (mAtHitAc = i_this->mSph.GetAtHitAc(), mAtHitAc) && mAtHitAc == dComIfGp_getLinkPlayer() && KUTTUKU_ALL_COUNT >= 0 && KUTTUKU_ALL_COUNT < 0x14 && GORON_COUNT == 0) { - i_this->mSph.OffTgSetBit(); - i_this->mSph.ClrCoSet(); - i_this->mSph.ClrTgHit(); + if (i_this->mSph.ChkAtHit() && !i_this->mSph.ChkAtShieldHit()) { + mAtHitAc = i_this->mSph.GetAtHitAc(); + if (mAtHitAc && mAtHitAc == dComIfGp_getLinkPlayer() && KUTTUKU_ALL_COUNT >= 0 && KUTTUKU_ALL_COUNT < 20 && GORON_COUNT == 0) { + i_this->mSph.OffTgSetBit(); + i_this->mSph.ClrCoSet(); + i_this->mSph.ClrTgHit(); - if (i_this->m2CF) { - i_this->m2CF = 0; + if (i_this->m2CF) { + i_this->m2CF = 0; - i_this->m52C.remove(); + i_this->m52C.remove(); + } + + i_this->mAction = 4; + i_this->mMode = 40; + + return TRUE; } - - i_this->m2CB = 4; - i_this->m2CC = 0x28; - - return TRUE; - } - else { - return FALSE; } + return FALSE; } /* 0000087C-000008F4 .text gm_birth_delet__FP8ks_class */ @@ -232,8 +233,8 @@ BOOL shock_damage_check(ks_class* i_this) { if (distXZ < 200.0f) { if (std::sqrtf(mSwordTopPos.y * mSwordTopPos.y) < 40.0f) { - i_this->m2CB = 3; - i_this->m2CC = 0x20; + i_this->mAction = 3; + i_this->mMode = 32; return TRUE; } @@ -263,28 +264,28 @@ BOOL body_atari_check(ks_class* i_this) { a_this->current.angle.y = fopAcM_searchPlayerAngleY(a_this) + 0x8000; - i_this->m2CB = 3; + i_this->mAction = 3; switch (mTgHitObj->GetAtType()) { case AT_TYPE_WIND: { a_this->current.angle.y = cM_atan2s(a_this->current.pos.x - mTgHitPos.x, a_this->current.pos.z - mTgHitPos.z); - i_this->m2CB = 2; - i_this->m2CC = 20; + i_this->mAction = 2; + i_this->mMode = 20; return FALSE; } case AT_TYPE_UNK8: { - i_this->m2CC = 0x20; + i_this->mMode = 32; a_this->health = 0; - i_this->m2CC = 30; + i_this->mMode = 30; return FALSE; } case AT_TYPE_SWORD: { - if (i_this->m2CC != 43 || i_this->m2CE) { + if (i_this->mMode != 43 || i_this->m2CE) { dScnPly_ply_c::setPauseTimer(2); a_this->stealItemBitNo = 1; } @@ -306,7 +307,7 @@ BOOL body_atari_check(ks_class* i_this) { a_this->stealItemBitNo = 1; - i_this->m2CC = 0x20; + i_this->mMode = 32; return TRUE; } @@ -343,12 +344,13 @@ BOOL body_atari_check(ks_class* i_this) { default: { mParticleScale.setall(REG8_F(0) + 0.8f); dComIfGp_particle_set(dPa_name::ID_COMMON_NORMAL_HIT, &mTgHitPos, &mpCurPlayerActor->shape_angle, &mParticleScale); + break; } } a_this->health = 0; - i_this->m2CC = 30; + i_this->mMode = 30; return TRUE; } @@ -379,7 +381,7 @@ void speed_keisan(ks_class* i_this, short i_speed) { void action_dousa_move(ks_class* i_this) { daPy_lk_c* link = daPy_getPlayerLinkActorClass(); - switch (i_this->m2CC) { + switch (i_this->mMode) { case 0: i_this->m30C = 0.0f; @@ -389,7 +391,8 @@ void action_dousa_move(ks_class* i_this) { i_this->m2F0[i] = 0; } - i_this->m2CC++; + i_this->mMode++; + // Fall-through case 1: cLib_addCalcAngleS2(&i_this->shape_angle.z, 0, 1, 0x1000); @@ -414,7 +417,8 @@ void action_dousa_move(ks_class* i_this) { i_this->current.angle.y = i_this->m2FC + fopAcM_searchPlayerAngleY(i_this); - i_this->m2CC++; + i_this->mMode++; + // Fall-through case 2: if (i_this->mAcch.ChkGroundHit()) { i_this->current.angle.y = i_this->m2FC + fopAcM_searchPlayerAngleY(i_this); @@ -426,8 +430,8 @@ void action_dousa_move(ks_class* i_this) { !dComIfGp_checkPlayerStatus0(0, daPyStts0_SWIM_e) && tyaku_check(i_this)) { - i_this->m2CB = 1; - i_this->m2CC = 10; + i_this->mAction = 1; + i_this->mMode = 10; return; } @@ -468,9 +472,10 @@ void action_dousa_move(ks_class* i_this) { if (fopAcM_searchActorDistance(i_this, dComIfGp_getPlayer(0)) < 500.0f) { i_this->current.angle.y = fopAcM_searchPlayerAngleY(i_this); } + break; } - if (i_this->m2CC == 2 || i_this->m2CC == 3) { + if (i_this->mMode == 2 || i_this->mMode == 3) { cLib_addCalcAngleS2(&i_this->shape_angle.y, i_this->current.angle.y, 1, 0x1000); } @@ -489,8 +494,8 @@ void action_kougeki_move(ks_class* i_this) { i_this->m31C = 60.0f; } - switch (i_this->m2CC) { - case 0xa: { + switch (i_this->mMode) { + case 10: { i_this->mSph.OffCoSetBit(); i_this->speedF = 26.0f; @@ -509,11 +514,11 @@ void action_kougeki_move(ks_class* i_this) { fopAcM_monsSeStart(i_this, JA_SE_CV_KS_ATTACK, 0); - i_this->m2CC++; + i_this->mMode++; break; } - case 0xb: { + case 11: { if (i_this->speedF > 0.0f && i_this->m2F0[1] == 0 && i_this->mSph.ChkAtShieldHit()) { i_this->gravity = -4.0f; i_this->speed.y = 25.0f; @@ -534,9 +539,10 @@ void action_kougeki_move(ks_class* i_this) { i_this->m2E8[2] = (s16)(cM_rndF(20.0f) + 20.0f); - i_this->m2CC++; + i_this->mMode++; + // Fall-through } - case 0xc: + case 12: ks_kuttuki_check(i_this); if (tyaku_check(i_this)) { @@ -549,9 +555,10 @@ void action_kougeki_move(ks_class* i_this) { if (i_this->m2E8[2] == 0) { i_this->speedF = 0.0f; i_this->m31C = 20.0f; - i_this->m2CB = 0; - i_this->m2CC = 0; + i_this->mAction = 0; + i_this->mMode = 0; } + break; } cLib_addCalcAngleS2(&i_this->shape_angle.y, i_this->current.angle.y, 1, 0x1000); @@ -563,8 +570,8 @@ void action_kougeki_move(ks_class* i_this) { /* 00001630-00001874 .text action_kaze_move__FP8ks_class */ void action_kaze_move(ks_class* i_this) { - switch (i_this->m2CC) { - case 0x14: { + switch (i_this->mMode) { + case 20: { for (int i = 0; i < 5; i++) { i_this->m2F0[i] = 0; } @@ -582,20 +589,21 @@ void action_kaze_move(ks_class* i_this) { i_this->m308 = 0.0f; - i_this->m2CC++; + i_this->mMode++; + // Fall-through } - case 0x15: { + case 21: { cLib_addCalc2(&i_this->speed.y, i_this->m314, 0.8f, i_this->m308); cLib_addCalc2(&i_this->m308, 5.0f, 1.0f, 0.5f); if (i_this->m310 + 200.0f < i_this->current.pos.y || i_this->m2E8[1] == 0) { - i_this->m2CC++; + i_this->mMode++; } break; } - case 0x16: { + case 22: { cLib_addCalc2(&i_this->gravity, -1.0f, 0.3f, 0.5f); if (i_this->speed.y < -2.0f) { @@ -611,10 +619,11 @@ void action_kaze_move(ks_class* i_this) { i_this->m30C = 2.0f; if (tyaku_check(i_this)) { - i_this->m2CB = 0; - i_this->m2CC = 0; + i_this->mAction = 0; + i_this->mMode = 0; return; } + break; } } @@ -670,8 +679,8 @@ void dead_eff_set(ks_class* i_this, cXyz* i_pos) { void action_dead_move(ks_class* i_this) { cXyz local_28; - switch (i_this->m2CC) { - case 0x1e: { + switch (i_this->mMode) { + case 30: { for (int i = 0; i < 5; i++) { i_this->m2F0[i] = 0; } @@ -686,14 +695,15 @@ void action_dead_move(ks_class* i_this) { i_this->gravity = -3.0f; i_this->speed.y = cM_rndF(5.0f) + 20.0f; - i_this->m2CC++; + i_this->mMode++; i_this->m2F0[1] = (s16)cM_rndFX(4096.0f); i_this->mSph.OffAtSPrmBit(cCcD_AtSPrm_Set_e); i_this->mSph.OffAtSPrmBit(cCcD_AtSPrm_Set_e); + // Fall-through } - case 0x1f: { + case 31: { i_this->shape_angle.z += i_this->m2F0[1]; if (tyaku_check(i_this)) { @@ -713,14 +723,16 @@ void action_dead_move(ks_class* i_this) { local_28 = i_this->current.pos; local_28.y += 20.0f; dead_eff_set(i_this, &local_28); + break; } } break; } - case 0x20: { + case 32: { local_28 = i_this->current.pos; local_28.y += 45.0f; dead_eff_set(i_this, &local_28); + break; } } } @@ -761,8 +773,8 @@ void action_omoi(ks_class* i_this) { link->onHeavyState(); } - switch (i_this->m2CC) { - case 0x28: { + switch (i_this->mMode) { + case 40: { i_this->m52C.remove(); a_this->speedF = 0.0f; @@ -774,7 +786,7 @@ void action_omoi(ks_class* i_this) { fopAcM_OffStatus(a_this, fopAcStts_UNK4000_e); - i_this->m2CC = 0x2a; + i_this->mMode = 42; break; } @@ -818,7 +830,8 @@ void action_omoi(ks_class* i_this) { fopAcM_setStageLayer(a_this); - i_this->m2CC++; + i_this->mMode++; + // Fall-through } case 0x29: { fopAcM_SetRoomNo(a_this, fopAcM_GetRoomNo(mpCurPlayerActor)); @@ -887,6 +900,7 @@ void action_omoi(ks_class* i_this) { i_this->m2D2 = 0; i_this->m300++; } + break; } } @@ -924,7 +938,7 @@ void action_omoi(ks_class* i_this) { i_this->m2F0[1] = 0; } - i_this->m2CC = 0x2a; + i_this->mMode = 42; return; } @@ -966,6 +980,7 @@ void action_omoi(ks_class* i_this) { break; case 2: GORON_COUNT = KUTTUKU_ALL_COUNT; + break; } if (GORON_COUNT == 0) { @@ -992,7 +1007,7 @@ void action_omoi(ks_class* i_this) { GORON_COUNT = KUTTUKU_ALL_COUNT; - i_this->m2CC = 0x2a; + i_this->mMode = 42; return; } @@ -1006,12 +1021,12 @@ void action_omoi(ks_class* i_this) { link->offHeavyState(); } - i_this->m2CC = 0x2a; + i_this->mMode = 42; } break; } - case 0x2a: { + case 42: { if (i_this->m528) { fopAcM_OffStatus(a_this, fopAcStts_UNK4000_e); @@ -1027,22 +1042,24 @@ void action_omoi(ks_class* i_this) { i_this->gravity = -3.0f; i_this->speed.y = 26.0f; - i_this->m2CC++; + i_this->mMode++; + // Fall-through } - case 0x2b: { + case 43: { if (i_this->mAcch.ChkGroundHit() || i_this->mAcch.ChkWaterIn()) { i_this->m2E8[2] = (s16)(cM_rndF(40.0f) + 40.0f); i_this->mSph.OnCoSetBit(); i_this->mSph.OnTgSetBit(); - i_this->m2CB = 1; - i_this->m2CC = 0xc; + i_this->mAction = 1; + i_this->mMode = 12; } + break; } } - if (i_this->m2CC == 0x2b && body_atari_check(i_this) && i_this->m2CE) { + if (i_this->mMode == 43 && body_atari_check(i_this) && i_this->m2CE) { fopAcM_seStart(a_this, JA_SE_LK_LAST_HIT, 0); i_this->m2CE = 0; } @@ -1065,8 +1082,8 @@ BOOL tsubo_search(void* param_1, void* param_2) { /* 000027A0-00002A40 .text action_tubo_search__FP8ks_class */ void action_tubo_search(ks_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; - switch (i_this->m2CC) { - case 0x32: { + switch (i_this->mMode) { + case 50: { i_this->mKsID = fpcM_ERROR_PROCESS_ID_e; fpcEx_Search((fpcLyIt_JudgeFunc)tsubo_search, a_this); @@ -1075,12 +1092,12 @@ void action_tubo_search(ks_class* i_this) { fopAcM_delete(a_this); } else { - i_this->m2CC++; + i_this->mMode++; } break; } - case 0x33: { + case 51: { fopAc_ac_c* mpCurrActor = (fopAc_ac_c*)fopAcM_SearchByID(i_this->mKsID); if (mpCurrActor) { @@ -1113,11 +1130,11 @@ void action_tubo_search(ks_class* i_this) { dComIfG_Ccsp()->Set(&i_this->mSph); - i_this->m2CC++; + i_this->mMode++; break; } - case 0x34: { + case 52: { i_this->mSph.SetC(a_this->current.pos); i_this->mSph.SetR(i_this->m31C); @@ -1143,14 +1160,15 @@ void action_tubo_search(ks_class* i_this) { } fopAcM_delete(a_this); + break; } } } /* 00002A40-00002BC4 .text action_kb_birth_check__FP8ks_class */ void action_kb_birth_check(ks_class* i_this) { - switch (i_this->m2CC) { - case 0x3c: { + switch (i_this->mMode) { + case 60: { i_this->current.pos.y += REG8_F(13) + 30.0f; i_this->current.angle.y = cM_rndFX(32767.0f); @@ -1158,9 +1176,10 @@ void action_kb_birth_check(ks_class* i_this) { i_this->speed.y = REG8_F(10) + 20.0f + cM_rndF(REG8_F(11) + 5.0f); i_this->gravity = -(REG8_F(12) + 2.0f); - i_this->m2CC++; + i_this->mMode++; + // Fall-through } - case 0x3d: { + case 61: { if (i_this->speed.y <= 0.0f && (i_this->mAcch.ChkGroundHit() || i_this->mAcch.GetGroundH() + (REG8_F(19) + 10.0f) > i_this->current.pos.y )) { fopAcM_OffStatus(i_this, fopAcStts_UNK4000_e); @@ -1168,9 +1187,10 @@ void action_kb_birth_check(ks_class* i_this) { i_this->gravity = 0.0f; i_this->speed.setall(0.0f); - i_this->m2CB = 0; - i_this->m2CC = 0; + i_this->mAction = 0; + i_this->mMode = 0; } + break; } } } @@ -1205,7 +1225,7 @@ static BOOL daKS_Execute(ks_class* i_this) { } } - if (i_this->mGmID != 0 && i_this->m2CB != 3) { + if (i_this->mGmID != 0 && i_this->mAction != 3) { fopAc_ac_c* mpGmActor = fopAcM_SearchByID(i_this->mGmID); bool bVar5 = false; @@ -1221,12 +1241,12 @@ static BOOL daKS_Execute(ks_class* i_this) { } if (bVar5) { - if (i_this->m2CB != 4) { - i_this->m2CB = 3; - i_this->m2CC = 30; + if (i_this->mAction != 4) { + i_this->mAction = 3; + i_this->mMode = 30; } else { - if (i_this->m2CC != 43) { + if (i_this->mMode != 43) { daPy_py_c* link = (daPy_py_c*)daPy_getPlayerLinkActorClass(); link->offHeavyState(); @@ -1236,14 +1256,14 @@ static BOOL daKS_Execute(ks_class* i_this) { i_this->m2F0[0] = 0; i_this->m2F0[1] = 0; - i_this->m2CC = 0x2a; + i_this->mMode = 42; } } } } } - switch(i_this->m2CB) { + switch(i_this->mAction) { case 0: action_dousa_move(i_this); ks_kuttuki_check(i_this); @@ -1295,7 +1315,7 @@ static BOOL daKS_Execute(ks_class* i_this) { i_this->speed.x = local_c.x; i_this->speed.z = local_c.z; - if (i_this->m2CC != 41 && !i_this->mAcch.ChkGroundHit() && !i_this->mAcch.ChkWaterIn()) { + if (i_this->mMode != 41 && !i_this->mAcch.ChkGroundHit() && !i_this->mAcch.ChkWaterIn()) { i_this->speed.y += i_this->gravity; if (i_this->speed.y < -20.0f) { @@ -1312,14 +1332,14 @@ static BOOL daKS_Execute(ks_class* i_this) { dComIfG_Ccsp()->Set(&i_this->mSph); - if (i_this->mSph.ChkCoSet() && (i_this->m2CB == 0 || i_this->m2CB == 2)) { + if (i_this->mSph.ChkCoSet() && (i_this->mAction == 0 || i_this->mAction == 2)) { fopAcM_posMove(i_this, i_this->mStts.GetCCMoveP()); } else { fopAcM_posMove(i_this, NULL); } - if (i_this->m2CC != 41) { + if (i_this->mMode != 41) { BG_check(i_this); naraku_check(i_this); } @@ -1588,8 +1608,8 @@ static cPhs_State daKS_Create(fopAc_ac_c* i_this) { a_this->mSph.OffCoSetBit(); a_this->mSph.ClrTgHit(); - a_this->m2CB = 10; - a_this->m2CC = 0x32; + a_this->mAction = 10; + a_this->mMode = 50; return res; } @@ -1597,15 +1617,15 @@ static cPhs_State daKS_Create(fopAc_ac_c* i_this) { if (a_this->m2C8 == 7) { fopAcM_OnStatus(i_this, fopAcStts_UNK4000_e); - a_this->m2CB = 0x14; - a_this->m2CC = 0x3c; + a_this->mAction = 20; + a_this->mMode = 60; return res; } if (a_this->m2C8 == 2) { - a_this->m2CB = 0; - a_this->m2CC = 3; + a_this->mAction = 0; + a_this->mMode = 3; fopAcM_SetGravity(i_this, -3.0f); diff --git a/src/d/actor/d_a_kt.cpp b/src/d/actor/d_a_kt.cpp index 350145177..d0c1608f8 100644 --- a/src/d/actor/d_a_kt.cpp +++ b/src/d/actor/d_a_kt.cpp @@ -74,20 +74,20 @@ void kotori_move(kt_class* i_this) { s16* r17; s16* r16; - switch (i_this->mState) { + switch (i_this->mMode) { case 0: i_this->mSpeedFwd = kt_scale * 20.0f + 30.0f; if (CPad_CHECK_TRIG_LEFT(0) && fopAcM_GetParam(i_this) == 1000) { i_this->mTargetPos.x = player->current.pos.x; i_this->mTargetPos.y = player->current.pos.y + 500.0f; i_this->mTargetPos.z = player->current.pos.z; - i_this->mState = 2; + i_this->mMode = 2; i_this->mSpeedLerp = 0.0f; break; } if (i_this->mTimer[2] == 0) { - i_this->mState = 1; + i_this->mMode = 1; offs.x = 0.0f; offs.y = 0.0f; offs.z = REG0_F(13) * 100.0f + 3000.0f; @@ -117,7 +117,7 @@ void kotori_move(kt_class* i_this) { case 1: dist = std::sqrtf(vx*vx + vy*vy + vz*vz); if (dist < REG0_F(1) * 10.0f + 800.0f) { - i_this->mState = 8; + i_this->mMode = 8; } cLib_addCalc2(&i_this->mSpeedLerp, 3.0f, 1.0f, 0.1f); calc_012: @@ -153,7 +153,7 @@ calc_012: cLib_addCalc2(&*r26, i_this->mGroundY, REG0_F(6) + 0.3f, REG0_F(7) + 20.0f); if (std::fabsf(*r26 - i_this->mGroundY) < 1.0f) { *r26 = i_this->mGroundY; - i_this->mState = 10; + i_this->mMode = 10; } dispWing = true; ret = 1; @@ -163,7 +163,7 @@ calc_012: i_this->mTargetPos.y += 200.0f; dist = std::sqrtf(vx*vx + vy*vy + vz*vz); if (dist < REG0_F(1) * 10.0f + 800.0f) { - i_this->mState = 9; + i_this->mMode = 9; } cLib_addCalc2(&i_this->mSpeedLerp, 3.0f, 1.0f, 0.1f); goto calc_012; @@ -184,7 +184,7 @@ calc_012: *r27 += pt.z; cLib_addCalc2(&*r26, i_this->mTargetPos.y, REG0_F(6) + 0.5f, REG0_F(7) + 20.0f); if (std::fabsf(*r26 - i_this->mTargetPos.y) < 1.0f) { - i_this->mState = 20; + i_this->mMode = 20; i_this->mSpeedLerp = 0.0f; } dispWing = true; @@ -200,7 +200,7 @@ calc_012: if (std::fabsf(*r26 - i_this->mTargetPos.y) > 1.0f) dispWing = true; if (CPad_CHECK_TRIG_LEFT(0)) { - i_this->mState = 0; + i_this->mMode = 0; i_this->mTimer[0] = 0; i_this->mLiftYTimer = cM_rndFX(10.0f) + 10.0f; i_this->mTargetPosHome.y += 2000.0f; @@ -219,7 +219,7 @@ calc_012: cLib_addCalcAngleS2(&i_this->current.angle.y, angleX, 10, (s16)(REG0_F(10) * 10.0f + 500.0f)); if (i_this->mTimer[1] == 0 && i_this->mLiftY <= 0.0f) { i_this->mTimer[1] = 20.0f + cM_rndF(20.0f); - i_this->mState = 11; + i_this->mMode = 11; } offs.x = 0.0f; offs.y = 0.0f; @@ -240,14 +240,14 @@ calc_012: } if (i_this->mTimer[1] == 0) { i_this->mTimer[1] = 20.0f + cM_rndF(50.0f); - i_this->mState = 10; + i_this->mMode = 10; i_this->mTargetPos.x = i_this->mTargetPosHome.x + cM_rndFX(1000.0f); i_this->mTargetPos.z = i_this->mTargetPosHome.z + cM_rndFX(1000.0f); } calc_11: *r26 -= 5.0f; if (!i_this->mHitGround || dist_xz < (REG0_F(15) * 100.0f + 1500.0f)) { - i_this->mState = 0; + i_this->mMode = 0; i_this->mTimer[0] = 0; i_this->mLiftYTimer = 10.0f + cM_rndFX(10.0f); i_this->mTargetPosHome.y += 2000.0f; @@ -258,7 +258,7 @@ calc_11: } i_this->mHitGround = false; - if (i_this->mState >= 8) { + if (i_this->mMode >= 8) { Vec pos; pos.x = *r28; pos.y = *r26; diff --git a/src/d/actor/d_a_kytag00.cpp b/src/d/actor/d_a_kytag00.cpp index 2cdec50ff..8703a4363 100644 --- a/src/d/actor/d_a_kytag00.cpp +++ b/src/d/actor/d_a_kytag00.cpp @@ -151,9 +151,8 @@ void raincnt_set(f32 count) { s32 newCount = 0; if (dKy_checkEventNightStop()) { - s32 newCount2; - if (g_env_light.mRainCount < (newCount2 = (count * count * count) * 250.0f)) - newCount = newCount2; + if (g_env_light.mRainCount < (s32)((count * count * count) * 250.0f)) + newCount = (count * count * count) * 250.0f; } else { newCount = (count * count * count) * 250.0f; } diff --git a/src/d/actor/d_a_npc_bs1.cpp b/src/d/actor/d_a_npc_bs1.cpp index 80c5ba201..133910b97 100644 --- a/src/d/actor/d_a_npc_bs1.cpp +++ b/src/d/actor/d_a_npc_bs1.cpp @@ -980,206 +980,204 @@ u32 daNpc_Bs1_c::getMsg() { msgNo = m740; m740 = 0; } - else { - if(dComIfGp_event_chkTalkXY()) { - u8 itemNo = dComIfGp_event_getPreItemNo(); + else if(dComIfGp_event_chkTalkXY()) { + u8 itemNo = dComIfGp_event_getPreItemNo(); - if(mType == 0) { - if(isEmono(itemNo)) { - m840 = itemNo; - switch(itemNo) { - case dItem_BOKOBABA_SEED_e: - msgNo = 0xF78; + if(mType == 0) { + if(isEmono(itemNo)) { + m840 = itemNo; + switch(itemNo) { + case dItem_BOKOBABA_SEED_e: + msgNo = 0xF78; + break; + case dItem_SKULL_NECKLACE_e: + msgNo = 0xF80; + break; + case dItem_RED_JELLY_e: + msgNo = 0xF85; + break; + case dItem_GREEN_JELLY_e: + msgNo = 0xF8A; + break; + case dItem_BLUE_JELLY_e: + msgNo = 0xF8F; + break; + case dItem_JOY_PENDANT_e: + msgNo = 0xF94; + break; + case dItem_GOLDEN_FEATHER_e: + msgNo = 0xF99; + break; + default: + if(dComIfGs_getEventReg(0x7F0F) < 10) { + msgNo = 0xF9E; break; - case dItem_SKULL_NECKLACE_e: - msgNo = 0xF80; - break; - case dItem_RED_JELLY_e: - msgNo = 0xF85; - break; - case dItem_GREEN_JELLY_e: - msgNo = 0xF8A; - break; - case dItem_BLUE_JELLY_e: - msgNo = 0xF8F; - break; - case dItem_JOY_PENDANT_e: - msgNo = 0xF94; - break; - case dItem_GOLDEN_FEATHER_e: - msgNo = 0xF99; - break; - default: - if(dComIfGs_getEventReg(0x7F0F) < 10) { - msgNo = 0xF9E; - break; - } + } - msgNo = 0xFD4; - break; - } - } - else if(itemNo == KAISEN_PRESENT1) { - msgNo = 0xF6F; - } - else if(itemNo == KAISEN_PRESENT2) { - msgNo = 0xF73; - } - else { - msgNo = 0xF75; + msgNo = 0xFD4; + break; } } - else if(itemNo == KAISEN_PRESENT1 || itemNo == KAISEN_PRESENT2) { - msgNo = 0x2F56; + else if(itemNo == KAISEN_PRESENT1) { + msgNo = 0xF6F; } - else if(isEmono(itemNo)) { - msgNo = 0x2F79; + else if(itemNo == KAISEN_PRESENT2) { + msgNo = 0xF73; } else { - msgNo = 0x2F57; + msgNo = 0xF75; } } - else if(mType == 0) { - u8 points = dComIfGs_getEventReg(0x86FF); - if(mShopItems.isSoldOutItemAll()) { - msgNo = 0xF3D; - } - else if(dComIfGs_checkGetItem(dItem_BOMB_BAG_e) && !dComIfGs_isEventBit(0x1F20) && isSellBomb()) { - dComIfGs_onEventBit(0x1F20); - m837 = 1; - msgNo = 0xF55; - } - else if(m837) { - msgNo = 0xF58; - } - else if(points >= 60) { - if(m836) { - msgNo = 0xF5D; - } - else { - msgNo = 0xF5C; - m836 = 1; - } - } - else if(points != 0) { - if(m836) { - msgNo = 0xF5B; - } - else { - msgNo = 0xF5A; - m836 = 1; - } - } - else if(m836) { - msgNo = 0xF41; - } - else { - m836 = 1; - msgNo = 0xF3D; - } + else if(itemNo == KAISEN_PRESENT1 || itemNo == KAISEN_PRESENT2) { + msgNo = 0x2F56; } - else if(mShopItems.isSoldOutItemAll()) { - msgNo = 0x2F62; + else if(isEmono(itemNo)) { + msgNo = 0x2F79; + } + else { + msgNo = 0x2F57; + } + } + else if(mType == 0) { + u8 points = dComIfGs_getEventReg(0x86FF); + if(mShopItems.isSoldOutItemAll()) { + msgNo = 0xF3D; } else if(dComIfGs_checkGetItem(dItem_BOMB_BAG_e) && !dComIfGs_isEventBit(0x1F20) && isSellBomb()) { dComIfGs_onEventBit(0x1F20); m837 = 1; - msgNo = 0x2F64; + msgNo = 0xF55; } else if(m837) { - msgNo = 0x2F67; + msgNo = 0xF58; } - else if(dComIfGs_isEventBit(0x1F08)) { - if(dComIfGs_isEventBit(0x2040)) { - if(m838 == 1) { - msgNo = 0x2F60; - } - else { - msgNo = 0x2F61; - } + else if(points >= 60) { + if(m836) { + msgNo = 0xF5D; } else { - dComIfGs_onEventBit(0x2040); - msgNo = 0x2F5F; - m838 = 1; + msgNo = 0xF5C; + m836 = 1; + } + } + else if(points != 0) { + if(m836) { + msgNo = 0xF5B; + } + else { + msgNo = 0xF5A; + m836 = 1; + } + } + else if(m836) { + msgNo = 0xF41; + } + else { + m836 = 1; + msgNo = 0xF3D; + } + } + else if(mShopItems.isSoldOutItemAll()) { + msgNo = 0x2F62; + } + else if(dComIfGs_checkGetItem(dItem_BOMB_BAG_e) && !dComIfGs_isEventBit(0x1F20) && isSellBomb()) { + dComIfGs_onEventBit(0x1F20); + m837 = 1; + msgNo = 0x2F64; + } + else if(m837) { + msgNo = 0x2F67; + } + else if(dComIfGs_isEventBit(0x1F08)) { + if(dComIfGs_isEventBit(0x2040)) { + if(m838 == 1) { + msgNo = 0x2F60; + } + else { + msgNo = 0x2F61; } } else { - switch(dComIfGs_getEventReg(0xBB07)) { - case 0: - if(m836 || dComIfGs_isEventBit(0x1F10)) { - msgNo = 0x2F46; - break; - } - - dComIfGs_onEventBit(0x1F10); - msgNo = 0x2F45; - break; - case 1: - if(m836) { - msgNo = 0x2F46; - break; - } - - msgNo = 0x2F58; - break; - case 2: - if(m836) { - msgNo = 0x2F46; - break; - } - - msgNo = 0x2F59; - break; - case 3: - if(m836) { - msgNo = 0x2F46; - break; - } - - msgNo = 0x2F5A; - break; - case 4: - if(m836) { - msgNo = 0x2F46; - break; - } - - msgNo = 0x2F5B; - break; - case 5: - if(m836) { - msgNo = 0x2F46; - break; - } - - msgNo = 0x2F5C; - break; - case 6: - if(m836) { - msgNo = 0x2F69; - break; - } - - msgNo = 0x2F5D; - break; - case 7: - if(m836) { - msgNo = 0x2F6A; - break; - } - - msgNo = 0x2F5E; - break; - } - - if(dComIfGs_isEventBit(0x1F10)) { - dComIfGs_onEventBit(0x1F10); - } - - m836 = 1; + dComIfGs_onEventBit(0x2040); + msgNo = 0x2F5F; + m838 = 1; } } + else { + switch(dComIfGs_getEventReg(0xBB07)) { + case 0: + if(m836 || dComIfGs_isEventBit(0x1F10)) { + msgNo = 0x2F46; + break; + } + + dComIfGs_onEventBit(0x1F10); + msgNo = 0x2F45; + break; + case 1: + if(m836) { + msgNo = 0x2F46; + break; + } + + msgNo = 0x2F58; + break; + case 2: + if(m836) { + msgNo = 0x2F46; + break; + } + + msgNo = 0x2F59; + break; + case 3: + if(m836) { + msgNo = 0x2F46; + break; + } + + msgNo = 0x2F5A; + break; + case 4: + if(m836) { + msgNo = 0x2F46; + break; + } + + msgNo = 0x2F5B; + break; + case 5: + if(m836) { + msgNo = 0x2F46; + break; + } + + msgNo = 0x2F5C; + break; + case 6: + if(m836) { + msgNo = 0x2F69; + break; + } + + msgNo = 0x2F5D; + break; + case 7: + if(m836) { + msgNo = 0x2F6A; + break; + } + + msgNo = 0x2F5E; + break; + } + + if(dComIfGs_isEventBit(0x1F10)) { + dComIfGs_onEventBit(0x1F10); + } + + m836 = 1; + } return msgNo; } diff --git a/src/d/actor/d_a_npc_ji1.cpp b/src/d/actor/d_a_npc_ji1.cpp index 831fcc493..7ebed8b0a 100644 --- a/src/d/actor/d_a_npc_ji1.cpp +++ b/src/d/actor/d_a_npc_ji1.cpp @@ -2853,151 +2853,151 @@ BOOL daNpc_Ji1_c::setAnm(int param_1, f32 param_2, int param_3) { fopAcM_seStart(this, JA_SE_CM_JI_DEFENSE, 0); } - J3DAnmTransform* temp1; - s32 temp2; + J3DAnmTransform* bckAnm; + s32 loopMode; void* pSoundAnimRes; switch(param_1) { case 0: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_WAIT01)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_WAIT01)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_WAIT01); break; case 1: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_WAIT02)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_WAIT02)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_WAIT02); break; case 2: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TALK01)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TALK01)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TALK01); break; case 3: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TALK02)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TALK02)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TALK02); break; case 4: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_AKIRE)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_AKIRE)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_AKIRE); break; case 5: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_KAMAE)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_KAMAE)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_KAMAE); break; case 6: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_KROT)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_KROT)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_KROT); speed = l_HIO.field_0x48; break; case 7: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_INASI)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_INASI)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_INASI); speed = l_HIO.field_0x44; break; case 8: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TATEGUARD)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TATEGUARD)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TATEGUARD); break; case 9: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_YKGUARD)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_YKGUARD)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_YKGUARD); break; case 10: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_JPGUARD)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_JPGUARD)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_JPGUARD); break; case 11: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TOKAMAE)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TOKAMAE)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TOKAMAE); break; case 12: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_REI)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_REI)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_REI); break; case 13: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_WARAI)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_WARAI)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_WARAI); speed = l_HIO.field_0x4C; break; case 14: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_JPGUARD)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_JPGUARD)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_JPGUARD); speed = 2.0f; break; case 15: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_GUARD)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_GUARD)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_GUARD); speed = 2.0f; break; case 16: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_BTKAMASI)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_BTKAMASI)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_BTKAMASI); break; case 17: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_BTKAMAE)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_BTKAMAE)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_BTKAMAE); break; case 18: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_UDEGUMI)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_UDEGUMI)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_UDEGUMI); break; case 19: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TATEATTACK)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_TATEATTACK)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_TATEATTACK); break; case 20: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_YOKOATTACK)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_YOKOATTACK)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_YOKOATTACK); break; case 21: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_ODOROKU)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_ODOROKU)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_ODOROKU); break; case 22: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_BIBIRI)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_BIBIRI)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_BIBIRI); BackSlideInit(); @@ -3007,8 +3007,8 @@ BOOL daNpc_Ji1_c::setAnm(int param_1, f32 param_2, int param_3) { break; case 23: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_NAKU)); - temp2 = 2; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_NAKU)); + loopMode = J3DFrameCtrl::EMode_LOOP; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_NAKU); if(field_0x430 == 0) { @@ -3018,14 +3018,14 @@ BOOL daNpc_Ji1_c::setAnm(int param_1, f32 param_2, int param_3) { break; case 24: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_NUGUI)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_NUGUI)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_NUGUI); break; case 25: - temp1 = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_DAMAGE)); - temp2 = 0; + bckAnm = static_cast(dComIfG_getObjectRes("Ji", JI_BCK_JI_DAMAGE)); + loopMode = J3DFrameCtrl::EMode_NONE; pSoundAnimRes = dComIfG_getObjectRes("Ji", JI_BAS_JI_DAMAGE); break; @@ -3033,7 +3033,7 @@ BOOL daNpc_Ji1_c::setAnm(int param_1, f32 param_2, int param_3) { return 0; } - field_0x330->setAnm(temp1, temp2, param_2, speed, 0.0f, -1.0f, pSoundAnimRes); + field_0x330->setAnm(bckAnm, loopMode, param_2, speed, 0.0f, -1.0f, pSoundAnimRes); if(field_0xD64 == 0x13) { mpMorf->setAnm((J3DAnmTransform*)dComIfG_getObjectRes("Ji", JI_BCK_JIYARI_TATEATTACK), J3DFrameCtrl::EMode_LOOP, 0.0f, 1.0f, 0.0f, -1.0f, NULL); } diff --git a/src/d/actor/d_a_pw.cpp b/src/d/actor/d_a_pw.cpp index b941743ec..6056148a8 100644 --- a/src/d/actor/d_a_pw.cpp +++ b/src/d/actor/d_a_pw.cpp @@ -174,11 +174,11 @@ void action_dousa(pw_class* i_this) { daPy_py_c* player = daPy_getPlayerActorClass(); camera_class* camera = dComIfGp_getCamera(0); cXyz camfwd; - switch (i_this->mState) { + switch (i_this->mMode) { case 0: anm_init(i_this, PW_BCK_WAIT1, 7.0, J3DFrameCtrl::EMode_LOOP, 1.0, -1); i_this->m346 = 0; - i_this->mState += 1; + i_this->mMode += 1; break; case 1: if (fopAcM_searchPlayerDistance(i_this) < 500.0f) { @@ -188,7 +188,7 @@ void action_dousa(pw_class* i_this) { i_this->shape_angle.y = i_this->m38C; i_this->m3A4 = -80.0f; i_this->m340 = 1; - i_this->mState += 1; + i_this->mMode += 1; } break; case 2: @@ -207,13 +207,13 @@ void action_dousa(pw_class* i_this) { particle->setGlobalRTMatrix(i_this->mpMorf->getModel()->getAnmMtx(0x17)); // j_pw_item_r1 joint } i_this->attention_info.flags = 0; - i_this->mState = 0x0A; + i_this->mMode = 0x0A; } break; case 9: i_this->m39A = 0; i_this->m39C = 0; - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 10: if (i_this->mBehaviorType == InvisibleAtStart) { @@ -224,15 +224,15 @@ void action_dousa(pw_class* i_this) { i_this->m382 = 5; switch (i_this->mBehaviorType) { case InvisibleAtStart: - i_this->mState = 0xB; + i_this->mMode = 0xB; break; case OnlyLanternVisibleAtStart: i_this->m341 = 2; - i_this->mState = 8; + i_this->mMode = 8; break; default: i_this->m346 = 1; - i_this->mState = 0xD; + i_this->mMode = 0xD; break; } } @@ -256,7 +256,7 @@ void action_dousa(pw_class* i_this) { first_mode_change(i_this); i_this->m382 = 3; i_this->m346 = 1; - i_this->mState = 0xD; + i_this->mMode = 0xD; } } break; @@ -269,7 +269,7 @@ void action_dousa(pw_class* i_this) { i_this->mBehaviorType = VisibleFromStart; i_this->m346 = 1; first_mode_change(i_this); - i_this->mState = 0xD; + i_this->mMode = 0xD; } break; case 7: @@ -278,7 +278,7 @@ void action_dousa(pw_class* i_this) { i_this->current.angle.y = i_this->m38C; i_this->shape_angle.y = i_this->m38C; anm_init(i_this, PW_BCK_DERUB2, 3.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->mState = 6; + i_this->mMode = 6; } break; case 8: @@ -286,7 +286,7 @@ void action_dousa(pw_class* i_this) { i_this->m346 = 1; if (fopAcM_searchPlayerDistance(i_this) < i_this->m3AC) { anm_init(i_this, PW_BCK_DERUB1, 3.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); - i_this->mState = 7; + i_this->mMode = 7; } break; case 13: @@ -301,14 +301,14 @@ void action_dousa(pw_class* i_this) { } else if (i_this->mBckIdx != PW_BCK_WAIT2) { anm_init(i_this, PW_BCK_WAIT2, 7.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); } - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 14: cLib_addCalc0(&i_this->speedF, 1.0f, 1.0f); if (i_this->m378) { break; } - i_this->mState += 1; + i_this->mMode += 1; // Fall-through case 15: i_this->m378 = cM_rndF(120.0f) + 120.0f; @@ -323,9 +323,9 @@ void action_dousa(pw_class* i_this) { } i_this->m38C += (s16)cM_rndFX(16384.0f); if (i_this->mPathIndex != 0xFF && i_this->mpPath != NULL) { - i_this->mState = 0x14; + i_this->mMode = 0x14; } else { - i_this->mState = 0x10; + i_this->mMode = 0x10; } break; case 16: @@ -335,7 +335,7 @@ void action_dousa(pw_class* i_this) { if (Line_check(i_this, i_this->current.pos, 0) || hani_check(i_this)) { i_this->m37A = 10; } else if (i_this->m378 == 0) { - i_this->mState = 0xF; + i_this->mMode = 0xF; } } break; @@ -361,14 +361,14 @@ void action_dousa(pw_class* i_this) { i_this->m38C = fopAcM_searchPlayerAngleY(i_this); anm_init(i_this, PW_BCK_DAMAGE_K1, 9.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); i_this->speedF = -2.0f; - i_this->mState += 1; + i_this->mMode += 1; break; case 26: break; case 27: case 28: if (!fopAcM_CheckStatus(i_this, fopAcStts_HOOK_CARRY_e)) { - i_this->mState = 0x5A; + i_this->mMode = 0x5A; } break; case 101: @@ -385,12 +385,12 @@ void action_dousa(pw_class* i_this) { break; case 100: anm_init(i_this, PW_BCK_JITTAIKA1, 6.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->mState += 1; + i_this->mMode += 1; break; case 110: anm_init(i_this, PW_BCK_ATTACK1, 7.0f, J3DFrameCtrl::EMode_LOOP, 1.0f, -1); // TODO - i_this->mState += 1; + i_this->mMode += 1; break; case 111: if (i_this->m5C4.getEmitter() != NULL) { @@ -404,30 +404,30 @@ void action_dousa(pw_class* i_this) { i_this->speed.setall(0.0f); i_this->gravity = 0.0f; anm_init(i_this, PW_BCK_SIRIMOTI1, 0.0f, J3DFrameCtrl::EMode_NONE, 1.0f, -1); - i_this->mState += 1; + i_this->mMode += 1; case 112: // Fall-through if (i_this->mpMorf->isStop()) { - i_this->mState = 90; + i_this->mMode = 90; } break; } - if (i_this->mState <= 11) { + if (i_this->mMode <= 11) { return; } - if (i_this->m37C == 0 && i_this->mState < 90) { - if (i_this->mState == 14 || i_this->mState == 16 || i_this->mState == 20) { + if (i_this->m37C == 0 && i_this->mMode < 90) { + if (i_this->mMode == 14 || i_this->mMode == 16 || i_this->mMode == 20) { if (!hani_check(i_this) && fopAcM_searchPlayerDistance(i_this) < 500.0f && std::fabsf(i_this->current.pos.y - player->current.pos.y) < 100.0f) { if (!Line_check(i_this, i_this->current.pos, 1) && (i_this->m346 == 1 || !TORITUKI_ON)) { i_this->mAction = 1; - i_this->mState = 30; + i_this->mMode = 30; } } } } - if (i_this->mState >= 10 && i_this->mState < 90) { + if (i_this->mMode >= 10 && i_this->mMode < 90) { alpha_anime(i_this); } diff --git a/src/d/actor/d_a_rd.cpp b/src/d/actor/d_a_rd.cpp index dc593358e..adb0886d1 100644 --- a/src/d/actor/d_a_rd.cpp +++ b/src/d/actor/d_a_rd.cpp @@ -601,7 +601,7 @@ bool daRd_c::checkTgHit() { case AT_TYPE_FIRE: case AT_TYPE_UNK20000: r29 = false; - if (mEnemyFire.mState == 0) { + if (mEnemyFire.mMode == 0) { mEnemyFire.mFireDuration = l_HIO.m4C; } else { mHitType = 0xD; @@ -887,7 +887,7 @@ void daRd_c::modeMove() { temp = 0.1f; } f32 temp2 = l_HIO.m68; - if (mEnemyFire.mState != 0) { + if (mEnemyFire.mMode != 0) { temp2 *= 2.0f; } cLib_addCalc2(&speedF, temp2*temp, 0.1f, 0.1f + REG12_F(0)); @@ -943,7 +943,7 @@ void daRd_c::modeCry() { temp = 0.1f; } f32 temp2 = l_HIO.m68; - if (mEnemyFire.mState != 0) { + if (mEnemyFire.mMode != 0) { temp2 *= 2.0f; } cLib_addCalc2(&speedF, temp2*temp, 0.1f, 0.1f + REG12_F(0)); @@ -1592,7 +1592,7 @@ bool daRd_c::_execute() { } current.angle = shape_angle; - if (mEnemyFire.mState == 0) { // Not on fire (TODO enum) + if (mEnemyFire.mMode == 0) { // Not on fire (TODO enum) mCyl.SetAtType(0); m6D4 = l_HIO.m4E; } else { From e063db96973a6dfa52d24b0d715018f1f33067ae Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 14:16:26 -0400 Subject: [PATCH 19/31] Fix error handler typedefs --- include/JSystem/JUtility/JUTException.h | 10 +++++---- include/dolphin/os/OSError.h | 4 +--- src/JSystem/JUtility/JUTException.cpp | 28 ++++++++++++------------- src/dolphin/os/OSError.c | 8 +++---- src/dolphin/os/OSMemory.c | 2 +- src/dolphin/os/OSThread.c | 2 +- src/m_Do/m_Do_machine.cpp | 2 +- 7 files changed, 28 insertions(+), 28 deletions(-) diff --git a/include/JSystem/JUtility/JUTException.h b/include/JSystem/JUtility/JUTException.h index 20bdb1408..189603ac9 100644 --- a/include/JSystem/JUtility/JUTException.h +++ b/include/JSystem/JUtility/JUTException.h @@ -34,6 +34,8 @@ STATIC_ASSERT(sizeof(JUTExternalFB) == 0x14); #define JUT_PRINT_FLOAT 8 #define JUT_PRINT_STACK 16 +typedef void (*JUTExceptionUserCallback)(OSError, OSContext*, u32, u32); + class JUTException : public JKRThread { public: enum EInfoPage { @@ -79,8 +81,8 @@ public: static void panic_f(char const*, int, char const*, ...); static void setFPException(u32); static bool searchPartialModule(u32, u32*, u32*, u32*, u32*); - static OSErrorHandler setPreUserCallback(OSErrorHandler); - static OSErrorHandler setPostUserCallback(OSErrorHandler); + static JUTExceptionUserCallback setPreUserCallback(JUTExceptionUserCallback); + static JUTExceptionUserCallback setPostUserCallback(JUTExceptionUserCallback); static void appendMapFile(char const*); static bool queryMapAddress(char*, u32, s32, u32*, u32*, char*, u32, bool, bool); static bool queryMapAddress_single(char*, u32, s32, u32*, u32*, char*, u32, bool, @@ -109,8 +111,8 @@ private: static JSUList sMapFileList; static OSMessage sMessageBuffer[1]; static JUTException* sErrorManager; - static OSErrorHandler sPreUserCallback; - static OSErrorHandler sPostUserCallback; + static JUTExceptionUserCallback sPreUserCallback; + static JUTExceptionUserCallback sPostUserCallback; static void* sConsoleBuffer; static u32 sConsoleBufferSize; static JUTConsole* sConsole; diff --git a/include/dolphin/os/OSError.h b/include/dolphin/os/OSError.h index c7b8239b3..6f78c79bf 100644 --- a/include/dolphin/os/OSError.h +++ b/include/dolphin/os/OSError.h @@ -53,9 +53,7 @@ typedef enum { typedef u8 __OSException; -typedef void (*OSErrorHandler)(OSError error, OSContext* context, u32, u32); -// Using this type for the C++ handlers makes stuff not match -typedef void (*OSErrorHandlerEx)(OSError error, OSContext* context, u32, u32, ...); +typedef void (*OSErrorHandler)(OSError error, OSContext* context, ...); OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler); void __OSUnhandledException(__OSException exception, OSContext* context, u32 dsisr, u32 dar); diff --git a/src/JSystem/JUtility/JUTException.cpp b/src/JSystem/JUtility/JUTException.cpp index 968de1dc2..eafcf4c20 100644 --- a/src/JSystem/JUtility/JUTException.cpp +++ b/src/JSystem/JUtility/JUTException.cpp @@ -17,7 +17,7 @@ #include "dolphin/vi/vi.h" struct CallbackObject { - /* 0x00 */ OSErrorHandler callback; + /* 0x00 */ JUTExceptionUserCallback callback; /* 0x04 */ u16 error; /* 0x06 */ u16 pad_0x06; /* 0x08 */ OSContext* context; @@ -49,17 +49,17 @@ const char* JUTException::sCpuExpName[] = { "FLOATING POINT", }; JUTException* JUTException::sErrorManager; -OSErrorHandler JUTException::sPreUserCallback; -OSErrorHandler JUTException::sPostUserCallback; +JUTExceptionUserCallback JUTException::sPreUserCallback; +JUTExceptionUserCallback JUTException::sPostUserCallback; /* 802C4AC8-802C4BAC .text __ct__12JUTExceptionFP14JUTDirectPrint */ JUTException::JUTException(JUTDirectPrint* directPrint) : JKRThread(0x4000, 0x10, 0) { mDirectPrint = directPrint; - OSSetErrorHandler(EXCEPTION_DSI, errorHandler); - OSSetErrorHandler(EXCEPTION_ISI, errorHandler); - OSSetErrorHandler(EXCEPTION_PROGRAM, errorHandler); - OSSetErrorHandler(EXCEPTION_ALIGNMENT, errorHandler); - OSSetErrorHandler(EXCEPTION_MEMORY_PROTECTION, errorHandler); + OSSetErrorHandler(EXCEPTION_DSI, (OSErrorHandler)errorHandler); + OSSetErrorHandler(EXCEPTION_ISI, (OSErrorHandler)errorHandler); + OSSetErrorHandler(EXCEPTION_PROGRAM, (OSErrorHandler)errorHandler); + OSSetErrorHandler(EXCEPTION_ALIGNMENT, (OSErrorHandler)errorHandler); + OSSetErrorHandler(EXCEPTION_MEMORY_PROTECTION, (OSErrorHandler)errorHandler); setFPException(0); sPreUserCallback = NULL; @@ -96,7 +96,7 @@ void* JUTException::run() { while (true) { OSReceiveMessage(&sMessageQueue, &message, OS_MESSAGE_BLOCK); CallbackObject* cb = (CallbackObject*)message; - OSErrorHandler callback = cb->callback; + JUTExceptionUserCallback callback = cb->callback; u16 error = cb->error; OSContext* context = cb->context; int r24 = cb->param_3; @@ -214,7 +214,7 @@ void JUTException::errorHandler(OSError error, OSContext* context, u32 param_3, void JUTException::setFPException(u32 fpscr_enable_bits) { __OSFpscrEnableBits = fpscr_enable_bits; if (fpscr_enable_bits) { - OSSetErrorHandler(EXCEPTION_FLOATING_POINT_EXCEPTION, errorHandler); + OSSetErrorHandler(EXCEPTION_FLOATING_POINT_EXCEPTION, (OSErrorHandler)errorHandler); } else { OSSetErrorHandler(EXCEPTION_FLOATING_POINT_EXCEPTION, NULL); } @@ -802,15 +802,15 @@ void JUTException::createFB() { } /* 802C6868-802C6878 .text setPreUserCallback__12JUTExceptionFPFUsP9OSContextUlUl_v */ -OSErrorHandler JUTException::setPreUserCallback(OSErrorHandler callback) { - OSErrorHandler previous = sPreUserCallback; +JUTExceptionUserCallback JUTException::setPreUserCallback(JUTExceptionUserCallback callback) { + JUTExceptionUserCallback previous = sPreUserCallback; sPreUserCallback = callback; return previous; } /* 802C6878-802C6888 .text setPostUserCallback__12JUTExceptionFPFUsP9OSContextUlUl_v */ -OSErrorHandler JUTException::setPostUserCallback(OSErrorHandler callback) { - OSErrorHandler previous = sPostUserCallback; +JUTExceptionUserCallback JUTException::setPostUserCallback(JUTExceptionUserCallback callback) { + JUTExceptionUserCallback previous = sPostUserCallback; sPostUserCallback = callback; return previous; } diff --git a/src/dolphin/os/OSError.c b/src/dolphin/os/OSError.c index dc72b4563..1ebe52776 100644 --- a/src/dolphin/os/OSError.c +++ b/src/dolphin/os/OSError.c @@ -12,8 +12,8 @@ extern volatile u32 __OSLastInterruptSrr0; extern volatile s16 __OSLastInterrupt; extern volatile OSTime __OSLastInterruptTime; -extern OSErrorHandlerEx __OSErrorTable[EXCEPTION_MAX]; -OSErrorHandlerEx __OSErrorTable[EXCEPTION_MAX]; +extern OSErrorHandler __OSErrorTable[EXCEPTION_MAX]; +OSErrorHandler __OSErrorTable[EXCEPTION_MAX]; #define FPSCR_ENABLE (FPSCR_VE | FPSCR_OE | FPSCR_UE | FPSCR_ZE | FPSCR_XE) u32 __OSFpscrEnableBits = FPSCR_ENABLE; @@ -53,12 +53,12 @@ __declspec(weak) void OSPanic(const char* file, s32 line, const char* msg, ...) } OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler) { - OSErrorHandlerEx oldHandler; + OSErrorHandler oldHandler; BOOL enabled; enabled = OSDisableInterrupts(); oldHandler = __OSErrorTable[error]; - __OSErrorTable[error] = (OSErrorHandlerEx)handler; + __OSErrorTable[error] = (OSErrorHandler)handler; if (error == EXCEPTION_FLOATING_POINT_EXCEPTION) { u32 msr; diff --git a/src/dolphin/os/OSMemory.c b/src/dolphin/os/OSMemory.c index f53e44308..05ce86939 100644 --- a/src/dolphin/os/OSMemory.c +++ b/src/dolphin/os/OSMemory.c @@ -6,7 +6,7 @@ vu16 __MEMRegs[64] AT_ADDRESS(0xCC004000); -extern OSErrorHandlerEx __OSErrorTable[16]; +extern OSErrorHandler __OSErrorTable[EXCEPTION_MAX]; u32 OSGetConsoleSimulatedMemSize() { return *(u32*)(OSPhysicalToCached(0x00F0)); diff --git a/src/dolphin/os/OSThread.c b/src/dolphin/os/OSThread.c index b156818f9..ad7faca62 100644 --- a/src/dolphin/os/OSThread.c +++ b/src/dolphin/os/OSThread.c @@ -78,7 +78,7 @@ volatile OSContext* __OSFPUContext AT_ADDRESS(OS_BASE_CACHED + 0x00D8); // External References: // -extern OSErrorHandlerEx __OSErrorTable[17]; +extern OSErrorHandler __OSErrorTable[EXCEPTION_MAX]; extern u32 __OSFpscrEnableBits; void _epilog(); diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 9d6b290df..e43ebd119 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -258,7 +258,7 @@ void myExceptionCallback(OSError, OSContext*, u32, u32) { } /* 8000C3C0-8000C70C .text fault_callback_scroll__FUsP9OSContextUlUl */ -void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { +void fault_callback_scroll(OSError, OSContext* p_context, u32, u32) { JUTException* manager = JUTException::getManager(); JUTConsole* exConsole = manager->getConsole(); From ea73a9c5fea05c77d0d64cff4a7270f27f07af70 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 14:29:33 -0400 Subject: [PATCH 20/31] Fix more clangd warnings/errors --- .clangd | 1 + include/global.h | 1 + .../Math/Double_precision/e_atan2.c | 3 +- .../Math/Double_precision/s_atan.c | 3 +- src/dolphin/os/OSCache.c | 32 ++++++++++++++++++- src/dolphin/os/OSLink.c | 1 + src/dolphin/os/__start.c | 2 +- 7 files changed, 39 insertions(+), 4 deletions(-) diff --git a/.clangd b/.clangd index 893158290..aed8f88e8 100644 --- a/.clangd +++ b/.clangd @@ -1,6 +1,7 @@ # https://clangd.llvm.org/config CompileFlags: Add: [ + "-fdeclspec", "-Wno-c++11-compat-deprecated-writable-strings", "-Wno-undefined-inline", "-Wno-multichar", diff --git a/include/global.h b/include/global.h index a9b9932b3..42687f340 100644 --- a/include/global.h +++ b/include/global.h @@ -44,6 +44,7 @@ extern int __cntlzw(uint); extern int __rlwimi(int, int, int, int, int); extern void __dcbz(void*, int); +extern void __sync(); #define VERSION_JPN 0 #define VERSION_USA 1 diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c index 5a7863be0..81d812560 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c @@ -40,6 +40,7 @@ */ #include "fdlibm.h" +#include "math.h" #ifdef __STDC__ static const double @@ -140,4 +141,4 @@ double __ieee754_atan2(y, x) double y, x; default: /* case 3 */ return (z - pi_lo) - pi; /* atan(-,-) */ } -} \ No newline at end of file +} diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c index 0f88ef2fc..e771307b9 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c @@ -33,6 +33,7 @@ */ #include "fdlibm.h" +#include "math.h" #ifdef __STDC__ static const double atanhi[] = { @@ -140,4 +141,4 @@ double atan(x) double x; z = atanhi[id] - ((x * (s1 + s2) - atanlo[id]) - x); return (hx < 0) ? -z : z; } -} \ No newline at end of file +} diff --git a/src/dolphin/os/OSCache.c b/src/dolphin/os/OSCache.c index d39e8b143..99a41efb2 100644 --- a/src/dolphin/os/OSCache.c +++ b/src/dolphin/os/OSCache.c @@ -5,6 +5,7 @@ static ASM void DCEnable(void) { // clang-format off +#ifdef __MWERKS__ nofralloc sync @@ -13,11 +14,13 @@ static ASM void DCEnable(void) { mtspr 0x3F0, r3 blr +#endif // clang-format on } ASM void DCInvalidateRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -35,11 +38,13 @@ do_invalidate: bdnz do_invalidate blr +#endif // clang-format on } ASM void DCFlushRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -58,11 +63,13 @@ do_flush: sc blr +#endif // clang-format on } ASM void DCStoreRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -81,11 +88,13 @@ do_store: sc blr +#endif // clang-format on } ASM void DCFlushRangeNoSync(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -103,11 +112,13 @@ do_flush: bdnz do_flush blr +#endif // clang-format on } ASM void DCStoreRangeNoSync(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -125,11 +136,13 @@ do_store: bdnz do_store blr +#endif // clang-format on } ASM void DCZeroRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -147,11 +160,13 @@ do_zero: bdnz do_zero blr +#endif // clang-format on } ASM void ICInvalidateRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -172,11 +187,13 @@ do_invalidate: isync blr +#endif // clang-format on } ASM void ICFlashInvalidate(void) { // clang-format off +#ifdef __MWERKS__ nofralloc mfspr r3, 0x3F0 @@ -184,11 +201,13 @@ ASM void ICFlashInvalidate(void) { mtspr 0x3F0, r3 blr +#endif // clang-format on } static ASM void ICEnable(void) { // clang-format off +#ifdef __MWERKS__ nofralloc isync @@ -197,11 +216,13 @@ static ASM void ICEnable(void) { mtspr 0x3F0, r3 blr +#endif // clang-format on } ASM void __LCEnable(void) { // clang-format off +#ifdef __MWERKS__ nofralloc mfmsr r5 @@ -265,6 +286,7 @@ do_load: nop blr +#endif // clang-format on } @@ -276,6 +298,7 @@ void LCEnable(void) { ASM void LCDisable(void) { // clang-format off +#ifdef __MWERKS__ nofralloc lis r3, 0xE000 @@ -291,12 +314,14 @@ do_invalidate: mtspr 0x398, r4 blr +#endif // clang-format on } static ASM void LCStoreBlocks(register void* destAddr, register void* srcAddr, register u32 blockNum){ // clang-format off +#ifdef __MWERKS__ nofralloc rlwinm r6, blockNum, 0x1E, 0x1B, 0x1F @@ -309,8 +334,11 @@ static ASM void LCStoreBlocks(register void* destAddr, register void* srcAddr, mtspr 0x39B, r6 blr +#endif // clang-format on -} /* 8033B838-8033B8E4 336178 00AC+00 0/0 0/0 3/3 .text LCStoreData */ +} + +/* 8033B838-8033B8E4 336178 00AC+00 0/0 0/0 3/3 .text LCStoreData */ u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { u32 blocks = (nBytes + 31) / 32; u32 ret = (blocks + 127) / 128; @@ -333,6 +361,7 @@ u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { ASM void LCQueueWait(register u32 len) { // clang-format off +#ifdef __MWERKS__ nofralloc addi len, len, 1 @@ -343,6 +372,7 @@ LCQueueWait_04: bge cr2, LCQueueWait_04 blr +#endif // clang-format on } diff --git a/src/dolphin/os/OSLink.c b/src/dolphin/os/OSLink.c index 6acb67921..86480fa86 100644 --- a/src/dolphin/os/OSLink.c +++ b/src/dolphin/os/OSLink.c @@ -1,4 +1,5 @@ #include "dolphin/os/OS.h" +#include #define SHN_UNDEF 0 #define SHN_LORESERVE 0xff00 diff --git a/src/dolphin/os/__start.c b/src/dolphin/os/__start.c index b029387c3..b1187aa53 100644 --- a/src/dolphin/os/__start.c +++ b/src/dolphin/os/__start.c @@ -5,7 +5,7 @@ #include "dolphin/os/__start.h" void DBInit(); -static void __init_registers(void); +void __init_registers(void); SECTION_INIT void __check_pad3(void) { if ((*(u16*)0x800030E4 & 0xEEF) == 0xEEF) { From 9d5bd502463bea2ce7f3e7cf2d28b52d64321f7d Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 14:56:59 -0400 Subject: [PATCH 21/31] Add ninja diff to CI --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a62f16036..c787ae2f0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,6 +35,10 @@ jobs: - name: Prepare run: cp -R /orig . + - name: Diff + run: | + ninja diff + # Build the project - name: Build run: | From ee64bd24ae64686b6771f7707b0c8fb8a86f304e Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 14:58:34 -0400 Subject: [PATCH 22/31] Fix --- .github/workflows/build.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c787ae2f0..4cab970de 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,15 +35,12 @@ jobs: - name: Prepare run: cp -R /orig . - - name: Diff - run: | - ninja diff - # Build the project - name: Build run: | python configure.py --map --version ${{ matrix.version }} \ --binutils /binutils --compilers /compilers + ninja diff ninja all_source build/${{ matrix.version }}/progress.json \ build/${{ matrix.version }}/report.json From 925fba4f20dae4c1aa93ccdc347d255be936081f Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:12:52 -0400 Subject: [PATCH 23/31] Revert "Fix more clangd warnings/errors" This reverts commit ea73a9c5fea05c77d0d64cff4a7270f27f07af70. --- .clangd | 1 - include/global.h | 1 - .../Math/Double_precision/e_atan2.c | 3 +- .../Math/Double_precision/s_atan.c | 3 +- src/dolphin/os/OSCache.c | 32 +------------------ src/dolphin/os/OSLink.c | 1 - src/dolphin/os/__start.c | 2 +- 7 files changed, 4 insertions(+), 39 deletions(-) diff --git a/.clangd b/.clangd index aed8f88e8..893158290 100644 --- a/.clangd +++ b/.clangd @@ -1,7 +1,6 @@ # https://clangd.llvm.org/config CompileFlags: Add: [ - "-fdeclspec", "-Wno-c++11-compat-deprecated-writable-strings", "-Wno-undefined-inline", "-Wno-multichar", diff --git a/include/global.h b/include/global.h index 42687f340..a9b9932b3 100644 --- a/include/global.h +++ b/include/global.h @@ -44,7 +44,6 @@ extern int __cntlzw(uint); extern int __rlwimi(int, int, int, int, int); extern void __dcbz(void*, int); -extern void __sync(); #define VERSION_JPN 0 #define VERSION_USA 1 diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c index 81d812560..5a7863be0 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c @@ -40,7 +40,6 @@ */ #include "fdlibm.h" -#include "math.h" #ifdef __STDC__ static const double @@ -141,4 +140,4 @@ double __ieee754_atan2(y, x) double y, x; default: /* case 3 */ return (z - pi_lo) - pi; /* atan(-,-) */ } -} +} \ No newline at end of file diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c index e771307b9..0f88ef2fc 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c @@ -33,7 +33,6 @@ */ #include "fdlibm.h" -#include "math.h" #ifdef __STDC__ static const double atanhi[] = { @@ -141,4 +140,4 @@ double atan(x) double x; z = atanhi[id] - ((x * (s1 + s2) - atanlo[id]) - x); return (hx < 0) ? -z : z; } -} +} \ No newline at end of file diff --git a/src/dolphin/os/OSCache.c b/src/dolphin/os/OSCache.c index 99a41efb2..d39e8b143 100644 --- a/src/dolphin/os/OSCache.c +++ b/src/dolphin/os/OSCache.c @@ -5,7 +5,6 @@ static ASM void DCEnable(void) { // clang-format off -#ifdef __MWERKS__ nofralloc sync @@ -14,13 +13,11 @@ static ASM void DCEnable(void) { mtspr 0x3F0, r3 blr -#endif // clang-format on } ASM void DCInvalidateRange(register void* start, register u32 nBytes) { // clang-format off -#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -38,13 +35,11 @@ do_invalidate: bdnz do_invalidate blr -#endif // clang-format on } ASM void DCFlushRange(register void* start, register u32 nBytes) { // clang-format off -#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -63,13 +58,11 @@ do_flush: sc blr -#endif // clang-format on } ASM void DCStoreRange(register void* start, register u32 nBytes) { // clang-format off -#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -88,13 +81,11 @@ do_store: sc blr -#endif // clang-format on } ASM void DCFlushRangeNoSync(register void* start, register u32 nBytes) { // clang-format off -#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -112,13 +103,11 @@ do_flush: bdnz do_flush blr -#endif // clang-format on } ASM void DCStoreRangeNoSync(register void* start, register u32 nBytes) { // clang-format off -#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -136,13 +125,11 @@ do_store: bdnz do_store blr -#endif // clang-format on } ASM void DCZeroRange(register void* start, register u32 nBytes) { // clang-format off -#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -160,13 +147,11 @@ do_zero: bdnz do_zero blr -#endif // clang-format on } ASM void ICInvalidateRange(register void* start, register u32 nBytes) { // clang-format off -#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -187,13 +172,11 @@ do_invalidate: isync blr -#endif // clang-format on } ASM void ICFlashInvalidate(void) { // clang-format off -#ifdef __MWERKS__ nofralloc mfspr r3, 0x3F0 @@ -201,13 +184,11 @@ ASM void ICFlashInvalidate(void) { mtspr 0x3F0, r3 blr -#endif // clang-format on } static ASM void ICEnable(void) { // clang-format off -#ifdef __MWERKS__ nofralloc isync @@ -216,13 +197,11 @@ static ASM void ICEnable(void) { mtspr 0x3F0, r3 blr -#endif // clang-format on } ASM void __LCEnable(void) { // clang-format off -#ifdef __MWERKS__ nofralloc mfmsr r5 @@ -286,7 +265,6 @@ do_load: nop blr -#endif // clang-format on } @@ -298,7 +276,6 @@ void LCEnable(void) { ASM void LCDisable(void) { // clang-format off -#ifdef __MWERKS__ nofralloc lis r3, 0xE000 @@ -314,14 +291,12 @@ do_invalidate: mtspr 0x398, r4 blr -#endif // clang-format on } static ASM void LCStoreBlocks(register void* destAddr, register void* srcAddr, register u32 blockNum){ // clang-format off -#ifdef __MWERKS__ nofralloc rlwinm r6, blockNum, 0x1E, 0x1B, 0x1F @@ -334,11 +309,8 @@ static ASM void LCStoreBlocks(register void* destAddr, register void* srcAddr, mtspr 0x39B, r6 blr -#endif // clang-format on -} - -/* 8033B838-8033B8E4 336178 00AC+00 0/0 0/0 3/3 .text LCStoreData */ +} /* 8033B838-8033B8E4 336178 00AC+00 0/0 0/0 3/3 .text LCStoreData */ u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { u32 blocks = (nBytes + 31) / 32; u32 ret = (blocks + 127) / 128; @@ -361,7 +333,6 @@ u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { ASM void LCQueueWait(register u32 len) { // clang-format off -#ifdef __MWERKS__ nofralloc addi len, len, 1 @@ -372,7 +343,6 @@ LCQueueWait_04: bge cr2, LCQueueWait_04 blr -#endif // clang-format on } diff --git a/src/dolphin/os/OSLink.c b/src/dolphin/os/OSLink.c index 86480fa86..6acb67921 100644 --- a/src/dolphin/os/OSLink.c +++ b/src/dolphin/os/OSLink.c @@ -1,5 +1,4 @@ #include "dolphin/os/OS.h" -#include #define SHN_UNDEF 0 #define SHN_LORESERVE 0xff00 diff --git a/src/dolphin/os/__start.c b/src/dolphin/os/__start.c index b1187aa53..b029387c3 100644 --- a/src/dolphin/os/__start.c +++ b/src/dolphin/os/__start.c @@ -5,7 +5,7 @@ #include "dolphin/os/__start.h" void DBInit(); -void __init_registers(void); +static void __init_registers(void); SECTION_INIT void __check_pad3(void) { if ((*(u16*)0x800030E4 & 0xEEF) == 0xEEF) { From 1523adbdecb56f128318300b0c9212a5806a1abb Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:21:46 -0400 Subject: [PATCH 24/31] ifdef out asm functions --- .../Runtime/Src/__init_cpp_exceptions.cpp | 2 ++ src/dolphin/os/OSCache.c | 32 ++++++++++++++++++- src/dolphin/os/OSContext.c | 20 ++++++++++++ src/dolphin/os/OSMemory.c | 6 ++++ src/dolphin/os/OSSync.c | 2 ++ 5 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/PowerPC_EABI_Support/Runtime/Src/__init_cpp_exceptions.cpp b/src/PowerPC_EABI_Support/Runtime/Src/__init_cpp_exceptions.cpp index 8ea08c077..d165e022d 100644 --- a/src/PowerPC_EABI_Support/Runtime/Src/__init_cpp_exceptions.cpp +++ b/src/PowerPC_EABI_Support/Runtime/Src/__init_cpp_exceptions.cpp @@ -22,9 +22,11 @@ static int fragmentID = -2; /* clang-format off */ static ASM char* GetR2() { +#ifdef __MWERKS__ nofralloc; mr r3, r2 blr +#endif } /* clang-format on */ diff --git a/src/dolphin/os/OSCache.c b/src/dolphin/os/OSCache.c index d39e8b143..99a41efb2 100644 --- a/src/dolphin/os/OSCache.c +++ b/src/dolphin/os/OSCache.c @@ -5,6 +5,7 @@ static ASM void DCEnable(void) { // clang-format off +#ifdef __MWERKS__ nofralloc sync @@ -13,11 +14,13 @@ static ASM void DCEnable(void) { mtspr 0x3F0, r3 blr +#endif // clang-format on } ASM void DCInvalidateRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -35,11 +38,13 @@ do_invalidate: bdnz do_invalidate blr +#endif // clang-format on } ASM void DCFlushRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -58,11 +63,13 @@ do_flush: sc blr +#endif // clang-format on } ASM void DCStoreRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -81,11 +88,13 @@ do_store: sc blr +#endif // clang-format on } ASM void DCFlushRangeNoSync(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -103,11 +112,13 @@ do_flush: bdnz do_flush blr +#endif // clang-format on } ASM void DCStoreRangeNoSync(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -125,11 +136,13 @@ do_store: bdnz do_store blr +#endif // clang-format on } ASM void DCZeroRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -147,11 +160,13 @@ do_zero: bdnz do_zero blr +#endif // clang-format on } ASM void ICInvalidateRange(register void* start, register u32 nBytes) { // clang-format off +#ifdef __MWERKS__ nofralloc cmplwi nBytes, 0 @@ -172,11 +187,13 @@ do_invalidate: isync blr +#endif // clang-format on } ASM void ICFlashInvalidate(void) { // clang-format off +#ifdef __MWERKS__ nofralloc mfspr r3, 0x3F0 @@ -184,11 +201,13 @@ ASM void ICFlashInvalidate(void) { mtspr 0x3F0, r3 blr +#endif // clang-format on } static ASM void ICEnable(void) { // clang-format off +#ifdef __MWERKS__ nofralloc isync @@ -197,11 +216,13 @@ static ASM void ICEnable(void) { mtspr 0x3F0, r3 blr +#endif // clang-format on } ASM void __LCEnable(void) { // clang-format off +#ifdef __MWERKS__ nofralloc mfmsr r5 @@ -265,6 +286,7 @@ do_load: nop blr +#endif // clang-format on } @@ -276,6 +298,7 @@ void LCEnable(void) { ASM void LCDisable(void) { // clang-format off +#ifdef __MWERKS__ nofralloc lis r3, 0xE000 @@ -291,12 +314,14 @@ do_invalidate: mtspr 0x398, r4 blr +#endif // clang-format on } static ASM void LCStoreBlocks(register void* destAddr, register void* srcAddr, register u32 blockNum){ // clang-format off +#ifdef __MWERKS__ nofralloc rlwinm r6, blockNum, 0x1E, 0x1B, 0x1F @@ -309,8 +334,11 @@ static ASM void LCStoreBlocks(register void* destAddr, register void* srcAddr, mtspr 0x39B, r6 blr +#endif // clang-format on -} /* 8033B838-8033B8E4 336178 00AC+00 0/0 0/0 3/3 .text LCStoreData */ +} + +/* 8033B838-8033B8E4 336178 00AC+00 0/0 0/0 3/3 .text LCStoreData */ u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { u32 blocks = (nBytes + 31) / 32; u32 ret = (blocks + 127) / 128; @@ -333,6 +361,7 @@ u32 LCStoreData(void* destAddr, void* srcAddr, u32 nBytes) { ASM void LCQueueWait(register u32 len) { // clang-format off +#ifdef __MWERKS__ nofralloc addi len, len, 1 @@ -343,6 +372,7 @@ LCQueueWait_04: bge cr2, LCQueueWait_04 blr +#endif // clang-format on } diff --git a/src/dolphin/os/OSContext.c b/src/dolphin/os/OSContext.c index e9a06de12..9965d875e 100644 --- a/src/dolphin/os/OSContext.c +++ b/src/dolphin/os/OSContext.c @@ -8,6 +8,7 @@ volatile OSContext* __OSFPUContext AT_ADDRESS(OS_BASE_CACHED | 0x00D8); ASM void __OSLoadFPUContext(s32 unused0, register OSContext* context) { // clang-format off +#ifdef __MWERKS__ nofralloc lhz r5, OSContext.state(context) @@ -89,11 +90,13 @@ load_fprs: exit: blr +#endif // clang-format on } ASM void __OSSaveFPUContext(s32 unused0, s32 unused1, register OSContext* context) { // clang-format off +#ifdef __MWERKS__ nofralloc lhz r3, OSContext.state(context) @@ -175,20 +178,24 @@ ASM void __OSSaveFPUContext(s32 unused0, s32 unused1, register OSContext* contex exit: blr +#endif // clang-format on } ASM void OSSaveFPUContext(register OSContext* context) { // clang-format off +#ifdef __MWERKS__ nofralloc addi r5, context, 0 b __OSSaveFPUContext +#endif // clang-format on } ASM void OSSetCurrentContext(register OSContext* context) { // clang-format off +#ifdef __MWERKS__ nofralloc lis r4, OS_CURRENT_CONTEXT@ha @@ -216,6 +223,7 @@ disable_fpu: mtmsr r6 isync blr +#endif // clang-format on } @@ -225,6 +233,7 @@ OSContext* OSGetCurrentContext(void) { ASM u32 OSSaveContext(register OSContext* context) { // clang-format off +#ifdef __MWERKS__ nofralloc stmw r13, OSContext.gpr[13](context) @@ -264,11 +273,13 @@ ASM u32 OSSaveContext(register OSContext* context) { li r3, 0 blr +#endif // clang-format on } ASM void OSLoadContext(register OSContext* context) { // clang-format off +#ifdef __MWERKS__ nofralloc lis r4, __RAS_OSDisableInterrupts_begin@ha @@ -331,15 +342,18 @@ load_special_regs: lwz r4, OSContext.gpr[4](context) lwz context, OSContext.gpr[3](context) rfi +#endif // clang-format on } ASM u8* OSGetStackPointer(void) { // clang-format off +#ifdef __MWERKS__ nofralloc mr r3, r1 blr +#endif // clang-format on } @@ -354,6 +368,7 @@ void OSClearContext(OSContext* context) { ASM void OSInitContext(register OSContext* context, register u32 srr0, register u32 stack) { // clang-format off +#ifdef __MWERKS__ nofralloc stw srr0, OSContext.srr0(context) @@ -404,6 +419,7 @@ ASM void OSInitContext(register OSContext* context, register u32 srr0, register stw r0, OSContext.gqr[7](context) b OSClearContext +#endif // clang-format on } @@ -461,6 +477,7 @@ void OSDumpContext(OSContext* context) { static ASM void OSSwitchFPUContext(register u8 err, register OSContext* context) { // clang-format off +#ifdef __MWERKS__ nofralloc mfmsr r5 @@ -500,6 +517,7 @@ context_is_curr_fpu_context: lwz r3, OSContext.gpr[3](context) lwz context, OSContext.gpr[4](context) rfi +#endif // clang-format on } @@ -511,6 +529,7 @@ void __OSContextInit(void) { ASM void OSFillFPUContext(register OSContext* context) { // clang-format off +#ifdef __MWERKS__ nofralloc mfmsr r5 @@ -593,5 +612,6 @@ ASM void OSFillFPUContext(register OSContext* context) { exit: blr +#endif // clang-format on } diff --git a/src/dolphin/os/OSMemory.c b/src/dolphin/os/OSMemory.c index 05ce86939..efe5b6766 100644 --- a/src/dolphin/os/OSMemory.c +++ b/src/dolphin/os/OSMemory.c @@ -75,6 +75,7 @@ void OSProtectRange(u32 chan, void* addr, u32 nBytes, u32 control) { static ASM void Config24MB(void) { // clang-format off +#ifdef __MWERKS__ nofralloc li r7, 0 @@ -109,11 +110,13 @@ static ASM void Config24MB(void) { mflr r3 mtspr 0x1a, r3 rfi +#endif // clang-format on } static ASM void Config48MB(void) { // clang-format off +#ifdef __MWERKS__ nofralloc li r7, 0 @@ -148,11 +151,13 @@ static ASM void Config48MB(void) { mflr r3 mtspr 0x1a, r3 rfi +#endif // clang-format on } static ASM void RealMode(register u32 config) { // clang-format off +#ifdef __MWERKS__ nofralloc clrlwi config, config, 2 @@ -161,6 +166,7 @@ static ASM void RealMode(register u32 config) { rlwinm config, config, 0, 0x1c, 0x19 mtspr 0x1b, config rfi +#endif // clang-format on } diff --git a/src/dolphin/os/OSSync.c b/src/dolphin/os/OSSync.c index d8fa1f109..043ef3950 100644 --- a/src/dolphin/os/OSSync.c +++ b/src/dolphin/os/OSSync.c @@ -6,6 +6,7 @@ void __OSSystemCallVectorEnd(); static ASM void SystemCallVector(void) { // clang-format off +#ifdef __MWERKS__ nofralloc entry __OSSystemCallVectorStart @@ -19,6 +20,7 @@ entry __OSSystemCallVectorStart entry __OSSystemCallVectorEnd nop +#endif // clang-format on } From aae4bdc3cac48bdeca6abc31aa362924a1066894 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:24:55 -0400 Subject: [PATCH 25/31] Allow declspec in clangd --- .clangd | 1 + 1 file changed, 1 insertion(+) diff --git a/.clangd b/.clangd index 893158290..aed8f88e8 100644 --- a/.clangd +++ b/.clangd @@ -1,6 +1,7 @@ # https://clangd.llvm.org/config CompileFlags: Add: [ + "-fdeclspec", "-Wno-c++11-compat-deprecated-writable-strings", "-Wno-undefined-inline", "-Wno-multichar", From 8de8cd4ac8bf8deb58de775f5a408acf0976f1d5 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:30:47 -0400 Subject: [PATCH 26/31] Fix missing func decls in ansi_fp.h --- .../MSL/MSL_C/MSL_Common/Include/ansi_fp.h | 7 ++++--- src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ansi_fp.h b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ansi_fp.h index 5aa24991a..eda36bf41 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ansi_fp.h +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Include/ansi_fp.h @@ -1,6 +1,7 @@ #ifndef _MSL_COMMON_ANSI_FP_H #define _MSL_COMMON_ANSI_FP_H +#include "dolphin/types.h" #include "float.h" #define SIGDIGLEN 36 @@ -22,7 +23,7 @@ typedef struct decform { short digits; } decform; -/* void __ull2dec(decimal*, u64); +void __ull2dec(decimal*, u64); void __timesdec(decimal*, const decimal*, const decimal*); void __str2dec(decimal*, const char*, short); void __two_exp(decimal*, s16); @@ -31,6 +32,6 @@ BOOL __less_dec(const decimal*, const decimal*); void __minus_dec(decimal*, const decimal*, const decimal*); void __num2dec_internal(decimal*, f64); void __num2dec(const decform*, f64, decimal*); -f64 __dec2num(const decimal*); */ +f64 __dec2num(const decimal*); -#endif \ No newline at end of file +#endif diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c index 4319f8e13..37e492368 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common/Src/printf.c @@ -8,6 +8,7 @@ #include "stdlib.h" #include "string.h" #include "wchar_io.h" +#include "ansi_fp.h" #define TARGET_FLOAT_BITS 64 #define TARGET_FLOAT_BYTES (TARGET_FLOAT_BITS / 8) From 404ba29635ec09385891701cc1db9e5357a5ebba Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:35:55 -0400 Subject: [PATCH 27/31] Fix __start decls --- include/dolphin/os/__start.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/dolphin/os/__start.h b/include/dolphin/os/__start.h index bf4c01124..110d2f10b 100644 --- a/include/dolphin/os/__start.h +++ b/include/dolphin/os/__start.h @@ -31,12 +31,12 @@ extern void InitMetroTRK_BBA(void); extern void OSInit(void); extern void OSResetSystem(BOOL reset, u32 resetCode, BOOL forceMenu); -SECTION_INIT extern void __check_pad3(void); +SECTION_INIT static void __check_pad3(void); SECTION_INIT extern void __set_debug_bba(void); SECTION_INIT extern u8 __get_debug_bba(void); -SECTION_INIT extern void __start(void); -SECTION_INIT extern void __init_registers(void); -SECTION_INIT extern void __init_data(void); +SECTION_INIT extern __declspec(weak) void __start(void); +SECTION_INIT static void __init_registers(void); +SECTION_INIT static void __init_data(void); SECTION_INIT extern void __init_hardware(void); SECTION_INIT extern void __flush_cache(void* addr, u32 size); From 0aadc33e2a6eaf0d311092c48a935e882d38adcf Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:48:25 -0400 Subject: [PATCH 28/31] Fix clangd error in oslink.c --- src/dolphin/os/OSLink.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dolphin/os/OSLink.c b/src/dolphin/os/OSLink.c index 6acb67921..86480fa86 100644 --- a/src/dolphin/os/OSLink.c +++ b/src/dolphin/os/OSLink.c @@ -1,4 +1,5 @@ #include "dolphin/os/OS.h" +#include #define SHN_UNDEF 0 #define SHN_LORESERVE 0xff00 From ccf3d2b6549320a69c1df078e6860587c135f00a Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:50:08 -0400 Subject: [PATCH 29/31] Add decl for the __sync intrinsic --- include/global.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/global.h b/include/global.h index a9b9932b3..42687f340 100644 --- a/include/global.h +++ b/include/global.h @@ -44,6 +44,7 @@ extern int __cntlzw(uint); extern int __rlwimi(int, int, int, int, int); extern void __dcbz(void*, int); +extern void __sync(); #define VERSION_JPN 0 #define VERSION_USA 1 From 417742c59f2b07a97381dca465a4f9c81b7266dd Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:55:40 -0400 Subject: [PATCH 30/31] ifdef out __sync decl --- include/global.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/global.h b/include/global.h index 42687f340..be3a78a67 100644 --- a/include/global.h +++ b/include/global.h @@ -44,7 +44,10 @@ extern int __cntlzw(uint); extern int __rlwimi(int, int, int, int, int); extern void __dcbz(void*, int); + +#ifndef __MWERKS__ extern void __sync(); +#endif #define VERSION_JPN 0 #define VERSION_USA 1 From ea04ec05bd9bdf97b4af9b56c268b99eec46da60 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 15:58:30 -0400 Subject: [PATCH 31/31] Fix missing __fabs header include --- .../MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c | 3 ++- .../MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c index 5a7863be0..81d812560 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/e_atan2.c @@ -40,6 +40,7 @@ */ #include "fdlibm.h" +#include "math.h" #ifdef __STDC__ static const double @@ -140,4 +141,4 @@ double __ieee754_atan2(y, x) double y, x; default: /* case 3 */ return (z - pi_lo) - pi; /* atan(-,-) */ } -} \ No newline at end of file +} diff --git a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c index 0f88ef2fc..e771307b9 100644 --- a/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c +++ b/src/PowerPC_EABI_Support/MSL/MSL_C/MSL_Common_Embedded/Math/Double_precision/s_atan.c @@ -33,6 +33,7 @@ */ #include "fdlibm.h" +#include "math.h" #ifdef __STDC__ static const double atanhi[] = { @@ -140,4 +141,4 @@ double atan(x) double x; z = atanhi[id] - ((x * (s1 + s2) - atanlo[id]) - x); return (hx < 0) ? -z : z; } -} \ No newline at end of file +}