Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
whirlwind.c File Reference

Go to the source code of this file.

Macros

#define HUFF_FILL_TICK   500
 
#define BUZZAR_FILL_TICK   600
 
#define GET_DRAIN_RATE_HUFF(pct)   (N(DrainRateTable0)[((pct) / (ONE_PCT_MASH / 5))])
 
#define GET_DRAIN_RATE_BUZZAR(pct)   (N(DrainRateTable1)[((pct) / (ONE_PCT_MASH / 10))])
 

Enumerations

enum  { HIDX_BUTTON = 0 , HIDX_METER = 1 , HIDX_DIGIT = 2 , HIDX_BUBBLE = 3 }
 

Functions

 INCLUDE_IMG ("battle/action_cmd/whirlwind_1.png", battle_action_cmd_whirlwind_1_png)
 
 INCLUDE_PAL ("battle/action_cmd/whirlwind_1.pal", battle_action_cmd_whirlwind_1_pal)
 
 INCLUDE_IMG ("battle/action_cmd/whirlwind_2.png", battle_action_cmd_whirlwind_2_png)
 
 INCLUDE_PAL ("battle/action_cmd/whirlwind_2.pal", battle_action_cmd_whirlwind_2_pal)
 
 INCLUDE_IMG ("battle/action_cmd/whirlwind_3.png", battle_action_cmd_whirlwind_3_png)
 
 INCLUDE_PAL ("battle/action_cmd/whirlwind_3.pal", battle_action_cmd_whirlwind_3_pal)
 
 INCLUDE_IMG ("battle/action_cmd/whirlwind_4.png", battle_action_cmd_whirlwind_4_png)
 
 INCLUDE_PAL ("battle/action_cmd/whirlwind_4.pal", battle_action_cmd_whirlwind_4_pal)
 
 INCLUDE_IMG ("battle/action_cmd/whirlwind_5.png", battle_action_cmd_whirlwind_5_png)
 
 INCLUDE_PAL ("battle/action_cmd/whirlwind_5.pal", battle_action_cmd_whirlwind_5_pal)
 
 INCLUDE_IMG ("battle/action_cmd/whirlwind_6.png", battle_action_cmd_whirlwind_6_png)
 
 INCLUDE_PAL ("battle/action_cmd/whirlwind_6.pal", battle_action_cmd_whirlwind_6_pal)
 
 INCLUDE_IMG ("battle/action_cmd/whirlwind_7.png", battle_action_cmd_whirlwind_7_png)
 
 INCLUDE_PAL ("battle/action_cmd/whirlwind_7.pal", battle_action_cmd_whirlwind_7_pal)
 
 INCLUDE_IMG ("battle/action_cmd/whirlwind_bubble.png", battle_action_cmd_whirlwind_bubble_png)
 
 INCLUDE_PAL ("battle/action_cmd/whirlwind_bubble.pal", battle_action_cmd_whirlwind_bubble_pal)
 
void N update (void)
 
void N draw (void)
 
void N free (void)
 

Variables

s32 actionCmdTableWhirlwind []
 
HudScript HES_Whirlwind1 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_1, 24, 24)
 
HudScript HES_Whirlwind2 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_2, 24, 24)
 
HudScript HES_Whirlwind3 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_3, 24, 24)
 
HudScript HES_Whirlwind4 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_4, 24, 24)
 
HudScript HES_Whirlwind5 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_5, 24, 24)
 
HudScript HES_Whirlwind6 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_6, 24, 24)
 
HudScript HES_Whirlwind7 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_7, 24, 24)
 
HudScript HES_WhirlwindBubble
 

Macro Definition Documentation

◆ HUFF_FILL_TICK

#define HUFF_FILL_TICK   500

Definition at line 19 of file whirlwind.c.

Referenced by update().

◆ BUZZAR_FILL_TICK

#define BUZZAR_FILL_TICK   600

Definition at line 20 of file whirlwind.c.

Referenced by update().

◆ GET_DRAIN_RATE_HUFF

#define GET_DRAIN_RATE_HUFF ( pct)    (N(DrainRateTable0)[((pct) / (ONE_PCT_MASH / 5))])

Definition at line 61 of file whirlwind.c.

Referenced by update().

◆ GET_DRAIN_RATE_BUZZAR

#define GET_DRAIN_RATE_BUZZAR ( pct)    (N(DrainRateTable1)[((pct) / (ONE_PCT_MASH / 10))])

Definition at line 62 of file whirlwind.c.

Referenced by update().

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
HIDX_BUTTON 
HIDX_METER 
HIDX_DIGIT 
HIDX_BUBBLE 

Definition at line 11 of file whirlwind.c.

11 {
12 HIDX_BUTTON = 0,
13 HIDX_METER = 1,
14 HIDX_DIGIT = 2,
15 HIDX_BUBBLE = 3,
16};
@ HIDX_METER
Definition whirlwind.c:13
@ HIDX_BUTTON
Definition whirlwind.c:12
@ HIDX_BUBBLE
Definition whirlwind.c:15
@ HIDX_DIGIT
Definition whirlwind.c:14

Function Documentation

◆ INCLUDE_IMG() [1/8]

INCLUDE_IMG ( "battle/action_cmd/whirlwind_1.png" ,
battle_action_cmd_whirlwind_1_png  )

◆ INCLUDE_PAL() [1/8]

INCLUDE_PAL ( "battle/action_cmd/whirlwind_1.pal" ,
battle_action_cmd_whirlwind_1_pal  )

◆ INCLUDE_IMG() [2/8]

INCLUDE_IMG ( "battle/action_cmd/whirlwind_2.png" ,
battle_action_cmd_whirlwind_2_png  )

◆ INCLUDE_PAL() [2/8]

INCLUDE_PAL ( "battle/action_cmd/whirlwind_2.pal" ,
battle_action_cmd_whirlwind_2_pal  )

◆ INCLUDE_IMG() [3/8]

INCLUDE_IMG ( "battle/action_cmd/whirlwind_3.png" ,
battle_action_cmd_whirlwind_3_png  )

◆ INCLUDE_PAL() [3/8]

INCLUDE_PAL ( "battle/action_cmd/whirlwind_3.pal" ,
battle_action_cmd_whirlwind_3_pal  )

◆ INCLUDE_IMG() [4/8]

INCLUDE_IMG ( "battle/action_cmd/whirlwind_4.png" ,
battle_action_cmd_whirlwind_4_png  )

◆ INCLUDE_PAL() [4/8]

INCLUDE_PAL ( "battle/action_cmd/whirlwind_4.pal" ,
battle_action_cmd_whirlwind_4_pal  )

◆ INCLUDE_IMG() [5/8]

INCLUDE_IMG ( "battle/action_cmd/whirlwind_5.png" ,
battle_action_cmd_whirlwind_5_png  )

◆ INCLUDE_PAL() [5/8]

INCLUDE_PAL ( "battle/action_cmd/whirlwind_5.pal" ,
battle_action_cmd_whirlwind_5_pal  )

◆ INCLUDE_IMG() [6/8]

INCLUDE_IMG ( "battle/action_cmd/whirlwind_6.png" ,
battle_action_cmd_whirlwind_6_png  )

◆ INCLUDE_PAL() [6/8]

INCLUDE_PAL ( "battle/action_cmd/whirlwind_6.pal" ,
battle_action_cmd_whirlwind_6_pal  )

◆ INCLUDE_IMG() [7/8]

INCLUDE_IMG ( "battle/action_cmd/whirlwind_7.png" ,
battle_action_cmd_whirlwind_7_png  )

◆ INCLUDE_PAL() [7/8]

INCLUDE_PAL ( "battle/action_cmd/whirlwind_7.pal" ,
battle_action_cmd_whirlwind_7_pal  )

◆ INCLUDE_IMG() [8/8]

INCLUDE_IMG ( "battle/action_cmd/whirlwind_bubble.png" ,
battle_action_cmd_whirlwind_bubble_png  )

◆ INCLUDE_PAL() [8/8]

INCLUDE_PAL ( "battle/action_cmd/whirlwind_bubble.pal" ,
battle_action_cmd_whirlwind_bubble_pal  )

◆ update()

void N update ( void )

Definition at line 162 of file whirlwind.c.

162 {
164 BattleStatus* battleStatus = &gBattleStatus;
165 HudElemID hid;
166 s32 cutoff;
167 s32 fillPct;
168 s32 amt;
169
170 switch (acs->state) {
171 case AC_STATE_INIT:
173
174 hid = acs->hudElemIDs[HIDX_BUTTON];
175 if (acs->showHud) {
177 }
178 hud_element_set_alpha(hid, 255);
179
180 hid = acs->hudElemIDs[HIDX_METER];
181 hud_element_set_alpha(hid, 255);
182 if (acs->showHud) {
184 }
185
186 hid = acs->hudElemIDs[HIDX_DIGIT];
187 hud_element_set_alpha(hid, 255);
188 if (acs->showHud) {
190 }
191
192 hid = acs->hudElemIDs[HIDX_BUBBLE];
193 hud_element_set_alpha(hid, 255);
194 if (acs->showHud) {
196 }
197
198 acs->state = AC_STATE_APPEAR;
199 break;
200 case AC_STATE_APPEAR:
202 acs->hudPosX += 20;
203 if (acs->hudPosX > 50) {
204 acs->hudPosX = 50;
205 }
210 break;
211 case AC_STATE_START:
213 if (acs->prepareTime != 0) {
214 acs->prepareTime--;
215 return;
216 }
218 acs->meterFillLevel = 0;
219 acs->state = AC_STATE_ACTIVE;
220 acs->stateTimer = acs->duration;
221
222 // fallthrough
223 case AC_STATE_ACTIVE:
225
226 // apply meter draining every frame
227 cutoff = acs->mashMeterCutoffs[acs->mashMeterNumIntervals];
228 fillPct = acs->meterFillLevel / cutoff;
229 if (acs->variation == ACV_WHIRLWIND_HUFF) {
230 amt = GET_DRAIN_RATE_HUFF(fillPct);
231 } else {
232 amt = GET_DRAIN_RATE_BUZZAR(fillPct);
233 }
234 acs->meterFillLevel -= amt;
235
236 if (acs->meterFillLevel < 0) {
237 acs->meterFillLevel = 0;
238 }
239
240 // check for meter-filling input
241 if (!acs->berserkerEnabled) {
242 if (battleStatus->curButtonsPressed & BUTTON_A) {
243 if (acs->variation == ACV_WHIRLWIND_HUFF) {
245 } else {
247 }
248 acs->meterFillLevel += amt;
249 }
250 } else {
251 acs->meterFillLevel += SCALE_BY_PCT(25, battleStatus->actionCmdDifficultyTable[acs->difficulty]);
253 }
254
255 // cap meter to maximum fill level
256 if (acs->meterFillLevel > cutoff * 100) {
257 acs->meterFillLevel = cutoff * 100;
258 }
259
260 if (acs->variation == ACV_WHIRLWIND_HUFF) {
261 battleStatus->actionProgress = (acs->meterFillLevel / ONE_PCT_MASH) / 20;
262 } else {
263 battleStatus->actionProgress = N(BuzzarQuality)[(acs->meterFillLevel / ONE_PCT_MASH) / 10];
264 }
265
266 if (acs->stateTimer != 0) {
267 acs->stateTimer--;
268 return;
269 }
270 battleStatus->actionResult = ACTION_RESULT_NONE;
271 battleStatus->actionQuality = battleStatus->actionProgress;
273 acs->stateTimer = 5;
274 acs->state = AC_STATE_DISPOSE;
275 break;
276 case AC_STATE_DISPOSE:
277 if (acs->stateTimer != 0) {
278 acs->stateTimer--;
279 return;
280 }
282 break;
283 }
284}
BSS ActionCommandStatus gActionCommandStatus
Definition action_cmd.c:91
void action_command_free(void)
Definition action_cmd.c:446
HudElemID hudElemIDs[16]
Definition action_cmd.h:83
@ AC_STATE_APPEAR
Definition action_cmd.h:35
@ AC_STATE_DISPOSE
Definition action_cmd.h:38
@ AC_STATE_INIT
Definition action_cmd.h:34
@ AC_STATE_ACTIVE
Definition action_cmd.h:37
@ AC_STATE_START
Definition action_cmd.h:36
#define ONE_PCT_MASH
Definition action_cmd.h:69
#define SCALE_BY_PCT(x, pct)
Definition action_cmd.h:77
HudScript HES_MashAButton
#define GET_DRAIN_RATE_HUFF(pct)
Definition whirlwind.c:61
#define BUZZAR_FILL_TICK
Definition whirlwind.c:20
#define GET_DRAIN_RATE_BUZZAR(pct)
Definition whirlwind.c:62
#define HUFF_FILL_TICK
Definition whirlwind.c:19
s32 HudElemID
#define rand_int
@ BUTTON_A
Definition enums.h:2790
@ ACTION_RESULT_NONE
Definition enums.h:1963
void btl_set_popup_duration(s32 duration)
void hud_element_set_alpha(s32 id, s32 opacity)
void hud_element_set_script(s32 id, HudScript *anim)
void hud_element_set_render_pos(s32 id, s32 x, s32 y)
void hud_element_clear_flags(s32 id, s32 flags)
Turns off the given flags.
@ HUD_ELEMENT_FLAG_DISABLED
Definition hud_element.h:72
#define POPUP_MSG_OFF
Definition battle.h:270
#define POPUP_MSG_ON
Definition battle.h:269
s32 * actionCmdDifficultyTable
BattleStatus gBattleStatus
Definition battle.c:11
@ ACV_WHIRLWIND_HUFF
Definition whirlwind.h:17

◆ draw()

void N draw ( void )

Definition at line 286 of file whirlwind.c.

286 {
288 BattleStatus* battleStatus = &gBattleStatus;
289 s32 hudX, hudY;
290 HudElemID hid;
291
292 if (!acs->berserkerEnabled) {
294 }
295 hid = acs->hudElemIDs[HIDX_METER];
297 hud_element_get_render_pos(hid, &hudX, &hudY);
298
301
302 hid = acs->hudElemIDs[HIDX_DIGIT];
303 if (acs->variation == ACV_WHIRLWIND_HUFF) {
304 if (N(HuffDigits)[battleStatus->actionProgress] != hud_element_get_script(hid)) {
305 hud_element_set_script(hid, N(HuffDigits)[battleStatus->actionProgress]);
306 }
307 } else {
308 if (N(BuzzarDigits)[battleStatus->actionProgress] != hud_element_get_script(hid)) {
309 hud_element_set_script(hid, N(BuzzarDigits)[battleStatus->actionProgress]);
310 }
311 }
313}
void draw_mash_meter_multicolor_with_divisor(s32 posX, s32 posY, s32 fillValue, s32 divisor)
Definition action_cmd.c:231
void hud_element_get_render_pos(s32 id, s32 *x, s32 *y)
HudScript * hud_element_get_script(s32 id)
void hud_element_draw_clipped(s32 id)

◆ free()

Variable Documentation

◆ actionCmdTableWhirlwind

s32 actionCmdTableWhirlwind[]
extern

Definition at line 32 of file action_cmd.c.

32{ 130, 120, 110, 100, 90, 80, 70, 60 };

◆ HES_Whirlwind1

HudScript HES_Whirlwind1 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_1, 24, 24)

Definition at line 46 of file whirlwind.c.

◆ HES_Whirlwind2

HudScript HES_Whirlwind2 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_2, 24, 24)

Definition at line 47 of file whirlwind.c.

◆ HES_Whirlwind3

HudScript HES_Whirlwind3 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_3, 24, 24)

Definition at line 48 of file whirlwind.c.

◆ HES_Whirlwind4

HudScript HES_Whirlwind4 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_4, 24, 24)

Definition at line 49 of file whirlwind.c.

◆ HES_Whirlwind5

HudScript HES_Whirlwind5 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_5, 24, 24)

Definition at line 50 of file whirlwind.c.

◆ HES_Whirlwind6

HudScript HES_Whirlwind6 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_6, 24, 24)

Definition at line 51 of file whirlwind.c.

◆ HES_Whirlwind7

HudScript HES_Whirlwind7 = HES_TEMPLATE_CI_ENUM_SIZE(battle_action_cmd_whirlwind_7, 24, 24)

Definition at line 52 of file whirlwind.c.

◆ HES_WhirlwindBubble

HudScript HES_WhirlwindBubble
Initial value:
= HES_TEMPLATE_CI_CUSTOM_SIZE(battle_action_cmd_whirlwind_bubble,
battle_action_cmd_whirlwind_bubble_png_width, battle_action_cmd_whirlwind_bubble_png_height)
#define HES_TEMPLATE_CI_CUSTOM_SIZE(name, sizeX, sizeY)
Basic HudScript used for static CI images, setting size with hs_SetCustomSize.

Definition at line 54 of file whirlwind.c.