Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
pause_stats.c
Go to the documentation of this file.
1#include "pause_common.h"
2
3void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening);
4void pause_stats_init(MenuPanel* panel);
7
8static s32 gPauseStatsIconIDs[12];
9
10#if VERSION_IQUE
11#define NUMBER_OFFSET_Y 2
12#define ROW_1_Y 48
13#define ROW_2_Y 49
14#define ROW_3_Y 83
15#define ROW_4_Y 116
16#define COL_A_X 17
17#define COL_B_X 80
18#define COL_C_X 110
19#define POS_1_X 60
20#define POS_2_X 100
21#else
22#define NUMBER_OFFSET_Y 0
23#define ROW_1_Y 51
24#define ROW_2_Y 51
25#define ROW_3_Y 85
26#define ROW_4_Y 119
27#define COL_A_X 25
28#define COL_B_X 78
29#define COL_C_X 105
30#define POS_1_X 67
31#define POS_2_X 106
32#endif
33
34// Probably only used here, but could theoretically be used in the main menu too
35typedef struct {
39} StatsEntryData; // size = 0xC
40
41enum {
54};
55
70
71#if VERSION_PAL
72#define PAUSE_MSG_3B PAUSE_MSG_NO_BADGE
73#define PAUSE_MSG_3F PAUSE_MSG_NO_BADGE
74#endif
75
81 0, 4,
82 1, 5,
83 1, 6,
84 2, 7,
85 2, 8,
86 3, 9,
87 3, 10
88};
89
90#if VERSION_PAL
91#define STAR_POWER_X 122
92#define COLLECTABLES_X 127
93#else
94#define STAR_POWER_X 132
95#define COLLECTABLES_X 125
96#endif
97
99 { .cursorX = 9, .cursorY = 20, .baseMsgID = PAUSE_MSG_TIP_CONTROLS },
100 { .cursorX = 17, .cursorY = 55, .baseMsgID = PAUSE_MSG_TIP_HP },
101 { .cursorX = 17, .cursorY = 90, .baseMsgID = PAUSE_MSG_TIP_FP },
102 { .cursorX = 17, .cursorY = 124, .baseMsgID = PAUSE_MSG_TIP_BP },
103 { .cursorX = 138, .cursorY = 28, .baseMsgID = PAUSE_MSG_TIP_BOOTS_1 },
104 { .cursorX = 138, .cursorY = 53, .baseMsgID = PAUSE_MSG_TIP_HAMMER_0 },
105 { .cursorX = STAR_POWER_X, .cursorY = 76, .baseMsgID = PAUSE_MSG_TIP_STAR_POWER },
106 { .cursorX = COLLECTABLES_X, .cursorY = 91, .baseMsgID = PAUSE_MSG_TIP_STAR_POINTS },
107 { .cursorX = COLLECTABLES_X, .cursorY = 106, .baseMsgID = PAUSE_MSG_TIP_COINS },
108 { .cursorX = COLLECTABLES_X, .cursorY = 121, .baseMsgID = PAUSE_MSG_TIP_SECRETS },
109 { .cursorX = COLLECTABLES_X, .cursorY = 138, .baseMsgID = PAUSE_MSG_TIP_TIME },
110};
111
112#if VERSION_PAL
113s32 D_pause_80253814[] = { 0, -16, -7, -19 };
114#endif
115
123s32 D_8024F46C[] = { -1, 1, 2, 4, 5, 7, 8 };
124// s32 D_8024F46C = -1;
125// s32 D_8024F470 = 1;
126// s32 D_8024F474 = 2;
127// s32 D_8024F478 = 4;
128// s32 D_8024F47C = 5;
129// s32 D_8024F480 = 7;
130// s32 D_8024F484 = 8;
131
133 {
135 .unk_01 = 0,
136 .pos = { .x = 3, .y = 16 },
137 .width = 289,
138 .height = 154,
139 .priority = WINDOW_PRIORITY_0,
140 .fpDrawContents = &pause_stats_draw_contents,
141 .tab = NULL,
142 .parentID = WIN_PAUSE_MAIN,
143 .fpUpdate = { WINDOW_UPDATE_HIDE },
144 .extraFlags = 0,
145 .style = { .customStyle = &gPauseWS_12 }
146 }
147};
148
150 .initialized = FALSE,
151 .col = 0,
152 .row = 0,
153 .selected = 0,
154 .state = 0,
155 .numCols = 2,
156 .numRows = 7,
157 .numPages = 0,
158 .gridData = gPauseStatsGridData,
159 .fpInit = &pause_stats_init,
160 .fpHandleInput = &pause_stats_handle_input,
161 .fpUpdate = NULL,
162 .fpCleanup = &pause_stats_cleanup
163};
164
165#if VERSION_PAL
166INCLUDE_ASM(void, "pause/pause_stats", pause_stats_draw_contents);
167#else
168void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening) {
169 StatsEntryData* statsEntryData;
170 PlayerData* playerData;
171 s16 bootsLevel;
172 s16 hammerLevel;
173 s32 powHudElemID;
174 s32 powIncrements;
175 s32 powIncIdx;
176 s32 curIncrement;
177 b32 drawingFirst;
178 s32 powBarIdx;
179 s32 boxWidth;
180 s16 level;
181 s32 frameCount;
182 s32 powFullBars;
183
184 // draw coin count
185 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_COIN], baseX + 143, baseY + 109);
187 draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_COINS), baseX + 155, baseY + 101, 255, MSG_PAL_STANDARD, 1);
188 draw_number(gPlayerData.coins, baseX + 281, baseY + 101 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 3);
189 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 108);
191
192 // draw star point count
193 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_POINT], baseX + 143, baseY + 94);
195 draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_STAR_POINTS), baseX + 155, baseY + 86, 255, MSG_PAL_STANDARD, 1);
196 draw_number(gPlayerData.starPoints, baseX + 281, baseY + 86 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 3);
197 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 93);
199
200 // draw star piece count
201 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_PIECE], baseX + 143, baseY + 123);
203 draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_STAR_PIECES), baseX + 155, baseY + 116, 255, MSG_PAL_STANDARD, 1);
204 draw_number(gPlayerData.starPieces, baseX + 281, baseY + 116 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 3);
205 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 123);
207
208 // draw HP count
209 pause_draw_menu_label(PAUSE_LBL_HP, baseX + 21, baseY + 35);
210 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_HP], baseX + 52, baseY + 57);
213 draw_number(gPlayerData.curHP, baseX + 78, baseY + 51, 1, 0, 255, 3);
215 draw_number(gPlayerData.curMaxHP, baseX + COL_C_X, baseY + ROW_2_Y + NUMBER_OFFSET_Y, 1, 0, 255, 3);
216
217 // draw FP count
218 pause_draw_menu_label(PAUSE_LBL_FP, baseX + 21, baseY + 69);
219 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_FP], baseX + 52, baseY + 92);
222 draw_number(gPlayerData.curFP, baseX + 78, baseY + 85, 1, MSG_PAL_WHITE, 255, 3);
225
226 // draw BP count
227 pause_draw_menu_label(PAUSE_LBL_BP, baseX + 21, baseY + 103);
228 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_BP], baseX + 52, baseY + 126);
231 draw_number(gPlayerData.maxBP, baseX + 78, baseY + 119, 1, MSG_PAL_WHITE, 255, 3);
232
233 #define MINUTE (60 * 60)
234 #define HOUR (MINUTE * 60)
235
236 // draw play time
237 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_CLOCK], baseX + 143, baseY + 140);
239 draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_TIME), baseX + 155, baseY + 133, 255, MSG_PAL_STANDARD, 1);
240 frameCount = gPlayerData.frameCounter;
241 if (frameCount >= (100 * HOUR)) {
242 frameCount = (100 * HOUR) - 1;
243 }
244 // draw hours
245 draw_number((frameCount / (10 * HOUR)) % 10, baseX + 237, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
246 draw_number((frameCount / HOUR) % 10, baseX + 246, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
247 draw_msg(pause_get_menu_msg(PAUSE_MSG_DOT), baseX + 257, baseY + 132, 255, MSG_PAL_STANDARD, 1);
248 draw_msg(pause_get_menu_msg(PAUSE_MSG_DOT), baseX + 257, baseY + 127, 255, MSG_PAL_STANDARD, 1);
249 // draw minutes
250 draw_number((frameCount / (10 * MINUTE)) % 6, baseX + 264, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
251 draw_number((frameCount / MINUTE) % 10, baseX + 273, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
252
253 bootsLevel = gPlayerData.bootsLevel;
254 hammerLevel = gPlayerData.hammerLevel;
255 level = gPlayerData.level;
256 draw_box(4, &gPauseWS_10, baseX + 7, baseY + 12, 0, level >= 10 ? 121 : 113, 17, 255, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL);
257
258 // draw level
259#if !VERSION_IQUE
260 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_MARIO], baseX + 61, baseY + 21);
262#endif
263 draw_msg(pause_get_menu_msg(PAUSE_MSG_MARIO), baseX + 16, baseY + 14, 255, MSG_PAL_WHITE, 1);
264 draw_msg(pause_get_menu_msg(PAUSE_MSG_LEVEL), baseX + POS_1_X, baseY + 14, 255, MSG_PAL_WHITE, 1);
265 draw_number(level, baseX + POS_2_X, baseY + 14 + NUMBER_OFFSET_Y, 1, MSG_PAL_WHITE, 255, 2);
266
267 bootsLevel++;
268 if (bootsLevel < 0) {
269 bootsLevel = 0;
270 }
271 if (bootsLevel > 3) {
272 bootsLevel = 3;
273 }
274
275 hammerLevel++;
276 if (hammerLevel < 0) {
277 hammerLevel = 0;
278 }
279 if (hammerLevel > 3) {
280 hammerLevel = 3;
281 }
282
283 pause_draw_menu_label(PAUSE_LBL_BOOTS, baseX + 137, baseY + 10);
284 pause_draw_menu_label(PAUSE_LBL_HAMMER, baseX + 137, baseY + 35);
285
286 // draw boots
287 hud_element_set_script(gPauseStatsIconIDs[STAT_ICON_BOOTS], gStatsBootsElements[bootsLevel]);
288 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_BOOTS], baseX + 163, baseY + 29);
290 draw_msg(pause_get_menu_msg(gPauseStatsBootsMessages[bootsLevel]), baseX + 176, baseY + 23, 255, MSG_PAL_WHITE, 1);
291
292 // draw hammer
293 hud_element_set_script(gPauseStatsIconIDs[STAT_ICON_HAMMER], gStatsHammerElements[hammerLevel]);
294 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_HAMMER], baseX + 163, baseY + 54);
296 draw_msg(pause_get_menu_msg(gPauseStatsHammerMessages[hammerLevel]), baseX + 176, baseY + 48, 255, MSG_PAL_WHITE, 1);
297
298 // draw star power bar
299 pause_draw_menu_label(PAUSE_LBL_STATS, baseX + 130, baseY + 69);
300 pause_draw_menu_label(PAUSE_LBL_ENERGY, baseX + 138, baseY + 60);
301
302 drawingFirst = TRUE;
303 curIncrement = 0;
304 powBarIdx = 0; // which bar of the power meter we're drawing
305 powIncIdx = 0; // which increment of the bar we're drawing
306 powHudElemID = gPauseStatsIconIDs[STAT_ICON_STAR];
307
308 // get number of full power increments
309 playerData = &gPlayerData;
310 powFullBars = playerData->starPower / SP_PER_BAR;
311 powIncrements = playerData->starPower % SP_PER_BAR; // get remainder in unfilled bar
312 powIncrements /= SP_PER_SEG; // subdivide unfilled bar into 8 segments (8 = 256/32)
313 powIncrements += powFullBars * 8; // add 8 increments per full bar
314
315 // draw filled bars
316 while (TRUE) {
317 if (curIncrement >= powIncrements) {
318 break;
319 }
320
321 curIncrement++;
322 hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
323 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[0], baseY + 75);
324 if (drawingFirst) {
326 drawingFirst = FALSE;
327 } else {
328 hud_element_draw_next(powHudElemID);
329 }
330 powIncIdx++;
331
332 if (curIncrement >= powIncrements) {
333 break;
334 }
335
336 curIncrement++;
337 hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
338 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[1], baseY + 75);
339 if (drawingFirst) {
341 drawingFirst = FALSE;
342 } else {
343 hud_element_draw_next(powHudElemID);
344 }
345 powIncIdx++;
346
347 if (curIncrement >= powIncrements) {
348 break;
349 }
350
351 curIncrement++;
352 hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
353 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[2], baseY + 75);
354 if (drawingFirst) {
356 drawingFirst = FALSE;
357 } else {
358 hud_element_draw_next(powHudElemID);
359 }
360 powIncIdx++;
361
362 if (curIncrement >= powIncrements) {
363 break;
364 }
365
366 curIncrement++;
367 hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
368 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[3], baseY + 75);
369 if (drawingFirst) {
371 drawingFirst = FALSE;
372 } else {
373 hud_element_draw_next(powHudElemID);
374 }
375 powIncIdx++;
376
377 if (curIncrement >= powIncrements) {
378 break;
379 }
380
381 curIncrement++;
382 hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
383 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[4], baseY + 75);
384 if (drawingFirst) {
386 drawingFirst = FALSE;
387 } else {
388 hud_element_draw_next(powHudElemID);
389 }
390 powIncIdx++;
391
392 if (curIncrement >= powIncrements) {
393 break;
394 }
395
396 curIncrement++;
397 hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
398 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[5], baseY + 75);
399 if (drawingFirst) {
401 drawingFirst = FALSE;
402 } else {
403 hud_element_draw_next(powHudElemID);
404 }
405 powIncIdx++;
406
407 if (curIncrement >= powIncrements) {
408 break;
409 }
410
411 curIncrement++;
412 hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
413 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[6], baseY + 75);
414 if (drawingFirst) {
416 drawingFirst = FALSE;
417 } else {
418 hud_element_draw_next(powHudElemID);
419 }
420 powIncIdx++;
421
422 if (curIncrement >= powIncrements) {
423 break;
424 }
425
426 curIncrement++;
427 hud_element_set_script(powHudElemID, gPauseStatsStarElements[powBarIdx]);
428 hud_element_set_render_pos(powHudElemID, baseX + 152 + (powBarIdx * 20), baseY + 77);
429 if (drawingFirst) {
431 drawingFirst = FALSE;
432 } else {
433 hud_element_draw_next(powHudElemID);
434 }
435 powIncIdx++;
436
437 powIncIdx = 0;
438 powBarIdx++;
439 if (curIncrement >= powIncrements) {
440 break;
441 }
442 }
443
444 // get number of total power increments
445 powFullBars = playerData->maxStarPower;
446 powIncrements = 8 * powFullBars;
447
448 // draw empty bars
449 while (TRUE) {
450 if (curIncrement >= powIncrements) {
451 break;
452 }
453
454 if (powIncIdx == 0) {
455 curIncrement++;
457 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[0], baseY + 75);
458 if (drawingFirst) {
460 drawingFirst = FALSE;
461 } else {
462 hud_element_draw_next(powHudElemID);
463 }
464 if (curIncrement >= powIncrements) {
465 break;
466 }
467 powIncIdx++;
468 }
469
470 if (powIncIdx == 1) {
471 curIncrement++;
473 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[1], baseY + 75);
474 if (drawingFirst) {
476 drawingFirst = FALSE;
477 } else {
478 hud_element_draw_next(powHudElemID);
479 }
480 powIncIdx++;
481
482 if (curIncrement >= powIncrements) {
483 break;
484 }
485 }
486
487 if (powIncIdx == 2) {
488 curIncrement++;
490 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[2], baseY + 75);
491 if (drawingFirst) {
493 drawingFirst = FALSE;
494 } else {
495 hud_element_draw_next(powHudElemID);
496 }
497 powIncIdx++;
498
499 if (curIncrement >= powIncrements) {
500 break;
501 }
502 }
503
504 if (powIncIdx == 3) {
505 curIncrement++;
507 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[3], baseY + 75);
508 if (drawingFirst) {
510 drawingFirst = FALSE;
511 } else {
512 hud_element_draw_next(powHudElemID);
513 }
514 powIncIdx++;
515
516 if (curIncrement >= powIncrements) {
517 break;
518 }
519 }
520
521 if (powIncIdx == 4) {
522 curIncrement++;
524 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[4], baseY + 75);
525 if (drawingFirst) {
527 drawingFirst = FALSE;
528 } else {
529 hud_element_draw_next(powHudElemID);
530 }
531 powIncIdx++;
532
533 if (curIncrement >= powIncrements) {
534 break;
535 }
536 }
537
538 if (powIncIdx == 5) {
539 curIncrement++;
541 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[5], baseY + 75);
542 if (drawingFirst) {
544 drawingFirst = FALSE;
545 } else {
546 hud_element_draw_next(powHudElemID);
547 }
548 powIncIdx++;
549
550 if (curIncrement >= powIncrements) {
551 break;
552 }
553 }
554
555 if (powIncIdx == 6) {
556 curIncrement++;
558 hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[6], baseY + 75);
559 if (drawingFirst) {
561 drawingFirst = FALSE;
562 } else {
563 hud_element_draw_next(powHudElemID);
564 }
565 powIncIdx++;
566
567 if (curIncrement >= powIncrements) {
568 break;
569 }
570 }
571
572 if (powIncIdx == 7) {
573 curIncrement++;
575 hud_element_set_render_pos(powHudElemID, baseX + 152 + (powBarIdx * 20), baseY + 77);
576 if (drawingFirst) {
578 drawingFirst = FALSE;
579 } else {
580 hud_element_draw_next(powHudElemID);
581 }
582 powIncIdx++;
583
584 if (curIncrement >= powIncrements) {
585 break;
586 }
587 }
588 powIncIdx = 0;
589 powBarIdx++;
590 }
591
592 if (gPauseMenuCurrentTab == 1) {
594
595 pause_set_cursor_pos(WIN_PAUSE_STATS, baseX + entry->cursorX, baseY + entry->cursorY);
596 }
597}
598#endif
599
601 s32 i;
602
603 for (i = 0; i < ARRAY_COUNT(gPauseStatsIconIDs); i++) {
604 gPauseStatsIconIDs[i] = hud_element_create(gStatsMenuElements[i]);
605 hud_element_set_flags(gPauseStatsIconIDs[i], HUD_ELEMENT_FLAG_80);
606 }
607
608 for (i = 0; i < ARRAY_COUNT(gStatsMenuWindowBPs); i++) {
609 gStatsMenuWindowBPs[i].tab = panel;
610 }
611
613 panel->initialized = TRUE;
614}
615
617 s32 initialSelection = panel->selected;
618 s16 bootsMsgIdx;
619 s16 hammerMsgIdx;
620 s32 msgOffset;
621
623 while (TRUE) {
624 panel->col--;
625 if (panel->col < 0) {
626 panel->col = 0;
627 break;
628 } else if (panel->selected != MENU_PANEL_SELECTED_GRID_DATA(panel)) {
629 break;
630 }
631 }
632 }
633
635 while (TRUE) {
636 panel->col++;
637 if (panel->col >= panel->numCols) {
638 panel->col = panel->numCols - 1;
639 break;
640 } else if (panel->selected != MENU_PANEL_SELECTED_GRID_DATA(panel)) {
641 break;
642 }
643 }
644 }
645
647 while (TRUE) {
648 panel->row--;
649 if (panel->row < 0) {
650 panel->row = 0;
651 break;
652 } else if (panel->selected != MENU_PANEL_SELECTED_GRID_DATA(panel)) {
653 break;
654 }
655 }
656 }
657
659 while (TRUE) {
660 panel->row++;
661 if (panel->row >= panel->numRows) {
662 panel->row = panel->numRows - 1;
663 break;
664 } else if (panel->selected != MENU_PANEL_SELECTED_GRID_DATA(panel)) {
665 break;
666 }
667 }
668 }
669
671 if (panel->selected != initialSelection) {
673 }
674
675 msgOffset = 0;
676 bootsMsgIdx = gPlayerData.bootsLevel;
677 hammerMsgIdx = gPlayerData.hammerLevel;
678
679 bootsMsgIdx++;
680 if (bootsMsgIdx < 0) {
681 bootsMsgIdx = 0;
682 }
683 if (bootsMsgIdx > 3) {
684 bootsMsgIdx = 3;
685 }
686
687 hammerMsgIdx++;
688 if (hammerMsgIdx < 0) {
689 hammerMsgIdx = 0;
690 }
691 if (hammerMsgIdx > 3) {
692 hammerMsgIdx = 3;
693 }
694
695 switch (gStatsMenuEntries[panel->selected].baseMsgID) {
697 if (bootsMsgIdx > 1) {
698 msgOffset = bootsMsgIdx - 1;
699 }
700 break;
702 msgOffset = hammerMsgIdx;
703 break;
706 msgOffset = 1;
707 }
708 break;
709 }
710
713
717 }
718}
719
721 s32 i;
722
723 for (i = 0; i < ARRAY_COUNT(gPauseStatsIconIDs); i++) {
724 hud_element_free(gPauseStatsIconIDs[i]);
725 }
726}
s32 b32
#define draw_msg
#define draw_box
@ BUTTON_STICK_UP
Definition enums.h:2791
@ BUTTON_STICK_DOWN
Definition enums.h:2792
@ BUTTON_STICK_LEFT
Definition enums.h:2793
@ BUTTON_STICK_RIGHT
Definition enums.h:2794
@ BUTTON_B
Definition enums.h:2789
@ WINDOW_PRIORITY_0
Definition enums.h:3182
@ MSG_PAL_WHITE
Definition enums.h:5404
@ MSG_PAL_STANDARD
Definition enums.h:5414
@ WINDOW_UPDATE_HIDE
Definition enums.h:5311
@ SOUND_MENU_BACK
Definition enums.h:701
@ SOUND_MENU_CHANGE_SELECTION
Definition enums.h:698
@ WIN_PAUSE_MAIN
Definition enums.h:5262
@ WIN_PAUSE_STATS
Definition enums.h:5273
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1689
void setup_pause_menu_tab(MenuWindowBP *bpArray, s32 arraySize)
Definition windows.c:461
void draw_number(s32 value, s32 x, s32 y, s32 variableWidthChars, s32 palette, s32 opacity, u16 style)
Definition msg.c:2223
HudScript HES_StatusSPIncrement6
HudScript HES_StatusSPIncrement4
HudScript HES_StatusStar1
HudScript HES_StatusSPIncrement3
HudScript HES_StatusStarEmpty
HudScript HES_StatusStarPoint
HudScript HES_StatusStar2
HudScript HES_StatusStar3
HudScript HES_StatusSPIncrement7
HudScript HES_StatusCoin
HudScript HES_StatusStar7
HudScript HES_StatusStar5
HudScript HES_StatusSPIncrement5
HudScript HES_StatusSPIncrement2
HudScript HES_StatusStar6
HudScript HES_StatusHeart
HudScript HES_StatusStar4
HudScript HES_StatusSPEmptyIncrement
HudScript HES_StatusSPIncrement1
void hud_element_draw_without_clipping(s32 id)
void hud_element_set_script(s32 id, HudScript *anim)
void hud_element_draw_next(s32 id)
void hud_element_set_render_pos(s32 id, s32 x, s32 y)
s32 hud_element_create(HudScript *anim)
Creates a new HUD element and returns its ID.
void hud_element_set_flags(s32 id, s32 flags)
Turns on the given flags.
void hud_element_free(s32 id)
@ HUD_ELEMENT_FLAG_80
Definition hud_element.h:78
s32 HudScript[]
Definition hud_element.h:9
#define INCLUDE_ASM(TYPE, FOLDER, NAME, ARGS...)
Definition include_asm.h:21
HudScript HES_MarioHeadSmall
HudScript HES_StatBoots3
HudScript HES_StatHammer3
HudScript HES_StatHammer1
HudScript HES_StatBoots1
HudScript HES_Clock
HudScript HES_StatBoots0
HudScript HES_StatFp_1
HudScript HES_StatBoots2
HudScript HES_StatHammer0
HudScript HES_StatBp
HudScript HES_StatStarPiece_1
HudScript HES_StatHammer2
HudScript HES_StatTimes
s32 gPausePressedButtons
Definition pause_main.c:24
HudScript * gPauseCurrentDescIconScript
Definition pause_main.c:26
s32 pause_get_menu_msg(s32 index)
Definition pause_gfx.c:583
@ PAUSE_MSG_TIP_BP
@ PAUSE_MSG_TIP_FP
@ PAUSE_MSG_LBL_TIME
@ PAUSE_MSG_LBL_STAR_PIECES
@ PAUSE_MSG_TIP_BOOTS_1
@ PAUSE_MSG_LBL_FP
@ PAUSE_MSG_TIP_STAR_POINTS
@ PAUSE_MSG_3F
@ PAUSE_MSG_40
@ PAUSE_MSG_3E
@ PAUSE_MSG_TIP_TIME
@ PAUSE_MSG_TIP_HAMMER_0
@ PAUSE_MSG_LBL_HP
@ PAUSE_MSG_LBL_COINS
@ PAUSE_MSG_TIP_SECRETS
@ PAUSE_MSG_41
@ PAUSE_MSG_LEVEL
@ PAUSE_MSG_TIP_HP
@ PAUSE_MSG_LBL_BP
@ PAUSE_MSG_SLASH
@ PAUSE_MSG_42
@ PAUSE_MSG_LBL_STAR_POINTS
@ PAUSE_MSG_3D
@ PAUSE_MSG_TIP_CONTROLS
@ PAUSE_MSG_MARIO
@ PAUSE_MSG_3C
@ PAUSE_MSG_TIP_STAR_POWER
@ PAUSE_MSG_DOT
@ PAUSE_MSG_TIP_COINS
@ PAUSE_MSG_3B
s32 gPauseHeldButtons
Definition pause_main.c:23
s8 gPauseMenuCurrentTab
Definition pause_main.c:28
void pause_draw_menu_label(s32 index, s32 x, s32 y)
Definition pause_gfx.c:587
WindowStyleCustom gPauseWS_12
void pause_set_cursor_pos(s32 windowID, s32 posX, s32 posY)
Definition pause_main.c:228
WindowStyleCustom gPauseWS_10
@ PAUSE_LBL_ENERGY
@ PAUSE_LBL_BOOTS
@ PAUSE_LBL_HAMMER
@ PAUSE_LBL_HP
@ PAUSE_LBL_STATS
@ PAUSE_LBL_BP
@ PAUSE_LBL_FP
s32 gPauseCurrentDescMsg
Definition pause_main.c:25
#define ROW_1_Y
Definition pause_stats.c:23
void pause_stats_cleanup(MenuPanel *panel)
#define STAR_POWER_X
Definition pause_stats.c:94
#define NUMBER_OFFSET_Y
Definition pause_stats.c:22
#define COLLECTABLES_X
Definition pause_stats.c:95
s32 gPauseStatsHammerMessages[]
Definition pause_stats.c:79
@ STAT_ICON_BP
Definition pause_stats.c:51
@ STAT_ICON_FP
Definition pause_stats.c:50
@ STAT_ICON_HAMMER
Definition pause_stats.c:44
@ STAT_ICON_STAR
Definition pause_stats.c:52
@ STAT_ICON_BOOTS
Definition pause_stats.c:43
@ STAT_ICON_HP
Definition pause_stats.c:49
@ STAT_ICON_TIMES
Definition pause_stats.c:53
@ STAT_ICON_CLOCK
Definition pause_stats.c:48
@ STAT_ICON_STAR_POINT
Definition pause_stats.c:46
@ STAT_ICON_STAR_PIECE
Definition pause_stats.c:47
@ STAT_ICON_COIN
Definition pause_stats.c:45
@ STAT_ICON_MARIO
Definition pause_stats.c:42
#define HOUR
#define COL_C_X
Definition pause_stats.c:29
MenuPanel gPausePanelStats
HudScript * gStatsBootsElements[]
Definition pause_stats.c:76
void pause_stats_init(MenuPanel *panel)
void pause_stats_handle_input(MenuPanel *panel)
StatsEntryData gStatsMenuEntries[]
Definition pause_stats.c:98
#define ROW_4_Y
Definition pause_stats.c:26
#define COL_A_X
Definition pause_stats.c:27
s32 gPauseStatsBootsMessages[]
Definition pause_stats.c:78
#define POS_2_X
Definition pause_stats.c:31
#define POS_1_X
Definition pause_stats.c:30
HudScript * gPauseStatsStarElements[]
s32 D_8024F46C[]
#define MINUTE
#define COL_B_X
Definition pause_stats.c:28
#define ROW_3_Y
Definition pause_stats.c:25
HudScript * gStatsMenuElements[]
Definition pause_stats.c:56
#define ROW_2_Y
Definition pause_stats.c:24
void pause_stats_draw_contents(MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
MenuWindowBP gStatsMenuWindowBPs[]
HudScript * gStatsHammerElements[]
Definition pause_stats.c:77
s8 gPauseStatsGridData[]
Definition pause_stats.c:80
HudScript * gPauseStatsSPIncElements[]
void sfx_play_sound(s32 soundID)
Definition sfx.c:517
@ GF_Tutorial_GotStarPiece
#define SCREEN_WIDTH
Definition macros.h:109
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define SCREEN_HEIGHT
Definition macros.h:110
#define SP_PER_SEG
Definition macros.h:103
#define SP_PER_BAR
Definition macros.h:102
#define MENU_PANEL_SELECTED_GRID_DATA(panel)
Definition macros.h:76
MenuPanel * tab
PlayerData gPlayerData
Definition 77480.c:40