Skip to content

Commit 5e898ed

Browse files
committed
mewtwo concept
1 parent 169fa26 commit 5e898ed

File tree

12 files changed

+415
-127
lines changed

12 files changed

+415
-127
lines changed

dynamic/src/consts.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -850,9 +850,8 @@ pub mod vars {
850850
pub mod mewtwo {
851851
pub mod instance {
852852
// flags
853-
pub const GROUNDED_TELEPORT: i32 = 0x0100;
854-
pub const UP_SPECIAL_JUMP_REFRESH: i32 = 0x0101;
855-
pub const UP_SPECIAL_FREEFALL: i32 = 0x0102;
853+
pub const TELEPORT_CANCEL: i32 = 0x0100;
854+
pub const UP_SPECIAL_FREEFALL: i32 = 0x0101;
856855
}
857856
}
858857

fighters/common/src/function_hooks/set_fighter_status_data.rs

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ unsafe fn set_fighter_status_data_hook(boma: &mut BattleObjectModuleAccessor, ar
7272
&& (WorkModule::get_int(boma, *FIGHTER_INSTANCE_WORK_ID_INT_WAZA_CUSTOMIZE_TO) == *FIGHTER_WAZA_CUSTOMIZE_TO_SPECIAL_LW_3 && boma.is_status(*FIGHTER_STATUS_KIND_SPECIAL_LW)))
7373
|| (boma.kind() == *FIGHTER_KIND_TRAIL
7474
&& boma.is_status_one_of(&[*FIGHTER_TRAIL_STATUS_KIND_SPECIAL_N2, *FIGHTER_STATUS_KIND_SPECIAL_LW]))
75+
|| (boma.kind() == *FIGHTER_KIND_MEWTWO
76+
&& boma.is_status_one_of(&[*FIGHTER_STATUS_KIND_SPECIAL_LW]))
7577
{
7678
// if b-reverse flag does not already exist in status_attr bitmask
7779
if status_attr & *FIGHTER_STATUS_ATTR_START_TURN as u32 == 0 {

fighters/common/src/opff/floats.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,11 @@ pub unsafe fn extra_floats(fighter: &mut L2CFighterCommon, boma: &mut BattleObje
9090
WorkModule::on_flag(boma, *FIGHTER_INSTANCE_WORK_ID_FLAG_SUPERLEAF);
9191
}
9292
if WorkModule::is_flag(boma, *FIGHTER_INSTANCE_WORK_ID_FLAG_SUPERLEAF)
93-
&& !WorkModule::is_flag(boma, *FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY)
94-
&& (boma.left_stick_y() >= -0.66 && InputModule::get_trigger_count(fighter.battle_object, Buttons::Jump) <= 4)
95-
{ //disables held floats unless jump is held 5f
96-
WorkModule::off_flag(boma, *FIGHTER_INSTANCE_WORK_ID_FLAG_SUPERLEAF);
93+
&& !WorkModule::is_flag(boma, *FIGHTER_STATUS_WORK_ID_FLAG_RESERVE_FALL_SLOWLY) {
94+
if (boma.left_stick_y() >= -0.66 && InputModule::get_trigger_count(fighter.battle_object, Buttons::Jump) <= 4) //disable helf floats for 4f
95+
|| fighter.is_button_off(Buttons::Jump) { //disable 1f float
96+
WorkModule::off_flag(boma, *FIGHTER_INSTANCE_WORK_ID_FLAG_SUPERLEAF);
97+
}
9798
}
9899
// Immediately transition to fall/double jump fall when activating float
99100
if ControlModule::check_button_on(boma, *CONTROL_PAD_BUTTON_JUMP) && boma.left_stick_y() < -0.66 && WorkModule::get_int(boma, *FIGHTER_INSTANCE_WORK_ID_INT_SUPERLEAF_FALL_SLOWLY_FRAME) > 0 {

fighters/mewtwo/src/acmd/aerials.rs

+84-16
Large diffs are not rendered by default.

fighters/mewtwo/src/acmd/ground.rs

+34-13
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ unsafe fn mewtwo_attack_11_game(fighter: &mut L2CAgentBase) {
2020
ATTACK(fighter, 1, 0, Hash40::new("top"), 3.0, 83, 40, 0, 25, 4.5, 0.0, 11.8, 9.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_d, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
2121
ATTACK(fighter, 2, 0, Hash40::new("top"), 3.0, 83, 40, 0, 25, 4.0, 0.0, 9.0, 13.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_d, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
2222
//Jab-Lock Hitbox
23-
ATTACK(fighter, 3, 0, Hash40::new("top"), 3.0, 361, 20, 0, 25, 2.5, 1.0, 3.0, 0.0, Some(1.0), Some(3.0), Some(10.0), 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_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
23+
ATTACK(fighter, 3, 0, Hash40::new("top"), 3.0, 361, 20, 0, 25, 2.5, 1.0, 3.0, 2.0, Some(1.0), Some(3.0), Some(14.5), 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_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
24+
AttackModule::set_down_only(boma, 3, true);
2425
}
2526
frame(lua_state, 8.0);
2627
if is_excute(fighter) {
@@ -59,35 +60,55 @@ unsafe fn mewtwo_attack_100_end_game(fighter: &mut L2CAgentBase) {
5960
unsafe fn mewtwo_attack_dash_game(fighter: &mut L2CAgentBase) {
6061
let lua_state = fighter.lua_state_agent;
6162
let boma = fighter.boma();
62-
sv_kinetic_energy!(set_speed_mul, fighter, FIGHTER_KINETIC_ENERGY_ID_MOTION, 0.85);
63+
if is_excute(fighter) {
64+
sv_kinetic_energy!(set_speed_mul, fighter, FIGHTER_KINETIC_ENERGY_ID_MOTION, 0.85);
65+
FighterAreaModuleImpl::enable_fix_jostle_area(boma, 8.5, 3.0);
66+
}
6367
frame(lua_state, 10.0);
6468
if is_excute(fighter) {
65-
ATTACK(fighter, 0, 0, Hash40::new("top"), 12.0, 54, 67, 0, 80, 5.5, 0.0, 10.0, 16.299999, Some(0.0), Some(8.5), Some(16.299999), 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_purple"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
66-
ATTACK(fighter, 1, 0, Hash40::new("top"), 9.0, 60, 57, 0, 80, 2.5, 0.0, 10.0, 13.0, Some(0.0), Some(10.0), Some(6.0), 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_purple"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
67-
ATTACK(fighter, 2, 0, Hash40::new("top"), 9.0, 60, 57, 0, 80, 5.0, 0.0, 6.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_purple"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
69+
ATTACK(fighter, 0, 0, Hash40::new("top"), 12.0, 54, 67, 0, 80, 5.5, 0.0, 8.6, 13.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_purple"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
70+
ATTACK(fighter, 1, 0, Hash40::new("top"), 9.0, 60, 57, 0, 80, 4.3, 0.0, 8.2, 5.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_purple"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
6871
}
6972
frame(lua_state, 13.0);
73+
FT_MOTION_RATE_RANGE(fighter, 13.0, 21.0, 9.0);
7074
if is_excute(fighter) {
71-
ATTACK(fighter, 0, 0, Hash40::new("top"), 7.0, 60, 60, 0, 77, 4.0, 0.0, 10.0, 16.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_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
72-
ATTACK(fighter, 1, 0, Hash40::new("top"), 6.0, 70, 60, 0, 77, 2.5, 0.0, 10.0, 13.0, Some(0.0), Some(10.0), Some(8.0), 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_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
73-
ATTACK(fighter, 2, 0, Hash40::new("top"), 6.0, 70, 60, 0, 77, 5.0, 0.0, 6.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_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
75+
ATTACK(fighter, 0, 0, Hash40::new("top"), 7.0, 60, 60, 0, 77, 4.5, 0.0, 8.6, 14.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_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
76+
ATTACK(fighter, 1, 0, Hash40::new("top"), 6.0, 70, 60, 0, 77, 3.7, 0.0, 8.2, 6.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_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_PUNCH);
77+
FighterAreaModuleImpl::enable_fix_jostle_area(boma, 3.5, 3.0);
7478
}
75-
frame(lua_state, 21.0);
79+
frame(lua_state, 21.0); //43
80+
FT_MOTION_RATE(fighter, 1.0);
7681
if is_excute(fighter) {
7782
AttackModule::clear_all(boma);
7883
}
79-
frame(lua_state, 22.0);
80-
FT_MOTION_RATE(fighter, 7.0/(25.0-22.0));
81-
frame(lua_state, 25.0);
82-
FT_MOTION_RATE(fighter, 1.0);
84+
}
8385

86+
#[acmd_script( agent = "mewtwo", script = "effect_attackdash" , category = ACMD_EFFECT , low_priority)]
87+
unsafe fn mewtwo_attack_dash_effect(fighter: &mut L2CAgentBase) {
88+
let lua_state = fighter.lua_state_agent;
89+
let boma = fighter.boma();
90+
frame(lua_state, 9.0);
91+
if is_excute(fighter) {
92+
LANDING_EFFECT(fighter, Hash40::new("sys_h_smoke_a"), Hash40::new("top"), 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
93+
}
94+
frame(lua_state, 10.0);
95+
if is_excute(fighter) {
96+
EFFECT_FLW_POS(fighter, Hash40::new("mewtwo_pk_attack_e"), Hash40::new("haver"), 1.9 * PostureModule::lr(boma), 0, 0, 0, 0, 0, 0.9, true);
97+
EffectModule::enable_sync_init_pos_last(boma);
98+
//LAST_EFFECT_SET_RATE(fighter, 1.5);
99+
}
100+
frame(lua_state, 21.0);
101+
if is_excute(fighter) {
102+
EffectModule::kill_kind(boma, Hash40::new("mewtwo_pk_attack_e"), true, true);
103+
}
84104
}
85105

86106
pub fn install() {
87107
install_acmd_scripts!(
88108
mewtwo_attack_11_game,
89109
mewtwo_attack_100_end_game,
90110
mewtwo_attack_dash_game,
111+
mewtwo_attack_dash_effect
91112
);
92113
}
93114

fighters/mewtwo/src/acmd/smashes.rs

+24
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,29 @@ unsafe fn mewtwo_attack_hi4_game(fighter: &mut L2CAgentBase) {
130130

131131
}
132132

133+
#[acmd_script( agent = "mewtwo", script = "effect_attackhi4" , category = ACMD_EFFECT , low_priority)]
134+
unsafe extern "C" fn mewtwo_attack_hi4_effect(fighter: &mut L2CAgentBase) {
135+
let lua_state = fighter.lua_state_agent;
136+
let boma = fighter.boma();
137+
if is_excute(fighter) {
138+
EFFECT(fighter, Hash40::new("sys_smash_flash"), Hash40::new("top"), 0, 13, 10, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, true);
139+
}
140+
frame(lua_state, 6.0);
141+
if is_excute(fighter) {
142+
EFFECT_FOLLOW_FLIP(fighter, Hash40::new("mewtwo_pk_hand"), Hash40::new("mewtwo_pk_hand"), Hash40::new("havel"), -1, 0, 1.3, 0, 0, 0, 0.7, true, *EF_FLIP_YZ);
143+
}
144+
frame(lua_state, 8.0);
145+
if is_excute(fighter) {
146+
EFFECT_OFF_KIND(fighter, Hash40::new("mewtwo_pk_hand"), false, false);
147+
EFFECT_FOLLOW_NO_STOP_FLIP(fighter, Hash40::new("mewtwo_pk_attack_a"), Hash40::new("mewtwo_pk_attack_a"), Hash40::new("top"), -2.5, 21.5, 0, 0, 0, 0, 0.95, true, *EF_FLIP_YZ);
148+
LAST_EFFECT_SET_RATE(fighter, 1.2);
149+
}
150+
frame(lua_state, 9.0);
151+
if is_excute(fighter) {
152+
LANDING_EFFECT(fighter, Hash40::new("sys_landing_smoke"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
153+
}
154+
}
155+
133156
#[acmd_script( agent = "mewtwo", script = "game_attacklw4" , category = ACMD_GAME , low_priority)]
134157
unsafe fn mewtwo_attack_lw4_game(fighter: &mut L2CAgentBase) {
135158
let lua_state = fighter.lua_state_agent;
@@ -161,6 +184,7 @@ pub fn install() {
161184
mewtwo_attack_s4_s_game,
162185
mewtwo_attack_s4_lw_game,
163186
mewtwo_attack_hi4_game,
187+
mewtwo_attack_hi4_effect,
164188
mewtwo_attack_lw4_game,
165189
);
166190
}

fighters/mewtwo/src/acmd/specials.rs

+47-3
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ use super::*;
55
unsafe fn mewtwo_special_s_game(fighter: &mut L2CAgentBase) {
66
let lua_state = fighter.lua_state_agent;
77
let boma = fighter.boma();
8+
frame(lua_state, 8.0);
9+
if is_excute(fighter) {
10+
shield!(fighter, *MA_MSC_CMD_SHIELD_ON, *COLLISION_KIND_REFLECTOR, *FIGHTER_MEWTWO_REFLECTOR_KIND_REFLECTOR, *FIGHTER_REFLECTOR_GROUP_EXTEND);
11+
}
812
frame(lua_state, 12.0);
913
if is_excute(fighter) {
1014
CATCH(fighter, 0, Hash40::new("top"), 7.4, 0.0, 8.4, 17.0, None, None, None, *FIGHTER_STATUS_KIND_MEWTWO_THROWN, *COLLISION_SITUATION_MASK_GA);
1115
CATCH(fighter, 1, Hash40::new("top"), 10.2, 0.0, 8.4, 17.0, None, None, None, *FIGHTER_STATUS_KIND_MEWTWO_THROWN, *COLLISION_SITUATION_MASK_G);
12-
shield!(fighter, *MA_MSC_CMD_SHIELD_ON, *COLLISION_KIND_REFLECTOR, *FIGHTER_MEWTWO_REFLECTOR_KIND_REFLECTOR, *FIGHTER_REFLECTOR_GROUP_EXTEND);
1316
ATTACK_ABS(fighter, *FIGHTER_ATTACK_ABSOLUTE_KIND_THROW, 0, 0.0, 280, 16, 0, 50, 0.0, 1.0, *ATTACK_LR_CHECK_F, 0.0, true, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_NONE, *ATTACK_REGION_THROW);
1417
ATTACK_ABS(fighter, *FIGHTER_ATTACK_ABSOLUTE_KIND_CATCH, 0, 0.0, 361, 100, 0, 100, 0.0, 1.0, *ATTACK_LR_CHECK_F, 0.0, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_NONE, *ATTACK_REGION_THROW);
1518
ATTACK_ABS(fighter, *FIGHTER_ATTACK_ABSOLUTE_KIND_THROW_MEWTWO, 0, 1.0, 280, 50, 0, 100, 0.0, 1.0, *ATTACK_LR_CHECK_F, 0.0, true, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_NONE, *ATTACK_REGION_THROW);
@@ -29,10 +32,10 @@ unsafe fn mewtwo_special_s_game(fighter: &mut L2CAgentBase) {
2932
ATK_HIT_ABS(fighter, *FIGHTER_ATTACK_ABSOLUTE_KIND_THROW_MEWTWO, Hash40::new("throw"), target, target_group, target_no);
3033
}
3134
}
32-
frame(lua_state, 36.0);
35+
frame(lua_state, 32.0);
3336
if is_excute(fighter) {
3437
shield!(fighter, *MA_MSC_CMD_SHIELD_OFF, *COLLISION_KIND_REFLECTOR, *FIGHTER_MEWTWO_REFLECTOR_KIND_REFLECTOR, *FIGHTER_REFLECTOR_GROUP_EXTEND);
35-
WorkModule::on_flag(boma, *FIGHTER_MEWTWO_STATUS_SPECIAL_S_FLAG_GRAVITY_NORMAL);
38+
fighter.on_flag(*FIGHTER_MEWTWO_STATUS_SPECIAL_S_FLAG_GRAVITY_NORMAL);
3639
}
3740
frame(lua_state, 40.0);
3841
if is_excute(fighter) {
@@ -41,6 +44,45 @@ unsafe fn mewtwo_special_s_game(fighter: &mut L2CAgentBase) {
4144
}
4245
}
4346

47+
#[acmd_script( agent = "mewtwo", script = "effect_specials", category = ACMD_EFFECT, low_priority )]
48+
unsafe fn mewtwo_special_s_effect(fighter: &mut L2CAgentBase) {
49+
let lua_state = fighter.lua_state_agent;
50+
let boma = fighter.boma();
51+
frame(lua_state, 6.0);
52+
if is_excute(fighter) {
53+
EFFECT_FOLLOW_FLIP(fighter, Hash40::new("mewtwo_pk_hand"), Hash40::new("mewtwo_pk_hand"), Hash40::new("havel"), -1.5, 0, 2, 0, 0, 0, 0.4, true, *EF_FLIP_YZ);
54+
}
55+
frame(lua_state, 8.0);
56+
if is_excute(fighter) {
57+
EFFECT(fighter, Hash40::new("sys_smash_flash_s"), Hash40::new("top"), 0, 8, 13, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, true);
58+
LAST_EFFECT_SET_ALPHA(fighter, 0.8);
59+
}
60+
frame(lua_state, 10.0);
61+
if is_excute(fighter) {
62+
EFFECT_FOLLOW_NO_STOP(fighter, Hash40::new("mewtwo_nenriki"), Hash40::new("top"), 0, 9, 17, 0, 90, 0, 0.45, true);
63+
EffectModule::enable_sync_init_pos_last(boma);
64+
}
65+
frame(lua_state, 14.0);
66+
if is_excute(fighter) {
67+
LANDING_EFFECT(fighter, Hash40::new("sys_dash_smoke"), Hash40::new("top"), -5, 0, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 0, 0, false);
68+
}
69+
frame(lua_state, 20.0);
70+
if is_excute(fighter) {
71+
EFFECT_OFF_KIND(fighter, Hash40::new("mewtwo_pk_hand"), false, false);
72+
}
73+
frame(lua_state, 35.0);
74+
if is_excute(fighter) {
75+
EFFECT_OFF_KIND(fighter, Hash40::new("mewtwo_nenriki"), false, true);
76+
}
77+
}
78+
79+
#[acmd_script( agent = "mewtwo", script = "game_specialhistart", category = ACMD_GAME, low_priority )]
80+
unsafe fn mewtwo_special_hi_start_game(fighter: &mut L2CAgentBase) {
81+
if is_excute(fighter) {
82+
GroundModule::set_correct(fighter.module_accessor, app::GroundCorrectKind(*GROUND_CORRECT_KIND_GROUND_CLIFF_STOP));
83+
}
84+
}
85+
4486
#[acmd_script( agent = "mewtwo", script = "game_specialairhistart", category = ACMD_GAME, low_priority )]
4587
unsafe fn mewtwo_special_air_hi_start_game(fighter: &mut L2CAgentBase) {
4688
let lua_state = fighter.lua_state_agent;
@@ -108,9 +150,11 @@ unsafe fn bindball_shoot_game(fighter: &mut L2CAgentBase) {
108150

109151
pub fn install() {
110152
install_acmd_scripts!(
153+
mewtwo_special_hi_start_game,
111154
mewtwo_special_air_hi_start_game,
112155
mewtwo_special_air_hi_game,
113156
mewtwo_special_s_game,
157+
mewtwo_special_s_effect,
114158
mewtwo_special_lw_game,
115159
mewtwo_special_air_lw_game,
116160
bindball_shoot_game,

fighters/mewtwo/src/acmd/throws.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ unsafe fn mewtwo_throw_hi_game(fighter: &mut L2CAgentBase) {
99
ATTACK_ABS(fighter, *FIGHTER_ATTACK_ABSOLUTE_KIND_CATCH, 0, 3.0, 361, 100, 0, 40, 0.0, 1.0, *ATTACK_LR_CHECK_F, 0.0, true, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_NONE, *ATTACK_REGION_THROW);
1010
}
1111
frame(lua_state, 43.0);
12-
FT_MOTION_RATE_RANGE(fighter, 43.0, 78.0, 28.0);
12+
FT_MOTION_RATE_RANGE(fighter, 43.0, 78.0, 27.0);
1313
if is_excute(fighter) {
1414
ATK_HIT_ABS(fighter, *FIGHTER_ATTACK_ABSOLUTE_KIND_THROW, Hash40::new("throw"), WorkModule::get_int64(boma, *FIGHTER_STATUS_THROW_WORK_INT_TARGET_OBJECT), WorkModule::get_int64(boma, *FIGHTER_STATUS_THROW_WORK_INT_TARGET_HIT_GROUP), WorkModule::get_int64(boma, *FIGHTER_STATUS_THROW_WORK_INT_TARGET_HIT_NO));
1515
AttackModule::clear_all(boma);

0 commit comments

Comments
 (0)