Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WuBoy's Misc Branch #2235

Merged
merged 13 commits into from
Feb 7, 2024
7 changes: 7 additions & 0 deletions dynamic/src/consts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -961,6 +961,13 @@ pub mod vars {
}
}

pub mod rockman_airshooter {
pub mod status {
// flags
pub const MOVE : i32 = 0x1100;
}
}

pub mod roy {
pub mod instance {
// flags
Expand Down
8 changes: 2 additions & 6 deletions fighters/bayonetta/src/acmd/other.rs
Original file line number Diff line number Diff line change
Expand Up @@ -689,12 +689,8 @@ unsafe fn game_catchattack(agent: &mut L2CAgentBase) {
#[acmd_script( agent = "bayonetta", script = "effect_landingheavy", category = ACMD_EFFECT, low_priority )]
unsafe fn bayonetta_landing_heavy_effect(fighter: &mut L2CAgentBase) {
if is_excute(fighter) {
if fighter.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
EFFECT(fighter, Hash40::new("bayonetta_jump_circle"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
} else {
LANDING_EFFECT(fighter, Hash40::new("sys_landing_smoke"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 0.9, 0, 0, 0, 0, 0, 0, false);
EFFECT(fighter, Hash40::new("bayonetta_butterfly_landing"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
}
LANDING_EFFECT(fighter, Hash40::new("sys_landing_smoke"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 0.9, 0, 0, 0, 0, 0, 0, false);
EFFECT(fighter, Hash40::new("bayonetta_butterfly_landing"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
}
}

Expand Down
36 changes: 36 additions & 0 deletions fighters/chrom/src/opff.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,42 @@ unsafe fn side_special_cancels(fighter: &mut L2CFighterCommon) {
}
}

pub unsafe fn double_edge_dance_during_hitlag(fighter: &mut L2CFighterCommon) {
if !fighter.is_status_one_of(&[*FIGHTER_STATUS_KIND_SPECIAL_S, *FIGHTER_ROY_STATUS_KIND_SPECIAL_S2, *FIGHTER_ROY_STATUS_KIND_SPECIAL_S3]) {
return;
}
if fighter.global_table[globals::SUB_STATUS].get_bool() {
// disables the original substatus - I'd rather not run it twice.
fighter.global_table[globals::SUB_STATUS].assign(&L2CValue::Void());
}
if !WorkModule::is_flag(fighter.module_accessor, *FIGHTER_ROY_STATUS_SPECIAL_S_FLAG_INPUT_FAILURE) {
if WorkModule::is_flag(fighter.module_accessor, *FIGHTER_ROY_STATUS_SPECIAL_S_FLAG_INPUT_SUCCESS) {
return;
}
if !ControlModule::check_button_trigger(fighter.module_accessor, *CONTROL_PAD_BUTTON_SPECIAL) {
return;
}
if !WorkModule::is_flag(fighter.module_accessor, *FIGHTER_ROY_STATUS_SPECIAL_S_FLAG_INPUT_CHECK) {
WorkModule::on_flag(fighter.module_accessor, *FIGHTER_ROY_STATUS_SPECIAL_S_FLAG_INPUT_FAILURE);
}
else {
WorkModule::on_flag(fighter.module_accessor, *FIGHTER_ROY_STATUS_SPECIAL_S_FLAG_INPUT_SUCCESS);
let enable_hi_lw = WorkModule::get_param_int(fighter.module_accessor, hash40("param_special_s"), hash40("enable_input_hi_lw"));
if enable_hi_lw == 0 {
return;
}
let stick_y = fighter.global_table[globals::STICK_Y].get_f32();
let squat_stick_y = WorkModule::get_param_float(fighter.module_accessor, hash40("common"), hash40("squat_stick_y"));
if stick_y > -squat_stick_y {
WorkModule::on_flag(fighter.module_accessor, *FIGHTER_ROY_STATUS_SPECIAL_S_FLAG_INPUT_HI);
}
else if stick_y < squat_stick_y {
WorkModule::on_flag(fighter.module_accessor, *FIGHTER_ROY_STATUS_SPECIAL_S_FLAG_INPUT_LW);
}
}
}
}

// Soaring Slash Hit
unsafe fn soaring_slash(fighter: &mut L2CFighterCommon) {
if !fighter.is_status_one_of(&[
Expand Down
6 changes: 2 additions & 4 deletions fighters/common/src/function_hooks/change_motion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ unsafe fn change_motion_hook(boma: &mut BattleObjectModuleAccessor, motion_hash:
if boma.is_fighter() {
// Starts landing animations on frame 2
// This is a purely aesthetic change, makes for snappier landings
if [Hash40::new("landing_air_n"),
if [Hash40::new("landing_heavy"),
Hash40::new("landing_air_n"),
Hash40::new("landing_air_f"),
Hash40::new("landing_air_b"),
Hash40::new("landing_air_hi"),
Expand All @@ -25,9 +26,6 @@ unsafe fn change_motion_hook(boma: &mut BattleObjectModuleAccessor, motion_hash:
{
start_frame = 1.0;
}
else if motion_hash == Hash40::new("landing_heavy") {
start_frame = 3.0;
}

// Allows a frame-perfect edge canceled waveland to still generate landing smoke GFX
if VarModule::is_flag(boma.object(), vars::common::instance::FLUSH_EFFECT_ACMD)
Expand Down
9 changes: 0 additions & 9 deletions fighters/common/src/function_hooks/controls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1136,14 +1136,6 @@ unsafe fn reset_flick_y(boma: &mut BattleObjectModuleAccessor) {
call_original!(boma);
}

#[skyline::hook(replace=ControlModule::set_rumble)]
unsafe fn set_rumble_hook(boma: &mut BattleObjectModuleAccessor, kind: smash::phx::Hash40, arg3: i32, arg4: bool, arg5: u32) {
if boma.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
return;
}
call_original!(boma, kind, arg3, arg4, arg5);
}

fn nro_hook(info: &skyline::nro::NroInfo) {
if info.name == "common" {
skyline::install_hook!(is_throw_stick);
Expand Down Expand Up @@ -1189,7 +1181,6 @@ pub fn install() {
exec_command_reset_attack_air_kind_hook,
reset_flick_x,
reset_flick_y,
set_rumble_hook,
);
skyline::nro::add_hook(nro_hook);
}
6 changes: 0 additions & 6 deletions fighters/common/src/function_hooks/effect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,9 +232,6 @@ unsafe fn FOOT_EFFECT_FLIP_hook(lua_state: u64) {
#[skyline::hook(replace=smash::app::sv_animcmd::LANDING_EFFECT)]
unsafe fn LANDING_EFFECT_hook(lua_state: u64) {
let boma = smash::app::sv_system::battle_object_module_accessor(lua_state);
if boma.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
return;
}

let mut l2c_agent: L2CAgent = L2CAgent::new(lua_state);

Expand Down Expand Up @@ -268,9 +265,6 @@ unsafe fn LANDING_EFFECT_hook(lua_state: u64) {
#[skyline::hook(replace=smash::app::sv_animcmd::LANDING_EFFECT_FLIP)]
unsafe fn LANDING_EFFECT_FLIP_hook(lua_state: u64) {
let boma = smash::app::sv_system::battle_object_module_accessor(lua_state);
if boma.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
return;
}

let mut l2c_agent: L2CAgent = L2CAgent::new(lua_state);

Expand Down
17 changes: 17 additions & 0 deletions fighters/common/src/function_hooks/fighter_util.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
use super::*;

#[skyline::hook(replace = FighterUtil::get_just_shield_se)]
unsafe extern "C" fn get_just_shield_se(fighter_kind: i32) -> u64 {
match fighter_kind {
0x3c => hash40("se_ryu_guard_just"),
0x3d => hash40("se_ken_guard_just"),
0x5b => hash40("se_elight_escapeforesight01"),
_ => hash40("se_common_justshield")
}
}

pub fn install() {
skyline::install_hooks!(
get_just_shield_se
);
}
2 changes: 1 addition & 1 deletion fighters/common/src/function_hooks/get_param.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ pub unsafe fn get_param_float_hook(x0 /*boma*/: u64, x1 /*param_type*/: u64, x2
// Coupled with "landing_heavy" change in change_motion hook
// Because we start heavy landing anims on f2 rather than f1, we need to push back the heavy landing FAF by 1 frame so it is accurate to the defined per-character param
if x1 == hash40("landing_frame") {
return original!()(x0, hash40("landing_frame"), 0) + 3.0;
return original!()(x0, hash40("landing_frame"), 0) + 1.0;
}

// Ken aerial hadouken modified offsets for aerial version
Expand Down
2 changes: 2 additions & 0 deletions fighters/common/src/function_hooks/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ pub mod shotos;
pub mod aura;
pub mod sound;
mod fighterspecializer;
mod fighter_util;

#[repr(C)]
pub struct TempModule {
Expand Down Expand Up @@ -761,6 +762,7 @@ pub fn install() {
aura::install();
sound::install();
fighterspecializer::install();
fighter_util::install();

unsafe {
// Handles getting rid of the kill zoom
Expand Down
22 changes: 0 additions & 22 deletions fighters/common/src/function_hooks/sound.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,6 @@ use super::*;
use globals::*;
use utils::*;

#[skyline::hook(replace=smash::app::sv_animcmd::PLAY_LANDING_SE)]
unsafe fn PLAY_LANDING_SE_hook(lua_state: u64) {
let boma = smash::app::sv_system::battle_object_module_accessor(lua_state);
if boma.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
return;
}

original!()(lua_state);
}

#[skyline::hook(replace=smash::app::sv_animcmd::PLAY_SE)]
unsafe fn PLAY_SE_hook(lua_state: u64) {
let boma = smash::app::sv_system::battle_object_module_accessor(lua_state);
if boma.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
return;
}

original!()(lua_state);
}

#[skyline::hook(offset = 0x4cf6a0)]
unsafe fn soundmodule__play_se_hook(sound_module: u64, se: smash::phx::Hash40, arg2: bool, arg3: bool, arg4: bool, arg5: bool, se_type: smash::app::enSEType) -> u64 {
let handle = original!()(sound_module, se, arg2, arg3, arg4, arg5, se_type);
Expand Down Expand Up @@ -57,8 +37,6 @@ unsafe fn PLAY_SEQUENCE_hook(lua_state: u64) {

pub fn install() {
skyline::install_hooks!(
PLAY_LANDING_SE_hook,
PLAY_SE_hook,
soundmodule__play_se_hook,
PLAY_SEQUENCE_hook,
);
Expand Down
9 changes: 7 additions & 2 deletions fighters/common/src/general_statuses/jumpsquat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -453,12 +453,17 @@ unsafe fn sub_jump_squat_uniq_process_init_param(fighter: &mut L2CFighterCommon,
let jump_squat_frame = WorkModule::get_param_int(fighter.module_accessor, hash40("jump_squat_frame"), 0) as f32;
// This cuts a single frame off of the end of the specified characters' jumpsquat animations
// This is a purely aesthetic change, makes for snappier jumps
let end_frame = MotionModule::end_frame_from_hash(fighter.module_accessor, Hash40::new("landing_heavy")) * 0.25;
let mut end_frame = MotionModule::end_frame_from_hash(fighter.module_accessor, motion_hash.get_hash());
let mut start_frame = 0.0;
if motion_hash.get_hash().hash == hash40("jump_squat") {
end_frame *= 0.25;
start_frame = 3.0;
}

// vanilla logic
let mut motion_rate = end_frame / jump_squat_frame;
if motion_rate < 1.0 {
motion_rate += 0.001;
}
MotionModule::change_motion(fighter.module_accessor, Hash40::new("landing_heavy"), 3.0, motion_rate, false, 0.0, false, false);
MotionModule::change_motion(fighter.module_accessor, motion_hash.get_hash(), start_frame, motion_rate, false, 0.0, false, false);
}
3 changes: 1 addition & 2 deletions fighters/dedede/src/acmd/other.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,7 @@ unsafe fn expression_landingheavy(fighter: &mut L2CAgentBase) {
if is_excute(fighter) {
ControlModule::set_rumble(boma, Hash40::new("rbkind_landl"), 0, false, 0x50000000 /* default value */);
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE, *SLOPE_STATUS_LR);
if !fighter.is_prev_status(*FIGHTER_STATUS_KIND_ESCAPE_AIR)
&& !fighter.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
if !fighter.is_prev_status(*FIGHTER_STATUS_KIND_ESCAPE_AIR) {
QUAKE(fighter, *CAMERA_QUAKE_KIND_S);
}
}
Expand Down
3 changes: 1 addition & 2 deletions fighters/donkey/src/acmd/other.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,7 @@ unsafe fn expression_landingheavy(fighter: &mut L2CAgentBase) {
if is_excute(fighter) {
ControlModule::set_rumble(boma, Hash40::new("rbkind_landl"), 0, false, 0x50000000 /* default value */);
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE, *SLOPE_STATUS_LR);
if !fighter.is_prev_status(*FIGHTER_STATUS_KIND_ESCAPE_AIR)
&& !fighter.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
if !fighter.is_prev_status(*FIGHTER_STATUS_KIND_ESCAPE_AIR) {
QUAKE(fighter, *CAMERA_QUAKE_KIND_S);
}
}
Expand Down
41 changes: 41 additions & 0 deletions fighters/elight/src/acmd/other.rs
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,45 @@ unsafe fn escape_air_slide_game(fighter: &mut L2CAgentBase) {
}
}

#[acmd_script( agent = "elight", script = "effect_justshieldoff", category = ACMD_EFFECT , low_priority)]
unsafe fn just_shield_off_effect(fighter: &mut L2CAgentBase) {
let lua_state = fighter.lua_state_agent;
let boma = fighter.boma();
if is_excute(fighter) {
ColorBlendModule::set_disable_camera_depth_influence(boma, true);
COL_PRI(fighter, 250);
FLASH(fighter, 0, 0.1, 0.6, 0.8);
fighter.clear_lua_stack();
lua_args!(fighter, -1, 0, 0);
sv_animcmd::FLASH_SET_DIRECTION(fighter.lua_state_agent);
EFFECT(fighter, Hash40::new("elight_foresight2"), Hash40::new("top"), 0, 7.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, true);
EFFECT(fighter, Hash40::new("elight_foresight_lensflare"), Hash40::new("top"), 0, 7.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
EFFECT_FOLLOW(fighter, Hash40::new("elight_foresight_body"), Hash40::new("hip"), 2, 0, 0, 0, 0, 90, 1, true);
}
wait(lua_state, 3.0);
if is_excute(fighter) {
FLASH_FRM(fighter, 6, 0, 0.1, 0.6, 0);
}
wait(lua_state, 6.0);
if is_excute(fighter) {
COL_NORMAL(fighter);
ColorBlendModule::set_disable_camera_depth_influence(boma, false);
}
}

#[acmd_script( agent = "elight", script = "sound_justshieldoff", category = ACMD_SOUND , low_priority)]
unsafe fn just_shield_off_sound(fighter: &mut L2CAgentBase) {
let lua_state = fighter.lua_state_agent;
let boma = fighter.boma();
if is_excute(fighter) {
let rand = sv_math::rand(hash40("fighter"), 10);
if rand < 3 {
PLAY_SEQUENCE(fighter, Hash40::new("seq_elight_rnd_foresight"));
}
PLAY_SE(fighter, Hash40::new("se_elight_escapeforesight01"));
}
}

pub fn install() {
install_acmd_scripts!(
dash_sound,
Expand All @@ -177,6 +216,8 @@ pub fn install() {
damageflytop_sound,
escape_air_game,
escape_air_slide_game,
just_shield_off_effect,
just_shield_off_sound
);
}

4 changes: 4 additions & 0 deletions fighters/elight/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ pub fn install(is_runtime: bool) {
if !is_runtime || is_hdr_available() {
status::add_statuses();
}

// Disables Foresight
skyline::patching::Patch::in_text(0xa28e58).nop();
skyline::patching::Patch::in_text(0xa28e64).data(0x140000ACu32);
}

pub fn delayed_install() {
Expand Down
10 changes: 7 additions & 3 deletions fighters/ganon/src/acmd/tilts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -266,16 +266,20 @@ unsafe fn ganon_attack_hi3_expression(fighter: &mut L2CAgentBase) {
unsafe fn ganon_attack_lw3_game(fighter: &mut L2CAgentBase) {
let lua_state = fighter.lua_state_agent;
let boma = fighter.boma();
frame(lua_state, 2.0);
FT_MOTION_RATE(fighter, 8.0 / 10.0);
frame(lua_state, 12.0);
FT_MOTION_RATE(fighter, 1.0);
frame(lua_state, 14.0);
if is_excute(fighter) {
ATTACK(fighter, 0, 0, Hash40::new("top"), 6.0, 65, 40, 10, 40, 3.0, 0.0, 3.0, 2.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_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);
ATTACK(fighter, 0, 0, Hash40::new("top"), 6.0, 361, 40, 10, 40, 3.0, 0.0, 3.0, 2.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_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);
}
wait(lua_state, 4.0);
if is_excute(fighter) {
AttackModule::clear_all(fighter.module_accessor);
WorkModule::on_flag(fighter.module_accessor, *FIGHTER_STATUS_ATTACK_FLAG_ENABLE_COMBO);
}
frame(lua_state, 27.0);
frame(lua_state, 30.0);
if is_excute(fighter) {
WorkModule::off_flag(fighter.module_accessor, *FIGHTER_STATUS_ATTACK_FLAG_ENABLE_COMBO);
}
Expand Down Expand Up @@ -335,7 +339,7 @@ unsafe fn ganon_attack_lw32_game(fighter: &mut L2CAgentBase) {
let boma = fighter.boma();
frame(lua_state, 14.0);
if is_excute(fighter) {
ATTACK(fighter, 0, 0, Hash40::new("top"), 8.0, 85, 60, 0, 75, 4.0, 0.0, 4.0, 3.0, Some(0.0), Some(4.0), Some(15.0), 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_F, false, 0, 0.35, 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);
ATTACK(fighter, 0, 0, Hash40::new("top"), 8.0, 65, 100, 0, 85, 4.0, 0.0, 4.0, -5.0, Some(0.0), Some(4.0), Some(15.0), 1.0, 1.0, *ATTACK_SETOFF_KIND_ON, *ATTACK_LR_CHECK_POS, false, 0, 0.35, 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);
}
wait(lua_state, 4.0);
if is_excute(fighter) {
Expand Down
4 changes: 1 addition & 3 deletions fighters/kirby/src/acmd/other.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,7 @@ unsafe fn landingheavy_effect(fighter: &mut L2CAgentBase) {
let boma = fighter.boma();
if is_excute(fighter) {
LANDING_EFFECT(fighter, Hash40::new("sys_landing_smoke"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 0.8, 0, 0, 0, 0, 0, 0, false);
if !fighter.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
EFFECT(fighter, Hash40::new("kirby_star"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
}
EFFECT(fighter, Hash40::new("kirby_star"), Hash40::new("top"), 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, false);
}
}

Expand Down
3 changes: 1 addition & 2 deletions fighters/koopa/src/acmd/other.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,7 @@ unsafe fn expression_landingheavy(fighter: &mut L2CAgentBase) {
if is_excute(fighter) {
ControlModule::set_rumble(boma, Hash40::new("rbkind_landl"), 0, false, 0x50000000 /* default value */);
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE, *SLOPE_STATUS_LR);
if !fighter.is_prev_status(*FIGHTER_STATUS_KIND_ESCAPE_AIR)
&& !fighter.is_status(*FIGHTER_STATUS_KIND_JUMP_SQUAT) {
if !fighter.is_prev_status(*FIGHTER_STATUS_KIND_ESCAPE_AIR) {
QUAKE(fighter, *CAMERA_QUAKE_KIND_S);
}
}
Expand Down
Loading
Loading