diff --git a/config/ShieldD/rels/d_a_horseD/symbols.txt b/config/ShieldD/rels/d_a_horseD/symbols.txt index c5066d3619..2313093997 100644 --- a/config/ShieldD/rels/d_a_horseD/symbols.txt +++ b/config/ShieldD/rels/d_a_horseD/symbols.txt @@ -300,7 +300,9 @@ m__14daHorse_hio_c0 = .rodata:0x00000060; // type:object size:0x124 scope:global @LOCAL@setReinPos__13daHorseRein_cFi@reinGravity = .rodata:0x000003E0; // type:object size:0x4 scope:local cNullVec__6Z2Calc = .rodata:0x000003E4; // type:object size:0xC scope:global @46916 = .rodata:0x000003F0; // type:object size:0x4 scope:local -lbl_253_rodata_3F4 = .rodata:0x000003F4; // type:object size:0x18 +@LOCAL@signaling_NaN__Q23std17numeric_limitsFv@x = .rodata:0x000003F8; // type:object size:0x8 align:8 data:float +@LOCAL@signaling_NaN_2__Q23std17numeric_limitsFv@x = .rodata:0x00000400; // type:object size:0x8 align:8 data:float +@LOCAL@signaling_NaN__Q23std17numeric_limitsFv@x = .rodata:0x00000408; // type:object size:0x4 align:4 data:float l_autoUpHeight = .data:0x00000000; // type:object size:0x4 scope:global @129761 = .data:0x00000004; // type:object size:0x9 scope:local @129764 = .data:0x00000010; // type:object size:0xB scope:local @@ -462,23 +464,76 @@ __vt__18mDoExt_3DlineMat_c = .data:0x00000890; // type:object size:0x14 scope:gl @134169 = .data:0x00000B38; // type:object size:0xC scope:local @134170 = .data:0x00000B7C; // type:object size:0xB scope:local data:string @134171 = .data:0x00000B9C; // type:object size:0xD scope:local data:string -lbl_253_data_BA9 = .data:0x00000BA9; // type:object size:0x263 +@STRING@getActor__7dDemo_cFUc@2 = .data:0x00000BB8; // type:object size:0x5 scope:local data:string +@STRING@getActor__7dDemo_cFUc@1 = .data:0x00000BC0; // type:object size:0x9 scope:local data:string +@STRING@getActor__7dDemo_cFUc@0 = .data:0x00000BCC; // type:object size:0xE scope:local data:string +@STRING@getActor__7dDemo_cFUc = .data:0x00000BDC; // type:object size:0x9 scope:local data:string +@STRING@getJointNodePointer__12J3DJointTreeCFUs@2 = .data:0x00000BE8; // type:object size:0x5 scope:local data:string +@STRING@getJointNodePointer__12J3DJointTreeCFUs@1 = .data:0x00000BF0; // type:object size:0xF scope:local data:string +@STRING@getJointNodePointer__12J3DJointTreeCFUs@0 = .data:0x00000C00; // type:object size:0x14 scope:local data:string +@STRING@getJointNodePointer__12J3DJointTreeCFUs = .data:0x00000C14; // type:object size:0xF scope:local data:string +@STRING@getMaterialNodePointer__16J3DMaterialTableCFUs@2 = .data:0x00000C24; // type:object size:0x5 scope:local data:string +@STRING@getMaterialNodePointer__16J3DMaterialTableCFUs@1 = .data:0x00000C2C; // type:object size:0x14 scope:local data:string +@STRING@getMaterialNodePointer__16J3DMaterialTableCFUs@0 = .data:0x00000C40; // type:object size:0x14 scope:local data:string +@STRING@getMaterialNodePointer__16J3DMaterialTableCFUs = .data:0x00000C54; // type:object size:0x14 scope:local data:string +@STRING@setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform@2 = .data:0x00000C68; // type:object size:0x5 scope:local data:string +@STRING@setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform@1 = .data:0x00000C70; // type:object size:0xB scope:local data:string +@STRING@setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform@0 = .data:0x00000C7C; // type:object size:0x1B scope:local data:string +@STRING@setAnmTransform__10J3DMtxCalcFP15J3DAnmTransform = .data:0x00000C98; // type:object size:0xB scope:local data:string +@STRING@getAnmTransform__10J3DMtxCalcFv@2 = .data:0x00000CA4; // type:object size:0x5 scope:local data:string +@STRING@getAnmTransform__10J3DMtxCalcFv@1 = .data:0x00000CAC; // type:object size:0xB scope:local data:string +@STRING@getAnmTransform__10J3DMtxCalcFv@0 = .data:0x00000CB8; // type:object size:0x1B scope:local data:string +@STRING@getAnmTransform__10J3DMtxCalcFv = .data:0x00000CD4; // type:object size:0xB scope:local data:string +@STRING@setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform@2 = .data:0x00000CE0; // type:object size:0x5 scope:local data:string +@STRING@setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform@1 = .data:0x00000CE8; // type:object size:0xB scope:local data:string +@STRING@setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform@0 = .data:0x00000CF4; // type:object size:0x1B scope:local data:string +@STRING@setAnmTransform__10J3DMtxCalcFUcP15J3DAnmTransform = .data:0x00000D10; // type:object size:0xB scope:local data:string +@STRING@getAnmTransform__10J3DMtxCalcFUc@2 = .data:0x00000D1C; // type:object size:0x5 scope:local data:string +@STRING@getAnmTransform__10J3DMtxCalcFUc@1 = .data:0x00000D24; // type:object size:0xB scope:local data:string +@STRING@getAnmTransform__10J3DMtxCalcFUc@0 = .data:0x00000D30; // type:object size:0x1B scope:local data:string +@STRING@getAnmTransform__10J3DMtxCalcFUc = .data:0x00000D4C; // type:object size:0xB scope:local data:string +@STRING@setWeight__10J3DMtxCalcFUcf@2 = .data:0x00000D58; // type:object size:0x5 scope:local data:string +@STRING@setWeight__10J3DMtxCalcFUcf@1 = .data:0x00000D60; // type:object size:0xB scope:local data:string +@STRING@setWeight__10J3DMtxCalcFUcf@0 = .data:0x00000D6C; // type:object size:0x1B scope:local data:string +@STRING@setWeight__10J3DMtxCalcFUcf = .data:0x00000D88; // type:object size:0xB scope:local data:string +@STRING@getWeight__10J3DMtxCalcCFUc@2 = .data:0x00000D94; // type:object size:0x5 scope:local data:string +@STRING@getWeight__10J3DMtxCalcCFUc@1 = .data:0x00000D9C; // type:object size:0xB scope:local data:string +@STRING@getWeight__10J3DMtxCalcCFUc@0 = .data:0x00000DA8; // type:object size:0x1B scope:local data:string +@STRING@getWeight__10J3DMtxCalcCFUc = .data:0x00000DC4; // type:object size:0xB scope:local data:string +@STRING@getJoint__10J3DMtxCalcFv@2 = .data:0x00000DD0; // type:object size:0x5 scope:local data:string +@STRING@getJoint__10J3DMtxCalcFv@1 = .data:0x00000DD8; // type:object size:0xB scope:local data:string +@STRING@getJoint__10J3DMtxCalcFv@0 = .data:0x00000DE4; // type:object size:0x16 scope:local data:string +@STRING@getJoint__10J3DMtxCalcFv = .data:0x00000DFC; // type:object size:0xB scope:local data:string +@STRING@showAssert__12JUTAssertionFUlPCciPCc = .data:0x00000E08; // type:object size:0x3 scope:local data:string ...bss.0 = .bss:0x00000000; // type:label scope:local l_debugMode = .bss:0x00000000; // type:object size:0x4 scope:global l_frontFootOffset = .bss:0x00000004; // type:object size:0xC scope:global l_backFootOffset = .bss:0x00000010; // type:object size:0xC scope:global -lbl_253_bss_1C = .bss:0x0000001C; // type:object size:0x1 data:byte +@GUARD@setBodyPart__9daHorse_cFv@localEyePos = .bss:0x0000001C; // type:object size:0x1 data:byte @LOCAL@setBodyPart__9daHorse_cFv@localEyePos = .bss:0x00000020; // type:object size:0xC scope:local +@GUARD@setEffect__9daHorse_cFv@runScale = .bss:0x0000002C; // type:object size:0x1 scope:local data:byte @LOCAL@setEffect__9daHorse_cFv@runScale = .bss:0x00000030; // type:object size:0xC scope:local +@GUARD@setEffect__9daHorse_cFv@landScale@0 = .bss:0x0000003C; // type:object size:0x1 scope:local data:byte @LOCAL@setEffect__9daHorse_cFv@landScale@0 = .bss:0x00000040; // type:object size:0xC scope:local +@GUARD@setEffect__9daHorse_cFv@grassRunScale@1 = .bss:0x0000004C; // type:object size:0x1 scope:local data:byte @LOCAL@setEffect__9daHorse_cFv@grassRunScale@1 = .bss:0x00000050; // type:object size:0xC scope:local +@GUARD@setEffect__9daHorse_cFv@waterDirection@2 = .bss:0x0000005C; // type:object size:0x1 scope:local data:byte @LOCAL@setEffect__9daHorse_cFv@waterDirection@2 = .bss:0x00000060; // type:object size:0xC scope:local +@GUARD@setReinPosMoveInit__9daHorse_cFi@reinLeftStart = .bss:0x0000006C; // type:object size:0x1 scope:local data:byte @LOCAL@setReinPosMoveInit__9daHorse_cFi@reinLeftStart = .bss:0x00000070; // type:object size:0xC scope:local +@GUARD@setReinPosMoveInit__9daHorse_cFi@reinRightStart@0 = .bss:0x0000007C; // type:object size:0x1 scope:local data:byte @LOCAL@setReinPosMoveInit__9daHorse_cFi@reinRightStart@0 = .bss:0x00000080; // type:object size:0xC scope:local +@GUARD@setReinPosMoveInit__9daHorse_cFi@localNeckLeft@1 = .bss:0x0000008C; // type:object size:0x1 scope:local data:byte @LOCAL@setReinPosMoveInit__9daHorse_cFi@localNeckLeft@1 = .bss:0x00000090; // type:object size:0xC scope:local +@GUARD@setReinPosMoveInit__9daHorse_cFi@localNeckRight@2 = .bss:0x0000009C; // type:object size:0x1 scope:local data:byte @LOCAL@setReinPosMoveInit__9daHorse_cFi@localNeckRight@2 = .bss:0x000000A0; // type:object size:0xC scope:local +@GUARD@setReinPosNormalSubstance__9daHorse_cFv@saddleLeft = .bss:0x000000AC; // type:object size:0x1 scope:local data:byte @LOCAL@setReinPosNormalSubstance__9daHorse_cFv@saddleLeft = .bss:0x000000B0; // type:object size:0xC scope:local +@GUARD@setReinPosNormalSubstance__9daHorse_cFv@saddleRight@0 = .bss:0x000000BC; // type:object size:0x1 scope:local data:byte @LOCAL@setReinPosNormalSubstance__9daHorse_cFv@saddleRight@0 = .bss:0x000000C0; // type:object size:0xC scope:local +@GUARD@bgCheck__9daHorse_cFv@localCenterPos = .bss:0x000000CC; // type:object size:0x1 scope:local data:byte @LOCAL@bgCheck__9daHorse_cFv@localCenterPos = .bss:0x000000D0; // type:object size:0xC scope:local +@GUARD@bgCheck__9daHorse_cFv@localFrontPos@0 = .bss:0x000000DC; // type:object size:0x1 scope:local data:byte @LOCAL@bgCheck__9daHorse_cFv@localFrontPos@0 = .bss:0x000000E0; // type:object size:0xC scope:local +@GUARD@bgCheck__9daHorse_cFv@localBackPos@1 = .bss:0x000000EC; // type:object size:0x1 scope:local data:byte @LOCAL@bgCheck__9daHorse_cFv@localBackPos@1 = .bss:0x000000F0; // type:object size:0xC scope:local diff --git a/include/d/actor/d_a_horse.h b/include/d/actor/d_a_horse.h index 1a5f1d784b..37e4bac70f 100644 --- a/include/d/actor/d_a_horse.h +++ b/include/d/actor/d_a_horse.h @@ -539,10 +539,10 @@ public: /* 0x0C4 */ f32 boar_jump_height; /* 0x0C8 */ f32 water_depth_limit; /* 0x0CC */ f32 enemy_search_range; - /* 0x0D0 */ f32 m0D0; + /* 0x0D0 */ f32 climb_step; /* 0x0D4 */ f32 floor_angle_limit; /* 0x0D8 */ f32 dash_anm_speed; - /* 0x0DC */ f32 field_0xdc; + /* 0x0DC */ f32 min_walk_rate; /* 0x0E0 */ f32 walk_min_speed; /* 0x0E4 */ f32 cliff_jump_anm_speed; /* 0x0E8 */ f32 cliff_jump_start_frame; diff --git a/src/d/actor/d_a_alink_crawl.inc b/src/d/actor/d_a_alink_crawl.inc index 59a7436b45..4a657c1de8 100644 --- a/src/d/actor/d_a_alink_crawl.inc +++ b/src/d/actor/d_a_alink_crawl.inc @@ -393,12 +393,9 @@ void daAlink_c::setCrawlMoveAngle() { sp2C.set(sp20.x - sp38.x, dComIfG_Bgsp().GroundCross(&mLinkGndChk) - sp38.y, sp20.z - sp38.z); #else - // Likely fakematch: + // Fakematch: // dBgS::GroundCross is implicitly inlined to cBgS::GroundCross, but for some - // reason here that breaks instruction ordering. This is the only place in the code - // where it causes issues. - // It _is_ possible that this is caused by an actual version difference in Shield, given - // that the Wii versions need the cast but Shield prod does not. + // reason here that breaks instruction ordering. See also daHorse_c::checkHorseNoMove. sp2C.set(sp20.x - sp38.x, ((cBgS&)dComIfG_Bgsp()).GroundCross(&mLinkGndChk) - sp38.y, sp20.z - sp38.z); #endif diff --git a/src/d/actor/d_a_horse.cpp b/src/d/actor/d_a_horse.cpp index bfe09545b1..6edd60a620 100644 --- a/src/d/actor/d_a_horse.cpp +++ b/src/d/actor/d_a_horse.cpp @@ -51,11 +51,9 @@ #define ANM_HS_WALK_FAST 34 #define ANM_HS_WALK_SLOW 35 -static void strippedFunc() -{ - extern void F(f32*); - f32 v[3] = {0.0f}; - F(v); +static f32* strippedFunc() { + f32 v[3] = {}; + return v; } static char const l_arcName[] = "Horse"; @@ -66,6 +64,94 @@ const u16 daHorse_c::m_footJointTable[] = { const f32 daHorse_c::m_callLimitDistance2 = 640000.0f; +static f32 l_autoUpHeight = 50.0f; + +#if DEBUG +void daHorse_hio_c::genMessage(JORMContext* ctx) { + ctx->genSlider("最高速度", &m.max_speed, 0.0f, 100.0f); + ctx->genSlider("待機A速度", &m.wait_anm_speed, 0.0f, 10.0f); + ctx->genSlider("歩きA速度", &m.walk_anm_speed, 0.0f, 10.0f); + ctx->genSlider("速歩A速度", &m.fast_walk_anm_speed, 0.0f, 10.0f); + ctx->genSlider("走りA速度", &m.run_anm_speed, 0.0f, 10.0f); + ctx->genSlider("速走A速度", &m.fast_run_anm_speed, 0.0, 10.0f); + ctx->genSlider("後歩A速度", &m.backwalk_anm_speed, 0.0f, 10.0f); + ctx->genSlider("待機→歩き率", &m.wait_to_walk_rate, 0.0f, 1.0f); + ctx->genSlider("歩き→速歩率", &m.walk_to_fastwalk_rate, 0.0f, 1.0f); + ctx->genSlider("速歩→走り率", &m.fastwalk_to_run_rate, 0.0f, 1.0f); + ctx->genSlider("走り→速走率", &m.run_to_fastrun_rate, 0.0f, 1.1f); + ctx->genSlider("歩き最低合成率", &m.min_walk_rate, 0.0f, 1.0f); + ctx->genSlider("歩き最低速度", &m.walk_min_speed, 0.0f, 10.0f); + ctx->genSlider("歩き走り補間", &m.walk_run_interpolation, 0.0f, 30.0f); + ctx->genSlider("ダッシュA速度", &m.dash_anm_speed, 0.0f, 10.0f); + ctx->genSlider("旋回最大", &m.max_turn, 0, 0x7fff); + ctx->genSlider("旋回最小", &m.min_turn, 0, 0x7fff); + ctx->genSlider("加速", &m.acceleration, 0.0f, 10.0f); + ctx->genSlider("減速", &m.deceleration, 0.0f, 10.0f); + ctx->genSlider("停止減速", &m.stopping_deceleration, 0.0f, 10.0f); + ctx->genSlider("後退最大速度", &m.max_backward_speed, 0.0f, 100.0f); + ctx->genSlider("後退加速最大", &m.max_backward_acceleration, 0.0f, 10.0f); + ctx->genSlider("後退待機→歩き率", &m.backward_idle_to_walk_rate, 0.0f, 1.1f); + ctx->genSlider("急停止A速度", &m.faststop_anm_speed, 0.0f, 10.0f); + ctx->genSlider("急停止補間", &m.faststop_interpolation, 0.0f, 10.0f); + ctx->genSlider("急停止CF", &m.fast_stop_cancel_frame, 0.0f, 54.0f); + ctx->genSlider("急停止立A速度", &m.faststop_stand_anm_speed, 0.0f, 10.0f); + ctx->genSlider("急停止立CF", &m.faststop_stand_cancel_frame, 0.0f, 130.0f); + ctx->genSlider("急停止減速(遅)", &m.faststop_deceleration_slow, 0.0f, 20.0f); + ctx->genSlider("急停止減速(速)", &m.faststop_deceleration, 0.0f, 20.0f); + ctx->genSlider("立A速度", &m.stand_anm_speed, 0.0f, 10.0f); + ctx->genSlider("立CF", &m.stand_cancel_frame, 0.0f, 120.0f); + ctx->genSlider("立補間", &m.stand_interpolation, 0.0f, 10.0f); + ctx->genSlider("鞭加速時間", &m.lash_acceleration_time, 0, 0x7fff); + ctx->genSlider("鞭追加速度", &m.add_lash_speed, 0.0f, 100.0f); + ctx->genSlider("鞭加速度", &m.lash_acceleration, 0.0f, 20.0f); + ctx->genSlider("鞭最低速度", &m.min_lash_speed, 0.0f, 100.0f); + ctx->genSlider("ジャンプA速度", &m.jump_anm_speed, 0.0f, 10.0f); + ctx->genSlider("ジャンプ開始F", &m.jump_start_frame, 0.0f, 7.0f); + ctx->genSlider("ジャンプ終了F", &m.jump_end_frame, 0, 7); + ctx->genSlider("ジャンプ補間", &m.jump_interpolation, 0.0f, 10.0f); + ctx->genSlider("空中開始F", &m.air_start_frame, 0.0f, 5.0f); + ctx->genSlider("空中終了F", &m.air_end_frame, 6, 14); + ctx->genSlider("空中補間", &m.air_interpolation, 0.0f, 20.0f); + ctx->genSlider("着地A速度", &m.land_anm_speed, 0.0f, 10.0f); + ctx->genSlider("着地開始F", &m.land_start_frame, 0.0f, 8.0f); + ctx->genSlider("着地終了F", &m.land_end_frame, 0, 8); + ctx->genSlider("着地CF", &m.land_cancel_frame, 0.0f, 9.0f); + ctx->genSlider("着地補間", &m.land_interpolation, 0.0f, 10.0f); + ctx->genSlider("拍車回復時間", &m.spur_recovery_time, 0, 0x7fff); + ctx->genSlider("全拍車回復時間", &m.full_spur_recovery_time, 0, 0x7fff); + ctx->genSlider("連続拍車回復時間", &m.continuous_spur_recovery_time, 0, 0x7fff); + ctx->genSlider("猪ジャンプ水平", &m.boar_jump_horizontal, 0.0f, 1000.0f); + ctx->genSlider("猪ジャンプ高さ", &m.boar_jump_height, 0.0f, 1000.0f); + ctx->genSlider("崖立ち上がり速度", &m.cliff_rise_rate, 0.0f, 100.0f); + ctx->genSlider("限界床角度", &m.floor_angle_limit, 0.0f, 90.0f); + ctx->genSlider("限界水深", &m.water_depth_limit, 0.0f, 200.0f); + ctx->genSlider("敵検索範囲", &m.enemy_search_range, 0.0f, 2000.0f); + ctx->genSlider("段差登り", &m.climb_step, 0.0f, 100.0f); + ctx->genSlider("崖ジャンプ水平", &m.cliff_jump_horizontal, 0.0f, 1000.0f); + ctx->genSlider("崖ジャンプ垂直", &m.cliff_jump_vertical, 0.0f, 1000.0f); + ctx->genSlider("ジャンプA速度(崖)", &m.cliff_jump_anm_speed, 0.0f, 10.0f); + ctx->genSlider("ジャンプ開始F(崖)", &m.cliff_jump_start_frame, 0.0f, 7.0f); + ctx->genSlider("ジャンプ終了F(崖)", &m.cliff_jump_end_frame, 0, 7); + ctx->genSlider("ジャンプ補間(崖)", &m.cliff_jump_interpolation, 0.0f, 10.0f); + ctx->genSlider("空中A速度(崖)", &m.cliff_air_anm_speed, 0.0f, 10.0f); + ctx->genSlider("空中開始F(崖)", &m.cliff_air_start_frame, 0.0f, 14.0f); + ctx->genSlider("空中終了F(崖)", &m.cliff_air_end_frame, 0, 14); + ctx->genSlider("空中補間(崖)", &m.cliff_air_interpolation, 0.0f, 20.0f); + ctx->genSlider("着地A速度(崖)", &m.cliff_land_anm_speed, 0.0f, 10.0f); + ctx->genSlider("着地開始F(崖)", &m.cliff_land_start_frame, 0.0f, 8.0f); + ctx->genSlider("着地終了F(崖)", &m.cliff_land_end_frame, 0, 8); + ctx->genSlider("着地CF(崖)", &m.cliff_land_cancel_frame, 0.0f, 9.0f); + ctx->genSlider("着地補間(崖)", &m.cliff_land_interpolation, 0.0f, 10.0f); + ctx->genSlider("ジャンプ最低時間", &m.min_jump_time, 1, 30); + ctx->genLabel("カカリコ村内", 0x4000001); + ctx->genSlider("最高速度", &m.kakariko_max_speed, 0.0f, 100.0f); + ctx->genSlider("走りA速度", &m.kakariko_run_anm_speed, 0.0f, 10.0f); + ctx->genSlider("速走A速度", &m.kakariko_fastrun_anm_speed, 0.0f, 10.0f); + ctx->genSlider("鞭加速時間", &m.kakariko_lash_acceleration_time, 0, 0x7fff); + ctx->genSlider("鞭追加速度", &m.kakariko_add_lash_speed, 0.0f, 100.0f); +} +#endif + const daHorse_hio_c1 daHorse_hio_c0::m = { 600, 50, @@ -150,6 +236,14 @@ const daHorse_hio_c1 daHorse_hio_c0::m = { }; void daHorseRein_c::setReinPos(int param_0) { + static const f32 reinGravity = -4.5f; + static const f32 topPowerRate = 5.5f; + static const f32 reinLength = 5.5f; + static const f32 reinRate = 1.2f; + static const f32 kansei = 0.2f; + static const f32 frontRate = 3.0f; + static const f32 decNeckRate = 20.0f / 17.0f; + cXyz* var_r27 = &field_0x0[0][param_0] + 1; cXyz spE0 = *field_0x0[0] - *var_r27; @@ -158,9 +252,9 @@ void daHorseRein_c::setReinPos(int param_0) { f32 var_f31 = (f32)param_0 / (f32)field_0x8[0]; f32 var_f30 = var_f31 * var_f31; - spE0 *= (1.0f - var_f30) * 3.0f; + spE0 *= (1.0f - var_f30) * frontRate; - spE0.y += -4.5f; + spE0.y += reinGravity; spE0.x += var_f30 * field_0x10; spE0.z += var_f30 * field_0x14; @@ -175,22 +269,22 @@ void daHorseRein_c::setReinPos(int param_0) { spBC.normalizeZP(); spC8 += spBC * field_0x18; - field_0x18 -= 1.1764706f; + field_0x18 -= decNeckRate; } spC8.normalizeZP(); - *var_r28 = *var_r27 + (spC8 * 5.5f); + *var_r28 = *var_r27 + (spC8 * reinLength); spC8 = *var_r28 - *field_0x0[0]; f32 var_f29 = spC8.abs(); - f32 var_f28 = (f32)param_0 * 5.5f * 1.2f; + f32 var_f28 = (f32)param_0 * topPowerRate * reinRate; if (var_f29 > var_f28) { spC8 *= var_f28 / var_f29; *var_r28 = ((*field_0x0[0] + spC8) * (1.0f - var_f31)) + (*var_r28 * var_f31); } - *var_r25 = (*var_r28 - spD4) * 0.2f; + *var_r25 = (*var_r28 - spD4) * kansei; } void daHorseRein_c::setReinPosPart(int param_0) { @@ -213,8 +307,6 @@ void daHorseRein_c::setReinPosPart(int param_0) { } } -static f32 l_autoUpHeight = 50.0f; - static dCcD_SrcCyl l_cylSrc = { { {0x0, {{AT_TYPE_HORSE, 0x1, 0x12}, {0xd8fbfdff, 0x9}, 0x79}}, // mObj @@ -1562,7 +1654,7 @@ void daHorse_c::setMoveAnime(f32 i_morf) { } else { ratio = var_f31 / m_hio->m.wait_to_walk_rate; if (m_procID != PROC_WAIT_e && speedF > 0.05f) { - ratio = m_hio->m.field_0xdc + (ratio * (1.0f - m_hio->m.field_0xdc)); + ratio = m_hio->m.min_walk_rate + (ratio * (1.0f - m_hio->m.min_walk_rate)); } setDoubleAnime(ratio, m_hio->m.wait_anm_speed, m_hio->m.walk_anm_speed, ANM_HS_WAIT_01, ANM_HS_WALK_SLOW, i_morf); } @@ -1631,7 +1723,7 @@ void daHorse_c::setMoveAnime(f32 i_morf) { } } -int daHorse_c::checkHorseNoMove(int param_0) { +int daHorse_c::checkHorseNoMove(BOOL forward) { cXyz sp50; cXyz sp44; @@ -1658,9 +1750,18 @@ int daHorse_c::checkHorseNoMove(int param_0) { f32 var_f27; f32 var_f31; f32 var_f30; - - if (param_0 != 0) { - if (checkEndResetStateFlg0(ERFLG0_UNK_200) || (checkStateFlg0(FLG0_UNK_100000) && (m_procID == PROC_MOVE_e || m_procID == PROC_TURN_e || m_procID == PROC_STOP_e) && ((current.pos.z < -33500.0f && abs(shape_angle.y) > 0x4000) || (current.pos.z > -20500.0f && abs(shape_angle.y) < 0x4000)))) { + + static const f32 noMoveCresDis = 500.0f; + static const f32 noMoveStopDis = 100.0f; + static const f32 noMoveCresBackDis = 200.0f; + static const f32 checkOffsetY = 200.0f; + + if (forward) { + if (checkEndResetStateFlg0(ERFLG0_UNK_200) || + (checkStateFlg0(FLG0_UNK_100000) && + (m_procID == PROC_MOVE_e || m_procID == PROC_TURN_e || m_procID == PROC_STOP_e) && + ((current.pos.z < -33500.0f && abs(shape_angle.y) > 0x4000) || + (current.pos.z > -20500.0f && abs(shape_angle.y) < 0x4000)))) { return 3; } @@ -1672,6 +1773,7 @@ int daHorse_c::checkHorseNoMove(int param_0) { } var_f31 *= var_f31; + // not sure if these floats should be/be derived from named constants var_f31 = 200.0f + (300.0f * var_f31); var_f29 = cM_ssin(current.angle.y); var_f28 = cM_scos(current.angle.y); @@ -1680,15 +1782,15 @@ int daHorse_c::checkHorseNoMove(int param_0) { } else { var_f29 = -cM_ssin(current.angle.y); var_f28 = -cM_scos(current.angle.y); - sp28 = 200.0f * cM_ssin(spA); - var_f27 = 200.0f * cM_scos(spA); + sp28 = noMoveCresBackDis * cM_ssin(spA); + var_f27 = noMoveCresBackDis * cM_scos(spA); } daAlink_c* player = daAlink_getAlinkActorClass(); cXyz start(current.pos.x, current.pos.y + m_acchcir[0].GetWallH(), current.pos.z); if (daAlink_c::getMoveBGActorName(m_acch.m_gnd, 0) == fpcNm_OBJ_BRG_e) { - start.y = 200.0f + current.pos.y; + start.y = checkOffsetY + current.pos.y; } cXyz end(start.x + (var_f27 * var_f29), start.y + sp28, start.z + (var_f27 * var_f28)); @@ -1701,6 +1803,7 @@ int daHorse_c::checkHorseNoMove(int param_0) { // An alternative way to match the instruction order is by changing dBgS::LineCross's return // type to BOOL while keeping cBgS::LineCross's return type as bool, but that breaks other // functions that call dBgS::LineCross. + // See also daAlink_c::setCrawlMoveAngle. BOOL line_cross = dComIfG_Bgsp().cBgS::LineCross(&m_linechk); offStateFlg0(FLG0_UNK_100); @@ -1709,9 +1812,11 @@ int daHorse_c::checkHorseNoMove(int param_0) { dComIfG_Bgsp().GetTriPla(m_linechk, &plane); sp50 = m_linechk.GetCross(); - if (cBgW_CheckBWall(plane.mNormal.y) && ((param_0 != 0 && cLib_distanceAngleS(plane.mNormal.atan2sX_Z(), shape_angle.y) > 0x6000) || (param_0 == 0 && cLib_distanceAngleS(plane.mNormal.atan2sX_Z(), shape_angle.y) < 0x2000))) { + if (cBgW_CheckBWall(plane.mNormal.y) && + ((forward != 0 && cLib_distanceAngleS(plane.mNormal.atan2sX_Z(), shape_angle.y) > 0x6000) || + (forward == 0 && cLib_distanceAngleS(plane.mNormal.atan2sX_Z(), shape_angle.y) < 0x2000))) { m_linechk.Set(&start, &end, this); - if (m_procID == PROC_MOVE_e && param_0 != 0 && !dComIfG_Bgsp().LineCross(&m_linechk)) { + if (m_procID == PROC_MOVE_e && forward != 0 && !dComIfG_Bgsp().LineCross(&m_linechk)) { if (sp50.abs2(start) < 23716.0f) { return 4; } @@ -1731,13 +1836,13 @@ int daHorse_c::checkHorseNoMove(int param_0) { var_f30 = 50.0f; } - sp50.y = 200.0f + current.pos.y; + sp50.y = checkOffsetY + current.pos.y; f32 sp18; - if (param_0 != 0 && speedF > (0.5f * m_normalMaxSpeedF)) { - sp18 = 500.0; + if (forward != 0 && speedF > (0.5f * m_normalMaxSpeedF)) { + sp18 = noMoveCresDis; } else { - sp18 = 200.0f; + sp18 = noMoveCresBackDis; } while (var_f30 < sp18) { @@ -1754,8 +1859,8 @@ int daHorse_c::checkHorseNoMove(int param_0) { if (!checkStateFlg0(FLG0_UNK_1)) { for (int i = 0; i < m_scnChg_num; i++) { if (m_scnChg_buffer[i]->checkArea(&sp50)) { - if (var_f30 <= 101.0f) { - if (param_0 != 0 && !player->checkHorseGetOffMode()) { + if (var_f30 <= noMoveStopDis + 1) { + if (forward != 0 && !player->checkHorseGetOffMode()) { onStateFlg0(FLG0_UNK_40000); field_0x1704 = 30; } @@ -1768,10 +1873,11 @@ int daHorse_c::checkHorseNoMove(int param_0) { if (fopAcM_gc_c::getHorseNoEntry() || (!checkStateFlg0(FLG0_UNK_1) && dComIfG_Bgsp().GetExitId(*fopAcM_gc_c::getGroundCheck()) != 0x3F) || - (sp8 > sp14 && daAlink_c::getMoveBGActorName(*fopAcM_gc_c::getGroundCheck(), 1) != fpcNm_OBJ_BRG_e && dComIfG_Bgsp().GetSpecialCode(*fopAcM_gc_c::getGroundCheck()) != 2)) + (sp8 > sp14 && daAlink_c::getMoveBGActorName(*fopAcM_gc_c::getGroundCheck(), 1) != fpcNm_OBJ_BRG_e && + dComIfG_Bgsp().GetSpecialCode(*fopAcM_gc_c::getGroundCheck()) != 2)) { - if (var_f30 <= 101.0f) { - if (sp8 > sp14 && param_0 != 0) { + if (var_f30 <= noMoveStopDis + 1) { + if (sp8 > sp14 && forward != 0) { onStateFlg0(FLG0_UNK_40000); field_0x1704 = 30; } @@ -1782,8 +1888,8 @@ int daHorse_c::checkHorseNoMove(int param_0) { if (fopAcM_wt_c::waterCheck(&sp50)) { if (fopAcM_wt_c::getWaterY() - fopAcM_gc_c::getGroundY() > m_hio->m.water_depth_limit) { - if (var_f30 <= 101.0f) { - if (param_0 != 0) { + if (var_f30 <= noMoveStopDis + 1) { + if (forward != 0) { onStateFlg0(FLG0_UNK_40000); field_0x1704 = 30; } @@ -1799,13 +1905,15 @@ int daHorse_c::checkHorseNoMove(int param_0) { if (hstop->getActiveFlg()) { fpoAcM_relativePos(hstop, &sp50, &sp44); - if (sp44.y >= -200.0f && sp44.y <= (400.0f + hstop->scale.y) && fabsf(sp44.x) <= hstop->scale.x && fabsf(sp44.z) <= hstop->scale.z) { - if (param_0 != 0 && speedF > 0.0f && m_procID == PROC_MOVE_e) { + if (sp44.y >= -checkOffsetY && + sp44.y <= (checkOffsetY * 2 + hstop->scale.y) && + fabsf(sp44.x) <= hstop->scale.x && fabsf(sp44.z) <= hstop->scale.z) { + if (forward != 0 && speedF > 0.0f && m_procID == PROC_MOVE_e) { onStateFlg0(FLG0_UNK_200); hstop->onTagStop(); } - if (var_f30 <= 101.0f) { + if (var_f30 <= noMoveStopDis + 1) { return 2; } return 1; @@ -1817,7 +1925,7 @@ int daHorse_c::checkHorseNoMove(int param_0) { var_f30 += 25.0f; } - return rt; + return rt; } BOOL daHorse_c::checkTurnPlayerState() { @@ -1826,7 +1934,7 @@ BOOL daHorse_c::checkTurnPlayerState() { } int daHorse_c::setSpeedAndAngle() { - int var_r28 = checkHorseNoMove(1); + int var_r28 = checkHorseNoMove(TRUE); if (var_r28 == 3) { if (checkStateFlg0(FLG0_UNK_2)) { return 3; @@ -1856,7 +1964,7 @@ int daHorse_c::setSpeedAndAngle() { ) { if (speedF < 0.0f) { - var_r28 = checkHorseNoMove(0); + var_r28 = checkHorseNoMove(FALSE); if (var_r28 == 2) { speedF = 0.0f; } else if (var_r28 == 1) { @@ -2011,7 +2119,7 @@ int daHorse_c::setSpeedAndAngle() { field_0x1704--; if (field_0x1704 == 0) { offStateFlg0(FLG0_UNK_40000); - } else if (checkHorseNoMove(0) == 2) { + } else if (checkHorseNoMove(FALSE) == 2) { offStateFlg0(FLG0_UNK_40000); field_0x1704 = 0; speedF = 0.0f; @@ -2023,7 +2131,7 @@ int daHorse_c::setSpeedAndAngle() { } else if (!checkStateFlg0(FLG0_UNK_8) && (checkTurnInput() || checkStateFlg0(daHorse_FLG0(FLG0_UNK_100000 | FLG0_UNK_200000))) && checkTurnPlayerState() && speedF > (0.2f * -m_hio->m.max_backward_speed)) { return 1; } else { - int spC = checkHorseNoMove(0); + int spC = checkHorseNoMove(FALSE); if (spC == 0) { if (!checkStateFlg0(daHorse_FLG0(FLG0_UNK_100000 | FLG0_UNK_200000))) { cLib_chaseF(&speedF, -m_hio->m.max_backward_speed, m_hio->m.max_backward_acceleration); @@ -2167,12 +2275,14 @@ void daHorse_c::setMatrix() { } if (checkStateFlg0(FLG0_UNK_1) && checkStateFlg0(FLG0_RODEO_MODE) && m_procID == PROC_MOVE_e) { + static const s16 rodeoRunAngleZ = 1500; + if (checkStateFlg0(FLG0_RODEO_LEFT)) { - if (var_r29 < 1500) { - var_r29 = 1500; + if (var_r29 < rodeoRunAngleZ) { + var_r29 = rodeoRunAngleZ; } - } else if (var_r29 > -1500) { - var_r29 = -1500; + } else if (var_r29 > -rodeoRunAngleZ) { + var_r29 = -rodeoRunAngleZ; } } @@ -2697,9 +2807,9 @@ void daHorse_c::footBgCheck() { footdata_p = m_footData; mDoMtx_multVec(m_model->getAnmMtx(6), &l_frontFootOffset, &m_footData[0].field_0xc); - mDoMtx_multVec(m_model->getAnmMtx(0xA), &l_frontFootOffset, &m_footData[1].field_0xc); - mDoMtx_multVec(m_model->getAnmMtx(0x1E), &l_backFootOffset, &m_footData[2].field_0xc); - mDoMtx_multVec(m_model->getAnmMtx(0x22), &l_backFootOffset, &m_footData[3].field_0xc); + mDoMtx_multVec(m_model->getAnmMtx(10), &l_frontFootOffset, &m_footData[1].field_0xc); + mDoMtx_multVec(m_model->getAnmMtx(30), &l_backFootOffset, &m_footData[2].field_0xc); + mDoMtx_multVec(m_model->getAnmMtx(34), &l_backFootOffset, &m_footData[3].field_0xc); cXyz sp7C = current.pos - old.pos; @@ -2778,11 +2888,13 @@ void daHorse_c::footBgCheck() { if (checkResetStateFlg0(RFLG0_TURN_STAND)) { spA = 0; } else { + static const s16 shapeLimitAngle = 0x1C72; + spA = field_0x1714; - if (spA > 0x1C72) { - spA = 0x1C72; - } else if (spA < -0x1C72) { - spA = -0x1C72; + if (spA > shapeLimitAngle) { + spA = shapeLimitAngle; + } else if (spA < -shapeLimitAngle) { + spA = -shapeLimitAngle; } } @@ -2817,11 +2929,15 @@ void daHorse_c::setReinPosMoveInit(int param_0) { static cXyz localNeckLeft(10.0f, 10.0f, 35.0f); static cXyz localNeckRight(10.0f, 10.0f, -35.0f); + static const f32 sideOffset = 10.0f; + static const f32 onHandSideOffset = 1.0f; + static const f32 neckSideOffset = 10.0f; + mDoMtx_multVec(m_model->getAnmMtx(0xF), &reinLeftStart, m_rein[0].field_0x0[0]); mDoMtx_multVec(m_model->getAnmMtx(0xF), &reinRightStart, m_rein[1].field_0x0[0]); s16 spC = field_0x170e + 0x4000; - f32 var_f31 = 10.0f; + f32 var_f31 = sideOffset; f32 var_f30; f32 temp_f28 = cM_ssin(spC); f32 temp_f27 = cM_scos(spC); @@ -2832,7 +2948,7 @@ void daHorse_c::setReinPosMoveInit(int param_0) { } if (param_0 != 3) { - var_f31 += 1.0f; + var_f31 += onHandSideOffset; } var_f30 = var_f31; @@ -2841,12 +2957,12 @@ void daHorse_c::setReinPosMoveInit(int param_0) { if (field_0x1712 > 0) { mDoMtx_multVec(m_model->getAnmMtx(0xB), &localNeckRight, &m_rein[1].field_0x1c); - m_rein[1].field_0x18 = 20.0f * temp_f29; - var_f30 += 10.0f * temp_f29; + m_rein[1].field_0x18 = sideOffset * 2 * temp_f29; + var_f30 += neckSideOffset * temp_f29; } else if (field_0x1712 < 0) { mDoMtx_multVec(m_model->getAnmMtx(0xB), &localNeckLeft, &m_rein[0].field_0x1c); - m_rein[0].field_0x18 = 20.0f * temp_f29; - var_f31 += 10.0f * temp_f29; + m_rein[0].field_0x18 = sideOffset * 2 * temp_f29; + var_f31 += neckSideOffset * temp_f29; } m_rein[0].field_0x10 = var_f31 * temp_f28; @@ -2902,6 +3018,9 @@ void daHorse_c::copyReinPos() { } void daHorse_c::setReinPosHandSubstance(int param_0) { + static const int handSideCnt = 20; + static const int oneHandSideCnt = 24; + static const Vec zeldaLocalLeft = {3.0f, -0.5f, -5.0f}; static const Vec zeldaLocalRight = {3.0f, -0.5f, 5.0f}; @@ -2916,15 +3035,15 @@ void daHorse_c::setReinPosHandSubstance(int param_0) { int var_r25; int var_r24; if (param_0 & 1) { - var_r25 = var_r29 + 20; + var_r25 = var_r29 + handSideCnt; } else { - var_r25 = var_r29 + 24; + var_r25 = var_r29 + oneHandSideCnt; } if (param_0 & 2) { - var_r24 = 20 - var_r29; + var_r24 = handSideCnt - var_r29; } else { - var_r24 = 24 - var_r29; + var_r24 = oneHandSideCnt - var_r29; } if (param_0 & 4) { @@ -2975,6 +3094,7 @@ void daHorse_c::setReinPosHandSubstance(int param_0) { void daHorse_c::setReinPosNormalSubstance() { static cXyz saddleLeft(29.0f, -2.0f, 30.0f); static cXyz saddleRight(29.0f, 2.0f, 30.0f); + static const int sideCount = 24; if (!checkStateFlg0(FLG0_UNK_1) && getZeldaActor() != NULL) { if (((daHoZelda_c*)getZeldaActor())->checkSingleRide()) { @@ -2985,20 +3105,20 @@ void daHorse_c::setReinPosNormalSubstance() { setReinPosMoveInit(0); - mDoMtx_multVec(m_model->getAnmMtx(0x15), &saddleLeft, m_rein[0].field_0x0[0] + 24); - m_rein[0].setReinPosPart(24); + mDoMtx_multVec(m_model->getAnmMtx(0x15), &saddleLeft, m_rein[0].field_0x0[0] + sideCount); + m_rein[0].setReinPosPart(sideCount); - mDoMtx_multVec(m_model->getAnmMtx(0x15), &saddleRight, m_rein[1].field_0x0[0] + 24); - m_rein[1].setReinPosPart(24); + mDoMtx_multVec(m_model->getAnmMtx(0x15), &saddleRight, m_rein[1].field_0x0[0] + sideCount); + m_rein[1].setReinPosPart(sideCount); - *m_rein[2].field_0x0[0] = m_rein[0].field_0x0[0][24]; + *m_rein[2].field_0x0[0] = m_rein[0].field_0x0[0][sideCount]; m_rein[2].setReinPosPart(0); if (checkResetStateFlg0(RFLG0_UNK_1)) { for (int i = 0; i < 5; i++) { - m_rein[0].setReinPosPart(24); - m_rein[1].setReinPosPart(24); - *m_rein[2].field_0x0[0] = m_rein[0].field_0x0[0][24]; + m_rein[0].setReinPosPart(sideCount); + m_rein[1].setReinPosPart(sideCount); + *m_rein[2].field_0x0[0] = m_rein[0].field_0x0[0][sideCount]; m_rein[2].setReinPosPart(0); } } @@ -3123,7 +3243,7 @@ BOOL daHorse_c::checkTurnAfterFastMove(f32 param_0) { return procTurnInit(0); } - if (temp_r29 < 0x2000 && !checkHorseNoMove(1)) { + if (temp_r29 < 0x2000 && !checkHorseNoMove(TRUE)) { speedF = m_hio->m.fastwalk_to_run_rate * m_normalMaxSpeedF; return procMoveInit(); } @@ -3301,6 +3421,8 @@ void daHorse_c::savePos() { } int daHorse_c::callHorseSubstance(cXyz const* i_pos) { + static const f32 initDistance2 = SQUARE(2000.0f); + int room_no = dComIfGp_roomControl_getStayNo(); if (checkStateFlg0(FLG0_RODEO_MODE) || (daAlink_c::checkStageName("F_SP108") && (room_no == 5 || room_no == 6 || room_no == 11 || room_no == 14)) || @@ -3323,7 +3445,7 @@ int daHorse_c::callHorseSubstance(cXyz const* i_pos) { } } - if (m_path != NULL && (checkStateFlg0(FLG0_NO_DRAW_WAIT) || dist_xz2 > SQUARE(2000.0f))) { + if (m_path != NULL && (checkStateFlg0(FLG0_NO_DRAW_WAIT) || dist_xz2 > initDistance2)) { daAlink_c* player = daAlink_getAlinkActorClass(); Vec* farthest_pos; Vec* path_pnt_pos; @@ -3335,7 +3457,7 @@ int daHorse_c::callHorseSubstance(cXyz const* i_pos) { f32 farthest_sqdist; f32 sqdist = (x_dist * x_dist) + (z_dist * z_dist); - if (i == 0 || (farthest_sqdist > sqdist && sqdist > SQUARE(2000.0f))) { + if (i == 0 || (farthest_sqdist > sqdist && sqdist > initDistance2)) { farthest_sqdist = sqdist; farthest_pos = path_pnt_pos; } @@ -3710,9 +3832,12 @@ int daHorse_c::procStop() { {7, 18, 26} }; + static const f32 stopEffEndFrame = 29.0f; + static const f32 stopStandEffEndFrame = 32.0f; + const unk_foot_eff_t* var_r29; daPy_frameCtrl_c* frame_ctrl = &m_frameCtrl[0]; - int var_r25 = checkHorseNoMove(1); + int var_r25 = checkHorseNoMove(TRUE); if (var_r25 == 2) { speedF = 0.0f; @@ -3763,10 +3888,10 @@ int daHorse_c::procStop() { field_0x16b7 = 2; } var_r29 = stopStandFootEffectFrame; - var_f30 = 32.0f; + var_f30 = stopStandEffEndFrame; } else { var_r29 = stopFootEffectFrame; - var_f30 = 29.0f; + var_f30 = stopEffEndFrame; } } @@ -3789,6 +3914,9 @@ int daHorse_c::procStop() { } int daHorse_c::procTurnInit(int param_0) { + static const f32 turnRateStop = DEG_TO_RAD(6); + static const f32 turnRateStand = DEG_TO_RAD(45.0f / 8.0f); + if (checkEndResetStateFlg0(ERFLG0_RIDE_RUN_FLG)) { speedF = 0.0f; return 0; @@ -3801,7 +3929,7 @@ int daHorse_c::procTurnInit(int param_0) { setSingleAnime(ANM_HS_STAND, m_hio->m.stand_anm_speed, 0.0f, -1, m_hio->m.stand_interpolation, 0); field_0x1774 = 52.0f; - field_0x1778 = 0.09817477f; + field_0x1778 = turnRateStand; field_0x177C = m_hio->m.stand_cancel_frame; field_0x1780 = 20.0f; field_0x1784 = 53.0f; @@ -3857,7 +3985,7 @@ int daHorse_c::procTurn() { onResetStateFlg0(RFLG0_ENEMY_SEARCH); } - int sp14 = checkHorseNoMove(1); + int sp14 = checkHorseNoMove(TRUE); if (m_anmIdx[0] == ANM_HS_STAND) { if (frame_ctrl->checkPass(8.0f) && !checkInputOnR()) { @@ -3945,7 +4073,7 @@ int daHorse_c::procTurn() { s16 spA = shape_angle.x; for (int i = 0; i < 8; i++) { - if (checkHorseNoMove(1) == 2) { + if (checkHorseNoMove(TRUE) == 2) { current.pos = old.pos; break; } @@ -4099,7 +4227,7 @@ int daHorse_c::procLandInit(f32 i_speedF, BOOL param_1) { int daHorse_c::procLand() { daPy_frameCtrl_c* frame_ctrl = &m_frameCtrl[0]; - int temp_r3 = checkHorseNoMove(1); + int temp_r3 = checkHorseNoMove(TRUE); if (temp_r3 == 2) { speedF = 0.0f; @@ -4242,7 +4370,7 @@ int daHorse_c::execute() { daAlink_c* player_p = daAlink_getAlinkActorClass(); #if PLATFORM_SHIELD || PLATFORM_WII - l_autoUpHeight = m_hio->m.m0D0; + l_autoUpHeight = m_hio->m.climb_step; m_acchcir[0].SetWall(l_autoUpHeight + 0.1f, 60.0f); if (checkStateFlg0(FLG0_UNK_2000)) { m_normalMaxSpeedF = m_hio->m.kakariko_max_speed; @@ -4341,7 +4469,7 @@ int daHorse_c::execute() { s16 old_angle_y = current.angle.y; for (int i = 0; i < 8; i++) { - if (checkHorseNoMove(1) == 2) { + if (checkHorseNoMove(TRUE) == 2) { current.pos -= *m_cc_stts.GetCCMoveP(); break; }