Skip to content

Commit b71beb1

Browse files
committed
Merge branch 'dev' into wuboy-adjustments
2 parents 3dc6b94 + de21db9 commit b71beb1

File tree

174 files changed

+5112
-3217
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

174 files changed

+5112
-3217
lines changed

dynamic/src/consts.rs

+18
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ pub mod vars {
178178

179179
pub const IS_ATTACK_CANCEL: i32 = 0x0063;
180180

181+
pub const DISABLE_CSTICK_BUFFER_ROLL_OOS: i32 = 0x0064;
182+
181183
// ints
182184

183185
pub const LAST_ATTACK_RECEIVER_ENTRY_ID: i32 = 0x0000;
@@ -303,6 +305,7 @@ pub mod vars {
303305
// ints
304306
pub const NUM_RECOVERY_RESOURCE_USED: i32 = 0x0100;
305307
pub const FAIR_STATE: i32 = 0x0101;
308+
pub const SPECIAL_S_FRAME: i32 = 0x0102;
306309
}
307310
pub mod status {
308311
// floats
@@ -515,6 +518,7 @@ pub mod vars {
515518

516519
// flags
517520
pub const IS_INVALID_TELEPORT: i32 = 0x1101;
521+
pub const GROUNDED_TELEPORT: i32 = 0x1102;
518522
}
519523
}
520524

@@ -656,6 +660,7 @@ pub mod vars {
656660
// copy ability
657661
// flags
658662
pub const SHOULD_CYCLE_MATERIAL: i32 = 0x01F4;
663+
pub use super::super::ridley::instance::SPECIAL_N_EXPLODE;
659664

660665
// ints
661666
pub const MATERIAL_INDEX: i32 = 0x01F5;
@@ -889,6 +894,7 @@ pub mod vars {
889894

890895
pub mod pikmin {
891896
pub mod instance {
897+
// flags
892898
pub const SPECIAL_HI_CANCEL_ESCAPE_AIR: i32 = 0x0100;
893899
}
894900
}
@@ -1081,6 +1087,10 @@ pub mod vars {
10811087
pub const COMBO_PLUS_GROUND: i32 = 0x0101;
10821088
pub const COMBO_PLUS_AIR: i32 = 0x0102;
10831089
pub const CYCLE_MAGIC: i32 = 0x0103; // used to properly cycle Sora's HUD to fire in training mode
1090+
pub const ATTACK_LW4_REBOUND: i32 = 0x0104;
1091+
1092+
// floats
1093+
pub const JUMP_CANCEL_MOMENTUM_HANDLER: i32 = 0x0100;
10841094
}
10851095
pub mod status {
10861096
// flags
@@ -1099,8 +1109,12 @@ pub mod vars {
10991109

11001110
pub const UP_SPECIAL_HIT: i32 = 0x1100;
11011111

1112+
// ints
1113+
pub const ATTACK_LW4_TIMER: i32 = 0x1100;
1114+
11021115
// floats
11031116
pub const SONIC_BLADE_Y: i32 = 0x1100;
1117+
pub const DACUS_SPEED_Y: i32 = 0x1101;
11041118
}
11051119
}
11061120

@@ -1203,6 +1217,7 @@ pub mod vars {
12031217
// flags
12041218
pub const LUNAR_LAUNCH_AIR_USED: i32 = 0x0100;
12051219
pub const DETONATE_READY: i32 = 0x0101;
1220+
pub const BOOSTED_DAIR_AIRTIME: i32 = 0x0102;
12061221

12071222
// ints
12081223
pub const LUNAR_LAUNCH_EFF_HANDLER: i32 = 0x0100;
@@ -1242,6 +1257,7 @@ pub mod vars {
12421257
// flags
12431258
pub const IS_DREAMLAND_EXPRESS: i32 = 0x0100;
12441259
pub const IS_LATE_DLE_INPUT: i32 = 0x0101;
1260+
pub const KO_MOTION_AIRTIME: i32 = 0x0102;
12451261

12461262
// floats
12471263
pub const CURRENT_DAMAGE: i32 = 0x0100;
@@ -1322,6 +1338,7 @@ pub mod vars {
13221338
pub const SPECIAL_LW_ENABLE_LANDING: i32 = 0x0102;
13231339
pub const SPECIAL_LW_IS_LANDING: i32 = 0x0103;
13241340
pub const SPECIAL_LW_ENABLE_BOUNCE: i32 = 0x0104;
1341+
pub const SPECIAL_N_EXPLODE: i32 = 0x0105;
13251342

13261343
// floats
13271344
pub const SPECIAL_LW_BOUNCE_PREV_POS: i32 = 0x0100; //vector, requires two indexes
@@ -1499,5 +1516,6 @@ pub mod statuses {
14991516

15001517
pub mod bayonetta {
15011518
pub const SPECIAL_S_KICK: i32 = 0;
1519+
pub const SPECIAL_S_EDGE: i32 = 1;
15021520
}
15031521
}

dynamic/src/game_modes.rs

+3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ pub enum CustomMode {
88
TurboMode = 1,
99
HitfallMode = 2,
1010
AirdashMode = 3,
11+
Smash64Mode = 4,
1112
}
1213

1314
impl fmt::Display for CustomMode {
@@ -17,6 +18,7 @@ impl fmt::Display for CustomMode {
1718
CustomMode::TurboMode => write!(f, "Turbo"),
1819
CustomMode::HitfallMode => write!(f, "Hitfall"),
1920
CustomMode::AirdashMode => write!(f, "Airdash"),
21+
CustomMode::Smash64Mode => write!(f, "Smash64"),
2022
}
2123
}
2224
}
@@ -31,6 +33,7 @@ impl FromStr for CustomMode {
3133
"turbo" => Ok(CustomMode::TurboMode),
3234
"hitfall" => Ok(CustomMode::HitfallMode),
3335
"airdash" => Ok(CustomMode::AirdashMode),
36+
"smash64" => Ok(CustomMode::Smash64Mode),
3437
_ => Err(()),
3538
}
3639
}

fighters/bayonetta/src/acmd/ground.rs

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

fighters/bayonetta/src/acmd/specials.rs

+67-5
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,65 @@ unsafe fn bayonetta_special_s_game(fighter: &mut L2CAgentBase) {
6363
}
6464
}
6565

66+
#[acmd_script( agent = "bayonetta", script = "game_specialsedge", category = ACMD_GAME, low_priority )]
67+
unsafe fn bayonetta_special_s_edge_game(fighter: &mut L2CAgentBase) {
68+
let lua_state = fighter.lua_state_agent;
69+
let boma = fighter.boma();
70+
frame(lua_state, 1.0);
71+
if is_excute(fighter) {
72+
fighter.off_flag(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_S_FLAG_WALL_CHECK);
73+
notify_event_msc_cmd!(fighter, Hash40::new_raw(0x2d51fcdb09), *FIGHTER_BAYONETTA_SHOOTING_SLOT_R_LEG, false, false, true, 10, 0, 20, 0, false);
74+
ATTACK(fighter, 0, 0, Hash40::new("footr"), 7.0, 62, 8, 0, 69, 4.0, 0.0, 0.0, 0.0, Some(-8.0), Some(0.0), Some(0.0), 0.9, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, true, 0, 0.0, 0, false, false, false, false, true, *COLLISION_SITUATION_MASK_GA, *COLLISION_CATEGORY_MASK_NO_FLOOR, *COLLISION_PART_MASK_ALL, false, Hash40::new("collision_attr_normal"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_KICK);
75+
}
76+
frame(lua_state, 16.0);
77+
if is_excute(fighter) {
78+
AttackModule::clear_all(boma);
79+
fighter.set_int(*FIGHTER_BAYONETTA_SHOOTING_STEP_WAIT_END, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_INT_SHOOTING_STEP);
80+
//fighter.off_flag(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLAG_SHOOTING_ACTION);
81+
}
82+
frame(lua_state, 24.0);
83+
if is_excute(fighter) {
84+
KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_FALL);
85+
}
86+
}
87+
88+
#[acmd_script( agent = "bayonetta", script = "effect_specialsedge", category = ACMD_EFFECT, low_priority )]
89+
unsafe fn bayonetta_special_s_edge_effect(fighter: &mut L2CAgentBase) {
90+
let lua_state = fighter.lua_state_agent;
91+
let boma = fighter.boma();
92+
frame(lua_state, 1.0);
93+
if is_excute(fighter) {
94+
EFFECT_FOLLOW_NO_STOP(fighter, Hash40::new("bayonetta_heelslide_burst"), Hash40::new("kneer"), 9.5, 0, 0, 0, 90, 0, 1.1, true);
95+
EffectModule::enable_sync_init_pos_last(boma);
96+
if WorkModule::get_int(boma, *FIGHTER_BAYONETTA_INSTANCE_WORK_ID_INT_COSTUME_KIND) == 2 {LAST_EFFECT_SET_COLOR(fighter, 1, 0.118, 0.118); }
97+
else {LAST_EFFECT_SET_COLOR(fighter, 0.059, 0.38, 1); }
98+
}
99+
frame(lua_state, 14.0);
100+
if is_excute(fighter) {
101+
EFFECT_OFF_KIND(fighter, Hash40::new("bayonetta_heelslide_burst"), false, false);
102+
}
103+
}
104+
105+
#[acmd_script( agent = "bayonetta", script = "sound_specialsedge", category = ACMD_SOUND, low_priority )]
106+
unsafe fn bayonetta_special_s_edge_sound(fighter: &mut L2CAgentBase) {
107+
}
108+
109+
#[acmd_script( agent = "bayonetta", script = "expression_specialsedge", category = ACMD_EXPRESSION, low_priority )]
110+
unsafe fn bayonetta_special_s_edge_expression(fighter: &mut L2CAgentBase) {
111+
let lua_state = fighter.lua_state_agent;
112+
let boma = fighter.boma();
113+
frame(lua_state, 1.0);
114+
if is_excute(fighter) {
115+
ControlModule::set_rumble(boma, Hash40::new("rbkind_dash"), 0, false, *BATTLE_OBJECT_ID_INVALID as u32);
116+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_TOP, 2, true);
117+
}
118+
frame(lua_state, 16.0);
119+
if is_excute(fighter) {
120+
ControlModule::set_rumble(boma, Hash40::new("rbkind_lands"), 0, false, *BATTLE_OBJECT_ID_INVALID as u32);
121+
slope!(fighter, *MA_MSC_CMD_SLOPE_SLOPE_INTP, *SLOPE_STATUS_LR, 6);
122+
}
123+
}
124+
66125
#[acmd_script( agent = "bayonetta", script = "game_specialsholdend", category = ACMD_GAME, low_priority )]
67126
unsafe fn bayonetta_special_s_hold_end_game(fighter: &mut L2CAgentBase) {
68127
let lua_state = fighter.lua_state_agent;
@@ -302,15 +361,14 @@ unsafe fn bayonetta_special_hi_game(fighter: &mut L2CAgentBase) {
302361
if is_excute(fighter) {
303362
AttackModule::clear_all(boma);
304363
fighter.on_flag(*FIGHTER_BAYONETTA_INSTANCE_WORK_ID_FLAG_SHOOTING_CHECK_END);
305-
KineticModule::add_speed_outside(fighter.module_accessor, *KINETIC_OUTSIDE_ENERGY_TYPE_WIND_NO_ADDITION, &Vector3f::new( 0.0, 4.0, 0.0));
306364
if fighter.is_flag(*FIGHTER_BAYONETTA_STATUS_WORK_ID_SPECIAL_HI_FLAG_REUSE) {
307365
VarModule::on_flag(fighter.battle_object, vars::common::instance::UP_SPECIAL_CANCEL);
308366
ATTACK(fighter, 0, 0, Hash40::new("top"), 3.5, 22, 35, 0, 40, 4.6, 0.0, 23.1, 0.0, Some(0.0), Some(18.4), Some(0.0), 1.3, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, true, 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_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_PUNCH);
309367
} else {
310368
ATTACK(fighter, 0, 0, Hash40::new("top"), 3.5, 42, 55, 0, 45, 4.6, 0.0, 23.1, 0.0, Some(0.0), Some(18.4), Some(0.0), 1.3, 1.0, *ATTACK_SETOFF_KIND_OFF, *ATTACK_LR_CHECK_F, true, 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_L, *COLLISION_SOUND_ATTR_KICK, *ATTACK_REGION_PUNCH);
311369
}
312370
}
313-
frame(lua_state, 22.0);
371+
frame(lua_state, 23.0);
314372
if is_excute(fighter) {
315373
AttackModule::clear_all(boma);
316374
notify_event_msc_cmd!(fighter, Hash40::new_raw(0x2bfb02b69a), true);
@@ -324,14 +382,14 @@ unsafe fn bayonetta_special_hi_game(fighter: &mut L2CAgentBase) {
324382
CancelModule::enable_cancel(fighter.module_accessor);
325383
}
326384
}
327-
frame(lua_state, 35.0);
385+
frame(lua_state, 32.0);
328386
if is_excute(fighter) {
329387
notify_event_msc_cmd!(fighter, Hash40::new_raw(0x2127e37c07), *GROUND_CLIFF_CHECK_KIND_ALWAYS_BOTH_SIDES);
330388
KineticModule::change_kinetic(fighter.module_accessor, *FIGHTER_KINETIC_TYPE_FALL);
331389
}
332390
}
333391

334-
#[acmd_script( agent = "bayonetta", scripts = ["effect_specialairhi", "effect_specialhi"], category = ACMD_EFFECT, low_priority )]
392+
#[acmd_script( agent = "bayonetta", script = "effect_specialhi", category = ACMD_EFFECT, low_priority )]
335393
unsafe fn bayonetta_special_hi_effect(fighter: &mut L2CAgentBase) {
336394
frame(fighter.lua_state_agent, 6.0);
337395
if is_excute(fighter) {
@@ -362,7 +420,7 @@ unsafe fn bayonetta_special_hi_effect(fighter: &mut L2CAgentBase) {
362420
}
363421
}
364422

365-
#[acmd_script( agent = "bayonetta", scripts = ["sound_specialhi", "sound_specialairhi"], category = ACMD_SOUND, low_priority )]
423+
#[acmd_script( agent = "bayonetta", script = "sound_specialhi", category = ACMD_SOUND, low_priority )]
366424
unsafe fn bayonetta_special_hi_sound(fighter: &mut L2CAgentBase) {
367425
let lua_state = fighter.lua_state_agent;
368426
let boma = fighter.boma();
@@ -430,6 +488,10 @@ pub fn install() {
430488
bayonetta_special_n_end_game,
431489
bayonetta_special_n_start_game,
432490
bayonetta_special_s_game,
491+
bayonetta_special_s_edge_game,
492+
bayonetta_special_s_edge_effect,
493+
bayonetta_special_s_edge_sound,
494+
bayonetta_special_s_edge_expression,
433495
bayonetta_special_s_hold_end_game,
434496
bayonetta_special_air_s_u_game,
435497
bayonetta_special_air_s_u_effect,

fighters/bayonetta/src/opff.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,14 @@ unsafe fn resources(fighter: &mut L2CFighterCommon, boma: &mut BattleObjectModul
8080
VarModule::on_flag(fighter.battle_object, vars::common::instance::SIDE_SPECIAL_CANCEL);
8181
VarModule::on_flag(fighter.battle_object, vars::common::instance::UP_SPECIAL_CANCEL);
8282
}
83-
//hit-flag
84-
if !VarModule::is_flag(fighter.battle_object, vars::bayonetta::instance::IS_HIT) && AttackModule::is_infliction(boma, *COLLISION_KIND_MASK_HIT) && VarModule::get_int(fighter.battle_object, vars::common::instance::LAST_ATTACK_HITBOX_ID) < 6 {
85-
VarModule::on_flag(fighter.battle_object, vars::bayonetta::instance::IS_HIT);
83+
//hit-flag to filter bullets
84+
if !VarModule::is_flag(fighter.battle_object, vars::bayonetta::instance::IS_HIT) && VarModule::get_int(fighter.battle_object, vars::common::instance::LAST_ATTACK_HITBOX_ID) < 6 {
85+
//hit cancel moves (filter shield)
86+
if fighter.is_status_one_of(&[*FIGHTER_STATUS_KIND_ATTACK_AIR, *FIGHTER_BAYONETTA_STATUS_KIND_ATTACK_AIR_F, *FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_AIR_S_U, *FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_AIR_S_D, *FIGHTER_STATUS_KIND_SPECIAL_HI, *FIGHTER_BAYONETTA_STATUS_KIND_SPECIAL_HI_JUMP]) {
87+
if AttackModule::is_infliction(boma, *COLLISION_KIND_MASK_HIT) {VarModule::on_flag(fighter.battle_object, vars::bayonetta::instance::IS_HIT); }
88+
} else { //other moves
89+
if AttackModule::is_infliction(boma, *COLLISION_KIND_MASK_HIT | *COLLISION_KIND_MASK_SHIELD) {VarModule::on_flag(fighter.battle_object, vars::bayonetta::instance::IS_HIT); }
90+
}
8691
}
8792
}
8893

0 commit comments

Comments
 (0)