Skip to content

Commit 644bcc8

Browse files
committed
Merge branch 'dev' into throw-sweep
2 parents 59bda46 + d1b0324 commit 644bcc8

File tree

9 files changed

+104
-46
lines changed

9 files changed

+104
-46
lines changed

fighters/krool/src/status/special_hi.rs

+7
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ unsafe extern "C" fn special_hi_start_main_loop(fighter: &mut L2CFighterCommon)
5858
return 0.into()
5959
}
6060

61+
#[status_script(agent = "krool", status = FIGHTER_KROOL_STATUS_KIND_SPECIAL_HI_START, condition = LUA_SCRIPT_STATUS_FUNC_EXIT_STATUS)]
62+
unsafe fn special_hi_start_exit(fighter: &mut L2CFighterCommon) -> L2CValue {
63+
SoundModule::stop_se(fighter.module_accessor, Hash40::new("se_krool_special_h02"), 0);
64+
return 0.into()
65+
}
66+
6167
#[status_script(agent = "krool", status = FIGHTER_KROOL_STATUS_KIND_SPECIAL_HI, condition = LUA_SCRIPT_STATUS_FUNC_STATUS_MAIN)]
6268
unsafe fn special_hi_main(fighter: &mut L2CFighterCommon) -> L2CValue {
6369
ArticleModule::change_status(fighter.module_accessor, *FIGHTER_KROOL_GENERATE_ARTICLE_BACKPACK, *WEAPON_KROOL_BACKPACK_STATUS_KIND_FLY, app::ArticleOperationTarget(*ARTICLE_OPE_TARGET_ALL));
@@ -528,6 +534,7 @@ unsafe extern "C" fn special_hi_lerp_motion(fighter: &mut L2CFighterCommon, moti
528534
pub fn install() {
529535
smashline::install_status_scripts!(
530536
special_hi_start_main,
537+
special_hi_start_exit,
531538
special_hi_main,
532539
special_hi_end_main,
533540
special_hi_fall_main,

fighters/mario/src/opff.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ utils::import_noreturn!(common::opff::fighter_common_opff);
33
use super::*;
44
use globals::*;
55

6-
6+
77
unsafe fn dair_mash_rise(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectModuleAccessor, id: usize, motion_kind: u64, situation_kind: i32, frame: f32) {
88
if motion_kind == hash40("attack_air_lw") {
99
//let motion_vec = Vector3f{x:0.0, y: 2.5, z: 0.0};

fighters/richter/src/acmd/tilts.rs

+4
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,10 @@ pub fn install() {
202202
install_acmd_scripts!(
203203
richter_attack_s3_s_game,
204204
richter_whip_attack_s3_s_game,
205+
richter_attack_squat_s3_game,
206+
richter_attack_squat_s3_effect,
207+
richter_attack_squat_s3_sound,
208+
richter_attack_squat_s3_expression,
205209
richter_attack_hi3_game,
206210
richter_attack_lw3_game,
207211
richter_attack_lw32_game,

fighters/richter/src/status/attacks3.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ unsafe extern "C" fn attack_s3_main_loop(fighter: &mut L2CFighterCommon) -> L2CV
3131

3232
// <HDR>
3333
if StatusModule::is_changing(fighter.module_accessor)
34-
&& fighter.global_table[PREV_STATUS_KIND] == FIGHTER_STATUS_KIND_SQUAT_WAIT {
34+
&& [*FIGHTER_STATUS_KIND_SQUAT_WAIT, *FIGHTER_STATUS_KIND_SQUAT_RV].contains(&fighter.global_table[PREV_STATUS_KIND].get_i32()) {
3535
WorkModule::unable_transition_term_group_ex(fighter.module_accessor, *FIGHTER_STATUS_TRANSITION_TERM_ID_CONT_SQUAT);
3636
MotionModule::change_motion(fighter.module_accessor, Hash40::new("attack_squat_s3"), 0.0, 1.0, false, 0.0, false, false);
3737
}

fighters/rockman/src/acmd/aerials.rs

+14
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ unsafe fn rockman_attack_air_b_game(fighter: &mut L2CAgentBase) {
139139
let lua_state = fighter.lua_state_agent;
140140
let boma = fighter.boma();
141141
frame(lua_state, 4.0);
142+
FT_MOTION_RATE(fighter, 2.0 / 3.0);
142143
if is_excute(fighter) {
143144
WorkModule::on_flag(boma, *FIGHTER_STATUS_ATTACK_AIR_FLAG_ENABLE_LANDING);
144145
ATTACK(fighter, 0, 0, Hash40::new("top"), 4.5, 365, 19, 0, 40, 5.0, 0.0, 9.5, -14.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_B, 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_cutup"), *ATTACK_SOUND_LEVEL_S, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_SWORD);
@@ -162,6 +163,7 @@ unsafe fn rockman_attack_air_b_game(fighter: &mut L2CAgentBase) {
162163
AttackModule::clear_all(boma);
163164
}
164165
wait(lua_state, 1.0);
166+
FT_MOTION_RATE(fighter, 1.0);
165167
if is_excute(fighter) {
166168
ATTACK(fighter, 0, 0, Hash40::new("top"), 5.0, 361, 200, 0, 20, 7.6, 0.0, 9.5, -13.0, None, None, None, 1.5, 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_cutup"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_SWORD);
167169
ATTACK(fighter, 1, 0, Hash40::new("top"), 5.0, 361, 200, 0, 20, 4.5, 0.0, 9.5, -6.0, None, None, None, 1.5, 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_cutup"), *ATTACK_SOUND_LEVEL_L, *COLLISION_SOUND_ATTR_CUTUP, *ATTACK_REGION_SWORD);
@@ -177,6 +179,16 @@ unsafe fn rockman_attack_air_b_game(fighter: &mut L2CAgentBase) {
177179

178180
}
179181

182+
#[acmd_script( agent = "rockman", script = "effect_attackairb" , category = ACMD_EFFECT , low_priority)]
183+
unsafe fn rockman_attack_air_b_effect(fighter: &mut L2CAgentBase) {
184+
let lua_state = fighter.lua_state_agent;
185+
frame(lua_state, 3.0);
186+
if is_excute(fighter) {
187+
EFFECT_FOLLOW_FLIP(fighter, Hash40::new("rockman_slashcraw"), Hash40::new("rockman_slashcraw"), Hash40::new("top"), 0, 10, 9, 0, 0, 0, 1, true, *EF_FLIP_YZ);
188+
LAST_EFFECT_SET_RATE(fighter, 3.0 / 2.0);
189+
}
190+
}
191+
180192
#[acmd_script( agent = "rockman", script = "game_attackairhi" , category = ACMD_GAME , low_priority)]
181193
unsafe fn rockman_attack_air_hi_game(fighter: &mut L2CAgentBase) {
182194
let lua_state = fighter.lua_state_agent;
@@ -242,7 +254,9 @@ pub fn install() {
242254
rockman_attack_air_f_game,
243255
rockman_attack_air_f_effect,
244256
rockman_attack_air_f_expression,
257+
245258
rockman_attack_air_b_game,
259+
rockman_attack_air_b_effect,
246260

247261
rockman_attack_air_hi_game,
248262

fighters/rockman/src/acmd/other.rs

+38-4
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,45 @@ unsafe fn rockman_hardknuckle_regular_game(fighter: &mut L2CAgentBase) {
114114
if is_excute(fighter) {
115115
WorkModule::on_flag(boma, *WEAPON_ROCKMAN_HARDKNUCKLE_INSTANCE_WORK_ID_FLAG_ATTACK_VECTOR_REVERSE_UD_CHECK);
116116
}
117-
frame(lua_state, 4.0);
117+
frame(lua_state, 5.0);
118118
if is_excute(fighter) {
119-
ATTACK(fighter, 0, 0, Hash40::new("top"), 12.0, 50, 60, 0, 20, 4.5, 0.0, 0.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *ATTACK_LR_CHECK_SPEED, false, 0, 0.0, 0, true, false, false, false, false, *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_PUNCH);
120-
AttackModule::clear(boma, 1, false);
119+
AttackModule::clear_all(boma);
120+
sv_kinetic_energy!(
121+
set_speed,
122+
fighter,
123+
WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL,
124+
0.0,
125+
-0.5
126+
);
127+
sv_kinetic_energy!(
128+
set_stable_speed,
129+
fighter,
130+
WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL,
131+
0.0,
132+
0.0
133+
);
134+
sv_kinetic_energy!(
135+
set_brake,
136+
fighter,
137+
WEAPON_KINETIC_ENERGY_RESERVE_ID_NORMAL,
138+
0.0,
139+
0.05
140+
);
141+
}
142+
}
143+
144+
#[acmd_script( agent = "rockman_hardknuckle", script = "effect_regular" , category = ACMD_EFFECT , low_priority)]
145+
unsafe fn rockman_hardknuckle_regular_effect(fighter: &mut L2CAgentBase) {
146+
let lua_state = fighter.lua_state_agent;
147+
let boma = fighter.boma();
148+
frame(lua_state, 1.0);
149+
if is_excute(fighter) {
150+
EFFECT_FOLLOW_NO_STOP(fighter, Hash40::new("rockman_hardknuckle"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1, true);
151+
}
152+
frame(lua_state, 6.0);
153+
if is_excute(fighter) {
154+
EFFECT_OFF_KIND(fighter, Hash40::new("rockman_hardknuckle"), true, true);
121155
}
122-
123156
}
124157

125158
/*
@@ -181,6 +214,7 @@ pub fn install() {
181214
dash_sound,
182215
turn_dash_game,
183216
rockman_rockbuster_regular_game,
217+
rockman_hardknuckle_regular_effect,
184218
rockman_airshooter_regular_game,
185219
rockman_hardknuckle_regular_game,
186220
);

fighters/rockman/src/opff.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ use globals::*;
4747
// Mega Man Metal Blad Toss Airdodge Cancel
4848
unsafe fn blade_toss_ac(boma: &mut BattleObjectModuleAccessor, status_kind: i32, situation_kind: i32, cat1: i32, frame: f32) {
4949
if status_kind == *FIGHTER_STATUS_KIND_SPECIAL_S {
50-
if boma.status_frame() > 16
51-
&& !WorkModule::is_flag(boma, *FIGHTER_ROCKMAN_INSTANCE_WORK_ID_FLAG_SPECIAL_HI_FALL) {
50+
if boma.status_frame() > 16 {
5251
boma.check_airdodge_cancel();
5352
}
5453
}

fighters/rockman/src/vtable_hook.rs

+37-37
Original file line numberDiff line numberDiff line change
@@ -124,48 +124,48 @@ pub unsafe extern "C" fn rockman_vtable_func(vtable: u64, fighter: &mut smash::a
124124
original!()(vtable, fighter);
125125
}
126126

127-
pub unsafe fn is_damage_check(module_accessor: *mut BattleObjectModuleAccessor, is_prev: bool) -> bool {
128-
let status : i32;
129-
if is_prev {
130-
status = StatusModule::prev_status_kind(module_accessor, 0);
131-
}
132-
else {
133-
status = StatusModule::status_kind(module_accessor);
134-
}
135-
if FighterStopModuleImpl::is_damage_stop(module_accessor)
136-
|| WorkModule::is_flag(module_accessor, *FIGHTER_INSTANCE_WORK_ID_FLAG_CAPTURE_YOSHI)
137-
|| WorkModule::is_flag(module_accessor, *FIGHTER_INSTANCE_WORK_ID_FLAG_GANON_SPECIAL_S_DAMAGE_FALL_GROUND)
138-
|| WorkModule::is_flag(module_accessor, *FIGHTER_INSTANCE_WORK_ID_FLAG_GANON_SPECIAL_S_DAMAGE_FALL_AIR)
139-
|| (*FIGHTER_STATUS_KIND_CAPTURE_PULLED..=*FIGHTER_STATUS_KIND_DAMAGE_FALL).contains(&status)
140-
|| (*FIGHTER_STATUS_KIND_DOWN..=*FIGHTER_STATUS_KIND_LAY_DOWN).contains(&status)
141-
|| (*FIGHTER_STATUS_KIND_DOWN_DAMAGE..=*FIGHTER_STATUS_KIND_BIND).contains(&status)
142-
|| (*FIGHTER_STATUS_KIND_SLIP..=*FIGHTER_STATUS_KIND_SLIP_WAIT).contains(&status)
143-
|| (*FIGHTER_STATUS_KIND_TREAD_DAMAGE..=*FIGHTER_STATUS_KIND_ICE_JUMP).contains(&status)
144-
|| (*FIGHTER_STATUS_KIND_LINK_FINAL..=*FIGHTER_STATUS_KIND_PIT_FALL).contains(&status)
145-
|| (*FIGHTER_STATUS_KIND_SWALLOWED..=*FIGHTER_STATUS_KIND_CAPTURE_DAMAGE_YOSHI).contains(&status)
146-
|| (*FIGHTER_STATUS_KIND_CATCHED_REFLET..=*FIGHTER_STATUS_KIND_CAPTURE_MASTERHAND).contains(&status)
147-
|| status == *FIGHTER_STATUS_KIND_GIMMICK_EATEN
148-
|| (*FIGHTER_STATUS_KIND_CAPTURE_ITEM..=*FIGHTER_STATUS_KIND_CAPTURE_CLAPTRAP).contains(&status)
149-
|| (*FIGHTER_STATUS_KIND_FINAL_VISUAL_ATTACK_OTHER..=*FIGHTER_STATUS_KIND_RIDLEY_FINAL_TARGET_END).contains(&status)
150-
|| (*FIGHTER_STATUS_KIND_CATCHED_RIDLEY..=*FIGHTER_STATUS_KIND_STABBED_DAMAGE).contains(&status)
151-
|| (*FIGHTER_STATUS_KIND_SWING_GAOGAEN_CATCHED..=*FIGHTER_STATUS_KIND_SWING_GAOGAEN_FAILURE).contains(&status)
152-
|| (*FIGHTER_STATUS_KIND_SHEIK_FINAL_CAPTURE..=*FIGHTER_STATUS_KIND_CAPTURE_WAIT_OCTOPUS).contains(&status)
153-
|| (*FIGHTER_STATUS_KIND_SIMON_FINAL_TARGET_START..=*FIGHTER_STATUS_KIND_YOSHI_FINAL_TARGET_END).contains(&status)
154-
|| (*FIGHTER_STATUS_KIND_SUICIDE_BOMB..=*FIGHTER_STATUS_KIND_TANTAN_FINAL_TARGET_END).contains(&status)
155-
|| (*FIGHTER_STATUS_KIND_DAMAGE_FLY_REFLECT_JUMP_BOARD..=*FIGHTER_STATUS_KIND_EDGE_FINAL_TARGET_END).contains(&status)
156-
|| (*FIGHTER_STATUS_KIND_CAPTURE_TRAIL_KEYHOLE..=*FIGHTER_STATUS_KIND_TRAIL_FINAL_TARGET_END).contains(&status) {
157-
return true;
158-
}
159-
false
160-
}
127+
// pub unsafe fn is_damage_check(module_accessor: *mut BattleObjectModuleAccessor, is_prev: bool) -> bool {
128+
// let status : i32;
129+
// if is_prev {
130+
// status = StatusModule::prev_status_kind(module_accessor, 0);
131+
// }
132+
// else {
133+
// status = StatusModule::status_kind(module_accessor);
134+
// }
135+
// if FighterStopModuleImpl::is_damage_stop(module_accessor)
136+
// || WorkModule::is_flag(module_accessor, *FIGHTER_INSTANCE_WORK_ID_FLAG_CAPTURE_YOSHI)
137+
// || WorkModule::is_flag(module_accessor, *FIGHTER_INSTANCE_WORK_ID_FLAG_GANON_SPECIAL_S_DAMAGE_FALL_GROUND)
138+
// || WorkModule::is_flag(module_accessor, *FIGHTER_INSTANCE_WORK_ID_FLAG_GANON_SPECIAL_S_DAMAGE_FALL_AIR)
139+
// || (*FIGHTER_STATUS_KIND_CAPTURE_PULLED..=*FIGHTER_STATUS_KIND_DAMAGE_FALL).contains(&status)
140+
// || (*FIGHTER_STATUS_KIND_DOWN..=*FIGHTER_STATUS_KIND_LAY_DOWN).contains(&status)
141+
// || (*FIGHTER_STATUS_KIND_DOWN_DAMAGE..=*FIGHTER_STATUS_KIND_BIND).contains(&status)
142+
// || (*FIGHTER_STATUS_KIND_SLIP..=*FIGHTER_STATUS_KIND_SLIP_WAIT).contains(&status)
143+
// || (*FIGHTER_STATUS_KIND_TREAD_DAMAGE..=*FIGHTER_STATUS_KIND_ICE_JUMP).contains(&status)
144+
// || (*FIGHTER_STATUS_KIND_LINK_FINAL..=*FIGHTER_STATUS_KIND_PIT_FALL).contains(&status)
145+
// || (*FIGHTER_STATUS_KIND_SWALLOWED..=*FIGHTER_STATUS_KIND_CAPTURE_DAMAGE_YOSHI).contains(&status)
146+
// || (*FIGHTER_STATUS_KIND_CATCHED_REFLET..=*FIGHTER_STATUS_KIND_CAPTURE_MASTERHAND).contains(&status)
147+
// || status == *FIGHTER_STATUS_KIND_GIMMICK_EATEN
148+
// || (*FIGHTER_STATUS_KIND_CAPTURE_ITEM..=*FIGHTER_STATUS_KIND_CAPTURE_CLAPTRAP).contains(&status)
149+
// || (*FIGHTER_STATUS_KIND_FINAL_VISUAL_ATTACK_OTHER..=*FIGHTER_STATUS_KIND_RIDLEY_FINAL_TARGET_END).contains(&status)
150+
// || (*FIGHTER_STATUS_KIND_CATCHED_RIDLEY..=*FIGHTER_STATUS_KIND_STABBED_DAMAGE).contains(&status)
151+
// || (*FIGHTER_STATUS_KIND_SWING_GAOGAEN_CATCHED..=*FIGHTER_STATUS_KIND_SWING_GAOGAEN_FAILURE).contains(&status)
152+
// || (*FIGHTER_STATUS_KIND_SHEIK_FINAL_CAPTURE..=*FIGHTER_STATUS_KIND_CAPTURE_WAIT_OCTOPUS).contains(&status)
153+
// || (*FIGHTER_STATUS_KIND_SIMON_FINAL_TARGET_START..=*FIGHTER_STATUS_KIND_YOSHI_FINAL_TARGET_END).contains(&status)
154+
// || (*FIGHTER_STATUS_KIND_SUICIDE_BOMB..=*FIGHTER_STATUS_KIND_TANTAN_FINAL_TARGET_END).contains(&status)
155+
// || (*FIGHTER_STATUS_KIND_DAMAGE_FLY_REFLECT_JUMP_BOARD..=*FIGHTER_STATUS_KIND_EDGE_FINAL_TARGET_END).contains(&status)
156+
// || (*FIGHTER_STATUS_KIND_CAPTURE_TRAIL_KEYHOLE..=*FIGHTER_STATUS_KIND_TRAIL_FINAL_TARGET_END).contains(&status) {
157+
// return true;
158+
// }
159+
// false
160+
// }
161161

162162
unsafe fn rockman_valid_charging_state(module_accessor: *mut BattleObjectModuleAccessor) -> bool {
163163
if WorkModule::is_enable_transition_term(module_accessor, *FIGHTER_STATUS_TRANSITION_TERM_ID_CONT_SPECIAL_N) {
164164
return true;
165165
}
166-
if is_damage_check(module_accessor, false) {
167-
return false;
168-
}
166+
// if is_damage_check(module_accessor, false) {
167+
// return false;
168+
// }
169169
let status = StatusModule::status_kind(module_accessor);
170170
![
171171
*FIGHTER_STATUS_KIND_DEAD,

fighters/simon/src/status/attacks3.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ unsafe extern "C" fn attack_s3_main_loop(fighter: &mut L2CFighterCommon) -> L2CV
3131

3232
// <HDR>
3333
if StatusModule::is_changing(fighter.module_accessor)
34-
&& fighter.global_table[PREV_STATUS_KIND] == FIGHTER_STATUS_KIND_SQUAT_WAIT {
34+
&& [*FIGHTER_STATUS_KIND_SQUAT_WAIT, *FIGHTER_STATUS_KIND_SQUAT_RV].contains(&fighter.global_table[PREV_STATUS_KIND].get_i32()) {
3535
WorkModule::unable_transition_term_group_ex(fighter.module_accessor, *FIGHTER_STATUS_TRANSITION_TERM_ID_CONT_SQUAT);
3636
MotionModule::change_motion(fighter.module_accessor, Hash40::new("attack_squat_s3"), 0.0, 1.0, false, 0.0, false, false);
3737
}

0 commit comments

Comments
 (0)