From bce4d00ee2383cd6f9eda01997dfdbd67de2a6d2 Mon Sep 17 00:00:00 2001 From: scbroede <32247405+scbroede@users.noreply.github.com> Date: Wed, 26 Nov 2025 18:33:12 -0500 Subject: [PATCH] document underground player conversations (#820) --- include/constants/field_base_tiles.h | 12 + include/overlay023/funcptr_ov23_0224DCB8.h | 6 - include/overlay023/funcptr_ov23_0224F758.h | 6 - include/overlay023/ov23_0224DC40.h | 22 - include/overlay023/ov23_02253598.h | 12 +- include/overlay023/underground_menu.h | 58 +- include/overlay023/underground_player_talk.h | 23 + include/render_window.h | 20 +- include/struct_defs/underground_record.h | 2 +- include/unk_0202854C.h | 4 +- platinum.us/main.lsf | 2 +- res/text/underground_answers.json | 98 +- res/text/underground_common.json | 108 +- res/text/underground_questions.json | 24 +- src/applications/bag/main.c | 6 +- src/applications/bag/windows.c | 42 +- src/main_menu/mystery_gift_app.c | 24 +- src/meson.build | 2 +- src/overlay023/ov23_0224A1D0.c | 6 +- src/overlay023/ov23_0224B05C.c | 6 +- src/overlay023/ov23_0224DC40.c | 1411 ----------------- src/overlay023/ov23_0225128C.c | 4 +- src/overlay023/ov23_022521F0.c | 2 +- src/overlay023/ov23_02253598.c | 87 +- src/overlay023/underground_menu.c | 195 ++- src/overlay023/underground_player_talk.c | 1467 ++++++++++++++++++ src/render_window.c | 18 +- src/unk_0202854C.c | 10 +- src/unk_02099500.c | 22 +- 29 files changed, 1884 insertions(+), 1815 deletions(-) create mode 100644 include/constants/field_base_tiles.h delete mode 100644 include/overlay023/funcptr_ov23_0224DCB8.h delete mode 100644 include/overlay023/funcptr_ov23_0224F758.h delete mode 100644 include/overlay023/ov23_0224DC40.h create mode 100644 include/overlay023/underground_player_talk.h delete mode 100644 src/overlay023/ov23_0224DC40.c create mode 100644 src/overlay023/underground_player_talk.c diff --git a/include/constants/field_base_tiles.h b/include/constants/field_base_tiles.h new file mode 100644 index 0000000000..22f42e58c4 --- /dev/null +++ b/include/constants/field_base_tiles.h @@ -0,0 +1,12 @@ +#ifndef POKEPLATINUM_CONSTANTS_FIELD_BASE_TILES_H +#define POKEPLATINUM_CONSTANTS_FIELD_BASE_TILES_H + +#include "render_window.h" + +#define BASE_TILE_SCROLLING_MESSAGE_BOX (1024 - SCROLLING_MESSAGE_BOX_TILE_COUNT) +#define BASE_TILE_STANDARD_WINDOW_FRAME (BASE_TILE_SCROLLING_MESSAGE_BOX - STANDARD_WINDOW_TILE_COUNT) +#define BASE_TILE_MAP_TRANSITION_DROPDOWN (BASE_TILE_STANDARD_WINDOW_FRAME - MAP_TRANSITION_DROPDOWN_TILE_COUNT) +#define BASE_TILE_SIGNPOST (BASE_TILE_MAP_TRANSITION_DROPDOWN - (SIGNPOST_FRAME_TILE_COUNT + SCROLLING_CURSOR_TILE_COUNT + SIGNPOST_CONTENT_SIZE_TILES)) +#define BASE_TILE_MESSAGE_WINDOW (BASE_TILE_SIGNPOST - MESSAGE_WINDOW_TILE_COUNT) + +#endif // POKEPLATINUM_CONSTANTS_FIELD_BASE_TILES_H diff --git a/include/overlay023/funcptr_ov23_0224DCB8.h b/include/overlay023/funcptr_ov23_0224DCB8.h deleted file mode 100644 index 45f5cd3832..0000000000 --- a/include/overlay023/funcptr_ov23_0224DCB8.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_FUNCPTR_OV23_0224DCB8_H -#define POKEPLATINUM_FUNCPTR_OV23_0224DCB8_H - -typedef void (*UnkFuncPtr_ov23_0224DCB8)(int); - -#endif // POKEPLATINUM_FUNCPTR_OV23_0224DCB8_H diff --git a/include/overlay023/funcptr_ov23_0224F758.h b/include/overlay023/funcptr_ov23_0224F758.h deleted file mode 100644 index 56aaa9cee6..0000000000 --- a/include/overlay023/funcptr_ov23_0224F758.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef POKEPLATINUM_FUNCPTR_OV23_0224F758_H -#define POKEPLATINUM_FUNCPTR_OV23_0224F758_H - -typedef void (*UnkFuncPtr_ov23_0224F758)(int); - -#endif // POKEPLATINUM_FUNCPTR_OV23_0224F758_H diff --git a/include/overlay023/ov23_0224DC40.h b/include/overlay023/ov23_0224DC40.h deleted file mode 100644 index 3385e99071..0000000000 --- a/include/overlay023/ov23_0224DC40.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef POKEPLATINUM_OV23_0224DC40_H -#define POKEPLATINUM_OV23_0224DC40_H - -#include "field/field_system_decl.h" -#include "overlay023/funcptr_ov23_0224DCB8.h" - -void ov23_0224DCB8(int param0, UnkFuncPtr_ov23_0224DCB8 param1, FieldSystem *fieldSystem); -void ov23_0224F07C(int param0, int param1, FieldSystem *fieldSystem); -void ov23_0224F0F0(int param0, int param1, void *param2, void *param3); -void ov23_0224F0FC(int param0, int param1, void *param2, void *param3); -void ov23_0224F108(int param0, int param1, void *param2, void *param3); -void ov23_0224F138(int param0, int param1, void *param2, void *param3); -int ov23_0224F174(void); -void ov23_0224F178(int param0, int param1, void *param2, void *param3); -void ov23_0224F184(int param0, int param1, void *param2, void *param3); -int ov23_0224F1F8(void); -void ov23_0224F1FC(int param0, int param1, void *param2, void *param3); -void ov23_0224F208(int param0, int param1, void *param2, void *param3); -int ov23_0224F248(void); -void ov23_0224F24C(void); - -#endif // POKEPLATINUM_OV23_0224DC40_H diff --git a/include/overlay023/ov23_02253598.h b/include/overlay023/ov23_02253598.h index 505b8a7d99..5872b192f3 100644 --- a/include/overlay023/ov23_02253598.h +++ b/include/overlay023/ov23_02253598.h @@ -16,13 +16,13 @@ void ov23_022535CC(void); void ov23_022535EC(void); void ov23_02253604(void); int ov23_02253608(void); -void ov23_02253834(BgConfig *param0, TrainerInfo *param1, UnkFuncPtr_ov23_02253834 param2, void *param3, BOOL param4); -void ov23_022538FC(int param0); +void ov23_ShowTrainerRecord(BgConfig *param0, TrainerInfo *param1, UnkFuncPtr_ov23_02253834 exitCallback, void *exitCallbackArg, BOOL isCurrentTrainer); +void ov23_SendRecord(int targetNetID); void ov23_02253968(void); -void ov23_02253998(int param0, int param1, void *param2, void *param3); -void ov23_022539A8(int param0, int param1, void *param2, void *param3); -BOOL ov23_022539D8(void); -void ov23_022539E8(void); +void ov23_SendRecordServer(int unused0, int size, void *data, void *unused3); +void ov23_ReceiveRecord(int unused0, int size, void *data, void *unused3); +BOOL ov23_IsLinkRecordReceived(void); +void ov23_ClearLinkRecordReceived(void); void ov23_02253A00(UndergroundRecord *param0, int param1); void *ov23_02253C64(BgConfig *param0, TrainerInfo *param1, Underground *underground, UnkFuncPtr_ov23_02253834 param3, void *param4); void ov23_02253D10(void *param0); diff --git a/include/overlay023/underground_menu.h b/include/overlay023/underground_menu.h index 96b7742aba..a0b9e97fe1 100644 --- a/include/overlay023/underground_menu.h +++ b/include/overlay023/underground_menu.h @@ -5,7 +5,6 @@ #include "field/field_system_decl.h" #include "overlay005/sprite_resource_manager.h" -#include "overlay023/funcptr_ov23_0224F758.h" #include "overlay023/underground_item_list_menu.h" #include "bg_window.h" @@ -29,9 +28,10 @@ enum UndergroundStartMenuOptions { UNDERGROUND_START_MENU_OPTION_COUNT, }; -typedef int (*ItemCountGetter)(void *); -typedef int (*ItemGetter)(int, void *); -typedef int (*SphereSizeGetter)(int, void *); +typedef void (*ExitCallback)(int selectedID); +typedef int (*GetItemCountFunc)(void *menu); +typedef int (*GetItemFunc)(int slot, void *menu); +typedef int (*GetSphereSizeFunc)(int slot, void *menu); typedef struct UndergroundMenu { void *openMenuFn; @@ -57,10 +57,10 @@ typedef struct UndergroundMenu { SpriteResourceManager spriteManager; ManagedSprite *sprites[UNDERGROUND_START_MENU_OPTION_COUNT + 1]; u32 spriteCount; - UnkFuncPtr_ov23_0224F758 unk_260; - ItemCountGetter itemCountGetter; - ItemGetter itemGetter; - SphereSizeGetter sphereSizeGetter; + ExitCallback exitCallback; + GetItemCountFunc getItemCount; + GetItemFunc getItem; + GetSphereSizeFunc getSphereSize; void *unk_270; u8 unk_274[5]; u8 unk_279[5]; @@ -87,37 +87,37 @@ typedef struct UndergroundMenu { void UndergroundMenuContext_Init(Underground *underground); void UndergroundMenuContext_Free(void); -int UndergroundMenu_GetGoodAtSlotPC(int slot, void *param1); -int UndergroundMenu_GetGoodAtSlotBag(int slot, void *param1); +int UndergroundMenu_GetGoodAtSlotPC(int slot, void *menu); +int UndergroundMenu_GetGoodAtSlotBag(int slot, void *menu); void UndergroundMenu_RemoveSelectedGoodBag(int goodID); -int UndergroundMenu_GetTrapAtSlot(int slot, void *param1); -int UndergroundMenu_GetSphereTypeAtSlot(int slot, void *param1); -int UndergroundMenu_GetSphereSizeAtSlot(int slot, void *param1); -int UndergroundMenu_GetTreasureAtSlot(int slot, void *param1); +int UndergroundMenu_GetTrapAtSlot(int slot, void *menu); +int UndergroundMenu_GetSphereTypeAtSlot(int slot, void *menu); +int UndergroundMenu_GetSphereSizeAtSlot(int slot, void *menu); +int UndergroundMenu_GetTreasureAtSlot(int slot, void *menu); BOOL UndergroundInventory_TryAddSphere(int sphereType, int sphereSize); BOOL UndergroundInventory_TryAddTreasure(int treasureID); BOOL UndergroundInventory_TryAddTrap(int trapID); BOOL UndergroundInventory_TryAddGoodBag(int goodID); -void UndergroundMenu_Start(UnkFuncPtr_ov23_0224F758 param0, FieldSystem *fieldSystem); -void UndergroundMenu_EraseCurrentMenu(UndergroundMenu *param0); +void UndergroundMenu_Start(ExitCallback exitCallback, FieldSystem *fieldSystem); +void UndergroundMenu_EraseCurrentMenu(UndergroundMenu *menu); void UndergroundMenu_RemoveSelectedTrap(int trapID); void UndergroundMenu_PrintTrapDescription(ListMenu *listMenu, u32 index, u8 onInit); -void ov23_0224FDBC(UndergroundMenu *param0); -void UndergroundMenu_OpenTrapsMenu(UndergroundMenu *param0); +void ov23_0224FDBC(UndergroundMenu *menu); +void UndergroundMenu_OpenTrapsMenu(UndergroundMenu *menu); void UndergroundMenu_RemoveSelectedSphere(int sphereType); -void ov23_02250184(UndergroundMenu *param0); +void ov23_02250184(UndergroundMenu *menu); void UndergroundMenu_PrintTreasureDescription(ListMenu *listMenu, u32 index, u8 onInit); -void ov23_02250578(UndergroundMenu *param0); -void UndergroundMenu_OpenTreasuresMenu(UndergroundMenu *param0); -void UndergroundMenu_StartHoldingFlag(UnkFuncPtr_ov23_0224F758 param0, FieldSystem *fieldSystem); +void ov23_02250578(UndergroundMenu *menu); +void UndergroundMenu_OpenTreasuresMenu(UndergroundMenu *menu); +void UndergroundMenu_StartHoldingFlag(ExitCallback exitCallback, FieldSystem *fieldSystem); void UndergroundMenu_PrintGoodDescription(ListMenu *listMenu, u32 index, u8 onInit); -void ov23_02250CB0(UndergroundMenu *param0); -void UndergroundMenu_OpenGoodsMenu(UndergroundMenu *param0); -void ov23_02250D2C(UndergroundMenu *param0); -void ov23_02250D5C(UndergroundMenu *param0); -void ov23_02251044(void *param0, u32 param1); -void *ov23_022511B0(UnkFuncPtr_ov23_0224F758 param0, FieldSystem *fieldSystem); -void UndergroundMenu_MoveListCursorPosInBounds(UndergroundMenu *param0, int param1, int param2); +void ov23_02250CB0(UndergroundMenu *menu); +void UndergroundMenu_OpenGoodsMenu(UndergroundMenu *menu); +void ov23_02250D2C(UndergroundMenu *menu); +void ov23_02250D5C(UndergroundMenu *menu); +void UndergroundMenu_ExitGiftMenu(void *data, u32 input); +void *UndergroundMenu_StartGiftMenu(ExitCallback exitCallback, FieldSystem *fieldSystem); +void UndergroundMenu_MoveListCursorPosInBounds(UndergroundMenu *menu, int maxDisplay, int count); void ov23_02251270(SysTask *sysTask, void *param1); #endif // POKEPLATINUM_OV23_0224F294_H diff --git a/include/overlay023/underground_player_talk.h b/include/overlay023/underground_player_talk.h new file mode 100644 index 0000000000..d25198c1a2 --- /dev/null +++ b/include/overlay023/underground_player_talk.h @@ -0,0 +1,23 @@ +#ifndef POKEPLATINUM_UNDERGROUND_PLAYER_TALK_H +#define POKEPLATINUM_UNDERGROUND_PLAYER_TALK_H + +#include "field/field_system_decl.h" + +typedef void (*ExitCallback)(int); + +void UndergroundTalk_Start(int linkNetID, ExitCallback exitCallback, FieldSystem *fieldSystem); +void UndergroundTalkResponse_Start(int unused, int linkNetID, FieldSystem *fieldSystem); +void UndergroundTalk_RequestLinkTalkStateUpdateServer(int unused0, int unused1, void *data, void *unused3); +void UndergroundTalkResponse_RequestLinkTalkStateUpdateServer(int unused0, int unused1, void *data, void *unused3); +void UndergroundTalkResponse_HandleLinkTalkStateUpdateServer(int unused0, int size, void *data, void *unused3); +void UndergroundTalk_HandleLinkTalkStateUpdateServer(int unused0, int size, void *data, void *unused3); +int CommPacketSizeOf_TalkStateChangeRequest(void); +void UndergroundTalk_SendGiftServer(int unused0, int unused1, void *data, void *unused3); +void UndergroundTalkResponse_ReceiveGiftOffer(int unused0, int unused1, void *data, void *unused3); +int CommPacketSizeOf_Gift(void); +void UndergroundTalk_SendTalkMessageServer(int unused0, int unused1, void *data, void *unused3); +void UndergroundTalk_ReceiveTalkMessage(int unused0, int unused1, void *data, void *unused3); +int CommPacketSizeOf_TalkMessage(void); +void UndergroundTalk_ExitConversation(void); + +#endif // POKEPLATINUM_UNDERGROUND_PLAYER_TALK_H diff --git a/include/render_window.h b/include/render_window.h index 47fc3b9d28..8cf7b04ff9 100644 --- a/include/render_window.h +++ b/include/render_window.h @@ -12,12 +12,17 @@ #define STANDARD_WINDOW_TILE_H 3 #define STANDARD_WINDOW_TILE_COUNT (STANDARD_WINDOW_TILE_W * STANDARD_WINDOW_TILE_H) -// These are for the typical dialogue window used by, for example, NPC conversations. The frame -// style for this window is customizable by the player, but its size is still constant. +// These are for the typical dialogue window frame used by, for example, NPC conversations. +// The frame style for this window is customizable by the player, but its size is still constant. #define MESSAGE_BOX_TILE_W 6 #define MESSAGE_BOX_TILE_H 3 #define MESSAGE_BOX_TILE_COUNT (MESSAGE_BOX_TILE_W * MESSAGE_BOX_TILE_H) +// These are the blank tiles in the dialogue window where messages get printed. +#define MESSAGE_WINDOW_TILE_W 27 +#define MESSAGE_WINDOW_TILE_H 4 +#define MESSAGE_WINDOW_TILE_COUNT (MESSAGE_WINDOW_TILE_W * MESSAGE_WINDOW_TILE_H) + // This is for the down arrow used as a prompt for dialogue that must wrap its text across viewports // or information dialogues which otherwise wait for player confirmation before the text disappears. #define SCROLLING_CURSOR_FRAME_TILE_W 2 @@ -27,6 +32,17 @@ #define SCROLLING_CURSOR_TILE_COUNT (SCROLLING_CURSOR_FRAME_TILE_COUNT * SCROLLING_CURSOR_FRAME_COUNT) #define SCROLLING_MESSAGE_BOX_TILE_COUNT (MESSAGE_BOX_TILE_COUNT + SCROLLING_CURSOR_TILE_COUNT) +#define MAP_TRANSITION_DROPDOWN_TILE_W 32 +#define MAP_TRANSITION_DROPDOWN_TILE_H 8 +#define MAP_TRANSITION_DROPDOWN_TILE_COUNT (MAP_TRANSITION_DROPDOWN_TILE_W * MAP_TRANSITION_DROPDOWN_TILE_H) + +#define SIGNPOST_CONTENT_WIDTH_TILES 6 +#define SIGNPOST_CONTENT_HEIGHT_TILES 4 +#define SIGNPOST_CONTENT_SIZE_TILES (SIGNPOST_CONTENT_WIDTH_TILES * SIGNPOST_CONTENT_HEIGHT_TILES) +#define SIGNPOST_FRAME_TILE_W 6 +#define SIGNPOST_FRAME_TILE_H 3 +#define SIGNPOST_FRAME_TILE_COUNT (SIGNPOST_FRAME_TILE_W * SIGNPOST_FRAME_TILE_H) + typedef struct WaitDial WaitDial; enum StandardWindowType { diff --git a/include/struct_defs/underground_record.h b/include/struct_defs/underground_record.h index b5b9df92ee..b3e0786589 100644 --- a/include/struct_defs/underground_record.h +++ b/include/struct_defs/underground_record.h @@ -12,7 +12,7 @@ typedef struct UndergroundRecord { u32 numTrapHits : 20; u32 numTrapsTriggered : 20; u32 numPlayersHelped : 20; - u32 unk_28_0 : 20; + u32 numGiftsReceived : 20; u32 unk_2C_0 : 20; u32 unk_30_0 : 20; u32 unk_34_0 : 20; diff --git a/include/unk_0202854C.h b/include/unk_0202854C.h index c5d3c35f8b..e0dfb78e03 100644 --- a/include/unk_0202854C.h +++ b/include/unk_0202854C.h @@ -125,8 +125,8 @@ int UndergroundRecord_GetNumTrapsTriggered(const UndergroundRecord *undergroundR void UndergroundRecord_IncrementNumTrapsTriggered(UndergroundRecord *undergroundRecord); int UndergroundRecord_GetNumPlayersHelped(const UndergroundRecord *undergroundRecord); void UndergroundRecord_IncrementNumPlayersHelped(UndergroundRecord *undergroundRecord); -int sub_02029774(const UndergroundRecord *param0); -void sub_0202977C(UndergroundRecord *param0); +int UndergroundRecord_GetGiftsReceived(const UndergroundRecord *undergroundRecord); +void UndergroundRecord_IncrementGiftsReceived(UndergroundRecord *undergroundRecord); int sub_020297AC(const UndergroundRecord *param0); void sub_020297B4(UndergroundRecord *param0); int sub_020297E4(const UndergroundRecord *param0); diff --git a/platinum.us/main.lsf b/platinum.us/main.lsf index d5cb093a7c..8bf5b88d62 100644 --- a/platinum.us/main.lsf +++ b/platinum.us/main.lsf @@ -849,7 +849,7 @@ Overlay overlay23 Object main.nef.p/src_overlay023_ov23_022499E4.c.o Object main.nef.p/src_overlay023_ov23_0224A1D0.c.o Object main.nef.p/src_overlay023_ov23_0224B05C.c.o - Object main.nef.p/src_overlay023_ov23_0224DC40.c.o + Object main.nef.p/src_overlay023_underground_player_talk.c.o Object main.nef.p/src_overlay023_underground_menu.c.o Object main.nef.p/src_overlay023_ov23_0225128C.c.o Object main.nef.p/src_overlay023_ov23_022521F0.c.o diff --git a/res/text/underground_answers.json b/res/text/underground_answers.json index 05bcef576f..a205080bb6 100644 --- a/res/text/underground_answers.json +++ b/res/text/underground_answers.json @@ -2,199 +2,199 @@ "key": 29622, "messages": [ { - "id": "pl_msg_00000632_00000", + "id": "UndergroundAnswers_Text_Red", "en_US": "Red" }, { - "id": "pl_msg_00000632_00001", + "id": "UndergroundAnswers_Text_Blue", "en_US": "Blue" }, { - "id": "pl_msg_00000632_00002", + "id": "UndergroundAnswers_Text_Yellow", "en_US": "Yellow" }, { - "id": "pl_msg_00000632_00003", + "id": "UndergroundAnswers_Text_Green", "en_US": "Green" }, { - "id": "pl_msg_00000632_00004", + "id": "UndergroundAnswers_Text_Baseball", "en_US": "Baseball" }, { - "id": "pl_msg_00000632_00005", + "id": "UndergroundAnswers_Text_Soccer", "en_US": "Soccer" }, { - "id": "pl_msg_00000632_00006", + "id": "UndergroundAnswers_Text_Swimming", "en_US": "Swimming" }, { - "id": "pl_msg_00000632_00007", + "id": "UndergroundAnswers_Text_Marathon", "en_US": "Marathon" }, { - "id": "pl_msg_00000632_00008", + "id": "UndergroundAnswers_Text_TheSea", "en_US": "The sea" }, { - "id": "pl_msg_00000632_00009", + "id": "UndergroundAnswers_Text_Mountains", "en_US": "Mountains" }, { - "id": "pl_msg_00000632_00010", + "id": "UndergroundAnswers_Text_Fields", "en_US": "Fields" }, { - "id": "pl_msg_00000632_00011", + "id": "UndergroundAnswers_Text_Towns", "en_US": "Towns" }, { - "id": "pl_msg_00000632_00012", + "id": "UndergroundAnswers_Text_Language_FavoriteClass", "en_US": "Language" }, { - "id": "pl_msg_00000632_00013", + "id": "UndergroundAnswers_Text_Math_FavoriteClass", "en_US": "Math" }, { - "id": "pl_msg_00000632_00014", + "id": "UndergroundAnswers_Text_Science_FavoriteClass", "en_US": "Science" }, { - "id": "pl_msg_00000632_00015", + "id": "UndergroundAnswers_Text_SocialStudies_FavoriteClass", "en_US": "Social Studies" }, { - "id": "pl_msg_00000632_00016", + "id": "UndergroundAnswers_Text_Language_LeastFavoriteClass", "en_US": "Language" }, { - "id": "pl_msg_00000632_00017", + "id": "UndergroundAnswers_Text_Math_LeastFavoriteClass", "en_US": "Math" }, { - "id": "pl_msg_00000632_00018", + "id": "UndergroundAnswers_Text_Science_LeastFavoriteClass", "en_US": "Science" }, { - "id": "pl_msg_00000632_00019", + "id": "UndergroundAnswers_Text_SocialStudies_LeastFavoriteClass", "en_US": "Social Studies" }, { - "id": "pl_msg_00000632_00020", + "id": "UndergroundAnswers_Text_PokemonCollecting", "en_US": "Pokémon collecting" }, { - "id": "pl_msg_00000632_00021", + "id": "UndergroundAnswers_Text_PokemonBattles", "en_US": "Pokémon battles" }, { - "id": "pl_msg_00000632_00022", + "id": "UndergroundAnswers_Text_Contests", "en_US": "Contests" }, { - "id": "pl_msg_00000632_00023", + "id": "UndergroundAnswers_Text_GoingUnderground", "en_US": "Going underground" }, { - "id": "pl_msg_00000632_00024", + "id": "UndergroundAnswers_Text_KindPeople", "en_US": "Kind people" }, { - "id": "pl_msg_00000632_00025", + "id": "UndergroundAnswers_Text_StrongPeople", "en_US": "Strong people" }, { - "id": "pl_msg_00000632_00026", + "id": "UndergroundAnswers_Text_FunnyPeople", "en_US": "Funny people" }, { - "id": "pl_msg_00000632_00027", + "id": "UndergroundAnswers_Text_SmartPeople", "en_US": "Smart people" }, { - "id": "pl_msg_00000632_00028", + "id": "UndergroundAnswers_Text_Clothes", "en_US": "Clothes" }, { - "id": "pl_msg_00000632_00029", + "id": "UndergroundAnswers_Text_Books", "en_US": "Books" }, { - "id": "pl_msg_00000632_00030", + "id": "UndergroundAnswers_Text_Food", "en_US": "Food" }, { - "id": "pl_msg_00000632_00031", + "id": "UndergroundAnswers_Text_Games", "en_US": "Games" }, { - "id": "pl_msg_00000632_00032", + "id": "UndergroundAnswers_Text_GetHappy", "en_US": "Get happy" }, { - "id": "pl_msg_00000632_00033", + "id": "UndergroundAnswers_Text_GetRich", "en_US": "Get rich" }, { - "id": "pl_msg_00000632_00034", + "id": "UndergroundAnswers_Text_GetFamous", "en_US": "Get famous" }, { - "id": "pl_msg_00000632_00035", + "id": "UndergroundAnswers_Text_BecomeNo1", "en_US": "Become no. 1" }, { - "id": "pl_msg_00000632_00036", + "id": "UndergroundAnswers_Text_SweetFood", "en_US": "Sweet food" }, { - "id": "pl_msg_00000632_00037", + "id": "UndergroundAnswers_Text_SpicyFood", "en_US": "Spicy food" }, { - "id": "pl_msg_00000632_00038", + "id": "UndergroundAnswers_Text_SaltyFood", "en_US": "Salty food" }, { - "id": "pl_msg_00000632_00039", + "id": "UndergroundAnswers_Text_SourFood", "en_US": "Sour food" }, { - "id": "pl_msg_00000632_00040", + "id": "UndergroundAnswers_Text_CutePokemon", "en_US": "Cute Pokémon" }, { - "id": "pl_msg_00000632_00041", + "id": "UndergroundAnswers_Text_StrongPokemon", "en_US": "Strong Pokémon" }, { - "id": "pl_msg_00000632_00042", + "id": "UndergroundAnswers_Text_CoolPokemon", "en_US": "Cool Pokémon" }, { - "id": "pl_msg_00000632_00043", + "id": "UndergroundAnswers_Text_WeakPokemon", "en_US": "Weak Pokémon" }, { - "id": "pl_msg_00000632_00044", + "id": "UndergroundAnswers_Text_PlayOutside", "en_US": "Play outside" }, { - "id": "pl_msg_00000632_00045", + "id": "UndergroundAnswers_Text_GoShopping", "en_US": "Go shopping" }, { - "id": "pl_msg_00000632_00046", + "id": "UndergroundAnswers_Text_Study", "en_US": "Study" }, { - "id": "pl_msg_00000632_00047", + "id": "UndergroundAnswers_Text_Sleep", "en_US": "Sleep" }, { - "id": "pl_msg_00000632_00048", + "id": "UndergroundAnswers_Text_DontKnow", "en_US": "Don’t know" } ] diff --git a/res/text/underground_common.json b/res/text/underground_common.json index 528e028aff..55ccd83eea 100644 --- a/res/text/underground_common.json +++ b/res/text/underground_common.json @@ -2,7 +2,7 @@ "key": 37978, "messages": [ { - "id": "pl_msg_00000634_00000", + "id": "UndergroundCommon_Text_HeyThere", "en_US": [ "Hey, there!\n", "What’s up?" @@ -20,23 +20,23 @@ ] }, { - "id": "pl_msg_00000634_00003", + "id": "UndergroundCommon_Text_Greet", "en_US": "GREET" }, { - "id": "pl_msg_00000634_00004", + "id": "UndergroundCommon_Text_Question", "en_US": "QUESTION" }, { - "id": "pl_msg_00000634_00005", + "id": "UndergroundCommon_Text_GiveGoods", "en_US": "GIVE GOODS" }, { - "id": "pl_msg_00000634_00006", + "id": "UndergroundCommon_Text_Exit", "en_US": "EXIT" }, { - "id": "pl_msg_00000634_00007", + "id": "UndergroundCommon_Text_IllShowTrainerCaseAsWell", "en_US": [ "You’re going to show me your Trainer\n", "Case?\r", @@ -45,7 +45,7 @@ ] }, { - "id": "pl_msg_00000634_00008", + "id": "UndergroundCommon_Text_CantFindMyTrainerCase", "en_US": [ "Huh? I can’t seem to find my Trainer\n", "Case.\r", @@ -54,32 +54,32 @@ ] }, { - "id": "pl_msg_00000634_00009", + "id": "UndergroundCommon_Text_DontBeAStranger", "en_US": [ "Thank you!\n", "Please don’t be a stranger!\r" ] }, { - "id": "pl_msg_00000634_00010", + "id": "UndergroundCommon_Text_DoSomethingElsePrompt", "en_US": "Would you like to do something else?" }, { - "id": "pl_msg_00000634_00011", + "id": "UndergroundCommon_Text_NextTimeWillBeFine", "en_US": [ "Oh, that’s OK.\n", "Next time will be fine." ] }, { - "id": "pl_msg_00000634_00012", + "id": "UndergroundCommon_Text_YouWantToGiveMeGiftPrompt", "en_US": [ "Huh? You want to give me your\n", "{STRVAR_1 25, 2, 0}?" ] }, { - "id": "pl_msg_00000634_00013", + "id": "UndergroundCommon_Text_ICantTakeThatFromYou", "en_US": [ "Thanks, but no.\n", "I can’t take that from you.\r", @@ -87,7 +87,7 @@ ] }, { - "id": "pl_msg_00000634_00014", + "id": "UndergroundCommon_Text_GiftWasGiven", "en_US": [ "Thank you!\r", "Your {STRVAR_1 25, 2, 0}\n", @@ -95,7 +95,7 @@ ] }, { - "id": "pl_msg_00000634_00015", + "id": "UndergroundCommon_Text_OkSeeYou", "en_US": "OK, see you!" }, { @@ -143,7 +143,7 @@ ] }, { - "id": "pl_msg_00000634_00022", + "id": "UndergroundCommon_Text_Hello", "en_US": "Hello!" }, { @@ -151,7 +151,7 @@ "garbage": 16 }, { - "id": "pl_msg_00000634_00024", + "id": "UndergroundCommon_Text_ExchangeTrainerCasePrompt", "en_US": [ "I’ll let you see my Trainer Case.\r", "May I see your Trainer Case?" @@ -165,18 +165,18 @@ ] }, { - "id": "pl_msg_00000634_00026", + "id": "UndergroundCommon_Text_GladToHaveMetYou", "en_US": [ "Glad to have met you,\n", "{STRVAR_1 3, 0, 0}!" ] }, { - "id": "pl_msg_00000634_00027", + "id": "UndergroundCommon_Text_So", "en_US": "So..." }, { - "id": "pl_msg_00000634_00028", + "id": "UndergroundCommon_Text_YouCanHaveThisGift", "en_US": [ "Oh, right! You can have this\n", "{STRVAR_1 25, 2, 0}!\r", @@ -184,14 +184,14 @@ ] }, { - "id": "pl_msg_00000634_00029", + "id": "UndergroundCommon_Text_DoYouHaveOneAlready", "en_US": [ "Oh?\n", "Do you have one already?" ] }, { - "id": "pl_msg_00000634_00030", + "id": "UndergroundCommon_Text_LinkDoesntHaveRoom", "en_US": [ "Oh? You don’t have room for it in\n", "your Bag.\r", @@ -199,7 +199,7 @@ ] }, { - "id": "pl_msg_00000634_00031", + "id": "UndergroundCommon_Text_YouReceivedGift", "en_US": [ "OK, here you go!\n", "Take care of it!\r", @@ -522,14 +522,14 @@ ] }, { - "id": "pl_msg_00000634_00086", + "id": "UndergroundCommon_Text_CantAcceptImportant", "en_US": [ "I can’t accept anything that\n", "important!" ] }, { - "id": "pl_msg_00000634_00087", + "id": "UndergroundCommon_Text_IllPass", "en_US": [ "Thanks for the offer, but I’ll pass.\n", "See you again tomorrow." @@ -774,35 +774,35 @@ "en_US": "PUT IN BAG" }, { - "id": "pl_msg_00000634_00136", + "id": "UndergroundCommon_Text_YouWantedToAskSomething_Male", "en_US": [ "What’s that?\n", "You wanted to ask me something?" ] }, { - "id": "pl_msg_00000634_00137", + "id": "UndergroundCommon_Text_LetMeThink_Male", "en_US": [ "{STRVAR_1 29, 5, 0}?\n", "Let me see..." ] }, { - "id": "pl_msg_00000634_00138", + "id": "UndergroundCommon_Text_IHaveAnswerWhatsYours_Male", "en_US": [ "Yeah, I guess I have an answer.\r", "What would your answer be?" ] }, { - "id": "pl_msg_00000634_00139", + "id": "UndergroundCommon_Text_ICantDecide_Male", "en_US": [ "Hmm...\n", "I can’t really decide.\r" ] }, { - "id": "pl_msg_00000634_00140", + "id": "UndergroundCommon_Text_ResponseAnswer_Male", "en_US": [ "Oh, really?\n", "{STRVAR_1 30, 5, 0}?\r", @@ -811,7 +811,7 @@ ] }, { - "id": "pl_msg_00000634_00141", + "id": "UndergroundCommon_Text_ResponseSameAnswer_Male", "en_US": [ "Oh, really?\n", "{STRVAR_1 30, 5, 0}?\r", @@ -822,32 +822,32 @@ ] }, { - "id": "pl_msg_00000634_00142", + "id": "UndergroundCommon_Text_ISee_Male", "en_US": "I see..." }, { - "id": "pl_msg_00000634_00143", + "id": "UndergroundCommon_Text_MayIAskQuestion_Male", "en_US": [ "Hi, may I ask you a question?\r", "Let’s see...\r" ] }, { - "id": "pl_msg_00000634_00144", + "id": "UndergroundCommon_Text_WhatsYourChoice_Male", "en_US": [ "How’s this? {STRVAR_1 29, 5, 0}!\n", "What’s your choice?" ] }, { - "id": "pl_msg_00000634_00145", + "id": "UndergroundCommon_Text_YouDontHaveToAnswer_Male", "en_US": [ "Oh, don’t worry! You don’t have to\n", "answer if you don’t want to.\r" ] }, { - "id": "pl_msg_00000634_00146", + "id": "UndergroundCommon_Text_YouveDecidedLetMeThink_Male", "en_US": [ "You’ve decided?\r", "Well, let me see...\n", @@ -855,7 +855,7 @@ ] }, { - "id": "pl_msg_00000634_00147", + "id": "UndergroundCommon_Text_Answer_Male", "en_US": [ "{STRVAR_1 30, 5, 0} would be\n", "my answer, I guess.\r", @@ -865,7 +865,7 @@ ] }, { - "id": "pl_msg_00000634_00148", + "id": "UndergroundCommon_Text_SameAnswer_Male", "en_US": [ "{STRVAR_1 30, 5, 0} would be\n", "my answer, I guess.\r", @@ -877,11 +877,11 @@ ] }, { - "id": "pl_msg_00000634_00149", + "id": "UndergroundCommon_Text_ISee2_Male", "en_US": "I see..." }, { - "id": "pl_msg_00000634_00150", + "id": "UndergroundCommon_Text_ThanksForAnswering_Male", "en_US": [ "Thanks for answering!\r", "I hope to see you around!\r" @@ -904,21 +904,21 @@ "garbage": 24 }, { - "id": "pl_msg_00000634_00155", + "id": "UndergroundCommon_Text_YouWantedToAskSomething_Female", "en_US": [ "Pardon me?\n", "You wanted to ask me something?" ] }, { - "id": "pl_msg_00000634_00156", + "id": "UndergroundCommon_Text_LetMeThink_Female", "en_US": [ "{STRVAR_1 29, 5, 0}?\n", "Well, let me think..." ] }, { - "id": "pl_msg_00000634_00157", + "id": "UndergroundCommon_Text_IHaveAnswerWhatsYours_Female", "en_US": [ "Yes, I’ve decided!\r", "If it were you, what would you\n", @@ -926,14 +926,14 @@ ] }, { - "id": "pl_msg_00000634_00158", + "id": "UndergroundCommon_Text_ICantDecide_Female", "en_US": [ "I don’t know...\n", "I can’t really decide.\r" ] }, { - "id": "pl_msg_00000634_00159", + "id": "UndergroundCommon_Text_ResponseAnswer_Female", "en_US": [ "Is that right?\n", "{STRVAR_1 30, 5, 0}?\r", @@ -942,7 +942,7 @@ ] }, { - "id": "pl_msg_00000634_00160", + "id": "UndergroundCommon_Text_ResponseSameAnswer_Female", "en_US": [ "Is that right?\n", "{STRVAR_1 30, 5, 0}?\r", @@ -953,32 +953,32 @@ ] }, { - "id": "pl_msg_00000634_00161", + "id": "UndergroundCommon_Text_ISee_Female", "en_US": "I see..." }, { - "id": "pl_msg_00000634_00162", + "id": "UndergroundCommon_Text_MayIAskQuestion_Female", "en_US": [ "Hi, may I ask you a question?\r", "Let’s see...\r" ] }, { - "id": "pl_msg_00000634_00163", + "id": "UndergroundCommon_Text_WhatsYourChoice_Female", "en_US": [ "How’s this? {STRVAR_1 29, 5, 0}!\n", "What’s your choice out of these?" ] }, { - "id": "pl_msg_00000634_00164", + "id": "UndergroundCommon_Text_YouDontHaveToAnswer_Female", "en_US": [ "Not to worry! You don’t have to\n", "answer if you don’t want to.\r" ] }, { - "id": "pl_msg_00000634_00165", + "id": "UndergroundCommon_Text_YouveDecidedLetMeThink_Female", "en_US": [ "You’ve decided?\r", "Well, let me think...\n", @@ -986,7 +986,7 @@ ] }, { - "id": "pl_msg_00000634_00166", + "id": "UndergroundCommon_Text_Answer_Female", "en_US": [ "{STRVAR_1 30, 5, 0}, maybe?\r", "What did you choose?\r", @@ -995,7 +995,7 @@ ] }, { - "id": "pl_msg_00000634_00167", + "id": "UndergroundCommon_Text_SameAnswer_Female", "en_US": [ "{STRVAR_1 30, 5, 0}, maybe?\r", "What did you choose?\r", @@ -1006,11 +1006,11 @@ ] }, { - "id": "pl_msg_00000634_00168", + "id": "UndergroundCommon_Text_ISee2_Female", "en_US": "I see..." }, { - "id": "pl_msg_00000634_00169", + "id": "UndergroundCommon_Text_ThanksForAnswering_Female", "en_US": [ "Thanks for answering!\r", "I hope to see you around!\r" diff --git a/res/text/underground_questions.json b/res/text/underground_questions.json index fefa35d839..3b09e801ad 100644 --- a/res/text/underground_questions.json +++ b/res/text/underground_questions.json @@ -2,51 +2,51 @@ "key": 63468, "messages": [ { - "id": "pl_msg_00000633_00000", + "id": "UndergroundQuestions_Text_FavoriteColor", "en_US": "Favorite color" }, { - "id": "pl_msg_00000633_00001", + "id": "UndergroundQuestions_Text_FavoriteSport", "en_US": "Favorite sport" }, { - "id": "pl_msg_00000633_00002", + "id": "UndergroundQuestions_Text_FavoritePlace", "en_US": "Favorite place" }, { - "id": "pl_msg_00000633_00003", + "id": "UndergroundQuestions_Text_FavoriteClass", "en_US": "Favorite class" }, { - "id": "pl_msg_00000633_00004", + "id": "UndergroundQuestions_Text_LeastFavoriteClass", "en_US": "Least favorite class" }, { - "id": "pl_msg_00000633_00005", + "id": "UndergroundQuestions_Text_FavoriteThing", "en_US": "Favorite thing" }, { - "id": "pl_msg_00000633_00006", + "id": "UndergroundQuestions_Text_FavoritePersonality", "en_US": "Favorite personality" }, { - "id": "pl_msg_00000633_00007", + "id": "UndergroundQuestions_Text_MostWantedThing", "en_US": "Most wanted thing" }, { - "id": "pl_msg_00000633_00008", + "id": "UndergroundQuestions_Text_OwnDream", "en_US": "Own dream" }, { - "id": "pl_msg_00000633_00009", + "id": "UndergroundQuestions_Text_FoodIWantNow", "en_US": "Food I want now" }, { - "id": "pl_msg_00000633_00010", + "id": "UndergroundQuestions_Text_FavoritePokemon", "en_US": "Favorite Pokémon" }, { - "id": "pl_msg_00000633_00011", + "id": "UndergroundQuestions_Text_HolidayActivity", "en_US": "Holiday activity" } ] diff --git a/src/applications/bag/main.c b/src/applications/bag/main.c index 535fdaa295..a0ed7ccc37 100644 --- a/src/applications/bag/main.c +++ b/src/applications/bag/main.c @@ -59,8 +59,8 @@ #define DIAL_RADIUS 80 #define DIAL_BUTTON_RADIUS 24 -#define BASE_TILE_STANDARD_WINDOW_FRAME (1024 - STANDARD_WINDOW_TILE_COUNT) -#define BASE_TILE_MSG_BOX_FRAME (BASE_TILE_STANDARD_WINDOW_FRAME - SCROLLING_MESSAGE_BOX_TILE_COUNT) +#define BASE_TILE_BAG_WINDOW_FRAME (1024 - STANDARD_WINDOW_TILE_COUNT) +#define BASE_TILE_MSG_BOX_FRAME (BASE_TILE_BAG_WINDOW_FRAME - SCROLLING_MESSAGE_BOX_TILE_COUNT) #define ITEM_LIST_EMPTY_ENTRY -3 @@ -832,7 +832,7 @@ static void LoadGraphics(BagController *controller) Graphics_LoadPaletteFromOpenNARC(controller->bagGraphicsNARC, bag_ui_main_NCLR, PAL_LOAD_MAIN_BG, PLTT_OFFSET(0), 0, HEAP_ID_BAG); Graphics_LoadPaletteFromOpenNARC(controller->bagGraphicsNARC, pocket_selector_icons_NCLR, PAL_LOAD_MAIN_BG, PLTT_OFFSET(13), PALETTE_SIZE_BYTES, HEAP_ID_BAG); Font_LoadScreenIndicatorsPalette(0, PLTT_OFFSET(11), HEAP_ID_BAG); - LoadStandardWindowGraphics(controller->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_14, STANDARD_WINDOW_SYSTEM, HEAP_ID_BAG); + LoadStandardWindowGraphics(controller->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_BAG_WINDOW_FRAME, PLTT_14, STANDARD_WINDOW_SYSTEM, HEAP_ID_BAG); LoadMessageBoxGraphics(controller->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_MSG_BOX_FRAME, PLTT_12, Options_Frame(controller->options), HEAP_ID_BAG); Graphics_LoadTilesToBgLayerFromOpenNARC(controller->bagGraphicsNARC, pokeball_borders_tileset_NCGR, controller->bgConfig, BG_LAYER_SUB_1, 0, 0, FALSE, HEAP_ID_BAG); Graphics_LoadPaletteFromOpenNARC(controller->bagGraphicsNARC, pokeball_borders_NCLR, PAL_LOAD_SUB_BG, PLTT_OFFSET(0), 0, HEAP_ID_BAG); diff --git a/src/applications/bag/windows.c b/src/applications/bag/windows.c index 01a008b3d0..5a3bab4ee4 100644 --- a/src/applications/bag/windows.c +++ b/src/applications/bag/windows.c @@ -52,21 +52,21 @@ #define POFFIN_COUNT_WINDOW_WIDTH 11 #define POFFIN_COUNT_WINDOW_HEIGHT TEXT_LINES_TILES(2) -#define BASE_TILE_ITEM_LIST 1 -#define BASE_TILE_ITEM_DESCRIPTION (BASE_TILE_ITEM_LIST + (ITEM_LIST_WINDOW_WIDTH * ITEM_LIST_WINDOW_HEIGHT)) -#define BASE_TILE_POCKET_NAMES (BASE_TILE_ITEM_DESCRIPTION + ITEM_DESCRIPTION_WINDOW_WIDTH * ITEM_DESCRIPTION_WINDOW_HEIGHT) -#define BASE_TILE_MSG_BOX (BASE_TILE_POCKET_NAMES + POCKET_NAMES_WINDOW_WIDTH * POCKET_NAMES_WINDOW_HEIGHT) -#define BASE_TILE_MSG_BOX_NARROW BASE_TILE_MSG_BOX -#define BASE_TILE_POCKET_SELECTOR (BASE_TILE_MSG_BOX + MSG_BOX_WINDOW_WIDTH * MSG_BOX_WINDOW_HEIGHT) -#define BASE_TILE_MSG_BOX_WIDE (BASE_TILE_POCKET_SELECTOR + POCKET_SELECTOR_WINDOW_WIDTH * POCKET_SELECTOR_WINDOW_HEIGHT) -#define BASE_TILE_YES_NO (BASE_TILE_MSG_BOX_WIDE + MSG_BOX_WIDE_WINDOW_WIDTH * MSG_BOX_WINDOW_HEIGHT) -#define BASE_TILE_SELL_COUNT_VALUE (BASE_TILE_YES_NO + YES_NO_WINDOW_WIDTH * YES_NO_WINDOW_HEIGHT) -#define BASE_TILE_ITEM_ACTIONS_MENU BASE_TILE_SELL_COUNT_VALUE -#define BASE_TILE_MONEY (BASE_TILE_SELL_COUNT_VALUE + SELL_WINDOW_WIDTH * SELL_WINDOW_HEIGHT) -#define BASE_TILE_POFFIN_COUNT 903 -#define BASE_TILE_THROW_AWAY_COUNT 903 -#define BASE_TILE_STANDARD_WINDOW_FRAME (1024 - STANDARD_WINDOW_TILE_COUNT) -#define BASE_TILE_MSG_BOX_FRAME (BASE_TILE_STANDARD_WINDOW_FRAME - SCROLLING_MESSAGE_BOX_TILE_COUNT) +#define BASE_TILE_ITEM_LIST 1 +#define BASE_TILE_ITEM_DESCRIPTION (BASE_TILE_ITEM_LIST + (ITEM_LIST_WINDOW_WIDTH * ITEM_LIST_WINDOW_HEIGHT)) +#define BASE_TILE_POCKET_NAMES (BASE_TILE_ITEM_DESCRIPTION + ITEM_DESCRIPTION_WINDOW_WIDTH * ITEM_DESCRIPTION_WINDOW_HEIGHT) +#define BASE_TILE_MSG_BOX (BASE_TILE_POCKET_NAMES + POCKET_NAMES_WINDOW_WIDTH * POCKET_NAMES_WINDOW_HEIGHT) +#define BASE_TILE_MSG_BOX_NARROW BASE_TILE_MSG_BOX +#define BASE_TILE_POCKET_SELECTOR (BASE_TILE_MSG_BOX + MSG_BOX_WINDOW_WIDTH * MSG_BOX_WINDOW_HEIGHT) +#define BASE_TILE_MSG_BOX_WIDE (BASE_TILE_POCKET_SELECTOR + POCKET_SELECTOR_WINDOW_WIDTH * POCKET_SELECTOR_WINDOW_HEIGHT) +#define BASE_TILE_YES_NO (BASE_TILE_MSG_BOX_WIDE + MSG_BOX_WIDE_WINDOW_WIDTH * MSG_BOX_WINDOW_HEIGHT) +#define BASE_TILE_SELL_COUNT_VALUE (BASE_TILE_YES_NO + YES_NO_WINDOW_WIDTH * YES_NO_WINDOW_HEIGHT) +#define BASE_TILE_ITEM_ACTIONS_MENU BASE_TILE_SELL_COUNT_VALUE +#define BASE_TILE_MONEY (BASE_TILE_SELL_COUNT_VALUE + SELL_WINDOW_WIDTH * SELL_WINDOW_HEIGHT) +#define BASE_TILE_POFFIN_COUNT 903 +#define BASE_TILE_THROW_AWAY_COUNT 903 +#define BASE_TILE_BAG_WINDOW_FRAME (1024 - STANDARD_WINDOW_TILE_COUNT) +#define BASE_TILE_MSG_BOX_FRAME (BASE_TILE_BAG_WINDOW_FRAME - SCROLLING_MESSAGE_BOX_TILE_COUNT) #define DIGIT_WIDTH 6 #define ITEM_COUNT_X_OFFSET 7 @@ -455,7 +455,7 @@ void BagUI_ShowItemActionsMenu(BagController *controller, u8 *actions, u8 numAct Window_ScheduleCopyToVRAM(&controller->windows[msgBoxWindowIdx]); } - Window_DrawStandardFrame(&controller->itemActionsWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_14); + Window_DrawStandardFrame(&controller->itemActionsWindow, TRUE, BASE_TILE_BAG_WINDOW_FRAME, PLTT_14); Window_ScheduleCopyToVRAM(&controller->itemActionsWindow); } @@ -502,7 +502,7 @@ void BagUI_PrintMovingItemMsg(BagController *controller) void BagUI_ShowItemTrashWindows(BagController *controller) { - Window_DrawStandardFrame(&controller->windows[BAG_UI_WINDOW_THROW_AWAY_COUNT], 1, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_14); + Window_DrawStandardFrame(&controller->windows[BAG_UI_WINDOW_THROW_AWAY_COUNT], 1, BASE_TILE_BAG_WINDOW_FRAME, PLTT_14); BagUI_PrintItemTrashCount(controller); Window_DrawMessageBoxWithScrollCursor(&controller->windows[BAG_UI_WINDOW_MSG_BOX], 1, BASE_TILE_MSG_BOX_FRAME, PLTT_12); Window_FillTilemap(&controller->windows[BAG_UI_WINDOW_MSG_BOX], 15); @@ -592,7 +592,7 @@ static BOOL BagUITextPrinterCallback(TextPrinterTemplate *template, u16 param1) void BagUI_ShowYesNoMenu(BagController *controller) { - controller->menu = Menu_MakeYesNoChoice(controller->bgConfig, &sYesNoMenuTemplate, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_14, HEAP_ID_BAG); + controller->menu = Menu_MakeYesNoChoice(controller->bgConfig, &sYesNoMenuTemplate, BASE_TILE_BAG_WINDOW_FRAME, PLTT_14, HEAP_ID_BAG); } void BagUI_PrintSellCountAndValue(BagController *controller, u8 skipFrame) @@ -600,7 +600,7 @@ void BagUI_PrintSellCountAndValue(BagController *controller, u8 skipFrame) Window *window = &controller->windows[BAG_UI_WINDOW_SELL_COUNT_VALUE]; if (skipFrame == FALSE) { - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_14); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_BAG_WINDOW_FRAME, PLTT_14); } Window_FillTilemap(window, 15); @@ -630,7 +630,7 @@ void BagUI_PrintMoney(BagController *controller, u8 skipLabel) if (skipLabel == FALSE) { Window_FillTilemap(window, 15); - Window_DrawStandardFrame(window, 1, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_14); + Window_DrawStandardFrame(window, 1, BASE_TILE_BAG_WINDOW_FRAME, PLTT_14); Strbuf *label = MessageLoader_GetNewStrbuf(controller->bagStringsLoader, Bag_Text_MoneyLabel); @@ -656,7 +656,7 @@ void BagUI_DrawPoffinCountMsgBox(BagController *controller) { Window *window = &controller->windows[BAG_UI_WINDOW_POFFIN_COUNT]; Window_FillTilemap(window, 15); - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_14); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_BAG_WINDOW_FRAME, PLTT_14); Strbuf *label = MessageLoader_GetNewStrbuf(controller->bagStringsLoader, Bag_Text_PoffinCountLabel); Text_AddPrinterWithParams(window, FONT_SYSTEM, label, 0, 0, TEXT_SPEED_NO_TRANSFER, NULL); diff --git a/src/main_menu/mystery_gift_app.c b/src/main_menu/mystery_gift_app.c index c60fef8f7c..1ce0971894 100644 --- a/src/main_menu/mystery_gift_app.c +++ b/src/main_menu/mystery_gift_app.c @@ -98,8 +98,8 @@ FS_EXTERN_OVERLAY(main_menu); #define NUM_TILES_YES_NO_MENU (YES_NO_MENU_WIDTH * YES_NO_MENU_HEIGHT) #define BASE_TILE_MESSAGE_BOX_FRAME 1 -#define BASE_TILE_STANDARD_WINDOW_FRAME (BASE_TILE_MESSAGE_BOX_FRAME + SCROLLING_MESSAGE_BOX_TILE_COUNT) -#define BASE_TILE_MAIN_APP_MENU_MSG_BOX (BASE_TILE_STANDARD_WINDOW_FRAME + STANDARD_WINDOW_TILE_COUNT) +#define BASE_TILE_MG_WINDOW_FRAME (BASE_TILE_MESSAGE_BOX_FRAME + SCROLLING_MESSAGE_BOX_TILE_COUNT) +#define BASE_TILE_MAIN_APP_MENU_MSG_BOX (BASE_TILE_MG_WINDOW_FRAME + STANDARD_WINDOW_TILE_COUNT) #define BASE_TILE_MAIN_APP_MENU (BASE_TILE_MAIN_APP_MENU_MSG_BOX + NUM_TILES_MAIN_MG_MENU_MSG_BOX) #define BASE_TILE_RECEPTION_METHODS_MENU (BASE_TILE_MAIN_APP_MENU + NUM_TILES_MAIN_MG_MENU) #define BASE_TILE_YES_NO_MENU (BASE_TILE_RECEPTION_METHODS_MENU + NUM_TILES_RECEPTION_METHODS_MENU) @@ -577,7 +577,7 @@ static void ShowConfirmReceiveGiftMenu(ApplicationManager *appMan, BOOL hideMsgB Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU); } - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); MakeStateChangeListMenuFromEntryTemplates(appMan, sConfirmReceiveGiftOptions, NELEMS(sConfirmReceiveGiftOptions), window, msgBoxTextId); } @@ -616,7 +616,7 @@ static enum MysteryGiftAppState AskConfirmWireless_FriendOrGBA(ApplicationManage Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU); } - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); MakeStateChangeListMenuFromEntryTemplates(appMan, sStartWirelessCommsOptions_FriendOrGBA, NELEMS(sStartWirelessCommsOptions_FriendOrGBA), window, MysteryGiftMenu_Text_WirelessCommunicationsWillBeLaunched); return MG_APP_STATE_WAIT_CONFIRM_WIRELESS_COMMS; @@ -637,7 +637,7 @@ static enum MysteryGiftAppState AskConfirmConnectToWFC(ApplicationManager *appMa Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU); } - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); MakeStateChangeListMenuFromEntryTemplates(appMan, sConfirmConnectToWFCOptions, NELEMS(sConfirmConnectToWFCOptions), window, MysteryGiftMenu_Text_ConnectToWFC); return MG_APP_STATE_WAIT_CONFIRM_WIRELESS_COMMS; @@ -657,7 +657,7 @@ static enum MysteryGiftAppState AskConfirmWireless_WirelessDistribution(Applicat Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU); } - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); MakeStateChangeListMenuFromEntryTemplates(appMan, sStartWirelessCommsOption_WirelessDistribution, NELEMS(sStartWirelessCommsOption_WirelessDistribution), window, MysteryGiftMenu_Text_WirelessCommunicationsWillBeLaunched2); return MG_APP_STATE_WAIT_CONFIRM_WIRELESS_COMMS; @@ -673,7 +673,7 @@ static void ShowConfirmReceiveGiftMenu_LocalWireless(ApplicationManager *appMan) Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 23, 10, 6, TEXT_LINES_TILES(2), PLTT_0, BASE_TILE_YES_NO_MENU); } - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); MakeStateChangeListMenuFromEntryTemplates(appMan, sConfirmReceiveGiftOptions_WirelessDistribution, NELEMS(sConfirmReceiveGiftOptions_WirelessDistribution), window, MysteryGiftMenu_Text_ReceiveThisGift); } @@ -778,7 +778,7 @@ static enum MysteryGiftAppState ShowMysteryGiftReceptionMethodsMenu(ApplicationM Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 15, 9, 16, TEXT_LINES_TILES(NUM_RECEPTION_METHODS), PLTT_0, BASE_TILE_RECEPTION_METHODS_MENU); } - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); MakeStateChangeListMenuFromEntryTemplates(appMan, sMysteryGiftReceiveOptions, NELEMS(sMysteryGiftReceiveOptions), window, MysteryGiftMenu_Text_ChooseHowToReceiveGift); return MG_APP_STATE_WAIT_RECEPTION_METHOD_CHOICE; @@ -926,7 +926,7 @@ static void ShowMysteryGiftMenuOptions(ApplicationManager *appMan, int windowBas Window_Add(appData->bgConfig, window, BG_LAYER_MAIN_0, 8, 7, 16, TEXT_LINES_TILES(numEntries), PLTT_0, windowBaseTile); } - Window_DrawStandardFrame(window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + Window_DrawStandardFrame(window, TRUE, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); MakeStateChangeListMenuFromEntryTemplates(appMan, entries, numEntries, window, textEntryId); } @@ -963,7 +963,7 @@ static void ShowWonderCardTitle(ApplicationManager *appMann, Window *window, cha Strbuf_CopyNumChars(strBuf, title, WONDERCARD_TITLE_LENGTH); Window_FillTilemap(window, Font_GetAttribute(FONT_SYSTEM, FONTATTR_BG_COLOR)); Text_AddPrinterWithParamsAndColor(window, FONT_SYSTEM, strBuf, 0, 0, TEXT_SPEED_NO_TRANSFER, TEXT_COLOR(1, 2, 15), NULL); - Window_DrawStandardFrame(window, FALSE, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + Window_DrawStandardFrame(window, FALSE, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); Strbuf_Free(strBuf); } @@ -1012,7 +1012,7 @@ static BOOL ShowAppMainMenu(ApplicationManager *appMan, MysteryGiftAppData *appD int frameType = Options_Frame(appData->options); LoadMessageBoxGraphics(appData->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_MESSAGE_BOX_FRAME, PLTT_2, frameType, HEAP_ID_MYSTERY_GIFT_APP); - LoadStandardWindowGraphics(appData->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3, STANDARD_WINDOW_FIELD, HEAP_ID_MYSTERY_GIFT_APP); + LoadStandardWindowGraphics(appData->bgConfig, BG_LAYER_MAIN_0, BASE_TILE_MG_WINDOW_FRAME, PLTT_3, STANDARD_WINDOW_FIELD, HEAP_ID_MYSTERY_GIFT_APP); *HW_BG_A_PLTT_COLOR(PLTT_0, 0) = GX_RGB(12, 12, 31); @@ -1071,7 +1071,7 @@ void MysteryGiftApp_ShowWiFiCommError(MysteryGiftAppData *appData) StringTemplate_SetNumber(strTemplate, 0, appData->wifiCommErrorCode, 5, PADDING_MODE_ZEROES, CHARSET_MODE_EN); MainMenuWindow window; - MainMenuUtil_InitWindow(&window, &appData->wifiCommErrorWindow, PLTT_1, TEXT_BANK_UNK_0695, BASE_TILE_STANDARD_WINDOW_FRAME, PLTT_3); + MainMenuUtil_InitWindow(&window, &appData->wifiCommErrorWindow, PLTT_1, TEXT_BANK_UNK_0695, BASE_TILE_MG_WINDOW_FRAME, PLTT_3); MainMenuWindow_SetDimensionsAndBasetile(&window, 24, TEXT_LINES_TILES(8), BASE_TILE_WIFI_COMM_ERROR_WINDOW); MainMenuWindow_SetScrollableAndFont(&window, FALSE, FONT_MESSAGE); diff --git a/src/meson.build b/src/meson.build index aed0b9496d..afafe72507 100644 --- a/src/meson.build +++ b/src/meson.build @@ -649,7 +649,7 @@ pokeplatinum_c = files( 'overlay023/ov23_022499E4.c', 'overlay023/ov23_0224A1D0.c', 'overlay023/ov23_0224B05C.c', - 'overlay023/ov23_0224DC40.c', + 'overlay023/underground_player_talk.c', 'overlay023/underground_menu.c', 'overlay023/ov23_0225128C.c', 'overlay023/ov23_022521F0.c', diff --git a/src/overlay023/ov23_0224A1D0.c b/src/overlay023/ov23_0224A1D0.c index 0c8d08935f..10b0ab37e7 100644 --- a/src/overlay023/ov23_0224A1D0.c +++ b/src/overlay023/ov23_0224A1D0.c @@ -17,10 +17,10 @@ #include "overlay023/ov23_02241F74.h" #include "overlay023/ov23_02249918.h" #include "overlay023/ov23_0224B05C.h" -#include "overlay023/ov23_0224DC40.h" #include "overlay023/struct_ov23_0224A5CC.h" #include "overlay023/struct_ov23_0224ABC4.h" #include "overlay023/underground_menu.h" +#include "overlay023/underground_player_talk.h" #include "overlay023/underground_text_printer.h" #include "comm_player_manager.h" @@ -219,7 +219,7 @@ void ov23_0224A410(int param0, int param1, void *param2, void *param3) } if ((v1->unk_00 == 1) && (v1->unk_01 == CommSys_CurNetId())) { - ov23_0224DCB8(v1->unk_02, ov23_0224A334, commPlayerMan->fieldSystem); + UndergroundTalk_Start(v1->unk_02, ov23_0224A334, commPlayerMan->fieldSystem); commPlayerMan->unk_58.unk_00_0 = v1->unk_01; commPlayerMan->unk_58.unk_00_4 = v1->unk_02; @@ -236,7 +236,7 @@ void ov23_0224A410(int param0, int param1, void *param2, void *param3) } if ((v1->unk_00 == 1) && (v1->unk_02 == CommSys_CurNetId())) { - ov23_0224F07C(v1->unk_02, v1->unk_01, commPlayerMan->fieldSystem); + UndergroundTalkResponse_Start(v1->unk_02, v1->unk_01, commPlayerMan->fieldSystem); } if ((v1->unk_00 == 2) && (v1->unk_01 == CommSys_CurNetId())) { diff --git a/src/overlay023/ov23_0224B05C.c b/src/overlay023/ov23_0224B05C.c index 92eff84f36..d5fd7928c8 100644 --- a/src/overlay023/ov23_0224B05C.c +++ b/src/overlay023/ov23_0224B05C.c @@ -19,9 +19,9 @@ #include "overlay023/ov23_02248F1C.h" #include "overlay023/ov23_022499E4.h" #include "overlay023/ov23_0224A1D0.h" -#include "overlay023/ov23_0224DC40.h" #include "overlay023/ov23_02253598.h" #include "overlay023/underground_menu.h" +#include "overlay023/underground_player_talk.h" #include "overlay023/underground_spheres.h" #include "overlay023/underground_text_printer.h" #include "overlay023/underground_traps.h" @@ -1200,7 +1200,7 @@ void ov23_0224C104(int param0, int param1, void *param2, void *param3) if (CommSys_CurNetId() == v0->unk_04) { ov23_022535EC(); - ov23_0224F24C(); + UndergroundTalk_ExitConversation(); ov23_0224321C(); UndergroundTraps_ForceEndCurrentTrapEffectClient(CommSys_CurNetId(), 0); @@ -2625,7 +2625,7 @@ BOOL ov23_0224D9AC(int param0, BOOL param1) } ov23_022535EC(); - ov23_0224F24C(); + UndergroundTalk_ExitConversation(); ov23_0224321C(); UndergroundTraps_ForceEndCurrentTrapEffectClient(CommSys_CurNetId(), 0); diff --git a/src/overlay023/ov23_0224DC40.c b/src/overlay023/ov23_0224DC40.c deleted file mode 100644 index 1a5ebbf73c..0000000000 --- a/src/overlay023/ov23_0224DC40.c +++ /dev/null @@ -1,1411 +0,0 @@ -#include "overlay023/ov23_0224DC40.h" - -#include -#include - -#include "generated/trainer_score_events.h" - -#include "field/field_system.h" -#include "overlay023/funcptr_ov23_0224DCB8.h" -#include "overlay023/ov23_02241F74.h" -#include "overlay023/ov23_02253598.h" -#include "overlay023/underground_menu.h" -#include "overlay023/underground_text_printer.h" - -#include "bg_window.h" -#include "comm_player_manager.h" -#include "communication_information.h" -#include "communication_system.h" -#include "field_system.h" -#include "game_records.h" -#include "heap.h" -#include "list_menu.h" -#include "math_util.h" -#include "menu.h" -#include "message.h" -#include "render_window.h" -#include "sound_playback.h" -#include "string_list.h" -#include "sys_task.h" -#include "sys_task_manager.h" -#include "system.h" -#include "system_vars.h" -#include "trainer_info.h" -#include "unk_0202854C.h" -#include "unk_020573FC.h" -#include "vars_flags.h" - -typedef struct { - u8 unk_00; - u8 unk_01; -} UnkStruct_ov23_0224DC40; - -typedef struct { - u8 unk_00; - u8 unk_01; - u8 unk_02; -} UnkStruct_ov23_0224DF1C; - -typedef struct { - u8 unk_00; - u8 unk_01; - u8 unk_02; -} UnkStruct_ov23_0224F184; - -typedef struct { - SysTask *unk_00; - UndergroundMenu *unk_04; - FieldSystem *fieldSystem; - Window unk_0C; - StringList *unk_1C; - ListMenu *unk_20; - Menu *unk_24; - UnkStruct_ov23_0224F184 unk_28; - UnkFuncPtr_ov23_0224DCB8 unk_2C; - u16 unk_30; - u8 unk_32; - u8 unk_33; - u8 unk_34; - u8 unk_35; - u8 unk_36; - u8 unk_37; - u8 unk_38; - u16 unk_3A; -} UnkStruct_ov23_0224E280; - -typedef void (*UnkFuncPtr_ov23_0224E1E0)(UnkStruct_ov23_0224E280 *); - -typedef struct { - SysTask *unk_00; - FieldSystem *fieldSystem; - Window unk_08; - StringList *unk_18; - ListMenu *unk_1C; - Menu *unk_20; - UnkStruct_ov23_0224F184 unk_24; - UnkFuncPtr_ov23_0224DCB8 unk_28; - u16 unk_2C; - u8 unk_2E; - u8 unk_2F; - u8 unk_30; - u8 unk_31; - u8 unk_32; - u8 unk_33; - u8 unk_34; - u8 unk_35; - u16 unk_36; -} UnkStruct_ov23_022577B0; - -static void ov23_0224E2D8(SysTask *param0, void *param1); -static BOOL ov23_0224E1E0(SysTask *param0, void *param1); -static void ov23_0224E244(SysTask *param0, UnkStruct_ov23_0224E280 *param1); -static void ov23_0224E280(UnkStruct_ov23_0224E280 *param0); -static void ov23_0224E29C(UnkStruct_ov23_0224E280 *param0); -static void ov23_0224E2B0(UnkStruct_ov23_0224E280 *param0); -static void ov23_0224E8E0(UnkStruct_ov23_0224E280 *param0); -static void ov23_0224EA08(SysTask *param0, UnkStruct_ov23_022577B0 *param1); -static void ov23_0224F270(UnkStruct_ov23_0224E280 *param0); - -static UnkStruct_ov23_0224E280 *Unk_ov23_022577B4 = NULL; -static UnkStruct_ov23_022577B0 *Unk_ov23_022577B0 = NULL; - -static const struct { - u32 unk_00; - u32 unk_04; -} Unk_ov23_022568B4[] = { - { 0x3, (u32)ov23_0224E280 }, - { 0x4, (u32)ov23_0224E29C }, - { 0x5, (u32)ov23_0224E2B0 }, - { 0x6, (u32)ov23_0224E8E0 } -}; - -static const ListMenuTemplate Unk_ov23_02256894 = { - NULL, - NULL, - NULL, - NULL, - NELEMS(Unk_ov23_022568B4), - NELEMS(Unk_ov23_022568B4), - 0x0, - 0x8, - 0x0, - 0x0, - 0x1, - 0xF, - 0x2, - 0x0, - 0x10, - 0x1, - 0x0, - 0x0, - NULL -}; - -static const WindowTemplate Unk_ov23_0225688C = { - 0x3, - 0x19, - 0xD, - 0x6, - 0x4, - 0xD, - 0x21F -}; - -static void ov23_0224DC40(UnkStruct_ov23_022577B0 *param0, int param1) -{ - UnkStruct_ov23_0224DC40 v0; - - v0.unk_00 = param0->unk_2C; - v0.unk_01 = param1; - - CommSys_SendDataFixedSize(74, &v0); -} - -static void ov23_0224DC54(UnkStruct_ov23_0224E280 *param0, int param1) -{ - UnkStruct_ov23_0224DC40 v0; - - v0.unk_00 = param0->unk_30; - v0.unk_01 = param1; - - CommSys_SendDataFixedSize(73, &v0); -} - -static void ov23_0224DC68(UnkStruct_ov23_0224E280 *param0, int param1) -{ - int v0 = param1; - - if (param1 >= 136) { - TrainerInfo *v1 = CommInfo_TrainerInfo(param0->unk_30); - - if (1 == TrainerInfo_Gender(v1)) { - v0 = v0 - 136 + 155; - } - } - - UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), v0, FALSE, NULL); -} - -static void ov23_0224DC90(UnkStruct_ov23_022577B0 *param0, int param1) -{ - int v0 = param1; - - if (param1 >= 136) { - TrainerInfo *v1 = CommInfo_TrainerInfo(param0->unk_2C); - - if (1 == TrainerInfo_Gender(v1)) { - v0 = v0 - 136 + 155; - } - } - - UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), v0, FALSE, NULL); -} - -void ov23_0224DCB8(int param0, UnkFuncPtr_ov23_0224DCB8 param1, FieldSystem *fieldSystem) -{ - UnkStruct_ov23_0224E280 *v0; - ListMenuTemplate v1; - - v0 = Heap_Alloc(HEAP_ID_33, sizeof(UnkStruct_ov23_0224E280)); - MI_CpuFill8(v0, 0, sizeof(UnkStruct_ov23_0224E280)); - - Unk_ov23_022577B4 = v0; - - v0->fieldSystem = fieldSystem; - v0->unk_2C = param1; - v0->unk_30 = param0; - v0->unk_37 = 1; - v0->unk_38 = 0; - v0->unk_28.unk_01 = 0; - v0->unk_28.unk_02 = 0; - v0->unk_28.unk_00 = v0->unk_30; - - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov23_0224DC68(v0, 0); - - v0->unk_00 = SysTask_Start(ov23_0224E2D8, v0, 10000); -} - -static void ov23_0224DD2C(UnkStruct_ov23_0224E280 *param0) -{ - ListMenuTemplate v0; - - param0->unk_1C = StringList_New(NELEMS(Unk_ov23_022568B4), HEAP_ID_FIELD1); - - Window_Add(param0->fieldSystem->bgConfig, ¶m0->unk_0C, 3, 1, 1, 10, NELEMS(Unk_ov23_022568B4) * 2, 13, (((1024 - (18 + 12) - 9 - (32 * 8)) - (18 + 12 + 24)) - (27 * 4)) - (10 * NELEMS(Unk_ov23_022568B4) * 2)); - Window_DrawStandardFrame(¶m0->unk_0C, 1, 1024 - (18 + 12) - 9, 11); - - { - MessageLoader *v1; - int v2; - - v1 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_COMMON, HEAP_ID_FIELD1); - - for (v2 = 0; v2 < NELEMS(Unk_ov23_022568B4); v2++) { - StringList_AddFromMessageBank(param0->unk_1C, v1, Unk_ov23_022568B4[v2].unk_00, Unk_ov23_022568B4[v2].unk_04); - } - - MessageLoader_Free(v1); - } - - MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &v0, sizeof(ListMenuTemplate)); - - v0.choices = param0->unk_1C; - v0.window = ¶m0->unk_0C; - v0.count = NELEMS(Unk_ov23_022568B4); - v0.maxDisplay = NELEMS(Unk_ov23_022568B4); - - param0->unk_3A = 0; - param0->unk_20 = ListMenu_New(&v0, 0, 0, HEAP_ID_FIELD1); - - Window_CopyToVRAM(¶m0->unk_0C); - CommPlayerMan_PauseFieldSystem(); -} - -static void ov23_0224DDE4(SysTask *param0, UnkStruct_ov23_0224E280 *param1) -{ - if (param1->unk_24) { - Menu_DestroyForExit(param1->unk_24, 4); - param1->unk_24 = NULL; - } - - if (param1->unk_04) { - ov23_02251044(param1->unk_04, 0xfffffffe); - ov23_02243204(); - } - - ov23_0224E244(param0, param1); - - if (param1->unk_2C) { - param1->unk_2C(0); - } - - Heap_Free(param1); - CommPlayerMan_ResumeFieldSystem(); - SysTask_Done(param0); - - Unk_ov23_022577B4 = NULL; -} - -static void ov23_0224DE3C(UnkStruct_ov23_0224E280 *param0) -{ - ListMenuTemplate v0; - - param0->unk_1C = StringList_New(4, HEAP_ID_FIELD1); - - Window_Add(param0->fieldSystem->bgConfig, ¶m0->unk_0C, 3, 1, 1, 16, 4 * 2, 13, (((1024 - (18 + 12) - 9 - (32 * 8)) - (18 + 12 + 24)) - (27 * 4)) - (16 * 4 * 2)); - Window_DrawStandardFrame(¶m0->unk_0C, 1, 1024 - (18 + 12) - 9, 11); - - { - MessageLoader *v1; - int v2, v3; - u8 v4[4]; - - v1 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_QUESTIONS, HEAP_ID_FIELD1); - - for (v2 = 0; v2 < 4; v2++) { - u32 v5 = MTRNG_Next() % 12; - - for (v3 = 0; v3 < v2; v3++) { - if (v4[v3] == v5) { - break; - } - } - - if (v3 == v2) { - v4[v2] = v5; - StringList_AddFromMessageBank(param0->unk_1C, v1, 0 + v5, v5); - } else { - v2--; - } - } - - MessageLoader_Free(v1); - } - - v0 = Unk_ov23_02256894; - v0.choices = param0->unk_1C; - v0.window = ¶m0->unk_0C; - - param0->unk_3A = 0; - param0->unk_20 = ListMenu_New(&v0, 0, 0, HEAP_ID_FIELD1); - - Window_CopyToVRAM(¶m0->unk_0C); -} - -static BOOL ov23_0224DF1C(SysTask *param0, void *param1) -{ - UnkStruct_ov23_0224E280 *v0 = param1; - u32 v1; - u16 v2; - - v1 = ListMenu_ProcessInput(v0->unk_20); - ov23_0224F270(v0); - - if (CommSys_CheckError()) { - v0->unk_37 = 3; - ov23_0224E244(param0, v0); - return 1; - } - - switch (v1) { - case 0xfffffffe: - case 0xffffffff: - return 0; - break; - default: - Sound_PlayEffect(SEQ_SE_CONFIRM); - { - UnkStruct_ov23_0224DF1C v3; - - v3.unk_00 = v1; - v3.unk_01 = v0->unk_30; - v3.unk_02 = 0; - - CommSys_SendDataFixedSize(79, &v3); - - v0->unk_32 = v1; - v0->unk_37 = 30; - - ov23_0224E244(param0, v0); - } - break; - } - - return 1; -} - -static void ov23_0224DFA0(UnkStruct_ov23_0224E280 *param0) -{ - ListMenuTemplate v0; - - param0->unk_1C = StringList_New(4, HEAP_ID_FIELD1); - - Window_Add(param0->fieldSystem->bgConfig, ¶m0->unk_0C, 3, 1, 1, 16, 4 * 2, 13, (((1024 - (18 + 12) - 9 - (32 * 8)) - (18 + 12 + 24)) - (27 * 4)) - (16 * 4 * 2)); - Window_DrawStandardFrame(¶m0->unk_0C, 1, 1024 - (18 + 12) - 9, 11); - - { - MessageLoader *v1; - int v2; - - v1 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_ANSWERS, HEAP_ID_FIELD1); - - for (v2 = 0; v2 < 4; v2++) { - u32 v3 = 4 * param0->unk_32 + v2; - - StringList_AddFromMessageBank(param0->unk_1C, v1, 0 + v3, v2); - } - - MessageLoader_Free(v1); - } - - v0 = Unk_ov23_02256894; - v0.choices = param0->unk_1C; - v0.window = ¶m0->unk_0C; - - param0->unk_3A = 0; - param0->unk_20 = ListMenu_New(&v0, 0, 0, HEAP_ID_FIELD1); - - Window_CopyToVRAM(¶m0->unk_0C); -} - -static BOOL ov23_0224E05C(SysTask *param0, void *param1) -{ - UnkStruct_ov23_0224E280 *v0 = param1; - u32 v1; - UnkStruct_ov23_0224DF1C v2; - - v1 = ListMenu_ProcessInput(v0->unk_20); - ov23_0224F270(v0); - - if (CommSys_CheckError()) { - ov23_0224E244(param0, v0); - v0->unk_37 = 3; - return 1; - } - - switch (v1) { - case 0xffffffff: - case 0xfffffffe: - return 0; - default: - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov23_0224E244(param0, v0); - v2.unk_00 = (v1 + v0->unk_32 * 4); - v2.unk_01 = v0->unk_30; - v2.unk_02 = 2; - CommSys_SendDataFixedSize(79, &v2); - UndergroundTextPrinter_SetUndergroundAnswer(CommManUnderground_GetCommonTextPrinter(), v2.unk_00); - UndergroundTextPrinter_SetUndergroundAnswerWithIndex(CommManUnderground_GetCommonTextPrinter(), 6, v0->unk_33); - - if (v0->unk_33 == v2.unk_00) { - ov23_0224DC68(v0, 141); - } else { - ov23_0224DC68(v0, 140); - } - - v0->unk_37 = 36; - ov23_0224DC54(v0, 27); - break; - } - - return 1; -} - -static void ov23_0224E124(UnkStruct_ov23_0224E280 *param0) -{ - UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCommonTextPrinter(), CommInfo_TrainerInfo(param0->unk_30)); - UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetCommonTextPrinter(), param0->unk_28.unk_02); - UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), 14, FALSE, NULL); - - UndergroundRecord_IncrementGiftsGiven(SaveData_UndergroundRecord(FieldSystem_GetSaveData(param0->fieldSystem))); - UndergroundMenu_RemoveSelectedGoodBag(param0->unk_28.unk_02); - Sound_PlayEffect(SEQ_SE_DP_PIRORIRO2); -} - -static void ov23_0224E17C(UnkStruct_ov23_0224E280 *param0, int param1) -{ - UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetCommonTextPrinter(), param1); - UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), 12, FALSE, NULL); -} - -static void ov23_0224E19C(SysTask *param0, UnkStruct_ov23_0224E280 *param1) -{ - u32 v0 = Menu_ProcessInputAndHandleExit(param1->unk_24, 4); - - if (v0 == 0xffffffff) { - return; - } - - if (v0 == 0) { - param1->unk_28.unk_00 = param1->unk_30; - CommSys_SendDataFixedSize(77, ¶m1->unk_28); - param1->unk_37 = 21; - } else { - ov23_0224DC68(param1, 11); - param1->unk_37 = 15; - } - - param1->unk_24 = NULL; -} - -static BOOL ov23_0224E1E0(SysTask *param0, void *param1) -{ - UnkStruct_ov23_0224E280 *v0 = param1; - u32 v1 = ListMenu_ProcessInput(v0->unk_20); - ov23_0224F270(v0); - - if (CommSys_CheckError()) { - v1 = 0xfffffffe; - } - - switch (v1) { - case 0xffffffff: - return 0; - case 0xfffffffe: - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov23_0224E8E0(v0); - ov23_0224E244(param0, v0); - break; - default: - Sound_PlayEffect(SEQ_SE_CONFIRM); - { - UnkFuncPtr_ov23_0224E1E0 v2 = (UnkFuncPtr_ov23_0224E1E0)v1; - - v2(v0); - ov23_0224E244(param0, v0); - } - break; - } - - return 1; -} - -static void ov23_0224E244(SysTask *param0, UnkStruct_ov23_0224E280 *param1) -{ - if (param1->unk_1C) { - Window_EraseStandardFrame(¶m1->unk_0C, 1); - ListMenu_Free(param1->unk_20, NULL, NULL); - Window_ClearAndCopyToVRAM(¶m1->unk_0C); - Window_Remove(¶m1->unk_0C); - StringList_Free(param1->unk_1C); - param1->unk_1C = NULL; - } -} - -static void ov23_0224E280(UnkStruct_ov23_0224E280 *param0) -{ - ov23_0224DC54(param0, 5); - ov23_0224DC68(param0, 7); - - param0->unk_37 = 5; -} - -static void ov23_0224E29C(UnkStruct_ov23_0224E280 *param0) -{ - ov23_0224DC54(param0, 22); - param0->unk_37 = 27; -} - -static void ov23_0224E2B0(UnkStruct_ov23_0224E280 *param0) -{ - param0->unk_37 = 16; -} - -static void ov23_0224E2B8(int param0) -{ - Unk_ov23_022577B4->unk_28.unk_02 = param0; - Unk_ov23_022577B4->unk_37 = 18; -} - -static void ov23_0224E2D0(void *param0) -{ - UnkStruct_ov23_0224E280 *v0 = param0; - - v0->unk_37 = 11; -} - -static void ov23_0224E2D8(SysTask *param0, void *param1) -{ - UnkStruct_ov23_0224E280 *v0 = param1; - u32 v1; - - if (v0->unk_37 != 17) { - if (!CommSys_IsPlayerConnected(v0->unk_30)) { - v0->unk_04 = NULL; - ov23_022535EC(); - v0->unk_37 = 4; - } - } - - switch (v0->unk_37) { - case 1: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - ov23_0224DD2C(v0); - v0->unk_37++; - } - break; - case 2: - ov23_0224E1E0(param0, param1); - break; - case 3: - case 4: - UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); - ov23_0224DDE4(param0, v0); - break; - case 5: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if (v0->unk_38 == 9) { - v0->unk_37 = 9; - ov23_022538FC(v0->unk_30); - } - - if (v0->unk_38 == 6) { - v0->unk_37 = 6; - } - } - break; - case 8: - ov23_0224DC68(v0, 15); - v0->unk_37 = 7; - break; - case 6: - ov23_0224DC68(v0, 8); - v0->unk_37 = 7; - break; - case 7: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if ((PAD_BUTTON_A)&gSystem.pressedKeys) { - v0->unk_37 = 4; - } - } - break; - case 9: - if (ov23_022539D8()) { - UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); - ov23_02253834(v0->fieldSystem->bgConfig, CommInfo_TrainerInfo(v0->unk_30), ov23_0224E2D0, v0, 0); - v0->unk_37 = 10; - } - break; - case 10: - break; - case 11: - GameRecords_IncrementTrainerScore(SaveData_GetGameRecords(v0->fieldSystem->saveData), TRAINER_SCORE_EVENT_UNDERGROUND_GREET_PLAYER); - ov23_022539E8(); - ov23_0224DC68(v0, 9); - v0->unk_37 = 12; - break; - case 12: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - ov23_0224DC54(v0, 14); - v0->unk_37 = 13; - } - break; - case 13: - if (v0->unk_38 == 13) { - v0->unk_37 = 14; - } - break; - case 14: - ov23_0224DC68(v0, 10); - v0->unk_37 = 1; - break; - case 15: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if ((PAD_BUTTON_A)&gSystem.pressedKeys) { - v0->unk_37 = 14; - } - } - break; - case 16: - v0->unk_04 = ov23_022511B0(ov23_0224E2B8, v0->fieldSystem); - v0->unk_37 = 17; - break; - case 17: - break; - case 18: - v0->unk_04 = NULL; - - if (Unk_ov23_022577B4->unk_28.unk_02 == 0) { - ov23_0224DC68(v0, 11); - v0->unk_37 = 15; - } else if (sub_02032FC0(v0->unk_30)) { - ov23_0224DC68(v0, 87); - v0->unk_37 = 15; - } else if (!sub_02028810(v0->fieldSystem->saveData)) { - ov23_0224DC68(v0, 87); - v0->unk_37 = 15; - } else if (sub_0205748C(Unk_ov23_022577B4->unk_28.unk_02)) { - ov23_0224DC68(v0, 86); - v0->unk_37 = 15; - } else { - ov23_0224E17C(v0, Unk_ov23_022577B4->unk_28.unk_02); - v0->unk_37 = 19; - } - break; - case 19: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - v0->unk_24 = Menu_MakeYesNoChoice(v0->fieldSystem->bgConfig, &Unk_ov23_0225688C, 1024 - (18 + 12) - 9, 11, 4); - v0->unk_37 = 20; - - if (v0->unk_38 != 8) { - v0->unk_38 = 1; - } - } - break; - case 20: - ov23_0224E19C(param0, v0); - break; - case 21: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if (v0->unk_38 == 22) { - v0->unk_37 = 22; - } - - if (v0->unk_38 == 24) { - v0->unk_37 = 24; - } - - if (v0->unk_38 == 23) { - v0->unk_37 = 23; - } - } - break; - case 23: - ov23_0224DC68(v0, 30); - v0->unk_37 = 26; - break; - case 24: - ov23_0224DC68(v0, 13); - v0->unk_37 = 26; - break; - case 22: - ov23_0224E124(v0); - { - VarsFlags *v2 = SaveData_GetVarsFlags(v0->fieldSystem->saveData); - SystemVars_SetUndergroundItemsGivenAway(v2, SystemVars_GetUndergroundItemsGivenAway(v2) + 1); - } - - GameRecords_IncrementTrainerScore(SaveData_GetGameRecords(v0->fieldSystem->saveData), TRAINER_SCORE_EVENT_UNDERGROUND_GIVE_PLAYER_GOODS); - v0->unk_37 = 25; - break; - case 25: - v0->unk_37 = 26; - break; - case 26: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if (v0->unk_38 == 15) { - v0->unk_37 = 14; - } - } - break; - case 27: - ov23_0224DC68(v0, 136); - v0->unk_37 = 28; - break; - case 28: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - ov23_0224DE3C(v0); - v0->unk_37 = 29; - } - break; - case 29: - ov23_0224DF1C(param0, param1); - break; - case 30: - UndergroundTextPrinter_SetUndergroundQuestion(CommManUnderground_GetCommonTextPrinter(), v0->unk_32); - ov23_0224DC68(v0, 137); - v0->unk_37 = 31; - break; - case 31: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if (v0->unk_38 == 32) { - v0->unk_37 = 32; - } - } - break; - case 32: - if (51 == v0->unk_33) { - ov23_0224DC68(v0, 139); - v0->unk_38 = 0; - v0->unk_37 = 33; - } else { - UndergroundTextPrinter_SetUndergroundAnswer(CommManUnderground_GetCommonTextPrinter(), v0->unk_33); - ov23_0224DC68(v0, 138); - v0->unk_37 = 34; - } - break; - case 33: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if (v0->unk_38 == 42) { - v0->unk_38 = 0; - v0->unk_37 = 14; - } - } - break; - case 34: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - ov23_0224DFA0(v0); - v0->unk_37 = 35; - } - break; - case 35: - ov23_0224E05C(param0, param1); - break; - case 36: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - GameRecords_IncrementTrainerScore(SaveData_GetGameRecords(v0->fieldSystem->saveData), TRAINER_SCORE_EVENT_UNDERGROUND_ASK_PLAYER_QUESTION); - ov23_0224DC68(v0, 142); - v0->unk_37 = 37; - } - break; - case 37: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if (gSystem.pressedKeys & PAD_BUTTON_A) { - v0->unk_37 = 38; - } - } - break; - case 38: - if (v0->unk_38 == 37) { - ov23_0224DC54(v0, 100); - v0->unk_37 = 39; - } - break; - case 39: - if (v0->unk_38 == 100) { - ov23_0224DC68(v0, 150); - v0->unk_37 = 40; - } - break; - case 40: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - ov23_0224DC54(v0, 101); - v0->unk_37 = 41; - } - break; - case 41: - if (v0->unk_38 == 101) { - v0->unk_37 = 14; - } - break; - } - - if (v0->unk_38 == 8) { - if ((v0->unk_37 == 4) || (v0->unk_37 == 7)) { - return; - } - - if (v0->unk_24) { - Menu_DestroyForExit(v0->unk_24, 4); - v0->unk_24 = NULL; - } - - if (v0->unk_04) { - ov23_02251044(v0->unk_04, 0xfffffffe); - ov23_02243204(); - UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter()); - v0->unk_04 = NULL; - } - - ov23_0224E244(param0, v0); - - v0->unk_37 = 8; - v0->unk_38 = 0; - } -} - -static void ov23_0224E8E0(UnkStruct_ov23_0224E280 *param0) -{ - ov23_0224DC68(param0, 15); - ov23_0224DC54(param0, 8); - - param0->unk_37 = 7; -} - -static void ov23_0224E8FC(SysTask *param0, UnkStruct_ov23_022577B0 *param1) -{ - u32 v0 = Menu_ProcessInputAndHandleExit(param1->unk_20, 4); - - if (v0 == 0xffffffff) { - return; - } - - if (v0 == 0) { - ov23_0224DC40(param1, 9); - ov23_022538FC(param1->unk_2C); - param1->unk_34 = 10; - } else { - ov23_0224DC40(param1, 6); - param1->unk_34 = 8; - } - - param1->unk_20 = NULL; -} - -static void ov23_0224E93C(SysTask *param0, UnkStruct_ov23_022577B0 *param1) -{ - u32 v0 = Menu_ProcessInputAndHandleExit(param1->unk_20, 4); - - if (v0 == 0xffffffff) { - return; - } - - if (v0 == 0) { - if (UndergroundInventory_TryAddGoodBag(param1->unk_24.unk_02)) { - sub_0202977C(SaveData_UndergroundRecord(FieldSystem_GetSaveData(param1->fieldSystem))); - Sound_PlayEffect(SEQ_SE_DP_PIRORIRO2); - ov23_0224DC40(param1, 22); - - param1->unk_34 = 19; - } else { - ov23_0224DC40(param1, 23); - ov23_0224DC90(param1, 21); - - param1->unk_34 = 21; - } - } else { - ov23_0224DC40(param1, 24); - ov23_0224DC90(param1, 29); - - param1->unk_34 = 21; - } - - param1->unk_20 = NULL; -} - -static void ov23_0224E9C4(SysTask *param0, UnkStruct_ov23_022577B0 *param1) -{ - if (param1->unk_20) { - Menu_DestroyForExit(param1->unk_20, 4); - param1->unk_20 = NULL; - } - - if (param1->unk_28) { - param1->unk_28(0); - } - - ov23_0224EA08(param0, param1); - - Heap_Free(param1); - CommPlayerMan_ResumeFieldSystem(); - SysTask_Done(param0); - - Unk_ov23_022577B0 = NULL; -} - -static void ov23_0224EA08(SysTask *param0, UnkStruct_ov23_022577B0 *param1) -{ - if (param1->unk_18) { - Window_EraseStandardFrame(¶m1->unk_08, 1); - ListMenu_Free(param1->unk_1C, NULL, NULL); - Window_ClearAndCopyToVRAM(¶m1->unk_08); - Window_Remove(¶m1->unk_08); - StringList_Free(param1->unk_18); - - param1->unk_18 = NULL; - } -} - -static void ov23_0224EA44(UnkStruct_ov23_022577B0 *param0, int param1, int param2) -{ - UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCommonTextPrinter(), CommInfo_TrainerInfo(param1)); - UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), param2, FALSE, NULL); -} - -static void ov23_0224EA70(UnkStruct_ov23_022577B0 *param0) -{ - UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCommonTextPrinter(), CommInfo_TrainerInfo(param0->unk_2C)); - UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetCommonTextPrinter(), param0->unk_24.unk_02); - UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), 31, FALSE, NULL); -} - -static void ov23_0224EAA4(UnkStruct_ov23_022577B0 *param0) -{ - ListMenuTemplate v0; - const int v1 = 4 + 1; - - param0->unk_18 = StringList_New(v1, HEAP_ID_FIELD1); - - Window_Add(param0->fieldSystem->bgConfig, ¶m0->unk_08, 3, 1, 1, 16, v1 * 2, 13, (((1024 - (18 + 12) - 9 - (32 * 8)) - (18 + 12 + 24)) - (27 * 4)) - (16 * v1 * 2)); - Window_DrawStandardFrame(¶m0->unk_08, 1, 1024 - (18 + 12) - 9, 11); - { - MessageLoader *v2; - int v3; - - v2 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_ANSWERS, HEAP_ID_FIELD1); - - for (v3 = 0; v3 < 4; v3++) { - u32 v4 = 4 * param0->unk_2E + v3; - - StringList_AddFromMessageBank(param0->unk_18, v2, 0 + v4, v3); - } - - StringList_AddFromMessageBank(param0->unk_18, v2, 48, 51); - MessageLoader_Free(v2); - } - - v0 = Unk_ov23_02256894; - v0.choices = param0->unk_18; - v0.window = ¶m0->unk_08; - v0.count = v1; - v0.maxDisplay = v1; - - param0->unk_36 = 0; - param0->unk_1C = ListMenu_New(&v0, 0, 0, HEAP_ID_FIELD1); - - Window_CopyToVRAM(¶m0->unk_08); -} - -static BOOL ov23_0224EB74(SysTask *param0, void *param1) -{ - UnkStruct_ov23_022577B0 *v0 = param1; - u32 v1; - UnkStruct_ov23_0224DF1C v2; - u16 v3; - - v1 = ListMenu_ProcessInput(v0->unk_1C); - v3 = v0->unk_36; - - ListMenu_CalcTrueCursorPos(v0->unk_1C, &v0->unk_36); - - if (v3 != v0->unk_36) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - } - - if (CommSys_CheckError()) { - v1 = 0xfffffffe; - } - - switch (v1) { - case 0xffffffff: - return 0; - case 0xfffffffe: - v1 = 51; - default: - Sound_PlayEffect(SEQ_SE_CONFIRM); - ov23_0224EA08(param0, v0); - - if (v1 != 51) { - v0->unk_2F = (v1 + v0->unk_2E * 4); - v0->unk_34 = 26; - - UndergroundTextPrinter_SetUndergroundAnswer(CommManUnderground_GetCommonTextPrinter(), v0->unk_2F); - ov23_0224DC90(v0, 146); - } else { - v0->unk_2F = 51; - v0->unk_34 = 16; - v0->unk_35 = 0; - - ov23_0224DC90(v0, 145); - } - - v2.unk_00 = v0->unk_2F; - v2.unk_01 = v0->unk_2C; - v2.unk_02 = 1; - - CommSys_SendDataFixedSize(79, &v2); - ov23_0224DC40(v0, 32); - break; - } - - return 1; -} - -static void ov23_0224EC48(void *param0) -{ - UnkStruct_ov23_022577B0 *v0 = param0; - v0->unk_34 = 12; -} - -static void ov23_0224EC50(SysTask *param0, void *param1) -{ - UnkStruct_ov23_022577B0 *v0 = param1; - - if (!CommSys_IsPlayerConnected(v0->unk_2C)) { - ov23_022535EC(); - v0->unk_34 = 4; - } - - switch (v0->unk_34) { - case 4: - UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); - ov23_0224E9C4(param0, v0); - break; - case 2: - v0->unk_2E = 12; - - if (gSystem.pressedKeys & PAD_BUTTON_B) { - ov23_0224DC40(v0, 8); - v0->unk_34 = 8; - } else if (v0->unk_35 == 5) { - v0->unk_34 = 5; - } else if (v0->unk_35 == 22) { - v0->unk_34 = 22; - } - break; - case 5: - ov23_0224DC90(v0, 24); - v0->unk_34 = 6; - break; - case 6: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - v0->unk_34 = 7; - v0->unk_20 = Menu_MakeYesNoChoice(v0->fieldSystem->bgConfig, &Unk_ov23_0225688C, 1024 - (18 + 12) - 9, 11, 4); - } - break; - case 7: - ov23_0224E8FC(param0, v0); - break; - case 8: - ov23_0224DC90(v0, 15); - v0->unk_34 = 9; - break; - case 9: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if ((PAD_BUTTON_A)&gSystem.pressedKeys) { - v0->unk_34 = 4; - } - } - break; - case 10: - if (ov23_022539D8()) { - UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); - ov23_02253834(v0->fieldSystem->bgConfig, CommInfo_TrainerInfo(v0->unk_2C), ov23_0224EC48, v0, 0); - v0->unk_34 = 11; - } - break; - case 11: - break; - case 12: - ov23_022539E8(); - ov23_0224EA44(v0, v0->unk_2C, 26); - v0->unk_34 = 13; - break; - case 13: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - ov23_0224DC40(v0, 13); - v0->unk_34 = 14; - } - break; - case 14: - if (v0->unk_35 == 14) { - v0->unk_34 = 15; - } - break; - case 15: - ov23_0224DC90(v0, 27); - v0->unk_34 = 2; - break; - case 16: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - v0->unk_34 = 15; - ov23_0224DC40(v0, 42); - } - break; - case 17: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - v0->unk_34 = 18; - v0->unk_20 = Menu_MakeYesNoChoice(v0->fieldSystem->bgConfig, &Unk_ov23_0225688C, 1024 - (18 + 12) - 9, 11, 4); - } - break; - case 18: - ov23_0224E93C(param0, v0); - break; - case 19: - ov23_0224EA70(v0); - v0->unk_34 = 20; - break; - case 20: - v0->unk_34 = 21; - break; - case 21: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if ((PAD_BUTTON_A)&gSystem.pressedKeys) { - ov23_0224DC40(v0, 15); - v0->unk_34 = 15; - } - } - break; - case 22: - ov23_0224DC90(v0, 143); - v0->unk_34++; - break; - case 23: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if (v0->unk_2E != 12) { - UndergroundTextPrinter_SetUndergroundQuestion(CommManUnderground_GetCommonTextPrinter(), v0->unk_2E); - ov23_0224DC90(v0, 144); - v0->unk_34 = 24; - } - } - break; - case 24: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - ov23_0224EAA4(v0); - v0->unk_34 = 25; - } - break; - case 25: - ov23_0224EB74(param0, v0); - break; - case 26: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - if (v0->unk_35 == 27) { - ov23_0224DC40(v0, 37); - v0->unk_34 = 27; - } - } - break; - case 27: - UndergroundTextPrinter_SetUndergroundAnswer(CommManUnderground_GetCommonTextPrinter(), v0->unk_30); - UndergroundTextPrinter_SetUndergroundAnswerWithIndex(CommManUnderground_GetCommonTextPrinter(), 6, v0->unk_2F); - - if (v0->unk_2F == v0->unk_30) { - ov23_0224DC90(v0, 148); - } else { - ov23_0224DC90(v0, 147); - } - - v0->unk_34 = 28; - break; - case 28: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - ov23_0224DC90(v0, 149); - v0->unk_34 = 29; - } - break; - case 29: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - v0->unk_34 = 30; - } - break; - case 30: - if (v0->unk_35 == 100) { - ov23_0224DC40(v0, 100); - ov23_0224DC90(v0, 150); - v0->unk_34 = 31; - } - break; - case 31: - if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) { - v0->unk_34 = 32; - } - break; - case 32: - if (v0->unk_35 == 101) { - ov23_0224DC40(v0, 101); - v0->unk_34 = 15; - } - break; - } - - if (v0->unk_35 == 8) { - if ((v0->unk_34 == 4) || (v0->unk_34 == 9)) { - return; - } - - if (v0->unk_20) { - Menu_DestroyForExit(v0->unk_20, 4); - v0->unk_20 = NULL; - } - - ov23_0224EA08(param0, v0); - - v0->unk_34 = 8; - v0->unk_35 = 0; - } -} - -void ov23_0224F07C(int param0, int param1, FieldSystem *fieldSystem) -{ - UnkStruct_ov23_022577B0 *v0; - - if (Unk_ov23_022577B0) { - GF_ASSERT(FALSE); - return; - } - - v0 = Heap_Alloc(HEAP_ID_33, sizeof(UnkStruct_ov23_022577B0)); - MI_CpuFill8(v0, 0, sizeof(UnkStruct_ov23_022577B0)); - - Unk_ov23_022577B0 = v0; - - v0->fieldSystem = fieldSystem; - v0->unk_2C = param1; - v0->unk_34 = 2; - v0->unk_35 = 0; - v0->unk_2E = 12; - - UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), 22, FALSE, NULL); - CommPlayerMan_ForceDir(); - - v0->unk_00 = SysTask_Start(ov23_0224EC50, v0, 10000); -} - -void ov23_0224F0F0(int param0, int param1, void *param2, void *param3) -{ - sub_02035B48(75, param2); -} - -void ov23_0224F0FC(int param0, int param1, void *param2, void *param3) -{ - sub_02035B48(76, param2); -} - -void ov23_0224F108(int param0, int param1, void *param2, void *param3) -{ - UnkStruct_ov23_0224DC40 *v0 = param2; - - if ((CommSys_CurNetId() == v0->unk_00) && (Unk_ov23_022577B0)) { - GF_ASSERT(param1 == sizeof(UnkStruct_ov23_0224DC40)); - Unk_ov23_022577B0->unk_35 = v0->unk_01; - } -} - -void ov23_0224F138(int param0, int param1, void *param2, void *param3) -{ - UnkStruct_ov23_0224DC40 *v0 = param2; - - if ((CommSys_CurNetId() == v0->unk_00) && (Unk_ov23_022577B4)) { - GF_ASSERT(param1 == sizeof(UnkStruct_ov23_0224DC40)); - GF_ASSERT(Unk_ov23_022577B4 != NULL); - - Unk_ov23_022577B4->unk_38 = v0->unk_01; - } -} - -int ov23_0224F174(void) -{ - return sizeof(UnkStruct_ov23_0224DC40); -} - -void ov23_0224F178(int param0, int param1, void *param2, void *param3) -{ - sub_02035B48(78, param2); -} - -void ov23_0224F184(int param0, int param1, void *param2, void *param3) -{ - UnkStruct_ov23_022577B0 *v0 = Unk_ov23_022577B0; - UnkStruct_ov23_0224F184 *v1 = param2; - - if (CommSys_CurNetId() != v1->unk_00) { - return; - } - - GF_ASSERT(Unk_ov23_022577B0 != NULL); - - if (v0->unk_34 != 2) { - ov23_0224DC40(v0, 8); - v0->unk_34 = 8; - return; - } - - v0->unk_24.unk_00 = v1->unk_00; - v0->unk_24.unk_01 = v1->unk_01; - v0->unk_24.unk_02 = v1->unk_02; - v0->unk_34 = 17; - - UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetCommonTextPrinter(), v1->unk_02); - UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), 28, FALSE, NULL); -} - -int ov23_0224F1F8(void) -{ - return sizeof(UnkStruct_ov23_0224F184); -} - -void ov23_0224F1FC(int param0, int param1, void *param2, void *param3) -{ - sub_02035B48(80, param2); -} - -void ov23_0224F208(int param0, int param1, void *param2, void *param3) -{ - UnkStruct_ov23_022577B0 *v0 = Unk_ov23_022577B0; - UnkStruct_ov23_0224E280 *v1 = Unk_ov23_022577B4; - UnkStruct_ov23_0224DF1C *v2 = param2; - - if (v2->unk_01 == CommSys_CurNetId()) { - switch (v2->unk_02) { - case 0: - v0->unk_2E = v2->unk_00; - break; - case 1: - v1->unk_33 = v2->unk_00; - break; - case 2: - v0->unk_30 = v2->unk_00; - break; - } - } -} - -int ov23_0224F248(void) -{ - return sizeof(UnkStruct_ov23_0224DF1C); -} - -void ov23_0224F24C(void) -{ - if (Unk_ov23_022577B4) { - ov23_0224DDE4(Unk_ov23_022577B4->unk_00, Unk_ov23_022577B4); - } - - if (Unk_ov23_022577B0) { - ov23_0224E9C4(Unk_ov23_022577B0->unk_00, Unk_ov23_022577B0); - } -} - -static void ov23_0224F270(UnkStruct_ov23_0224E280 *param0) -{ - u16 v0 = param0->unk_3A; - ListMenu_CalcTrueCursorPos(param0->unk_20, ¶m0->unk_3A); - - if (v0 != param0->unk_3A) { - Sound_PlayEffect(SEQ_SE_CONFIRM); - } - - return; -} diff --git a/src/overlay023/ov23_0225128C.c b/src/overlay023/ov23_0225128C.c index 6441c71f17..ee5b2b0796 100644 --- a/src/overlay023/ov23_0225128C.c +++ b/src/overlay023/ov23_0225128C.c @@ -656,8 +656,8 @@ static void ov23_02251BB4(SysTask *param0, UndergroundMenu *param1) Strbuf_Free(param1->fmtString); StringTemplate_Free(param1->template); - if (param1->unk_260 != NULL) { - param1->unk_260(0); + if (param1->exitCallback != NULL) { + param1->exitCallback(0); } if (param1->scrollPrompts) { diff --git a/src/overlay023/ov23_022521F0.c b/src/overlay023/ov23_022521F0.c index a4c5ce689d..1b27d955f7 100644 --- a/src/overlay023/ov23_022521F0.c +++ b/src/overlay023/ov23_022521F0.c @@ -432,7 +432,7 @@ static void ov23_02252A18(UndergroundMenu *param0) v0.cursorCallback = ov23_0225265C; v0.parent = param0; - param0->itemGetter = ov23_02252A04; + param0->getItem = ov23_02252A04; param0->listMenuListPos = CommManUnderground_GetStoredListPos(13 + param0->unk_2AC); param0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(13 + param0->unk_2AC); param0->unk_2AE = param0->listMenuCursorPos; diff --git a/src/overlay023/ov23_02253598.c b/src/overlay023/ov23_02253598.c index e9495d6e18..ea505d3217 100644 --- a/src/overlay023/ov23_02253598.c +++ b/src/overlay023/ov23_02253598.c @@ -8,7 +8,6 @@ #include "struct_defs/underground.h" #include "struct_defs/underground_record.h" -#include "overlay023/funcptr_ov23_0224DCB8.h" #include "overlay023/funcptr_ov23_02253834.h" #include "overlay023/ov23_02241F74.h" #include "overlay023/struct_ov23_02253598_decl.h" @@ -37,12 +36,12 @@ typedef int (*UnkFuncPtr_ov23_022576EC)(const UndergroundRecord *); typedef struct { - UnkFuncPtr_ov23_02253834 unk_00; - void *unk_04; + UnkFuncPtr_ov23_02253834 exitCallback; + void *exitCallbackArg; Window unk_08; StringList *unk_18; ListMenu *unk_1C; - UnkFuncPtr_ov23_0224DCB8 unk_20; + u8 unused[4]; u16 unk_24; int unk_28; } UnkStruct_ov23_022537D4; @@ -51,10 +50,10 @@ typedef struct UnkStruct_ov23_02253598_t { UnkStruct_ov23_022537D4 *unk_00; SysTask *unk_04; SaveData *saveData; - UndergroundRecord *unk_0C; - UndergroundRecord *unk_10; + UndergroundRecord *record; + UndergroundRecord *linkRecord; MATHRandContext32 unk_14; - u8 unk_2C; + u8 linkRecordReceived; }; static UnkStruct_ov23_02253598 *Unk_ov23_022577BC = NULL; @@ -66,15 +65,15 @@ void ov23_02253598(UnkStruct_ov23_02253598 *param0, UndergroundRecord *param1, S Unk_ov23_022577BC = param0; Unk_ov23_022577BC->saveData = saveData; - Unk_ov23_022577BC->unk_0C = param1; - Unk_ov23_022577BC->unk_10 = UndergroundRecord_Init(HEAP_ID_COMMUNICATION); + Unk_ov23_022577BC->record = param1; + Unk_ov23_022577BC->linkRecord = UndergroundRecord_Init(HEAP_ID_COMMUNICATION); CommSys_Seed(&Unk_ov23_022577BC->unk_14); } void ov23_022535CC(void) { - Heap_Free(Unk_ov23_022577BC->unk_10); + Heap_Free(Unk_ov23_022577BC->linkRecord); Heap_Free(Unk_ov23_022577BC); Unk_ov23_022577BC = NULL; @@ -107,7 +106,7 @@ static UnkFuncPtr_ov23_022576EC Unk_ov23_022576EC[] = { UndergroundRecord_GetNumTrapHits, UndergroundRecord_GetNumTrapsTriggered, UndergroundRecord_GetNumPlayersHelped, - sub_02029774, + UndergroundRecord_GetGiftsReceived, sub_020297AC, sub_020297E4, sub_0202981C, @@ -185,10 +184,10 @@ static void ov23_022537D4(SysTask *param0, void *param1) Window_Remove(&v0->unk_08); { - UnkFuncPtr_ov23_02253834 v1 = v0->unk_00; + UnkFuncPtr_ov23_02253834 v1 = v0->exitCallback; if (v1 != NULL) { - v1(v0->unk_04); + v1(v0->exitCallbackArg); } } @@ -208,7 +207,7 @@ static void ov23_0225381C(SysTask *param0, void *param1) } } -void ov23_02253834(BgConfig *param0, TrainerInfo *param1, UnkFuncPtr_ov23_02253834 param2, void *param3, BOOL param4) +void ov23_ShowTrainerRecord(BgConfig *param0, TrainerInfo *param1, UnkFuncPtr_ov23_02253834 exitCallback, void *exitCallbackArg, BOOL isCurrentTrainer) { UndergroundRecord *v0; MessageLoader *v1; @@ -218,8 +217,8 @@ void ov23_02253834(BgConfig *param0, TrainerInfo *param1, UnkFuncPtr_ov23_022538 MI_CpuClear8(v4, sizeof(UnkStruct_ov23_022537D4)); - v4->unk_00 = param2; - v4->unk_04 = param3; + v4->exitCallback = exitCallback; + v4->exitCallbackArg = exitCallbackArg; Window_Add(param0, &v4->unk_08, 3, 4, 2, 24, 19, 13, 1); Window_DrawStandardFrame(&v4->unk_08, 1, 1024 - (18 + 12) - 9, 11); @@ -227,10 +226,10 @@ void ov23_02253834(BgConfig *param0, TrainerInfo *param1, UnkFuncPtr_ov23_022538 v1 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_RECORDS, HEAP_ID_FIELD1); Window_FillTilemap(&v4->unk_08, 15); - if (param4) { - v0 = Unk_ov23_022577BC->unk_0C; + if (isCurrentTrainer) { + v0 = Unk_ov23_022577BC->record; } else { - v0 = Unk_ov23_022577BC->unk_10; + v0 = Unk_ov23_022577BC->linkRecord; } ov23_0225360C(&v4->unk_08, v1, param1, v0); @@ -244,25 +243,25 @@ void ov23_02253834(BgConfig *param0, TrainerInfo *param1, UnkFuncPtr_ov23_022538 MessageLoader_Free(v1); } -void ov23_022538FC(int param0) +void ov23_SendRecord(int targetNetID) { int undergroundRecordSize = UndergroundRecord_Size(); int trainerScore = GameRecords_GetTrainerScore(SaveData_GetGameRecords(Unk_ov23_022577BC->saveData)); - u8 *v2 = Heap_Alloc(HEAP_ID_FIELD1, undergroundRecordSize + 1); + u8 *buffer = Heap_Alloc(HEAP_ID_FIELD1, undergroundRecordSize + 1); - MI_CpuClear8(v2, undergroundRecordSize + 1); - v2[0] = param0; + MI_CpuClear8(buffer, undergroundRecordSize + 1); + buffer[0] = targetNetID; if (trainerScore >= 999999) { trainerScore = 999999; } - UndergroundRecord_SetTrainerScore(Unk_ov23_022577BC->unk_0C, trainerScore); + UndergroundRecord_SetTrainerScore(Unk_ov23_022577BC->record, trainerScore); - MI_CpuCopy8(Unk_ov23_022577BC->unk_0C, &v2[1], undergroundRecordSize); + MI_CpuCopy8(Unk_ov23_022577BC->record, &buffer[1], undergroundRecordSize); - CommSys_SendData(81, v2, undergroundRecordSize + 1); - Heap_Free(v2); + CommSys_SendData(81, buffer, undergroundRecordSize + 1); + Heap_Free(buffer); } void ov23_02253968(void) @@ -273,32 +272,32 @@ void ov23_02253968(void) trainerScore = 999999; } - UndergroundRecord_SetTrainerScore(Unk_ov23_022577BC->unk_0C, trainerScore); + UndergroundRecord_SetTrainerScore(Unk_ov23_022577BC->record, trainerScore); } -void ov23_02253998(int param0, int param1, void *param2, void *param3) +void ov23_SendRecordServer(int unused0, int size, void *data, void *unused3) { - CommSys_SendDataServer(82, param2, param1); + CommSys_SendDataServer(82, data, size); } -void ov23_022539A8(int param0, int param1, void *param2, void *param3) +void ov23_ReceiveRecord(int unused0, int size, void *data, void *unused3) { - u8 *v0 = param2; + u8 *buffer = data; - if (v0[0] == CommSys_CurNetId()) { - MI_CpuCopy8(&v0[1], Unk_ov23_022577BC->unk_10, param1 - 1); - Unk_ov23_022577BC->unk_2C = 1; + if (buffer[0] == CommSys_CurNetId()) { + MI_CpuCopy8(&buffer[1], Unk_ov23_022577BC->linkRecord, size - 1); + Unk_ov23_022577BC->linkRecordReceived = TRUE; } } -BOOL ov23_022539D8(void) +BOOL ov23_IsLinkRecordReceived(void) { - return Unk_ov23_022577BC->unk_2C; + return Unk_ov23_022577BC->linkRecordReceived; } -void ov23_022539E8(void) +void ov23_ClearLinkRecordReceived(void) { - Unk_ov23_022577BC->unk_2C = 0; + Unk_ov23_022577BC->linkRecordReceived = FALSE; } static void ov23_022539F8(int param0) @@ -401,8 +400,8 @@ void *ov23_02253C64(BgConfig *param0, TrainerInfo *param1, Underground *undergro MI_CpuClear8(v4, sizeof(UnkStruct_ov23_022537D4)); - v4->unk_00 = param3; - v4->unk_04 = param4; + v4->exitCallback = param3; + v4->exitCallbackArg = param4; Window_Add(param0, &v4->unk_08, 3, 4, 2, 24, 19, 13, 1); Window_DrawStandardFrame(&v4->unk_08, 1, 1024 - (18 + 12) - 9, 11); @@ -410,7 +409,7 @@ void *ov23_02253C64(BgConfig *param0, TrainerInfo *param1, Underground *undergro v1 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_BASE_PC, HEAP_ID_FIELD1); Window_FillTilemap(&v4->unk_08, 15); - v0 = Unk_ov23_022577BC->unk_0C; + v0 = Unk_ov23_022577BC->record; ov23_02253A78(&v4->unk_08, v1, param1, v0, underground); Sound_PlayEffect(SEQ_SE_DP_WIN_OPEN); @@ -429,10 +428,10 @@ void ov23_02253D10(void *param0) Window_Remove(&v0->unk_08); { - UnkFuncPtr_ov23_02253834 v1 = v0->unk_00; + UnkFuncPtr_ov23_02253834 v1 = v0->exitCallback; if (v1 != NULL) { - v1(v0->unk_04); + v1(v0->exitCallbackArg); } } diff --git a/src/overlay023/underground_menu.c b/src/overlay023/underground_menu.c index f2f8f22114..8146f6bde6 100644 --- a/src/overlay023/underground_menu.c +++ b/src/overlay023/underground_menu.c @@ -10,7 +10,6 @@ #include "field/field_system.h" #include "overlay005/sprite_resource_manager.h" -#include "overlay023/funcptr_ov23_0224F758.h" #include "overlay023/ov23_0223E140.h" #include "overlay023/ov23_02241F74.h" #include "overlay023/ov23_0224A1D0.h" @@ -82,7 +81,7 @@ enum UndergroundMenuStates { UNDERGROUND_MENU_STATE_SPHERES, UNDERGROUND_MENU_STATE_TREASURES, UNDERGROUND_MENU_STATE_GOODS, - UNDERGROUND_MENU_STATE_9, + UNDERGROUND_MENU_STATE_GIVE_GIFT, UNDERGROUND_MENU_STATE_TRAINER_RECORDS, UNDERGROUND_MENU_STATE_GO_UP_SELECTED, UNDERGROUND_MENU_STATE_WAIT_FOR_CONFIRM, @@ -159,7 +158,7 @@ static BOOL UndergroundMenu_HandleGoodSelectedMenu(SysTask *sysTask, void *data) static void ov23_02250B9C(SysTask *sysTask, void *param1); static void UndergroundMenu_InitGoodsMenu(UndergroundMenu *menu, MoveItemCallback moveItemCallback); static BOOL UndergroundMenu_HandleGoodsMenu(SysTask *sysTask, void *data); -static BOOL ov23_022510F0(SysTask *sysTask, void *param1); +static BOOL UndergroundMenu_HandleGiftMenu(SysTask *sysTask, void *param1); static void UndergroundMenu_ConfirmReturnToSurface(SysTask *sysTask, void *data); static void UndergroundMenu_CheckForReturnYesNo(SysTask *sysTask, void *data); static void UndergroundMenu_Free(SysTask *sysTask, UndergroundMenu *menu, BOOL leaveFieldSystemPaused); @@ -473,7 +472,7 @@ BOOL UndergroundInventory_TryAddGoodBag(int goodID) return Underground_TryAddGoodBag(ctx->underground, goodID); } -void UndergroundMenu_Start(UnkFuncPtr_ov23_0224F758 param0, FieldSystem *fieldSystem) +void UndergroundMenu_Start(ExitCallback exitCallback, FieldSystem *fieldSystem) { Sound_PlayEffect(SEQ_SE_DP_WIN_OPEN); CommManUnderground_SetStoredPosKey(UNDERGROUND_STORED_POS_KEY_START_MENU); @@ -483,7 +482,7 @@ void UndergroundMenu_Start(UnkFuncPtr_ov23_0224F758 param0, FieldSystem *fieldSy MI_CpuFill8(menu, 0, sizeof(UndergroundMenu)); menu->fieldSystem = fieldSystem; - menu->unk_260 = param0; + menu->exitCallback = exitCallback; menu->state = UNDERGROUND_MENU_STATE_INIT; menu->strbuf = Strbuf_Init(50 * 2, HEAP_ID_FIELD1); menu->fmtString = Strbuf_Init(50 * 2, HEAP_ID_FIELD1); @@ -590,8 +589,8 @@ static void UndergroundMenu_Main(SysTask *sysTask, void *data) case UNDERGROUND_MENU_STATE_GOODS: UndergroundMenu_HandleGoodsMenu(sysTask, data); break; - case UNDERGROUND_MENU_STATE_9: - ov23_022510F0(sysTask, data); + case UNDERGROUND_MENU_STATE_GIVE_GIFT: + UndergroundMenu_HandleGiftMenu(sysTask, data); break; case UNDERGROUND_MENU_STATE_TRAINER_RECORDS: break; @@ -819,7 +818,7 @@ void UndergroundMenu_RemoveSelectedTrap(int trapID) void UndergroundMenu_PrintTrapDescription(ListMenu *listMenu, u32 index, u8 onInit) { UndergroundMenu *menu = (UndergroundMenu *)ListMenu_GetAttribute(listMenu, LIST_MENU_PARENT); - ItemGetter getTrap = menu->itemGetter; + GetItemFunc getTrap = menu->getItem; int bankEntry; int trapID = getTrap(index, menu); @@ -834,8 +833,8 @@ void UndergroundMenu_PrintTrapDescription(ListMenu *listMenu, u32 index, u8 onIn void ov23_0224FDBC(UndergroundMenu *menu) { - menu->itemCountGetter = UndergroundMenu_GetTrapCount; - menu->itemGetter = UndergroundMenu_GetTrapAtSlot; + menu->getItemCount = UndergroundMenu_GetTrapCount; + menu->getItem = UndergroundMenu_GetTrapAtSlot; menu->printCallback = NULL; UndergroundMenu_InitTrapsMenu(menu, NULL); @@ -845,8 +844,8 @@ void UndergroundMenu_OpenTrapsMenu(UndergroundMenu *menu) { menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_TRAPS); menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_TRAPS); - menu->itemCountGetter = UndergroundMenu_GetTrapCount; - menu->itemGetter = UndergroundMenu_GetTrapAtSlot; + menu->getItemCount = UndergroundMenu_GetTrapCount; + menu->getItem = UndergroundMenu_GetTrapAtSlot; menu->cursorCallback = UndergroundMenu_PrintTrapDescription; menu->printCallback = NULL; menu->itemSelectedMenuCursorPos = menu->listMenuCursorPos; @@ -856,8 +855,8 @@ void UndergroundMenu_OpenTrapsMenu(UndergroundMenu *menu) static void UndergroundMenu_InitTrapsMenu(UndergroundMenu *menu, MoveItemCallback moveItemCallback) { - ItemCountGetter getTrapCount = menu->itemCountGetter; - ItemGetter getTrap = menu->itemGetter; + GetItemCountFunc getTrapCount = menu->getItemCount; + GetItemFunc getTrap = menu->getItem; int trapCount = getTrapCount(menu); int maxDisplay = UNDERGROUND_MENU_MAX_DISPLAY; @@ -999,7 +998,7 @@ void UndergroundMenu_RemoveSelectedSphere(int sphereType) static void UndergroundMenu_PrintSphereDescription(ListMenu *listMenu, u32 index, u8 onInit) { UndergroundMenu *menu = (UndergroundMenu *)ListMenu_GetAttribute(listMenu, LIST_MENU_PARENT); - ItemGetter getSphereType = menu->itemGetter; + GetItemFunc getSphereType = menu->getItem; int bankEntry; int sphereType = getSphereType(index, menu); @@ -1014,9 +1013,9 @@ static void UndergroundMenu_PrintSphereDescription(ListMenu *listMenu, u32 index void ov23_02250184(UndergroundMenu *menu) { - menu->itemCountGetter = UndergroundMenu_GetSphereCount; - menu->itemGetter = UndergroundMenu_GetSphereTypeAtSlot; - menu->sphereSizeGetter = UndergroundMenu_GetSphereSizeAtSlot; + menu->getItemCount = UndergroundMenu_GetSphereCount; + menu->getItem = UndergroundMenu_GetSphereTypeAtSlot; + menu->getSphereSize = UndergroundMenu_GetSphereSizeAtSlot; menu->cursorCallback = UndergroundMenu_PrintSphereDescription; UndergroundMenu_InitSpheresMenu(menu, Underground_MoveSphereInInventory); @@ -1026,9 +1025,9 @@ static void UndergroundMenu_OpenSpheresMenu(UndergroundMenu *menu) { menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_SPHERES); menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_SPHERES); - menu->itemCountGetter = UndergroundMenu_GetSphereCount; - menu->itemGetter = UndergroundMenu_GetSphereTypeAtSlot; - menu->sphereSizeGetter = UndergroundMenu_GetSphereSizeAtSlot; + menu->getItemCount = UndergroundMenu_GetSphereCount; + menu->getItem = UndergroundMenu_GetSphereTypeAtSlot; + menu->getSphereSize = UndergroundMenu_GetSphereSizeAtSlot; menu->cursorCallback = UndergroundMenu_PrintSphereDescription; menu->itemSelectedMenuCursorPos = menu->listMenuCursorPos; @@ -1037,9 +1036,9 @@ static void UndergroundMenu_OpenSpheresMenu(UndergroundMenu *menu) static void UndergroundMenu_InitSpheresMenu(UndergroundMenu *menu, MoveItemCallback moveItemCallback) { - ItemCountGetter getSphereCount = menu->itemCountGetter; - ItemGetter getSphereType = menu->itemGetter; - SphereSizeGetter getSphereSize = menu->sphereSizeGetter; + GetItemCountFunc getSphereCount = menu->getItemCount; + GetItemFunc getSphereType = menu->getItem; + GetSphereSizeFunc getSphereSize = menu->getSphereSize; int sphereCount = getSphereCount(menu); int maxDisplay = UNDERGROUND_MENU_MAX_DISPLAY; @@ -1171,7 +1170,7 @@ static BOOL UndergroundMenu_HandleSphereSelectedMenu(SysTask *sysTask, void *dat void UndergroundMenu_PrintTreasureDescription(ListMenu *listMenu, u32 index, u8 onInit) { UndergroundMenu *menu = (UndergroundMenu *)ListMenu_GetAttribute(listMenu, LIST_MENU_PARENT); - ItemGetter getTreasure = menu->itemGetter; + GetItemFunc getTreasure = menu->getItem; int bankEntry = index; int treasureID = getTreasure(index, menu); @@ -1186,8 +1185,8 @@ void UndergroundMenu_PrintTreasureDescription(ListMenu *listMenu, u32 index, u8 void ov23_02250578(UndergroundMenu *menu) { - menu->itemCountGetter = UndergroundMenu_GetTreasureCount; - menu->itemGetter = UndergroundMenu_GetTreasureAtSlot; + menu->getItemCount = UndergroundMenu_GetTreasureCount; + menu->getItem = UndergroundMenu_GetTreasureAtSlot; UndergroundMenu_InitTreasuresMenu(menu, NULL); } @@ -1196,8 +1195,8 @@ void UndergroundMenu_OpenTreasuresMenu(UndergroundMenu *menu) { menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_TREASURES); menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_TREASURES); - menu->itemCountGetter = UndergroundMenu_GetTreasureCount; - menu->itemGetter = UndergroundMenu_GetTreasureAtSlot; + menu->getItemCount = UndergroundMenu_GetTreasureCount; + menu->getItem = UndergroundMenu_GetTreasureAtSlot; menu->cursorCallback = UndergroundMenu_PrintTreasureDescription; menu->itemSelectedMenuCursorPos = menu->listMenuCursorPos; @@ -1206,8 +1205,8 @@ void UndergroundMenu_OpenTreasuresMenu(UndergroundMenu *menu) static void UndergroundMenu_InitTreasuresMenu(UndergroundMenu *menu, MoveItemCallback moveItemCallback) { - ItemCountGetter getTreasureCount = menu->itemCountGetter; - ItemGetter getTreasure = menu->itemGetter; + GetItemCountFunc getTreasureCount = menu->getItemCount; + GetItemFunc getTreasure = menu->getItem; int treasureCount = getTreasureCount(menu); int maxDisplay = UNDERGROUND_MENU_MAX_DISPLAY; @@ -1404,18 +1403,18 @@ static void UndergroundMenu_OpenTrainerRecords(UndergroundMenu *menu) { UndergroundMenu_EraseCurrentMenu(menu); ov23_02253968(); - ov23_02253834(menu->fieldSystem->bgConfig, SaveData_GetTrainerInfo(FieldSystem_GetSaveData(menu->fieldSystem)), UndergroundMenu_ReturnToStartMenuCallback, menu, TRUE); + ov23_ShowTrainerRecord(menu->fieldSystem->bgConfig, SaveData_GetTrainerInfo(FieldSystem_GetSaveData(menu->fieldSystem)), UndergroundMenu_ReturnToStartMenuCallback, menu, TRUE); menu->state = UNDERGROUND_MENU_STATE_TRAINER_RECORDS; } -void UndergroundMenu_StartHoldingFlag(UnkFuncPtr_ov23_0224F758 param0, FieldSystem *fieldSystem) +void UndergroundMenu_StartHoldingFlag(ExitCallback exitCallback, FieldSystem *fieldSystem) { UndergroundMenu *menu = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu)); MI_CpuFill8(menu, 0, sizeof(UndergroundMenu)); menu->fieldSystem = fieldSystem; - menu->unk_260 = param0; + menu->exitCallback = exitCallback; menu->state = UNDERGROUND_MENU_STATE_INIT; menu->strbuf = Strbuf_Init(50 * 2, HEAP_ID_FIELD1); menu->fmtString = Strbuf_Init(50 * 2, HEAP_ID_FIELD1); @@ -1464,8 +1463,8 @@ static void UndergroundMenu_Free(SysTask *sysTask, UndergroundMenu *menu, BOOL l UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCaptureFlagTextPrinter()); UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); - if (menu->unk_260 != NULL) { - menu->unk_260(0); + if (menu->exitCallback != NULL) { + menu->exitCallback(0); } menu->sysTask = NULL; @@ -1523,7 +1522,7 @@ static void ov23_02250B9C(SysTask *sysTask, void *data) void UndergroundMenu_PrintGoodDescription(ListMenu *listMenu, u32 index, u8 onInit) { UndergroundMenu *menu = (UndergroundMenu *)ListMenu_GetAttribute(listMenu, LIST_MENU_PARENT); - ItemGetter getGood = menu->itemGetter; + GetItemFunc getGood = menu->getItem; int bankEntry; int goodID = getGood(index, menu); @@ -1550,8 +1549,8 @@ static void UndergroundMenu_ColorPlacedGoods(ListMenu *listMenu, u32 index, u8 y void ov23_02250CB0(UndergroundMenu *menu) { - menu->itemCountGetter = UndergroundMenu_GetGoodsCountBag; - menu->itemGetter = UndergroundMenu_GetGoodAtSlotBag; + menu->getItemCount = UndergroundMenu_GetGoodsCountBag; + menu->getItem = UndergroundMenu_GetGoodAtSlotBag; menu->printCallback = NULL; UndergroundMenu_InitGoodsMenu(menu, NULL); @@ -1561,8 +1560,8 @@ void UndergroundMenu_OpenGoodsMenu(UndergroundMenu *menu) { menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_GOODS); menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_GOODS); - menu->itemCountGetter = UndergroundMenu_GetGoodsCountBag; - menu->itemGetter = UndergroundMenu_GetGoodAtSlotBag; + menu->getItemCount = UndergroundMenu_GetGoodsCountBag; + menu->getItem = UndergroundMenu_GetGoodAtSlotBag; menu->cursorCallback = UndergroundMenu_PrintGoodDescription; menu->printCallback = NULL; menu->itemSelectedMenuCursorPos = menu->listMenuCursorPos; @@ -1572,8 +1571,8 @@ void UndergroundMenu_OpenGoodsMenu(UndergroundMenu *menu) void ov23_02250D2C(UndergroundMenu *menu) { - menu->itemCountGetter = UndergroundMenu_GetGoodsCountBag; - menu->itemGetter = UndergroundMenu_GetGoodAtSlotBag; + menu->getItemCount = UndergroundMenu_GetGoodsCountBag; + menu->getItem = UndergroundMenu_GetGoodAtSlotBag; menu->cursorCallback = UndergroundMenu_PrintGoodDescription; menu->printCallback = NULL; @@ -1582,8 +1581,8 @@ void ov23_02250D2C(UndergroundMenu *menu) void ov23_02250D5C(UndergroundMenu *menu) { - menu->itemCountGetter = UndergroundMenu_GetGoodsCountPC; - menu->itemGetter = UndergroundMenu_GetGoodAtSlotPC; + menu->getItemCount = UndergroundMenu_GetGoodsCountPC; + menu->getItem = UndergroundMenu_GetGoodAtSlotPC; menu->cursorCallback = UndergroundMenu_PrintGoodDescription; menu->printCallback = UndergroundMenu_ColorPlacedGoods; @@ -1592,8 +1591,8 @@ void ov23_02250D5C(UndergroundMenu *menu) static void UndergroundMenu_InitGoodsMenu(UndergroundMenu *menu, MoveItemCallback moveItemCallback) { - ItemCountGetter getGoodsCount = menu->itemCountGetter; - ItemGetter getGood = menu->itemGetter; + GetItemCountFunc getGoodsCount = menu->getItemCount; + GetItemFunc getGood = menu->getItem; int goodsCount = getGoodsCount(menu); int maxDisplay = UNDERGROUND_MENU_MAX_DISPLAY; @@ -1717,58 +1716,58 @@ static BOOL UndergroundMenu_HandleGoodSelectedMenu(SysTask *sysTask, void *data) return TRUE; } -void ov23_02251044(void *param0, u32 param1) +void UndergroundMenu_ExitGiftMenu(void *data, u32 input) { - UndergroundMenu *v0 = param0; + UndergroundMenu *menu = data; - UndergroundMenu_EraseCurrentMenu(v0); + UndergroundMenu_EraseCurrentMenu(menu); ov23_02242FBC(); ov23_022535EC(); TrapRadar_Exit(); ov23_02241364(); SphereRadar_Exit(); - if (v0->unk_270) { - ov23_02253D10(v0->unk_270); + if (menu->unk_270) { + ov23_02253D10(menu->unk_270); } - if (v0->yesNoMenu) { - Menu_DestroyForExit(v0->yesNoMenu, HEAP_ID_FIELD1); + if (menu->yesNoMenu) { + Menu_DestroyForExit(menu->yesNoMenu, HEAP_ID_FIELD1); } - UndergroundMenu_CloseItemSelectedMenu(v0); + UndergroundMenu_CloseItemSelectedMenu(menu); - if (v0->scrollPrompts) { - ScrollPrompts_Free(v0->scrollPrompts); + if (menu->scrollPrompts) { + ScrollPrompts_Free(menu->scrollPrompts); } - if (v0->unk_260 != NULL) { - ctx->selectedSlot = param1; - ctx->selectedID = UndergroundMenu_GetGoodAtSlotBag(param1, v0); - v0->unk_260(0); - v0->unk_260 = NULL; + if (menu->exitCallback != NULL) { + ctx->selectedSlot = input; + ctx->selectedID = UndergroundMenu_GetGoodAtSlotBag(input, menu); + menu->exitCallback(0); + menu->exitCallback = NULL; } - if (v0->strbuf) { - Strbuf_Free(v0->strbuf); + if (menu->strbuf) { + Strbuf_Free(menu->strbuf); } - if (v0->fmtString) { - Strbuf_Free(v0->fmtString); + if (menu->fmtString) { + Strbuf_Free(menu->fmtString); } - if (v0->template) { - StringTemplate_Free(v0->template); + if (menu->template) { + StringTemplate_Free(menu->template); } - if (v0->sysTask) { - SysTask_Done(v0->sysTask); + if (menu->sysTask) { + SysTask_Done(menu->sysTask); } - Heap_Free(v0); + Heap_Free(menu); } -static BOOL ov23_022510F0(SysTask *sysTask, void *data) +static BOOL UndergroundMenu_HandleGiftMenu(SysTask *sysTask, void *data) { UndergroundMenu *menu = data; u32 input = UndergroundItemListMenu_ProcessInput(menu->itemListMenu); @@ -1786,28 +1785,28 @@ static BOOL ov23_022510F0(SysTask *sysTask, void *data) case LIST_NOTHING_CHOSEN: return FALSE; case LIST_CANCEL: - if (menu->unk_260 != NULL) { + if (menu->exitCallback != NULL) { ctx->selectedSlot = input; ctx->selectedID = 0; - menu->unk_260(ctx->selectedID); - menu->unk_260 = NULL; + menu->exitCallback(ctx->selectedID); + menu->exitCallback = NULL; } UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter()); - ov23_02251044(menu, input); + UndergroundMenu_ExitGiftMenu(menu, input); ov23_02243204(); return TRUE; default: - if (menu->unk_260 != NULL) { + if (menu->exitCallback != NULL) { ctx->selectedSlot = input; ctx->selectedID = UndergroundMenu_GetGoodAtSlotBag(input, menu); - menu->unk_260(ctx->selectedID); - menu->unk_260 = NULL; + menu->exitCallback(ctx->selectedID); + menu->exitCallback = NULL; } UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter()); - ov23_02251044(menu, input); + UndergroundMenu_ExitGiftMenu(menu, input); ov23_02243204(); return TRUE; break; @@ -1816,29 +1815,29 @@ static BOOL ov23_022510F0(SysTask *sysTask, void *data) return TRUE; } -void *ov23_022511B0(UnkFuncPtr_ov23_0224F758 param0, FieldSystem *fieldSystem) +void *UndergroundMenu_StartGiftMenu(ExitCallback exitCallback, FieldSystem *fieldSystem) { - UndergroundMenu *v0 = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu)); + UndergroundMenu *menu = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu)); - MI_CpuFill8(v0, 0, sizeof(UndergroundMenu)); + MI_CpuFill8(menu, 0, sizeof(UndergroundMenu)); - v0->fieldSystem = fieldSystem; - v0->unk_260 = param0; - v0->state = UNDERGROUND_MENU_STATE_INIT; - v0->spriteCount = 0; - v0->unk_48 = NULL; - v0->cursorCallback = NULL; - v0->strbuf = Strbuf_Init((50 * 2), HEAP_ID_FIELD1); - v0->fmtString = Strbuf_Init((50 * 2), HEAP_ID_FIELD1); - v0->template = StringTemplate_Default(HEAP_ID_FIELD1); + menu->fieldSystem = fieldSystem; + menu->exitCallback = exitCallback; + menu->state = UNDERGROUND_MENU_STATE_INIT; + menu->spriteCount = 0; + menu->unk_48 = NULL; + menu->cursorCallback = NULL; + menu->strbuf = Strbuf_Init(50 * 2, HEAP_ID_FIELD1); + menu->fmtString = Strbuf_Init(50 * 2, HEAP_ID_FIELD1); + menu->template = StringTemplate_Default(HEAP_ID_FIELD1); - UndergroundMenu_OpenGoodsMenu(v0); + UndergroundMenu_OpenGoodsMenu(menu); - v0->state = UNDERGROUND_MENU_STATE_9; - v0->sysTask = SysTask_Start(UndergroundMenu_Main, v0, 10000); + menu->state = UNDERGROUND_MENU_STATE_GIVE_GIFT; + menu->sysTask = SysTask_Start(UndergroundMenu_Main, menu, 10000); - ov23_022431EC(v0, v0->sysTask, ov23_02251270); - return v0; + ov23_022431EC(menu, menu->sysTask, ov23_02251270); + return menu; } void UndergroundMenu_MoveListCursorPosInBounds(UndergroundMenu *menu, int maxDisplay, int count) @@ -1863,5 +1862,5 @@ void UndergroundMenu_MoveListCursorPosInBounds(UndergroundMenu *menu, int maxDis void ov23_02251270(SysTask *sysTask, void *param1) { BrightnessController_SetScreenBrightness(0, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN); - ov23_02251044(param1, 0xfffffffe); + UndergroundMenu_ExitGiftMenu(param1, LIST_CANCEL); } diff --git a/src/overlay023/underground_player_talk.c b/src/overlay023/underground_player_talk.c new file mode 100644 index 0000000000..787b766cda --- /dev/null +++ b/src/overlay023/underground_player_talk.c @@ -0,0 +1,1467 @@ +#include "overlay023/underground_player_talk.h" + +#include +#include + +#include "constants/field_base_tiles.h" +#include "generated/trainer_score_events.h" + +#include "field/field_system.h" +#include "overlay023/ov23_02241F74.h" +#include "overlay023/ov23_02253598.h" +#include "overlay023/underground_menu.h" +#include "overlay023/underground_text_printer.h" + +#include "bg_window.h" +#include "comm_player_manager.h" +#include "communication_information.h" +#include "communication_system.h" +#include "field_system.h" +#include "game_records.h" +#include "heap.h" +#include "list_menu.h" +#include "math_util.h" +#include "menu.h" +#include "message.h" +#include "render_window.h" +#include "sound_playback.h" +#include "string_list.h" +#include "sys_task.h" +#include "sys_task_manager.h" +#include "system.h" +#include "system_vars.h" +#include "trainer_info.h" +#include "unk_0202854C.h" +#include "unk_020573FC.h" +#include "vars_flags.h" + +#include "res/text/bank/underground_answers.h" +#include "res/text/bank/underground_common.h" +#include "res/text/bank/underground_questions.h" + +#define MALE_DIALOGUE_START UndergroundCommon_Text_YouWantedToAskSomething_Male +#define FEMALE_DIALOGUE_START UndergroundCommon_Text_YouWantedToAskSomething_Female + +#define MAX_QUESTION (UndergroundQuestions_Text_HolidayActivity + 1) + +#define NUM_QUESTION_OPTIONS 4 + +#define ANSWERS_PER_QUESTION 4 + +#define ANSWER_INDEX_CANCEL 51 + +enum TalkMenuState { + TALK_MENU_STATE_INIT = 1, + TALK_MENU_STATE_MAIN, + TALK_MENU_STATE_COMM_ERROR, + TALK_MENU_STATE_EXIT, + TALK_MENU_STATE_CASE_EXCHANGE_OFFERED, + TALK_MENU_STATE_CASE_EXCHANGE_DECLINED, + TALK_MENU_STATE_EXIT_AFTER_TEXT, + TALK_MENU_STATE_LINK_EXITED, + TALK_MENU_STATE_START_CASE_EXCHANGE, + TALK_MENU_STATE_VIEW_LINK_CASE, + TALK_MENU_STATE_END_CASE_EXCHANGE, + TALK_MENU_STATE_NOTIFY_LINK_CASE_EXCHANGE_ENDED, + TALK_MENU_STATE_WAIT_FOR_LINK_CASE_EXCHANGE_END, + TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT, + TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT_AFTER_TEXT, + TALK_MENU_STATE_OPEN_GIFT_MENU, + TALK_MENU_STATE_SELECT_GIFT, + TALK_MENU_STATE_GIFT_SELECTED, + TALK_MENU_STATE_OPEN_CONFIRM_GIFT_MENU, + TALK_MENU_STATE_CONFIRM_GIFT, + TALK_MENU_STATE_GIFT_OFFERED, + TALK_MENU_STATE_GIFT_ACCEPTED, + TALK_MENU_STATE_LINK_BAG_FULL, + TALK_MENU_STATE_GIFT_REJECTED, + TALK_MENU_STATE_GIFT_ACCEPTED_FRAME_DELAY, + TALK_MENU_STATE_WAIT_FOR_LINK_CONFIRM, + TALK_MENU_STATE_START_QUESTIONS, + TALK_MENU_STATE_INIT_QUESTIONS_MENU, + TALK_MENU_STATE_SELECT_QUESTION, + TALK_MENU_STATE_PRINT_SELECTED_QUESTION, + TALK_MENU_STATE_WAIT_FOR_LINK_ANSWER, + TALK_MENU_STATE_LINK_ANSWERED, + TALK_MENU_STATE_WAIT_FOR_LINK_TEXT, + TALK_MENU_STATE_INIT_ANSWERS_MENU, + TALK_MENU_STATE_SELECT_ANSWER, + TALK_MENU_STATE_ANSWER_SELECTED, + TALK_MENU_STATE_WAIT_FOR_CONFIRM, + TALK_MENU_STATE_WAIT_FOR_LINK_RECEIVE_ANSWER, + TALK_MENU_STATE_WAIT_FOR_LINK_END_QUESTIONS, + TALK_MENU_STATE_REQUEST_RETURN_TO_MAIN, + TALK_MENU_STATE_WAIT_FOR_LINK_RETURN_TO_MAIN, +}; + +enum ResponseMenuState { + RESPONSE_MENU_STATE_MAIN = 2, + RESPONSE_MENU_STATE_EXIT = 4, + RESPONSE_MENU_STATE_PRINT_EXCHANGE_CASE_PROMPT, + RESPONSE_MENU_STATE_OPEN_CONFIRM_EXCHANGE_MENU, + RESPONSE_MENU_STATE_CONFIRM_EXCHANGE, + RESPONSE_MENU_STATE_PRINT_EXIT_TEXT, + RESPONSE_MENU_STATE_EXIT_AFTER_TEXT, + RESPONSE_MENU_STATE_START_CASE_EXCHANGE, + RESPONSE_MENU_STATE_VIEW_LINK_CASE, + RESPONSE_MENU_STATE_END_CASE_EXCHANGE, + RESPONSE_MENU_STATE_NOTIFY_LINK_CASE_EXCHANGE_ENDED, + RESPONSE_MENU_STATE_WAIT_FOR_LINK_CASE_EXCHANGE_END, + RESPONSE_MENU_STATE_RETURN_TO_MAIN, + RESPONSE_MENU_STATE_REFUSE_TO_ANSWER, + RESPONSE_MENU_STATE_RECEIVE_GIFT_OFFER, + RESPONSE_MENU_STATE_GIFT_OFFERED, + RESPONSE_MENU_STATE_GIFT_ACCEPTED, + RESPONSE_MENU_STATE_GIFT_ACCEPTED_FRAME_DELAY, + RESPONSE_MENU_STATE_END_GIFT, + RESPONSE_MENU_STATE_START_QUESTIONS, + RESPONSE_MENU_STATE_WAIT_FOR_LINK_QUESTION, + RESPONSE_MENU_STATE_INIT_ANSWERS_MENU, + RESPONSE_MENU_STATE_SELECT_ANSWER, + RESPONSE_MENU_STATE_WAIT_FOR_LINK_ANSWER, + RESPONSE_MENU_STATE_LINK_ANSWERED, + RESPONSE_MENU_STATE_PRINT_I_SEE, + RESPONSE_MENU_STATE_WAIT_FOR_PRINT, + RESPONSE_MENU_STATE_WAIT_FOR_LINK_END_QUESTIONS, + RESPONSE_MENU_STATE_WAIT_FOR_PRINT_2, + RESPONSE_MENU_STATE_WAIT_FOR_LINK_RETURN_TO_MAIN, +}; + +enum StateRequest { + TALK_RETURN_TO_MAIN_AFTER_CASE_EXCHANGE = 13, + RESPONSE_RETURN_TO_MAIN_AFTER_CASE_EXCHANGE, + TALK_RETURN_TO_MAIN_AFTER_GIFT, + TALK_ANSWER_RECEIVED = 37, + TALK_RETURN_TO_MAIN_AFTER_REJECTED_QUESTION = 42, + END_QUESTIONS = 100, + RETURN_TO_MAIN_AFTER_QUESTIONS, +}; + +enum TalkMessageType { + MESSAGE_TYPE_QUESTION = 0, + MESSAGE_TYPE_RESPONSE_ANSWER, + MESSAGE_TYPE_TALK_ANSWER, +}; + +typedef struct TalkStateChangeRequest { + u8 targetNetID; + u8 newState; +} TalkStateChangeRequest; + +typedef struct TalkMessage { + u8 index; + u8 recipientNetID; + u8 type; +} TalkMessage; + +typedef struct Gift { + u8 recipientNetID; + u8 dummy; + u8 goodID; +} Gift; + +typedef struct TalkMenu { + SysTask *sysTask; + UndergroundMenu *giftMenu; + FieldSystem *fieldSystem; + Window window; + StringList *menuOptions; + ListMenu *listMenu; + Menu *menu; + Gift sentGift; + ExitCallback exitCallback; + u16 linkNetID; + u8 questionIndex; + u8 linkAnswerIndex; + u8 unused[3]; + u8 state; + u8 linkRequestedState; + u16 cursorPos; +} TalkMenu; + +typedef void (*SelectedOptionCallback)(TalkMenu *menu); + +typedef struct ResponseMenu { + SysTask *sysTask; + FieldSystem *fieldSystem; + Window window; + StringList *menuOptions; + ListMenu *listMenu; + Menu *menu; + Gift receivedGift; + ExitCallback exitCallback; + u16 linkNetID; + u8 linkQuestionIndex; + u8 answerIndex; + u8 linkAnswerIndex; + u8 unused[3]; + u8 state; + u8 linkRequestedState; + u16 cursorPos; +} ResponseMenu; + +static void UndergroundTalk_Main(SysTask *sysTask, void *data); +static void UndergroundTalk_CloseTalkMenu(SysTask *sysTask, TalkMenu *menu); +static void UndergroundTalk_OfferExchangeTrainerCases(TalkMenu *menu); +static void UndergroundTalk_StartAskingQuestions(TalkMenu *menu); +static void UndergroundTalk_OpenGiveGiftMenu(TalkMenu *menu); +static void UndergroundTalk_CancelTalk(TalkMenu *menu); +static void UndergroundTalkResponse_CloseTalkMenu(SysTask *sysTask, ResponseMenu *menu); +static void UndergroundTalk_UpdateCursorPos(TalkMenu *menu); + +static TalkMenu *sCurrentTalkMenu = NULL; +static ResponseMenu *sCurrentResponseMenu = NULL; + +static const struct { + u32 bankEntry; + u32 callback; +} sTalkOptions[] = { + { UndergroundCommon_Text_Greet, (u32)UndergroundTalk_OfferExchangeTrainerCases }, + { UndergroundCommon_Text_Question, (u32)UndergroundTalk_StartAskingQuestions }, + { UndergroundCommon_Text_GiveGoods, (u32)UndergroundTalk_OpenGiveGiftMenu }, + { UndergroundCommon_Text_Exit, (u32)UndergroundTalk_CancelTalk } +}; + +static const ListMenuTemplate sListMenuTemplate = { + .choices = NULL, + .cursorCallback = NULL, + .printCallback = NULL, + .window = NULL, + .count = NELEMS(sTalkOptions), + .maxDisplay = NELEMS(sTalkOptions), + .headerXOffset = 0, + .textXOffset = 8, + .cursorXOffset = 0, + .yOffset = 0, + .textColorFg = 1, + .textColorBg = 15, + .textColorShadow = 2, + .letterSpacing = 0, + .lineSpacing = 16, + .pagerMode = PAGER_MODE_LEFT_RIGHT_PAD, + .fontID = FONT_SYSTEM, + .cursorType = 0, + .parent = NULL, +}; + +static const WindowTemplate sYesNoWindowTemplate = { + .bgLayer = BG_LAYER_MAIN_3, + .tilemapLeft = 25, + .tilemapTop = 13, + .width = 6, + .height = 4, + .palette = 13, + .baseTile = 543, +}; + +static void UndergroundTalkResponse_RequestLinkTalkStateUpdate(ResponseMenu *menu, int newState) +{ + TalkStateChangeRequest req = { + .targetNetID = menu->linkNetID, + .newState = newState + }; + + CommSys_SendDataFixedSize(74, &req); +} + +static void UndergroundTalk_RequestLinkTalkStateUpdate(TalkMenu *menu, int newState) +{ + TalkStateChangeRequest req = { + .targetNetID = menu->linkNetID, + .newState = newState + }; + + CommSys_SendDataFixedSize(73, &req); +} + +static void UndergroundTalk_PrintMessage(TalkMenu *menu, int bankEntry) +{ + if (bankEntry >= MALE_DIALOGUE_START) { + TrainerInfo *trainerInfo = CommInfo_TrainerInfo(menu->linkNetID); + + if (TrainerInfo_Gender(trainerInfo) == GENDER_FEMALE) { + bankEntry = bankEntry - MALE_DIALOGUE_START + FEMALE_DIALOGUE_START; + } + } + + UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), bankEntry, FALSE, NULL); +} + +static void UndergroundTalkResponse_PrintMessage(ResponseMenu *menu, int bankEntry) +{ + if (bankEntry >= MALE_DIALOGUE_START) { + TrainerInfo *trainerInfo = CommInfo_TrainerInfo(menu->linkNetID); + + if (TrainerInfo_Gender(trainerInfo) == GENDER_FEMALE) { + bankEntry = bankEntry - MALE_DIALOGUE_START + FEMALE_DIALOGUE_START; + } + } + + UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), bankEntry, FALSE, NULL); +} + +void UndergroundTalk_Start(int linkNetID, ExitCallback exitCallback, FieldSystem *fieldSystem) +{ + TalkMenu *menu = Heap_Alloc(HEAP_ID_33, sizeof(TalkMenu)); + MI_CpuFill8(menu, 0, sizeof(TalkMenu)); + + sCurrentTalkMenu = menu; + + menu->fieldSystem = fieldSystem; + menu->exitCallback = exitCallback; + menu->linkNetID = linkNetID; + menu->state = TALK_MENU_STATE_INIT; + menu->linkRequestedState = 0; + menu->sentGift.dummy = 0; + menu->sentGift.goodID = 0; + menu->sentGift.recipientNetID = menu->linkNetID; + + Sound_PlayEffect(SEQ_SE_CONFIRM); + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_HeyThere); + + menu->sysTask = SysTask_Start(UndergroundTalk_Main, menu, 10000); +} + +static void UndergroundTalk_InitTalkMenu(TalkMenu *menu) +{ + menu->menuOptions = StringList_New(NELEMS(sTalkOptions), HEAP_ID_FIELD1); + + Window_Add(menu->fieldSystem->bgConfig, &menu->window, BG_LAYER_MAIN_3, 1, 1, 10, NELEMS(sTalkOptions) * 2, 13, BASE_TILE_MESSAGE_WINDOW - 10 * NELEMS(sTalkOptions) * 2); + Window_DrawStandardFrame(&menu->window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11); + + MessageLoader *loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_COMMON, HEAP_ID_FIELD1); + + for (int i = 0; i < NELEMS(sTalkOptions); i++) { + StringList_AddFromMessageBank(menu->menuOptions, loader, sTalkOptions[i].bankEntry, sTalkOptions[i].callback); + } + + MessageLoader_Free(loader); + + ListMenuTemplate template; + MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &template, sizeof(ListMenuTemplate)); + + template.choices = menu->menuOptions; + template.window = &menu->window; + template.count = NELEMS(sTalkOptions); + template.maxDisplay = NELEMS(sTalkOptions); + + menu->cursorPos = 0; + menu->listMenu = ListMenu_New(&template, 0, 0, HEAP_ID_FIELD1); + + Window_CopyToVRAM(&menu->window); + CommPlayerMan_PauseFieldSystem(); +} + +static void UndergroundTalk_Exit(SysTask *sysTask, TalkMenu *menu) +{ + if (menu->menu) { + Menu_DestroyForExit(menu->menu, HEAP_ID_FIELD1); + menu->menu = NULL; + } + + if (menu->giftMenu) { + UndergroundMenu_ExitGiftMenu(menu->giftMenu, LIST_CANCEL); + ov23_02243204(); + } + + UndergroundTalk_CloseTalkMenu(sysTask, menu); + + if (menu->exitCallback) { + menu->exitCallback(0); + } + + Heap_Free(menu); + CommPlayerMan_ResumeFieldSystem(); + SysTask_Done(sysTask); + + sCurrentTalkMenu = NULL; +} + +static void UndergroundTalk_InitQuestionsMenu(TalkMenu *menu) +{ + menu->menuOptions = StringList_New(NUM_QUESTION_OPTIONS, HEAP_ID_FIELD1); + + Window_Add(menu->fieldSystem->bgConfig, &menu->window, BG_LAYER_MAIN_3, 1, 1, 16, NUM_QUESTION_OPTIONS * 2, 13, BASE_TILE_MESSAGE_WINDOW - 16 * NUM_QUESTION_OPTIONS * 2); + Window_DrawStandardFrame(&menu->window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11); + + MessageLoader *loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_QUESTIONS, HEAP_ID_FIELD1); + + u8 questions[NUM_QUESTION_OPTIONS]; + for (int i = 0; i < NUM_QUESTION_OPTIONS; i++) { + u32 questionIndex = MTRNG_Next() % MAX_QUESTION; + + int j; + for (j = 0; j < i; j++) { + if (questions[j] == questionIndex) { + break; + } + } + + if (j == i) { + questions[i] = questionIndex; + StringList_AddFromMessageBank(menu->menuOptions, loader, questionIndex, questionIndex); + } else { + i--; + } + } + + MessageLoader_Free(loader); + + ListMenuTemplate template = sListMenuTemplate; + template.choices = menu->menuOptions; + template.window = &menu->window; + + menu->cursorPos = 0; + menu->listMenu = ListMenu_New(&template, 0, 0, HEAP_ID_FIELD1); + + Window_CopyToVRAM(&menu->window); +} + +static BOOL UndergroundTalk_HandleQuestionsMenu(SysTask *sysTask, void *data) +{ + TalkMenu *menu = data; + + u32 input = ListMenu_ProcessInput(menu->listMenu); + UndergroundTalk_UpdateCursorPos(menu); + + if (CommSys_CheckError()) { + menu->state = TALK_MENU_STATE_COMM_ERROR; + UndergroundTalk_CloseTalkMenu(sysTask, menu); + return TRUE; + } + + switch (input) { + case LIST_CANCEL: + case LIST_NOTHING_CHOSEN: + return FALSE; + break; + default: + Sound_PlayEffect(SEQ_SE_CONFIRM); + TalkMessage message; + + message.index = input; + message.recipientNetID = menu->linkNetID; + message.type = MESSAGE_TYPE_QUESTION; + + CommSys_SendDataFixedSize(79, &message); + + menu->questionIndex = input; + menu->state = TALK_MENU_STATE_PRINT_SELECTED_QUESTION; + + UndergroundTalk_CloseTalkMenu(sysTask, menu); + break; + } + + return TRUE; +} + +static void UndergroundTalk_InitAnswersMenu(TalkMenu *menu) +{ + menu->menuOptions = StringList_New(ANSWERS_PER_QUESTION, HEAP_ID_FIELD1); + + Window_Add(menu->fieldSystem->bgConfig, &menu->window, BG_LAYER_MAIN_3, 1, 1, 16, ANSWERS_PER_QUESTION * 2, 13, BASE_TILE_MESSAGE_WINDOW - 16 * ANSWERS_PER_QUESTION * 2); + Window_DrawStandardFrame(&menu->window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11); + + MessageLoader *loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_ANSWERS, HEAP_ID_FIELD1); + + for (int i = 0; i < ANSWERS_PER_QUESTION; i++) { + u32 answerIndex = menu->questionIndex * ANSWERS_PER_QUESTION + i; + + StringList_AddFromMessageBank(menu->menuOptions, loader, answerIndex, i); + } + + MessageLoader_Free(loader); + + ListMenuTemplate template = sListMenuTemplate; + template.choices = menu->menuOptions; + template.window = &menu->window; + + menu->cursorPos = 0; + menu->listMenu = ListMenu_New(&template, 0, 0, HEAP_ID_FIELD1); + + Window_CopyToVRAM(&menu->window); +} + +static BOOL UndergroundTalk_HandleAnswersMenu(SysTask *sysTask, void *data) +{ + TalkMenu *menu = data; + + u32 input = ListMenu_ProcessInput(menu->listMenu); + UndergroundTalk_UpdateCursorPos(menu); + + if (CommSys_CheckError()) { + UndergroundTalk_CloseTalkMenu(sysTask, menu); + menu->state = TALK_MENU_STATE_COMM_ERROR; + return TRUE; + } + + switch (input) { + case LIST_NOTHING_CHOSEN: + case LIST_CANCEL: + return FALSE; + default: + Sound_PlayEffect(SEQ_SE_CONFIRM); + UndergroundTalk_CloseTalkMenu(sysTask, menu); + TalkMessage message; + message.index = menu->questionIndex * ANSWERS_PER_QUESTION + input; + message.recipientNetID = menu->linkNetID; + message.type = MESSAGE_TYPE_TALK_ANSWER; + CommSys_SendDataFixedSize(79, &message); + UndergroundTextPrinter_SetUndergroundAnswer(CommManUnderground_GetCommonTextPrinter(), message.index); + UndergroundTextPrinter_SetUndergroundAnswerWithIndex(CommManUnderground_GetCommonTextPrinter(), 6, menu->linkAnswerIndex); + + if (menu->linkAnswerIndex == message.index) { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_ResponseSameAnswer_Male); + } else { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_ResponseAnswer_Male); + } + + menu->state = TALK_MENU_STATE_ANSWER_SELECTED; + UndergroundTalk_RequestLinkTalkStateUpdate(menu, RESPONSE_MENU_STATE_LINK_ANSWERED); + break; + } + + return TRUE; +} + +static void UndergroundTalk_RemoveGiftedGood(TalkMenu *menu) +{ + UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCommonTextPrinter(), CommInfo_TrainerInfo(menu->linkNetID)); + UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetCommonTextPrinter(), menu->sentGift.goodID); + UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_GiftWasGiven, FALSE, NULL); + + UndergroundRecord_IncrementGiftsGiven(SaveData_UndergroundRecord(FieldSystem_GetSaveData(menu->fieldSystem))); + UndergroundMenu_RemoveSelectedGoodBag(menu->sentGift.goodID); + Sound_PlayEffect(SEQ_SE_DP_PIRORIRO2); +} + +static void UndergroundTalk_PrintGiftConfirmPrompt(TalkMenu *unused, int goodID) +{ + UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetCommonTextPrinter(), goodID); + UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_YouWantToGiveMeGiftPrompt, FALSE, NULL); +} + +static void UndergroundTalk_HandleGiftConfirmMenu(SysTask *unused, TalkMenu *menu) +{ + u32 input = Menu_ProcessInputAndHandleExit(menu->menu, HEAP_ID_FIELD1); + + if (input == MENU_NOTHING_CHOSEN) { + return; + } + + if (input == 0) { + menu->sentGift.recipientNetID = menu->linkNetID; + CommSys_SendDataFixedSize(77, &menu->sentGift); + menu->state = TALK_MENU_STATE_GIFT_OFFERED; + } else { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_NextTimeWillBeFine); + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT_AFTER_TEXT; + } + + menu->menu = NULL; +} + +static BOOL UndergroundTalk_HandleTalkMenu(SysTask *sysTask, void *data) +{ + TalkMenu *menu = data; + u32 input = ListMenu_ProcessInput(menu->listMenu); + UndergroundTalk_UpdateCursorPos(menu); + + if (CommSys_CheckError()) { + input = LIST_CANCEL; + } + + switch (input) { + case LIST_NOTHING_CHOSEN: + return FALSE; + case LIST_CANCEL: + Sound_PlayEffect(SEQ_SE_CONFIRM); + UndergroundTalk_CancelTalk(menu); + UndergroundTalk_CloseTalkMenu(sysTask, menu); + break; + default: + Sound_PlayEffect(SEQ_SE_CONFIRM); + SelectedOptionCallback callback = (SelectedOptionCallback)input; + callback(menu); + + UndergroundTalk_CloseTalkMenu(sysTask, menu); + break; + } + + return TRUE; +} + +static void UndergroundTalk_CloseTalkMenu(SysTask *unused, TalkMenu *menu) +{ + if (menu->menuOptions) { + Window_EraseStandardFrame(&menu->window, TRUE); + ListMenu_Free(menu->listMenu, NULL, NULL); + Window_ClearAndCopyToVRAM(&menu->window); + Window_Remove(&menu->window); + StringList_Free(menu->menuOptions); + menu->menuOptions = NULL; + } +} + +static void UndergroundTalk_OfferExchangeTrainerCases(TalkMenu *menu) +{ + UndergroundTalk_RequestLinkTalkStateUpdate(menu, RESPONSE_MENU_STATE_PRINT_EXCHANGE_CASE_PROMPT); + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_IllShowTrainerCaseAsWell); + + menu->state = TALK_MENU_STATE_CASE_EXCHANGE_OFFERED; +} + +static void UndergroundTalk_StartAskingQuestions(TalkMenu *menu) +{ + UndergroundTalk_RequestLinkTalkStateUpdate(menu, RESPONSE_MENU_STATE_START_QUESTIONS); + menu->state = TALK_MENU_STATE_START_QUESTIONS; +} + +static void UndergroundTalk_OpenGiveGiftMenu(TalkMenu *menu) +{ + menu->state = TALK_MENU_STATE_OPEN_GIFT_MENU; +} + +static void UndergroundTalk_GiftSelectedCallback(int goodID) +{ + sCurrentTalkMenu->sentGift.goodID = goodID; + sCurrentTalkMenu->state = TALK_MENU_STATE_GIFT_SELECTED; +} + +static void UndergroundTalk_ExitCaseExchangeCallback(void *data) +{ + TalkMenu *menu = data; + menu->state = TALK_MENU_STATE_END_CASE_EXCHANGE; +} + +static void UndergroundTalk_Main(SysTask *sysTask, void *data) +{ + TalkMenu *menu = data; + + if (menu->state != TALK_MENU_STATE_SELECT_GIFT) { + if (!CommSys_IsPlayerConnected(menu->linkNetID)) { + menu->giftMenu = NULL; + ov23_022535EC(); + menu->state = TALK_MENU_STATE_EXIT; + } + } + + switch (menu->state) { + case TALK_MENU_STATE_INIT: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + UndergroundTalk_InitTalkMenu(menu); + menu->state++; + } + break; + case TALK_MENU_STATE_MAIN: + UndergroundTalk_HandleTalkMenu(sysTask, menu); + break; + case TALK_MENU_STATE_COMM_ERROR: + case TALK_MENU_STATE_EXIT: + UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); + UndergroundTalk_Exit(sysTask, menu); + break; + case TALK_MENU_STATE_CASE_EXCHANGE_OFFERED: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (menu->linkRequestedState == TALK_MENU_STATE_START_CASE_EXCHANGE) { + menu->state = TALK_MENU_STATE_START_CASE_EXCHANGE; + ov23_SendRecord(menu->linkNetID); + } + + if (menu->linkRequestedState == TALK_MENU_STATE_CASE_EXCHANGE_DECLINED) { + menu->state = TALK_MENU_STATE_CASE_EXCHANGE_DECLINED; + } + } + break; + case TALK_MENU_STATE_LINK_EXITED: + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_OkSeeYou); + menu->state = TALK_MENU_STATE_EXIT_AFTER_TEXT; + break; + case TALK_MENU_STATE_CASE_EXCHANGE_DECLINED: + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_CantFindMyTrainerCase); + menu->state = TALK_MENU_STATE_EXIT_AFTER_TEXT; + break; + case TALK_MENU_STATE_EXIT_AFTER_TEXT: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (JOY_NEW(PAD_BUTTON_A)) { + menu->state = TALK_MENU_STATE_EXIT; + } + } + break; + case TALK_MENU_STATE_START_CASE_EXCHANGE: + if (ov23_IsLinkRecordReceived()) { + UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); + ov23_ShowTrainerRecord(menu->fieldSystem->bgConfig, CommInfo_TrainerInfo(menu->linkNetID), UndergroundTalk_ExitCaseExchangeCallback, menu, FALSE); + menu->state = TALK_MENU_STATE_VIEW_LINK_CASE; + } + break; + case TALK_MENU_STATE_VIEW_LINK_CASE: + break; + case TALK_MENU_STATE_END_CASE_EXCHANGE: + GameRecords_IncrementTrainerScore(SaveData_GetGameRecords(menu->fieldSystem->saveData), TRAINER_SCORE_EVENT_UNDERGROUND_GREET_PLAYER); + ov23_ClearLinkRecordReceived(); + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_DontBeAStranger); + menu->state = TALK_MENU_STATE_NOTIFY_LINK_CASE_EXCHANGE_ENDED; + break; + case TALK_MENU_STATE_NOTIFY_LINK_CASE_EXCHANGE_ENDED: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + UndergroundTalk_RequestLinkTalkStateUpdate(menu, RESPONSE_RETURN_TO_MAIN_AFTER_CASE_EXCHANGE); + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_CASE_EXCHANGE_END; + } + break; + case TALK_MENU_STATE_WAIT_FOR_LINK_CASE_EXCHANGE_END: + if (menu->linkRequestedState == TALK_RETURN_TO_MAIN_AFTER_CASE_EXCHANGE) { + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT; + } + break; + case TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT: + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_DoSomethingElsePrompt); + menu->state = TALK_MENU_STATE_INIT; + break; + case TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT_AFTER_TEXT: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (JOY_NEW(PAD_BUTTON_A)) { + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT; + } + } + break; + case TALK_MENU_STATE_OPEN_GIFT_MENU: + menu->giftMenu = UndergroundMenu_StartGiftMenu(UndergroundTalk_GiftSelectedCallback, menu->fieldSystem); + menu->state = TALK_MENU_STATE_SELECT_GIFT; + break; + case TALK_MENU_STATE_SELECT_GIFT: + break; + case TALK_MENU_STATE_GIFT_SELECTED: + menu->giftMenu = NULL; + + if (sCurrentTalkMenu->sentGift.goodID == 0) { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_NextTimeWillBeFine); + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT_AFTER_TEXT; + } else if (sub_02032FC0(menu->linkNetID)) { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_IllPass); + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT_AFTER_TEXT; + } else if (!sub_02028810(menu->fieldSystem->saveData)) { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_IllPass); + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT_AFTER_TEXT; + } else if (sub_0205748C(sCurrentTalkMenu->sentGift.goodID)) { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_CantAcceptImportant); + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT_AFTER_TEXT; + } else { + UndergroundTalk_PrintGiftConfirmPrompt(menu, sCurrentTalkMenu->sentGift.goodID); + menu->state = TALK_MENU_STATE_OPEN_CONFIRM_GIFT_MENU; + } + break; + case TALK_MENU_STATE_OPEN_CONFIRM_GIFT_MENU: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + menu->menu = Menu_MakeYesNoChoice(menu->fieldSystem->bgConfig, &sYesNoWindowTemplate, BASE_TILE_STANDARD_WINDOW_FRAME, 11, HEAP_ID_FIELD1); + menu->state = TALK_MENU_STATE_CONFIRM_GIFT; + + if (menu->linkRequestedState != TALK_MENU_STATE_LINK_EXITED) { + menu->linkRequestedState = TALK_MENU_STATE_INIT; + } + } + break; + case TALK_MENU_STATE_CONFIRM_GIFT: + UndergroundTalk_HandleGiftConfirmMenu(sysTask, menu); + break; + case TALK_MENU_STATE_GIFT_OFFERED: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (menu->linkRequestedState == TALK_MENU_STATE_GIFT_ACCEPTED) { + menu->state = TALK_MENU_STATE_GIFT_ACCEPTED; + } + + if (menu->linkRequestedState == TALK_MENU_STATE_GIFT_REJECTED) { + menu->state = TALK_MENU_STATE_GIFT_REJECTED; + } + + if (menu->linkRequestedState == TALK_MENU_STATE_LINK_BAG_FULL) { + menu->state = TALK_MENU_STATE_LINK_BAG_FULL; + } + } + break; + case TALK_MENU_STATE_LINK_BAG_FULL: + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_LinkDoesntHaveRoom); + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_CONFIRM; + break; + case TALK_MENU_STATE_GIFT_REJECTED: + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_ICantTakeThatFromYou); + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_CONFIRM; + break; + case TALK_MENU_STATE_GIFT_ACCEPTED: + UndergroundTalk_RemoveGiftedGood(menu); + VarsFlags *varsFlags = SaveData_GetVarsFlags(menu->fieldSystem->saveData); + SystemVars_SetUndergroundItemsGivenAway(varsFlags, SystemVars_GetUndergroundItemsGivenAway(varsFlags) + 1); + + GameRecords_IncrementTrainerScore(SaveData_GetGameRecords(menu->fieldSystem->saveData), TRAINER_SCORE_EVENT_UNDERGROUND_GIVE_PLAYER_GOODS); + menu->state = TALK_MENU_STATE_GIFT_ACCEPTED_FRAME_DELAY; + break; + case TALK_MENU_STATE_GIFT_ACCEPTED_FRAME_DELAY: + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_CONFIRM; + break; + case TALK_MENU_STATE_WAIT_FOR_LINK_CONFIRM: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (menu->linkRequestedState == TALK_RETURN_TO_MAIN_AFTER_GIFT) { + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT; + } + } + break; + case TALK_MENU_STATE_START_QUESTIONS: + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_YouWantedToAskSomething_Male); + menu->state = TALK_MENU_STATE_INIT_QUESTIONS_MENU; + break; + case TALK_MENU_STATE_INIT_QUESTIONS_MENU: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + UndergroundTalk_InitQuestionsMenu(menu); + menu->state = TALK_MENU_STATE_SELECT_QUESTION; + } + break; + case TALK_MENU_STATE_SELECT_QUESTION: + UndergroundTalk_HandleQuestionsMenu(sysTask, menu); + break; + case TALK_MENU_STATE_PRINT_SELECTED_QUESTION: + UndergroundTextPrinter_SetUndergroundQuestion(CommManUnderground_GetCommonTextPrinter(), menu->questionIndex); + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_LetMeThink_Male); + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_ANSWER; + break; + case TALK_MENU_STATE_WAIT_FOR_LINK_ANSWER: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (menu->linkRequestedState == TALK_MENU_STATE_LINK_ANSWERED) { + menu->state = TALK_MENU_STATE_LINK_ANSWERED; + } + } + break; + case TALK_MENU_STATE_LINK_ANSWERED: + if (menu->linkAnswerIndex == ANSWER_INDEX_CANCEL) { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_ICantDecide_Male); + menu->linkRequestedState = 0; + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_TEXT; + } else { + UndergroundTextPrinter_SetUndergroundAnswer(CommManUnderground_GetCommonTextPrinter(), menu->linkAnswerIndex); + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_IHaveAnswerWhatsYours_Male); + menu->state = TALK_MENU_STATE_INIT_ANSWERS_MENU; + } + break; + case TALK_MENU_STATE_WAIT_FOR_LINK_TEXT: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (menu->linkRequestedState == TALK_RETURN_TO_MAIN_AFTER_REJECTED_QUESTION) { + menu->linkRequestedState = 0; + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT; + } + } + break; + case TALK_MENU_STATE_INIT_ANSWERS_MENU: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + UndergroundTalk_InitAnswersMenu(menu); + menu->state = TALK_MENU_STATE_SELECT_ANSWER; + } + break; + case TALK_MENU_STATE_SELECT_ANSWER: + UndergroundTalk_HandleAnswersMenu(sysTask, menu); + break; + case TALK_MENU_STATE_ANSWER_SELECTED: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + GameRecords_IncrementTrainerScore(SaveData_GetGameRecords(menu->fieldSystem->saveData), TRAINER_SCORE_EVENT_UNDERGROUND_ASK_PLAYER_QUESTION); + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_ISee_Male); + menu->state = TALK_MENU_STATE_WAIT_FOR_CONFIRM; + } + break; + case TALK_MENU_STATE_WAIT_FOR_CONFIRM: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (JOY_NEW(PAD_BUTTON_A)) { + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_RECEIVE_ANSWER; + } + } + break; + case TALK_MENU_STATE_WAIT_FOR_LINK_RECEIVE_ANSWER: + if (menu->linkRequestedState == TALK_ANSWER_RECEIVED) { + UndergroundTalk_RequestLinkTalkStateUpdate(menu, END_QUESTIONS); + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_END_QUESTIONS; + } + break; + case TALK_MENU_STATE_WAIT_FOR_LINK_END_QUESTIONS: + if (menu->linkRequestedState == END_QUESTIONS) { + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_ThanksForAnswering_Male); + menu->state = TALK_MENU_STATE_REQUEST_RETURN_TO_MAIN; + } + break; + case TALK_MENU_STATE_REQUEST_RETURN_TO_MAIN: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + UndergroundTalk_RequestLinkTalkStateUpdate(menu, RETURN_TO_MAIN_AFTER_QUESTIONS); + menu->state = TALK_MENU_STATE_WAIT_FOR_LINK_RETURN_TO_MAIN; + } + break; + case TALK_MENU_STATE_WAIT_FOR_LINK_RETURN_TO_MAIN: + if (menu->linkRequestedState == RETURN_TO_MAIN_AFTER_QUESTIONS) { + menu->state = TALK_MENU_STATE_DO_SOMETHING_ELSE_PROMPT; + } + break; + } + + if (menu->linkRequestedState == TALK_MENU_STATE_LINK_EXITED) { + if (menu->state == TALK_MENU_STATE_EXIT || menu->state == TALK_MENU_STATE_EXIT_AFTER_TEXT) { + return; + } + + if (menu->menu) { + Menu_DestroyForExit(menu->menu, HEAP_ID_FIELD1); + menu->menu = NULL; + } + + if (menu->giftMenu) { + UndergroundMenu_ExitGiftMenu(menu->giftMenu, LIST_CANCEL); + ov23_02243204(); + UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter()); + menu->giftMenu = NULL; + } + + UndergroundTalk_CloseTalkMenu(sysTask, menu); + + menu->state = TALK_MENU_STATE_LINK_EXITED; + menu->linkRequestedState = 0; + } +} + +static void UndergroundTalk_CancelTalk(TalkMenu *menu) +{ + UndergroundTalk_PrintMessage(menu, UndergroundCommon_Text_OkSeeYou); + UndergroundTalk_RequestLinkTalkStateUpdate(menu, RESPONSE_MENU_STATE_PRINT_EXIT_TEXT); + + menu->state = TALK_MENU_STATE_EXIT_AFTER_TEXT; +} + +static void UndergroundTalkResponse_HandleConfirmTrainerCaseMenu(SysTask *unused, ResponseMenu *menu) +{ + u32 input = Menu_ProcessInputAndHandleExit(menu->menu, HEAP_ID_FIELD1); + + if (input == MENU_NOTHING_CHOSEN) { + return; + } + + if (input == 0) { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_MENU_STATE_START_CASE_EXCHANGE); + ov23_SendRecord(menu->linkNetID); + menu->state = RESPONSE_MENU_STATE_START_CASE_EXCHANGE; + } else { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_MENU_STATE_CASE_EXCHANGE_DECLINED); + menu->state = RESPONSE_MENU_STATE_PRINT_EXIT_TEXT; + } + + menu->menu = NULL; +} + +static void UndergroundTalkResponse_HandleAcceptGiftMenu(SysTask *unused, ResponseMenu *menu) +{ + u32 input = Menu_ProcessInputAndHandleExit(menu->menu, HEAP_ID_FIELD1); + + if (input == MENU_NOTHING_CHOSEN) { + return; + } + + if (input == 0) { + if (UndergroundInventory_TryAddGoodBag(menu->receivedGift.goodID)) { + UndergroundRecord_IncrementGiftsReceived(SaveData_UndergroundRecord(FieldSystem_GetSaveData(menu->fieldSystem))); + Sound_PlayEffect(SEQ_SE_DP_PIRORIRO2); + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_MENU_STATE_GIFT_ACCEPTED); + + menu->state = RESPONSE_MENU_STATE_GIFT_ACCEPTED; + } else { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_MENU_STATE_LINK_BAG_FULL); + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_TooBadBagIsFull2); + + menu->state = RESPONSE_MENU_STATE_END_GIFT; + } + } else { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_MENU_STATE_GIFT_REJECTED); + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_DoYouHaveOneAlready); + + menu->state = RESPONSE_MENU_STATE_END_GIFT; + } + + menu->menu = NULL; +} + +static void UndergroundTalkResponse_Exit(SysTask *sysTask, ResponseMenu *menu) +{ + if (menu->menu) { + Menu_DestroyForExit(menu->menu, HEAP_ID_FIELD1); + menu->menu = NULL; + } + + if (menu->exitCallback) { + menu->exitCallback(0); + } + + UndergroundTalkResponse_CloseTalkMenu(sysTask, menu); + + Heap_Free(menu); + CommPlayerMan_ResumeFieldSystem(); + SysTask_Done(sysTask); + + sCurrentResponseMenu = NULL; +} + +static void UndergroundTalkResponse_CloseTalkMenu(SysTask *unused, ResponseMenu *menu) +{ + if (menu->menuOptions) { + Window_EraseStandardFrame(&menu->window, TRUE); + ListMenu_Free(menu->listMenu, NULL, NULL); + Window_ClearAndCopyToVRAM(&menu->window); + Window_Remove(&menu->window); + StringList_Free(menu->menuOptions); + menu->menuOptions = NULL; + } +} + +static void UndergroundTalkResponse_PrintTextWithLinkName(ResponseMenu *menu, int linkNetID, int bankEntry) +{ + UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCommonTextPrinter(), CommInfo_TrainerInfo(linkNetID)); + UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), bankEntry, FALSE, NULL); +} + +static void UndergroundTalkResponse_PrintReceivedGift(ResponseMenu *menu) +{ + UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCommonTextPrinter(), CommInfo_TrainerInfo(menu->linkNetID)); + UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetCommonTextPrinter(), menu->receivedGift.goodID); + UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_YouReceivedGift, FALSE, NULL); +} + +static void UndergroundTalkResponse_InitAnswersMenu(ResponseMenu *menu) +{ + const int optionCount = ANSWERS_PER_QUESTION + 1; + + menu->menuOptions = StringList_New(optionCount, HEAP_ID_FIELD1); + + Window_Add(menu->fieldSystem->bgConfig, &menu->window, BG_LAYER_MAIN_3, 1, 1, 16, optionCount * 2, 13, BASE_TILE_MESSAGE_WINDOW - 16 * optionCount * 2); + Window_DrawStandardFrame(&menu->window, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11); + + MessageLoader *loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_ANSWERS, HEAP_ID_FIELD1); + + for (int i = 0; i < ANSWERS_PER_QUESTION; i++) { + u32 answerIndex = menu->linkQuestionIndex * ANSWERS_PER_QUESTION + i; + + StringList_AddFromMessageBank(menu->menuOptions, loader, answerIndex, i); + } + + StringList_AddFromMessageBank(menu->menuOptions, loader, UndergroundAnswers_Text_DontKnow, ANSWER_INDEX_CANCEL); + MessageLoader_Free(loader); + + ListMenuTemplate template = sListMenuTemplate; + template.choices = menu->menuOptions; + template.window = &menu->window; + template.count = optionCount; + template.maxDisplay = optionCount; + + menu->cursorPos = 0; + menu->listMenu = ListMenu_New(&template, 0, 0, HEAP_ID_FIELD1); + + Window_CopyToVRAM(&menu->window); +} + +static BOOL UndergroundTalkResponse_HandleAnswersMenu(SysTask *sysTask, void *data) +{ + ResponseMenu *menu = data; + + u32 input = ListMenu_ProcessInput(menu->listMenu); + u16 prevPos = menu->cursorPos; + + ListMenu_CalcTrueCursorPos(menu->listMenu, &menu->cursorPos); + + if (prevPos != menu->cursorPos) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + } + + if (CommSys_CheckError()) { + input = LIST_CANCEL; + } + + switch (input) { + case LIST_NOTHING_CHOSEN: + return FALSE; + case LIST_CANCEL: + input = ANSWER_INDEX_CANCEL; + default: + Sound_PlayEffect(SEQ_SE_CONFIRM); + UndergroundTalkResponse_CloseTalkMenu(sysTask, menu); + + if (input != ANSWER_INDEX_CANCEL) { + menu->answerIndex = menu->linkQuestionIndex * ANSWERS_PER_QUESTION + input; + menu->state = RESPONSE_MENU_STATE_WAIT_FOR_LINK_ANSWER; + + UndergroundTextPrinter_SetUndergroundAnswer(CommManUnderground_GetCommonTextPrinter(), menu->answerIndex); + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_YouveDecidedLetMeThink_Male); + } else { + menu->answerIndex = ANSWER_INDEX_CANCEL; + menu->state = RESPONSE_MENU_STATE_REFUSE_TO_ANSWER; + menu->linkRequestedState = 0; + + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_YouDontHaveToAnswer_Male); + } + + TalkMessage message; + message.index = menu->answerIndex; + message.recipientNetID = menu->linkNetID; + message.type = MESSAGE_TYPE_RESPONSE_ANSWER; + + CommSys_SendDataFixedSize(79, &message); + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_MENU_STATE_LINK_ANSWERED); + break; + } + + return TRUE; +} + +static void UndergroundTalkResponse_ExitCaseExchangeCallback(void *data) +{ + ResponseMenu *menu = data; + menu->state = RESPONSE_MENU_STATE_END_CASE_EXCHANGE; +} + +static void UndergroundTalkResponse_Main(SysTask *sysTask, void *data) +{ + ResponseMenu *menu = data; + + if (!CommSys_IsPlayerConnected(menu->linkNetID)) { + ov23_022535EC(); + menu->state = TALK_MENU_STATE_EXIT; + } + + switch (menu->state) { + case RESPONSE_MENU_STATE_EXIT: + UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); + UndergroundTalkResponse_Exit(sysTask, menu); + break; + case RESPONSE_MENU_STATE_MAIN: + menu->linkQuestionIndex = MAX_QUESTION; + + if (JOY_NEW(PAD_BUTTON_B)) { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_MENU_STATE_LINK_EXITED); + menu->state = RESPONSE_MENU_STATE_PRINT_EXIT_TEXT; + } else if (menu->linkRequestedState == RESPONSE_MENU_STATE_PRINT_EXCHANGE_CASE_PROMPT) { + menu->state = RESPONSE_MENU_STATE_PRINT_EXCHANGE_CASE_PROMPT; + } else if (menu->linkRequestedState == RESPONSE_MENU_STATE_START_QUESTIONS) { + menu->state = RESPONSE_MENU_STATE_START_QUESTIONS; + } + break; + case RESPONSE_MENU_STATE_PRINT_EXCHANGE_CASE_PROMPT: + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_ExchangeTrainerCasePrompt); + menu->state = RESPONSE_MENU_STATE_OPEN_CONFIRM_EXCHANGE_MENU; + break; + case RESPONSE_MENU_STATE_OPEN_CONFIRM_EXCHANGE_MENU: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + menu->state = RESPONSE_MENU_STATE_CONFIRM_EXCHANGE; + menu->menu = Menu_MakeYesNoChoice(menu->fieldSystem->bgConfig, &sYesNoWindowTemplate, BASE_TILE_STANDARD_WINDOW_FRAME, 11, HEAP_ID_FIELD1); + } + break; + case RESPONSE_MENU_STATE_CONFIRM_EXCHANGE: + UndergroundTalkResponse_HandleConfirmTrainerCaseMenu(sysTask, menu); + break; + case RESPONSE_MENU_STATE_PRINT_EXIT_TEXT: + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_OkSeeYou); + menu->state = RESPONSE_MENU_STATE_EXIT_AFTER_TEXT; + break; + case RESPONSE_MENU_STATE_EXIT_AFTER_TEXT: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (JOY_NEW(PAD_BUTTON_A)) { + menu->state = RESPONSE_MENU_STATE_EXIT; + } + } + break; + case RESPONSE_MENU_STATE_START_CASE_EXCHANGE: + if (ov23_IsLinkRecordReceived()) { + UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter()); + ov23_ShowTrainerRecord(menu->fieldSystem->bgConfig, CommInfo_TrainerInfo(menu->linkNetID), UndergroundTalkResponse_ExitCaseExchangeCallback, menu, FALSE); + menu->state = RESPONSE_MENU_STATE_VIEW_LINK_CASE; + } + break; + case RESPONSE_MENU_STATE_VIEW_LINK_CASE: + break; + case RESPONSE_MENU_STATE_END_CASE_EXCHANGE: + ov23_ClearLinkRecordReceived(); + UndergroundTalkResponse_PrintTextWithLinkName(menu, menu->linkNetID, UndergroundCommon_Text_GladToHaveMetYou); + menu->state = RESPONSE_MENU_STATE_NOTIFY_LINK_CASE_EXCHANGE_ENDED; + break; + case RESPONSE_MENU_STATE_NOTIFY_LINK_CASE_EXCHANGE_ENDED: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_RETURN_TO_MAIN_AFTER_CASE_EXCHANGE); + menu->state = RESPONSE_MENU_STATE_WAIT_FOR_LINK_CASE_EXCHANGE_END; + } + break; + case RESPONSE_MENU_STATE_WAIT_FOR_LINK_CASE_EXCHANGE_END: + if (menu->linkRequestedState == RESPONSE_RETURN_TO_MAIN_AFTER_CASE_EXCHANGE) { + menu->state = RESPONSE_MENU_STATE_RETURN_TO_MAIN; + } + break; + case RESPONSE_MENU_STATE_RETURN_TO_MAIN: + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_So); + menu->state = RESPONSE_MENU_STATE_MAIN; + break; + case RESPONSE_MENU_STATE_REFUSE_TO_ANSWER: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + menu->state = RESPONSE_MENU_STATE_RETURN_TO_MAIN; + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_RETURN_TO_MAIN_AFTER_REJECTED_QUESTION); + } + break; + case RESPONSE_MENU_STATE_RECEIVE_GIFT_OFFER: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + menu->state = RESPONSE_MENU_STATE_GIFT_OFFERED; + menu->menu = Menu_MakeYesNoChoice(menu->fieldSystem->bgConfig, &sYesNoWindowTemplate, BASE_TILE_STANDARD_WINDOW_FRAME, 11, HEAP_ID_FIELD1); + } + break; + case RESPONSE_MENU_STATE_GIFT_OFFERED: + UndergroundTalkResponse_HandleAcceptGiftMenu(sysTask, menu); + break; + case RESPONSE_MENU_STATE_GIFT_ACCEPTED: + UndergroundTalkResponse_PrintReceivedGift(menu); + menu->state = RESPONSE_MENU_STATE_GIFT_ACCEPTED_FRAME_DELAY; + break; + case RESPONSE_MENU_STATE_GIFT_ACCEPTED_FRAME_DELAY: + menu->state = RESPONSE_MENU_STATE_END_GIFT; + break; + case RESPONSE_MENU_STATE_END_GIFT: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (JOY_NEW(PAD_BUTTON_A)) { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_RETURN_TO_MAIN_AFTER_GIFT); + menu->state = RESPONSE_MENU_STATE_RETURN_TO_MAIN; + } + } + break; + case RESPONSE_MENU_STATE_START_QUESTIONS: + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_MayIAskQuestion_Male); + menu->state++; + break; + case RESPONSE_MENU_STATE_WAIT_FOR_LINK_QUESTION: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (menu->linkQuestionIndex != MAX_QUESTION) { + UndergroundTextPrinter_SetUndergroundQuestion(CommManUnderground_GetCommonTextPrinter(), menu->linkQuestionIndex); + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_WhatsYourChoice_Male); + menu->state = RESPONSE_MENU_STATE_INIT_ANSWERS_MENU; + } + } + break; + case RESPONSE_MENU_STATE_INIT_ANSWERS_MENU: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + UndergroundTalkResponse_InitAnswersMenu(menu); + menu->state = RESPONSE_MENU_STATE_SELECT_ANSWER; + } + break; + case RESPONSE_MENU_STATE_SELECT_ANSWER: + UndergroundTalkResponse_HandleAnswersMenu(sysTask, menu); + break; + case RESPONSE_MENU_STATE_WAIT_FOR_LINK_ANSWER: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + if (menu->linkRequestedState == RESPONSE_MENU_STATE_LINK_ANSWERED) { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_ANSWER_RECEIVED); + menu->state = RESPONSE_MENU_STATE_LINK_ANSWERED; + } + } + break; + case RESPONSE_MENU_STATE_LINK_ANSWERED: + UndergroundTextPrinter_SetUndergroundAnswer(CommManUnderground_GetCommonTextPrinter(), menu->linkAnswerIndex); + UndergroundTextPrinter_SetUndergroundAnswerWithIndex(CommManUnderground_GetCommonTextPrinter(), 6, menu->answerIndex); + + if (menu->answerIndex == menu->linkAnswerIndex) { + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_SameAnswer_Male); + } else { + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_Answer_Male); + } + + menu->state = RESPONSE_MENU_STATE_PRINT_I_SEE; + break; + case RESPONSE_MENU_STATE_PRINT_I_SEE: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_ISee2_Male); + menu->state = RESPONSE_MENU_STATE_WAIT_FOR_PRINT; + } + break; + case RESPONSE_MENU_STATE_WAIT_FOR_PRINT: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + menu->state = RESPONSE_MENU_STATE_WAIT_FOR_LINK_END_QUESTIONS; + } + break; + case RESPONSE_MENU_STATE_WAIT_FOR_LINK_END_QUESTIONS: + if (menu->linkRequestedState == END_QUESTIONS) { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, END_QUESTIONS); + UndergroundTalkResponse_PrintMessage(menu, UndergroundCommon_Text_ThanksForAnswering_Male); + menu->state = RESPONSE_MENU_STATE_WAIT_FOR_PRINT_2; + } + break; + case RESPONSE_MENU_STATE_WAIT_FOR_PRINT_2: + if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) { + menu->state = RESPONSE_MENU_STATE_WAIT_FOR_LINK_RETURN_TO_MAIN; + } + break; + case RESPONSE_MENU_STATE_WAIT_FOR_LINK_RETURN_TO_MAIN: + if (menu->linkRequestedState == RETURN_TO_MAIN_AFTER_QUESTIONS) { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, RETURN_TO_MAIN_AFTER_QUESTIONS); + menu->state = RESPONSE_MENU_STATE_RETURN_TO_MAIN; + } + break; + } + + if (menu->linkRequestedState == RESPONSE_MENU_STATE_PRINT_EXIT_TEXT) { + if (menu->state == RESPONSE_MENU_STATE_EXIT || menu->state == RESPONSE_MENU_STATE_EXIT_AFTER_TEXT) { + return; + } + + if (menu->menu) { + Menu_DestroyForExit(menu->menu, HEAP_ID_FIELD1); + menu->menu = NULL; + } + + UndergroundTalkResponse_CloseTalkMenu(sysTask, menu); + + menu->state = RESPONSE_MENU_STATE_PRINT_EXIT_TEXT; + menu->linkRequestedState = 0; + } +} + +void UndergroundTalkResponse_Start(int unused, int linkNetID, FieldSystem *fieldSystem) +{ + if (sCurrentResponseMenu) { + GF_ASSERT(FALSE); + return; + } + + ResponseMenu *menu = Heap_Alloc(HEAP_ID_33, sizeof(ResponseMenu)); + MI_CpuFill8(menu, 0, sizeof(ResponseMenu)); + + sCurrentResponseMenu = menu; + + menu->fieldSystem = fieldSystem; + menu->linkNetID = linkNetID; + menu->state = RESPONSE_MENU_STATE_MAIN; + menu->linkRequestedState = 0; + menu->linkQuestionIndex = MAX_QUESTION; + + UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_Hello, FALSE, NULL); + CommPlayerMan_ForceDir(); + + menu->sysTask = SysTask_Start(UndergroundTalkResponse_Main, menu, 10000); +} + +void UndergroundTalk_RequestLinkTalkStateUpdateServer(int unused0, int unused1, void *data, void *unused3) +{ + sub_02035B48(75, data); +} + +void UndergroundTalkResponse_RequestLinkTalkStateUpdateServer(int unused0, int unused1, void *data, void *unused3) +{ + sub_02035B48(76, data); +} + +void UndergroundTalkResponse_HandleLinkTalkStateUpdateServer(int unused0, int size, void *data, void *unused3) +{ + TalkStateChangeRequest *req = data; + + if (req->targetNetID == CommSys_CurNetId() && sCurrentResponseMenu) { + GF_ASSERT(size == sizeof(TalkStateChangeRequest)); + sCurrentResponseMenu->linkRequestedState = req->newState; + } +} + +void UndergroundTalk_HandleLinkTalkStateUpdateServer(int unused0, int size, void *data, void *unused3) +{ + TalkStateChangeRequest *req = data; + + if (req->targetNetID == CommSys_CurNetId() && sCurrentTalkMenu) { + GF_ASSERT(size == sizeof(TalkStateChangeRequest)); + GF_ASSERT(sCurrentTalkMenu != NULL); + + sCurrentTalkMenu->linkRequestedState = req->newState; + } +} + +int CommPacketSizeOf_TalkStateChangeRequest(void) +{ + return sizeof(TalkStateChangeRequest); +} + +void UndergroundTalk_SendGiftServer(int unused0, int unused1, void *data, void *unused3) +{ + sub_02035B48(78, data); +} + +void UndergroundTalkResponse_ReceiveGiftOffer(int unused0, int unused1, void *data, void *unused3) +{ + ResponseMenu *menu = sCurrentResponseMenu; + Gift *gift = data; + + if (CommSys_CurNetId() != gift->recipientNetID) { + return; + } + + GF_ASSERT(sCurrentResponseMenu != NULL); + + if (menu->state != RESPONSE_MENU_STATE_MAIN) { + UndergroundTalkResponse_RequestLinkTalkStateUpdate(menu, TALK_MENU_STATE_LINK_EXITED); + menu->state = RESPONSE_MENU_STATE_PRINT_EXIT_TEXT; + return; + } + + menu->receivedGift.recipientNetID = gift->recipientNetID; + menu->receivedGift.dummy = gift->dummy; + menu->receivedGift.goodID = gift->goodID; + menu->state = RESPONSE_MENU_STATE_RECEIVE_GIFT_OFFER; + + UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetCommonTextPrinter(), gift->goodID); + UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_YouCanHaveThisGift, FALSE, NULL); +} + +int CommPacketSizeOf_Gift(void) +{ + return sizeof(Gift); +} + +void UndergroundTalk_SendTalkMessageServer(int unused0, int unused1, void *data, void *unused3) +{ + sub_02035B48(80, data); +} + +void UndergroundTalk_ReceiveTalkMessage(int unused0, int unused1, void *data, void *unused3) +{ + ResponseMenu *responseMenu = sCurrentResponseMenu; + TalkMenu *talkMenu = sCurrentTalkMenu; + TalkMessage *message = data; + + if (message->recipientNetID == CommSys_CurNetId()) { + switch (message->type) { + case MESSAGE_TYPE_QUESTION: + responseMenu->linkQuestionIndex = message->index; + break; + case MESSAGE_TYPE_RESPONSE_ANSWER: + talkMenu->linkAnswerIndex = message->index; + break; + case MESSAGE_TYPE_TALK_ANSWER: + responseMenu->linkAnswerIndex = message->index; + break; + } + } +} + +int CommPacketSizeOf_TalkMessage(void) +{ + return sizeof(TalkMessage); +} + +void UndergroundTalk_ExitConversation(void) +{ + if (sCurrentTalkMenu) { + UndergroundTalk_Exit(sCurrentTalkMenu->sysTask, sCurrentTalkMenu); + } + + if (sCurrentResponseMenu) { + UndergroundTalkResponse_Exit(sCurrentResponseMenu->sysTask, sCurrentResponseMenu); + } +} + +static void UndergroundTalk_UpdateCursorPos(TalkMenu *menu) +{ + u16 pos = menu->cursorPos; + ListMenu_CalcTrueCursorPos(menu->listMenu, &menu->cursorPos); + + if (pos != menu->cursorPos) { + Sound_PlayEffect(SEQ_SE_CONFIRM); + } + + return; +} diff --git a/src/render_window.c b/src/render_window.c index c090cedb07..980eb5b4ea 100644 --- a/src/render_window.c +++ b/src/render_window.c @@ -29,16 +29,14 @@ #include "res/graphics/signposts/field_board.naix.h" #include "res/graphics/windows/pl_winframe.naix.h" -#define SIGNPOST_CONTENT_WIDTH_TILES 6 -#define SIGNPOST_CONTENT_HEIGHT_TILES 4 -#define SIGNPOST_BORDER_LEFT_SIZE 1 -#define SIGNPOST_BORDER_RIGHT_SIZE 2 -#define SIGNPOST_BORDER_Y_SIZE 1 -#define SIGNPOST_WIDTH_TILES (SIGNPOST_CONTENT_WIDTH_TILES + SIGNPOST_BORDER_LEFT_SIZE + SIGNPOST_BORDER_RIGHT_SIZE) -#define SIGNPOST_HEIGHT_TILES (SIGNPOST_CONTENT_HEIGHT_TILES + SIGNPOST_BORDER_Y_SIZE + SIGNPOST_BORDER_Y_SIZE) -#define SIGNPOST_WIDTH_SIZE (SIGNPOST_WIDTH_TILES * 2) -#define SIGNPOST_HEIGHT_SIZE (SIGNPOST_HEIGHT_TILES * 2) -#define SIGNPOST_SIZE (SIGNPOST_WIDTH_SIZE + SIGNPOST_HEIGHT_SIZE) +#define SIGNPOST_BORDER_LEFT_SIZE 1 +#define SIGNPOST_BORDER_RIGHT_SIZE 2 +#define SIGNPOST_BORDER_Y_SIZE 1 +#define SIGNPOST_WIDTH_TILES (SIGNPOST_CONTENT_WIDTH_TILES + SIGNPOST_BORDER_LEFT_SIZE + SIGNPOST_BORDER_RIGHT_SIZE) +#define SIGNPOST_HEIGHT_TILES (SIGNPOST_CONTENT_HEIGHT_TILES + SIGNPOST_BORDER_Y_SIZE + SIGNPOST_BORDER_Y_SIZE) +#define SIGNPOST_WIDTH_SIZE (SIGNPOST_WIDTH_TILES * 2) +#define SIGNPOST_HEIGHT_SIZE (SIGNPOST_HEIGHT_TILES * 2) +#define SIGNPOST_SIZE (SIGNPOST_WIDTH_SIZE + SIGNPOST_HEIGHT_SIZE) #define WAIT_DIAL_FRAME_WIDTH_TILES 2 #define WAIT_DIAL_FRAME_HEIGHT_TILES 2 diff --git a/src/unk_0202854C.c b/src/unk_0202854C.c index e50dff846f..5c6b2b6462 100644 --- a/src/unk_0202854C.c +++ b/src/unk_0202854C.c @@ -1262,15 +1262,15 @@ void UndergroundRecord_IncrementNumPlayersHelped(UndergroundRecord *undergroundR } } -int sub_02029774(const UndergroundRecord *param0) +int UndergroundRecord_GetGiftsReceived(const UndergroundRecord *undergroundRecord) { - return param0->unk_28_0; + return undergroundRecord->numGiftsReceived; } -void sub_0202977C(UndergroundRecord *param0) +void UndergroundRecord_IncrementGiftsReceived(UndergroundRecord *undergroundRecord) { - if (param0->unk_28_0 < 999999) { - param0->unk_28_0++; + if (undergroundRecord->numGiftsReceived < 999999) { + undergroundRecord->numGiftsReceived++; } } diff --git a/src/unk_02099500.c b/src/unk_02099500.c index a46f381d2a..10f98d2a0a 100644 --- a/src/unk_02099500.c +++ b/src/unk_02099500.c @@ -9,9 +9,9 @@ #include "overlay023/ov23_02241F74.h" #include "overlay023/ov23_0224A1D0.h" #include "overlay023/ov23_0224B05C.h" -#include "overlay023/ov23_0224DC40.h" #include "overlay023/ov23_0225128C.h" #include "overlay023/ov23_02253598.h" +#include "overlay023/underground_player_talk.h" #include "overlay023/underground_spheres.h" #include "overlay023/underground_traps.h" @@ -97,16 +97,16 @@ static const CommCmdTable Unk_020F68A4[] = { { ov23_02243390, ov23_022433B8, NULL }, { ov23_022413A0, sub_0203294C, NULL }, { ov23_0224142C, ov23_022414D0, NULL }, - { ov23_0224F0F0, ov23_0224F174, NULL }, - { ov23_0224F0FC, ov23_0224F174, NULL }, - { ov23_0224F108, ov23_0224F174, NULL }, - { ov23_0224F138, ov23_0224F174, NULL }, - { ov23_0224F178, ov23_0224F1F8, NULL }, - { ov23_0224F184, ov23_0224F1F8, NULL }, - { ov23_0224F1FC, ov23_0224F248, NULL }, - { ov23_0224F208, ov23_0224F248, NULL }, - { ov23_02253998, sub_02032944, NULL }, - { ov23_022539A8, sub_02032944, NULL }, + { UndergroundTalk_RequestLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL }, + { UndergroundTalkResponse_RequestLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL }, + { UndergroundTalkResponse_HandleLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL }, + { UndergroundTalk_HandleLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL }, + { UndergroundTalk_SendGiftServer, CommPacketSizeOf_Gift, NULL }, + { UndergroundTalkResponse_ReceiveGiftOffer, CommPacketSizeOf_Gift, NULL }, + { UndergroundTalk_SendTalkMessageServer, CommPacketSizeOf_TalkMessage, NULL }, + { UndergroundTalk_ReceiveTalkMessage, CommPacketSizeOf_TalkMessage, NULL }, + { ov23_SendRecordServer, sub_02032944, NULL }, + { ov23_ReceiveRecord, sub_02032944, NULL }, { ov23_022513B0, ov23_02251414, NULL }, { ov23_0224A570, CommPacketSizeOf_NetId, NULL }, { ov23_0224A77C, ov23_0224A56C, NULL },