From d39a78f7cbbc53e6f546e769d3de665bcb875e38 Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 8 Apr 2024 06:57:16 -0400 Subject: [PATCH 01/13] dtilt1 --- fighters/richter/src/acmd/tilts.rs | 85 +++++++++++++++++++----- fighters/richter/src/status/attacklw3.rs | 60 ----------------- fighters/richter/src/status/mod.rs | 2 - 3 files changed, 68 insertions(+), 79 deletions(-) delete mode 100644 fighters/richter/src/status/attacklw3.rs diff --git a/fighters/richter/src/acmd/tilts.rs b/fighters/richter/src/acmd/tilts.rs index 6c1298d5c0..27ca559326 100644 --- a/fighters/richter/src/acmd/tilts.rs +++ b/fighters/richter/src/acmd/tilts.rs @@ -249,25 +249,73 @@ unsafe extern "C" fn sound_attackhi3(agent: &mut L2CAgentBase) { unsafe extern "C" fn game_attacklw3(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; - let boma = agent.boma(); frame(lua_state, 1.0); - FT_MOTION_RATE_RANGE(agent, 1.0, 7.0, 9.0); - frame(lua_state, 7.0); - FT_MOTION_RATE(agent, 1.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 9.0, 72, 65, 0, 70, 3.0, 0.0, 0.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 9.0, 72, 65, 0, 70, 3.0, 0.0, 0.0, -1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false); + WorkModule::on_flag(boma, *FIGHTER_SIMON_STATUS_ATTACK_FLAG_ENABLE_COMBO); } - frame(lua_state, 12.0); + let boma = agent.boma(); + frame(lua_state, 10.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.0, 72, 80, 0, 50, 2.5, 0.0, 0.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 5.0, 72, 80, 0, 50, 2.5, 0.0, 0.0, -1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.5, 60, 65, 0, 60, 3.0, 0.0, 0.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 5.5, 60, 65, 0, 60, 3.0, 0.0, 0.0, -1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false); } - frame(lua_state, 22.0); + frame(lua_state, 16.0); if is_excute(agent) { AttackModule::clear_all(boma); + WorkModule::off_flag(boma, *FIGHTER_SIMON_STATUS_ATTACK_FLAG_ENABLE_COMBO); + } +} + +unsafe extern "C" fn effect_attacklw3(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + frame(lua_state, 10.0); + if is_excute(agent) { + LANDING_EFFECT(agent, Hash40::new("sys_atk_smoke"), Hash40::new("top"), 8, 0, 0, 0, 0, 0, 0.6, 0, 0, 0, 0, 0, 0, false); + LAST_EFFECT_SET_RATE(agent, 0.7); + } + frame(lua_state, 16.0); + if is_excute(agent) { + LANDING_EFFECT(agent, Hash40::new("sys_sliding_smoke"), Hash40::new("top"), 7, 0, 0, 0, 0, 0, 0.8, 0, 0, 0, 0, 0, 0, false); + } + frame(lua_state, 20.0); + if is_excute(agent) { + FOOT_EFFECT(agent, Hash40::new("sys_turn_smoke"), Hash40::new("top"), 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false); + } +} + +unsafe extern "C" fn sound_attacklw3(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + frame(lua_state, 10.0); + if is_excute(agent) { + PLAY_SE(agent, Hash40::new("se_richter_attackhard_l01")); + } +} + +unsafe extern "C" fn expression_attacklw3(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + if is_excute(agent) { + slope!(agent, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_TOP, 5); + } + frame(lua_state, 5.0); + if is_excute(agent) { + slope!(agent, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_TOP, 2, true); + } + frame(lua_state, 10.0); + if is_excute(agent) { + RUMBLE_HIT(agent, Hash40::new("rbkind_attackm"), 0); + ControlModule::set_rumble(boma, Hash40::new("rbkind_nohitm"), 9, false, *BATTLE_OBJECT_ID_INVALID as u32); + } + frame(lua_state, 16.0); + if is_excute(agent) { + ControlModule::set_rumble(boma, Hash40::new("rbkind_dash"), 0, false, *BATTLE_OBJECT_ID_INVALID as u32); + } + frame(lua_state, 27.0); + if is_excute(agent) { + slope!(agent, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_LR, 6); } } @@ -288,15 +336,18 @@ unsafe extern "C" fn game_attacklw32(agent: &mut L2CAgentBase) { FT_MOTION_RATE_RANGE(agent, 7.0, 34.0, 18.0); frame(lua_state, 8.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 12.0, 55, 90, 0, 60, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 1.0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 12.0, 55, 90, 0, 60, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 1.0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 2, 0, Hash40::new("hip"), 12.0, 55, 90, 0, 60, 4.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 1.0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.5, 72, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 5.5, 72, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 2, 0, Hash40::new("hip"), 5.5, 72, 60, 0, 88, 4.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + } + frame(lua_state, 15.0); + if is_excute(agent) { + AttackModule::clear(agent.module_accessor, 2, false); } frame(lua_state, 19.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 9.0, 72, 24, 0, 63, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 9.0, 72, 24, 0, 63, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - AttackModule::clear(boma, 2, false); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 3.5, 72, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 3.5, 72, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } frame(lua_state, 26.0); if is_excute(agent) { diff --git a/fighters/richter/src/status/attacklw3.rs b/fighters/richter/src/status/attacklw3.rs deleted file mode 100644 index 0d6bf484f6..0000000000 --- a/fighters/richter/src/status/attacklw3.rs +++ /dev/null @@ -1,60 +0,0 @@ -use super::*; - -// FIGHTER_STATUS_KIND_ATTACK_LW3 - -unsafe extern "C" fn attack_lw3_main(fighter: &mut L2CFighterCommon) -> L2CValue { - fighter.status_AttackLw3(); - fighter.main_shift(attack_lw3_main_loop) -} - -unsafe extern "C" fn attack_lw3_main_loop(fighter: &mut L2CFighterCommon) -> L2CValue { - if !StatusModule::is_changing(fighter.module_accessor) { - if fighter.status_frame() == 8 && ControlModule::check_button_on(fighter.module_accessor, *CONTROL_PAD_BUTTON_ATTACK) { - fighter.change_status(FIGHTER_SIMON_STATUS_KIND_ATTACK_LW32.into(), true.into()); - return 1.into() - } - } - fighter.status_AttackLw3_Main(); - return 0.into() -} - -// FIGHTER_SIMON_STATUS_KIND_ATTACK_LW32_LANDING - -unsafe extern "C" fn attack_lw32_landing_main(fighter: &mut L2CFighterCommon) -> L2CValue { - let landing_lag = WorkModule::get_param_int(fighter.module_accessor, hash40("param_private"), hash40("attack_lw32_landing_frame")); - let anim_length = MotionModule::end_frame_from_hash(fighter.module_accessor, Hash40::new("attack_lw32_landing")); - let rate: f32 = if landing_lag > 0 { - anim_length / landing_lag as f32 - } else { - 1.0 - }; - MotionModule::change_motion(fighter.module_accessor, Hash40::new("attack_lw32_landing"), 0.0, rate, false, 0.0, false, false); - fighter.main_shift(attack_lw32_landing_main_loop) -} - -unsafe extern "C" fn attack_lw32_landing_main_loop(fighter: &mut L2CFighterCommon) -> L2CValue { - if CancelModule::is_enable_cancel(fighter.module_accessor) && (fighter.sub_wait_ground_check_common(false.into()).get_bool() || fighter.sub_air_check_fall_common().get_bool()) { - return 1.into(); - } - if MotionModule::is_end(fighter.module_accessor) { - if fighter.global_table[SITUATION_KIND] == SITUATION_KIND_GROUND { - fighter.change_status_req(*FIGHTER_STATUS_KIND_WAIT, false); - } - else { - fighter.change_status_req(*FIGHTER_STATUS_KIND_FALL, false); - } - return 1.into(); - } - // - if fighter.global_table[SITUATION_KIND] == SITUATION_KIND_AIR { - fighter.change_status_req(*FIGHTER_STATUS_KIND_FALL, false); - return 1.into(); - } - // - 0.into() -} - -pub fn install(agent: &mut Agent) { - agent.status(Main, *FIGHTER_STATUS_KIND_ATTACK_LW3, attack_lw3_main); - agent.status(Main, *FIGHTER_SIMON_STATUS_KIND_ATTACK_LW32_LANDING, attack_lw32_landing_main); -} diff --git a/fighters/richter/src/status/mod.rs b/fighters/richter/src/status/mod.rs index 2cc5058a74..27d2c2241c 100644 --- a/fighters/richter/src/status/mod.rs +++ b/fighters/richter/src/status/mod.rs @@ -1,13 +1,11 @@ use super::*; use globals::*; -mod attacklw3; mod attacks3; mod special_n; mod special_s; pub fn install(agent: &mut Agent) { - attacklw3::install(agent); attacks3::install(agent); special_n::install(agent); special_s::install(agent); From b958c0eed3fdc7c4f684e3dc211e6830c1b4cfae Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 8 Apr 2024 06:59:17 -0400 Subject: [PATCH 02/13] dtilt1 --- fighters/richter/src/acmd/tilts.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fighters/richter/src/acmd/tilts.rs b/fighters/richter/src/acmd/tilts.rs index 27ca559326..8d484e4254 100644 --- a/fighters/richter/src/acmd/tilts.rs +++ b/fighters/richter/src/acmd/tilts.rs @@ -375,5 +375,8 @@ pub fn install(agent: &mut Agent) { agent.acmd("expression_attackhi3", expression_attackhi3); agent.acmd("game_attacklw3", game_attacklw3); + agent.acmd("effect_attacklw3", effect_attacklw3); + agent.acmd("sound_attacklw3", sound_attacklw3); + agent.acmd("expression_attacklw3", expression_attacklw3); agent.acmd("game_attacklw32", game_attacklw32); } \ No newline at end of file From 776be8d6b9d9adbc1678f850113a8bb19b035bcf Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 8 Apr 2024 07:01:16 -0400 Subject: [PATCH 03/13] dtilt1 --- fighters/richter/src/acmd/tilts.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/fighters/richter/src/acmd/tilts.rs b/fighters/richter/src/acmd/tilts.rs index 8d484e4254..b8744f2ffa 100644 --- a/fighters/richter/src/acmd/tilts.rs +++ b/fighters/richter/src/acmd/tilts.rs @@ -249,6 +249,7 @@ unsafe extern "C" fn sound_attackhi3(agent: &mut L2CAgentBase) { unsafe extern "C" fn game_attacklw3(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; + let boma = agent.boma(); frame(lua_state, 1.0); if is_excute(agent) { WorkModule::on_flag(boma, *FIGHTER_SIMON_STATUS_ATTACK_FLAG_ENABLE_COMBO); From 3062c25c59d37a94548df136706908ce82d31c0a Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 8 Apr 2024 08:19:54 -0400 Subject: [PATCH 04/13] dtilt2 --- Cargo.lock | 56 +++++++++++----------- fighters/richter/src/acmd/tilts.rs | 11 +---- fighters/richter/src/status/attacklw3.rs | 60 ++++++++++++++++++++++++ fighters/richter/src/status/mod.rs | 2 + 4 files changed, 91 insertions(+), 38 deletions(-) create mode 100644 fighters/richter/src/status/attacklw3.rs diff --git a/Cargo.lock b/Cargo.lock index f3a477ca62..2b92a990d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5,7 +5,7 @@ version = 3 [[package]] name = "acmd-engine" version = "0.1.0" -source = "git+https://github.com/HDR-Development/smashline#f45fcf6d05314686d2c48e39fe3af7e0613a70ec" +source = "git+https://github.com/HDR-Development/smashline#3ad6eccb0739de4d52c23cf204245ed68b73a81b" dependencies = [ "hash40 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "locks", @@ -57,9 +57,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "f1fdabc7756949593fe60f30ec81974b613357de856987752631dea1e3394c80" [[package]] name = "bayonetta" @@ -250,7 +250,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.14", "once_cell", "tiny-keccak", ] @@ -521,9 +521,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "94b22e06ecb0110981051723910cbf0b5f5e09a2062dd7663334ee79a9d1286c" dependencies = [ "cfg-if 1.0.0", "libc", @@ -753,9 +753,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.5" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -789,9 +789,9 @@ checksum = "d3b7357d2bbc5ee92f8e899ab645233e43d21407573cceb37fed8bc3dede2c02" [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jack" @@ -940,8 +940,8 @@ dependencies = [ [[package]] name = "locks" -version = "1.2.5" -source = "git+https://github.com/HDR-Development/smashline#f45fcf6d05314686d2c48e39fe3af7e0613a70ec" +version = "1.2.6" +source = "git+https://github.com/HDR-Development/smashline#3ad6eccb0739de4d52c23cf204245ed68b73a81b" dependencies = [ "skyline 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1066,9 +1066,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" [[package]] name = "memoffset" @@ -1407,7 +1407,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.58", ] [[package]] @@ -1909,14 +1909,14 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.58", ] [[package]] name = "serde_json" -version = "1.0.114" +version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ "itoa", "ryu 1.0.17", @@ -1934,11 +1934,11 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.33" +version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0623d197252096520c6f2a5e1171ee436e5af99a5d7caa2891e55e61950e6d9" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.2.5", + "indexmap 2.2.6", "itoa", "ryu 1.0.17", "serde", @@ -2123,7 +2123,7 @@ dependencies = [ [[package]] name = "smashline" version = "0.1.0" -source = "git+https://github.com/HDR-Development/smashline#f45fcf6d05314686d2c48e39fe3af7e0613a70ec" +source = "git+https://github.com/HDR-Development/smashline#3ad6eccb0739de4d52c23cf204245ed68b73a81b" dependencies = [ "acmd-engine", "locks", @@ -2135,7 +2135,7 @@ dependencies = [ [[package]] name = "smashline-macro" version = "0.1.0" -source = "git+https://github.com/HDR-Development/smashline#f45fcf6d05314686d2c48e39fe3af7e0613a70ec" +source = "git+https://github.com/HDR-Development/smashline#3ad6eccb0739de4d52c23cf204245ed68b73a81b" dependencies = [ "proc-macro-crate", "proc-macro-error", @@ -2186,9 +2186,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.53" +version = "2.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" +checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" dependencies = [ "proc-macro2", "quote", @@ -2234,7 +2234,7 @@ checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.53", + "syn 2.0.58", ] [[package]] @@ -2273,7 +2273,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.5", + "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", @@ -2378,7 +2378,7 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.14", ] [[package]] diff --git a/fighters/richter/src/acmd/tilts.rs b/fighters/richter/src/acmd/tilts.rs index b8744f2ffa..c26949e680 100644 --- a/fighters/richter/src/acmd/tilts.rs +++ b/fighters/richter/src/acmd/tilts.rs @@ -323,18 +323,11 @@ unsafe extern "C" fn expression_attacklw3(agent: &mut L2CAgentBase) { unsafe extern "C" fn game_attacklw32(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); - frame(lua_state, 1.0); - FT_MOTION_RATE_RANGE(agent, 1.0, 5.0, 6.0); - frame(lua_state, 5.0); - FT_MOTION_RATE(agent, 1.0); frame(lua_state, 6.0); if is_excute(agent) { JostleModule::set_status(boma, false); WorkModule::on_flag(boma, *FIGHTER_SIMON_STATUS_ATTACK_LW32_WORK_ID_FLAG_LANDING_AIR); } - frame(lua_state, 7.0); - sv_kinetic_energy!(set_speed_mul, agent, FIGHTER_KINETIC_ENERGY_ID_MOTION, 0.8); - FT_MOTION_RATE_RANGE(agent, 7.0, 34.0, 18.0); frame(lua_state, 8.0); if is_excute(agent) { ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.5, 72, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); @@ -350,13 +343,11 @@ unsafe extern "C" fn game_attacklw32(agent: &mut L2CAgentBase) { ATTACK(agent, 0, 0, Hash40::new("kneel"), 3.5, 72, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 1, 0, Hash40::new("footl"), 3.5, 72, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } - frame(lua_state, 26.0); + frame(lua_state, 24.0); if is_excute(agent) { AttackModule::clear_all(boma); JostleModule::set_status(boma, true); } - frame(lua_state, 34.0); - FT_MOTION_RATE(agent, 1.0); } pub fn install(agent: &mut Agent) { diff --git a/fighters/richter/src/status/attacklw3.rs b/fighters/richter/src/status/attacklw3.rs new file mode 100644 index 0000000000..e87b719986 --- /dev/null +++ b/fighters/richter/src/status/attacklw3.rs @@ -0,0 +1,60 @@ +use super::*; + +// FIGHTER_STATUS_KIND_ATTACK_LW3 + +unsafe extern "C" fn attack_lw3_main(fighter: &mut L2CFighterCommon) -> L2CValue { + fighter.status_AttackLw3(); + fighter.main_shift(attack_lw3_main_loop) +} + +unsafe extern "C" fn attack_lw3_main_loop(fighter: &mut L2CFighterCommon) -> L2CValue { + if !StatusModule::is_changing(fighter.module_accessor) { + if fighter.status_frame() == 15 && ControlModule::check_button_on(fighter.module_accessor, *CONTROL_PAD_BUTTON_ATTACK) { + fighter.change_status(FIGHTER_SIMON_STATUS_KIND_ATTACK_LW32.into(), true.into()); + return 1.into() + } + } + fighter.status_AttackLw3_Main(); + return 0.into() +} + +// FIGHTER_SIMON_STATUS_KIND_ATTACK_LW32_LANDING + +unsafe extern "C" fn attack_lw32_landing_main(fighter: &mut L2CFighterCommon) -> L2CValue { + let landing_lag = WorkModule::get_param_int(fighter.module_accessor, hash40("param_private"), hash40("attack_lw32_landing_frame")); + let anim_length = MotionModule::end_frame_from_hash(fighter.module_accessor, Hash40::new("attack_lw32_landing")); + let rate: f32 = if landing_lag > 0 { + anim_length / landing_lag as f32 + } else { + 1.0 + }; + MotionModule::change_motion(fighter.module_accessor, Hash40::new("attack_lw32_landing"), 0.0, rate, false, 0.0, false, false); + fighter.main_shift(attack_lw32_landing_main_loop) +} + +unsafe extern "C" fn attack_lw32_landing_main_loop(fighter: &mut L2CFighterCommon) -> L2CValue { + if CancelModule::is_enable_cancel(fighter.module_accessor) && (fighter.sub_wait_ground_check_common(false.into()).get_bool() || fighter.sub_air_check_fall_common().get_bool()) { + return 1.into(); + } + if MotionModule::is_end(fighter.module_accessor) { + if fighter.global_table[SITUATION_KIND] == SITUATION_KIND_GROUND { + fighter.change_status_req(*FIGHTER_STATUS_KIND_WAIT, false); + } + else { + fighter.change_status_req(*FIGHTER_STATUS_KIND_FALL, false); + } + return 1.into(); + } + // + if fighter.global_table[SITUATION_KIND] == SITUATION_KIND_AIR { + fighter.change_status_req(*FIGHTER_STATUS_KIND_FALL, false); + return 1.into(); + } + // + 0.into() +} + +pub fn install(agent: &mut Agent) { + agent.status(Main, *FIGHTER_STATUS_KIND_ATTACK_LW3, attack_lw3_main); + agent.status(Main, *FIGHTER_SIMON_STATUS_KIND_ATTACK_LW32_LANDING, attack_lw32_landing_main); +} diff --git a/fighters/richter/src/status/mod.rs b/fighters/richter/src/status/mod.rs index 27d2c2241c..2cc5058a74 100644 --- a/fighters/richter/src/status/mod.rs +++ b/fighters/richter/src/status/mod.rs @@ -1,11 +1,13 @@ use super::*; use globals::*; +mod attacklw3; mod attacks3; mod special_n; mod special_s; pub fn install(agent: &mut Agent) { + attacklw3::install(agent); attacks3::install(agent); special_n::install(agent); special_s::install(agent); From 0c63119934b11ef1414691924b7e4fd1a1f3d507 Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 8 Apr 2024 08:37:13 -0400 Subject: [PATCH 05/13] dtil1 crossup, bounces --- fighters/richter/src/opff.rs | 82 +++++++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 21 deletions(-) diff --git a/fighters/richter/src/opff.rs b/fighters/richter/src/opff.rs index ac9f98411f..5f3944757e 100644 --- a/fighters/richter/src/opff.rs +++ b/fighters/richter/src/opff.rs @@ -4,6 +4,43 @@ use super::*; use globals::*; use skyline_smash::app::lua_bind::ControlModule::clear_command_one; +//dtilt1 crossup prevention +unsafe fn dtilt1_crossup_prevention(fighter: &mut L2CFighterCommon) { + if fighter.is_motion(Hash40::new("attack_lw3")) + && AttackModule::is_infliction(fighter.module_accessor, *COLLISION_KIND_MASK_SHIELD) { + sv_kinetic_energy!(set_speed_mul, fighter, FIGHTER_KINETIC_ENERGY_ID_MOTION, 0.4); + } +} + +// dtilt bounce +unsafe fn dtilt_bounce(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectModuleAccessor){ + if fighter.is_motion(Hash40::new("attack_lw32")) && fighter.motion_frame() > 1.0 { + let mut speed = -0.2; + if fighter.motion_frame() < 18.0 { + speed = -0.1; + } + if AttackModule::is_infliction(fighter.module_accessor, *COLLISION_KIND_MASK_HIT | *COLLISION_KIND_MASK_SHIELD) { + MotionModule::change_motion(fighter.module_accessor, Hash40::new("attack_air_lw2"), 0.0, 1.0, false, 0.0, false, false); + KineticModule::clear_speed_energy_id(fighter.module_accessor, *FIGHTER_KINETIC_ENERGY_ID_GRAVITY); + KineticModule::add_speed(fighter.module_accessor, &Vector3f::new(0.0, speed, 0.0)); + KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_FALL); + sv_kinetic_energy!(controller_set_accel_x_mul, fighter, 0.02/*Base Air Acceleration*/); //Set to half of Richter's base acceleration + sv_kinetic_energy!(controller_set_accel_x_add, fighter, 0.01/*Additional Air Acceleration*/); + sv_kinetic_energy!(set_limit_speed, fighter, *FIGHTER_KINETIC_ENERGY_ID_CONTROL, 0.9/*Maximum Horizontal Air Speed*/, 0.0); //Set to slightly less than vanilla air speed + WorkModule::off_flag(boma, *FIGHTER_SIMON_STATUS_ATTACK_LW32_WORK_ID_FLAG_LANDING_AIR); + } + } +} + +// dair bounce height and accel +unsafe fn dair_bounce(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectModuleAccessor){ + if fighter.is_motion(Hash40::new("attack_air_lw2")) && fighter.motion_frame() > 1.0 { + sv_kinetic_energy!(controller_set_accel_x_mul, fighter, 0.02/*Base Air Acceleration*/); //Set to half of Richter's base acceleration + sv_kinetic_energy!(controller_set_accel_x_add, fighter, 0.01/*Additional Air Acceleration*/); + sv_kinetic_energy!(set_limit_speed, fighter, *FIGHTER_KINETIC_ENERGY_ID_CONTROL, 0.9/*Maximum Horizontal Air Speed*/, 0.0); //Set to slightly less than vanilla air speed + } +} + // knife drift unsafe fn knife_drift(boma: &mut BattleObjectModuleAccessor) { if boma.is_status(*FIGHTER_STATUS_KIND_SPECIAL_N) @@ -13,26 +50,26 @@ unsafe fn knife_drift(boma: &mut BattleObjectModuleAccessor) { } // knife land cancel -unsafe fn knife_lc(boma: &mut BattleObjectModuleAccessor) { - if StatusModule::is_changing(boma) { - return; - } - if boma.is_status(*FIGHTER_STATUS_KIND_SPECIAL_N) - && VarModule::is_flag(boma.object(), vars::richter::instance::SPECIAL_N_LAND_CANCEL) - && boma.is_situation(*SITUATION_KIND_GROUND) { - // remove the unthrown knife from richter's hand - if (2.0..13.0).contains(&boma.motion_frame()) - && ArticleModule::is_exist(boma, *FIGHTER_SIMON_GENERATE_ARTICLE_AXE){ - ArticleModule::remove_exist(boma, *FIGHTER_SIMON_GENERATE_ARTICLE_AXE, ArticleOperationTarget(*ARTICLE_OPE_TARGET_ALL)); - } - - let landing_lag = 10.0; // amount of frames until richter can act when landing - let rate = 27.0 / landing_lag; - MotionModule::change_motion(boma, Hash40::new("landing_fall_special"), 0.0, rate, false, 0.0, false, false); - VarModule::off_flag(boma.object(), vars::richter::instance::SPECIAL_N_LAND_CANCEL); - EffectModule::kill_kind(boma, Hash40::new("sys_sp_flash"), true, true); - } -} +//unsafe fn knife_lc(boma: &mut BattleObjectModuleAccessor) { +// if StatusModule::is_changing(boma) { +// return; +// } +// if boma.is_status(*FIGHTER_STATUS_KIND_SPECIAL_N) +// && VarModule::is_flag(boma.object(), vars::richter::instance::SPECIAL_N_LAND_CANCEL) +// && boma.is_situation(*SITUATION_KIND_GROUND) { +// // remove the unthrown knife from richter's hand +// if (2.0..13.0).contains(&boma.motion_frame()) +// && ArticleModule::is_exist(boma, *FIGHTER_SIMON_GENERATE_ARTICLE_AXE){ +// ArticleModule::remove_exist(boma, *FIGHTER_SIMON_GENERATE_ARTICLE_AXE, ArticleOperationTarget(*ARTICLE_OPE_TARGET_ALL)); +// } +// +// let landing_lag = 10.0; // amount of frames until richter can act when landing +// let rate = 27.0 / landing_lag; +// MotionModule::change_motion(boma, Hash40::new("landing_fall_special"), 0.0, rate, false, 0.0, false, false); +// VarModule::off_flag(boma.object(), vars::richter::instance::SPECIAL_N_LAND_CANCEL); +// EffectModule::kill_kind(boma, Hash40::new("sys_sp_flash"), true, true); +// } +//} // allow fair and bair to transition into their angled variants when the stick is angled up/down unsafe fn whip_angling(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectModuleAccessor, frame: f32, stick_y: f32) { @@ -92,8 +129,11 @@ unsafe fn fastfall_specials(fighter: &mut L2CFighterCommon) { } pub unsafe fn moveset(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectModuleAccessor, id: usize, cat: [i32 ; 4], status_kind: i32, situation_kind: i32, motion_kind: u64, stick_x: f32, stick_y: f32, facing: f32, frame: f32) { + dtilt1_crossup_prevention(fighter); + dtilt_bounce(fighter, boma); + dair_bounce(fighter, boma); knife_drift(boma); - knife_lc(boma); +// knife_lc(boma); whip_angling(fighter, boma, frame, stick_y); fastfall_specials(fighter); } From 45b82c064400f2966cf3d3aa304b61a38a59ce96 Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 8 Apr 2024 08:38:57 -0400 Subject: [PATCH 06/13] dair bounce height pt 2 --- fighters/richter/src/acmd/aerials.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/fighters/richter/src/acmd/aerials.rs b/fighters/richter/src/acmd/aerials.rs index beb6d00ff0..df471b1a5a 100644 --- a/fighters/richter/src/acmd/aerials.rs +++ b/fighters/richter/src/acmd/aerials.rs @@ -423,6 +423,22 @@ unsafe extern "C" fn game_attackairlw(agent: &mut L2CAgentBase) { } } +unsafe extern "C" fn game_attackairlw2(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + if is_excute(agent) { + FT_MOTION_RATE(agent, 1.0); + AttackModule::clear_all(boma); + SET_SPEED_EX(agent, 0.0, 2.6, *KINETIC_ENERGY_RESERVE_ATTRIBUTE_MAIN); + WorkModule::off_flag(boma, *FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_GRAVITY_STABLE_UNABLE); + KineticModule::resume_energy(boma, *FIGHTER_KINETIC_ENERGY_ID_CONTROL); + } + frame(lua_state, 39.0); + if is_excute(agent) { + notify_event_msc_cmd!(agent, Hash40::new_raw(0x2127e37c07), *GROUND_CLIFF_CHECK_KIND_ALWAYS_BOTH_SIDES); + } +} + unsafe extern "C" fn effect_attackairlw2(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); @@ -477,5 +493,6 @@ pub fn install(agent: &mut Agent) { agent.acmd("expression_attackairhi", expression_attackairhi); agent.acmd("game_attackairlw", game_attackairlw); + agent.acmd("game_attackairlw2", game_attackairlw2); agent.acmd("effect_attackairlw2", effect_attackairlw2); } \ No newline at end of file From 368721368fa72eb2c312dc1b4d2886ea6eb9d255 Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 8 Apr 2024 15:03:58 -0400 Subject: [PATCH 07/13] dtilt done --- fighters/richter/src/acmd/tilts.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fighters/richter/src/acmd/tilts.rs b/fighters/richter/src/acmd/tilts.rs index c26949e680..90346026f5 100644 --- a/fighters/richter/src/acmd/tilts.rs +++ b/fighters/richter/src/acmd/tilts.rs @@ -271,16 +271,16 @@ unsafe extern "C" fn game_attacklw3(agent: &mut L2CAgentBase) { unsafe extern "C" fn effect_attacklw3(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); - frame(lua_state, 10.0); + frame(lua_state, 8.0); if is_excute(agent) { LANDING_EFFECT(agent, Hash40::new("sys_atk_smoke"), Hash40::new("top"), 8, 0, 0, 0, 0, 0, 0.6, 0, 0, 0, 0, 0, 0, false); LAST_EFFECT_SET_RATE(agent, 0.7); } - frame(lua_state, 16.0); + frame(lua_state, 12.0); if is_excute(agent) { LANDING_EFFECT(agent, Hash40::new("sys_sliding_smoke"), Hash40::new("top"), 7, 0, 0, 0, 0, 0, 0.8, 0, 0, 0, 0, 0, 0, false); } - frame(lua_state, 20.0); + frame(lua_state, 16.0); if is_excute(agent) { FOOT_EFFECT(agent, Hash40::new("sys_turn_smoke"), Hash40::new("top"), 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false); } @@ -289,7 +289,7 @@ unsafe extern "C" fn effect_attacklw3(agent: &mut L2CAgentBase) { unsafe extern "C" fn sound_attacklw3(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); - frame(lua_state, 10.0); + frame(lua_state, 8.0); if is_excute(agent) { PLAY_SE(agent, Hash40::new("se_richter_attackhard_l01")); } From 22d88c0d2f29fdddb19884e88c85678149c7ea76 Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 8 Apr 2024 16:22:33 -0400 Subject: [PATCH 08/13] dacus --- romfs/source/fighter/common/hdr/param/fighter_param.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/romfs/source/fighter/common/hdr/param/fighter_param.xml b/romfs/source/fighter/common/hdr/param/fighter_param.xml index ea1f7021b0..9f7dc457bf 100644 --- a/romfs/source/fighter/common/hdr/param/fighter_param.xml +++ b/romfs/source/fighter/common/hdr/param/fighter_param.xml @@ -412,8 +412,8 @@ RICHTER -1.0 - 1.0 - 1.0 + 1.3 + 1.3 KROOL From b3e64ffad3d195823d0e93b55458073aee001c19 Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Sun, 14 Apr 2024 20:17:18 -0400 Subject: [PATCH 09/13] the rest i think --- fighters/richter/src/acmd/aerials.rs | 57 +++++++++++----- fighters/richter/src/acmd/ground.rs | 22 ++++--- fighters/richter/src/acmd/smashes.rs | 11 ++-- fighters/richter/src/acmd/specials.rs | 34 ++++++++-- fighters/richter/src/acmd/tilts.rs | 65 +++++++++++++------ fighters/richter/src/axe/acmd.rs | 16 +++-- fighters/richter/src/opff.rs | 8 +-- fighters/simon/src/acmd/ground.rs | 8 +++ .../common/hdr/param/fighter_param.xml | 8 +-- .../richter/motion/body/motion_patch.yaml | 10 +-- 10 files changed, 166 insertions(+), 73 deletions(-) diff --git a/fighters/richter/src/acmd/aerials.rs b/fighters/richter/src/acmd/aerials.rs index df471b1a5a..da0e55aa71 100644 --- a/fighters/richter/src/acmd/aerials.rs +++ b/fighters/richter/src/acmd/aerials.rs @@ -250,15 +250,15 @@ unsafe extern "C" fn game_attackairb(agent: &mut L2CAgentBase) { } frame(lua_state, 13.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 13.0, 361, 90, 0, 35, 3.0, 0.0, 12.4, -5.6, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); - ATTACK(agent, 1, 0, Hash40::new("top"), 13.0, 361, 90, 0, 35, 3.5, 0.0, 10.0, -8.8, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); - ATTACK(agent, 2, 0, Hash40::new("top"), 15.0, 361, 90, 0, 35, 4.5, 0.0, 7.9, -14.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_HEAVY, *ATTACK_REGION_PUNCH); + ATTACK(agent, 0, 0, Hash40::new("top"), 13.0, 361, 90, 0, 35, 3.5, 0.0, 11.4, -4.4, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); + ATTACK(agent, 1, 0, Hash40::new("top"), 13.0, 361, 90, 0, 35, 3.8, 0.0, 9.4, -8.4, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); + ATTACK(agent, 2, 0, Hash40::new("top"), 15.0, 361, 90, 0, 35, 4.9, 0.0, 7.1, -13.8, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_HEAVY, *ATTACK_REGION_PUNCH); } frame(lua_state, 16.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 10.0, 361, 90, 0, 35, 2.5, 0.0, 12.4, -5.6, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); - ATTACK(agent, 1, 0, Hash40::new("top"), 10.0, 361, 90, 0, 35, 3.0, 0.0, 10.0, -8.8, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); - ATTACK(agent, 2, 0, Hash40::new("top"), 10.0, 361, 90, 0, 35, 3.5, 0.0, 7.9, -14.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); + ATTACK(agent, 0, 0, Hash40::new("top"), 10.0, 361, 90, 0, 35, 3.2, 0.0, 11.4, -4.4, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); + ATTACK(agent, 1, 0, Hash40::new("top"), 10.0, 361, 90, 0, 35, 3.5, 0.0, 9.4, -8.4, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); + ATTACK(agent, 2, 0, Hash40::new("top"), 10.0, 361, 90, 0, 35, 4.0, 0.0, 7.1, -13.7, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); } frame(lua_state, 22.0); if is_excute(agent) { @@ -279,13 +279,13 @@ unsafe extern "C" fn effect_attackairb(agent: &mut L2CAgentBase) { } frame(lua_state, 14.0); if is_excute(agent) { - EFFECT_FOLLOW_ALPHA(agent, Hash40::new("sys_attack_speedline"), Hash40::new("top"), -1, 12, -5.7, -216, 9, 0, 0.5, true, 0.8); + EFFECT_FOLLOW_ALPHA(agent, Hash40::new("sys_attack_speedline"), Hash40::new("top"), -1, 11.4, -5.7, -213, 9, 0, 0.65, true, 1.0); LAST_EFFECT_SET_RATE(agent, 1.0); LAST_EFFECT_SET_COLOR(agent, 0.769, 0.769, 0.769); } frame(lua_state, 14.0); if is_excute(agent) { - EFFECT_FOLLOW_ALPHA(agent, Hash40::new("sys_attack_impact"), Hash40::new("top"), 0, 7.4, -13.9, 0, 0, 0, 1.0, true, 0.9); + EFFECT_FOLLOW_ALPHA(agent, Hash40::new("sys_attack_impact"), Hash40::new("top"), 0, 7.2, -13.9, 0, 0, 0, 1.0, true, 1.0); LAST_EFFECT_SET_COLOR(agent, 0.769, 0.769, 0.769); } } @@ -317,6 +317,15 @@ unsafe extern "C" fn expression_attackairb(agent: &mut L2CAgentBase) { } } +unsafe extern "C" fn effect_landingairb(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + if is_excute(agent) { + EffectModule::kill_kind(boma, Hash40::new("sys_attack_impact"), true, true); + EffectModule::kill_kind(boma, Hash40::new("sys_attack_speedline"), true, true); + } +} + unsafe extern "C" fn game_attackairhi(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); @@ -327,7 +336,7 @@ unsafe extern "C" fn game_attackairhi(agent: &mut L2CAgentBase) { frame(lua_state, 6.0); if is_excute(agent) { ATTACK(agent, 0, 0, Hash40::new("legr"), 8.0, 57, 60, 0, 40, 4.0, 1.5, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("kneer"), 8.0, 57, 60, 0, 40, 4.5, 3.5, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("kneer"), 8.0, 57, 60, 0, 40, 5.0, 3.5, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } frame(lua_state, 14.0); if is_excute(agent) { @@ -344,9 +353,9 @@ unsafe extern "C" fn effect_attackairhi(agent: &mut L2CAgentBase) { let boma = agent.boma(); frame(lua_state, 6.0); if is_excute(agent) { - EFFECT_FOLLOW(agent, Hash40::new("sys_attack_arc_d"), Hash40::new("top"), 0, 11.5, 1.5, 0, 60, 90, 0.85, true); + EFFECT_FOLLOW(agent, Hash40::new("sys_attack_arc_d"), Hash40::new("top"), 0, 11.5, 1.1, 0, 60, 90, 0.80, true); LAST_EFFECT_SET_COLOR(agent, 0.902, 0.784, 0.333); - LAST_EFFECT_SET_RATE(agent, 1.0); + LAST_EFFECT_SET_RATE(agent, 1.2); } frame(lua_state, 14.0); if is_excute(agent) { @@ -390,6 +399,11 @@ unsafe extern "C" fn game_attackairlw(agent: &mut L2CAgentBase) { frame(lua_state, 4.0); if is_excute(agent) { WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_AIR_FLAG_ENABLE_LANDING); + FT_MOTION_RATE(agent, 0.5); + } + frame(lua_state, 5.0); + if is_excute(agent) { + FT_MOTION_RATE(agent, 1.0); } frame(lua_state, 15.0); if is_excute(agent) { @@ -401,14 +415,24 @@ unsafe extern "C" fn game_attackairlw(agent: &mut L2CAgentBase) { frame(lua_state, 16.0); if is_excute(agent) { /* Ground-only */ - ATTACK(agent, 0, 0, Hash40::new("top"), 12.0, 280, 85, 0, 35, 5.5, 0.0, 1.0, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("legl"), 12.0, 280, 85, 0, 35, 3.4, 0.0, 0.0, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("kneel"), 12.0, 280, 85, 0, 35, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 2, 0, Hash40::new("footl"), 12.0, 280, 85, 0, 35, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); /* Air-only */ - ATTACK(agent, 1, 0, Hash40::new("top"), 12.0, 280, 53, 0, 35, 5.5, 0.0, 0.0, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 3, 0, Hash40::new("legl"), 12.0, 280, 53, 0, 35, 3.4, 0.0, 0.0, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 4, 0, Hash40::new("kneel"), 12.0, 280, 53, 0, 35, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 5, 0, Hash40::new("footl"), 12.0, 280, 53, 0, 35, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + } wait(lua_state, 2.0); if is_excute(agent) { - AttackModule::clear(boma, 1, false); - ATTACK(agent, 0, 0, Hash40::new("top"), 9.0, 72, 55, 0, 88, 6.5, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + AttackModule::clear(boma, 3, false); + AttackModule::clear(boma, 4, false); + AttackModule::clear(boma, 5, false); + ATTACK(agent, 0, 0, Hash40::new("legl"), 9.0, 72, 55, 0, 88, 3.4, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("kneel"), 9.0, 72, 55, 0, 88, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 2, 0, Hash40::new("footl"), 9.0, 72, 55, 0, 88, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + } frame(lua_state, 40.0); if is_excute(agent) { @@ -429,7 +453,7 @@ unsafe extern "C" fn game_attackairlw2(agent: &mut L2CAgentBase) { if is_excute(agent) { FT_MOTION_RATE(agent, 1.0); AttackModule::clear_all(boma); - SET_SPEED_EX(agent, 0.0, 2.6, *KINETIC_ENERGY_RESERVE_ATTRIBUTE_MAIN); + SET_SPEED_EX(agent, 0.0, 2.55, *KINETIC_ENERGY_RESERVE_ATTRIBUTE_MAIN); WorkModule::off_flag(boma, *FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_GRAVITY_STABLE_UNABLE); KineticModule::resume_energy(boma, *FIGHTER_KINETIC_ENERGY_ID_CONTROL); } @@ -486,6 +510,7 @@ pub fn install(agent: &mut Agent) { agent.acmd("effect_attackairblw", effect_attackairb); agent.acmd("sound_attackairblw", sound_attackairb); agent.acmd("expression_attackairblw", expression_attackairb); + agent.acmd("effect_landingairb", effect_landingairb); agent.acmd("game_attackairhi", game_attackairhi); agent.acmd("effect_attackairhi", effect_attackairhi); diff --git a/fighters/richter/src/acmd/ground.rs b/fighters/richter/src/acmd/ground.rs index 4c5717f5f1..4ef8c6972d 100644 --- a/fighters/richter/src/acmd/ground.rs +++ b/fighters/richter/src/acmd/ground.rs @@ -33,6 +33,10 @@ unsafe extern "C" fn effect_attack11(agent: &mut L2CAgentBase) { EFFECT_FOLLOW(agent, Hash40::new("sys_attack_arc_d"), Hash40::new("top"), 1, 9.5, 2.2, 13, -29, 154, 0.8, true); LAST_EFFECT_SET_RATE(agent, 2.0); } + frame(lua_state, 8.0); + if is_excute(agent) { + EffectModule::kill_kind(boma, Hash40::new("sys_attack_arc_d"), true, true); + } } unsafe extern "C" fn sound_attack11(agent: &mut L2CAgentBase) { @@ -56,6 +60,8 @@ unsafe extern "C" fn game_attack12(agent: &mut L2CAgentBase) { ATTACK(agent, 3, 0, Hash40::new("top"), 3.0, 361, 25, 0, 25, 3.0, 0.0, 5.0, 1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 4, 0, Hash40::new("top"), 3.0, 361, 25, 0, 25, 3.25, 0.0, 4.0, 5.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 5, 0, Hash40::new("top"), 3.0, 361, 25, 0, 25, 3.5, 0.0, 3.0, 10.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 6, 0, Hash40::new("top"), 3.0, 361, 25, 0, 25, 2.0, 0.0, 6.5, 3.0, Some(0.0), Some(6.5), Some(10.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + AttackModule::set_down_only(boma, 3, false); AttackModule::set_down_only(boma, 4, false); AttackModule::set_down_only(boma, 5, false); @@ -84,7 +90,7 @@ unsafe extern "C" fn effect_attack12(agent: &mut L2CAgentBase) { } frame(lua_state, 5.0); if is_excute(agent) { - EFFECT_FOLLOW(agent, Hash40::new("sys_attack_speedline"), Hash40::new("top"), 0, 4, 2.5, 9, -6.2, 0, 0.45, true); + EFFECT_FOLLOW(agent, Hash40::new("sys_attack_speedline"), Hash40::new("top"), 0, 4.5, 2.5, 9, -6.2, 0, 0.57, true); LAST_EFFECT_SET_COLOR(agent, 0.902, 0.784, 0.333); COL_NORMAL(agent); } @@ -104,13 +110,13 @@ unsafe extern "C" fn game_attack13(agent: &mut L2CAgentBase) { let boma = agent.boma(); frame(lua_state, 4.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 5.0, 65, 80, 0, 60, 4.0, 0.0, 9.8, 10.0, Some(0.0), Some(6.0), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 5.0, 65, 80, 0, 60, 4.0, 0.0, 10.8, 10.0, Some(0.0), Some(6.0), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 5.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 5.0, 65, 80, 0, 60, 4.0, 0.0, 21.0, 9.0, Some(0.0), Some(10.0), Some(7.75), 1.0, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 5.0, 65, 80, 0, 60, 4.0, 0.0, 22.5, 9.0, Some(0.0), Some(10.0), Some(7.75), 1.0, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } - frame(lua_state, 12.0); + frame(lua_state, 10.0); if is_excute(agent) { AttackModule::clear_all(boma); } @@ -129,17 +135,17 @@ unsafe extern "C" fn richter_attack_13_effect(agent: &mut L2CAgentBase) { } frame(lua_state, 4.0); if is_excute(agent) { - EFFECT_FLW_POS(agent, Hash40::new("richter_upper"), Hash40::new("havel"), 0, 0, 0, 0, 0, 0, 0.6, true); - LAST_EFFECT_SET_RATE(agent, 1.0); + EFFECT_FLW_POS(agent, Hash40::new("richter_upper"), Hash40::new("havel"), 0, 0, 0, 0, 0, 0, 0.57, true); + LAST_EFFECT_SET_RATE(agent, 1.2); LAST_EFFECT_SET_ALPHA(agent, 0.5); FOOT_EFFECT(agent, Hash40::new("sys_atk_smoke2"), Hash40::new("top"), 0, 0, -1.0, 0, 0, 0, 0.6, 0, 0, 0, 0, 0, 0, false); LAST_EFFECT_SET_RATE(agent, 1.0); COL_NORMAL(agent); } - frame(lua_state, 12.0); + frame(lua_state, 10.0); if is_excute(agent) { - EFFECT_OFF_KIND(agent, Hash40::new("richter_upper"), true, true); + EffectModule::kill_kind(boma, Hash40::new("richter_upper"), true, true); } frame(lua_state, 18.0); if is_excute(agent) { diff --git a/fighters/richter/src/acmd/smashes.rs b/fighters/richter/src/acmd/smashes.rs index a6881a56d0..1e38a05d1e 100644 --- a/fighters/richter/src/acmd/smashes.rs +++ b/fighters/richter/src/acmd/smashes.rs @@ -240,15 +240,12 @@ unsafe extern "C" fn effect_attackhi4(agent: &mut L2CAgentBase) { if is_excute(agent) { EFFECT(agent, Hash40::new("sys_smash_flash"), Hash40::new("top"), 0, 17, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false); } - frame(lua_state, 15.0); + frame(lua_state, 17.0); if is_excute(agent) { EFFECT_FOLLOW(agent, Hash40::new("sys_whirlwind_l"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 0.8, false); LAST_EFFECT_SET_RATE(agent, 1.0); LAST_EFFECT_SET_ALPHA(agent, 1.0); - } - frame(lua_state, 16.0); - if is_excute(agent) { - EFFECT(agent, Hash40::new("richter_whip_hi3"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1.025, 0, 0, 0, 0, 0, 0, true); + EFFECT(agent, Hash40::new("richter_whip_hi3"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, true); LAST_EFFECT_SET_COLOR(agent, 1.0, 1.0, 1.0); } } @@ -259,11 +256,11 @@ unsafe extern "C" fn sound_attackhi4(agent: &mut L2CAgentBase) { if is_excute(agent) { PLAY_SE(agent, Hash40::new("se_richter_whip_holding")); } - frame(lua_state, 14.0); + frame(lua_state, 16.0); if is_excute(agent) { PLAY_SE(agent, Hash40::new("se_richter_attackhard_h01")); } - frame(lua_state, 16.0); + frame(lua_state, 17.0); if is_excute(agent) { PLAY_SE(agent, Hash40::new("vc_richter_attack05")); PLAY_SE(agent, Hash40::new("se_richter_attackhard_s01")); diff --git a/fighters/richter/src/acmd/specials.rs b/fighters/richter/src/acmd/specials.rs index 5a55c275be..fdf32cb389 100644 --- a/fighters/richter/src/acmd/specials.rs +++ b/fighters/richter/src/acmd/specials.rs @@ -203,23 +203,45 @@ unsafe extern "C" fn game_specialhi(agent: &mut L2CAgentBase) { } frame(lua_state, 6.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("handl"), 13.0, 71, 78, 0, 67, 4.0, 0.0, 0.0, 0.0, None, None, None, 1.2, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); - ATTACK(agent, 1, 0, Hash40::new("havel"), 13.0, 71, 78, 0, 67, 4.0, 5.0, 0.0, 0.0, None, None, None, 1.2, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 13.0, 71, 78, 0, 67, 5.9, 0.0, 9.8, 10.7, None, None, None, 1.0, 0.5, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 7.0); if is_excute(agent) { WorkModule::on_flag(boma, *FIGHTER_MARTH_STATUS_SPECIAL_HI_FLAG_TRANS_MOVE); + ATTACK(agent, 0, 0, Hash40::new("top"), 13.0, 71, 78, 0, 67, 4.0, 0.0, 19.0, 11.9, Some(0.0), Some(11.0), Some(9.9), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 8.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("handl"), 7.0, 71, 90, 0, 65, 4.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); - ATTACK(agent, 1, 0, Hash40::new("havel"), 7.0, 71, 90, 0, 65, 4.0, 5.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.8, 0.0, 23.3, 11.2, Some(0.0), Some(11.5), Some(10.0), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); notify_event_msc_cmd!(agent, Hash40::new_raw(0x2127e37c07), *GROUND_CLIFF_CHECK_KIND_ALWAYS); } frame(lua_state, 9.0); if is_excute(agent) { - ATTACK(agent, 1, 0, Hash40::new("havel"), 7.0, 71, 90, 0, 65, 4.0, 5.0, 3.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); - ATTACK(agent, 2, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 2.5, 0.0, 17.0, 6.0, Some(0.0), Some(17.0), Some(9.0), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.6, 0.0, 26.0, 9.6, Some(0.0), Some(12.8), Some(7.4), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + } + frame(lua_state, 10.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 28.5, 9.9, Some(0.0), Some(13.5), Some(7.7), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + } + frame(lua_state, 11.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 29.5, 9.7, Some(0.0), Some(14.0), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + } + frame(lua_state, 12.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.3, 0.0, 31.5, 9.7, Some(0.0), Some(15.8), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + } + frame(lua_state, 15.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.3, 0.0, 30.0, 9.7, Some(0.0), Some(15.5), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + } + frame(lua_state, 16.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 27.0, 9.5, Some(0.0), Some(13.5), Some(7.2), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + } + frame(lua_state, 18.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.0, 0.0, 27.0, 9.5, Some(0.0), Some(13.5), Some(7.2), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 20.0); if is_excute(agent) { diff --git a/fighters/richter/src/acmd/tilts.rs b/fighters/richter/src/acmd/tilts.rs index 90346026f5..b1c7b5b846 100644 --- a/fighters/richter/src/acmd/tilts.rs +++ b/fighters/richter/src/acmd/tilts.rs @@ -84,7 +84,7 @@ unsafe extern "C" fn game_attacksquats3(agent: &mut L2CAgentBase) { let boma = agent.boma(); frame(lua_state, 12.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 10.0, 110, 45, 0, 75, 3.8, 0.0, 7.0, 31.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, false, 1.0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_aura"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 10.0, 120, 45, 0, 75, 3.8, 0.0, 7.0, 31.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, false, 1.0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_aura"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_WHIP); ATTACK(agent, 1, 0, Hash40::new("top"), 4.0, 361, 50, 0, 50, 4.6, 0.0, 7.0, 7.0, None, None, None, 0.8, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_PUNCH); ATTACK(agent, 2, 0, Hash40::new("top"), 6.0, 361, 40, 0, 60, 2.3, 0.0, 7.0, 7.0, Some(0.0), Some(7.0), Some(29.0), 0.8, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_RICHTER_WHIP, *ATTACK_REGION_WHIP); } @@ -159,7 +159,15 @@ unsafe extern "C" fn game_attackhi3(agent: &mut L2CAgentBase) { let boma = agent.boma(); frame(lua_state, 11.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 100, 80, 0, 50, 4.5, 0.0, 9.5, 8.5, Some(0.0), Some(13.0), Some(8.6), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_RICHTER_WHIP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 100, 80, 0, 50, 4.5, 0.0, 7.5, 8.5, Some(0.0), Some(10.0), Some(8.6), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_RICHTER_WHIP, *ATTACK_REGION_WHIP); + } + frame(lua_state, 12.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 100, 80, 0, 50, 4.5, 0.0, 10.0, 8.5, Some(0.0), Some(14.5), Some(8.6), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_RICHTER_WHIP, *ATTACK_REGION_WHIP); + } + frame(lua_state, 13.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 100, 80, 0, 50, 4.5, 0.0, 14.7, 7.4, Some(0.0), Some(20.5), Some(5.7), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_RICHTER_WHIP, *ATTACK_REGION_WHIP); } frame(lua_state, 14.0); if is_excute(agent) { @@ -250,15 +258,15 @@ unsafe extern "C" fn sound_attackhi3(agent: &mut L2CAgentBase) { unsafe extern "C" fn game_attacklw3(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); - frame(lua_state, 1.0); + frame(lua_state, 10.0); if is_excute(agent) { WorkModule::on_flag(boma, *FIGHTER_SIMON_STATUS_ATTACK_FLAG_ENABLE_COMBO); } let boma = agent.boma(); frame(lua_state, 10.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.5, 60, 65, 0, 60, 3.0, 0.0, 0.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 5.5, 60, 65, 0, 60, 3.0, 0.0, 0.0, -1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.0, 60, 65, 0, 60, 3.0, 0.0, 0.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 5.0, 60, 65, 0, 60, 3.0, 0.0, 0.0, -1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false); } frame(lua_state, 16.0); @@ -271,18 +279,18 @@ unsafe extern "C" fn game_attacklw3(agent: &mut L2CAgentBase) { unsafe extern "C" fn effect_attacklw3(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); - frame(lua_state, 8.0); + frame(lua_state, 6.0); if is_excute(agent) { - LANDING_EFFECT(agent, Hash40::new("sys_atk_smoke"), Hash40::new("top"), 8, 0, 0, 0, 0, 0, 0.6, 0, 0, 0, 0, 0, 0, false); - LAST_EFFECT_SET_RATE(agent, 0.7); + LANDING_EFFECT(agent, Hash40::new("sys_atk_smoke"), Hash40::new("top"), 8, 0, 0, 0, 0, 0, 0.4, 0, 0, 0, 0, 0, 0, false); + LAST_EFFECT_SET_RATE(agent, 1.0); } - frame(lua_state, 12.0); + frame(lua_state, 10.0); if is_excute(agent) { - LANDING_EFFECT(agent, Hash40::new("sys_sliding_smoke"), Hash40::new("top"), 7, 0, 0, 0, 0, 0, 0.8, 0, 0, 0, 0, 0, 0, false); + LANDING_EFFECT(agent, Hash40::new("sys_sliding_smoke"), Hash40::new("top"), 7, 0, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 0, 0, false); } - frame(lua_state, 16.0); + frame(lua_state, 18.0); if is_excute(agent) { - FOOT_EFFECT(agent, Hash40::new("sys_turn_smoke"), Hash40::new("top"), 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false); + EFFECT_FOLLOW(agent, Hash40::new("sys_turn_smoke"), Hash40::new("top"), 2, 0, -5.0, 0, 0, 0, 1.0, true); } } @@ -330,26 +338,44 @@ unsafe extern "C" fn game_attacklw32(agent: &mut L2CAgentBase) { } frame(lua_state, 8.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.5, 72, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 5.5, 72, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 2, 0, Hash40::new("hip"), 5.5, 72, 60, 0, 88, 4.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.5, 75, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 5.5, 75, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 2, 0, Hash40::new("hip"), 5.5, 75, 60, 0, 88, 4.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } frame(lua_state, 15.0); if is_excute(agent) { AttackModule::clear(agent.module_accessor, 2, false); } - frame(lua_state, 19.0); + frame(lua_state, 18.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 3.5, 72, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 3.5, 72, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 3.5, 80, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 3.5, 80, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } - frame(lua_state, 24.0); + frame(lua_state, 22.0); if is_excute(agent) { AttackModule::clear_all(boma); JostleModule::set_status(boma, true); } } +unsafe extern "C" fn effect_attacklw32(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + frame(lua_state, 1.0); + if is_excute(agent) { + EFFECT(agent, Hash40::new("sys_smash_flash"), Hash40::new("kneel"), 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, true); + } + frame(lua_state, 5.0); + if is_excute(agent) { + LANDING_EFFECT(agent, Hash40::new("sys_landing_smoke"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 0.8, 0, 0, 0, 0, 0, 0, false); + LAST_EFFECT_SET_RATE(agent, 1.2); + } + frame(lua_state, 6.0); + if is_excute(agent) { + EFFECT(agent, Hash40::new("richter_sliding"), Hash40::new("top"), 0, 0, -5, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, true); + } +} + pub fn install(agent: &mut Agent) { agent.acmd("game_attacks3", game_attacks3); agent.acmd("effect_attacks3", effect_attacks3); @@ -371,4 +397,5 @@ pub fn install(agent: &mut Agent) { agent.acmd("sound_attacklw3", sound_attacklw3); agent.acmd("expression_attacklw3", expression_attacklw3); agent.acmd("game_attacklw32", game_attacklw32); + agent.acmd("effect_attacklw32", effect_attacklw32); } \ No newline at end of file diff --git a/fighters/richter/src/axe/acmd.rs b/fighters/richter/src/axe/acmd.rs index fef93b8399..2489a69d33 100644 --- a/fighters/richter/src/axe/acmd.rs +++ b/fighters/richter/src/axe/acmd.rs @@ -5,14 +5,22 @@ unsafe extern "C" fn richter_axe_game(fighter: &mut L2CAgentBase) { let boma = fighter.boma(); let lr = PostureModule::lr(fighter.module_accessor); let axe_owner = &mut *sv_battle_object::module_accessor((WorkModule::get_int(boma, *WEAPON_INSTANCE_WORK_ID_INT_LINK_OWNER)) as u32); - let offset = &Vector2f::new(0.0 * lr, if axe_owner.kind() == *FIGHTER_KIND_KIRBY { -12.2 } else { -4.2 }); + let offset = &Vector2f::new(0.0 * lr, if axe_owner.kind() == *FIGHTER_KIND_KIRBY { -13.2 } else { -5.2 }); PostureModule::set_rot(boma, &Vector3f::new(0.0, 0.0, if axe_owner.is_situation(*SITUATION_KIND_AIR) { -128.0 } else { -90.0 } * lr), 0); PostureModule::set_scale(boma, 1.12, false); PostureModule::add_pos_2d(boma, offset); frame(lua_state, 1.0); - if is_excute(fighter) { - ATTACK(fighter, 0, 0, Hash40::new("axe"), 3.5, 50, 80, 0, 32, 2.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_SPEED, false, 0, 0.0, 0, true, false, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_cutup"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_OBJECT); - AttackModule::enable_safe_pos(boma); + if axe_owner.is_situation(*SITUATION_KIND_AIR){ + if is_excute(fighter) { + ATTACK(fighter, 0, 0, Hash40::new("axe"), 3.5, 50, 80, 0, 32, 2.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_SPEED, false, 0, 0.0, 0, true, false, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_cutup"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_OBJECT); + AttackModule::enable_safe_pos(boma); + } + } else + if axe_owner.is_situation(*SITUATION_KIND_GROUND){ + if is_excute(fighter) { + ATTACK(fighter, 0, 0, Hash40::new("axe"), 4.5, 77, 82, 0, 32, 2.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_SPEED, false, 0, 0.0, 0, true, false, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_cutup"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_OBJECT); + AttackModule::enable_safe_pos(boma); + } } } diff --git a/fighters/richter/src/opff.rs b/fighters/richter/src/opff.rs index 5f3944757e..d816569508 100644 --- a/fighters/richter/src/opff.rs +++ b/fighters/richter/src/opff.rs @@ -24,9 +24,9 @@ unsafe fn dtilt_bounce(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectMo KineticModule::clear_speed_energy_id(fighter.module_accessor, *FIGHTER_KINETIC_ENERGY_ID_GRAVITY); KineticModule::add_speed(fighter.module_accessor, &Vector3f::new(0.0, speed, 0.0)); KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_FALL); - sv_kinetic_energy!(controller_set_accel_x_mul, fighter, 0.02/*Base Air Acceleration*/); //Set to half of Richter's base acceleration + sv_kinetic_energy!(controller_set_accel_x_mul, fighter, 0.02/*Base Air Acceleration*/); sv_kinetic_energy!(controller_set_accel_x_add, fighter, 0.01/*Additional Air Acceleration*/); - sv_kinetic_energy!(set_limit_speed, fighter, *FIGHTER_KINETIC_ENERGY_ID_CONTROL, 0.9/*Maximum Horizontal Air Speed*/, 0.0); //Set to slightly less than vanilla air speed + sv_kinetic_energy!(set_limit_speed, fighter, *FIGHTER_KINETIC_ENERGY_ID_CONTROL, 0.9/*Maximum Horizontal Air Speed*/, 0.0); WorkModule::off_flag(boma, *FIGHTER_SIMON_STATUS_ATTACK_LW32_WORK_ID_FLAG_LANDING_AIR); } } @@ -35,9 +35,9 @@ unsafe fn dtilt_bounce(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectMo // dair bounce height and accel unsafe fn dair_bounce(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectModuleAccessor){ if fighter.is_motion(Hash40::new("attack_air_lw2")) && fighter.motion_frame() > 1.0 { - sv_kinetic_energy!(controller_set_accel_x_mul, fighter, 0.02/*Base Air Acceleration*/); //Set to half of Richter's base acceleration + sv_kinetic_energy!(controller_set_accel_x_mul, fighter, 0.02/*Base Air Acceleration*/); sv_kinetic_energy!(controller_set_accel_x_add, fighter, 0.01/*Additional Air Acceleration*/); - sv_kinetic_energy!(set_limit_speed, fighter, *FIGHTER_KINETIC_ENERGY_ID_CONTROL, 0.9/*Maximum Horizontal Air Speed*/, 0.0); //Set to slightly less than vanilla air speed + sv_kinetic_energy!(set_limit_speed, fighter, *FIGHTER_KINETIC_ENERGY_ID_CONTROL, 0.9/*Maximum Horizontal Air Speed*/, 0.0); } } diff --git a/fighters/simon/src/acmd/ground.rs b/fighters/simon/src/acmd/ground.rs index 5bc7294e2a..56aa34e455 100644 --- a/fighters/simon/src/acmd/ground.rs +++ b/fighters/simon/src/acmd/ground.rs @@ -55,6 +55,14 @@ unsafe extern "C" fn game_attack12(agent: &mut L2CAgentBase) { unsafe extern "C" fn game_attackdash(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); + frame(lua_state, 1.0); + if is_excute(agent) { + FT_MOTION_RATE(agent, 0.5); + } + frame(lua_state, 6.0); + if is_excute(agent) { + FT_MOTION_RATE(agent, 1.0); + } frame(lua_state, 11.0); if is_excute(agent) { ATTACK(agent, 0, 0, Hash40::new("top"), 10.5, 50, 95, 0, 40, 7.0, 0.0, 9.0, 7.0, None, None, None, 1.2, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 1, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_HEAVY, *ATTACK_REGION_BODY); diff --git a/romfs/source/fighter/common/hdr/param/fighter_param.xml b/romfs/source/fighter/common/hdr/param/fighter_param.xml index 9f7dc457bf..61e1d9aff0 100644 --- a/romfs/source/fighter/common/hdr/param/fighter_param.xml +++ b/romfs/source/fighter/common/hdr/param/fighter_param.xml @@ -406,14 +406,14 @@ SIMON -1.0 - 1.0 - 1.0 + 0.8 + 0.8 RICHTER -1.0 - 1.3 - 1.3 + 1.22 + 1.22 KROOL diff --git a/romfs/source/fighter/richter/motion/body/motion_patch.yaml b/romfs/source/fighter/richter/motion/body/motion_patch.yaml index fa7156cf3c..308169d416 100644 --- a/romfs/source/fighter/richter/motion/body/motion_patch.yaml +++ b/romfs/source/fighter/richter/motion/body/motion_patch.yaml @@ -46,7 +46,7 @@ attack_lw4: cancel_frame: 50 attack_hi4: extra: - cancel_frame: 52 + cancel_frame: 53 attack_hi3: extra: cancel_frame: 36 @@ -117,12 +117,12 @@ special_n: flags: move: false extra: - cancel_frame: 37 + cancel_frame: 36 special_air_n: flags: move: false extra: - cancel_frame: 37 + cancel_frame: 36 special_s1: flags: move: true @@ -132,7 +132,7 @@ special_air_s1: flags: move: true extra: - cancel_frame: 45 + cancel_frame: 40 special_lw: flags: move: true @@ -152,7 +152,7 @@ attack_air_hi: attack_air_lw2: blend_frames: 8 extra: - cancel_frame: 25 + cancel_frame: 30 throw_hi: extra: cancel_frame: 35 From d03c804f5a557597b7082f061eab4f1e892fbc9b Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Mon, 15 Apr 2024 18:53:30 -0400 Subject: [PATCH 10/13] adjustments --- fighters/richter/src/acmd/aerials.rs | 6 +++--- fighters/richter/src/acmd/specials.rs | 14 +++++++------- fighters/richter/src/axe/acmd.rs | 2 +- fighters/simon/src/acmd/ground.rs | 8 -------- .../fighter/common/hdr/param/fighter_param.xml | 8 ++++---- 5 files changed, 15 insertions(+), 23 deletions(-) diff --git a/fighters/richter/src/acmd/aerials.rs b/fighters/richter/src/acmd/aerials.rs index da0e55aa71..d430a232ee 100644 --- a/fighters/richter/src/acmd/aerials.rs +++ b/fighters/richter/src/acmd/aerials.rs @@ -415,11 +415,11 @@ unsafe extern "C" fn game_attackairlw(agent: &mut L2CAgentBase) { frame(lua_state, 16.0); if is_excute(agent) { /* Ground-only */ - ATTACK(agent, 0, 0, Hash40::new("legl"), 12.0, 280, 85, 0, 35, 3.4, 0.0, 0.0, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("legl"), 12.0, 280, 85, 0, 35, 3.4, 0.0, -0.1, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 1, 0, Hash40::new("kneel"), 12.0, 280, 85, 0, 35, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 2, 0, Hash40::new("footl"), 12.0, 280, 85, 0, 35, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); /* Air-only */ - ATTACK(agent, 3, 0, Hash40::new("legl"), 12.0, 280, 53, 0, 35, 3.4, 0.0, 0.0, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 3, 0, Hash40::new("legl"), 12.0, 280, 53, 0, 35, 3.4, 0.0, -0.1, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 4, 0, Hash40::new("kneel"), 12.0, 280, 53, 0, 35, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 5, 0, Hash40::new("footl"), 12.0, 280, 53, 0, 35, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); @@ -429,7 +429,7 @@ unsafe extern "C" fn game_attackairlw(agent: &mut L2CAgentBase) { AttackModule::clear(boma, 3, false); AttackModule::clear(boma, 4, false); AttackModule::clear(boma, 5, false); - ATTACK(agent, 0, 0, Hash40::new("legl"), 9.0, 72, 55, 0, 88, 3.4, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("legl"), 9.0, 72, 55, 0, 88, 3.4, 0.0, -0.1, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 1, 0, Hash40::new("kneel"), 9.0, 72, 55, 0, 88, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 2, 0, Hash40::new("footl"), 9.0, 72, 55, 0, 88, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); diff --git a/fighters/richter/src/acmd/specials.rs b/fighters/richter/src/acmd/specials.rs index fdf32cb389..0e68ec641c 100644 --- a/fighters/richter/src/acmd/specials.rs +++ b/fighters/richter/src/acmd/specials.rs @@ -217,31 +217,31 @@ unsafe extern "C" fn game_specialhi(agent: &mut L2CAgentBase) { } frame(lua_state, 9.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.6, 0.0, 26.0, 9.6, Some(0.0), Some(12.8), Some(7.4), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.6, 0.0, 26.0, 9.6, Some(0.0), Some(12.8), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 10.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 28.5, 9.9, Some(0.0), Some(13.5), Some(7.7), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 28.5, 9.9, Some(0.0), Some(13.8), Some(7.8), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 11.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 29.5, 9.7, Some(0.0), Some(14.0), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 30.0, 9.7, Some(0.0), Some(14.8), Some(7.6), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 12.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.3, 0.0, 31.5, 9.7, Some(0.0), Some(15.8), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.3, 0.0, 31.5, 9.6, Some(0.0), Some(15.8), Some(7.6), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 15.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.3, 0.0, 30.0, 9.7, Some(0.0), Some(15.5), Some(7.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.3, 0.0, 30.0, 9.5, Some(0.0), Some(15.5), Some(7.6), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 16.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 27.0, 9.5, Some(0.0), Some(13.5), Some(7.2), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.5, 0.0, 29.0, 9.3, Some(0.0), Some(14.5), Some(7.3), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 18.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.0, 0.0, 27.0, 9.5, Some(0.0), Some(13.5), Some(7.2), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); + ATTACK(agent, 0, 0, Hash40::new("top"), 7.0, 71, 90, 0, 65, 3.0, 0.0, 28.0, 9.3, Some(0.0), Some(14.5), Some(7.3), 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_whip"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_WHIP); } frame(lua_state, 20.0); if is_excute(agent) { diff --git a/fighters/richter/src/axe/acmd.rs b/fighters/richter/src/axe/acmd.rs index 2489a69d33..a80faf8752 100644 --- a/fighters/richter/src/axe/acmd.rs +++ b/fighters/richter/src/axe/acmd.rs @@ -18,7 +18,7 @@ unsafe extern "C" fn richter_axe_game(fighter: &mut L2CAgentBase) { } else if axe_owner.is_situation(*SITUATION_KIND_GROUND){ if is_excute(fighter) { - ATTACK(fighter, 0, 0, Hash40::new("axe"), 4.5, 77, 82, 0, 32, 2.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_SPEED, false, 0, 0.0, 0, true, false, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_cutup"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_OBJECT); + ATTACK(fighter, 0, 0, Hash40::new("axe"), 4.5, 77, 81, 0, 32, 2.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_SPEED, false, 0, 0.0, 0, true, false, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_cutup"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_OBJECT); AttackModule::enable_safe_pos(boma); } } diff --git a/fighters/simon/src/acmd/ground.rs b/fighters/simon/src/acmd/ground.rs index 56aa34e455..5bc7294e2a 100644 --- a/fighters/simon/src/acmd/ground.rs +++ b/fighters/simon/src/acmd/ground.rs @@ -55,14 +55,6 @@ unsafe extern "C" fn game_attack12(agent: &mut L2CAgentBase) { unsafe extern "C" fn game_attackdash(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); - frame(lua_state, 1.0); - if is_excute(agent) { - FT_MOTION_RATE(agent, 0.5); - } - frame(lua_state, 6.0); - if is_excute(agent) { - FT_MOTION_RATE(agent, 1.0); - } frame(lua_state, 11.0); if is_excute(agent) { ATTACK(agent, 0, 0, Hash40::new("top"), 10.5, 50, 95, 0, 40, 7.0, 0.0, 9.0, 7.0, None, None, None, 1.2, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 1, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_HEAVY, *ATTACK_REGION_BODY); diff --git a/romfs/source/fighter/common/hdr/param/fighter_param.xml b/romfs/source/fighter/common/hdr/param/fighter_param.xml index 61e1d9aff0..b2b4475198 100644 --- a/romfs/source/fighter/common/hdr/param/fighter_param.xml +++ b/romfs/source/fighter/common/hdr/param/fighter_param.xml @@ -406,14 +406,14 @@ SIMON -1.0 - 0.8 - 0.8 + 1.0 + 1.0 RICHTER -1.0 - 1.22 - 1.22 + 1.21 + 1.21 KROOL From fca99630697462bc9814b177162648d7470b62d6 Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Tue, 16 Apr 2024 21:35:37 -0400 Subject: [PATCH 11/13] other --- dynamic/src/consts.rs | 4 ++++ fighters/richter/src/acmd/aerials.rs | 6 +++--- fighters/richter/src/acmd/ground.rs | 1 - fighters/richter/src/acmd/specials.rs | 1 + fighters/richter/src/acmd/tilts.rs | 20 ++++++++------------ fighters/richter/src/opff.rs | 2 +- fighters/richter/src/status/attacklw3.rs | 14 +++++++++++--- 7 files changed, 28 insertions(+), 20 deletions(-) diff --git a/dynamic/src/consts.rs b/dynamic/src/consts.rs index 9af6aa14d1..afc52c6012 100644 --- a/dynamic/src/consts.rs +++ b/dynamic/src/consts.rs @@ -981,6 +981,10 @@ pub mod vars { pub const UP_SPECIAL_FREEFALL: i32 = 0x0100; pub const SPECIAL_N_LAND_CANCEL: i32 = 0x0101; } + pub mod status { + // flags + pub const D_TILT_JUMP_BUFFER: i32 = 0x1150; + } } pub mod rockman { diff --git a/fighters/richter/src/acmd/aerials.rs b/fighters/richter/src/acmd/aerials.rs index d430a232ee..e9539dff09 100644 --- a/fighters/richter/src/acmd/aerials.rs +++ b/fighters/richter/src/acmd/aerials.rs @@ -415,11 +415,11 @@ unsafe extern "C" fn game_attackairlw(agent: &mut L2CAgentBase) { frame(lua_state, 16.0); if is_excute(agent) { /* Ground-only */ - ATTACK(agent, 0, 0, Hash40::new("legl"), 12.0, 280, 85, 0, 35, 3.4, 0.0, -0.1, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("legl"), 12.0, 280, 85, 0, 35, 3.4, 0.0, -0.2, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 1, 0, Hash40::new("kneel"), 12.0, 280, 85, 0, 35, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 2, 0, Hash40::new("footl"), 12.0, 280, 85, 0, 35, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); /* Air-only */ - ATTACK(agent, 3, 0, Hash40::new("legl"), 12.0, 280, 53, 0, 35, 3.4, 0.0, -0.1, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 3, 0, Hash40::new("legl"), 12.0, 280, 53, 0, 35, 3.4, 0.0, -0.2, 0.0, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 4, 0, Hash40::new("kneel"), 12.0, 280, 53, 0, 35, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 5, 0, Hash40::new("footl"), 12.0, 280, 53, 0, 35, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.1, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_A, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); @@ -429,7 +429,7 @@ unsafe extern "C" fn game_attackairlw(agent: &mut L2CAgentBase) { AttackModule::clear(boma, 3, false); AttackModule::clear(boma, 4, false); AttackModule::clear(boma, 5, false); - ATTACK(agent, 0, 0, Hash40::new("legl"), 9.0, 72, 55, 0, 88, 3.4, 0.0, -0.1, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("legl"), 9.0, 72, 55, 0, 88, 3.4, 0.0, -0.2, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 1, 0, Hash40::new("kneel"), 9.0, 72, 55, 0, 88, 3.2, 0.0, -0.5, 0.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 2, 0, Hash40::new("footl"), 9.0, 72, 55, 0, 88, 2.9, 0.0, 0.0, -0.1, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); diff --git a/fighters/richter/src/acmd/ground.rs b/fighters/richter/src/acmd/ground.rs index 4ef8c6972d..a9d28e0823 100644 --- a/fighters/richter/src/acmd/ground.rs +++ b/fighters/richter/src/acmd/ground.rs @@ -193,7 +193,6 @@ unsafe extern "C" fn game_attackdash(agent: &mut L2CAgentBase) { ATTACK(agent, 0, 0, Hash40::new("top"), 10.0, 55, 79, 0, 59, 4.0, 0.0, 9.5, 2.5, Some(0.0), Some(12.5), Some(10.0), 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } frame(lua_state, 15.0); - sv_kinetic_energy!(set_speed_mul, agent, FIGHTER_KINETIC_ENERGY_ID_MOTION, 0.9); if is_excute(agent) { AttackModule::clear_all(boma); } diff --git a/fighters/richter/src/acmd/specials.rs b/fighters/richter/src/acmd/specials.rs index 0e68ec641c..d2b95f139d 100644 --- a/fighters/richter/src/acmd/specials.rs +++ b/fighters/richter/src/acmd/specials.rs @@ -106,6 +106,7 @@ unsafe extern "C" fn game_specials1(agent: &mut L2CAgentBase) { if agent.is_situation(*SITUATION_KIND_AIR) { KineticModule::enable_energy(agent.module_accessor, *FIGHTER_KINETIC_ENERGY_ID_GRAVITY); KineticModule::change_kinetic(agent.module_accessor, *FIGHTER_KINETIC_TYPE_FALL); + VarModule::on_flag(agent.object(), vars::common::instance::SIDE_SPECIAL_CANCEL_NO_HIT); } } frame(lua_state, 40.0); diff --git a/fighters/richter/src/acmd/tilts.rs b/fighters/richter/src/acmd/tilts.rs index b1c7b5b846..bb43db5edf 100644 --- a/fighters/richter/src/acmd/tilts.rs +++ b/fighters/richter/src/acmd/tilts.rs @@ -261,12 +261,8 @@ unsafe extern "C" fn game_attacklw3(agent: &mut L2CAgentBase) { frame(lua_state, 10.0); if is_excute(agent) { WorkModule::on_flag(boma, *FIGHTER_SIMON_STATUS_ATTACK_FLAG_ENABLE_COMBO); - } - let boma = agent.boma(); - frame(lua_state, 10.0); - if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.0, 60, 65, 0, 60, 3.0, 0.0, 0.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 5.0, 60, 65, 0, 60, 3.0, 0.0, 0.0, -1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.0, 60, 70, 0, 60, 3.0, 0.0, 0.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 5.0, 60, 70, 0, 60, 3.0, 0.0, 0.0, -1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false); } frame(lua_state, 16.0); @@ -338,18 +334,18 @@ unsafe extern "C" fn game_attacklw32(agent: &mut L2CAgentBase) { } frame(lua_state, 8.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.5, 75, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 5.5, 75, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 2, 0, Hash40::new("hip"), 5.5, 75, 60, 0, 88, 4.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 5.5, 75, 60, 0, 88, 3.2, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 5.5, 75, 60, 0, 88, 2.9, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 2, 0, Hash40::new("hip"), 5.5, 75, 60, 0, 88, 3.4, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } - frame(lua_state, 15.0); + frame(lua_state, 14.0); if is_excute(agent) { AttackModule::clear(agent.module_accessor, 2, false); } frame(lua_state, 18.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("kneel"), 3.5, 80, 60, 0, 88, 3.5, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("footl"), 3.5, 80, 60, 0, 88, 3.0, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 0, 0, Hash40::new("kneel"), 3.5, 80, 60, 0, 88, 3.2, 0.0, 1.0, -1.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("footl"), 3.5, 80, 60, 0, 88, 2.9, 0.0, 1.5, -2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } frame(lua_state, 22.0); if is_excute(agent) { diff --git a/fighters/richter/src/opff.rs b/fighters/richter/src/opff.rs index d816569508..d578e66635 100644 --- a/fighters/richter/src/opff.rs +++ b/fighters/richter/src/opff.rs @@ -8,7 +8,7 @@ use skyline_smash::app::lua_bind::ControlModule::clear_command_one; unsafe fn dtilt1_crossup_prevention(fighter: &mut L2CFighterCommon) { if fighter.is_motion(Hash40::new("attack_lw3")) && AttackModule::is_infliction(fighter.module_accessor, *COLLISION_KIND_MASK_SHIELD) { - sv_kinetic_energy!(set_speed_mul, fighter, FIGHTER_KINETIC_ENERGY_ID_MOTION, 0.4); + sv_kinetic_energy!(set_speed_mul, fighter, FIGHTER_KINETIC_ENERGY_ID_MOTION, 0.0); } } diff --git a/fighters/richter/src/status/attacklw3.rs b/fighters/richter/src/status/attacklw3.rs index e87b719986..038c59876d 100644 --- a/fighters/richter/src/status/attacklw3.rs +++ b/fighters/richter/src/status/attacklw3.rs @@ -9,11 +9,19 @@ unsafe extern "C" fn attack_lw3_main(fighter: &mut L2CFighterCommon) -> L2CValue unsafe extern "C" fn attack_lw3_main_loop(fighter: &mut L2CFighterCommon) -> L2CValue { if !StatusModule::is_changing(fighter.module_accessor) { - if fighter.status_frame() == 15 && ControlModule::check_button_on(fighter.module_accessor, *CONTROL_PAD_BUTTON_ATTACK) { - fighter.change_status(FIGHTER_SIMON_STATUS_KIND_ATTACK_LW32.into(), true.into()); - return 1.into() + if (8..=15).contains(&fighter.status_frame()) { + if ControlModule::check_button_trigger(fighter.module_accessor, *CONTROL_PAD_BUTTON_JUMP) { + VarModule::on_flag(fighter.battle_object, vars::richter::status::D_TILT_JUMP_BUFFER); } + else if ControlModule::check_button_trigger(fighter.module_accessor, *CONTROL_PAD_BUTTON_ATTACK) { + VarModule::on_flag(fighter.battle_object, vars::richter::status::D_TILT_JUMP_BUFFER); + } + } + if fighter.status_frame() == 15 && VarModule::is_flag(fighter.battle_object, vars::richter::status::D_TILT_JUMP_BUFFER) { + fighter.change_status(FIGHTER_SIMON_STATUS_KIND_ATTACK_LW32.into(), true.into()); + return 1.into() } +} fighter.status_AttackLw3_Main(); return 0.into() } From 31de99cb5bc3662bc87c50f1693da5ddd7f17def Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Tue, 16 Apr 2024 21:39:06 -0400 Subject: [PATCH 12/13] other --- fighters/richter/src/axe/acmd.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fighters/richter/src/axe/acmd.rs b/fighters/richter/src/axe/acmd.rs index a80faf8752..67fe1af3b5 100644 --- a/fighters/richter/src/axe/acmd.rs +++ b/fighters/richter/src/axe/acmd.rs @@ -18,7 +18,7 @@ unsafe extern "C" fn richter_axe_game(fighter: &mut L2CAgentBase) { } else if axe_owner.is_situation(*SITUATION_KIND_GROUND){ if is_excute(fighter) { - ATTACK(fighter, 0, 0, Hash40::new("axe"), 4.5, 77, 81, 0, 32, 2.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_SPEED, false, 0, 0.0, 0, true, false, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_cutup"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_OBJECT); + ATTACK(fighter, 0, 0, Hash40::new("axe"), 4.5, 77, 80, 0, 32, 2.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_SPEED, false, 0, 0.0, 0, true, false, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_cutup"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_OBJECT); AttackModule::enable_safe_pos(boma); } } From 271cb3bad2e242e625684dc71ea348ccb29c3327 Mon Sep 17 00:00:00 2001 From: "just.rob" Date: Tue, 16 Apr 2024 22:29:47 -0400 Subject: [PATCH 13/13] other --- fighters/richter/src/acmd/aerials.rs | 2 +- fighters/richter/src/acmd/ground.rs | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/fighters/richter/src/acmd/aerials.rs b/fighters/richter/src/acmd/aerials.rs index e9539dff09..c6238f5ee6 100644 --- a/fighters/richter/src/acmd/aerials.rs +++ b/fighters/richter/src/acmd/aerials.rs @@ -336,7 +336,7 @@ unsafe extern "C" fn game_attackairhi(agent: &mut L2CAgentBase) { frame(lua_state, 6.0); if is_excute(agent) { ATTACK(agent, 0, 0, Hash40::new("legr"), 8.0, 57, 60, 0, 40, 4.0, 1.5, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 1, 0, Hash40::new("kneer"), 8.0, 57, 60, 0, 40, 5.0, 3.5, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); + ATTACK(agent, 1, 0, Hash40::new("kneer"), 8.0, 57, 60, 0, 40, 4.5, 3.5, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); } frame(lua_state, 14.0); if is_excute(agent) { diff --git a/fighters/richter/src/acmd/ground.rs b/fighters/richter/src/acmd/ground.rs index a9d28e0823..b9afded714 100644 --- a/fighters/richter/src/acmd/ground.rs +++ b/fighters/richter/src/acmd/ground.rs @@ -60,8 +60,6 @@ unsafe extern "C" fn game_attack12(agent: &mut L2CAgentBase) { ATTACK(agent, 3, 0, Hash40::new("top"), 3.0, 361, 25, 0, 25, 3.0, 0.0, 5.0, 1.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 4, 0, Hash40::new("top"), 3.0, 361, 25, 0, 25, 3.25, 0.0, 4.0, 5.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); ATTACK(agent, 5, 0, Hash40::new("top"), 3.0, 361, 25, 0, 25, 3.5, 0.0, 3.0, 10.5, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - ATTACK(agent, 6, 0, Hash40::new("top"), 3.0, 361, 25, 0, 25, 2.0, 0.0, 6.5, 3.0, Some(0.0), Some(6.5), Some(10.5), 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_G, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK); - AttackModule::set_down_only(boma, 3, false); AttackModule::set_down_only(boma, 4, false); AttackModule::set_down_only(boma, 5, false); @@ -245,7 +243,7 @@ unsafe extern "C" fn effect_attackdash(agent: &mut L2CAgentBase) { if is_excute(agent) { COL_NORMAL(agent); } - frame(lua_state, 29.0); + frame(lua_state, 28.0); if is_excute(agent) { EFFECT_FOLLOW(agent, Hash40::new("sys_whirlwind_r"), Hash40::new("top"), 0, 0, -0.5, 0, 0, 0, 0.8, false); LAST_EFFECT_SET_RATE(agent, 1.3); @@ -265,7 +263,7 @@ unsafe extern "C" fn sound_attackdash(agent: &mut L2CAgentBase) { PLAY_SE(agent, Hash40::new("se_common_punch_kick_swing_l")); } - frame(lua_state, 29.0); + frame(lua_state, 28.0); if is_excute(agent) { PLAY_SE(agent, Hash40::new("se_richter_landing01")); }