Skip to content

Commit e7400f3

Browse files
committed
Merge branch 'dev' into swordie-evaluation
2 parents bd8b572 + 6dea02d commit e7400f3

File tree

105 files changed

+2742
-1471
lines changed

Some content is hidden

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

105 files changed

+2742
-1471
lines changed

dynamic/src/consts.rs

+8
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,7 @@ pub mod vars {
305305
// ints
306306
pub const NUM_RECOVERY_RESOURCE_USED: i32 = 0x0100;
307307
pub const FAIR_STATE: i32 = 0x0101;
308+
pub const SPECIAL_S_FRAME: i32 = 0x0102;
308309
}
309310
pub mod status {
310311
// floats
@@ -517,6 +518,7 @@ pub mod vars {
517518

518519
// flags
519520
pub const IS_INVALID_TELEPORT: i32 = 0x1101;
521+
pub const GROUNDED_TELEPORT: i32 = 0x1102;
520522
}
521523
}
522524

@@ -658,6 +660,7 @@ pub mod vars {
658660
// copy ability
659661
// flags
660662
pub const SHOULD_CYCLE_MATERIAL: i32 = 0x01F4;
663+
pub use super::super::ridley::instance::SPECIAL_N_EXPLODE;
661664

662665
// ints
663666
pub const MATERIAL_INDEX: i32 = 0x01F5;
@@ -891,6 +894,7 @@ pub mod vars {
891894

892895
pub mod pikmin {
893896
pub mod instance {
897+
// flags
894898
pub const SPECIAL_HI_CANCEL_ESCAPE_AIR: i32 = 0x0100;
895899
}
896900
}
@@ -1198,6 +1202,7 @@ pub mod vars {
11981202
// flags
11991203
pub const LUNAR_LAUNCH_AIR_USED: i32 = 0x0100;
12001204
pub const DETONATE_READY: i32 = 0x0101;
1205+
pub const BOOSTED_DAIR_AIRTIME: i32 = 0x0102;
12011206

12021207
// ints
12031208
pub const LUNAR_LAUNCH_EFF_HANDLER: i32 = 0x0100;
@@ -1237,6 +1242,7 @@ pub mod vars {
12371242
// flags
12381243
pub const IS_DREAMLAND_EXPRESS: i32 = 0x0100;
12391244
pub const IS_LATE_DLE_INPUT: i32 = 0x0101;
1245+
pub const KO_MOTION_AIRTIME: i32 = 0x0102;
12401246

12411247
// floats
12421248
pub const CURRENT_DAMAGE: i32 = 0x0100;
@@ -1317,6 +1323,7 @@ pub mod vars {
13171323
pub const SPECIAL_LW_ENABLE_LANDING: i32 = 0x0102;
13181324
pub const SPECIAL_LW_IS_LANDING: i32 = 0x0103;
13191325
pub const SPECIAL_LW_ENABLE_BOUNCE: i32 = 0x0104;
1326+
pub const SPECIAL_N_EXPLODE: i32 = 0x0105;
13201327

13211328
// floats
13221329
pub const SPECIAL_LW_BOUNCE_PREV_POS: i32 = 0x0100; //vector, requires two indexes
@@ -1494,5 +1501,6 @@ pub mod statuses {
14941501

14951502
pub mod bayonetta {
14961503
pub const SPECIAL_S_KICK: i32 = 0;
1504+
pub const SPECIAL_S_EDGE: i32 = 1;
14971505
}
14981506
}

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)