Skip to content

Commit f5c3584

Browse files
committed
Cleanup
1 parent 5f3bfa3 commit f5c3584

File tree

8 files changed

+275
-52
lines changed

8 files changed

+275
-52
lines changed

dynamic/src/consts.rs

+1
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,7 @@ pub mod vars {
528528
pub mod status {
529529
// flags
530530
pub const FLASH_HOLD: i32 = 0x1101;
531+
pub const SPECIAL_N_FIRE: i32 = 0x1102;
531532
}
532533
}
533534

fighters/edge/src/acmd/specials.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ unsafe fn edge_special_n1_game(fighter: &mut L2CAgentBase) {
1010
FT_MOTION_RATE(fighter, 1.0);
1111
frame(lua_state, 13.0);
1212
if is_excute(fighter) {
13-
ArticleModule::generate_article(boma, *FIGHTER_EDGE_GENERATE_ARTICLE_FIRE, false, 0);
13+
if !VarModule::is_flag(fighter.object(), vars::edge::status::SPECIAL_N_FIRE) {
14+
VarModule::off_flag(fighter.object(), vars::edge::status::SPECIAL_N_FIRE);
15+
ArticleModule::generate_article(boma, *FIGHTER_EDGE_GENERATE_ARTICLE_FIRE, false, 0);
16+
}
1417
}
1518
frame(lua_state, 15.0);
1619
FT_MOTION_RATE_RANGE(fighter, 15.0, 35.0, 5.0);
@@ -32,7 +35,10 @@ unsafe fn edge_special_n2_game(fighter: &mut L2CAgentBase) {
3235
FT_MOTION_RATE(fighter, 1.0);
3336
frame(lua_state, 13.0);
3437
if is_excute(fighter) {
35-
ArticleModule::generate_article(boma, *FIGHTER_EDGE_GENERATE_ARTICLE_FIRE, false, 0);
38+
if !VarModule::is_flag(fighter.object(), vars::edge::status::SPECIAL_N_FIRE) {
39+
VarModule::off_flag(fighter.object(), vars::edge::status::SPECIAL_N_FIRE);
40+
ArticleModule::generate_article(boma, *FIGHTER_EDGE_GENERATE_ARTICLE_FIRE, false, 0);
41+
}
3642
}
3743
frame(lua_state, 35.0);
3844
FT_MOTION_RATE(fighter, 0.4);

fighters/edge/src/acmd/throws.rs

+35
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,39 @@ unsafe fn edge_throw_hi_effect(fighter: &mut L2CAgentBase) {
101101
}
102102
}
103103

104+
#[acmd_script( agent = "edge", script = "sound_throwhi" , category = ACMD_SOUND , low_priority)]
105+
unsafe fn edge_throw_hi_sound(fighter: &mut L2CAgentBase) {
106+
let lua_state = fighter.lua_state_agent;
107+
let boma = fighter.boma();
108+
frame(lua_state, 2.0);
109+
if is_excute(fighter) {
110+
PLAY_SE(fighter, Hash40::new("se_edge_attackhard_h01"));
111+
}
112+
frame(lua_state, 18.0);
113+
if is_excute(fighter) {
114+
PLAY_SEQUENCE(fighter, Hash40::new("seq_edge_rnd_attack"));
115+
PLAY_SE(fighter, Hash40::new("se_edge_attackhard_h02"));
116+
}
117+
frame(lua_state, 33.0);
118+
if is_excute(fighter) {
119+
PLAY_SE(fighter, Hash40::new("se_edge_attackhard_h03"));
120+
}
121+
}
122+
123+
#[acmd_script( agent = "edge", script = "expression_throwhi" , category = ACMD_EXPRESSION , low_priority)]
124+
unsafe fn edge_throw_hi_expression(fighter: &mut L2CAgentBase) {
125+
let lua_state = fighter.lua_state_agent;
126+
let boma = fighter.boma();
127+
if is_excute(fighter) {
128+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE, *SLOPE_STATUS_LR);
129+
AttackModule::set_attack_reference_joint_id(boma, Hash40::new("top"), AttackDirectionAxis(*ATTACK_DIRECTION_X_MINUS), AttackDirectionAxis(*ATTACK_DIRECTION_Z), AttackDirectionAxis(*ATTACK_DIRECTION_Y));
130+
}
131+
frame(lua_state, 18.0);
132+
if is_excute(fighter) {
133+
RUMBLE_HIT(fighter, Hash40::new("rbkind_78_slash"), 12);
134+
}
135+
}
136+
104137
#[acmd_script( agent = "edge", script = "game_throwlw" , category = ACMD_GAME , low_priority)]
105138
unsafe fn edge_throw_lw_game(fighter: &mut L2CAgentBase) {
106139
let lua_state = fighter.lua_state_agent;
@@ -169,6 +202,8 @@ pub fn install() {
169202
edge_throw_b_game,
170203
edge_throw_hi_game,
171204
edge_throw_hi_effect,
205+
edge_throw_hi_sound,
206+
edge_throw_hi_expression,
172207
edge_throw_lw_game,
173208
edge_throw_lw_effect,
174209
);

fighters/edge/src/acmd/tilts.rs

+60-25
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
21
use super::*;
32

4-
53
#[acmd_script( agent = "edge", script = "game_attacks3hi" , category = ACMD_GAME , low_priority)]
6-
unsafe fn sephiroth_attack_s3_hi_game(fighter: &mut L2CAgentBase) {
4+
unsafe fn edge_attack_s3_hi_game(fighter: &mut L2CAgentBase) {
75
let lua_state = fighter.lua_state_agent;
86
let boma = fighter.boma();
97
frame(lua_state, 1.0);
@@ -40,7 +38,7 @@ unsafe fn sephiroth_attack_s3_hi_game(fighter: &mut L2CAgentBase) {
4038
}
4139

4240
#[acmd_script( agent = "edge", script = "effect_attacks3hi" , category = ACMD_EFFECT , low_priority)]
43-
unsafe fn sephiroth_attack_s3_hi_effect(fighter: &mut L2CAgentBase) {
41+
unsafe fn edge_attack_s3_hi_effect(fighter: &mut L2CAgentBase) {
4442
let lua_state = fighter.lua_state_agent;
4543
let boma = fighter.boma();
4644
frame(lua_state, 3.0);
@@ -90,7 +88,7 @@ unsafe fn sephiroth_attack_s3_hi_effect(fighter: &mut L2CAgentBase) {
9088
}
9189

9290
#[acmd_script( agent = "edge", script = "game_attacks3" , category = ACMD_GAME , low_priority)]
93-
unsafe fn sephiroth_attack_s3_s_game(fighter: &mut L2CAgentBase) {
91+
unsafe fn edge_attack_s3_s_game(fighter: &mut L2CAgentBase) {
9492
let lua_state = fighter.lua_state_agent;
9593
let boma = fighter.boma();
9694
frame(lua_state, 1.0);
@@ -127,7 +125,7 @@ unsafe fn sephiroth_attack_s3_s_game(fighter: &mut L2CAgentBase) {
127125
}
128126

129127
#[acmd_script( agent = "edge", script = "effect_attacks3" , category = ACMD_EFFECT , low_priority)]
130-
unsafe fn sephiroth_attack_s3_s_effect(fighter: &mut L2CAgentBase) {
128+
unsafe fn edge_attack_s3_s_effect(fighter: &mut L2CAgentBase) {
131129
let lua_state = fighter.lua_state_agent;
132130
let boma = fighter.boma();
133131
frame(lua_state, 3.0);
@@ -177,7 +175,7 @@ unsafe fn sephiroth_attack_s3_s_effect(fighter: &mut L2CAgentBase) {
177175
}
178176

179177
#[acmd_script( agent = "edge", script = "game_attacks3lw" , category = ACMD_GAME , low_priority)]
180-
unsafe fn sephiroth_attack_s3_lw_game(fighter: &mut L2CAgentBase) {
178+
unsafe fn edge_attack_s3_lw_game(fighter: &mut L2CAgentBase) {
181179
let lua_state = fighter.lua_state_agent;
182180
let boma = fighter.boma();
183181
frame(lua_state, 1.0);
@@ -214,7 +212,7 @@ unsafe fn sephiroth_attack_s3_lw_game(fighter: &mut L2CAgentBase) {
214212
}
215213

216214
#[acmd_script( agent = "edge", script = "effect_attacks3lw" , category = ACMD_EFFECT , low_priority)]
217-
unsafe fn sephiroth_attack_s3_lw_effect(fighter: &mut L2CAgentBase) {
215+
unsafe fn edge_attack_s3_lw_effect(fighter: &mut L2CAgentBase) {
218216
let lua_state = fighter.lua_state_agent;
219217
let boma = fighter.boma();
220218
frame(lua_state, 3.0);
@@ -268,7 +266,7 @@ unsafe fn sephiroth_attack_s3_lw_effect(fighter: &mut L2CAgentBase) {
268266
}
269267

270268
#[acmd_script( agent = "edge", script = "game_attackhi3" , category = ACMD_GAME , low_priority)]
271-
unsafe fn sephiroth_attack_hi3_game(fighter: &mut L2CAgentBase) {
269+
unsafe fn edge_attack_hi3_game(fighter: &mut L2CAgentBase) {
272270
let lua_state = fighter.lua_state_agent;
273271
let boma = fighter.boma();
274272
frame(lua_state, 1.0);
@@ -304,10 +302,10 @@ unsafe fn sephiroth_attack_hi3_game(fighter: &mut L2CAgentBase) {
304302
}
305303

306304
#[acmd_script( agent = "edge", script = "effect_attackhi3" , category = ACMD_EFFECT , low_priority)]
307-
unsafe extern "C" fn sephiroth_attack_hi3_effect(fighter: &mut L2CAgentBase) {
305+
unsafe extern "C" fn edge_attack_hi3_effect(fighter: &mut L2CAgentBase) {
308306
let lua_state = fighter.lua_state_agent;
309307
let boma = fighter.boma();
310-
frame(lua_state, 12.0);
308+
frame(lua_state, 12.5);
311309
if is_excute(fighter) {
312310
EFFECT_FOLLOW(fighter, Hash40::new("edge_sword_flare"), Hash40::new("swordl2"), 0, 0, 0, 0, 180, -90, 1, true);
313311
EFFECT_FOLLOW(fighter, Hash40::new("edge_sword_light3"), Hash40::new("swordl2"), 0, 0, 0, 0, 180, -90, 1, true);
@@ -340,8 +338,44 @@ unsafe extern "C" fn sephiroth_attack_hi3_effect(fighter: &mut L2CAgentBase) {
340338
}
341339
}
342340

341+
#[acmd_script( agent = "edge", script = "sound_attackhi3" , category = ACMD_SOUND , low_priority)]
342+
unsafe fn edge_attack_hi3_sound(fighter: &mut L2CAgentBase) {
343+
let lua_state = fighter.lua_state_agent;
344+
let boma = fighter.boma();
345+
frame(lua_state, 1.0);
346+
if is_excute(fighter) {
347+
PLAY_SE(fighter, Hash40::new("se_edge_attackair_h01"));
348+
PLAY_SE(fighter, Hash40::new("se_common_throw_01"));
349+
}
350+
frame(lua_state, 12.5);
351+
if is_excute(fighter) {
352+
PLAY_SEQUENCE(fighter, Hash40::new("seq_edge_rnd_attack_hard"));
353+
}
354+
frame(lua_state, 13.0);
355+
if is_excute(fighter) {
356+
PLAY_SE(fighter, Hash40::new("se_edge_attackair_h02"));
357+
}
358+
}
359+
360+
#[acmd_script( agent = "edge", script = "expression_attackhi3" , category = ACMD_EXPRESSION , low_priority)]
361+
unsafe fn edge_attack_hi3_expression(fighter: &mut L2CAgentBase) {
362+
let lua_state = fighter.lua_state_agent;
363+
let boma = fighter.boma();
364+
if is_excute(fighter) {
365+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE, *SLOPE_STATUS_LR);
366+
}
367+
frame(lua_state, 12.5);
368+
if is_excute(fighter) {
369+
ControlModule::set_rumble(boma, Hash40::new("rbkind_78_slash"), 28, false, *BATTLE_OBJECT_ID_INVALID as u32);
370+
}
371+
frame(lua_state, 20.0);
372+
if is_excute(fighter) {
373+
ControlModule::set_rumble(boma, Hash40::new("rbkind_nohitm"), 0, false, *BATTLE_OBJECT_ID_INVALID as u32);
374+
}
375+
}
376+
343377
#[acmd_script( agent = "edge", script = "game_attacklw3" , category = ACMD_GAME , low_priority)]
344-
unsafe fn sephiroth_attack_lw3_game(fighter: &mut L2CAgentBase) {
378+
unsafe fn edge_attack_lw3_game(fighter: &mut L2CAgentBase) {
345379
let lua_state = fighter.lua_state_agent;
346380
let boma = fighter.boma();
347381
frame(lua_state, 7.0);
@@ -368,7 +402,7 @@ unsafe fn sephiroth_attack_lw3_game(fighter: &mut L2CAgentBase) {
368402
}
369403

370404
#[acmd_script( agent = "edge", script = "effect_attacklw3" , category = ACMD_EFFECT , low_priority)]
371-
unsafe fn sephiroth_attack_lw3_effect(fighter: &mut L2CAgentBase) {
405+
unsafe fn edge_attack_lw3_effect(fighter: &mut L2CAgentBase) {
372406
let lua_state = fighter.lua_state_agent;
373407
let boma = fighter.boma();
374408
frame(lua_state, 9.0);
@@ -405,16 +439,17 @@ unsafe fn sephiroth_attack_lw3_effect(fighter: &mut L2CAgentBase) {
405439

406440
pub fn install() {
407441
install_acmd_scripts!(
408-
sephiroth_attack_s3_hi_game,
409-
sephiroth_attack_s3_hi_effect,
410-
sephiroth_attack_s3_s_game,
411-
sephiroth_attack_s3_s_effect,
412-
sephiroth_attack_s3_lw_game,
413-
sephiroth_attack_s3_lw_effect,
414-
sephiroth_attack_hi3_game,
415-
sephiroth_attack_hi3_effect,
416-
sephiroth_attack_lw3_game,
417-
sephiroth_attack_lw3_effect,
442+
edge_attack_s3_hi_game,
443+
edge_attack_s3_hi_effect,
444+
edge_attack_s3_s_game,
445+
edge_attack_s3_s_effect,
446+
edge_attack_s3_lw_game,
447+
edge_attack_s3_lw_effect,
448+
edge_attack_hi3_game,
449+
edge_attack_hi3_effect,
450+
edge_attack_hi3_sound,
451+
edge_attack_hi3_expression,
452+
edge_attack_lw3_game,
453+
edge_attack_lw3_effect,
418454
);
419-
}
420-
455+
}

fighters/edge/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,5 @@ pub fn install(is_runtime: bool) {
4343
status::install();
4444
opff::install(is_runtime);
4545
use opff::*;
46-
//smashline::install_agent_frame_callback!(shadowflare_orb_callback);
46+
smashline::install_agent_frame_callback!(shadowflare_orb_callback);
4747
}

fighters/edge/src/status/edge_fire_fly.rs

+25-15
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,30 @@ use super::*;
22
use globals::*;
33
use utils::consts::vars::edge;
44

5+
#[status_script(agent = "edge", status = FIGHTER_STATUS_KIND_SPECIAL_N, condition = LUA_SCRIPT_STATUS_FUNC_STATUS_MAIN)]
6+
unsafe fn special_n_main(fighter: &mut L2CFighterCommon) -> L2CValue {
7+
println!("h");
8+
let ret = original!(fighter);
9+
WorkModule::unable_transition_term_group(fighter.module_accessor, *FIGHTER_STATUS_TRANSITION_GROUP_CHK_GROUND_ESCAPE);
10+
ret
11+
}
12+
513
#[status_script(agent = "edge_fire", status = WEAPON_EDGE_FIRE_STATUS_KIND_FLY_S, condition = LUA_SCRIPT_STATUS_FUNC_STATUS_MAIN)]
614
unsafe fn fly_s_main(fighter: &mut L2CWeaponCommon) -> L2CValue {
715
let life = WorkModule::get_param_int(fighter.module_accessor, hash40("param_fire"), hash40("life_s"));
816
WorkModule::set_int(fighter.module_accessor, life, *WEAPON_INSTANCE_WORK_ID_INT_LIFE);
917
MotionModule::change_motion(fighter.module_accessor, Hash40::new("special_n1"), 0.0, 1.0, false, 0.0, false, false);
10-
let facing = PostureModule::lr(fighter.module_accessor);
11-
let speed_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("speed_x_s")) * facing;
12-
let accel_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("accel_x_s")) * facing;
13-
let max_speed_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("max_speed_x_s"));
1418
let owner_id = WorkModule::get_int(fighter.module_accessor, *WEAPON_INSTANCE_WORK_ID_INT_LINK_OWNER) as u32;
1519
let edge = utils::util::get_battle_object_from_id(owner_id);
1620
let stick_y = (&mut *(*edge).module_accessor).stick_y();
17-
let speed_y = 0.01 * stick_y;
18-
let accel_y = 1.0 * stick_y;
19-
let max_speed_y = 0.6;
21+
let facing = PostureModule::lr(fighter.module_accessor);
22+
let speed_x_stick_y_sub = ParamModule::get_float(edge, ParamType::Agent, "param_fire.speed_x_s_stick_y_sub") * stick_y.abs();
23+
let speed_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("speed_x_s")) * facing;
24+
let accel_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("accel_x_s")) * facing;
25+
let max_speed_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("max_speed_x_s")) - speed_x_stick_y_sub;
26+
let speed_y = ParamModule::get_float(edge, ParamType::Agent, "param_fire.speed_y_s") * stick_y;
27+
let accel_y = ParamModule::get_float(edge, ParamType::Agent, "param_fire.accel_y_s") * stick_y;
28+
let max_speed_y = ParamModule::get_float(edge, ParamType::Agent, "param_fire.max_speed_y_s");
2029
sv_kinetic_energy!(set_speed, fighter, WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL, speed_x, speed_y);
2130
sv_kinetic_energy!(set_accel, fighter, WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL, accel_x, accel_y);
2231
sv_kinetic_energy!(set_limit_speed, fighter, WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL, max_speed_x, max_speed_y);
@@ -33,16 +42,17 @@ unsafe fn fly_m_main(fighter: &mut L2CWeaponCommon) -> L2CValue {
3342
let life = WorkModule::get_param_int(fighter.module_accessor, hash40("param_fire"), hash40("life_m"));
3443
WorkModule::set_int(fighter.module_accessor, life, *WEAPON_INSTANCE_WORK_ID_INT_LIFE);
3544
MotionModule::change_motion(fighter.module_accessor, Hash40::new("special_n2"), 0.0, 1.0, false, 0.0, false, false);
36-
let facing = PostureModule::lr(fighter.module_accessor);
37-
let speed_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("speed_x_m")) * facing;
38-
let accel_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("accel_x_m")) * facing;
39-
let max_speed_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("max_speed_x_m"));
4045
let owner_id = WorkModule::get_int(fighter.module_accessor, *WEAPON_INSTANCE_WORK_ID_INT_LINK_OWNER) as u32;
4146
let edge = utils::util::get_battle_object_from_id(owner_id);
4247
let stick_y = (&mut *(*edge).module_accessor).stick_y();
43-
let speed_y = 0.01 * stick_y;
44-
let accel_y = 1.0 * stick_y;
45-
let max_speed_y = 0.6;
48+
let facing = PostureModule::lr(fighter.module_accessor);
49+
let speed_x_stick_y_sub = ParamModule::get_float(edge, ParamType::Agent, "param_fire.speed_x_m_stick_y_sub") * stick_y.abs();
50+
let speed_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("speed_x_m")) * facing;
51+
let accel_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("accel_x_m")) * facing;
52+
let max_speed_x = WorkModule::get_param_float(fighter.module_accessor, hash40("param_fire"), hash40("max_speed_x_m")) - speed_x_stick_y_sub;
53+
let speed_y = ParamModule::get_float(edge, ParamType::Agent, "param_fire.speed_y_m") * stick_y;
54+
let accel_y = ParamModule::get_float(edge, ParamType::Agent, "param_fire.accel_y_m") * stick_y;
55+
let max_speed_y = ParamModule::get_float(edge, ParamType::Agent, "param_fire.max_speed_y_m");
4656
sv_kinetic_energy!(set_speed, fighter, WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL, speed_x, speed_y);
4757
sv_kinetic_energy!(set_accel, fighter, WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL, accel_x, accel_y);
4858
sv_kinetic_energy!(set_limit_speed, fighter, WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL, max_speed_x, max_speed_y);
@@ -55,7 +65,6 @@ unsafe extern "C" fn fly_m_main_loop(fighter: &mut L2CWeaponCommon) -> L2CValue
5565
}
5666

5767
unsafe extern "C" fn sub_fly(fighter: &mut L2CWeaponCommon, status: L2CValue) -> L2CValue {
58-
// param_1, this, WEAPON_EDGE_FIRE_STATUS_KIND_BURST_S/M
5968
let life = WorkModule::get_int(fighter.module_accessor, *WEAPON_INSTANCE_WORK_ID_INT_LIFE);
6069
if life <= 0 || (WorkModule::is_flag(fighter.module_accessor, *WEAPON_EDGE_FIRE_INSTANCE_WORK_ID_FLAG_HIT_WALL) && fighter.status_frame() <= 2) {
6170
fighter.change_status(status, false.into());
@@ -96,6 +105,7 @@ unsafe extern "C" fn sub_fly(fighter: &mut L2CWeaponCommon, status: L2CValue) ->
96105

97106
pub fn install() {
98107
install_status_scripts!(
108+
special_n_main,
99109
fly_s_main,
100110
fly_m_main,
101111
);
+19-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<struct>
3-
<struct hash="blade_dash">
4-
<float hash="fakeout_dash_movement_mul">0.65</float>
5-
<int hash="attack_extra_startup_frames_ground">23</int>
6-
<int hash="attack_extra_startup_frames_air">0</int>
7-
<int hash="fakeout_extra_startup_frames_ground">6</int>
8-
<int hash="fakeout_extra_startup_frames_air">0</int>
9-
<int hash="attack_decision_frame_ground">10</int>
10-
<int hash="attack_decision_frame_air">18</int>
11-
</struct>
123
<struct hash="cliff_hang_data">
134
<struct hash="special_hi">
145
<float hash="p1_x">16</float>
@@ -23,4 +14,23 @@
2314
<float hash="p2_y">8.5</float>
2415
</struct>
2516
</struct>
17+
<struct hash="param_fire">
18+
<float hash="speed_y_s">0.01</float>
19+
<float hash="accel_y_s">1.0</float>
20+
<float hash="max_speed_y_s">0.6</float>
21+
<float hash="speed_x_s_stick_y_sub">0.3</float>
22+
<float hash="speed_y_m">0.01</float>
23+
<float hash="accel_y_m">1.0</float>
24+
<float hash="max_speed_y_m">0.6</float>
25+
<float hash="speed_x_m_stick_y_sub">0.3</float>
26+
</struct>
27+
<struct hash="blade_dash">
28+
<float hash="fakeout_dash_movement_mul">0.65</float>
29+
<int hash="attack_extra_startup_frames_ground">23</int>
30+
<int hash="attack_extra_startup_frames_air">0</int>
31+
<int hash="fakeout_extra_startup_frames_ground">6</int>
32+
<int hash="fakeout_extra_startup_frames_air">0</int>
33+
<int hash="attack_decision_frame_ground">10</int>
34+
<int hash="attack_decision_frame_air">18</int>
35+
</struct>
2636
</struct>

0 commit comments

Comments
 (0)