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

Go to the source code of this file.

Enumerations

enum  WorldMenuStates {
  WORLD_MENU_STATE_NONE = 0 , WORLD_MENU_STATE_DELAY = 1 , WORLD_MENU_STATE_OPEN = 2 , WORLD_MENU_STATE_HOLD = 3 ,
  WORLD_MENU_STATE_CLOSE = 4 , WORLD_MENU_STATE_UNPAUSE = 10
}
 
enum  WorldMenuTypes { WORLD_MENU_CHANGE_PARTNER = 0 , WORLD_MENU_USE_ITEM = 1 , WORLD_MENU_PAUSE = 2 }
 

Functions

void reset_outta_sight_alpha_on_menu_close (void)
 
b32 should_cancel_open_world_menu (void)
 
b32 can_open_world_menu (s32 currentButtons, s32 pressedButtons)
 
void clear_world_menus (void)
 
s32 setup_partner_popup (PopupMenu *menu)
 
s32 setup_item_popup (PopupMenu *menu)
 
void check_input_open_menus (void)
 
void check_input_status_bar (void)
 

Variables

BSS PopupMenu WorldPopupMenu
 
BSS s16 WorldMenuType
 
BSS s16 WorldMenuDelay
 
BSS s16 WorldPopupResult
 
BSS s16 OpenMenuDisableCount
 
BSS s16 WorldMenuState
 
s32 MenuIndexFromPartnerID []
 

Enumeration Type Documentation

◆ WorldMenuStates

Enumerator
WORLD_MENU_STATE_NONE 
WORLD_MENU_STATE_DELAY 
WORLD_MENU_STATE_OPEN 
WORLD_MENU_STATE_HOLD 
WORLD_MENU_STATE_CLOSE 
WORLD_MENU_STATE_UNPAUSE 

Definition at line 12 of file menus.c.

12 {
19};
@ WORLD_MENU_STATE_CLOSE
Definition menus.c:17
@ WORLD_MENU_STATE_UNPAUSE
Definition menus.c:18
@ WORLD_MENU_STATE_HOLD
Definition menus.c:16
@ WORLD_MENU_STATE_NONE
Definition menus.c:13
@ WORLD_MENU_STATE_OPEN
Definition menus.c:15
@ WORLD_MENU_STATE_DELAY
Definition menus.c:14

◆ WorldMenuTypes

Enumerator
WORLD_MENU_CHANGE_PARTNER 
WORLD_MENU_USE_ITEM 
WORLD_MENU_PAUSE 

Definition at line 21 of file menus.c.

21 {
25};
@ WORLD_MENU_USE_ITEM
Definition menus.c:23
@ WORLD_MENU_PAUSE
Definition menus.c:24
@ WORLD_MENU_CHANGE_PARTNER
Definition menus.c:22

Function Documentation

◆ reset_outta_sight_alpha_on_menu_close()

void reset_outta_sight_alpha_on_menu_close ( void )

Definition at line 36 of file menus.c.

36 {
38
41
44 playerStatus->prevAlpha = 0;
45 }
46}
BSS s32 PopupMenu_SelectedIndex
@ IMGFX_SET_ALPHA
Definition enums.h:4709
@ PARTNER_ACTION_NONE
Definition enums.h:2966
@ NPC_PARTNER
Definition enums.h:2514
@ PARTNER_BOW
Definition enums.h:2928
void npc_set_imgfx_params(Npc *npc, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6)
Definition npc.c:2160
Npc * get_npc_unsafe(s32 npcID)
Definition npc.c:993
void set_player_imgfx_comp(s32 spriteIdx, s32 compIdx, ImgFXType imgfx, s32 imgfxArg1, s32 imgfxArg2, s32 imgfxArg3, s32 imgfxArg4, s32 flags)
Definition sprite.c:958
@ PLAYER_SPRITE_MAIN
Definition sprite.h:30
PartnerStatus gPartnerStatus
Definition partners.c:42
PlayerStatus gPlayerStatus
Definition 77480.c:38

Referenced by check_input_open_menus().

◆ should_cancel_open_world_menu()

b32 should_cancel_open_world_menu ( void )

Definition at line 48 of file menus.c.

48 {
51 s32 actionState = playerStatus->actionState;
52
53 if (playerStatus->animFlags & PA_FLAG_CHANGING_MAP) {
54 return false;
55 }
56
57 if (partnerStatus->partnerActionState == PARTNER_ACTION_NONE) {
59 (actionState == ACTION_STATE_IDLE || actionState == ACTION_STATE_WALK || actionState == ACTION_STATE_RUN))
60 {
61 return true;
62 }
63 } else if (partner_can_open_world_menus()) {
64 if (partnerStatus->actingPartner == PARTNER_WATT) {
65 return true;
66 } else if (partnerStatus->actingPartner == PARTNER_BOW) {
67 if (actionState == ACTION_STATE_RIDE) {
68 return true;
69 }
70 } else if (partnerStatus->actingPartner == PARTNER_LAKILESTER) {
71 if (actionState == ACTION_STATE_RIDE) {
72 return true;
73 }
75 }
76 }
77 return false;
78}
@ PS_FLAG_NO_STATIC_COLLISION
Definition enums.h:3085
@ PA_FLAG_CHANGING_MAP
Definition enums.h:3146
@ SOUND_MENU_ERROR
Definition enums.h:936
@ PARTNER_LAKILESTER
Definition enums.h:2927
@ PARTNER_WATT
Definition enums.h:2925
@ ACTION_STATE_RIDE
Definition enums.h:2447
@ ACTION_STATE_IDLE
Definition enums.h:2412
@ ACTION_STATE_WALK
Definition enums.h:2413
@ ACTION_STATE_RUN
Definition enums.h:2414
s32 partner_can_open_world_menus(void)
Definition partners.c:983
void sfx_play_sound(s32 soundID)

Referenced by check_input_open_menus().

◆ can_open_world_menu()

b32 can_open_world_menu ( s32 currentButtons,
s32 pressedButtons )

Definition at line 80 of file menus.c.

80 {
82 s32 actionState = gPlayerStatus.actionState;
83
87 && (pressedButtons & (BUTTON_START | BUTTON_C_LEFT | BUTTON_C_RIGHT))
91 ) {
94 return false;
95 }
96 if (partnerStatus->partnerActionState == PARTNER_ACTION_NONE) {
98 if (actionState == ACTION_STATE_IDLE ||
99 actionState == ACTION_STATE_WALK ||
100 actionState == ACTION_STATE_RUN
101 ) {
102 return true;
103 }
104 }
105 } else if (partner_can_open_world_menus()) {
106 if (partnerStatus->actingPartner == PARTNER_WATT) {
107 return actionState == ACTION_STATE_IDLE ||
108 actionState == ACTION_STATE_WALK ||
109 actionState == ACTION_STATE_RUN;
110 } else if (partnerStatus->actingPartner == PARTNER_BOW) {
111 if (actionState == ACTION_STATE_RIDE) {
113 return true;
114 }
115 } else if (partnerStatus->actingPartner == PARTNER_LAKILESTER) {
116 if (actionState == ACTION_STATE_RIDE) {
118 return true;
119 }
121 }
122 } else if (partnerStatus->actingPartner == PARTNER_SUSHIE) {
124 }
125 }
126 }
127 return false;
128}
struct Shop * mapShop
@ BUTTON_START
Definition enums.h:2773
@ BUTTON_R
Definition enums.h:2767
@ BUTTON_C_RIGHT
Definition enums.h:2763
@ BUTTON_C_LEFT
Definition enums.h:2764
@ BUTTON_Z
Definition enums.h:2774
@ PS_FLAG_PAUSE_DISABLED
Definition enums.h:3078
@ PA_FLAG_8BIT_MARIO
Definition enums.h:3139
@ SHOP_FLAG_SHOWING_ITEM_INFO
Definition enums.h:4531
@ PARTNER_SUSHIE
Definition enums.h:2926
@ GLOBAL_OVERRIDES_DISABLE_MENUS
Definition enums.h:3922
b32 is_picking_up_item(void)
s16 flags
s32 world_lakilester_can_dismount(void)
s32 gOverrideFlags
Definition main_loop.c:10
GameStatus * gGameStatusPtr
Definition main_loop.c:31

Referenced by check_input_open_menus().

◆ clear_world_menus()

void clear_world_menus ( void )

Definition at line 130 of file menus.c.

130 {
132}
BSS s16 WorldMenuState
Definition menus.c:32

Referenced by player_reset_data().

◆ setup_partner_popup()

s32 setup_partner_popup ( PopupMenu * menu)

Definition at line 134 of file menus.c.

134 {
136 s32 optionCount = 0;
137 s32 i;
138
139 for (i = 1; i < ARRAY_COUNT(PartnerIDFromMenuIndex); i++) {
140 s32 partnerID = PartnerIDFromMenuIndex[i];
141
142 if (playerData->partners[partnerID].enabled && partnerID != PARTNER_GOOMPA) {
143 PartnerPopupProperties* properties = &gPartnerPopupProperties[partnerID];
144
145 menu->ptrIcon[optionCount] = wPartnerHudScripts[partnerID];
146 menu->userIndex[optionCount] = partnerID;
147 menu->enabled[optionCount] = true;
148 menu->nameMsg[optionCount] = properties->nameMsg;
149 menu->descMsg[optionCount] = properties->worldDescMsg;
150 menu->value[optionCount] = playerData->partners[partnerID].level;
151 if (playerData->curPartner == partnerID) {
152 menu->enabled[optionCount] = false;
153 menu->ptrIcon[optionCount] = wDisabledPartnerHudScripts[partnerID];
154 }
155 optionCount++;
156 }
157 }
158 return optionCount;
159}
PartnerPopupProperties gPartnerPopupProperties[]
Definition 5B320.c:331
@ PARTNER_GOOMPA
Definition enums.h:2924
HudScript * wDisabledPartnerHudScripts[]
Definition partners.c:136
HudScript * wPartnerHudScripts[]
Definition partners.c:130
#define ARRAY_COUNT(arr)
Definition macros.h:39
s32 PartnerIDFromMenuIndex[12]
Definition 5B320.c:300
PlayerData gPlayerData
Definition 77480.c:39

Referenced by check_input_open_menus().

◆ setup_item_popup()

s32 setup_item_popup ( PopupMenu * menu)

Definition at line 161 of file menus.c.

161 {
163 s32 optionCount = 0;
164 s32 i;
165
166 for (i = 0; i < ARRAY_COUNT(playerData->invItems); i++) {
168
169 if (itemIdx != 0) {
170 ItemData* item = &gItemTable[itemIdx];
172
174 menu->ptrIcon[optionCount] = itemScripts->enabled;
175 menu->userIndex[optionCount] = i;
176 menu->enabled[optionCount] = 1;
177 } else {
178 menu->ptrIcon[optionCount] = itemScripts->disabled;
179 menu->userIndex[optionCount] = i;
180 menu->enabled[optionCount] = false;
181 }
182 menu->nameMsg[optionCount] = item->nameMsg;
183 menu->descMsg[optionCount] = item->shortDescMsg;
184 optionCount++;
185 }
186 }
187 return optionCount;
188}
IconHudScriptPair gItemHudScripts[]
s16 invItems[10]
@ ITEM_TYPE_FLAG_WORLD_USABLE
Definition enums.h:1860
HudScript * enabled
ItemData gItemTable[]

Referenced by check_input_open_menus().

◆ check_input_open_menus()

void check_input_open_menus ( void )

Definition at line 190 of file menus.c.

190 {
191 static s16 SwappedWorldMenus;
192
197 s32 flags;
198 s32 numEntries;
199 s32 pressedButtons;
201 s8* partnerActionState;
202
207
211 ) {
212 return;
213 }
214
215 if (partnerStatus->partnerActionState != PARTNER_ACTION_NONE &&
216 (partnerStatus->actingPartner == PARTNER_SUSHIE ||
217 partnerStatus->actingPartner == PARTNER_LAKILESTER ||
218 partnerStatus->actingPartner == PARTNER_BOW))
219 {
220 currentButtons = partnerStatus->curButtons;
221 pressedButtons = partnerStatus->pressedButtons;
222 } else {
223 currentButtons = playerStatus->curButtons;
224 pressedButtons = playerStatus->pressedButtons;
225 }
226 partnerActionState = &partnerStatus->partnerActionState;
227
228 // prevent opening popup menus during the epilogue
231 pressedButtons &= ~(BUTTON_C_LEFT | BUTTON_C_RIGHT);
232 }
233
234 switch (WorldMenuState) {
236 if (can_open_world_menu(currentButtons, pressedButtons)) {
238 if (pressedButtons & BUTTON_C_RIGHT) {
240 }
241 if (pressedButtons & BUTTON_START) {
243 }
244 SwappedWorldMenus = false;
246 switch (WorldMenuType) {
250 if (SwappedWorldMenus) {
255 }
256 } else {
257 numEntries = setup_partner_popup(popup);
258 if (numEntries == 0) {
259 return;
260 }
261 popup->numEntries = numEntries;
262 popup->popupType = POPUP_MENU_SWITCH_PARTNER;
263 popup->initialPos = MenuIndexFromPartnerID[playerData->curPartner] - 1;
264 break;
265 }
266 return;
268 numEntries = setup_item_popup(popup);
269 if (numEntries == 0) {
270 return;
271 }
272 popup->popupType = POPUP_MENU_USE_ITEM;
273 popup->numEntries = numEntries;
274 popup->initialPos = 0;
275 break;
276 }
280 WorldMenuDelay = 3;
282 OpenMenuDisableCount = playerStatus->inputDisabledCount;
283 }
284 break;
288 playerStatus->flags &= flags;
292 if (SwappedWorldMenus) {
297 }
298 } else {
300 if (WorldMenuDelay == 0) {
303 }
304 }
305 break;
310 WorldMenuDelay = 10;
312 return;
313 }
316 if (*partnerActionState == PARTNER_ACTION_NONE) {
318 }
320 break;
322 if (popup->result != POPUP_RESULT_INVALID) {
323 WorldPopupResult = popup->result;
326 WorldMenuDelay = 15;
328 }
329 }
330 break;
333 if (WorldMenuDelay != 0) {
334 break;
335 }
341 if ((setup_partner_popup(popup) == 0) || (setup_item_popup(popup) == 0)) {
343 } else {
344 // swap to other menu
345 switch (WorldMenuType) {
348 break;
351 break;
352 }
353 SwappedWorldMenus = true;
354 goto block_17; // TODO required to match
355 }
356 }
357
359 switch (WorldMenuType) {
362 break;
364 use_consumable(popup->userIndex[WorldPopupResult - 1]);
365#ifndef VERSION_JP
367#endif
368 break;
369 }
370 }
375 break;
378 if (WorldMenuDelay == 0) {
385 }
386 break;
387 }
388}
void create_standard_popup_menu(PopupMenu *popup)
s8 flags
Definition demo_api.c:15
@ DEBUG_SCRIPTS_NONE
Definition enums.h:3874
@ PEACH_FLAG_IS_PEACH
Definition enums.h:2474
@ STORY_INTRO
Definition enums.h:10
@ STORY_EPILOGUE
Definition enums.h:234
@ POPUP_MENU_USE_ITEM
Definition enums.h:3165
@ POPUP_MENU_SWITCH_PARTNER
Definition enums.h:3166
@ PS_FLAG_PAUSED
Definition enums.h:3074
@ PS_FLAG_NO_CHANGE_PARTNER
Definition enums.h:3075
@ POPUP_RESULT_CANCEL
Definition enums.h:3212
@ POPUP_RESULT_CHOOSING
Definition enums.h:3211
@ POPUP_RESULT_INVALID
Definition enums.h:3209
@ POPUP_RESULT_SWAP_MENU
Definition enums.h:3210
@ TIME_FREEZE_POPUP_MENU
Definition enums.h:3501
@ TIME_FREEZE_NONE
Definition enums.h:3498
@ SOUND_MENU_OPEN
Definition enums.h:699
@ GLOBAL_OVERRIDES_CANT_PICK_UP_ITEMS
Definition enums.h:3924
@ GLOBAL_OVERRIDES_40
Definition enums.h:3910
s32 evt_get_variable(Evt *script, Bytecode var)
Definition evt.c:1725
void hide_popup_menu(void)
void partner_disable_input(void)
Definition partners.c:2489
s32 disable_player_input(void)
Definition 77480.c:989
s32 enable_player_input(void)
Definition 77480.c:997
void destroy_popup_menu(void)
void switch_to_partner(s32 arg0)
Definition partners.c:906
void set_action_state(s32 actionState)
Definition 7E9D0.c:209
s32 use_consumable(s32 invSlot)
Definition partners.c:479
void set_time_freeze_mode(s32)
Time freeze modes: 0: none 1: NPCs move, can't be interacted with 2: NPCs don't move,...
Definition main_loop.c:356
void set_game_mode(s32 modeID)
Definition game_modes.c:127
@ GAME_MODE_PAUSE
Definition game_modes.h:17
void reset_outta_sight_alpha_on_menu_close(void)
Definition menus.c:36
b32 should_cancel_open_world_menu(void)
Definition menus.c:48
BSS s16 OpenMenuDisableCount
Definition menus.c:31
BSS s16 WorldPopupResult
Definition menus.c:30
b32 can_open_world_menu(s32 currentButtons, s32 pressedButtons)
Definition menus.c:80
s32 MenuIndexFromPartnerID[]
Definition 5B320.c:316
s32 setup_item_popup(PopupMenu *menu)
Definition menus.c:161
BSS s16 WorldMenuDelay
Definition menus.c:29
s32 setup_partner_popup(PopupMenu *menu)
Definition menus.c:134
BSS PopupMenu WorldPopupMenu
Definition menus.c:27
BSS s16 WorldMenuType
Definition menus.c:28
void partner_enable_input(void)
Definition partners.c:2480
@ GB_StoryProgress

Referenced by update_player().

◆ check_input_status_bar()

void check_input_status_bar ( void )

Definition at line 390 of file menus.c.

390 {
392 s32 pressedButtons;
393
395 if (playerStatus->actionState != ACTION_STATE_RIDE) {
396 pressedButtons = playerStatus->pressedButtons;
397 } else {
398 pressedButtons = gGameStatusPtr->pressedButtons[0];
399 }
400
401 if (!is_status_bar_visible()) {
402 if (!(playerStatus->curButtons & (Z_TRIG | R_TRIG))
403 && (pressedButtons & BUTTON_C_UP)
405 ) {
407#if VERSION_JP
409#else
410 if (!is_picking_up_item()) {
412 }
413#endif
414 }
415 } else if (!(playerStatus->curButtons & (Z_TRIG | R_TRIG))
416 && (pressedButtons & BUTTON_C_UP)
418 ) {
420#if VERSION_JP
422#else
423 if (!is_picking_up_item()) {
425 }
426#endif
427 }
428 }
429}
u32 pressedButtons[4]
@ BUTTON_C_UP
Definition enums.h:2766
@ SOUND_LOWER_STATUS_BAR
Definition enums.h:553
@ SOUND_RAISE_STATUS_BAR
Definition enums.h:554
b32 can_control_status_bar(void)
Definition inventory.c:1491
void close_status_bar(void)
Definition inventory.c:1450
s32 is_status_bar_visible(void)
Definition inventory.c:1536
void open_status_bar_slowly(void)
Definition inventory.c:1430

Referenced by update_player().

Variable Documentation

◆ WorldPopupMenu

BSS PopupMenu WorldPopupMenu

Definition at line 27 of file menus.c.

Referenced by check_input_open_menus().

◆ WorldMenuType

BSS s16 WorldMenuType

Definition at line 28 of file menus.c.

Referenced by check_input_open_menus().

◆ WorldMenuDelay

BSS s16 WorldMenuDelay

Definition at line 29 of file menus.c.

Referenced by check_input_open_menus().

◆ WorldPopupResult

BSS s16 WorldPopupResult

Definition at line 30 of file menus.c.

Referenced by check_input_open_menus().

◆ OpenMenuDisableCount

BSS s16 OpenMenuDisableCount

Definition at line 31 of file menus.c.

Referenced by check_input_open_menus().

◆ WorldMenuState

BSS s16 WorldMenuState

Definition at line 32 of file menus.c.

Referenced by check_input_open_menus(), and clear_world_menus().

◆ MenuIndexFromPartnerID

s32 MenuIndexFromPartnerID[]
extern

Definition at line 316 of file 5B320.c.

316 {
317 [PARTNER_NONE] 0,
319 [PARTNER_KOOPER] 2,
322 [PARTNER_GOOMPA] 0,
323 [PARTNER_WATT] 6,
324 [PARTNER_SUSHIE] 7,
326 [PARTNER_BOW] 5,
328 [PARTNER_TWINK] 0,
329};
@ PARTNER_NONE
Definition enums.h:2919
@ PARTNER_BOMBETTE
Definition enums.h:2922
@ PARTNER_TWINK
Definition enums.h:2930
@ PARTNER_PARAKARRY
Definition enums.h:2923
@ PARTNER_GOOMBARIA
Definition enums.h:2929
@ PARTNER_KOOPER
Definition enums.h:2921
@ PARTNER_GOOMBARIO
Definition enums.h:2920

Referenced by btl_state_update_partner_menu(), btl_state_update_player_menu(), and check_input_open_menus().