diff --git a/fighters/kirby/src/acmd/copy/roy.rs b/fighters/kirby/src/acmd/copy/roy.rs index dc683c4f88..088ef269d2 100644 --- a/fighters/kirby/src/acmd/copy/roy.rs +++ b/fighters/kirby/src/acmd/copy/roy.rs @@ -1,5 +1,31 @@ use super::*; +unsafe extern "C" fn sound_specialnstart(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + frame(lua_state, 2.0); + if is_excute(agent) { + PLAY_SE(agent, Hash40::new("se_roy_appeal_s02")); + } + frame(lua_state, 7.0); + if is_excute(agent) { + PLAY_STATUS(agent, Hash40::new("se_roy_special_n06")); + } +} + +unsafe extern "C" fn sound_specialairnstart(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + frame(lua_state, 2.0); + if is_excute(agent) { + PLAY_SE(agent, Hash40::new("se_roy_appeal_h01")); + } + frame(lua_state, 7.0); + if is_excute(agent) { + PLAY_STATUS(agent, Hash40::new("se_roy_special_n06")); + } +} + unsafe extern "C" fn effect_royspecialnend(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); @@ -172,7 +198,9 @@ unsafe extern "C" fn effect_royspecialnendmax(agent: &mut L2CAgentBase) { pub fn install(agent: &mut Agent) { agent.acmd("effect_royspecialnend", effect_royspecialnend, Priority::Low); agent.acmd("effect_royspecialairnend", effect_royspecialnend, Priority::Low); + agent.acmd("sound_specialnstart", sound_specialnstart, Priority::Low); agent.acmd("sound_royspecialnend", sound_royspecialnend, Priority::Low); + agent.acmd("sound_specialairnstart", sound_specialairnstart, Priority::Low); agent.acmd("sound_royspecialairnend", sound_royspecialnend, Priority::Low); agent.acmd("expression_royspecialnend", expression_royspecialnend, Priority::Low); agent.acmd("expression_royspecialairnend", expression_royspecialnend, Priority::Low); diff --git a/fighters/roy/src/acmd/smashes.rs b/fighters/roy/src/acmd/smashes.rs index 7d419838f4..51937a393b 100644 --- a/fighters/roy/src/acmd/smashes.rs +++ b/fighters/roy/src/acmd/smashes.rs @@ -127,27 +127,50 @@ unsafe extern "C" fn game_attackhi4(agent: &mut L2CAgentBase) { unsafe extern "C" fn game_attacklw4(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, 4.0, 6.0); frame(lua_state, 4.0); + FT_MOTION_RATE(agent, 1.0); if is_excute(agent) { WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_START_SMASH_HOLD); } frame(lua_state, 6.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("sword1"), 18.0, 75, 81, 0, 42, 4.3, 0.0, 0.0, 2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); - ATTACK(agent, 1, 0, Hash40::new("armr"), 18.0, 75, 81, 0, 42, 3.1, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); - ATTACK(agent, 2, 0, Hash40::new("colonells"), 18.0, 75, 81, 0, 42, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); - ATTACK(agent, 3, 0, Hash40::new("sword1"), 11.0, 63, 80, 0, 20, 3.5, 0.0, 0.0, 8.5, None, None, None, 0.9, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 10, 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_cutup"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_SWORD); + ATTACK(agent, 0, 0, Hash40::new("sword1"), 3.0, 170, 105, 30, 0, 4.3, 0.0, 0.0, 2.0, None, None, None, 1.3, 1.5, *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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 1, 0, Hash40::new("armr"), 3.0, 170, 93, 25, 0, 3.1, 0.0, 0.0, 0.0, None, None, None, 1.3, 1.5, *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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 2, 0, Hash40::new("colonells"), 3.0, 259, 60, 25, 0, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.3, 1.5, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, 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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 3, 0, Hash40::new("colonells"), 3.0, 170, 93, 25, 0, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.3, 1.5, *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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 4, 0, Hash40::new("sword1"), 2.0, 40, 45, 0, 60, 3.5, 0.0, 0.0, 8.5, None, None, None, 0.9, 1.5, *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_cutup"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_SWORD); AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false); } + wait(lua_state, 3.0); + if is_excute(agent) { + AttackModule::clear_all(boma); + } frame(lua_state, 10.0); if is_excute(agent) { - ATTACK(agent, 0, 0, Hash40::new("sword1"), 14.0, 75, 80, 0, 42, 3.9, 0.0, 0.0, 2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); - ATTACK(agent, 1, 0, Hash40::new("armr"), 14.0, 75, 80, 0, 42, 3.1, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); - ATTACK(agent, 2, 0, Hash40::new("colonells"), 14.0, 75, 80, 0, 42, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); - ATTACK(agent, 3, 0, Hash40::new("sword1"), 10.0, 63, 70, 0, 20, 3.5, 0.0, 0.0, 8.5, None, None, None, 0.9, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 10, 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_cutup"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_SWORD); + ATTACK(agent, 0, 0, Hash40::new("legl"), 3.0, 170, 100, 30, 0, 3.0, 3.0, 4.0, -6.0, None, None, None, 1.3, 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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 1, 0, Hash40::new("sword1"), 3.0, 170, 125, 40, 0, 4.3, 0.0, 0.0, 2.0, None, None, None, 1.3, 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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 2, 0, Hash40::new("armr"), 3.0, 170, 102, 35, 0, 3.1, 0.0, 0.0, 0.0, None, None, None, 1.3, 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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 3, 0, Hash40::new("colonells"), 3.0, 259, 60, 25, 0, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.3, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, 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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 4, 0, Hash40::new("colonells"), 3.0, 170, 102, 35, 0, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.3, 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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 5, 0, Hash40::new("sword1"), 2.0, 40, 45, 0, 60, 3.5, 0.0, 0.0, 8.5, None, None, None, 0.9, 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_cutup"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_SWORD); AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false); } - frame(lua_state, 18.0); + wait(lua_state, 3.0); + if is_excute(agent) { + AttackModule::clear_all(boma); + } + frame(lua_state, 15.0); + if is_excute(agent) { + ATTACK(agent, 0, 0, Hash40::new("legl"), 9.0, 84, 93, 0, 71, 3.0, 3.0, 4.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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 1, 0, Hash40::new("sword1"), 9.0, 84, 93, 0, 71, 3.9, 0.0, 0.0, 2.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 2, 0, Hash40::new("armr"), 9.0, 84, 93, 0, 71, 3.1, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 3, 0, Hash40::new("colonells"), 9.0, 84, 93, 0, 71, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 10, 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_fire"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_ROY_HIT, *ATTACK_REGION_SWORD); + ATTACK(agent, 4, 0, Hash40::new("sword1"), 5.0, 55, 62, 0, 23, 3.5, 0.0, 0.0, 8.5, None, None, None, 0.9, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 10, 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_cutup"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_SWORD); + AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false); + } + frame(lua_state, 19.0); if is_excute(agent) { AttackModule::clear_all(boma); } diff --git a/fighters/roy/src/acmd/specials/mod.rs b/fighters/roy/src/acmd/specials/mod.rs index f7c2d30e41..ff64ad8f9a 100644 --- a/fighters/roy/src/acmd/specials/mod.rs +++ b/fighters/roy/src/acmd/specials/mod.rs @@ -5,6 +5,32 @@ mod special_s2; mod special_s3; mod special_s4; +unsafe extern "C" fn sound_specialnstart(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + frame(lua_state, 2.0); + if is_excute(agent) { + PLAY_SE(agent, Hash40::new("se_roy_appeal_s02")); + } + frame(lua_state, 7.0); + if is_excute(agent) { + PLAY_STATUS(agent, Hash40::new("se_roy_special_n06")); + } +} + +unsafe extern "C" fn sound_specialairnstart(agent: &mut L2CAgentBase) { + let lua_state = agent.lua_state_agent; + let boma = agent.boma(); + frame(lua_state, 2.0); + if is_excute(agent) { + PLAY_SE(agent, Hash40::new("se_roy_appeal_h01")); + } + frame(lua_state, 7.0); + if is_excute(agent) { + PLAY_STATUS(agent, Hash40::new("se_roy_special_n06")); + } +} + unsafe extern "C" fn game_specialnend(agent: &mut L2CAgentBase) { let lua_state = agent.lua_state_agent; let boma = agent.boma(); @@ -537,12 +563,15 @@ unsafe extern "C" fn effect_specialairlwhit(agent: &mut L2CAgentBase) { } pub fn install(agent: &mut Agent) { + agent.acmd("game_specialnend", game_specialnend, Priority::Low); agent.acmd("effect_specialnend", effect_specialnend, Priority::Low); + agent.acmd("sound_specialnstart", sound_specialnstart, Priority::Low); agent.acmd("sound_specialnend", sound_specialnend, Priority::Low); agent.acmd("expression_specialnend", expression_specialnend, Priority::Low); agent.acmd("game_specialairnend", game_specialnend, Priority::Low); agent.acmd("effect_specialairnend", effect_specialnend, Priority::Low); + agent.acmd("sound_specialairnstart", sound_specialairnstart, Priority::Low); agent.acmd("sound_specialairnend", sound_specialnend, Priority::Low); agent.acmd("expression_specialairnend", expression_specialnend, Priority::Low); diff --git a/romfs/source/fighter/roy/motion/body/motion_patch.yaml b/romfs/source/fighter/roy/motion/body/motion_patch.yaml index be267491a2..0cf0a3ef2f 100644 --- a/romfs/source/fighter/roy/motion/body/motion_patch.yaml +++ b/romfs/source/fighter/roy/motion/body/motion_patch.yaml @@ -241,7 +241,7 @@ attack_air_n: cancel_frame: 49 attack_lw4: extra: - cancel_frame: 64 + cancel_frame: 46 special_s4_back: game_script: game_specials4back flags: