Skip to content

Commit 60dd85a

Browse files
authored
Merge pull request #2007 from black-calculus/sephiroth-changes
Sephiroth changes (actually for real this time)
2 parents 5b7e9e2 + a08ee54 commit 60dd85a

File tree

14 files changed

+1117
-133
lines changed

14 files changed

+1117
-133
lines changed

dynamic/src/consts.rs

+7
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,13 @@ pub mod vars {
516516
}
517517
}
518518

519+
pub mod edge {
520+
pub mod instance {
521+
// flags
522+
pub const SPECIAL_HI_BLADE_DASH_NO_HITBOX: i32 = 0x1000;
523+
}
524+
}
525+
519526
pub mod eflame {
520527
pub mod instance {
521528
// flags

fighters/edge/src/acmd/aerials.rs

+36-45
Large diffs are not rendered by default.

fighters/edge/src/acmd/ground.rs

+93-32
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,93 @@
1-
21
use super::*;
32

4-
#[acmd_script( agent = "edge", script = "game_attack11" , category = ACMD_GAME , low_priority)]
3+
#[acmd_script( agent = "edge", script = "game_attack11", category = ACMD_GAME, low_priority )]
54
unsafe fn sephiroth_attack_11_game(fighter: &mut L2CAgentBase) {
5+
let lua_state = fighter.lua_state_agent;
6+
let boma = fighter.boma();
7+
if is_excute(fighter) {
8+
FighterAreaModuleImpl::enable_fix_jostle_area(boma, 2.0, 3.0);
9+
}
10+
frame(lua_state, 5.0);
11+
if is_excute(fighter) {
12+
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);
13+
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);
14+
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);
18+
}
19+
wait(lua_state, 3.0);
20+
if is_excute(fighter) {
21+
AttackModule::clear_all(boma);
22+
}
23+
frame(lua_state, 9.0);
24+
if is_excute(fighter) {
25+
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_ENABLE_COMBO);
26+
}
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+
}
31+
}
32+
33+
#[acmd_script( agent = "edge", script = "expression_attack11", category = ACMD_EXPRESSION, low_priority )]
34+
unsafe fn sephiroth_attack_11_expression(fighter: &mut L2CAgentBase) {
35+
let lua_state = fighter.lua_state_agent;
36+
let boma = fighter.boma();
37+
if is_excute(fighter) {
38+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE, *SLOPE_STATUS_LR);
39+
}
40+
frame(lua_state, 3.0);
41+
if is_excute(fighter) {
42+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_R, 4);
43+
}
44+
frame(lua_state, 4.5);
45+
if is_excute(fighter) {
46+
ControlModule::set_rumble(boma, Hash40::new("rbkind_nohitm"), 0, false, *BATTLE_OBJECT_ID_INVALID as u32);
47+
}
48+
frame(lua_state, 6.5);
49+
if is_excute(fighter) {
50+
macros::RUMBLE_HIT(fighter, Hash40::new("rbkind_attackm"), 0);
51+
}
52+
frame(lua_state, 35.0);
53+
if is_excute(fighter) {
54+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_LR, 13);
55+
}
56+
}
57+
58+
#[acmd_script( agent = "edge", script = "game_attack12", category = ACMD_GAME, low_priority )]
59+
unsafe fn sephiroth_attack_12_game(fighter: &mut L2CAgentBase) {
60+
let lua_state = fighter.lua_state_agent;
61+
let boma = fighter.boma();
62+
if is_excute(fighter) {
63+
FighterAreaModuleImpl::enable_fix_jostle_area(boma, 4.0, 3.0);
64+
}
65+
frame(lua_state, 5.0);
66+
if is_excute(fighter) {
67+
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);
68+
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);
69+
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);
74+
}
75+
wait(lua_state, 3.0);
76+
if is_excute(fighter) {
77+
AttackModule::clear_all(boma);
78+
}
79+
frame(lua_state, 9.0);
80+
if is_excute(fighter) {
81+
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_FLAG_ENABLE_COMBO);
82+
}
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+
}
87+
}
88+
89+
#[acmd_script( agent = "edge", script = "game_attack13" , category = ACMD_GAME , low_priority)]
90+
unsafe fn sephiroth_attack_13_game(fighter: &mut L2CAgentBase) {
691
let lua_state = fighter.lua_state_agent;
792
let boma = fighter.boma();
893
frame(lua_state, 1.0);
@@ -37,8 +122,8 @@ unsafe fn sephiroth_attack_11_game(fighter: &mut L2CAgentBase) {
37122
}
38123
}
39124

40-
#[acmd_script( agent = "edge", script = "effect_attack11" , category = ACMD_EFFECT , low_priority)]
41-
unsafe fn sephiroth_attack_11_effect(fighter: &mut L2CAgentBase) {
125+
#[acmd_script( agent = "edge", script = "effect_attack13" , category = ACMD_EFFECT , low_priority)]
126+
unsafe fn sephiroth_attack_13_effect(fighter: &mut L2CAgentBase) {
42127
let lua_state = fighter.lua_state_agent;
43128
let boma = fighter.boma();
44129
frame(lua_state, 2.0);
@@ -73,31 +158,6 @@ unsafe fn sephiroth_attack_11_effect(fighter: &mut L2CAgentBase) {
73158

74159
}
75160

76-
#[acmd_script( agent = "edge", script = "expression_attack11", category = ACMD_EXPRESSION, low_priority )]
77-
unsafe fn sephiroth_attack_11_expression(fighter: &mut L2CAgentBase) {
78-
let lua_state = fighter.lua_state_agent;
79-
let boma = fighter.boma();
80-
if is_excute(fighter) {
81-
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE, *SLOPE_STATUS_LR);
82-
}
83-
frame(lua_state, 3.0);
84-
if is_excute(fighter) {
85-
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_R, 4);
86-
}
87-
frame(lua_state, 4.5);
88-
if is_excute(fighter) {
89-
ControlModule::set_rumble(boma, Hash40::new("rbkind_nohitm"), 0, false, *BATTLE_OBJECT_ID_INVALID as u32);
90-
}
91-
frame(lua_state, 6.5);
92-
if is_excute(fighter) {
93-
macros::RUMBLE_HIT(fighter, Hash40::new("rbkind_attackm"), 0);
94-
}
95-
frame(lua_state, 35.0);
96-
if is_excute(fighter) {
97-
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_LR, 13);
98-
}
99-
}
100-
101161
#[acmd_script( agent = "edge", script = "game_attackdash" , category = ACMD_GAME , low_priority)]
102162
unsafe fn sephiroth_attack_dash_game(fighter: &mut L2CAgentBase) {
103163
let lua_state = fighter.lua_state_agent;
@@ -129,9 +189,10 @@ unsafe fn sephiroth_attack_dash_game(fighter: &mut L2CAgentBase) {
129189
pub fn install() {
130190
install_acmd_scripts!(
131191
sephiroth_attack_11_game,
132-
sephiroth_attack_11_effect,
133192
sephiroth_attack_11_expression,
193+
sephiroth_attack_12_game,
194+
sephiroth_attack_13_game,
195+
sephiroth_attack_13_effect,
134196
sephiroth_attack_dash_game,
135197
);
136-
}
137-
198+
}

fighters/edge/src/acmd/other.rs

+39
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,42 @@ unsafe fn edge_flare1_fly_game(fighter: &mut L2CAgentBase) {
207207

208208
}
209209

210+
#[acmd_script( agent = "edge_flare2", script = "game_exp" , category = ACMD_GAME , low_priority)]
211+
unsafe fn edge_flare2_exp_game(fighter: &mut L2CAgentBase) {
212+
let lua_state = fighter.lua_state_agent;
213+
let boma = fighter.boma();
214+
if is_excute(fighter) {
215+
ControlModule::set_rumble(boma, Hash40::new("rbkind_attackl"), 2, false, *BATTLE_OBJECT_ID_INVALID as u32);
216+
ATTACK(fighter, 0, 0, Hash40::new("top"), 3.0, 75, 75, 0, 50, 3.5, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, false, -3, 0.0, 0, true, true, false, true, false, *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_MAGIC);
217+
}
218+
frame(lua_state, 1.0);
219+
if is_excute(fighter) {
220+
if !WorkModule::is_flag(boma, *WEAPON_EDGE_FLARE2_INSTANCE_WORK_ID_FLAG_REFLECT) {
221+
notify_event_msc_cmd!(fighter, Hash40::new_raw(0x199c462b5d));
222+
}
223+
}
224+
}
225+
226+
#[acmd_script( agent = "edge_flare2", script = "game_fly" , category = ACMD_GAME , low_priority)]
227+
unsafe fn edge_flare2_fly_game(fighter: &mut L2CAgentBase) {
228+
let lua_state = fighter.lua_state_agent;
229+
let boma = fighter.boma();
230+
if is_excute(fighter) {
231+
ControlModule::set_rumble(boma, Hash40::new("rbkind_furafura"), 15, false, *BATTLE_OBJECT_ID_INVALID as u32);
232+
ATTACK(fighter, 0, 0, Hash40::new("top"), 7.0, 50, 75, 0, 65, 1.5, 0.0, 0.0, 0.0, Some(0.0), Some(0.0), Some(0.0), 0.4, 2.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_SPEED, false, -3, 0.0, 45, true, true, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_FIGHTER, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_MAGIC);
233+
}
234+
}
235+
236+
#[acmd_script( agent = "edge_flare2", script = "game_try" , category = ACMD_GAME , low_priority)]
237+
unsafe fn edge_flare2_try_game(fighter: &mut L2CAgentBase) {
238+
let lua_state = fighter.lua_state_agent;
239+
let boma = fighter.boma();
240+
if is_excute(fighter) {
241+
ControlModule::set_rumble(boma, Hash40::new("rbkind_attackl"), 2, false, *BATTLE_OBJECT_ID_INVALID as u32);
242+
ATTACK(fighter, 0, 0, Hash40::new("top"), 6.5, 53, 75, 0, 50, 1.5, 0.0, 0.0, 0.0, Some(0.0), Some(0.0), Some(0.0), 0.8, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_SPEED, false, -3, 0.0, 0, true, true, false, false, false, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_FIGHTER, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_purple"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_FIRE, *ATTACK_REGION_MAGIC);
243+
}
244+
}
245+
210246
#[acmd_script( agent = "edge", script = "game_escapeair" , category = ACMD_GAME , low_priority)]
211247
unsafe fn escape_air_game(fighter: &mut L2CAgentBase) {
212248
let lua_state = fighter.lua_state_agent;
@@ -247,6 +283,9 @@ pub fn install() {
247283
dash_sound,
248284
turn_dash_game,
249285
edge_flare1_fly_game,
286+
edge_flare2_exp_game,
287+
edge_flare2_fly_game,
288+
edge_flare2_try_game,
250289
damageflyhi_sound,
251290
damageflylw_sound,
252291
damageflyn_sound,

0 commit comments

Comments
 (0)