Skip to content

Commit f3e2580

Browse files
authored
Merge pull request #2263 from naptimehtx/sonic-utilt
Sonic Up Tilt Rework
2 parents 8ef458b + ade4d99 commit f3e2580

File tree

2 files changed

+47
-17
lines changed

2 files changed

+47
-17
lines changed

fighters/sonic/src/acmd/tilts.rs

+46-16
Original file line numberDiff line numberDiff line change
@@ -181,36 +181,65 @@ unsafe extern "C" fn sonic_attack_lw3_effect(fighter: &mut L2CAgentBase) {
181181
}
182182
}
183183

184-
185184
unsafe extern "C" fn sonic_attack_hi3_game(fighter: &mut L2CAgentBase) {
186185
let lua_state = fighter.lua_state_agent;
187186
let boma = fighter.boma();
188-
frame(lua_state, 6.0);
189-
if is_excute(fighter) {
190-
ATTACK(fighter, 0, 0, Hash40::new("top"), 2.0, 96, 100, 100, 0, 5.2, 0.0, 8.0, 4.0, None, None, None, 1.0, 0.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_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
191-
}
192-
frame(lua_state, 7.0);
187+
frame(lua_state, 8.0);
193188
if is_excute(fighter) {
194-
ATTACK(fighter, 1, 0, Hash40::new("legr"), 2.0, 90, 100, 60, 0, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 0.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_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
195-
ATTACK(fighter, 2, 0, Hash40::new("kneer"), 2.0, 95, 100, 35, 0, 4.0, 2.0, 0.0, 0.0, None, None, None, 1.0, 0.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_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
196-
ATTACK(fighter, 3, 0, Hash40::new("kneer"), 2.0, 95, 100, 12, 0, 5.0, 7.0, 0.0, -1.5, None, None, None, 1.0, 0.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_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
189+
// ground only
190+
ATTACK(fighter, 1, 0, Hash40::new("legr"), 2.0, 80, 100, 35, 0, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 0.5, *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_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
191+
ATTACK(fighter, 2, 0, Hash40::new("kneer"), 2.0, 80, 100, 35, 0, 4.0, 2.0, 0.0, 0.0, None, None, None, 1.0, 0.5, *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_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
192+
ATTACK(fighter, 3, 0, Hash40::new("kneer"), 2.0, 361, 100, 45, 0, 5.0, 7.0, 0.0, -1.5, None, None, None, 1.0, 0.5, *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_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
193+
//air only
194+
ATTACK(fighter, 4, 0, Hash40::new("legr"), 2.0, 366, 100, 35, 0, 3.0, 0.0, 0.0, 0.0, None, None, None, 1.0, 0.5, *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_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
195+
ATTACK(fighter, 5, 0, Hash40::new("kneer"), 2.0, 366, 100, 35, 0, 4.0, 2.0, 0.0, 0.0, None, None, None, 1.0, 0.5, *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_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
196+
ATTACK(fighter, 6, 0, Hash40::new("kneer"), 2.0, 366, 100, 45, 0, 5.0, 7.0, 0.0, -1.5, None, None, None, 1.0, 0.5, *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_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
197197
}
198-
frame(lua_state, 9.0);
198+
frame(lua_state, 13.0);
199199
if is_excute(fighter) {
200200
AttackModule::clear_all(boma);
201201
}
202202
frame(lua_state, 13.0);
203203
if is_excute(fighter) {
204-
ATTACK(fighter, 0, 0, Hash40::new("legl"), 6.0, 70, 120, 0, 40, 4.0, 0.0, 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_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
205-
ATTACK(fighter, 1, 0, Hash40::new("kneel"), 6.0, 70, 120, 0, 40, 5.0, 2.0, 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_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
206-
ATTACK(fighter, 2, 0, Hash40::new("kneel"), 6.0, 70, 120, 0, 40, 6.0, 7.0, 0.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_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);
204+
ATTACK(fighter, 0, 0, Hash40::new("legl"), 6.0, 75, 120, 0, 40, 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_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
205+
ATTACK(fighter, 1, 0, Hash40::new("kneel"), 6.0, 75, 120, 0, 40, 4.0, 2.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_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
206+
ATTACK(fighter, 2, 0, Hash40::new("kneel"), 6.0, 75, 120, 0, 40, 4.2, 7.0, 0.0, 1.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_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
207207
}
208-
frame(lua_state, 15.0);
208+
frame(lua_state, 22.0);
209209
if is_excute(fighter) {
210210
AttackModule::clear_all(boma);
211211
}
212-
frame(lua_state, 26.0);
213-
FT_MOTION_RATE(fighter, 2.0);
212+
}
213+
214+
unsafe extern "C" fn sonic_attack_hi3_effect(fighter: &mut L2CAgentBase) {
215+
let lua_state = fighter.lua_state_agent;
216+
let boma = fighter.boma();
217+
frame(lua_state, 6.0);
218+
if is_excute(fighter) {
219+
LANDING_EFFECT(fighter, Hash40::new("sys_h_smoke_a"), Hash40::new("top"), 2, 0, 0, 0, 0, 0, 0.7, 0, 0, 0, 0, 0, 0, false);
220+
}
221+
frame(lua_state, 8.0);
222+
if is_excute(fighter) {
223+
EFFECT_FOLLOW_FLIP(fighter, Hash40::new("sys_attack_arc_b"), Hash40::new("sys_attack_arc_b"), Hash40::new("top"), 2, 8, 4, 180, 325, 90, 1.2, true, *EF_FLIP_YZ);
224+
LAST_EFFECT_SET_RATE(fighter, 0.55);
225+
}
226+
frame(lua_state, 14.0);
227+
if is_excute(fighter) {
228+
EFFECT_FOLLOW_FLIP(fighter, Hash40::new("sys_attack_arc"), Hash40::new("sys_attack_arc"), Hash40::new("top"), 2, 8, -0.2, 180, 260, 90, 1.1, true, *EF_FLIP_YZ);
229+
LAST_EFFECT_SET_RATE(fighter, 0.7);
230+
}
231+
frame(lua_state, 16.0);
232+
if is_excute(fighter) {
233+
EFFECT_OFF_KIND(fighter, Hash40::new("sys_attack_arc_b"), false, true);
234+
}
235+
frame(lua_state, 24.0);
236+
if is_excute(fighter) {
237+
EFFECT_OFF_KIND(fighter, Hash40::new("sys_attack_arc"), false, true);
238+
}
239+
frame(lua_state, 27.0);
240+
if is_excute(fighter) {
241+
FOOT_EFFECT(fighter, Hash40::new("sys_landing_smoke_s"), Hash40::new("top"), -1.5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
242+
}
214243
}
215244

216245
pub fn install() {
@@ -224,5 +253,6 @@ pub fn install() {
224253
.acmd("game_attacklw3", sonic_attack_lw3_game)
225254
.acmd("effect_attacklw3", sonic_attack_lw3_effect)
226255
.acmd("game_attackhi3", sonic_attack_hi3_game)
256+
.acmd("effect_attackhi3", sonic_attack_hi3_effect)
227257
.install();
228258
}

romfs/source/fighter/sonic/motion/body/motion_patch.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ attack_hi4:
3838
attack_lw4:
3939
attack_hi3:
4040
extra:
41-
cancel_frame: 31
41+
cancel_frame: 36
4242
attack_s4_s:
4343
extra:
4444
cancel_frame: 54

0 commit comments

Comments
 (0)