Skip to content

Commit 812f6da

Browse files
authored
Merge pull request #2224 from HDR-Development/icies-dsmash
ICs DSmash & Grabs
2 parents 60dd85a + 3c8135e commit 812f6da

File tree

4 files changed

+97
-23
lines changed

4 files changed

+97
-23
lines changed

fighters/nana/src/acmd/other.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ unsafe fn nana_catch_game(fighter: &mut L2CAgentBase) {
233233
}
234234
frame(lua_state, 6.0);
235235
if is_excute(fighter) {
236-
CATCH(fighter, 0, Hash40::new("top"), 3.6, 0.0, 5.0, 3.6, Some(0.0), Some(5.0), Some(7.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_GA);
236+
CATCH(fighter, 0, Hash40::new("top"), 3.75, 0.0, 5.75, 3.5, Some(0.0), Some(5.75), Some(6.75), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_GA);
237237
}
238238
game_CaptureCutCommon(fighter);
239239
wait(lua_state, 3.0);
@@ -272,8 +272,8 @@ unsafe fn nana_catch_dash_game(fighter: &mut L2CAgentBase) {
272272
frame(lua_state, 8.0);
273273
FT_MOTION_RATE(fighter, 1.000);
274274
if is_excute(fighter) {
275-
CATCH(fighter, 0, Hash40::new("top"), 2.9, 0.0, 5.0, 4.0, Some(0.0), Some(5.0), Some(8.1), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_G);
276-
CATCH(fighter, 1, Hash40::new("top"), 1.45, 0.0, 5.0, 2.55, Some(0.0), Some(5.0), Some(9.55), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_A);
275+
CATCH(fighter, 0, Hash40::new("top"), 3.0, 0.0, 5.0, 4.0, Some(0.0), Some(5.0), Some(8.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_G);
276+
CATCH(fighter, 1, Hash40::new("top"), 2.0, 0.0, 5.0, 3.0, Some(0.0), Some(5.0), Some(9.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_A);
277277
}
278278
game_CaptureCutCommon(fighter);
279279
frame(lua_state, 10.0);
@@ -316,8 +316,8 @@ unsafe fn nana_catch_turn_game(fighter: &mut L2CAgentBase) {
316316
frame(lua_state, 9.0);
317317
FT_MOTION_RATE(fighter, 1.000);
318318
if is_excute(fighter) {
319-
CATCH(fighter, 0, Hash40::new("top"), 3.6, 0.0, 5.0, -4.0, Some(0.0), Some(5.0), Some(-11.4), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_G);
320-
CATCH(fighter, 1, Hash40::new("top"), 1.8, 0.0, 5.0, -2.2, Some(0.0), Some(5.0), Some(-13.2), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_A);
319+
CATCH(fighter, 0, Hash40::new("top"), 4.0, 0.0, 5.0, -5.0, Some(0.0), Some(5.0), Some(-13.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_G);
320+
CATCH(fighter, 1, Hash40::new("top"), 3.0, 0.0, 5.0, -4.0, Some(0.0), Some(5.0), Some(-14.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_A);
321321
}
322322
game_CaptureCutCommon(fighter);
323323
wait(lua_state, 2.0);

fighters/nana/src/acmd/smashes.rs

+59-7
Original file line numberDiff line numberDiff line change
@@ -89,29 +89,79 @@ unsafe fn nana_attack_hi4_game(fighter: &mut L2CAgentBase) {
8989

9090
#[acmd_script( agent = "nana", script = "game_attacklw4_nana" , category = ACMD_GAME , low_priority)]
9191
unsafe fn nana_attack_lw4_game(fighter: &mut L2CAgentBase) {
92-
// TODO: rewrite popo dsmash status to not start_partner_turn
9392
let lua_state = fighter.lua_state_agent;
9493
let boma = fighter.boma();
94+
frame(lua_state, 1.0);
95+
FT_MOTION_RATE_RANGE(fighter, 1.0, 5.0, 3.0);
9596
frame(lua_state, 5.0);
97+
FT_MOTION_RATE_RANGE(fighter, 5.0, 10.0, 3.0);
9698
if is_excute(fighter) {
9799
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_START_SMASH_HOLD);
98100
}
99-
100-
frame(lua_state, 8.0);
101+
frame(lua_state, 8.33); // effectively frame 7
101102
if is_excute(fighter) {
102103
ATTACK(fighter, 1, 0, Hash40::new("havel"), 12.0, 40, 110, 0, 50, 3.0, 0.0, 3.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_L, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_HAMMER);
103104
ATTACK(fighter, 2, 0, Hash40::new("havel"), 12.0, 40, 110, 0, 50, 3.0, 0.0, 7.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_L, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_HAMMER);
104105
AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false);
105106
}
106-
frame(lua_state, 12.0);
107+
frame(lua_state, 10.0);
108+
FT_MOTION_RATE(fighter, 1.0);
109+
frame(lua_state, 13.0);
110+
FT_MOTION_RATE_RANGE(fighter, 13.0, 21.0, 4.0);
111+
frame(lua_state, 21.0);
112+
FT_MOTION_RATE(fighter, 1.0);
107113
if is_excute(fighter) {
108114
AttackModule::clear_all(boma);
109115
}
110-
frame(lua_state, 45.0);
116+
}
117+
118+
#[acmd_script( agent = "nana", script = "effect_attacklw4_nana" , category = ACMD_EFFECT , low_priority)]
119+
unsafe fn effect_attacklw4(fighter: &mut L2CAgentBase) {
120+
let lua_state = fighter.lua_state_agent;
121+
let boma = fighter.boma();
122+
frame(lua_state, 4.0);
123+
if is_excute(fighter) {
124+
EFFECT(fighter, Hash40::new("sys_smash_flash"), Hash40::new("top"), 6, 7, -10, 0, 0, 0, 0.8, 0, 0, 0, 0, 0, 0, true);
125+
}
126+
frame(lua_state, 10.0);
111127
if is_excute(fighter) {
112-
StatusModule::change_status_request_from_script(boma, *FIGHTER_STATUS_KIND_WAIT, false);
128+
LANDING_EFFECT(fighter, Hash40::new("sys_atk_smoke"), Hash40::new("top"), 5, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, false);
129+
}
130+
frame(lua_state, 10.0);
131+
if is_excute(fighter) {
132+
EFFECT_FOLLOW_FLIP(fighter, Hash40::new("popo_smash_arc_b"), Hash40::new("popo_smash_arc_b"), Hash40::new("top"), 1.5, 2.5, 1, 184.5, -3, -3, 1.1, true, *EF_FLIP_YZ);
133+
LAST_EFFECT_SET_RATE(fighter, 1.5);
134+
}
135+
}
136+
137+
#[acmd_script( agent = "nana", script = "expression_attacklw4_nana", category = ACMD_EXPRESSION, low_priority )]
138+
unsafe fn nana_attack_lw4_expression(fighter: &mut L2CAgentBase) {
139+
let lua_state = fighter.lua_state_agent;
140+
let boma = fighter.boma();
141+
if is_excute(fighter) {
142+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE, *SLOPE_STATUS_L);
143+
}
144+
frame(lua_state, 6.0);
145+
if is_excute(fighter) {
146+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_TOP, 2);
147+
ControlModule::set_rumble(boma, Hash40::new("rbkind_nohitl"), 0, false, *BATTLE_OBJECT_ID_INVALID as u32);
148+
}
149+
frame(lua_state, 8.0);
150+
if is_excute(fighter) {
151+
macros::RUMBLE_HIT(fighter, Hash40::new("rbkind_attackl"), 0);
152+
}
153+
frame(lua_state, 15.0);
154+
if is_excute(fighter) {
155+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_TOP, 8, true);
156+
}
157+
frame(lua_state, 40.0);
158+
if is_excute(fighter) {
159+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_L, 4);
160+
}
161+
frame(lua_state, 44.0);
162+
if is_excute(fighter) {
163+
WorkModule::on_flag(boma, *FIGHTER_POPO_STATUS_ATTACK_LW4_FLAG_NANA_START_TURN);
113164
}
114-
115165
}
116166

117167
pub fn install() {
@@ -120,6 +170,8 @@ pub fn install() {
120170
nana_attack_s4_s_effect,
121171
nana_attack_hi4_game,
122172
nana_attack_lw4_game,
173+
effect_attacklw4,
174+
nana_attack_lw4_expression
123175
);
124176
}
125177

fighters/popo/src/acmd/other.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ unsafe fn popo_catch_game(fighter: &mut L2CAgentBase) {
136136
}
137137
frame(lua_state, 6.0);
138138
if is_excute(fighter) {
139-
CATCH(fighter, 0, Hash40::new("top"), 3.6, 0.0, 5.0, 3.6, Some(0.0), Some(5.0), Some(7.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_GA);
139+
CATCH(fighter, 0, Hash40::new("top"), 3.75, 0.0, 5.75, 3.5, Some(0.0), Some(5.75), Some(6.75), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_GA);
140140
}
141141
game_CaptureCutCommon(fighter);
142142
wait(lua_state, 3.0);
@@ -161,8 +161,8 @@ unsafe fn popo_catch_dash_game(fighter: &mut L2CAgentBase) {
161161
frame(lua_state, 8.0);
162162
FT_MOTION_RATE(fighter, 1.000);
163163
if is_excute(fighter) {
164-
CATCH(fighter, 0, Hash40::new("top"), 2.9, 0.0, 5.0, 4.0, Some(0.0), Some(5.0), Some(8.1), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_G);
165-
CATCH(fighter, 1, Hash40::new("top"), 1.45, 0.0, 5.0, 2.55, Some(0.0), Some(5.0), Some(9.55), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_A);
164+
CATCH(fighter, 0, Hash40::new("top"), 3.0, 0.0, 5.0, 4.0, Some(0.0), Some(5.0), Some(8.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_G);
165+
CATCH(fighter, 1, Hash40::new("top"), 2.0, 0.0, 5.0, 3.0, Some(0.0), Some(5.0), Some(9.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_A);
166166
}
167167
game_CaptureCutCommon(fighter);
168168
frame(lua_state, 10.0);
@@ -187,8 +187,8 @@ unsafe fn popo_catch_turn_game(fighter: &mut L2CAgentBase) {
187187
frame(lua_state, 9.0);
188188
FT_MOTION_RATE(fighter, 1.000);
189189
if is_excute(fighter) {
190-
CATCH(fighter, 0, Hash40::new("top"), 3.6, 0.0, 5.0, -4.0, Some(0.0), Some(5.0), Some(-11.4), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_G);
191-
CATCH(fighter, 1, Hash40::new("top"), 1.8, 0.0, 5.0, -2.2, Some(0.0), Some(5.0), Some(-13.2), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_A);
190+
CATCH(fighter, 0, Hash40::new("top"), 4.0, 0.0, 5.0, -5.0, Some(0.0), Some(5.0), Some(-13.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_G);
191+
CATCH(fighter, 1, Hash40::new("top"), 3.0, 0.0, 5.0, -4.0, Some(0.0), Some(5.0), Some(-14.0), *FIGHTER_STATUS_KIND_CAPTURE_PULLED, *COLLISION_SITUATION_MASK_A);
192192
}
193193
game_CaptureCutCommon(fighter);
194194
wait(lua_state, 2.0);

fighters/popo/src/acmd/smashes.rs

+28-6
Original file line numberDiff line numberDiff line change
@@ -127,26 +127,47 @@ unsafe fn popo_attack_hi4_game(fighter: &mut L2CAgentBase) {
127127
unsafe fn popo_attack_lw4_game(fighter: &mut L2CAgentBase) {
128128
let lua_state = fighter.lua_state_agent;
129129
let boma = fighter.boma();
130+
frame(lua_state, 1.0);
131+
FT_MOTION_RATE_RANGE(fighter, 1.0, 5.0, 3.0);
130132
frame(lua_state, 5.0);
133+
FT_MOTION_RATE_RANGE(fighter, 5.0, 10.0, 3.0);
131134
if is_excute(fighter) {
132135
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_START_SMASH_HOLD);
133136
}
134-
135-
frame(lua_state, 8.0);
137+
frame(lua_state, 8.33); // effectively frame 7
136138
if is_excute(fighter) {
137139
ATTACK(fighter, 1, 0, Hash40::new("havel"), 12.0, 40, 110, 0, 50, 3.0, 0.0, 3.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_L, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_HAMMER);
138140
ATTACK(fighter, 2, 0, Hash40::new("havel"), 12.0, 40, 110, 0, 50, 3.0, 0.0, 7.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_L, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_HAMMER);
139141
AttackModule::set_attack_height_all(boma, app::AttackHeight(*ATTACK_HEIGHT_LOW), false);
140142
}
141-
frame(lua_state, 12.0);
143+
frame(lua_state, 10.0);
144+
FT_MOTION_RATE(fighter, 1.0);
145+
frame(lua_state, 13.0);
146+
FT_MOTION_RATE_RANGE(fighter, 13.0, 21.0, 4.0);
147+
frame(lua_state, 21.0);
148+
FT_MOTION_RATE(fighter, 1.0);
142149
if is_excute(fighter) {
143150
AttackModule::clear_all(boma);
144151
}
145-
frame(lua_state, 45.0);
152+
}
153+
154+
#[acmd_script( agent = "popo", script = "effect_attacklw4" , category = ACMD_EFFECT , low_priority)]
155+
unsafe fn effect_attacklw4(fighter: &mut L2CAgentBase) {
156+
let lua_state = fighter.lua_state_agent;
157+
let boma = fighter.boma();
158+
frame(lua_state, 4.0);
146159
if is_excute(fighter) {
147-
StatusModule::change_status_request_from_script(boma, *FIGHTER_STATUS_KIND_WAIT, false);
160+
EFFECT(fighter, Hash40::new("sys_smash_flash"), Hash40::new("top"), 6, 7, -10, 0, 0, 0, 0.8, 0, 0, 0, 0, 0, 0, true);
161+
}
162+
frame(lua_state, 10.0);
163+
if is_excute(fighter) {
164+
LANDING_EFFECT(fighter, Hash40::new("sys_atk_smoke"), Hash40::new("top"), 5, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0, 0, false);
165+
}
166+
frame(lua_state, 10.0);
167+
if is_excute(fighter) {
168+
EFFECT_FOLLOW_FLIP(fighter, Hash40::new("popo_smash_arc_b"), Hash40::new("popo_smash_arc_b"), Hash40::new("top"), 1.5, 2.5, 1, 184.5, -3, -3, 1.1, true, *EF_FLIP_YZ);
169+
LAST_EFFECT_SET_RATE(fighter, 1.5);
148170
}
149-
150171
}
151172

152173
#[acmd_script( agent = "popo", script = "expression_attacklw4", category = ACMD_EXPRESSION, low_priority )]
@@ -186,6 +207,7 @@ pub fn install() {
186207
popo_attack_s4_s_expression,
187208
popo_attack_hi4_game,
188209
popo_attack_lw4_game,
210+
effect_attacklw4,
189211
popo_attack_lw4_expression,
190212
);
191213
}

0 commit comments

Comments
 (0)