@@ -13,52 +13,39 @@ unsafe fn duckhunt_attack_hi4_game(fighter: &mut L2CAgentBase) {
13
13
WorkModule :: set_int ( boma, 5 , * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME ) ;
14
14
WorkModule :: set_int ( boma, 6 , * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME ) ;
15
15
FT_MOTION_RATE_RANGE ( fighter, 17.0 , 57.0 , 28.0 ) ;
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 ) ;
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 ) ;
17
17
}
18
18
frame ( lua_state, 15.0 ) ;
19
19
if is_excute ( fighter) {
20
- ATTACK (
21
- fighter,
22
- /*ID*/ 1 ,
23
- /*Part*/ 0 ,
24
- /*Bone*/ Hash40 :: new ( "top" ) ,
25
- /*Damage*/ 11.5 ,
26
- /*Angle*/ 85 ,
27
- /*KBG*/ 120 ,
28
- /*FKB*/ 0 ,
29
- /*BKB*/ 50 ,
30
- /*Size*/ 9.3 ,
31
- /*X*/ 0.0 ,
32
- /*Y*/ 16.0 ,
33
- /*Z*/ 0.0 ,
34
- /*X2*/ None ,
35
- /*Y2*/ None ,
36
- /*Z2*/ None ,
37
- /*Hitlag*/ 1.0 ,
38
- /*SDI*/ 1.0 ,
39
- /*Clang_Rebound*/ * ATTACK_SETOFF_KIND_THRU ,
40
- /*FacingRestrict*/ * ATTACK_LR_CHECK_POS ,
41
- /*SetWeight*/ false ,
42
- /*ShieldDamage*/ 0 ,
43
- /*Trip*/ 0.0 ,
44
- /*Rehit*/ 0 ,
45
- /*Reflectable*/ false ,
46
- /*Absorbable*/ false ,
47
- /*Flinchless*/ false ,
48
- /*DisableHitlag*/ false ,
49
- /*Direct_Hitbox*/ true ,
50
- /*Ground_or_Air*/ * COLLISION_SITUATION_MASK_GA ,
51
- /*Hitbits*/ * COLLISION_CATEGORY_MASK_ALL ,
52
- /*CollisionPart*/ * COLLISION_PART_MASK_ALL ,
53
- /*FriendlyFire*/ false ,
54
- /*Effect*/ Hash40 :: new ( "collision_attr_fire" ) ,
55
- /*SFXLevel*/ * ATTACK_SOUND_LEVEL_L ,
56
- /*SFXType*/ * COLLISION_SOUND_ATTR_KICK ,
57
- /*Type*/ * ATTACK_REGION_NONE ,
20
+ ATTACK ( fighter, /*ID*/ 1 , /*Part*/ 0 , /*Bone*/ Hash40 :: new ( "top" ) , /*Damage*/ 11.5 , /*Angle*/ 85 , /*KBG*/ 120 , /*FKB*/ 0 , /*BKB*/ 50 , /*Size*/ 9.3 , /*X*/ 0.0 , /*Y*/ 16.0 , /*Z*/ 0.0 , /*X2*/ None , /*Y2*/ None , /*Z2*/ None , /*Hitlag*/ 1.0 , /*SDI*/ 1.0 , /*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_L , /*SFXType*/ * COLLISION_SOUND_ATTR_KICK , /*Type*/ * ATTACK_REGION_NONE ,
58
21
) ;
59
22
}
60
23
}
61
24
25
+ #[ acmd_script( agent = "duckhunt" , script = "sound_attackhi4" , category = ACMD_SOUND , low_priority) ]
26
+ unsafe fn duckhunt_attackhi4_sound ( agent : & mut L2CAgentBase ) {
27
+ let lua_state = agent. lua_state_agent ;
28
+ let boma = agent. boma ( ) ;
29
+ frame ( lua_state, 7.0 ) ;
30
+ if is_excute ( agent) {
31
+ STOP_SE ( agent, Hash40 :: new ( "se_common_smash_start" ) ) ;
32
+ }
33
+ frame ( lua_state, 12.0 ) ;
34
+ if is_excute ( agent) {
35
+ PLAY_SE ( agent, Hash40 :: new ( "se_duckhunt_smash_h01" ) ) ;
36
+ PLAY_SE ( agent, Hash40 :: new ( "se_duckhunt_special_l03" ) ) ;
37
+ }
38
+ frame ( lua_state, 20.0 ) ;
39
+ if is_excute ( agent) {
40
+ PLAY_SE ( agent, Hash40 :: new ( "se_duckhunt_smash_h02" ) ) ;
41
+ PLAY_SE ( agent, Hash40 :: new ( "se_duckhunt_special_l03" ) ) ;
42
+ }
43
+ frame ( lua_state, 22.0 ) ;
44
+ if is_excute ( agent) {
45
+ PLAY_SEQUENCE ( agent, Hash40 :: new ( "seq_duckhunt_rnd_attack_dog" ) ) ;
46
+ }
47
+ }
48
+
62
49
#[ acmd_script( agent = "duckhunt" , script = "game_attacks4" , category = ACMD_GAME , low_priority) ]
63
50
unsafe fn duckhunt_attack_s4_s_game ( fighter : & mut L2CAgentBase ) {
64
51
let lua_state = fighter. lua_state_agent ;
@@ -70,103 +57,19 @@ unsafe fn duckhunt_attack_s4_s_game(fighter: &mut L2CAgentBase) {
70
57
frame ( lua_state, 12.0 ) ;
71
58
FT_MOTION_RATE_RANGE ( fighter, 12.0 , 18.0 , 4.0 ) ;
72
59
if is_excute ( fighter) {
73
- WorkModule :: set_int (
74
- boma,
75
- 5 ,
76
- * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME ,
77
- ) ;
78
- WorkModule :: set_int (
79
- boma,
80
- 6 ,
81
- * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME ,
82
- ) ;
83
- ATTACK (
84
- fighter,
85
- 0 ,
86
- 0 ,
87
- Hash40 :: new ( "top" ) ,
88
- 4.0 ,
89
- 45 ,
90
- 100 ,
91
- 66 ,
92
- 0 ,
93
- 6.0 ,
94
- 0.0 ,
95
- 6.0 ,
96
- 10.0 ,
97
- None ,
98
- None ,
99
- None ,
100
- 1.0 ,
101
- 1.0 ,
102
- * ATTACK_SETOFF_KIND_THRU ,
103
- * ATTACK_LR_CHECK_F ,
104
- false ,
105
- 0 ,
106
- 0.0 ,
107
- 0 ,
108
- false ,
109
- false ,
110
- false ,
111
- false ,
112
- true ,
113
- * COLLISION_SITUATION_MASK_GA ,
114
- * COLLISION_CATEGORY_MASK_ALL ,
115
- * COLLISION_PART_MASK_ALL ,
116
- false ,
117
- Hash40 :: new ( "collision_attr_fire" ) ,
118
- * ATTACK_SOUND_LEVEL_M ,
119
- * COLLISION_SOUND_ATTR_PUNCH ,
120
- * ATTACK_REGION_NONE ,
121
- ) ;
60
+ WorkModule :: set_int ( boma, 5 , * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME ) ;
61
+ WorkModule :: set_int ( boma, 6 , * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME ) ;
62
+ ATTACK ( fighter, 0 , 0 , Hash40 :: new ( "top" ) , 4.0 , 45 , 100 , 66 , 0 , 6.0 , 0.0 , 6.0 , 10.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 ) ;
122
63
}
123
64
frame ( lua_state, 18.0 ) ;
124
65
FT_MOTION_RATE_RANGE ( fighter, 18.0 , 24.0 , 4.0 ) ;
125
66
if is_excute ( fighter) {
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 , ) ;
67
+ 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
68
}
128
69
frame ( lua_state, 24.0 ) ;
129
70
FT_MOTION_RATE ( fighter, 1.0 ) ;
130
71
if is_excute ( fighter) {
131
- ATTACK (
132
- fighter,
133
- 2 ,
134
- 0 ,
135
- Hash40 :: new ( "top" ) ,
136
- 9.0 ,
137
- 361 ,
138
- 131 ,
139
- 0 ,
140
- 50 ,
141
- 9.0 ,
142
- 0.0 ,
143
- 6.0 ,
144
- 26.0 ,
145
- None ,
146
- None ,
147
- None ,
148
- 1.0 ,
149
- 1.0 ,
150
- * ATTACK_SETOFF_KIND_THRU ,
151
- * ATTACK_LR_CHECK_F ,
152
- false ,
153
- 0 ,
154
- 0.0 ,
155
- 0 ,
156
- false ,
157
- false ,
158
- false ,
159
- false ,
160
- true ,
161
- * COLLISION_SITUATION_MASK_GA ,
162
- * COLLISION_CATEGORY_MASK_ALL ,
163
- * COLLISION_PART_MASK_ALL ,
164
- false ,
165
- Hash40 :: new ( "collision_attr_fire" ) ,
166
- * ATTACK_SOUND_LEVEL_L ,
167
- * COLLISION_SOUND_ATTR_KICK ,
168
- * ATTACK_REGION_NONE ,
169
- ) ;
72
+ ATTACK ( fighter, 2 , 0 , Hash40 :: new ( "top" ) , 9.0 , 361 , 131 , 0 , 50 , 9.0 , 0.0 , 6.0 , 26.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_L , * COLLISION_SOUND_ATTR_KICK , * ATTACK_REGION_NONE ) ;
170
73
}
171
74
}
172
75
@@ -181,105 +84,46 @@ unsafe fn duckhunt_attack_lw4_game(fighter: &mut L2CAgentBase) {
181
84
frame ( lua_state, 8.0 ) ;
182
85
FT_MOTION_RATE_RANGE ( fighter, 21.0 , 57.0 , 24.0 ) ;
183
86
if is_excute ( fighter) {
184
- WorkModule :: set_int (
185
- boma,
186
- 5 ,
187
- * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME ,
188
- ) ;
189
- WorkModule :: set_int (
190
- boma,
191
- 6 ,
192
- * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME ,
193
- ) ;
194
- ATTACK (
195
- fighter,
196
- 0 ,
197
- 0 ,
198
- Hash40 :: new ( "top" ) ,
199
- 5.0 ,
200
- 170 ,
201
- 0 ,
202
- 0 ,
203
- 120 ,
204
- 6.0 ,
205
- 0.0 ,
206
- 4.0 ,
207
- 10.0 ,
208
- None ,
209
- None ,
210
- None ,
211
- 1.0 ,
212
- 1.0 ,
213
- * ATTACK_SETOFF_KIND_THRU ,
214
- * ATTACK_LR_CHECK_POS ,
215
- false ,
216
- 0 ,
217
- 0.0 ,
218
- 0 ,
219
- false ,
220
- false ,
221
- false ,
222
- false ,
223
- true ,
224
- * COLLISION_SITUATION_MASK_GA ,
225
- * COLLISION_CATEGORY_MASK_ALL ,
226
- * COLLISION_PART_MASK_ALL ,
227
- false ,
228
- Hash40 :: new ( "collision_attr_fire" ) ,
229
- * ATTACK_SOUND_LEVEL_M ,
230
- * COLLISION_SOUND_ATTR_PUNCH ,
231
- * ATTACK_REGION_NONE ,
232
- ) ;
87
+ WorkModule :: set_int ( boma, 5 , * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_DELAY_FRAME ) ;
88
+ WorkModule :: set_int ( boma, 6 , * FIGHTER_DUCKHUNT_STATUS_ATTACK_INT_SMASH_RETICLE_DISPLAY_FRAME ) ;
89
+ ATTACK ( fighter, 0 , 0 , Hash40 :: new ( "top" ) , 5.0 , 170 , 0 , 0 , 120 , 6.0 , 0.0 , 4.0 , 10.0 , None , None , None , 1.0 , 1.0 , * ATTACK_SETOFF_KIND_THRU , * 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_fire" ) , * ATTACK_SOUND_LEVEL_M , * COLLISION_SOUND_ATTR_PUNCH , * ATTACK_REGION_NONE ) ;
233
90
}
234
91
frame ( lua_state, 16.0 ) ;
235
92
if is_excute ( fighter) {
236
- ATTACK (
237
- fighter,
238
- 1 ,
239
- 0 ,
240
- Hash40 :: new ( "top" ) ,
241
- 5.0 ,
242
- 35 ,
243
- 70 ,
244
- 0 ,
245
- 70 ,
246
- 7.0 ,
247
- 0.0 ,
248
- 8.0 ,
249
- -10.0 ,
250
- None ,
251
- None ,
252
- None ,
253
- 1.0 ,
254
- 1.0 ,
255
- * ATTACK_SETOFF_KIND_THRU ,
256
- * ATTACK_LR_CHECK_F ,
257
- false ,
258
- 0 ,
259
- 0.0 ,
260
- 0 ,
261
- false ,
262
- false ,
263
- false ,
264
- false ,
265
- true ,
266
- * COLLISION_SITUATION_MASK_GA ,
267
- * COLLISION_CATEGORY_MASK_ALL ,
268
- * COLLISION_PART_MASK_ALL ,
269
- false ,
270
- Hash40 :: new ( "collision_attr_fire" ) ,
271
- * ATTACK_SOUND_LEVEL_M ,
272
- * COLLISION_SOUND_ATTR_PUNCH ,
273
- * ATTACK_REGION_NONE ,
274
- ) ;
93
+ ATTACK ( fighter, 1 , 0 , Hash40 :: new ( "top" ) , 5.0 , 35 , 70 , 0 , 70 , 7.0 , 0.0 , 8.0 , -10.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 ) ;
94
+ }
95
+ }
96
+
97
+ #[ acmd_script( agent = "duckhunt" , script = "sound_attacklw4" , category = ACMD_SOUND , low_priority) ]
98
+ unsafe fn duckhunt_attacklw4_sound ( agent : & mut L2CAgentBase ) {
99
+ let lua_state = agent. lua_state_agent ;
100
+ let boma = agent. boma ( ) ;
101
+ frame ( lua_state, 4.0 ) ;
102
+ if is_excute ( agent) {
103
+ STOP_SE ( agent, Hash40 :: new ( "se_common_smash_start" ) ) ;
104
+ }
105
+ frame ( lua_state, 7.0 ) ;
106
+ if is_excute ( agent) {
107
+ PLAY_SE ( agent, Hash40 :: new ( "se_duckhunt_smash_l01" ) ) ;
108
+ }
109
+ frame ( lua_state, 12.0 ) ;
110
+ if is_excute ( agent) {
111
+ PLAY_SE ( agent, Hash40 :: new ( "se_duckhunt_smash_l02" ) ) ;
112
+ PLAY_SE ( agent, Hash40 :: new ( "se_duckhunt_special_l03" ) ) ;
113
+ }
114
+ frame ( lua_state, 14.0 ) ;
115
+ if is_excute ( agent) {
116
+ PLAY_SEQUENCE ( agent, Hash40 :: new ( "seq_duckhunt_rnd_attack_dog" ) ) ;
275
117
}
276
118
}
277
119
278
120
279
121
pub fn install ( ) {
280
122
install_acmd_scripts ! (
281
123
duckhunt_attack_hi4_game,
124
+ duckhunt_attackhi4_sound,
282
125
duckhunt_attack_s4_s_game,
283
126
duckhunt_attack_lw4_game,
127
+ duckhunt_attack_lw4_sound
284
128
) ;
285
129
}
0 commit comments