Skip to content

Commit 1bf2315

Browse files
Final Touches
Includes Motionpatch Prep for Incoming Gumshoe which will be a separate PR
1 parent 0316bba commit 1bf2315

File tree

3 files changed

+146
-92
lines changed

3 files changed

+146
-92
lines changed

fighters/duckhunt/src/acmd/smashes.rs

+5-89
Original file line numberDiff line numberDiff line change
@@ -10,56 +10,10 @@ unsafe fn duckhunt_attack_hi4_game(fighter: &mut L2CAgentBase) {
1010
}
1111
frame(lua_state, 7.0);
1212
if is_excute(fighter) {
13-
WorkModule::set_int(
14-
boma,
15-
5,
16-
*FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME,
17-
);
18-
WorkModule::set_int(
19-
boma,
20-
6,
21-
*FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME,
22-
);
13+
WorkModule::set_int( boma, 5, *FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME);
14+
WorkModule::set_int( boma, 6, *FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME);
2315
FT_MOTION_RATE_RANGE(fighter, 17.0, 57.0, 28.0);
24-
ATTACK(
25-
fighter,
26-
/*ID*/ 0,
27-
/*Part*/ 0,
28-
/*Bone*/ Hash40::new("top"),
29-
/*Damage*/ 5.0,
30-
/*Angle*/ 127,
31-
/*KBG*/ 0,
32-
/*FKB*/ 0,
33-
/*BKB*/ 110,
34-
/*Size*/ 5.3,
35-
/*X*/ 0.0,
36-
/*Y*/ 6.0,
37-
/*Z*/ 9.0,
38-
/*X2*/ None,
39-
/*Y2*/ None,
40-
/*Z2*/ None,
41-
/*Hitlag*/ 1.0,
42-
/*SDI*/ 0.5,
43-
/*Clang_Rebound*/ *ATTACK_SETOFF_KIND_THRU,
44-
/*FacingRestrict*/ *ATTACK_LR_CHECK_POS,
45-
/*SetWeight*/ false,
46-
/*ShieldDamage*/ 0,
47-
/*Trip*/ 0.0,
48-
/*Rehit*/ 0,
49-
/*Reflectable*/ false,
50-
/*Absorbable*/ false,
51-
/*Flinchless*/ false,
52-
/*DisableHitlag*/ false,
53-
/*Direct_Hitbox*/ true,
54-
/*Ground_or_Air*/ *COLLISION_SITUATION_MASK_GA,
55-
/*Hitbits*/ *COLLISION_CATEGORY_MASK_ALL,
56-
/*CollisionPart*/ *COLLISION_PART_MASK_ALL,
57-
/*FriendlyFire*/ false,
58-
/*Effect*/ Hash40::new("collision_attr_fire"),
59-
/*SFXLevel*/ *ATTACK_SOUND_LEVEL_M,
60-
/*SFXType*/ *COLLISION_SOUND_ATTR_PUNCH,
61-
/*Type*/ *ATTACK_REGION_NONE,
62-
);
16+
ATTACK( fighter, /*ID*/ 0, /*Part*/ 0, /*Bone*/ Hash40::new("top"), /*Damage*/ 5.0, /*Angle*/ 127, /*KBG*/ 0, /*FKB*/ 0, /*BKB*/ 110, /*Size*/ 5.3, /*X*/ 0.0, /*Y*/ 6.0, /*Z*/ 9.0, /*X2*/ None, /*Y2*/ None, /*Z2*/ None, /*Hitlag*/ 1.0, /*SDI*/ 0.5, /*Clang_Rebound*/ *ATTACK_SETOFF_KIND_THRU, /*FacingRestrict*/ *ATTACK_LR_CHECK_POS, /*SetWeight*/ false, /*ShieldDamage*/ 0, /*Trip*/ 0.0, /*Rehit*/ 0, /*Reflectable*/ false, /*Absorbable*/ false, /*Flinchless*/ false, /*DisableHitlag*/ false, /*Direct_Hitbox*/ true, /*Ground_or_Air*/ *COLLISION_SITUATION_MASK_GA, /*Hitbits*/ *COLLISION_CATEGORY_MASK_ALL, /*CollisionPart*/ *COLLISION_PART_MASK_ALL, /*FriendlyFire*/ false, /*Effect*/ Hash40::new("collision_attr_fire"), /*SFXLevel*/ *ATTACK_SOUND_LEVEL_M, /*SFXType*/ *COLLISION_SOUND_ATTR_PUNCH, /*Type*/ *ATTACK_REGION_NONE);
6317
}
6418
frame(lua_state, 15.0);
6519
if is_excute(fighter) {
@@ -169,46 +123,8 @@ unsafe fn duckhunt_attack_s4_s_game(fighter: &mut L2CAgentBase) {
169123
frame(lua_state, 18.0);
170124
FT_MOTION_RATE_RANGE(fighter, 18.0, 24.0, 4.0);
171125
if is_excute(fighter) {
172-
ATTACK(
173-
fighter,
174-
1,
175-
0,
176-
Hash40::new("top"),
177-
4.0,
178-
45,
179-
100,
180-
70,
181-
0,
182-
7.0,
183-
0.0,
184-
6.0,
185-
18.0,
186-
None,
187-
None,
188-
None,
189-
1.0,
190-
1.0,
191-
*ATTACK_SETOFF_KIND_THRU,
192-
*ATTACK_LR_CHECK_F,
193-
false,
194-
0,
195-
0.0,
196-
0,
197-
false,
198-
false,
199-
false,
200-
false,
201-
true,
202-
*COLLISION_SITUATION_MASK_GA,
203-
*COLLISION_CATEGORY_MASK_ALL,
204-
*COLLISION_PART_MASK_ALL,
205-
false,
206-
Hash40::new("collision_attr_fire"),
207-
*ATTACK_SOUND_LEVEL_M,
208-
*COLLISION_SOUND_ATTR_PUNCH,
209-
*ATTACK_REGION_NONE,
210-
);
211-
}
126+
ATTACK(fighter, 1, 0, Hash40::new("top"), 4.0, 45, 100, 70, 0, 7.0, 0.0, 6.0, 18.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_NONE,);
127+
}
212128
frame(lua_state, 24.0);
213129
FT_MOTION_RATE(fighter, 1.0);
214130
if is_excute(fighter) {

fighters/duckhunt/src/acmd/specials.rs

+78-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
use super::*;
32

43
#[acmd_script( agent = "duckhunt", script = "game_specialhi" , category = ACMD_GAME , low_priority)]
@@ -7,11 +6,79 @@ unsafe fn duckhunt_special_hi_game(fighter: &mut L2CAgentBase) {
76
let boma = fighter.boma();
87
frame(lua_state, 3.0);
98
if is_excute(fighter) {
10-
WorkModule::on_flag(boma, *FIGHTER_DUCKHUNT_INSTANCE_WORK_ID_FLAG_REQUEST_SPECIAL_HI_CANCEL);
9+
WorkModule::set_int( boma, 5, *FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME);
10+
WorkModule::set_int( boma, 6, *FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME);
11+
ATTACK(fighter, 1, 0, Hash40::new("top"), 5.0, 45, 30, 0, 40, 7.0, 0.0, -2.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_NONE,);
12+
}
13+
}
14+
15+
16+
#[acmd_script( agent = "duckhunt", script = "game_specialhi2" , category = ACMD_GAME , low_priority)]
17+
unsafe fn duckhunt_special_hi2_game(fighter: &mut L2CAgentBase) {
18+
let lua_state = fighter.lua_state_agent;
19+
let boma = fighter.boma();
20+
frame(lua_state, 3.0);
21+
if is_excute(fighter) {
22+
WorkModule::set_int( boma, 5, *FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME);
23+
WorkModule::set_int( boma, 6, *FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME);
24+
ATTACK(fighter, 1, 0, Hash40::new("top"), 7.5, 45, 40, 0, 50, 7.0, 0.0, -2.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_NONE,);
25+
}
26+
}
27+
28+
#[acmd_script( agent = "duckhunt", script = "game_specialhi3" , category = ACMD_GAME , low_priority)]
29+
unsafe fn duckhunt_special_hi3_game(fighter: &mut L2CAgentBase) {
30+
let lua_state = fighter.lua_state_agent;
31+
let boma = fighter.boma();
32+
frame(lua_state, 3.0);
33+
if is_excute(fighter) {
34+
WorkModule::set_int( boma, 5, *FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME);
35+
WorkModule::set_int( boma, 6, *FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME);
36+
ATTACK(fighter, 1, 0, Hash40::new("top"), 15.0, 45, 85, 0, 80, 7.0, 0.0, -2.0, 0.0, None, None, None, 1.0, 1.0, *ATTACK_SETOFF_KIND_THRU, *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_fire"), *ATTACK_SOUND_LEVEL_M, *COLLISION_SOUND_ATTR_PUNCH, *ATTACK_REGION_NONE,);
1137
}
12-
1338
}
1439

40+
#[acmd_script( agent = "duckhunt", scripts = ["effect_specialhi", "effect_specialhi2", "effect_specialhi3"] , category = ACMD_EFFECT , low_priority)]
41+
unsafe fn duckhunt_special_hi_effect(agent: &mut L2CAgentBase) {
42+
let lua_state = agent.lua_state_agent;
43+
let boma = agent.boma();
44+
if is_excute(agent) {
45+
EFFECT_FOLLOW_arg11(agent, Hash40::new("duckhunt_feather_long"), Hash40::new("duckrot"), 0, 4, 0, 20, 0, 0, 1, true, *FIGHTER_INSTANCE_WORK_ID_INT_COLOR);
46+
}
47+
}
48+
49+
#[acmd_script( agent = "duckhunt", scripts = ["sound_specialhi", "sound_specialhi2", "sound_specialhi3"] , category = ACMD_SOUND , low_priority)]
50+
unsafe fn duckhunt_special_hi_sound(agent: &mut L2CAgentBase) {
51+
let lua_state = agent.lua_state_agent;
52+
let boma = agent.boma();
53+
frame(lua_state, 1.0);
54+
if is_excute(agent) {
55+
PLAY_SE(agent, Hash40::new("se_duckhunt_special_h02"));
56+
}
57+
frame(lua_state, 5.0);
58+
if is_excute(agent) {
59+
PLAY_SE(agent, Hash40::new("se_duckhunt_special_h03"));
60+
}
61+
}
62+
63+
#[acmd_script( agent = "duckhunt", scripts = ["expression_specialhi", "expression_specialhi2", "expression_specialhi3"] , category = ACMD_EXPRESSION , low_priority)]
64+
unsafe fn duckhunt_special_hi_expression(agent: &mut L2CAgentBase) {
65+
let lua_state = agent.lua_state_agent;
66+
let boma = agent.boma();
67+
if is_excute(agent) {
68+
}
69+
}
70+
71+
72+
#[acmd_script( agent = "duckhunt_reticle", scripts = ["game_specialhi", "game_specialhi2", "game_specialhi3"] , category = ACMD_GAME , low_priority)]
73+
unsafe fn reticle_special_hi_game(agent: &mut L2CAgentBase) {
74+
let lua_state = agent.lua_state_agent;
75+
let boma = agent.boma();
76+
if is_excute(agent) {
77+
WorkModule::set_float(boma, 1.0, *WEAPON_DUCKHUNT_RETICLE_INSTANCE_WORK_ID_FLOAT_SIZE);
78+
}
79+
}
80+
81+
1582
#[acmd_script( agent = "duckhunt" , scripts = ["game_specialairlw", "game_speciallw"], category = ACMD_GAME , low_priority)]
1683
unsafe fn duckhunt_special_lw_game(fighter: &mut L2CAgentBase) {
1784
let lua_state: u64 = fighter.lua_state_agent;
@@ -64,7 +131,15 @@ unsafe fn duckhunt_special_s_game(fighter: &mut L2CAgentBase) {
64131

65132
pub fn install() {
66133
install_acmd_scripts!(
134+
//gumshoe {{{
67135
duckhunt_special_hi_game,
136+
duckhunt_special_hi2_game,
137+
duckhunt_special_hi3_game,
138+
duckhunt_special_hi_effect,
139+
duckhunt_special_hi_sound,
140+
duckhunt_special_hi_expression,
141+
reticle_special_hi_game,
142+
//gumshoe }}}
68143
duckhunt_special_n_game,
69144
duckhunt_special_lw_game,
70145
duckhunt_special_s_game,

romfs/source/fighter/duckhunt/motion/body/motion_patch.yaml

+63
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,69 @@ attack_squat_s3:
6060
intangible_end_frame: 0
6161
cancel_frame: 27
6262
freeze_during_hitstop: false
63+
special_hi:
64+
flags:
65+
loop: false
66+
extra:
67+
cancel_frame: 25
68+
special_hi_2:
69+
game_script: game_specialhi2
70+
flags:
71+
turn: false
72+
loop: false
73+
move: false
74+
fix_trans: false
75+
fix_rot: false
76+
fix_scale: false
77+
unk_40: false
78+
unk_80: true
79+
unk_100: false
80+
unk_200: false
81+
unk_400: false
82+
unk_800: false
83+
unk_1000: false
84+
unk_2000: false
85+
blend_frames: 10
86+
animations:
87+
- name: d02specialhi2.nuanmb
88+
scripts:
89+
- expression_specialhi2
90+
- sound_specialhi2
91+
- effect_specialhi2
92+
extra:
93+
intangible_start_frame: 0
94+
intangible_end_frame: 0
95+
cancel_frame: 0
96+
freeze_during_hitstop: false
97+
special_hi_3:
98+
game_script: game_specialhi3
99+
flags:
100+
turn: false
101+
loop: false
102+
move: false
103+
fix_trans: false
104+
fix_rot: false
105+
fix_scale: false
106+
unk_40: false
107+
unk_80: true
108+
unk_100: false
109+
unk_200: false
110+
unk_400: false
111+
unk_800: false
112+
unk_1000: false
113+
unk_2000: false
114+
blend_frames: 10
115+
animations:
116+
- name: d02specialhi3.nuanmb
117+
scripts:
118+
- expression_specialhi3
119+
- sound_specialhi3
120+
- effect_specialhi3
121+
extra:
122+
intangible_start_frame: 0
123+
intangible_end_frame: 0
124+
cancel_frame: 0
125+
freeze_during_hitstop: false
63126
fall_aerial:
64127
blend_frames: 5
65128
fall_special:

0 commit comments

Comments
 (0)