Skip to content

Commit e9c672a

Browse files
authored
Merge pull request #2262 from HDR-Development/sephiroth-again-again
Sephiroth specials rework
2 parents 16ebe2a + 65acdd9 commit e9c672a

File tree

19 files changed

+1009
-281
lines changed

19 files changed

+1009
-281
lines changed

dynamic/src/consts.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,12 @@ pub mod vars {
525525
pub mod edge {
526526
pub mod instance {
527527
// flags
528-
pub const SPECIAL_HI_BLADE_DASH_NO_HITBOX: i32 = 0x1000;
528+
pub const SPECIAL_HI_BLADE_DASH_NO_HITBOX: i32 = 0x0100;
529+
}
530+
pub mod status {
531+
// flags
532+
pub const FLASH_HOLD: i32 = 0x1101;
533+
pub const SPECIAL_N_FIRE: i32 = 0x1102;
529534
}
530535
}
531536

fighters/edge/src/acmd/aerials.rs

+4
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,10 @@ unsafe fn sephiroth_attack_air_b_effect(fighter: &mut L2CAgentBase) {
265265
EFFECT_DETACH_KIND(fighter, Hash40::new("edge_attack_dash"), -1);
266266
EFFECT_DETACH_KIND(fighter, Hash40::new("edge_attack_dash_aura"), -1);
267267
}
268+
frame(lua_state, 19.0);
269+
if is_excute(fighter) {
270+
EFFECT_OFF_KIND(fighter, Hash40::new("edge_slash_arc"), false, false);
271+
}
268272
frame(lua_state, 22.0);
269273
if is_excute(fighter) {
270274
EFFECT_OFF_KIND(fighter, Hash40::new("edge_attack_dash"), false, false);

fighters/edge/src/acmd/ground.rs

+6-15
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ unsafe fn sephiroth_attack_11_game(fighter: &mut L2CAgentBase) {
1212
ATTACK(fighter, 0, 0, Hash40::new("legl"), 2.5, 60, 100, 30, 1, 3.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_d, *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);
1313
ATTACK(fighter, 1, 0, Hash40::new("kneel"), 2.5, 82, 100, 30, 1, 3.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_d, *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);
1414
ATTACK(fighter, 2, 0, Hash40::new("kneel"), 2.5, 82, 100, 30, 1, 3.5, 4.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_d, *COLLISION_CATEGORY_MASK_FIGHTER, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
15-
ATTACK(fighter, 3, 0, Hash40::new("top"), 2.5, 82, 100, 30, 1, 3.5, 0.0, 6.0, 8.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_d, *COLLISION_CATEGORY_MASK_FIGHTER, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
16-
ATTACK(fighter, 4, 0, Hash40::new("top"), 2.5, 361, 15, 0, 25, 3.0, 0.0, 3.0, 4.0, Some(0.0), Some(3.0), Some(12.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_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);
17-
AttackModule::set_down_only(boma, 4, false);
15+
ATTACK(fighter, 3, 0, Hash40::new("top"), 2.5, 361, 15, 0, 25, 3.0, 0.0, 3.0, 4.0, Some(0.0), Some(3.0), Some(12.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_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);
16+
AttackModule::set_down_only(boma, 3, false);
1817
}
1918
wait(lua_state, 3.0);
2019
if is_excute(fighter) {
@@ -24,10 +23,7 @@ unsafe fn sephiroth_attack_11_game(fighter: &mut L2CAgentBase) {
2423
if is_excute(fighter) {
2524
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_ENABLE_COMBO);
2625
}
27-
frame(lua_state, 18.0);
28-
if is_excute(fighter) {
29-
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_ENABLE_NO_HIT_COMBO);
30-
}
26+
3127
}
3228

3329
#[acmd_script( agent = "edge", script = "expression_attack11", category = ACMD_EXPRESSION, low_priority )]
@@ -67,10 +63,8 @@ unsafe fn sephiroth_attack_12_game(fighter: &mut L2CAgentBase) {
6763
ATTACK(fighter, 0, 0, Hash40::new("legr"), 3.0, 60, 100, 30, 1, 3.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_d, *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);
6864
ATTACK(fighter, 1, 0, Hash40::new("kneer"), 3.0, 75, 100, 30, 1, 3.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_d, *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);
6965
ATTACK(fighter, 2, 0, Hash40::new("kneer"), 3.0, 75, 100, 30, 1, 3.5, 4.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_d, *COLLISION_CATEGORY_MASK_FIGHTER, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
70-
ATTACK(fighter, 3, 0, Hash40::new("top"), 3.0, 75, 100, 30, 1, 3.5, 0.0, 6.0, 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_d, *COLLISION_CATEGORY_MASK_FIGHTER, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
71-
ATTACK(fighter, 4, 0, Hash40::new("top"), 3.0, 75, 100, 30, 1, 3.5, 0.0, 6.0, 11.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_d, *COLLISION_CATEGORY_MASK_FIGHTER, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
72-
ATTACK(fighter, 5, 0, Hash40::new("top"), 3.0, 361, 15, 0, 25, 3.0, 0.0, 3.0, 4.0, Some(0.0), Some(3.0), Some(14.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_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);
73-
AttackModule::set_down_only(boma, 5, false);
66+
ATTACK(fighter, 3, 0, Hash40::new("top"), 3.0, 361, 15, 0, 25, 3.0, 0.0, 3.0, 4.0, Some(0.0), Some(3.0), Some(14.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_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);
67+
AttackModule::set_down_only(boma, 3, false);
7468
}
7569
wait(lua_state, 3.0);
7670
if is_excute(fighter) {
@@ -80,10 +74,7 @@ unsafe fn sephiroth_attack_12_game(fighter: &mut L2CAgentBase) {
8074
if is_excute(fighter) {
8175
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_ENABLE_COMBO);
8276
}
83-
frame(lua_state, 18.0);
84-
if is_excute(fighter) {
85-
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_ENABLE_NO_HIT_COMBO);
86-
}
77+
8778
}
8879

8980
#[acmd_script( agent = "edge", script = "game_attack13" , category = ACMD_GAME , low_priority)]

fighters/edge/src/acmd/other.rs

+64
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,40 @@ unsafe fn turn_dash_game(fighter: &mut L2CAgentBase) {
189189

190190
}
191191

192+
#[acmd_script( agent = "edge_fire", script = "game_specialn1" , category = ACMD_GAME , low_priority)]
193+
unsafe fn edge_fire_special_n1_game(fighter: &mut L2CAgentBase) {
194+
let lua_state = fighter.lua_state_agent;
195+
let boma = fighter.boma();
196+
197+
}
198+
199+
#[acmd_script( agent = "edge_fire", script = "game_specialn2" , category = ACMD_GAME , low_priority)]
200+
unsafe fn edge_fire_special_n2_game(fighter: &mut L2CAgentBase) {
201+
let lua_state = fighter.lua_state_agent;
202+
let boma = fighter.boma();
203+
204+
}
205+
206+
#[acmd_script( agent = "edge_fire", script = "game_bursts" , category = ACMD_GAME , low_priority)]
207+
unsafe fn edge_fire_burst_s_game(fighter: &mut L2CAgentBase) {
208+
let lua_state = fighter.lua_state_agent;
209+
let boma = fighter.boma();
210+
if is_excute(fighter) {
211+
ControlModule::set_rumble(boma, Hash40::new("rbkind_furafura"), 9, false, *BATTLE_OBJECT_ID_INVALID as u32);
212+
}
213+
frame(lua_state, 2.0);
214+
if is_excute(fighter) {
215+
ControlModule::set_rumble(boma, Hash40::new("rbkind_explosionm"), 6, false, *BATTLE_OBJECT_ID_INVALID as u32);
216+
QUAKE(fighter, *CAMERA_QUAKE_KIND_S);
217+
AttackModule::disable_tip(boma);
218+
ATTACK(fighter, 0, 0, Hash40::new("top"), 10.5, 70, 64, 0, 77, 12.5, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, false, -5, 0.0, 0, false, true, false, false, false, *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_FIRE, *ATTACK_REGION_MAGIC);
219+
}
220+
frame(lua_state, 6.0);
221+
if is_excute(fighter) {
222+
notify_event_msc_cmd!(fighter, Hash40::new_raw(0x199c462b5d));
223+
}
224+
}
225+
192226
#[acmd_script( agent = "edge_flare1", script = "game_fly" , category = ACMD_GAME , low_priority)]
193227
unsafe fn edge_flare1_fly_game(fighter: &mut L2CAgentBase) {
194228
let lua_state = fighter.lua_state_agent;
@@ -243,6 +277,32 @@ unsafe fn edge_flare2_try_game(fighter: &mut L2CAgentBase) {
243277
}
244278
}
245279

280+
#[acmd_script( agent = "edge_flash", script = "game_attack" , category = ACMD_GAME , low_priority)]
281+
unsafe fn edge_flash_game_attack(fighter: &mut L2CAgentBase) {
282+
let lua_state = fighter.lua_state_agent;
283+
let boma = fighter.boma();
284+
if is_excute(fighter) {
285+
let owner_id = WorkModule::get_int(boma, *WEAPON_INSTANCE_WORK_ID_INT_LINK_OWNER) as u32;
286+
let edge = utils::util::get_battle_object_from_id(owner_id);
287+
if VarModule::is_flag(edge, vars::edge::status::FLASH_HOLD) {
288+
let pos_x = PostureModule::pos_x(boma);
289+
let pos_y = PostureModule::pos_y(boma);
290+
let facing = PostureModule::lr(boma);
291+
PostureModule::set_pos(boma, &Vector3f::new(pos_x + (35.0 * PostureModule::lr(boma)), pos_y, 0.0));
292+
}
293+
ATTACK(fighter, 0, 0, Hash40::new("top"), 2.0, 366, 65, 60, 40, 12.0, 0.0, 1.5, 0.0, None, None, None, 0.8, 0.5, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_POS, true, -1, 0.0, 5, true, true, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_sting_flash"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_MAGIC);
294+
}
295+
frame(lua_state, 15.0);
296+
if is_excute(fighter) {
297+
AttackModule::clear_all(boma);
298+
ATTACK(fighter, 0, 0, Hash40::new("top"), 6.5, 60, 70, 0, 80, 13.0, 0.0, 1.5, 0.0, None, None, None, 0.7, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, false, -3, 0.0, 0, true, true, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_ALL, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_sting_flash"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_MAGIC);
299+
}
300+
frame(lua_state, 16.0);
301+
if is_excute(fighter) {
302+
notify_event_msc_cmd!(fighter, Hash40::new_raw(0x199c462b5d));
303+
}
304+
}
305+
246306
#[acmd_script( agent = "edge", script = "game_escapeair" , category = ACMD_GAME , low_priority)]
247307
unsafe fn escape_air_game(fighter: &mut L2CAgentBase) {
248308
let lua_state = fighter.lua_state_agent;
@@ -282,10 +342,14 @@ pub fn install() {
282342
dash_game,
283343
dash_sound,
284344
turn_dash_game,
345+
edge_fire_special_n1_game,
346+
edge_fire_special_n2_game,
347+
edge_fire_burst_s_game,
285348
edge_flare1_fly_game,
286349
edge_flare2_exp_game,
287350
edge_flare2_fly_game,
288351
edge_flare2_try_game,
352+
edge_flash_game_attack,
289353
damageflyhi_sound,
290354
damageflylw_sound,
291355
damageflyn_sound,

0 commit comments

Comments
 (0)