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);
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 = nullptr,
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 = nullptr,
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) {
170 s16 bootsLevel;
171 s16 hammerLevel;
178 s16 level;
181
182 // draw coin count
183 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_COIN], baseX + 143, baseY + 109);
187 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 108);
189
190 // draw star point count
191 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_POINT], baseX + 143, baseY + 94);
195 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 93);
197
198 // draw star piece count
199 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_PIECE], baseX + 143, baseY + 123);
203 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 123);
205
206 // draw HP count
208 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_HP], baseX + 52, baseY + 57);
211 draw_number(gPlayerData.curHP, baseX + 78, baseY + 51, 1, 0, 255, 3);
214
215 // draw FP count
217 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_FP], baseX + 52, baseY + 92);
220 draw_number(gPlayerData.curFP, baseX + 78, baseY + 85, 1, MSG_PAL_WHITE, 255, 3);
223
224 // draw BP count
226 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_BP], baseX + 52, baseY + 126);
229 draw_number(gPlayerData.maxBP, baseX + 78, baseY + 119, 1, MSG_PAL_WHITE, 255, 3);
230
231 #define MINUTE (60 * 60)
232 #define HOUR (MINUTE * 60)
233
234 // draw play time
235 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_CLOCK], baseX + 143, baseY + 140);
239 if (frameCount >= (100 * HOUR)) {
240 frameCount = (100 * HOUR) - 1;
241 }
242 // draw hours
243 draw_number((frameCount / (10 * HOUR)) % 10, baseX + 237, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
244 draw_number((frameCount / HOUR) % 10, baseX + 246, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
247 // draw minutes
248 draw_number((frameCount / (10 * MINUTE)) % 6, baseX + 264, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
249 draw_number((frameCount / MINUTE) % 10, baseX + 273, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
250
251 bootsLevel = gPlayerData.bootsLevel;
252 hammerLevel = gPlayerData.hammerLevel;
253 level = gPlayerData.level;
254 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, nullptr, nullptr, nullptr, SCREEN_WIDTH, SCREEN_HEIGHT, nullptr);
255
256 // draw level
257#if !VERSION_IQUE
258 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_MARIO], baseX + 61, baseY + 21);
260#endif
263 draw_number(level, baseX + POS_2_X, baseY + 14 + NUMBER_OFFSET_Y, 1, MSG_PAL_WHITE, 255, 2);
264
265 bootsLevel++;
266 if (bootsLevel < 0) {
267 bootsLevel = 0;
268 }
269 if (bootsLevel > 3) {
270 bootsLevel = 3;
271 }
272
273 hammerLevel++;
274 if (hammerLevel < 0) {
275 hammerLevel = 0;
276 }
277 if (hammerLevel > 3) {
278 hammerLevel = 3;
279 }
280
283
284 // draw boots
285 hud_element_set_script(gPauseStatsIconIDs[STAT_ICON_BOOTS], gStatsBootsElements[bootsLevel]);
286 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_BOOTS], baseX + 163, baseY + 29);
289
290 // draw hammer
291 hud_element_set_script(gPauseStatsIconIDs[STAT_ICON_HAMMER], gStatsHammerElements[hammerLevel]);
292 hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_HAMMER], baseX + 163, baseY + 54);
295
296 // draw star power bar
299
300 drawingFirst = true;
301 curIncrement = 0;
302 powBarIdx = 0; // which bar of the power meter we're drawing
303 powIncIdx = 0; // which increment of the bar we're drawing
304 powHudElemID = gPauseStatsIconIDs[STAT_ICON_STAR];
305
306 // get number of full power increments
309 powIncrements = playerData->starPower % SP_PER_BAR; // get remainder in unfilled bar
310 powIncrements /= SP_PER_SEG; // subdivide unfilled bar into 8 segments (8 = 256/32)
311 powIncrements += powFullBars * 8; // add 8 increments per full bar
312
313 // draw filled bars
314 while (true) {
316 break;
317 }
318
319 curIncrement++;
322 if (drawingFirst) {
324 drawingFirst = false;
325 } else {
327 }
328 powIncIdx++;
329
331 break;
332 }
333
334 curIncrement++;
337 if (drawingFirst) {
339 drawingFirst = false;
340 } else {
342 }
343 powIncIdx++;
344
346 break;
347 }
348
349 curIncrement++;
352 if (drawingFirst) {
354 drawingFirst = false;
355 } else {
357 }
358 powIncIdx++;
359
361 break;
362 }
363
364 curIncrement++;
367 if (drawingFirst) {
369 drawingFirst = false;
370 } else {
372 }
373 powIncIdx++;
374
376 break;
377 }
378
379 curIncrement++;
382 if (drawingFirst) {
384 drawingFirst = false;
385 } else {
387 }
388 powIncIdx++;
389
391 break;
392 }
393
394 curIncrement++;
397 if (drawingFirst) {
399 drawingFirst = false;
400 } else {
402 }
403 powIncIdx++;
404
406 break;
407 }
408
409 curIncrement++;
412 if (drawingFirst) {
414 drawingFirst = false;
415 } else {
417 }
418 powIncIdx++;
419
421 break;
422 }
423
424 curIncrement++;
427 if (drawingFirst) {
429 drawingFirst = false;
430 } else {
432 }
433 powIncIdx++;
434
435 powIncIdx = 0;
436 powBarIdx++;
438 break;
439 }
440 }
441
442 // get number of total power increments
443 powFullBars = playerData->maxStarPower;
445
446 // draw empty bars
447 while (true) {
449 break;
450 }
451
452 if (powIncIdx == 0) {
453 curIncrement++;
456 if (drawingFirst) {
458 drawingFirst = false;
459 } else {
461 }
463 break;
464 }
465 powIncIdx++;
466 }
467
468 if (powIncIdx == 1) {
469 curIncrement++;
472 if (drawingFirst) {
474 drawingFirst = false;
475 } else {
477 }
478 powIncIdx++;
479
481 break;
482 }
483 }
484
485 if (powIncIdx == 2) {
486 curIncrement++;
489 if (drawingFirst) {
491 drawingFirst = false;
492 } else {
494 }
495 powIncIdx++;
496
498 break;
499 }
500 }
501
502 if (powIncIdx == 3) {
503 curIncrement++;
506 if (drawingFirst) {
508 drawingFirst = false;
509 } else {
511 }
512 powIncIdx++;
513
515 break;
516 }
517 }
518
519 if (powIncIdx == 4) {
520 curIncrement++;
523 if (drawingFirst) {
525 drawingFirst = false;
526 } else {
528 }
529 powIncIdx++;
530
532 break;
533 }
534 }
535
536 if (powIncIdx == 5) {
537 curIncrement++;
540 if (drawingFirst) {
542 drawingFirst = false;
543 } else {
545 }
546 powIncIdx++;
547
549 break;
550 }
551 }
552
553 if (powIncIdx == 6) {
554 curIncrement++;
557 if (drawingFirst) {
559 drawingFirst = false;
560 } else {
562 }
563 powIncIdx++;
564
566 break;
567 }
568 }
569
570 if (powIncIdx == 7) {
571 curIncrement++;
574 if (drawingFirst) {
576 drawingFirst = false;
577 } else {
579 }
580 powIncIdx++;
581
583 break;
584 }
585 }
586 powIncIdx = 0;
587 powBarIdx++;
588 }
589
590 if (gPauseMenuCurrentTab == 1) {
592
594 }
595}
596#endif
597
599 s32 i;
600
601 for (i = 0; i < ARRAY_COUNT(gPauseStatsIconIDs); i++) {
602 gPauseStatsIconIDs[i] = hud_element_create(gStatsMenuElements[i]);
604 }
605
606 for (i = 0; i < ARRAY_COUNT(gStatsMenuWindowBPs); i++) {
608 }
609
611 panel->initialized = true;
612}
613
615 s32 initialSelection = panel->selected;
619
621 while (true) {
622 panel->col--;
623 if (panel->col < 0) {
624 panel->col = 0;
625 break;
626 } else if (panel->selected != MENU_PANEL_SELECTED_GRID_DATA(panel)) {
627 break;
628 }
629 }
630 }
631
633 while (true) {
634 panel->col++;
635 if (panel->col >= panel->numCols) {
636 panel->col = panel->numCols - 1;
637 break;
638 } else if (panel->selected != MENU_PANEL_SELECTED_GRID_DATA(panel)) {
639 break;
640 }
641 }
642 }
643
645 while (true) {
646 panel->row--;
647 if (panel->row < 0) {
648 panel->row = 0;
649 break;
650 } else if (panel->selected != MENU_PANEL_SELECTED_GRID_DATA(panel)) {
651 break;
652 }
653 }
654 }
655
657 while (true) {
658 panel->row++;
659 if (panel->row >= panel->numRows) {
660 panel->row = panel->numRows - 1;
661 break;
662 } else if (panel->selected != MENU_PANEL_SELECTED_GRID_DATA(panel)) {
663 break;
664 }
665 }
666 }
667
669 if (panel->selected != initialSelection) {
671 }
672
673 msgOffset = 0;
676
677 bootsMsgIdx++;
678 if (bootsMsgIdx < 0) {
679 bootsMsgIdx = 0;
680 }
681 if (bootsMsgIdx > 3) {
682 bootsMsgIdx = 3;
683 }
684
685 hammerMsgIdx++;
686 if (hammerMsgIdx < 0) {
687 hammerMsgIdx = 0;
688 }
689 if (hammerMsgIdx > 3) {
690 hammerMsgIdx = 3;
691 }
692
693 switch (gStatsMenuEntries[panel->selected].baseMsgID) {
695 if (bootsMsgIdx > 1) {
697 }
698 break;
701 break;
704 msgOffset = 1;
705 }
706 break;
707 }
708
711
715 }
716}
717
719 s32 i;
720
721 for (i = 0; i < ARRAY_COUNT(gPauseStatsIconIDs); i++) {
722 hud_element_free(gPauseStatsIconIDs[i]);
723 }
724}
BSS s32 PopupMenu_SelectedIndex
s32 b32
#define draw_msg
#define draw_box
@ BUTTON_STICK_UP
Definition enums.h:2777
@ BUTTON_STICK_DOWN
Definition enums.h:2778
@ BUTTON_STICK_LEFT
Definition enums.h:2779
@ BUTTON_STICK_RIGHT
Definition enums.h:2780
@ BUTTON_B
Definition enums.h:2775
@ WINDOW_PRIORITY_0
Definition enums.h:3216
@ MSG_PAL_WHITE
Definition enums.h:4990
@ MSG_PAL_STANDARD
Definition enums.h:5000
@ WINDOW_UPDATE_HIDE
Definition enums.h:4897
@ SOUND_MENU_BACK
Definition enums.h:704
@ SOUND_MENU_CHANGE_SELECTION
Definition enums.h:701
@ WIN_PAUSE_MAIN
Definition enums.h:4848
@ WIN_PAUSE_STATS
Definition enums.h:4859
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1730
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:2225
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)
HudElemID hud_element_create(HudScript *anim)
Creates a new HUD element and returns its ID.
void hud_element_set_render_pos(s32 id, s32 x, s32 y)
void hud_element_set_flags(s32 id, s32 flags)
Turns on the given flags.
void hud_element_free(s32 id)
@ HUD_ELEMENT_FLAG_MANUAL_RENDER
Definition hud_element.h:78
s32 HudScript[]
Definition hud_element.h:9
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:225
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
#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
@ 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 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)
@ GF_Tutorial_GotStarPiece
#define SCREEN_WIDTH
Definition macros.h:108
#define ARRAY_COUNT(arr)
Definition macros.h:39
#define SCREEN_HEIGHT
Definition macros.h:109
#define SP_PER_SEG
Definition macros.h:102
#define SP_PER_BAR
Definition macros.h:101
#define MENU_PANEL_SELECTED_GRID_DATA(panel)
Definition macros.h:75
MenuPanel * tab
PlayerData gPlayerData
Definition 77480.c:39