@@ -89,29 +89,79 @@ unsafe fn nana_attack_hi4_game(fighter: &mut L2CAgentBase) {
89
89
90
90
#[ acmd_script( agent = "nana" , script = "game_attacklw4_nana" , category = ACMD_GAME , low_priority) ]
91
91
unsafe fn nana_attack_lw4_game ( fighter : & mut L2CAgentBase ) {
92
- // TODO: rewrite popo dsmash status to not start_partner_turn
93
92
let lua_state = fighter. lua_state_agent ;
94
93
let boma = fighter. boma ( ) ;
94
+ frame ( lua_state, 1.0 ) ;
95
+ FT_MOTION_RATE_RANGE ( fighter, 1.0 , 5.0 , 3.0 ) ;
95
96
frame ( lua_state, 5.0 ) ;
97
+ FT_MOTION_RATE_RANGE ( fighter, 5.0 , 10.0 , 3.0 ) ;
96
98
if is_excute ( fighter) {
97
99
WorkModule :: on_flag ( boma, * FIGHTER_STATUS_ATTACK_FLAG_START_SMASH_HOLD ) ;
98
100
}
99
-
100
- frame ( lua_state, 8.0 ) ;
101
+ frame ( lua_state, 8.33 ) ; // effectively frame 7
101
102
if is_excute ( fighter) {
102
103
ATTACK ( fighter, 1 , 0 , Hash40 :: new ( "havel" ) , 12.0 , 40 , 110 , 0 , 50 , 3.0 , 0.0 , 3.0 , 0.0 , None , None , None , 1.0 , 1.0 , * ATTACK_SETOFF_KIND_ON , * 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_normal" ) , * ATTACK_SOUND_LEVEL_L , * COLLISION_SOUND_ATTR_PUNCH , * ATTACK_REGION_HAMMER ) ;
103
104
ATTACK ( fighter, 2 , 0 , Hash40 :: new ( "havel" ) , 12.0 , 40 , 110 , 0 , 50 , 3.0 , 0.0 , 7.0 , 0.0 , None , None , None , 1.0 , 1.0 , * ATTACK_SETOFF_KIND_ON , * 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_normal" ) , * ATTACK_SOUND_LEVEL_L , * COLLISION_SOUND_ATTR_PUNCH , * ATTACK_REGION_HAMMER ) ;
104
105
AttackModule :: set_attack_height_all ( boma, app:: AttackHeight ( * ATTACK_HEIGHT_LOW ) , false ) ;
105
106
}
106
- frame ( lua_state, 12.0 ) ;
107
+ frame ( lua_state, 10.0 ) ;
108
+ FT_MOTION_RATE ( fighter, 1.0 ) ;
109
+ frame ( lua_state, 13.0 ) ;
110
+ FT_MOTION_RATE_RANGE ( fighter, 13.0 , 21.0 , 4.0 ) ;
111
+ frame ( lua_state, 21.0 ) ;
112
+ FT_MOTION_RATE ( fighter, 1.0 ) ;
107
113
if is_excute ( fighter) {
108
114
AttackModule :: clear_all ( boma) ;
109
115
}
110
- frame ( lua_state, 45.0 ) ;
116
+ }
117
+
118
+ #[ acmd_script( agent = "nana" , script = "effect_attacklw4_nana" , category = ACMD_EFFECT , low_priority) ]
119
+ unsafe fn effect_attacklw4 ( fighter : & mut L2CAgentBase ) {
120
+ let lua_state = fighter. lua_state_agent ;
121
+ let boma = fighter. boma ( ) ;
122
+ frame ( lua_state, 4.0 ) ;
123
+ if is_excute ( fighter) {
124
+ EFFECT ( fighter, Hash40 :: new ( "sys_smash_flash" ) , Hash40 :: new ( "top" ) , 6 , 7 , -10 , 0 , 0 , 0 , 0.8 , 0 , 0 , 0 , 0 , 0 , 0 , true ) ;
125
+ }
126
+ frame ( lua_state, 10.0 ) ;
111
127
if is_excute ( fighter) {
112
- StatusModule :: change_status_request_from_script ( boma, * FIGHTER_STATUS_KIND_WAIT , false ) ;
128
+ LANDING_EFFECT ( fighter, Hash40 :: new ( "sys_atk_smoke" ) , Hash40 :: new ( "top" ) , 5 , 0 , 0 , 0 , 0 , 0 , 0.5 , 0 , 0 , 0 , 0 , 0 , 0 , false ) ;
129
+ }
130
+ frame ( lua_state, 10.0 ) ;
131
+ if is_excute ( fighter) {
132
+ EFFECT_FOLLOW_FLIP ( fighter, Hash40 :: new ( "popo_smash_arc_b" ) , Hash40 :: new ( "popo_smash_arc_b" ) , Hash40 :: new ( "top" ) , 1.5 , 2.5 , 1 , 184.5 , -3 , -3 , 1.1 , true , * EF_FLIP_YZ ) ;
133
+ LAST_EFFECT_SET_RATE ( fighter, 1.5 ) ;
134
+ }
135
+ }
136
+
137
+ #[ acmd_script( agent = "nana" , script = "expression_attacklw4_nana" , category = ACMD_EXPRESSION , low_priority ) ]
138
+ unsafe fn nana_attack_lw4_expression ( fighter : & mut L2CAgentBase ) {
139
+ let lua_state = fighter. lua_state_agent ;
140
+ let boma = fighter. boma ( ) ;
141
+ if is_excute ( fighter) {
142
+ slope ! ( fighter, * MA_MSC_CMD_SLOPE_SLOPE , * SLOPE_STATUS_L ) ;
143
+ }
144
+ frame ( lua_state, 6.0 ) ;
145
+ if is_excute ( fighter) {
146
+ slope ! ( fighter, * MA_MSC_CMD_SLOPE_SLOPE_INTP , * SLOPE_STATUS_TOP , 2 ) ;
147
+ ControlModule :: set_rumble ( boma, Hash40 :: new ( "rbkind_nohitl" ) , 0 , false , * BATTLE_OBJECT_ID_INVALID as u32 ) ;
148
+ }
149
+ frame ( lua_state, 8.0 ) ;
150
+ if is_excute ( fighter) {
151
+ macros:: RUMBLE_HIT ( fighter, Hash40 :: new ( "rbkind_attackl" ) , 0 ) ;
152
+ }
153
+ frame ( lua_state, 15.0 ) ;
154
+ if is_excute ( fighter) {
155
+ slope ! ( fighter, * MA_MSC_CMD_SLOPE_SLOPE_INTP , * SLOPE_STATUS_TOP , 8 , true ) ;
156
+ }
157
+ frame ( lua_state, 40.0 ) ;
158
+ if is_excute ( fighter) {
159
+ slope ! ( fighter, * MA_MSC_CMD_SLOPE_SLOPE_INTP , * SLOPE_STATUS_L , 4 ) ;
160
+ }
161
+ frame ( lua_state, 44.0 ) ;
162
+ if is_excute ( fighter) {
163
+ WorkModule :: on_flag ( boma, * FIGHTER_POPO_STATUS_ATTACK_LW4_FLAG_NANA_START_TURN ) ;
113
164
}
114
-
115
165
}
116
166
117
167
pub fn install ( ) {
@@ -120,6 +170,8 @@ pub fn install() {
120
170
nana_attack_s4_s_effect,
121
171
nana_attack_hi4_game,
122
172
nana_attack_lw4_game,
173
+ effect_attacklw4,
174
+ nana_attack_lw4_expression
123
175
) ;
124
176
}
125
177
0 commit comments