document underground pc (#843)
Some checks failed
build / build (push) Has been cancelled

This commit is contained in:
scbroede 2025-12-05 17:53:10 -05:00 committed by GitHub
parent 2de495199a
commit 46a02405fb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
36 changed files with 1265 additions and 1244 deletions

View File

@ -637,7 +637,7 @@ TEXT_BANK_UNION_ROOM
TEXT_BANK_UNDERGROUND_NPCS
TEXT_BANK_UNDERGROUND_DECORATE_BASE
TEXT_BANK_UNDERGROUND_CAPTURE_FLAG
TEXT_BANK_UNDERGROUND_BASE_PC
TEXT_BANK_UNDERGROUND_PC
TEXT_BANK_UNDERGROUND_RECORDS
TEXT_BANK_DUMMY_0641
TEXT_BANK_ROUTE_226

View File

@ -21,7 +21,7 @@ enum PauseBit {
PAUSE_BIT_3 = 1 << 3,
PAUSE_BIT_TRAPS = 1 << 4,
PAUSE_BIT_5 = 1 << 5,
PAUSE_BIT_6 = 1 << 6,
PAUSE_BIT_LINK_PC = 1 << 6,
PAUSE_BIT_RADAR = 1 << 7,
};
@ -59,7 +59,7 @@ typedef struct CommPlayerManager {
u8 moveTimer[MAX_CONNECTED_PLAYERS];
UnkStruct_ov23_0224ABC4 unk_14A[8 + 1];
TrainerInfo *unk_27C[5];
TrainerInfo *unk_290[MAX_CONNECTED_PLAYERS];
TrainerInfo *heldFlagOwnerInfo[MAX_CONNECTED_PLAYERS];
u16 unk_2B0;
u16 unk_2B2;
u8 unk_2B4[4];

View File

@ -1,8 +0,0 @@
#ifndef POKEPLATINUM_FUNCPTR_OV23_022431EC_H
#define POKEPLATINUM_FUNCPTR_OV23_022431EC_H
#include "sys_task_manager.h"
typedef void (*UnkFuncPtr_ov23_022431EC)(SysTask *, void *);
#endif // POKEPLATINUM_FUNCPTR_OV23_022431EC_H

View File

@ -4,7 +4,6 @@
#include "struct_decls/struct_02029894_decl.h"
#include "field/field_system_decl.h"
#include "overlay023/funcptr_ov23_022431EC.h"
#include "overlay023/underground_defs.h"
#include "overlay023/underground_text_printer.h"
@ -13,16 +12,18 @@
#include "sys_task_manager.h"
#include "trainer_info.h"
typedef void (*EndSysTaskFunc)(SysTask *sysTask, void *ctx);
enum UndergroundStoredPosKeys {
UNDERGROUND_STORED_POS_NONE = 0,
UNDERGROUND_STORED_POS_KEY_1,
UNDERGROUND_STORED_POS_KEY_PC,
UNDERGROUND_STORED_POS_KEY_START_MENU,
UNDERGROUND_STORED_POS_KEY_3,
};
enum UndergroundMenuKeys {
UNDERGROUND_MENU_KEY_2 = 2,
UNDERGROUND_MENU_KEY_6 = 6,
UNDERGROUND_MENU_KEY_STORE_GOODS = 2,
UNDERGROUND_MENU_KEY_WITHDRAW_GOODS = 6,
UNDERGROUND_MENU_KEY_TRAPS = 8,
UNDERGROUND_MENU_KEY_SPHERES,
UNDERGROUND_MENU_KEY_GOODS,
@ -35,8 +36,8 @@ enum UndergroundMenuKeys {
UNDERGROUND_MENU_KEY_17,
UNDERGROUND_MENU_KEY_18,
UNDERGROUND_MENU_KEY_19,
UNDERGROUND_MENU_KEY_22 = 22,
UNDERGROUND_MENU_KEY_23
UNDERGROUND_MENU_KEY_PC_RADAR = 22,
UNDERGROUND_MENU_KEY_PC
};
#define BIT_TRAPS_FULL 1 << 4
@ -81,9 +82,9 @@ int ov23_02242EE0(int param0);
int ov23_02242F48(int param0);
void ov23_02242FA8(void);
void ov23_02242FBC(void);
void ov23_02242FD0(void);
void ov23_02242FE4(void);
void ov23_02242FF8(void);
void CommManUnderground_SetSphereRadarActive(void);
void CommManUnderground_SetTrapRadarActive(void);
void CommManUnderground_SetTreasureRadarActive(void);
void ov23_0224300C(int param0, int param1);
void ov23_02243020(int param0);
void UndergroundMan_SetReturnLog(int param0);
@ -93,8 +94,8 @@ void CommManUnderground_StoreCursorAndListPos(u16 menuKey, u16 cursorPos, u16 li
u16 CommManUnderground_GetStoredListPos(u16 menuKey);
u16 CommManUnderground_GetStoredCursorPos(u16 menuKey);
void ov23_022431C4(int param0, int param1, void *param2, void *param3);
void ov23_022431EC(void *param0, SysTask *param1, UnkFuncPtr_ov23_022431EC param2);
void ov23_02243204(void);
void CommManUnderground_SetCurrentSysTask(void *ctx, SysTask *sysTask, EndSysTaskFunc endFunc);
void CommManUnderground_ClearCurrentSysTaskInfo(void);
BOOL ov23_0224321C(void);
BOOL ov23_02243298(int param0);
void ov23_02243360(void);

View File

@ -38,8 +38,8 @@ void ov23_RevertPlayerStatusToNormal(int netID);
void ov23_0224ADB0(int param0, int param1, int param2, int param3);
void ov23_0224ADE8(int param0, int param1, int param2, int param3);
BOOL ov23_0224AE60(int param0);
BOOL ov23_0224AEA4(int param0);
BOOL ov23_0224AEC4(int param0, int param1);
BOOL ov23_IsPlayerHoldingFlag(int param0);
BOOL ov23_TryTakeFlag(int param0, int param1);
void ov23_0224AF4C(int param0);
void ov23_0224AF7C(int param0);
void ov23_ShowExclamationEmote(int netID);

View File

@ -1,15 +0,0 @@
#ifndef POKEPLATINUM_OV23_0225128C_H
#define POKEPLATINUM_OV23_0225128C_H
#include "overlay023/underground_defs.h"
#include "overlay023/underground_menu.h"
void UndergroundMenu_UpdateScrollPrompts(UndergroundMenu *menu, int listPos, int count, int maxDisplay);
int ov23_022512D4(Coordinates *param0, int param1);
BOOL ov23_02251324(int param0, Coordinates *param1);
void ov23_022513B0(int param0, int param1, void *param2, void *param3);
int ov23_02251414(void);
void ov23_0225215C(int param0, int param1, void *param2, void *param3);
void ov23_02252178(int param0, int param1, void *param2, void *param3);
#endif // POKEPLATINUM_OV23_0225128C_H

View File

@ -11,9 +11,9 @@ void ov23_02252CD4(void);
void ov23_02252CE0(int param0, int param1);
void ov23_02252CF4(int param0, int param1);
void ov23_02252D08(int param0, int param1);
void ov23_02252D74(UndergroundMenu *param0, int param1);
void ov23_02252DF4(UndergroundMenu *param0);
void ov23_02252E18(UndergroundMenu *param0);
void UndergroundMenu_PrintMenuDescription(UndergroundMenu *param0, int param1);
void UndergroundMenu_RemoveDescriptionWindow(UndergroundMenu *param0);
void UndergroundMenu_RemoveDescriptionWindowInstant(UndergroundMenu *param0);
void ov23_022534A0(FieldSystem *fieldSystem);
#endif // POKEPLATINUM_OV23_022521F0_H

View File

@ -40,7 +40,7 @@ typedef struct UndergroundMenu {
FieldSystem *fieldSystem;
Window primaryWindow;
Window secondaryWindow;
Window unk_30;
Window menuDescriptionWindow;
StringList *menuOptions;
StringList *itemSelectedOptions;
ListMenu *unk_48;
@ -113,11 +113,12 @@ void UndergroundMenu_StartHoldingFlag(ExitCallback exitCallback, FieldSystem *fi
void UndergroundMenu_PrintGoodDescription(ListMenu *listMenu, u32 index, u8 onInit);
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_OpenStoreGoodsMenu(UndergroundMenu *menu);
void UndergroundMenu_OpenWithdrawGoodsMenu(UndergroundMenu *menu);
void UndergroundMenu_Exit(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);
void UndergroundMenu_ResetBrightnessAndExit(SysTask *sysTask, void *data);
void UndergroundMenu_UpdateScrollPrompts(UndergroundMenu *menu, int listPos, int count, int maxDisplay);
#endif // POKEPLATINUM_OV23_0224F294_H

View File

@ -0,0 +1,16 @@
#ifndef POKEPLATINUM_UNDERGROUND_PC_H
#define POKEPLATINUM_UNDERGROUND_PC_H
#include "overlay023/underground_defs.h"
#include "overlay023/underground_menu.h"
#define PC_NONE 0xFF
int UndergroundPC_GetPCAtCoordinates(Coordinates *coordinates, int dir);
BOOL UndergroundPC_TryUsePC(int netID, Coordinates *coordinates);
void UndergroundPC_ProcessPCInteraction(int unused0, int unused1, void *data, void *data2);
int CommPacketSizeOf_PCInteraction(void);
void UndergroundPC_ProcessTakeFlagAttempt(int unused0, int unused1, void *data, void *unused3);
void UndergroundPC_ProcessTakenFlag(int unused0, int unused1, void *data, void *unused3);
#endif // POKEPLATINUM_UNDERGROUND_PC_H

View File

@ -57,7 +57,7 @@ void sub_0205EB08(PlayerAvatar *playerAvatar, int param1);
int PlayerAvatar_MoveState(const PlayerAvatar *playerAvatar);
void sub_0205EB10(PlayerAvatar *playerAvatar, int param1);
int Player_MoveState(const PlayerAvatar *playerAvatar);
void PlayerAvatar_SetHidden(PlayerAvatar *playerAvatar, int param1);
void PlayerAvatar_SetVisible(PlayerAvatar *playerAvatar, BOOL hidden);
void PlayerAvatar_SetMapObject(PlayerAvatar *playerAvatar, MapObject *param1);
MapObject *Player_MapObject(PlayerAvatar *playerAvatar);
const MapObject *PlayerAvatar_ConstMapObject(const PlayerAvatar *playerAvatar);

View File

@ -13,7 +13,7 @@ typedef struct UndergroundRecord {
u32 numTrapsTriggered : 20;
u32 numPlayersHelped : 20;
u32 numGiftsReceived : 20;
u32 unk_2C_0 : 20;
u32 timesFlagTaken : 20;
u32 unk_30_0 : 20;
u32 unk_34_0 : 20;
u32 capturedFlagCount : 20;

View File

@ -127,8 +127,8 @@ int UndergroundRecord_GetNumPlayersHelped(const UndergroundRecord *undergroundRe
void UndergroundRecord_IncrementNumPlayersHelped(UndergroundRecord *undergroundRecord);
int UndergroundRecord_GetGiftsReceived(const UndergroundRecord *undergroundRecord);
void UndergroundRecord_IncrementGiftsReceived(UndergroundRecord *undergroundRecord);
int sub_020297AC(const UndergroundRecord *param0);
void sub_020297B4(UndergroundRecord *param0);
int UndergroundRecord_GetTimesFlagTaken(const UndergroundRecord *undergroundRecord);
void UndergroundRecord_IncrementTimesFlagTaken(UndergroundRecord *undergroundRecord);
int sub_020297E4(const UndergroundRecord *param0);
void sub_020297EC(UndergroundRecord *param0);
int sub_0202981C(const UndergroundRecord *param0);

View File

@ -31,7 +31,7 @@ void sub_020339AC(int param0, TrainerInfo *param1);
BOOL sub_020339E8(u16 param0);
void sub_02033A5C(void);
void sub_02033D94(u16 param0);
BOOL sub_02033DFC(void);
BOOL CommServerClient_IsInClosedSecretBase(void);
BOOL CommServerClient_IsInitialized(void);
BOOL sub_02033E30(void);
BOOL CommServerClient_IsClientConnecting(void);

View File

@ -851,7 +851,7 @@ Overlay overlay23
Object main.nef.p/src_overlay023_ov23_0224B05C.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_underground_pc.c.o
Object main.nef.p/src_overlay023_ov23_022521F0.c.o
Object main.nef.p/src_overlay023_ov23_02253598.c.o
Object main.nef.p/src_overlay023_underground_text_printer.c.o

View File

@ -48,14 +48,14 @@
]
},
{
"id": "pl_msg_00000638_00008",
"id": "UndergroundCaptureFlag_Text_YouObtainedFlag",
"en_US": [
"Youve obtained the Flag\n",
"from {STRVAR_1 1, 0, 0}s Base!"
]
},
{
"id": "pl_msg_00000638_00009",
"id": "UndergroundCaptureFlag_Text_YouAlreadyHaveFlag",
"en_US": "You already have a Flag!"
},
{

View File

@ -391,7 +391,7 @@
]
},
{
"id": "pl_msg_00000634_00067",
"id": "UndergroundCommon_Text_TakeFlagPrompt",
"en_US": [
"This appears to be {STRVAR_1 3, 0, 0}s\n",
"Secret Base.\r",

View File

@ -2,60 +2,60 @@
"key": 9886,
"messages": [
{
"id": "pl_msg_00000639_00000",
"id": "UndergroundPC_Text_Decorate",
"en_US": "DECORATE"
},
{
"id": "pl_msg_00000639_00001",
"id": "UndergroundPC_Text_StoreGoods",
"en_US": "STORE GOODS"
},
{
"id": "pl_msg_00000639_00002",
"id": "UndergroundPC_Text_ReceiveGoods",
"en_US": "RECEIVE GOODS"
},
{
"id": "pl_msg_00000639_00003",
"id": "UndergroundPC_Text_CheckFlags",
"en_US": "CHECK FLAGS"
},
{
"id": "pl_msg_00000639_00004",
"id": "UndergroundPC_Text_UseRadar",
"en_US": "USE RADAR"
},
{
"id": "pl_msg_00000639_00005",
"id": "UndergroundPC_Text_Exit",
"en_US": "EXIT"
},
{
"id": "pl_msg_00000639_00006",
"id": "UndergroundPC_Text_DecorateDescription",
"en_US": [
"Decoration goods stored on the PC\n",
"can be brought out and displayed."
]
},
{
"id": "pl_msg_00000639_00007",
"id": "UndergroundPC_Text_StoreGoodsDescription",
"en_US": "Store decoration goods on the PC."
},
{
"id": "pl_msg_00000639_00008",
"id": "UndergroundPC_Text_ReceiveGoodsDescription",
"en_US": [
"Take out stored decoration goods\n",
"from the PC."
]
},
{
"id": "pl_msg_00000639_00009",
"id": "UndergroundPC_Text_CheckFlagsDescription",
"en_US": "Check your collection of Flags."
},
{
"id": "pl_msg_00000639_00010",
"id": "UndergroundPC_Text_UseRadarDescription",
"en_US": [
"Search for hidden things in the\n",
"underground passages."
]
},
{
"id": "pl_msg_00000639_00011",
"id": "UndergroundPC_Text_ExitDescription",
"en_US": "Switch off the PC."
},
{
@ -123,7 +123,7 @@
"garbage": 3
},
{
"id": "pl_msg_00000639_00028",
"id": "UndergroundPC_Text_GoodsOnHand",
"en_US": [
"Goods on\n",
"hand"
@ -151,7 +151,7 @@
]
},
{
"id": "pl_msg_00000639_00032",
"id": "UndergroundPC_Text_GoodsInPC",
"en_US": [
"Goods in\n",
"PC"
@ -179,73 +179,73 @@
]
},
{
"id": "pl_msg_00000639_00036",
"id": "UndergroundPC_Text_GoodWasWithdrawn",
"en_US": [
"The {STRVAR_1 25, 2, 0} was withdrawn\n",
"from the PC."
]
},
{
"id": "pl_msg_00000639_00037",
"id": "UndergroundPC_Text_GoodWasStored",
"en_US": [
"The {STRVAR_1 25, 2, 0} was stored\n",
"on the PC."
]
},
{
"id": "pl_msg_00000639_00038",
"id": "UndergroundPC_Text_PCIsFull",
"en_US": "Your PC is full."
},
{
"id": "pl_msg_00000639_00039",
"id": "UndergroundPC_Text_BagIsFull",
"en_US": [
"You cant carry any more\n",
"goods with you."
]
},
{
"id": "pl_msg_00000639_00040",
"id": "UndergroundPC_Text_TreasureSearch",
"en_US": "TREASURE SEARCH"
},
{
"id": "pl_msg_00000639_00041",
"id": "UndergroundPC_Text_SphereSearch",
"en_US": "SPHERE SEARCH"
},
{
"id": "pl_msg_00000639_00042",
"id": "UndergroundPC_Text_TrapSearch",
"en_US": "TRAP SEARCH"
},
{
"id": "pl_msg_00000639_00043",
"id": "UndergroundPC_Text_Cancel",
"en_US": "CANCEL"
},
{
"id": "pl_msg_00000639_00044",
"id": "UndergroundPC_Text_TreasureSearchDescription",
"en_US": [
"Scan for Treasure hidden in the\n",
"underground passages."
]
},
{
"id": "pl_msg_00000639_00045",
"id": "UndergroundPC_Text_SphereSearchDescription",
"en_US": [
"Scan for Spheres you buried\n",
"yourself."
]
},
{
"id": "pl_msg_00000639_00046",
"id": "UndergroundPC_Text_TrapSearchDescription",
"en_US": [
"Scan for Traps hidden in the\n",
"underground passages."
]
},
{
"id": "pl_msg_00000639_00047",
"id": "UndergroundPC_Text_CancelDescription",
"en_US": "Turns off the Radar."
},
{
"id": "pl_msg_00000639_00048",
"id": "UndergroundPC_Text_TreasureRadarBootedUp",
"en_US": [
"The Treasure Search System was\n",
"booted up.\r",
@ -254,7 +254,7 @@
]
},
{
"id": "pl_msg_00000639_00049",
"id": "UndergroundPC_Text_SphereRadarBootedUp",
"en_US": [
"The Sphere Search System was\n",
"booted up.\r",
@ -263,7 +263,7 @@
]
},
{
"id": "pl_msg_00000639_00050",
"id": "UndergroundPC_Text_TrapRadarBootedUp",
"en_US": [
"The Trap Search System was\n",
"booted up.\r",
@ -288,14 +288,14 @@
"garbage": 17
},
{
"id": "pl_msg_00000639_00055",
"id": "UndergroundPC_Text_CantWithdrawDisplayedGood",
"en_US": [
"Displayed decoration goods cant\n",
"be withdrawn."
]
},
{
"id": "pl_msg_00000639_00056",
"id": "UndergroundPC_Text_CantDecorateWithEntranceOpen",
"en_US": [
"Its unsafe if you get a visitor\n",
"while you are decorating.\r",
@ -303,7 +303,7 @@
]
},
{
"id": "pl_msg_00000639_00057",
"id": "UndergroundPC_Text_TreasureRadarEntranceClosed",
"en_US": [
"The Treasure Search System was\n",
"booted up.\r",
@ -313,7 +313,7 @@
]
},
{
"id": "pl_msg_00000639_00058",
"id": "UndergroundPC_Text_SphereRadarEntranceClosed",
"en_US": [
"The Sphere Search System was\n",
"booted up.\r",
@ -323,7 +323,7 @@
]
},
{
"id": "pl_msg_00000639_00059",
"id": "UndergroundPC_Text_TrapRadarEntranceClosed",
"en_US": [
"The Trap Search System was\n",
"booted up.\r",
@ -333,7 +333,7 @@
]
},
{
"id": "pl_msg_00000639_00060",
"id": "UndergroundPC_Text_StoreGoodsBeforeDecorating",
"en_US": [
"Please store goods in the PC before\n",
"decorating."

View File

@ -264,11 +264,11 @@ void CommPlayer_CopyPersonal(int netJd)
sCommPlayerManager->playerLocationServer[netId].x = sCommPlayerManager->playerLocationServer[netJd].x;
sCommPlayerManager->playerLocationServer[netId].z = sCommPlayerManager->playerLocationServer[netJd].z;
sCommPlayerManager->playerLocationServer[netId].dir = sCommPlayerManager->playerLocationServer[netJd].dir;
sCommPlayerManager->unk_290[netId] = sCommPlayerManager->unk_290[netJd];
sCommPlayerManager->unk_290[netJd] = NULL;
sCommPlayerManager->heldFlagOwnerInfo[netId] = sCommPlayerManager->heldFlagOwnerInfo[netJd];
sCommPlayerManager->heldFlagOwnerInfo[netJd] = NULL;
if (sCommPlayerManager->unk_290[netId]) {
TrainerInfo_Copy(sCommPlayerManager->unk_290[netId], (TrainerInfo *)&sCommPlayerManager->unk_14A[netId].unk_00);
if (sCommPlayerManager->heldFlagOwnerInfo[netId]) {
TrainerInfo_Copy(sCommPlayerManager->heldFlagOwnerInfo[netId], (TrainerInfo *)&sCommPlayerManager->unk_14A[netId].unk_00);
}
sCommPlayerManager->unk_14A[netJd].unk_20 = 0xff;

View File

@ -651,7 +651,7 @@ pokeplatinum_c = files(
'overlay023/ov23_0224B05C.c',
'overlay023/underground_player_talk.c',
'overlay023/underground_menu.c',
'overlay023/ov23_0225128C.c',
'overlay023/underground_pc.c',
'overlay023/ov23_022521F0.c',
'overlay023/ov23_02253598.c',
'overlay023/underground_text_printer.c',

View File

@ -1006,7 +1006,7 @@ void ov23_0223E9D4(int param0, int param1, void *param2, void *param3)
Unk_ov23_02257740->unk_A24 = UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_WallIsBulging, FALSE, NULL);
Unk_ov23_02257740->unk_8C8 = SysTask_Start(ov23_0223EA38, Unk_ov23_02257740, 0);
ov23_022431EC(NULL, Unk_ov23_02257740->unk_8C8, ov23_0223E99C);
CommManUnderground_SetCurrentSysTask(NULL, Unk_ov23_02257740->unk_8C8, ov23_0223E99C);
CommPlayerMan_PauseFieldSystem();
}
}
@ -1037,7 +1037,7 @@ static void ov23_0223EA38(SysTask *param0, void *param1)
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter());
SysTask_Done(param0);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
Unk_ov23_02257740->unk_8C8 = NULL;
}

View File

@ -3,6 +3,8 @@
#include <nitro.h>
#include <string.h>
#include "constants/map_object.h"
#include "struct_decls/struct_02029894_decl.h"
#include "struct_decls/struct_02061AB4_decl.h"
#include "struct_defs/underground.h"
@ -10,17 +12,16 @@
#include "field/field_system.h"
#include "overlay005/land_data.h"
#include "overlay005/ov5_021EAFA4.h"
#include "overlay023/funcptr_ov23_022431EC.h"
#include "overlay023/ov23_0223E140.h"
#include "overlay023/ov23_0224A1D0.h"
#include "overlay023/ov23_0224B05C.h"
#include "overlay023/ov23_0225128C.h"
#include "overlay023/ov23_022521F0.h"
#include "overlay023/ov23_02253598.h"
#include "overlay023/struct_ov23_02241A80.h"
#include "overlay023/struct_ov23_02241A88.h"
#include "overlay023/struct_ov23_02253598_decl.h"
#include "overlay023/underground_menu.h"
#include "overlay023/underground_pc.h"
#include "overlay023/underground_spheres.h"
#include "overlay023/underground_text_printer.h"
#include "overlay023/underground_traps.h"
@ -61,9 +62,9 @@ typedef struct StoredListMenuPos {
} StoredListMenuPos;
typedef struct {
void *unk_00;
SysTask *unk_04;
UnkFuncPtr_ov23_022431EC unk_08;
void *currentSysTaskCtx;
SysTask *currentSysTask;
EndSysTaskFunc endCurrentSysTask;
FieldSystem *fieldSystem;
UnkStruct_ov23_02253598 *unk_10;
SysTask *unk_14;
@ -91,7 +92,7 @@ typedef struct {
u8 unk_13D[8];
u8 unk_145;
u8 unk_146;
u8 unk_147;
u8 activeRadar;
u8 unk_148;
u8 unk_149;
u8 unk_14A;
@ -135,7 +136,7 @@ static void CommManUnderground_Init(CommManUnderground *param0, FieldSystem *fie
sCommManUnderground->unk_1C.x = 0;
sCommManUnderground->unk_1C.z = 0;
sCommManUnderground->unk_14B = 0;
sCommManUnderground->unk_147 = 1;
sCommManUnderground->activeRadar = 1;
sCommManUnderground->commonTextPrinter = UndergroundTextPrinter_New(TEXT_BANK_UNDERGROUND_COMMON, HEAP_ID_33, fieldSystem->bgConfig, renderDelay, 500);
sCommManUnderground->captureFlagTextPrinter = UndergroundTextPrinter_New(TEXT_BANK_UNDERGROUND_CAPTURE_FLAG, HEAP_ID_33, fieldSystem->bgConfig, renderDelay, 0);
sCommManUnderground->miscTextPrinter = UndergroundTextPrinter_New(TEXT_BANK_UNDERGROUND_NPCS, HEAP_ID_33, fieldSystem->bgConfig, renderDelay, 1000);
@ -324,7 +325,7 @@ BOOL ov23_0224240C(int x, int z)
return TRUE;
}
if (ov23_022512D4(&coordinates, -1) != 0xff) {
if (UndergroundPC_GetPCAtCoordinates(&coordinates, DIR_NONE) != PC_NONE) {
return TRUE;
}
@ -682,7 +683,7 @@ void ov23_022428D8(int param0, int param1, void *param2, void *param3)
return;
}
if (ov23_02251324(param0, &v2)) {
if (UndergroundPC_TryUsePC(param0, &v2)) {
sub_02059058(param0, 0);
return;
}
@ -910,7 +911,7 @@ int ov23_02242E78(int param0)
if (param0 < 16) {
v1 = param0;
switch (sCommManUnderground->unk_147) {
switch (sCommManUnderground->activeRadar) {
case 0:
return 0;
case 1:
@ -941,7 +942,7 @@ int ov23_02242EE0(int param0)
if (param0 < 16) {
v1 = param0;
switch (sCommManUnderground->unk_147) {
switch (sCommManUnderground->activeRadar) {
case 0:
return 0;
case 1:
@ -969,7 +970,7 @@ int ov23_02242F48(int param0)
{
if (sCommManUnderground) {
if (param0 < 16) {
switch (sCommManUnderground->unk_147) {
switch (sCommManUnderground->activeRadar) {
case 1:
if (param0 < 8) {
return 12;
@ -995,27 +996,27 @@ int ov23_02242F48(int param0)
void ov23_02242FA8(void)
{
sCommManUnderground->unk_147 = 0;
sCommManUnderground->activeRadar = 0;
}
void ov23_02242FBC(void)
{
sCommManUnderground->unk_147 = 1;
sCommManUnderground->activeRadar = 1;
}
void ov23_02242FD0(void)
void CommManUnderground_SetSphereRadarActive(void)
{
sCommManUnderground->unk_147 = 2;
sCommManUnderground->activeRadar = 2;
}
void ov23_02242FE4(void)
void CommManUnderground_SetTrapRadarActive(void)
{
sCommManUnderground->unk_147 = 4;
sCommManUnderground->activeRadar = 4;
}
void ov23_02242FF8(void)
void CommManUnderground_SetTreasureRadarActive(void)
{
sCommManUnderground->unk_147 = 3;
sCommManUnderground->activeRadar = 3;
}
void ov23_0224300C(int param0, int param1)
@ -1132,27 +1133,27 @@ void ov23_022431C4(int param0, int param1, void *param2, void *param3)
}
}
void ov23_022431EC(void *param0, SysTask *param1, UnkFuncPtr_ov23_022431EC param2)
void CommManUnderground_SetCurrentSysTask(void *ctx, SysTask *sysTask, EndSysTaskFunc endFunc)
{
sCommManUnderground->unk_00 = param0;
sCommManUnderground->unk_04 = param1;
sCommManUnderground->unk_08 = param2;
sCommManUnderground->currentSysTaskCtx = ctx;
sCommManUnderground->currentSysTask = sysTask;
sCommManUnderground->endCurrentSysTask = endFunc;
}
void ov23_02243204(void)
void CommManUnderground_ClearCurrentSysTaskInfo(void)
{
sCommManUnderground->unk_00 = NULL;
sCommManUnderground->unk_04 = NULL;
sCommManUnderground->unk_08 = NULL;
sCommManUnderground->currentSysTaskCtx = NULL;
sCommManUnderground->currentSysTask = NULL;
sCommManUnderground->endCurrentSysTask = NULL;
}
BOOL ov23_0224321C(void)
{
BOOL v0 = 0;
if (sCommManUnderground->unk_04) {
sCommManUnderground->unk_08(sCommManUnderground->unk_04, sCommManUnderground->unk_00);
ov23_02243204();
if (sCommManUnderground->currentSysTask) {
sCommManUnderground->endCurrentSysTask(sCommManUnderground->currentSysTask, sCommManUnderground->currentSysTaskCtx);
CommManUnderground_ClearCurrentSysTaskInfo();
v0 = 1;
}
@ -1171,7 +1172,7 @@ BOOL ov23_02243298(int param0)
{
int v0, v1;
if (sCommManUnderground->unk_04) {
if (sCommManUnderground->currentSysTask) {
return 0;
}

View File

@ -116,7 +116,7 @@ void ov23_02249A74(void)
static void ov23_02249A88(void)
{
if (!sub_02033DFC()) {
if (!CommServerClient_IsInClosedSecretBase()) {
ov23_0224C198();
ov23_02249C24(ov23_02249C34, 0);
}

View File

@ -81,7 +81,7 @@ static void ov23_0224A204(int param0)
CommPlayerManager *commPlayerMan = CommPlayerMan_Get();
if (param0 == CommSys_CurNetId()) {
if (commPlayerMan->unk_290[param0] != NULL) {
if (commPlayerMan->heldFlagOwnerInfo[param0] != NULL) {
GameRecords_IncrementTrainerScore(SaveData_GetGameRecords(commPlayerMan->fieldSystem->saveData), TRAINER_SCORE_EVENT_UNDERGROUND_CAPTURE_FLAG);
if (commPlayerMan->unk_27C[5 - 1]) {
@ -92,10 +92,10 @@ static void ov23_0224A204(int param0)
commPlayerMan->unk_27C[v0] = commPlayerMan->unk_27C[v0 - 1];
}
commPlayerMan->unk_27C[0] = commPlayerMan->unk_290[param0];
sub_02028830(SaveData_GetUnderground(FieldSystem_GetSaveData(commPlayerMan->fieldSystem)), commPlayerMan->unk_290[param0]);
commPlayerMan->unk_27C[0] = commPlayerMan->heldFlagOwnerInfo[param0];
sub_02028830(SaveData_GetUnderground(FieldSystem_GetSaveData(commPlayerMan->fieldSystem)), commPlayerMan->heldFlagOwnerInfo[param0]);
commPlayerMan->unk_290[param0] = NULL;
commPlayerMan->heldFlagOwnerInfo[param0] = NULL;
commPlayerMan->unk_14A[param0].unk_20 = 0xff;
}
} else {
@ -107,14 +107,14 @@ static BOOL ov23_0224A294(int param0, int param1)
{
CommPlayerManager *v0 = CommPlayerMan_Get();
if ((v0->unk_290[param0] == NULL) && (v0->unk_290[param1] != NULL)) {
v0->unk_290[param0] = v0->unk_290[param1];
v0->unk_290[param1] = NULL;
if ((v0->heldFlagOwnerInfo[param0] == NULL) && (v0->heldFlagOwnerInfo[param1] != NULL)) {
v0->heldFlagOwnerInfo[param0] = v0->heldFlagOwnerInfo[param1];
v0->heldFlagOwnerInfo[param1] = NULL;
v0->emote[param0] = EMOTE_FLAG;
v0->emote[param1] = EMOTE_NONE;
v0->unk_14A[param0].unk_20 = param0;
v0->unk_14A[param1].unk_20 = 0xff;
TrainerInfo_Copy(v0->unk_290[param0], (TrainerInfo *)&v0->unk_14A[param0].unk_00);
TrainerInfo_Copy(v0->heldFlagOwnerInfo[param0], (TrainerInfo *)&v0->unk_14A[param0].unk_00);
return 1;
}
@ -164,7 +164,7 @@ void ov23_0224A348(int param0, int param1, void *param2, void *param3)
v0.unk_01 = param0;
if (commPlayerMan->unk_E2[param0] && !ov23_0224ACC0(param0)) {
if (ov23_0224AEA4(param0)) {
if (ov23_IsPlayerHoldingFlag(param0)) {
v0.unk_00 = 3;
} else {
v0.unk_00 = 1;
@ -327,12 +327,12 @@ BOOL ov23_0224A658(int param0, int param1, BOOL param2)
if (param2 & 0x1) {
v0.unk_00 = 11;
} else if (ov23_0224AEA4(param0)) {
} else if (ov23_IsPlayerHoldingFlag(param0)) {
v0.unk_00 = 11;
} else {
if (param1 == 0xff) {
return 0;
} else if (!ov23_0224AEA4(param1)) {
} else if (!ov23_IsPlayerHoldingFlag(param1)) {
return 0;
} else {
v0.unk_00 = 5;
@ -353,7 +353,7 @@ BOOL ov23_0224A6B8(int param0)
{
UnkStruct_ov23_0224A570 v0;
if (ov23_0224AEA4(param0)) {
if (ov23_IsPlayerHoldingFlag(param0)) {
v0.unk_00 = 12;
} else {
return 0;
@ -399,7 +399,7 @@ void ov23_0224A77C(int param0, int param1, void *param2, void *param3)
switch (v1->unk_00) {
case 0:
if (commPlayerMan->unk_290[v1->unk_01]) {
if (commPlayerMan->heldFlagOwnerInfo[v1->unk_01]) {
ov23_0224AE60(v1->unk_01);
ov23_ClearEmote(v1->unk_01);
@ -416,7 +416,7 @@ void ov23_0224A77C(int param0, int param1, void *param2, void *param3)
return;
}
if (commPlayerMan->unk_290[v1->unk_02] == NULL) {
if (commPlayerMan->heldFlagOwnerInfo[v1->unk_02] == NULL) {
if (v1->unk_01 == CommSys_CurNetId()) {
CommPlayerMan_ResumeFieldSystem();
}
@ -424,7 +424,7 @@ void ov23_0224A77C(int param0, int param1, void *param2, void *param3)
return;
}
if (TrainerInfo_Equals(commPlayerMan->unk_290[v1->unk_02], CommInfo_TrainerInfo(v1->unk_01)) == 1) {
if (TrainerInfo_Equals(commPlayerMan->heldFlagOwnerInfo[v1->unk_02], CommInfo_TrainerInfo(v1->unk_01)) == 1) {
ov23_0224AE60(v1->unk_02);
if (v1->unk_01 == CommSys_CurNetId()) {
@ -475,8 +475,8 @@ void ov23_0224A77C(int param0, int param1, void *param2, void *param3)
UndergroundRecord_IncrementCapturedFlagCount(undergroundRecord);
SystemFlag_SetDeliveredStolenFlag(SaveData_GetVarsFlags(commPlayerMan->fieldSystem->saveData));
if (commPlayerMan->unk_290[v1->unk_01]) {
FieldSystem_SaveTVEpisodeSegment_CaptureTheFlagDigest_TakeFlag(commPlayerMan->fieldSystem, commPlayerMan->unk_290[v1->unk_01]);
if (commPlayerMan->heldFlagOwnerInfo[v1->unk_01]) {
FieldSystem_SaveTVEpisodeSegment_CaptureTheFlagDigest_TakeFlag(commPlayerMan->fieldSystem, commPlayerMan->heldFlagOwnerInfo[v1->unk_01]);
if (commPlayerMan->unk_2B2 != 0xffff) {
commPlayerMan->unk_2B2++;
@ -495,8 +495,8 @@ void ov23_0224A77C(int param0, int param1, void *param2, void *param3)
Sound_FadeOutAndPlayBGM(4, SEQ_TANKOU, 60, 0, 0xff, NULL);
}
if (commPlayerMan->unk_290[v1->unk_01]) {
if (TrainerInfo_Equals(commPlayerMan->unk_290[v1->unk_01], CommInfo_TrainerInfo(CommSys_CurNetId())) == 1) {
if (commPlayerMan->heldFlagOwnerInfo[v1->unk_01]) {
if (TrainerInfo_Equals(commPlayerMan->heldFlagOwnerInfo[v1->unk_01], CommInfo_TrainerInfo(CommSys_CurNetId())) == 1) {
FieldSystem_SaveTVEpisodeSegment_CaptureTheFlagDigest_LoseFlag(commPlayerMan->fieldSystem, CommInfo_TrainerInfo(v1->unk_01));
}
}
@ -528,8 +528,8 @@ void ov23_0224AAB0(void)
commPlayerMan->unk_2B9 = 0;
if (commPlayerMan->unk_290[CommSys_CurNetId()]) {
CommSys_SendDataFixedSize(91, commPlayerMan->unk_290[CommSys_CurNetId()]);
if (commPlayerMan->heldFlagOwnerInfo[CommSys_CurNetId()]) {
CommSys_SendDataFixedSize(91, commPlayerMan->heldFlagOwnerInfo[CommSys_CurNetId()]);
} else {
TrainerInfo *v0 = TrainerInfo_New(HEAP_ID_COMMUNICATION);
Strbuf *v1 = Strbuf_Init(20, HEAP_ID_COMMUNICATION);
@ -591,12 +591,12 @@ void ov23_0224ABC4(int param0, int param1, void *param2, void *param3)
if (commPlayerMan) {
v3 = v1->unk_20;
if (commPlayerMan->unk_290[v3]) {
Heap_Free(commPlayerMan->unk_290[v3]);
if (commPlayerMan->heldFlagOwnerInfo[v3]) {
Heap_Free(commPlayerMan->heldFlagOwnerInfo[v3]);
}
commPlayerMan->unk_290[v3] = TrainerInfo_New(HEAP_ID_COMMUNICATION);
TrainerInfo_Copy((TrainerInfo *)v1->unk_00, commPlayerMan->unk_290[v3]);
commPlayerMan->heldFlagOwnerInfo[v3] = TrainerInfo_New(HEAP_ID_COMMUNICATION);
TrainerInfo_Copy((TrainerInfo *)v1->unk_00, commPlayerMan->heldFlagOwnerInfo[v3]);
commPlayerMan->emote[v3] = EMOTE_FLAG;
}
}
@ -631,9 +631,9 @@ void ov23_0224AC4C(void)
int v3 = CommSys_CurNetId();
CommPlayerManager *commPlayerMan = CommPlayerMan_Get();
if (commPlayerMan->unk_290[v3]) {
v0 = commPlayerMan->unk_290[v3];
commPlayerMan->unk_290[v3] = NULL;
if (commPlayerMan->heldFlagOwnerInfo[v3]) {
v0 = commPlayerMan->heldFlagOwnerInfo[v3];
commPlayerMan->heldFlagOwnerInfo[v3] = NULL;
commPlayerMan->emote[v3] = EMOTE_NONE;
commPlayerMan->unk_14A[v3].unk_20 = 0xff;
}
@ -643,7 +643,7 @@ void ov23_0224AC4C(void)
}
if (v0) {
commPlayerMan->unk_290[0] = v0;
commPlayerMan->heldFlagOwnerInfo[0] = v0;
commPlayerMan->emote[0] = EMOTE_FLAG;
TrainerInfo_Copy(v0, (TrainerInfo *)&commPlayerMan->unk_14A[0].unk_00);
@ -764,10 +764,10 @@ BOOL ov23_0224AE60(int param0)
{
CommPlayerManager *v0 = CommPlayerMan_Get();
if (v0->unk_290[param0] != NULL) {
Heap_Free(v0->unk_290[param0]);
if (v0->heldFlagOwnerInfo[param0] != NULL) {
Heap_Free(v0->heldFlagOwnerInfo[param0]);
v0->unk_290[param0] = NULL;
v0->heldFlagOwnerInfo[param0] = NULL;
v0->emote[param0] = EMOTE_NONE;
v0->unk_14A[param0].unk_20 = 0xff;
@ -777,43 +777,43 @@ BOOL ov23_0224AE60(int param0)
return 0;
}
BOOL ov23_0224AEA4(int param0)
BOOL ov23_IsPlayerHoldingFlag(int netID)
{
CommPlayerManager *v0 = CommPlayerMan_Get();
CommPlayerManager *commPlayerMan = CommPlayerMan_Get();
if (v0->unk_290[param0] != NULL) {
return 1;
if (commPlayerMan->heldFlagOwnerInfo[netID] != NULL) {
return TRUE;
}
return 0;
return FALSE;
}
BOOL ov23_0224AEC4(int param0, int param1)
BOOL ov23_TryTakeFlag(int flagTakerNetID, int flagOwnerNetID)
{
CommPlayerManager *v0 = CommPlayerMan_Get();
CommPlayerManager *commPlayerMan = CommPlayerMan_Get();
if (v0->unk_290[param0] == NULL) {
TrainerInfo *v1 = CommInfo_TrainerInfo(param1);
if (commPlayerMan->heldFlagOwnerInfo[flagTakerNetID] == NULL) {
TrainerInfo *trainerInfo = CommInfo_TrainerInfo(flagOwnerNetID);
if (v1) {
v0->unk_290[param0] = TrainerInfo_New(HEAP_ID_COMMUNICATION);
TrainerInfo_Copy(v1, v0->unk_290[param0]);
if (trainerInfo) {
commPlayerMan->heldFlagOwnerInfo[flagTakerNetID] = TrainerInfo_New(HEAP_ID_COMMUNICATION);
TrainerInfo_Copy(trainerInfo, commPlayerMan->heldFlagOwnerInfo[flagTakerNetID]);
v0->emote[param0] = EMOTE_FLAG;
v0->unk_14A[param0].unk_20 = param0;
commPlayerMan->emote[flagTakerNetID] = EMOTE_FLAG;
commPlayerMan->unk_14A[flagTakerNetID].unk_20 = flagTakerNetID;
TrainerInfo_Copy(v1, (TrainerInfo *)&v0->unk_14A[param0].unk_00);
TrainerInfo_Copy(trainerInfo, (TrainerInfo *)&commPlayerMan->unk_14A[flagTakerNetID].unk_00);
if (param1 == CommSys_CurNetId()) {
UndergroundRecord *v2 = SaveData_UndergroundRecord(v0->fieldSystem->saveData);
sub_020297B4(v2);
if (flagOwnerNetID == CommSys_CurNetId()) {
UndergroundRecord *undergroundRecord = SaveData_UndergroundRecord(commPlayerMan->fieldSystem->saveData);
UndergroundRecord_IncrementTimesFlagTaken(undergroundRecord);
}
return 1;
return TRUE;
}
}
return 0;
return FALSE;
}
void ov23_0224AF4C(int netID)

View File

@ -292,7 +292,7 @@ static void ov23_0224B0DC(int param0, UnkStruct_ov23_0224B098 *param1)
const int v1 = 32;
int v2;
if (sub_02033DFC()) {
if (CommServerClient_IsInClosedSecretBase()) {
param1->unk_00 = v0.unk_00;
param1->unk_02 = v0.unk_02;
return;
@ -810,7 +810,7 @@ static void ov23_0224BA48(SysTask *param0, void *param1)
SysTask_Done(param0);
Heap_Free(v0);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
}
static void ov23_0224BA6C(SysTask *param0, void *param1)
@ -830,7 +830,7 @@ static void ov23_0224BA6C(SysTask *param0, void *param1)
SysTask_Done(param0);
Heap_Free(v0);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
ov23_0224DC24();
}
@ -844,7 +844,7 @@ static void ov23_0224BAAC(SysTask *param0, void *param1)
switch (v0->unk_0C) {
case 0:
if (sub_02033DFC()) {
if (CommServerClient_IsInClosedSecretBase()) {
v5 = 47;
v0->unk_0C = 3;
} else {
@ -918,7 +918,7 @@ static void ov23_0224BAAC(SysTask *param0, void *param1)
return;
}
if (!sub_02033DFC()) {
if (!CommServerClient_IsInClosedSecretBase()) {
if ((v0->unk_2C < (7 + 1)) && !CommSys_IsPlayerConnected(v0->unk_2C) && (CommSys_CurNetId() != 0)) {
v7 = 1;
}
@ -950,7 +950,7 @@ static void ov23_0224BC5C(FieldSystem *fieldSystem, int param1, int param2, int
v0->fieldSystem = fieldSystem;
v0->unk_08 = SysTask_Start(ov23_0224BAAC, v0, 100);
ov23_022431EC(v0, v0->unk_08, ov23_0224BA6C);
CommManUnderground_SetCurrentSysTask(v0, v0->unk_08, ov23_0224BA6C);
CommPlayerMan_PauseFieldSystem();
}
@ -1086,7 +1086,7 @@ static void ov23_0224BE28(SysTask *param0, void *param1)
if (v6 == 0) {
v0->unk_04 = NULL;
if (ov23_0224AEA4(v0->unk_2C) || (ov23_0224BD1C(v0->unk_2C, 0) > 0)) {
if (ov23_IsPlayerHoldingFlag(v0->unk_2C) || (ov23_0224BD1C(v0->unk_2C, 0) > 0)) {
UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), 44, FALSE, NULL);
v0->unk_0C = 3;
} else {
@ -1126,7 +1126,7 @@ static void ov23_0224BE28(SysTask *param0, void *param1)
}
break;
case 9:
if (sub_02033DFC() && (CommSys_CurNetId() == 0)) {
if (CommServerClient_IsInClosedSecretBase() && (CommSys_CurNetId() == 0)) {
u8 v9 = 1;
CommSys_SendDataFixedSize(86, &v9);
@ -1182,7 +1182,7 @@ static void ov23_0224C090(FieldSystem *fieldSystem, int param1, int param2, int
ov23_0224DC08();
v0->unk_08 = SysTask_Start(ov23_0224BE28, v0, 100);
ov23_022431EC(v0, v0->unk_08, ov23_0224BA6C);
CommManUnderground_SetCurrentSysTask(v0, v0->unk_08, ov23_0224BA6C);
CommPlayerMan_PauseFieldSystem();
}
@ -1623,7 +1623,7 @@ static BOOL ov23_0224C790(FieldTask *param0)
break;
}
if (sub_02033DFC() && !Underground_AreCoordinatesInSecretBase(v1->unk_1C, v1->unk_20)) {
if (CommServerClient_IsInClosedSecretBase() && !Underground_AreCoordinatesInSecretBase(v1->unk_1C, v1->unk_20)) {
v1->unk_2E = 0;
} else {
v1->unk_2E = 1;
@ -1655,7 +1655,7 @@ static BOOL ov23_0224C790(FieldTask *param0)
v1->unk_29++;
if (v1->unk_29 > 10) {
if (!sub_02033DFC() || !v1->unk_2E) {
if (!CommServerClient_IsInClosedSecretBase() || !v1->unk_2E) {
v1->unk_0C = 13;
} else {
v1->unk_0C = 11;
@ -1680,7 +1680,7 @@ static BOOL ov23_0224C790(FieldTask *param0)
}
break;
case 13:
if (sub_02033DFC() && !Underground_AreCoordinatesInSecretBase(v1->unk_1C, v1->unk_20)) {
if (CommServerClient_IsInClosedSecretBase() && !Underground_AreCoordinatesInSecretBase(v1->unk_1C, v1->unk_20)) {
ov23_02249AA4();
} else {
ov23_02249B60();
@ -1690,7 +1690,7 @@ static BOOL ov23_0224C790(FieldTask *param0)
CommPlayerMan_ResumeFieldSystem();
Heap_Free(v1);
if (sub_02033DFC() && Underground_AreCoordinatesInSecretBase(v1->unk_1C, v1->unk_20)) {
if (CommServerClient_IsInClosedSecretBase() && Underground_AreCoordinatesInSecretBase(v1->unk_1C, v1->unk_20)) {
ov23_02242FA8();
} else {
ov23_02242FBC();
@ -1827,7 +1827,7 @@ static void ov23_0224CB1C(SysTask *param0, void *param1)
v0->unk_0C = 10;
break;
case 10:
if (sub_02033DFC() && (CommSys_CurNetId() == 0)) {
if (CommServerClient_IsInClosedSecretBase() && (CommSys_CurNetId() == 0)) {
u8 v10 = 2;
if (v0->unk_12) {
@ -1840,7 +1840,7 @@ static void ov23_0224CB1C(SysTask *param0, void *param1)
SysTask_Done(param0);
Heap_Free(v0);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
return;
}
break;
@ -1860,7 +1860,7 @@ static void ov23_0224CB1C(SysTask *param0, void *param1)
SysTask_Done(param0);
Heap_Free(v0);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
ov23_0224DC24();
}
}
@ -1951,7 +1951,7 @@ static void ov23_0224CE94(SysTask *param0, void *param1)
SysTask_Done(param0);
Heap_Free(v0);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
CommPlayerMan_ResumeFieldSystem();
ov23_0224DC24();
}
@ -1970,7 +1970,7 @@ static void ov23_0224CEC8(void)
v0->fieldSystem = Unk_ov23_022577AC->fieldSystem;
v0->unk_04 = SysTask_Start(ov23_0224CB1C, v0, 100);
ov23_022431EC(v0, v0->unk_04, ov23_0224CE94);
CommManUnderground_SetCurrentSysTask(v0, v0->unk_04, ov23_0224CE94);
}
void ov23_0224CF18(int param0, int param1, void *param2, void *param3)
@ -2383,7 +2383,7 @@ static void ov23_0224D5BC(SysTask *param0, void *param1)
case 4:
Heap_Free(param1);
SysTask_Done(param0);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
break;
}
}
@ -2414,7 +2414,7 @@ void ov23_0224D6AC(int param0, int param1, void *param2, void *param3)
v3->unk_05 = v1[1];
v2 = SysTask_Start(ov23_0224D5BC, v3, 100);
ov23_022431EC(v3, v2, ov23_0224D5A8);
CommManUnderground_SetCurrentSysTask(v3, v2, ov23_0224D5A8);
} else {
(void)0;
}
@ -2678,7 +2678,7 @@ void ov23_0224DAD0(int param0)
return;
}
if (sub_02033DFC()) {
if (CommServerClient_IsInClosedSecretBase()) {
return;
}
}

View File

@ -1,960 +0,0 @@
#include "overlay023/ov23_0225128C.h"
#include <nitro.h>
#include <string.h>
#include "struct_defs/underground.h"
#include "field/field_system.h"
#include "overlay023/ov23_0223E140.h"
#include "overlay023/ov23_02241F74.h"
#include "overlay023/ov23_0224A1D0.h"
#include "overlay023/ov23_0224B05C.h"
#include "overlay023/ov23_022521F0.h"
#include "overlay023/ov23_02253598.h"
#include "overlay023/ov23_02254A14.h"
#include "overlay023/underground_item_list_menu.h"
#include "overlay023/underground_menu.h"
#include "overlay023/underground_spheres.h"
#include "overlay023/underground_text_printer.h"
#include "overlay023/underground_traps.h"
#include "bg_window.h"
#include "brightness_controller.h"
#include "camera.h"
#include "comm_player_manager.h"
#include "communication_information.h"
#include "communication_system.h"
#include "field_system.h"
#include "field_task.h"
#include "heap.h"
#include "list_menu.h"
#include "location.h"
#include "menu.h"
#include "message.h"
#include "player_avatar.h"
#include "render_window.h"
#include "save_player.h"
#include "screen_fade.h"
#include "scroll_prompts.h"
#include "sound_playback.h"
#include "strbuf.h"
#include "string_list.h"
#include "string_template.h"
#include "sys_task.h"
#include "sys_task_manager.h"
#include "system.h"
#include "system_flags.h"
#include "unk_0202854C.h"
#include "unk_02033200.h"
#include "vars_flags.h"
typedef struct {
u8 unk_00;
u8 unk_01;
u8 unk_02;
} UnkStruct_ov23_022513B0;
typedef struct {
int unk_00;
int unk_04;
u8 unk_08;
} UnkStruct_ov23_02251ACC;
typedef struct {
int unk_00;
FieldSystem *fieldSystem;
Menu *unk_08;
UnkStruct_ov23_022513B0 unk_0C;
SysTask *primaryWindow;
} UnkStruct_ov23_02252038;
static void ov23_022520E8(FieldSystem *fieldSystem, UnkStruct_ov23_022513B0 *param1);
static void ov23_02251F94(FieldSystem *fieldSystem);
static void ov23_022521C8(UndergroundMenu *param0);
static const WindowTemplate Unk_ov23_022569C8 = {
0x3,
0x19,
0xD,
0x6,
0x4,
0xD,
0x21F
};
void UndergroundMenu_UpdateScrollPrompts(UndergroundMenu *menu, int listPos, int count, int maxDisplay)
{
if (count <= maxDisplay) {
return;
}
if (listPos != 0) {
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_TOP_ARROW, TRUE);
} else {
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_TOP_ARROW, FALSE);
}
if (listPos + maxDisplay != count) {
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_BOTTOM_ARROW, TRUE);
} else {
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_BOTTOM_ARROW, FALSE);
}
ScrollPrompts_UpdateAnim(menu->scrollPrompts);
}
// possibly check for secret base pc?
// coordinates it's checking for are in the secret base range
int ov23_022512D4(Coordinates *coordinates, int param1)
{
int v0;
int x = coordinates->x;
int z = coordinates->z;
int v3 = 0;
if (param1 != -1) {
if (param1 != 0) {
return 0xff;
}
}
if (z == 12) {
v3 = 0;
} else if (z == 12 + 32) {
v3 = 8;
} else {
return 0xff;
}
if (x == 15 || x == 15 + 1) {
return 0;
}
for (v0 = 0; v0 < MAX_CONNECTED_PLAYERS; v0++) {
if (x == 15 + 32 || x == 15 + 32 + 1) {
return v0 + v3;
}
x -= 32;
}
return 0xff;
}
BOOL ov23_02251324(int param0, Coordinates *param1)
{
int v0;
int v1 = param1->x;
int v2 = param1->z;
UnkStruct_ov23_022513B0 v3;
int v4 = ov23_022512D4(param1, CommPlayer_DirServer(param0));
if (CommPlayer_Dir(v4) == -1) {
v4 = 0xff;
}
if (v4 != 0xff) {
sub_02059058(param0, 0);
v3.unk_01 = v4;
v3.unk_00 = param0;
v3.unk_02 = 0;
if (v4 != param0) {
if (!ov23_0224AEA4(param0)) {
v3.unk_02 = 1;
} else {
(void)0;
}
} else {
if (ov23_0224AEA4(param0)) {
u8 v5 = 3;
ov23_0224A570(param0, 1, &v5, NULL);
return 1;
}
}
sub_02035B48(83, &v3);
return 1;
}
return 0;
}
static void ov23_022513A4(int param0)
{
CommPlayerMan_ResumeFieldSystemWithContextBit(PAUSE_BIT_6);
}
void ov23_022513B0(int param0, int param1, void *param2, void *param3)
{
UnkStruct_ov23_022513B0 *v0 = param2;
FieldSystem *fieldSystem = param3;
if (!CommSys_IsSendingMovementData()) {
return;
}
if (v0->unk_00 == CommSys_CurNetId()) {
if (v0->unk_01 == CommSys_CurNetId()) {
Sound_PlayEffect(SEQ_SE_DP_PC_ON);
CommPlayerMan_PauseFieldSystem();
ov23_02251F94(fieldSystem);
} else {
CommPlayerMan_PauseFieldSystemWithContextBit(PAUSE_BIT_6);
if (v0->unk_02) {
ov23_022520E8(fieldSystem, v0);
} else {
UndergroundTextPrinter_PrintText(CommManUnderground_GetCaptureFlagTextPrinter(), 9, TRUE, ov23_022513A4);
}
}
} else {
(void)0;
}
if (v0->unk_02) {
(void)0;
}
}
int ov23_02251414(void)
{
return sizeof(UnkStruct_ov23_022513B0);
}
static BOOL ov23_02251418(int param0, UndergroundMenu *param1)
{
Underground *v0 = SaveData_GetUnderground(FieldSystem_GetSaveData(param1->fieldSystem));
int v1 = Underground_GetGoodAtSlotBag(v0, param0);
if (Underground_TryAddGoodPC(v0, v1)) {
Underground_RemoveGoodAtSlotBag(v0, param0);
return 1;
}
return 0;
}
static int ov23_0225144C(int param0, UndergroundMenu *param1)
{
Underground *v0 = SaveData_GetUnderground(FieldSystem_GetSaveData(param1->fieldSystem));
int v1;
if (Underground_IsGoodAtSlotPlacedInBase(v0, param0)) {
return -1;
}
v1 = Underground_GetGoodAtSlotPC(v0, param0);
if (UndergroundInventory_TryAddGoodBag(v1)) {
Underground_RemoveGoodAtSlotPC(v0, param0);
return 1;
}
return 0;
}
static void ov23_0225148C(ListMenu *param0, u32 param1, u8 param2)
{
UndergroundMenu *v0 = (UndergroundMenu *)ListMenu_GetAttribute(param0, 19);
int v1 = param1;
if (param1 == 0xfffffffe) {
v1 = 5;
}
UndergroundTextPrinter_PrintTextInstant(CommManUnderground_GetMiscTextPrinter(), 6 + v1, FALSE, NULL);
}
static void ov23_022514B0(ListMenu *param0, u32 param1, u8 param2)
{
UndergroundMenu *v0 = (UndergroundMenu *)ListMenu_GetAttribute(param0, 19);
int v1 = param1;
if (param1 == 0xfffffffe) {
v1 = 3;
}
UndergroundTextPrinter_PrintTextInstant(CommManUnderground_GetMiscTextPrinter(), 44 + v1, FALSE, NULL);
}
static BOOL ov23_022514D8(SysTask *param0, void *param1)
{
UndergroundMenu *v0 = param1;
u32 v1;
u16 v2, v3;
v1 = ListMenu_ProcessInput(v0->unk_48);
ListMenu_GetListAndCursorPos(v0->unk_48, &v2, &v3);
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_23, v3, v2);
ov23_022521C8(v0);
switch (v1) {
case 0xffffffff:
return 0;
case 0xfffffffe:
Sound_PlayEffect(SEQ_SE_DP_PC_LOGOFF);
v0->state = 2;
break;
case 0: {
Underground *v4 = SaveData_GetUnderground(v0->fieldSystem->saveData);
if (0 == Underground_GetGoodsCountPC(v4)) {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 60, FALSE, NULL);
v0->state = 23;
} else if (sub_02033DFC()) {
ov23_02243204();
v0->state = 3;
} else {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 56, FALSE, NULL);
v0->state = 23;
}
} break;
case 4:
Sound_PlayEffect(SEQ_SE_CONFIRM);
v0->state = 8;
break;
case 3:
Sound_PlayEffect(SEQ_SE_CONFIRM);
v0->state = 6;
break;
case 1:
Sound_PlayEffect(SEQ_SE_CONFIRM);
v0->state = 17;
break;
case 2:
Sound_PlayEffect(SEQ_SE_CONFIRM);
v0->state = 20;
break;
default:
break;
}
return 1;
}
static void ov23_022515D8(UndergroundMenu *param0, int param1, int param2, CursorCallback cursorCallback, int param4)
{
ListMenuTemplate v0;
int v1 = param2 + 1;
BOOL v2 = 1;
if (BASE_FLAG_GOLD > UndergroundRecord_GetFlagRank(SaveData_UndergroundRecord(param0->fieldSystem->saveData))) {
v2 = 0;
v1 -= 1;
}
UndergroundMenu_EraseCurrentMenu(param0);
param0->menuOptions = StringList_New(v1, HEAP_ID_FIELD1);
Window_Add(param0->fieldSystem->bgConfig, &param0->primaryWindow, 3, 17, 3, 14, v1 * 2, 13, 2);
Window_DrawStandardFrame(&param0->primaryWindow, 1, 1024 - (18 + 12) - 9, 11);
{
MessageLoader *v3;
int v4 = 0;
v3 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_BASE_PC, HEAP_ID_FIELD1);
for (v4 = 0; v4 < v1; v4++) {
if (v4 == (v1 - 1)) {
StringList_AddFromMessageBank(param0->menuOptions, v3, param1 + 5, 0xfffffffe);
} else {
StringList_AddFromMessageBank(param0->menuOptions, v3, param1 + v4, v4);
}
}
MessageLoader_Free(v3);
}
MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &v0, sizeof(ListMenuTemplate));
v0.count = v1;
v0.maxDisplay = v1;
v0.choices = param0->menuOptions;
v0.window = &param0->primaryWindow;
if (cursorCallback) {
v0.cursorCallback = cursorCallback;
}
v0.parent = param0;
UndergroundMenu_MoveListCursorPosInBounds(param0, v1, v0.count);
param0->unk_48 = ListMenu_New(&v0, param0->listMenuListPos, param0->listMenuCursorPos, HEAP_ID_FIELD1);
}
static void ov23_022516E8(UndergroundMenu *param0, int param1, int param2, CursorCallback cursorCallback, int param4)
{
ListMenuTemplate v0;
int v1 = param2 + 1;
BOOL v2 = 1;
UndergroundMenu_EraseCurrentMenu(param0);
param0->menuOptions = StringList_New(v1, HEAP_ID_FIELD1);
Window_Add(param0->fieldSystem->bgConfig, &param0->primaryWindow, 3, 17, 3, 14, v1 * 2, 13, (2 + 14 * 16));
Window_DrawStandardFrame(&param0->primaryWindow, 1, 1024 - (18 + 12) - 9, 11);
{
MessageLoader *v3;
int v4 = 0;
v3 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_BASE_PC, HEAP_ID_FIELD1);
for (v4 = 0; v4 < v1; v4++) {
if (v4 == param2) {
StringList_AddFromMessageBank(param0->menuOptions, v3, param1 + v4, 0xfffffffe);
} else {
StringList_AddFromMessageBank(param0->menuOptions, v3, param1 + v4, v4);
}
}
MessageLoader_Free(v3);
}
MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &v0, sizeof(ListMenuTemplate));
v0.count = param2 + 1;
v0.maxDisplay = v1;
v0.choices = param0->menuOptions;
v0.window = &param0->primaryWindow;
if (cursorCallback) {
v0.cursorCallback = cursorCallback;
}
v0.parent = param0;
UndergroundMenu_MoveListCursorPosInBounds(param0, v1, v0.count);
param0->unk_48 = ListMenu_New(&v0, param0->listMenuListPos, param0->listMenuCursorPos, HEAP_ID_FIELD1);
}
static BOOL ov23_022517E0(SysTask *param0, void *param1)
{
UndergroundMenu *v0 = param1;
u32 v1;
u16 v2, v3;
v1 = ListMenu_ProcessInput(v0->unk_48);
ListMenu_GetListAndCursorPos(v0->unk_48, &v2, &v3);
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_22, v3, v2);
ov23_022521C8(v0);
switch (v1) {
case 0xffffffff:
return 0;
case 0xfffffffe:
Sound_PlayEffect(SEQ_SE_CONFIRM);
v0->state = 0;
break;
case 0:
if (sub_02033DFC()) {
v0->state = 11;
} else {
v0->state = 10;
}
break;
case 1:
if (sub_02033DFC()) {
v0->state = 13;
} else {
v0->state = 12;
}
break;
case 2:
if (sub_02033DFC()) {
v0->state = 15;
} else {
v0->state = 14;
}
break;
default:
v0->state = 2;
break;
}
return 1;
}
static BOOL ov23_02251894(SysTask *param0, void *param1)
{
UndergroundMenu *v0 = param1;
u32 v1, v2;
u16 v3, v4;
v1 = UndergroundItemListMenu_ProcessInput(v0->itemListMenu);
ListMenu_GetListAndCursorPos(v0->itemListMenu->listMenu, &v3, &v4);
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_2, v4, v3);
if (v1 == 0xfffffffe) {
v1 = 0xfffffffe;
}
switch (v1) {
case 0xffffffff:
UndergroundMenu_UpdateScrollPrompts(v0, v3, ListMenu_GetAttribute(v0->itemListMenu->listMenu, 2), 6);
return 0;
case 0xfffffffe:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
v0->state = 0;
break;
default:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
v2 = UndergroundMenu_GetGoodAtSlotBag(v1, v0);
if (ov23_02251418(v1, v0)) {
UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetMiscTextPrinter(), v2);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 37, FALSE, NULL);
} else {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 38, FALSE, NULL);
}
v0->state = 19;
UndergroundMenu_EraseCurrentMenu(v0);
break;
}
return 1;
}
static BOOL ov23_02251960(SysTask *param0, void *param1)
{
UndergroundMenu *v0 = param1;
u32 v1, v2;
u16 v3, v4;
int v5;
v1 = UndergroundItemListMenu_ProcessInput(v0->itemListMenu);
ListMenu_GetListAndCursorPos(v0->itemListMenu->listMenu, &v3, &v4);
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_6, v4, v3);
if (v1 == 0xfffffffe) {
v1 = 0xfffffffe;
}
switch (v1) {
case 0xffffffff:
UndergroundMenu_UpdateScrollPrompts(v0, v3, ListMenu_GetAttribute(v0->itemListMenu->listMenu, 2), 6);
return 0;
case 0xfffffffe:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
v0->state = 0;
break;
default:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
v2 = UndergroundMenu_GetGoodAtSlotPC(v1, v0);
v5 = ov23_0225144C(v1, v0);
if (1 == v5) {
UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetMiscTextPrinter(), v2);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 36, FALSE, NULL);
} else if (-1 == v5) {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 55, FALSE, NULL);
} else {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 39, FALSE, NULL);
}
v0->state = 22;
UndergroundMenu_EraseCurrentMenu(v0);
break;
}
ScrollPrompts_SetDrawFlag(v0->scrollPrompts, SCROLL_PROMPT_TOP_ARROW, FALSE);
ScrollPrompts_SetDrawFlag(v0->scrollPrompts, SCROLL_PROMPT_BOTTOM_ARROW, FALSE);
return 1;
}
static BOOL ov23_02251A58(UndergroundMenu *param0)
{
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) {
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
return 1;
}
}
return 0;
}
static void ov23_02251A84(BOOL param0, FieldSystem *fieldSystem)
{
VecFx32 v0;
v0.y = 0;
v0.x = 15 * FX32_ONE * 16 - Player_GetXPos(fieldSystem->playerAvatar) * FX32_ONE * 16;
v0.z = 17 * FX32_ONE * 16 - Player_GetZPos(fieldSystem->playerAvatar) * FX32_ONE * 16;
if (!param0) {
v0.x = -v0.x;
v0.z = -v0.z;
}
Camera_Move(&v0, fieldSystem->camera);
}
static BOOL ov23_02251ACC(FieldTask *param0)
{
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(param0);
UnkStruct_ov23_02251ACC *v1 = FieldTask_GetEnv(param0);
Location v2;
u32 v3;
BOOL v4 = 0;
int v5;
switch (v1->unk_00) {
case 0:
Sound_PlayEffect(SEQ_SE_DP_PC_LOGIN);
StartScreenFade(FADE_SUB_THEN_MAIN, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, HEAP_ID_FIELD1);
v1->unk_00 = 1;
break;
case 1:
if (IsScreenFadeDone()) {
PlayerAvatar_SetHidden(fieldSystem->playerAvatar, 0);
ov23_02251A84(1, fieldSystem);
v1->unk_00 = 2;
}
break;
case 2:
ov23_02254D98(fieldSystem, param0);
v1->unk_00 = 3;
break;
case 3:
v1->unk_00 = 4;
break;
case 4:
PlayerAvatar_SetHidden(fieldSystem->playerAvatar, 1);
ov23_02251A84(0, fieldSystem);
StartScreenFade(FADE_MAIN_THEN_SUB, FADE_TYPE_BRIGHTNESS_IN, FADE_TYPE_BRIGHTNESS_IN, COLOR_BLACK, 6, 1, HEAP_ID_FIELD1);
v1->unk_00 = 5;
break;
case 5:
if (IsScreenFadeDone()) {
ov23_0224B2C8(fieldSystem);
SystemFlag_SetDecoratedSecretBase(SaveData_GetVarsFlags(fieldSystem->saveData));
ov23_02251F94(fieldSystem);
Heap_Free(v1);
return 1;
}
break;
}
return 0;
}
static void ov23_02251BB4(SysTask *param0, UndergroundMenu *param1)
{
Strbuf_Free(param1->strbuf);
Strbuf_Free(param1->fmtString);
StringTemplate_Free(param1->template);
if (param1->exitCallback != NULL) {
param1->exitCallback(0);
}
if (param1->scrollPrompts) {
ScrollPrompts_Free(param1->scrollPrompts);
param1->scrollPrompts = NULL;
}
UndergroundMenu_EraseCurrentMenu(param1);
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
SysTask_Done(param0);
Heap_Free(param1);
}
static void ov23_02251C04(SysTask *param0, void *param1)
{
UndergroundMenu *v0 = param1;
u32 v1;
UnkStruct_ov23_02251ACC *v2;
switch (v0->state) {
case 0:
ov23_02252E18(param1);
v0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(23);
v0->listMenuListPos = CommManUnderground_GetStoredListPos(23);
v0->unk_2AE = v0->listMenuCursorPos;
ov23_022515D8(param1, 0, 5, ov23_0225148C, 0);
v0->state = 1;
break;
case 1:
ov23_022514D8(param0, param1);
break;
case 2:
CommPlayerMan_ResumeFieldSystem();
ov23_02243204();
ov23_02251BB4(param0, v0);
break;
case 6:
UndergroundMenu_EraseCurrentMenu(param1);
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
v0->unk_270 = ov23_02253C64(v0->fieldSystem->bgConfig, SaveData_GetTrainerInfo(FieldSystem_GetSaveData(v0->fieldSystem)), SaveData_GetUnderground(FieldSystem_GetSaveData(v0->fieldSystem)), NULL, NULL);
v0->state = 7;
break;
case 7:
if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) {
ov23_02253D10(v0->unk_270);
v0->unk_270 = NULL;
v0->state = 0;
}
break;
case 8:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
v0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(22);
v0->listMenuListPos = CommManUnderground_GetStoredListPos(22);
v0->unk_2AE = v0->listMenuCursorPos;
ov23_022516E8(param1, 40, 3, ov23_022514B0, 1);
v0->state = 9;
break;
case 9:
ov23_022517E0(param0, param1);
break;
case 10:
UndergroundMenu_EraseCurrentMenu(v0);
ov23_02242FF8();
ov23_022412F0();
BrightnessController_StartTransition(1, -6, 0, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 48, FALSE, NULL);
v0->state = 16;
break;
case 11:
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 57, FALSE, NULL);
v0->state = 16;
break;
case 12:
UndergroundMenu_EraseCurrentMenu(v0);
ov23_02242FD0();
SphereRadar_Start();
BrightnessController_StartTransition(1, -6, 0, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 49, FALSE, NULL);
v0->state = 16;
break;
case 13:
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 58, FALSE, NULL);
v0->state = 16;
break;
case 14:
UndergroundMenu_EraseCurrentMenu(v0);
ov23_02242FE4();
TrapRadar_Start();
BrightnessController_StartTransition(1, -6, 0, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 50, FALSE, NULL);
v0->state = 16;
break;
case 15:
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), 59, FALSE, NULL);
v0->state = 16;
break;
case 16:
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter()) == FALSE) {
if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) {
if (!sub_02033DFC()) {
BrightnessController_StartTransition(1, 0, -6, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
}
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
if (sub_02033DFC()) {
ov23_02242FA8();
} else {
ov23_02242FBC();
}
TrapRadar_Exit();
ov23_02241364();
SphereRadar_Exit();
v0->state = 8;
}
}
break;
case 3:
if (v0->fieldSystem->task == NULL) {
v2 = Heap_AllocAtEnd(HEAP_ID_FIELD2, sizeof(UnkStruct_ov23_02251ACC));
MI_CpuClear8(v2, sizeof(UnkStruct_ov23_02251ACC));
v2->unk_00 = 0;
v2->unk_04 = 0;
FieldSystem_CreateTask(v0->fieldSystem, ov23_02251ACC, v2);
}
ov23_02251BB4(param0, v0);
break;
case 17:
v0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(2);
v0->listMenuListPos = CommManUnderground_GetStoredListPos(2);
ov23_02250D2C(param1);
ov23_02252D74(param1, 28);
v0->state = 18;
break;
case 18:
ov23_02251894(param0, param1);
break;
case 19:
if (ov23_02251A58(v0)) {
v0->state = 17;
}
break;
case 20:
v0->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(6);
v0->listMenuListPos = CommManUnderground_GetStoredListPos(6);
ov23_02250D5C(param1);
ov23_02252D74(param1, 32);
v0->state = 21;
break;
case 21:
ov23_02251960(param0, param1);
break;
case 22:
if (ov23_02251A58(v0)) {
v0->state = 20;
}
break;
case 23:
if (ov23_02251A58(v0)) {
v0->state = 0;
}
break;
}
}
static void ov23_02251F94(FieldSystem *fieldSystem)
{
ListMenuTemplate v0;
UndergroundMenu *v1;
const int v2 = 6;
CommManUnderground_SetStoredPosKey(UNDERGROUND_STORED_POS_KEY_1);
v1 = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu));
MI_CpuFill8(v1, 0, sizeof(UndergroundMenu));
v1->fieldSystem = fieldSystem;
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetMiscTextPrinter(), TEXT_BANK_UNDERGROUND_BASE_PC, MSG_LOADER_LOAD_ON_DEMAND);
v1->state = 0;
v1->strbuf = Strbuf_Init((50 * 2), HEAP_ID_FIELD1);
v1->fmtString = Strbuf_Init((50 * 2), HEAP_ID_FIELD1);
v1->template = StringTemplate_Default(HEAP_ID_FIELD1);
v1->scrollPrompts = ScrollPrompts_New(HEAP_ID_FIELD1);
ScrollPrompts_SetPosition(v1->scrollPrompts, 200, 20, 122);
ScrollPrompts_SetDrawFlag(v1->scrollPrompts, SCROLL_PROMPT_TOP_ARROW, FALSE);
ScrollPrompts_SetDrawFlag(v1->scrollPrompts, SCROLL_PROMPT_BOTTOM_ARROW, FALSE);
v1->sysTask = SysTask_Start(ov23_02251C04, v1, 10000);
ov23_022431EC(v1, v1->sysTask, ov23_02251270);
}
static void ov23_02252038(SysTask *param0, void *param1)
{
UnkStruct_ov23_02252038 *v0 = param1;
int v1;
switch (v0->unk_00) {
case 0:
if (UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter()) == FALSE) {
v0->unk_08 = Menu_MakeYesNoChoice(v0->fieldSystem->bgConfig, &Unk_ov23_022569C8, 1024 - (18 + 12) - 9, 11, 4);
v0->unk_00 = 1;
}
break;
case 1:
v1 = Menu_ProcessInputAndHandleExit(v0->unk_08, 4);
if (v1 == 0xffffffff) {
return;
} else if (v1 == 0) {
CommSys_SendDataFixedSize(89, &v0->unk_0C);
} else {
CommPlayerMan_ResumeFieldSystemWithContextBit(PAUSE_BIT_6);
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter());
}
v0->unk_00 = 2;
v0->unk_08 = NULL;
break;
case 2:
Heap_Free(v0);
ov23_02243204();
SysTask_Done(param0);
break;
}
}
static void ov23_022520C8(SysTask *param0, void *param1)
{
UnkStruct_ov23_02252038 *v0 = param1;
if (v0->unk_08) {
Menu_DestroyForExit(v0->unk_08, 4);
}
Heap_Free(v0);
SysTask_Done(param0);
}
static void ov23_022520E8(FieldSystem *fieldSystem, UnkStruct_ov23_022513B0 *param1)
{
UnkStruct_ov23_02252038 *v0 = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu));
MI_CpuFill8(v0, 0, sizeof(UnkStruct_ov23_02252038));
v0->unk_00 = 0;
v0->fieldSystem = fieldSystem;
v0->primaryWindow = SysTask_Start(ov23_02252038, v0, 10000);
UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCommonTextPrinter(), CommInfo_TrainerInfo(param1->unk_01));
UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), 67, FALSE, NULL);
v0->unk_0C.unk_00 = param1->unk_00;
v0->unk_0C.unk_01 = param1->unk_01;
v0->unk_0C.unk_02 = param1->unk_02;
ov23_022431EC(v0, v0->primaryWindow, ov23_022520C8);
}
void ov23_0225215C(int param0, int param1, void *param2, void *param3)
{
UnkStruct_ov23_022513B0 *v0 = param2;
if (ov23_0224AEC4(v0->unk_00, v0->unk_01)) {
sub_02035B48(90, v0);
}
}
void ov23_02252178(int param0, int param1, void *param2, void *param3)
{
FieldSystem *fieldSystem = param3;
UnkStruct_ov23_022513B0 *v1 = param2;
if (CommSys_CurNetId() == v1->unk_00) {
UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCaptureFlagTextPrinter(), CommInfo_TrainerInfo(v1->unk_01));
UndergroundTextPrinter_PrintText(CommManUnderground_GetCaptureFlagTextPrinter(), 8, TRUE, ov23_022513A4);
Sound_PlayBGM(SEQ_HATANIGE);
}
ov23_0224AEC4(v1->unk_00, v1->unk_01);
ov23_0224D500(v1->unk_00, v1->unk_01);
}
static void ov23_022521C8(UndergroundMenu *param0)
{
u16 v0 = param0->unk_2AE;
ListMenu_CalcTrueCursorPos(param0->unk_48, &param0->unk_2AE);
if (v0 != param0->unk_2AE) {
Sound_PlayEffect(SEQ_SE_CONFIRM);
}
return;
}

View File

@ -3,6 +3,8 @@
#include <nitro.h>
#include <string.h>
#include "constants/field_base_tiles.h"
#include "struct_decls/struct_02061AB4_decl.h"
#include "struct_defs/underground.h"
@ -553,32 +555,32 @@ static void ov23_02252D1C(UndergroundMenu *param0)
Window_CopyToVRAM(&param0->secondaryWindow);
}
void ov23_02252D74(UndergroundMenu *param0, int param1)
void UndergroundMenu_PrintMenuDescription(UndergroundMenu *menu, int bankEntry)
{
Window_Add(param0->fieldSystem->bgConfig, &param0->unk_30, 3, 1, 1, 7, 4, 13, 51);
Window_DrawStandardFrame(&param0->unk_30, 1, 1024 - (18 + 12) - 9, 11);
Window_Add(menu->fieldSystem->bgConfig, &menu->menuDescriptionWindow, BG_LAYER_MAIN_3, 1, 1, 7, 4, 13, 51);
Window_DrawStandardFrame(&menu->menuDescriptionWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11);
Window_FillTilemap(&param0->unk_30, 15);
Window_CopyToVRAM(&param0->unk_30);
Window_FillTilemap(&menu->menuDescriptionWindow, 15);
Window_CopyToVRAM(&menu->menuDescriptionWindow);
MessageLoader_GetStrbuf(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), param1, param0->strbuf);
Text_AddPrinterWithParams(&param0->unk_30, FONT_SYSTEM, param0->strbuf, 1, 1, TEXT_SPEED_NO_TRANSFER, NULL);
Window_ScheduleCopyToVRAM(&param0->unk_30);
MessageLoader_GetStrbuf(UndergroundTextPrinter_GetMessageLoader(CommManUnderground_GetMiscTextPrinter()), bankEntry, menu->strbuf);
Text_AddPrinterWithParams(&menu->menuDescriptionWindow, FONT_SYSTEM, menu->strbuf, 1, 1, TEXT_SPEED_NO_TRANSFER, NULL);
Window_ScheduleCopyToVRAM(&menu->menuDescriptionWindow);
}
void ov23_02252DF4(UndergroundMenu *param0)
void UndergroundMenu_RemoveDescriptionWindow(UndergroundMenu *menu)
{
if (Window_IsInUse(&param0->unk_30)) {
Window_EraseStandardFrame(&param0->unk_30, 1);
Window_Remove(&param0->unk_30);
if (Window_IsInUse(&menu->menuDescriptionWindow)) {
Window_EraseStandardFrame(&menu->menuDescriptionWindow, TRUE);
Window_Remove(&menu->menuDescriptionWindow);
}
}
void ov23_02252E18(UndergroundMenu *param0)
void UndergroundMenu_RemoveDescriptionWindowInstant(UndergroundMenu *menu)
{
if (Window_IsInUse(&param0->unk_30)) {
Window_EraseStandardFrame(&param0->unk_30, 0);
Window_Remove(&param0->unk_30);
if (Window_IsInUse(&menu->menuDescriptionWindow)) {
Window_EraseStandardFrame(&menu->menuDescriptionWindow, FALSE);
Window_Remove(&menu->menuDescriptionWindow);
}
}
@ -723,7 +725,7 @@ static void ov23_02252E70(SysTask *param0, void *param1)
v0->listMenuListPos = CommManUnderground_GetStoredListPos(12);
ov23_02250184(v0);
ov23_02252D74(v0, 19);
UndergroundMenu_PrintMenuDescription(v0, 19);
if (v0->unk_2AC == 1) {
ov23_02252CF4(2, v0->unk_274[v0->unk_2A8]);
@ -747,13 +749,13 @@ static void ov23_02252E70(SysTask *param0, void *param1)
case 0xffffffff:
break;
case 0xfffffffe:
ov23_02252DF4(v0);
UndergroundMenu_RemoveDescriptionWindow(v0);
v0->state = 4;
break;
default:
v1 = ov23_02252404(v0, v0->unk_2A8, v1);
ov23_02252B90(v0, 1);
ov23_02252DF4(v0);
UndergroundMenu_RemoveDescriptionWindow(v0);
if (v1 == 0xfffc) {
ov23_02252C9C(3);
@ -810,13 +812,13 @@ static void ov23_02252E70(SysTask *param0, void *param1)
if (v0->unk_2AC == 1) {
ov23_0224FDBC(v0);
ov23_02252D74(v0, 20);
UndergroundMenu_PrintMenuDescription(v0, 20);
} else if (v0->unk_2AC == 0) {
ov23_02250CB0(v0);
ov23_02252D74(v0, 21);
UndergroundMenu_PrintMenuDescription(v0, 21);
} else {
ov23_02250578(v0);
ov23_02252D74(v0, 29);
UndergroundMenu_PrintMenuDescription(v0, 29);
}
v0->state = 13;
@ -830,7 +832,7 @@ static void ov23_02252E70(SysTask *param0, void *param1)
case 0xfffffffe:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
ov23_02252B90(v0, 1);
ov23_02252DF4(v0);
UndergroundMenu_RemoveDescriptionWindow(v0);
v0->state = 2;
break;
case 0xffffffff:
@ -840,7 +842,7 @@ static void ov23_02252E70(SysTask *param0, void *param1)
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
v0->unk_2A8 = v1;
ov23_02252B90(v0, 1);
ov23_02252DF4(v0);
UndergroundMenu_RemoveDescriptionWindow(v0);
ov23_02252BB8(v1, v0);
v0->state = 14;
}
@ -896,7 +898,7 @@ static void ov23_02252E70(SysTask *param0, void *param1)
if (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B)) {
ov23_02252CD4();
ov23_02252C78(v0);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
SysTask_Done(param0);
CommPlayerMan_ResumeFieldSystem();
}
@ -933,7 +935,7 @@ void ov23_022534A0(FieldSystem *fieldSystem)
Sound_PlayEffect(SEQ_SE_CONFIRM);
v4->sysTask = SysTask_Start(ov23_02252E70, v4, 10000);
ov23_022431EC(v4, v4->sysTask, ov23_02251270);
CommManUnderground_SetCurrentSysTask(v4, v4->sysTask, UndergroundMenu_ResetBrightnessAndExit);
{
int objEventCount, i;

View File

@ -107,7 +107,7 @@ static UnkFuncPtr_ov23_022576EC Unk_ov23_022576EC[] = {
UndergroundRecord_GetNumTrapsTriggered,
UndergroundRecord_GetNumPlayersHelped,
UndergroundRecord_GetGiftsReceived,
sub_020297AC,
UndergroundRecord_GetTimesFlagTaken,
sub_020297E4,
sub_0202981C,
UndergroundRecord_GetCapturedFlagCount
@ -406,7 +406,7 @@ void *ov23_02253C64(BgConfig *param0, TrainerInfo *param1, Underground *undergro
Window_Add(param0, &v4->unk_08, 3, 4, 2, 24, 19, 13, 1);
Window_DrawStandardFrame(&v4->unk_08, 1, 1024 - (18 + 12) - 9, 11);
v1 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_BASE_PC, HEAP_ID_FIELD1);
v1 = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_PC, HEAP_ID_FIELD1);
Window_FillTilemap(&v4->unk_08, 15);
v0 = Unk_ov23_022577BC->record;

View File

@ -14,7 +14,6 @@
#include "overlay023/ov23_02241F74.h"
#include "overlay023/ov23_0224A1D0.h"
#include "overlay023/ov23_0224B05C.h"
#include "overlay023/ov23_0225128C.h"
#include "overlay023/ov23_022521F0.h"
#include "overlay023/ov23_02253598.h"
#include "overlay023/underground_item_list_menu.h"
@ -489,7 +488,7 @@ void UndergroundMenu_Start(ExitCallback exitCallback, FieldSystem *fieldSystem)
menu->template = StringTemplate_Default(HEAP_ID_FIELD1);
menu->sysTask = SysTask_Start(UndergroundMenu_Main, menu, 10000);
ov23_022431EC(menu, menu->sysTask, ov23_02251270);
CommManUnderground_SetCurrentSysTask(menu, menu->sysTask, UndergroundMenu_ResetBrightnessAndExit);
}
#define ADD_OPTION(__menuOption) \
@ -569,12 +568,12 @@ static void UndergroundMenu_Main(SysTask *sysTask, void *data)
break;
case UNDERGROUND_MENU_STATE_CLOSE:
UndergroundMenu_EraseCurrentMenu(menu);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
UndergroundMenu_Free(sysTask, menu, FALSE);
return;
case UNDERGROUND_MENU_STATE_CLOSE_LEAVE_PAUSED:
UndergroundMenu_EraseCurrentMenu(menu);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
UndergroundMenu_Free(sysTask, menu, TRUE);
return;
case UNDERGROUND_MENU_STATE_TRAPS:
@ -605,7 +604,7 @@ static void UndergroundMenu_Main(SysTask *sysTask, void *data)
if (JOY_NEW(PAD_BUTTON_A)) {
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter());
UndergroundMenu_Free(sysTask, menu, FALSE);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
return;
}
}
@ -623,7 +622,7 @@ static void UndergroundMenu_Main(SysTask *sysTask, void *data)
case UNDERGROUND_MENU_STATE_RETURN_TO_SURFACE:
UndergroundMenu_EraseCurrentMenu(menu);
UndergroundMenu_Free(sysTask, menu, TRUE);
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
FieldTask_SetUndergroundMapChange(menu->fieldSystem);
return;
case UNDERGROUND_MENU_STATE_TRAP_SELECTED:
@ -711,7 +710,7 @@ void UndergroundMenu_EraseCurrentMenu(UndergroundMenu *menu)
Bg_ScheduleTilemapTransfer(menu->primaryWindow.bgConfig, menu->primaryWindow.bgLayer);
Window_Remove(&menu->primaryWindow);
StringList_Free(menu->menuOptions);
ov23_02252DF4(menu);
UndergroundMenu_RemoveDescriptionWindow(menu);
}
}
@ -1424,7 +1423,7 @@ void UndergroundMenu_StartHoldingFlag(ExitCallback exitCallback, FieldSystem *fi
UndergroundTextPrinter_PrintText(CommManUnderground_GetCaptureFlagTextPrinter(), UndergroundCaptureFlag_Text_PromptThrowAwayFlag, FALSE, NULL);
menu->sysTask = SysTask_Start(ov23_02250B9C, menu, 10000);
ov23_022431EC(menu, menu->sysTask, ov23_02251270);
CommManUnderground_SetCurrentSysTask(menu, menu->sysTask, UndergroundMenu_ResetBrightnessAndExit);
}
static void UndergroundMenu_ConfirmThrowAwayFlag(UndergroundMenu *menu)
@ -1486,7 +1485,7 @@ static void ov23_02250B9C(SysTask *sysTask, void *data)
{
UndergroundMenu *menu = data;
if (!ov23_0224AEA4(CommSys_CurNetId())) {
if (!ov23_IsPlayerHoldingFlag(CommSys_CurNetId())) {
if (menu->state == UNDERGROUND_MENU_STATE_INIT || menu->state == UNDERGROUND_MENU_STATE_START) {
menu->state = UNDERGROUND_MENU_STATE_CLOSE;
}
@ -1500,11 +1499,11 @@ static void ov23_02250B9C(SysTask *sysTask, void *data)
UndergroundMenu_CheckForThrowAwayYesNo(data);
break;
case UNDERGROUND_MENU_STATE_CLOSE:
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
UndergroundMenu_Free(sysTask, data, FALSE);
return;
case UNDERGROUND_MENU_STATE_CLOSE_LEAVE_PAUSED:
ov23_02243204();
CommManUnderground_ClearCurrentSysTaskInfo();
UndergroundMenu_Free(sysTask, data, TRUE);
u8 buffer = 0;
CommSys_SendDataFixedSize(84, &buffer);
@ -1569,7 +1568,7 @@ void UndergroundMenu_OpenGoodsMenu(UndergroundMenu *menu)
UndergroundMenu_InitGoodsMenu(menu, Underground_MoveGoodBag);
}
void ov23_02250D2C(UndergroundMenu *menu)
void UndergroundMenu_OpenStoreGoodsMenu(UndergroundMenu *menu)
{
menu->getItemCount = UndergroundMenu_GetGoodsCountBag;
menu->getItem = UndergroundMenu_GetGoodAtSlotBag;
@ -1579,7 +1578,7 @@ void ov23_02250D2C(UndergroundMenu *menu)
UndergroundMenu_InitGoodsMenu(menu, Underground_MoveGoodBag);
}
void ov23_02250D5C(UndergroundMenu *menu)
void UndergroundMenu_OpenWithdrawGoodsMenu(UndergroundMenu *menu)
{
menu->getItemCount = UndergroundMenu_GetGoodsCountPC;
menu->getItem = UndergroundMenu_GetGoodAtSlotPC;
@ -1716,7 +1715,7 @@ static BOOL UndergroundMenu_HandleGoodSelectedMenu(SysTask *sysTask, void *data)
return TRUE;
}
void UndergroundMenu_ExitGiftMenu(void *data, u32 input)
void UndergroundMenu_Exit(void *data, u32 input)
{
UndergroundMenu *menu = data;
@ -1793,11 +1792,10 @@ static BOOL UndergroundMenu_HandleGiftMenu(SysTask *sysTask, void *data)
}
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
UndergroundMenu_ExitGiftMenu(menu, input);
ov23_02243204();
UndergroundMenu_Exit(menu, input);
CommManUnderground_ClearCurrentSysTaskInfo();
return TRUE;
default:
if (menu->exitCallback != NULL) {
ctx->selectedSlot = input;
ctx->selectedID = UndergroundMenu_GetGoodAtSlotBag(input, menu);
@ -1806,8 +1804,8 @@ static BOOL UndergroundMenu_HandleGiftMenu(SysTask *sysTask, void *data)
}
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
UndergroundMenu_ExitGiftMenu(menu, input);
ov23_02243204();
UndergroundMenu_Exit(menu, input);
CommManUnderground_ClearCurrentSysTaskInfo();
return TRUE;
break;
}
@ -1836,7 +1834,7 @@ void *UndergroundMenu_StartGiftMenu(ExitCallback exitCallback, FieldSystem *fiel
menu->state = UNDERGROUND_MENU_STATE_GIVE_GIFT;
menu->sysTask = SysTask_Start(UndergroundMenu_Main, menu, 10000);
ov23_022431EC(menu, menu->sysTask, ov23_02251270);
CommManUnderground_SetCurrentSysTask(menu, menu->sysTask, UndergroundMenu_ResetBrightnessAndExit);
return menu;
}
@ -1859,8 +1857,29 @@ void UndergroundMenu_MoveListCursorPosInBounds(UndergroundMenu *menu, int maxDis
}
}
void ov23_02251270(SysTask *sysTask, void *param1)
void UndergroundMenu_ResetBrightnessAndExit(SysTask *sysTask, void *data)
{
BrightnessController_SetScreenBrightness(0, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
UndergroundMenu_ExitGiftMenu(param1, LIST_CANCEL);
UndergroundMenu_Exit(data, LIST_CANCEL);
}
void UndergroundMenu_UpdateScrollPrompts(UndergroundMenu *menu, int listPos, int count, int maxDisplay)
{
if (count <= maxDisplay) {
return;
}
if (listPos != 0) {
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_TOP_ARROW, TRUE);
} else {
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_TOP_ARROW, FALSE);
}
if (listPos + maxDisplay != count) {
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_BOTTOM_ARROW, TRUE);
} else {
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_BOTTOM_ARROW, FALSE);
}
ScrollPrompts_UpdateAnim(menu->scrollPrompts);
}

View File

@ -0,0 +1,966 @@
#include "overlay023/underground_pc.h"
#include <nitro.h>
#include <string.h>
#include "constants/field_base_tiles.h"
#include "constants/map_object.h"
#include "struct_defs/underground.h"
#include "field/field_system.h"
#include "overlay023/ov23_0223E140.h"
#include "overlay023/ov23_02241F74.h"
#include "overlay023/ov23_0224A1D0.h"
#include "overlay023/ov23_0224B05C.h"
#include "overlay023/ov23_022521F0.h"
#include "overlay023/ov23_02253598.h"
#include "overlay023/ov23_02254A14.h"
#include "overlay023/underground_item_list_menu.h"
#include "overlay023/underground_menu.h"
#include "overlay023/underground_spheres.h"
#include "overlay023/underground_text_printer.h"
#include "overlay023/underground_traps.h"
#include "bg_window.h"
#include "brightness_controller.h"
#include "camera.h"
#include "comm_player_manager.h"
#include "communication_information.h"
#include "communication_system.h"
#include "field_system.h"
#include "field_task.h"
#include "heap.h"
#include "list_menu.h"
#include "location.h"
#include "menu.h"
#include "message.h"
#include "player_avatar.h"
#include "render_window.h"
#include "save_player.h"
#include "screen_fade.h"
#include "scroll_prompts.h"
#include "sound_playback.h"
#include "strbuf.h"
#include "string_list.h"
#include "string_template.h"
#include "sys_task.h"
#include "sys_task_manager.h"
#include "system.h"
#include "system_flags.h"
#include "unk_0202854C.h"
#include "unk_02033200.h"
#include "vars_flags.h"
#include "res/text/bank/underground_capture_flag.h"
#include "res/text/bank/underground_common.h"
#include "res/text/bank/underground_pc.h"
#define SECRET_BASE_WIDTH 32
#define SECRET_BASE_HEIGHT 32
#define PC_COORDINATE_X 15
#define PC_COORDINATE_Z 12
enum UndergroundPCMenuState {
UG_PC_MENU_STATE_INIT = 0,
UG_PC_MENU_STATE_MAIN,
UG_PC_MENU_STATE_EXIT,
UG_PC_MENU_STATE_DECORATE,
UG_PC_MENU_STATE_INIT_CHECK_FLAGS = 6,
UG_PC_MENU_STATE_CHECK_FLAGS,
UG_PC_MENU_STATE_INIT_RADAR_MENU,
UG_PC_MENU_STATE_RADAR_MENU_MAIN,
UG_PC_MENU_STATE_START_TREASURE_RADAR,
UG_PC_MENU_STATE_TREASURE_RADAR_NOT_AVAILABLE,
UG_PC_MENU_STATE_START_SPHERE_RADAR,
UG_PC_MENU_STATE_SPHERE_RADAR_NOT_AVAILABLE,
UG_PC_MENU_STATE_START_TRAP_RADAR,
UG_PC_MENU_STATE_TRAP_RADAR_NOT_AVAILABLE,
UG_PC_MENU_STATE_EXIT_RADAR_ON_BUTTON_PRESS,
UG_PC_MENU_STATE_INIT_STORE_GOODS,
UG_PC_MENU_STATE_STORE_GOODS,
UG_PC_MENU_STATE_STORE_GOODS_WAIT_FOR_MESSAGE,
UG_PC_MENU_STATE_INIT_WITHDRAW_GOODS,
UG_PC_MENU_STATE_WITHDRAW_GOODS,
UG_PC_MENU_STATE_WITHDRAW_GOODS_WAIT_FOR_MESSAGE,
UG_PC_MENU_STATE_WAIT_FOR_MESSAGE,
};
enum UndergroundPCMenuOption {
UG_PC_MENU_OPTION_DECORATE = 0,
UG_PC_MENU_OPTION_STORE_GOODS,
UG_PC_MENU_OPTION_RECEIVE_GOODS,
UG_PC_MENU_OPTION_CHECK_FLAGS,
UG_PC_MENU_OPTION_USE_RADAR,
};
enum RadarMenuOption {
RADAR_MENU_OPTION_TREASURE = 0,
RADAR_MENU_OPTION_SPHERE,
RADAR_MENU_OPTION_TRAP,
};
enum TakeFlagPromptState {
TAKE_FLAG_PROMPT_STATE_INIT = 0,
TAKE_FLAG_PROMPT_STATE_MAIN,
TAKE_FLAG_PROMPT_STATE_EXIT,
};
enum DecorateState {
DECORATE_STATE_FADE = 0,
DECORATE_STATE_UPDATE_CAMERA,
DECORATE_STATE_START,
DECORATE_STATE_MAIN,
DECORATE_STATE_REVERT_CAMERA,
DECORATE_STATE_END,
};
typedef struct PCInteraction {
u8 playerNetID;
u8 pcNetID;
u8 canTakeFlag;
} PCInteraction;
typedef struct DecorateContext {
int state;
int dummy;
u8 unused;
} DecorateContext;
typedef struct TakeFlagPromptContext {
int state;
FieldSystem *fieldSystem;
Menu *menu;
PCInteraction pcInteraction;
SysTask *sysTask;
} TakeFlagPromptContext;
static void UndergroundPC_StartTakeFlagPromptTask(FieldSystem *fieldSystem, PCInteraction *pcInteraction);
static void UndergroundPC_OpenPCMenu(FieldSystem *fieldSystem);
static void UndergroundPC_UpdateCursorPos(UndergroundMenu *menu);
static const WindowTemplate sWindowTemplate = {
.bgLayer = BG_LAYER_MAIN_3,
.tilemapLeft = 25,
.tilemapTop = 13,
.width = 6,
.height = 4,
.palette = 13,
.baseTile = 543,
};
int UndergroundPC_GetPCAtCoordinates(Coordinates *coordinates, int dir)
{
int netID;
int x = coordinates->x;
int z = coordinates->z;
int modifier = 0;
if (dir != DIR_NONE && dir != DIR_NORTH) {
return PC_NONE;
}
if (z == PC_COORDINATE_Z) {
modifier = 0;
} else if (z == PC_COORDINATE_Z + SECRET_BASE_HEIGHT) {
modifier = MAX_CONNECTED_PLAYERS; // bug: would lead to out of bounds array access
} else {
return PC_NONE;
}
if (x == PC_COORDINATE_X || x == PC_COORDINATE_X + 1) {
return 0;
}
for (netID = 0; netID < MAX_CONNECTED_PLAYERS; netID++) {
if (x == PC_COORDINATE_X + SECRET_BASE_WIDTH || x == PC_COORDINATE_X + 1 + SECRET_BASE_WIDTH) {
return netID + modifier;
}
x -= SECRET_BASE_WIDTH;
}
return PC_NONE;
}
BOOL UndergroundPC_TryUsePC(int netID, Coordinates *coordinates)
{
int pcNetID = UndergroundPC_GetPCAtCoordinates(coordinates, CommPlayer_DirServer(netID));
if (CommPlayer_Dir(pcNetID) == DIR_NONE) {
pcNetID = PC_NONE;
}
if (pcNetID != PC_NONE) {
sub_02059058(netID, FALSE);
PCInteraction pcInteraction;
pcInteraction.pcNetID = pcNetID;
pcInteraction.playerNetID = netID;
pcInteraction.canTakeFlag = FALSE;
if (pcNetID != netID) {
if (!ov23_IsPlayerHoldingFlag(netID)) {
pcInteraction.canTakeFlag = TRUE;
}
} else {
if (ov23_IsPlayerHoldingFlag(netID)) {
u8 v5 = 3; // TODO: label this when below function is documented
ov23_0224A570(netID, 1, &v5, NULL);
return TRUE;
}
}
sub_02035B48(83, &pcInteraction);
return TRUE;
}
return FALSE;
}
static void UndergroundPC_ResumeFieldSystem(int unused)
{
CommPlayerMan_ResumeFieldSystemWithContextBit(PAUSE_BIT_LINK_PC);
}
void UndergroundPC_ProcessPCInteraction(int unused0, int unused1, void *data, void *data2)
{
PCInteraction *pcInteraction = data;
FieldSystem *fieldSystem = data2;
if (!CommSys_IsSendingMovementData()) {
return;
}
if (pcInteraction->playerNetID == CommSys_CurNetId()) {
if (pcInteraction->pcNetID == CommSys_CurNetId()) {
Sound_PlayEffect(SEQ_SE_DP_PC_ON);
CommPlayerMan_PauseFieldSystem();
UndergroundPC_OpenPCMenu(fieldSystem);
} else {
CommPlayerMan_PauseFieldSystemWithContextBit(PAUSE_BIT_LINK_PC);
if (pcInteraction->canTakeFlag) {
UndergroundPC_StartTakeFlagPromptTask(fieldSystem, pcInteraction);
} else {
UndergroundTextPrinter_PrintText(CommManUnderground_GetCaptureFlagTextPrinter(), UndergroundCaptureFlag_Text_YouAlreadyHaveFlag, TRUE, UndergroundPC_ResumeFieldSystem);
}
}
}
}
int CommPacketSizeOf_PCInteraction(void)
{
return sizeof(PCInteraction);
}
static BOOL UndergroundPC_TryDepositGood(int slot, UndergroundMenu *menu)
{
Underground *underground = SaveData_GetUnderground(FieldSystem_GetSaveData(menu->fieldSystem));
int goodID = Underground_GetGoodAtSlotBag(underground, slot);
if (Underground_TryAddGoodPC(underground, goodID)) {
Underground_RemoveGoodAtSlotBag(underground, slot);
return TRUE;
}
return FALSE;
}
static int UndergroundPC_TryWithdrawGood(int slot, UndergroundMenu *menu)
{
Underground *underground = SaveData_GetUnderground(FieldSystem_GetSaveData(menu->fieldSystem));
if (Underground_IsGoodAtSlotPlacedInBase(underground, slot)) {
return -1;
}
int goodID = Underground_GetGoodAtSlotPC(underground, slot);
if (UndergroundInventory_TryAddGoodBag(goodID)) {
Underground_RemoveGoodAtSlotPC(underground, slot);
return TRUE;
}
return FALSE;
}
static void UndergroundPC_PrintMenuItemDescription(ListMenu *listMenu, u32 menuItemIdx, u8 unused)
{
ListMenu_GetAttribute(listMenu, LIST_MENU_PARENT);
int index = menuItemIdx;
if (menuItemIdx == LIST_CANCEL) {
index = UndergroundPC_Text_ExitDescription - UndergroundPC_Text_DecorateDescription;
}
UndergroundTextPrinter_PrintTextInstant(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_DecorateDescription + index, FALSE, NULL);
}
static void UndergroundPC_PrintRadarMenuItemDescription(ListMenu *listMenu, u32 menuItemIdx, u8 unused)
{
ListMenu_GetAttribute(listMenu, LIST_MENU_PARENT);
int index = menuItemIdx;
if (menuItemIdx == LIST_CANCEL) {
index = UndergroundPC_Text_CancelDescription - UndergroundPC_Text_TreasureSearchDescription;
}
UndergroundTextPrinter_PrintTextInstant(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_TreasureSearchDescription + index, FALSE, NULL);
}
static BOOL UndergroundPC_HandleMenu(SysTask *sysTask, void *data)
{
UndergroundMenu *menu = data;
u32 input = ListMenu_ProcessInput(menu->unk_48);
u16 listPos, cursorPos;
ListMenu_GetListAndCursorPos(menu->unk_48, &listPos, &cursorPos);
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_PC, cursorPos, listPos);
UndergroundPC_UpdateCursorPos(menu);
switch (input) {
case LIST_NOTHING_CHOSEN:
return FALSE;
case LIST_CANCEL:
Sound_PlayEffect(SEQ_SE_DP_PC_LOGOFF);
menu->state = UG_PC_MENU_STATE_EXIT;
break;
case UG_PC_MENU_OPTION_DECORATE:
Underground *underground = SaveData_GetUnderground(menu->fieldSystem->saveData);
if (Underground_GetGoodsCountPC(underground) == 0) {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_StoreGoodsBeforeDecorating, FALSE, NULL);
menu->state = UG_PC_MENU_STATE_WAIT_FOR_MESSAGE;
} else if (CommServerClient_IsInClosedSecretBase()) {
CommManUnderground_ClearCurrentSysTaskInfo();
menu->state = UG_PC_MENU_STATE_DECORATE;
} else {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_CantDecorateWithEntranceOpen, FALSE, NULL);
menu->state = UG_PC_MENU_STATE_WAIT_FOR_MESSAGE;
}
break;
case UG_PC_MENU_OPTION_USE_RADAR:
Sound_PlayEffect(SEQ_SE_CONFIRM);
menu->state = UG_PC_MENU_STATE_INIT_RADAR_MENU;
break;
case UG_PC_MENU_OPTION_CHECK_FLAGS:
Sound_PlayEffect(SEQ_SE_CONFIRM);
menu->state = UG_PC_MENU_STATE_INIT_CHECK_FLAGS;
break;
case UG_PC_MENU_OPTION_STORE_GOODS:
Sound_PlayEffect(SEQ_SE_CONFIRM);
menu->state = UG_PC_MENU_STATE_INIT_STORE_GOODS;
break;
case UG_PC_MENU_OPTION_RECEIVE_GOODS:
Sound_PlayEffect(SEQ_SE_CONFIRM);
menu->state = UG_PC_MENU_STATE_INIT_WITHDRAW_GOODS;
break;
default:
break;
}
return TRUE;
}
static void UndergroundPC_InitMenu(UndergroundMenu *menu, int startBankEntry, int optionCount, CursorCallback cursorCallback, int unused)
{
int trueOptionCount = optionCount + 1;
BOOL radarEnabled = TRUE;
if (UndergroundRecord_GetFlagRank(SaveData_UndergroundRecord(menu->fieldSystem->saveData)) < BASE_FLAG_GOLD) {
radarEnabled = FALSE;
trueOptionCount -= 1;
}
UndergroundMenu_EraseCurrentMenu(menu);
menu->menuOptions = StringList_New(trueOptionCount, HEAP_ID_FIELD1);
Window_Add(menu->fieldSystem->bgConfig, &menu->primaryWindow, BG_LAYER_MAIN_3, 17, 3, 14, trueOptionCount * 2, 13, 2);
Window_DrawStandardFrame(&menu->primaryWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11);
MessageLoader *loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_PC, HEAP_ID_FIELD1);
for (int i = 0; i < trueOptionCount; i++) {
if (i == trueOptionCount - 1) {
StringList_AddFromMessageBank(menu->menuOptions, loader, startBankEntry + (UndergroundPC_Text_Exit - UndergroundPC_Text_Decorate), LIST_CANCEL);
} else {
StringList_AddFromMessageBank(menu->menuOptions, loader, startBankEntry + i, i);
}
}
MessageLoader_Free(loader);
ListMenuTemplate template;
MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &template, sizeof(ListMenuTemplate));
template.count = trueOptionCount;
template.maxDisplay = trueOptionCount;
template.choices = menu->menuOptions;
template.window = &menu->primaryWindow;
if (cursorCallback) {
template.cursorCallback = cursorCallback;
}
template.parent = menu;
UndergroundMenu_MoveListCursorPosInBounds(menu, trueOptionCount, template.count);
menu->unk_48 = ListMenu_New(&template, menu->listMenuListPos, menu->listMenuCursorPos, HEAP_ID_FIELD1);
}
static void UndergroundPC_InitRadarMenu(UndergroundMenu *menu, int startBankEntry, int optionCount, CursorCallback cursorCallback, int unused)
{
int trueOptionCount = optionCount + 1;
UndergroundMenu_EraseCurrentMenu(menu);
menu->menuOptions = StringList_New(trueOptionCount, HEAP_ID_FIELD1);
Window_Add(menu->fieldSystem->bgConfig, &menu->primaryWindow, BG_LAYER_MAIN_3, 17, 3, 14, trueOptionCount * 2, 13, 2 + 14 * 16);
Window_DrawStandardFrame(&menu->primaryWindow, TRUE, BASE_TILE_STANDARD_WINDOW_FRAME, 11);
MessageLoader *loader = MessageLoader_Init(MSG_LOADER_PRELOAD_ENTIRE_BANK, NARC_INDEX_MSGDATA__PL_MSG, TEXT_BANK_UNDERGROUND_PC, HEAP_ID_FIELD1);
for (int i = 0; i < trueOptionCount; i++) {
if (i == optionCount) {
StringList_AddFromMessageBank(menu->menuOptions, loader, startBankEntry + i, LIST_CANCEL);
} else {
StringList_AddFromMessageBank(menu->menuOptions, loader, startBankEntry + i, i);
}
}
MessageLoader_Free(loader);
ListMenuTemplate template;
MI_CpuCopy8(UndergroundTextPrinter_GetListMenuTemplate(), &template, sizeof(ListMenuTemplate));
template.count = optionCount + 1;
template.maxDisplay = trueOptionCount;
template.choices = menu->menuOptions;
template.window = &menu->primaryWindow;
if (cursorCallback) {
template.cursorCallback = cursorCallback;
}
template.parent = menu;
UndergroundMenu_MoveListCursorPosInBounds(menu, trueOptionCount, template.count);
menu->unk_48 = ListMenu_New(&template, menu->listMenuListPos, menu->listMenuCursorPos, HEAP_ID_FIELD1);
}
static BOOL UndergroundPC_HandleRadarMenu(SysTask *sysTask, void *data)
{
UndergroundMenu *menu = data;
u32 input = ListMenu_ProcessInput(menu->unk_48);
u16 listPos, cursorPos;
ListMenu_GetListAndCursorPos(menu->unk_48, &listPos, &cursorPos);
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_PC_RADAR, cursorPos, listPos);
UndergroundPC_UpdateCursorPos(menu);
switch (input) {
case LIST_NOTHING_CHOSEN:
return FALSE;
case LIST_CANCEL:
Sound_PlayEffect(SEQ_SE_CONFIRM);
menu->state = UG_PC_MENU_STATE_INIT;
break;
case RADAR_MENU_OPTION_TREASURE:
if (CommServerClient_IsInClosedSecretBase()) {
menu->state = UG_PC_MENU_STATE_TREASURE_RADAR_NOT_AVAILABLE;
} else {
menu->state = UG_PC_MENU_STATE_START_TREASURE_RADAR;
}
break;
case RADAR_MENU_OPTION_SPHERE:
if (CommServerClient_IsInClosedSecretBase()) {
menu->state = UG_PC_MENU_STATE_SPHERE_RADAR_NOT_AVAILABLE;
} else {
menu->state = UG_PC_MENU_STATE_START_SPHERE_RADAR;
}
break;
case RADAR_MENU_OPTION_TRAP:
if (CommServerClient_IsInClosedSecretBase()) {
menu->state = UG_PC_MENU_STATE_TRAP_RADAR_NOT_AVAILABLE;
} else {
menu->state = UG_PC_MENU_STATE_START_TRAP_RADAR;
}
break;
default:
menu->state = UG_PC_MENU_STATE_EXIT;
break;
}
return TRUE;
}
static BOOL UndergroundPC_HandleStoreGoodsMenu(SysTask *sysTask, void *data)
{
UndergroundMenu *menu = data;
u32 input = UndergroundItemListMenu_ProcessInput(menu->itemListMenu);
u16 listPos, cursorPos;
ListMenu_GetListAndCursorPos(menu->itemListMenu->listMenu, &listPos, &cursorPos);
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_STORE_GOODS, cursorPos, listPos);
// make sure we have the right type of -2
if (input == MENU_CANCELED) {
input = LIST_CANCEL;
}
switch (input) {
case LIST_NOTHING_CHOSEN:
UndergroundMenu_UpdateScrollPrompts(menu, listPos, ListMenu_GetAttribute(menu->itemListMenu->listMenu, LIST_MENU_COUNT), 6);
return FALSE;
case LIST_CANCEL:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
menu->state = UG_PC_MENU_STATE_INIT;
break;
default:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
u32 goodID = UndergroundMenu_GetGoodAtSlotBag(input, menu);
if (UndergroundPC_TryDepositGood(input, menu)) {
UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetMiscTextPrinter(), goodID);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_GoodWasStored, FALSE, NULL);
} else {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_PCIsFull, FALSE, NULL);
}
menu->state = UG_PC_MENU_STATE_STORE_GOODS_WAIT_FOR_MESSAGE;
UndergroundMenu_EraseCurrentMenu(menu);
break;
}
return TRUE;
}
static BOOL UndergroundPC_HandleWithdrawGoodsMenu(SysTask *sysTask, void *data)
{
UndergroundMenu *menu = data;
u32 input = UndergroundItemListMenu_ProcessInput(menu->itemListMenu);
u16 listPos, cursorPos;
ListMenu_GetListAndCursorPos(menu->itemListMenu->listMenu, &listPos, &cursorPos);
CommManUnderground_StoreCursorAndListPos(UNDERGROUND_MENU_KEY_WITHDRAW_GOODS, cursorPos, listPos);
// make sure we have the right type of -2
if (input == MENU_CANCELED) {
input = LIST_CANCEL;
}
switch (input) {
case LIST_NOTHING_CHOSEN:
UndergroundMenu_UpdateScrollPrompts(menu, listPos, ListMenu_GetAttribute(menu->itemListMenu->listMenu, LIST_MENU_COUNT), 6);
return FALSE;
case LIST_CANCEL:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
menu->state = UG_PC_MENU_STATE_INIT;
break;
default:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
u32 goodID = UndergroundMenu_GetGoodAtSlotPC(input, menu);
int withdrawResult = UndergroundPC_TryWithdrawGood(input, menu);
if (withdrawResult == 1) {
UndergroundTextPrinter_SetUndergroundGoodsName(CommManUnderground_GetMiscTextPrinter(), goodID);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_GoodWasWithdrawn, FALSE, NULL);
} else if (withdrawResult == -1) {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_CantWithdrawDisplayedGood, FALSE, NULL);
} else {
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_BagIsFull, FALSE, NULL);
}
menu->state = 22;
UndergroundMenu_EraseCurrentMenu(menu);
break;
}
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_TOP_ARROW, FALSE);
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_BOTTOM_ARROW, FALSE);
return TRUE;
}
static BOOL UndergroundPC_IsMessageClosed(UndergroundMenu *unused)
{
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) {
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
return TRUE;
}
}
return FALSE;
}
static void UndergroundPC_MoveCamera(BOOL isDecorating, FieldSystem *fieldSystem)
{
VecFx32 delta;
delta.y = 0;
delta.x = 15 * FX32_ONE * 16 - Player_GetXPos(fieldSystem->playerAvatar) * FX32_ONE * 16;
delta.z = 17 * FX32_ONE * 16 - Player_GetZPos(fieldSystem->playerAvatar) * FX32_ONE * 16;
if (!isDecorating) {
delta.x = -delta.x;
delta.z = -delta.z;
}
Camera_Move(&delta, fieldSystem->camera);
}
static BOOL UndergroundPC_DecorateTask(FieldTask *task)
{
FieldSystem *fieldSystem = FieldTask_GetFieldSystem(task);
DecorateContext *ctx = FieldTask_GetEnv(task);
switch (ctx->state) {
case DECORATE_STATE_FADE:
Sound_PlayEffect(SEQ_SE_DP_PC_LOGIN);
StartScreenFade(FADE_SUB_THEN_MAIN, FADE_TYPE_BRIGHTNESS_OUT, FADE_TYPE_BRIGHTNESS_OUT, COLOR_BLACK, 6, 1, HEAP_ID_FIELD1);
ctx->state = DECORATE_STATE_UPDATE_CAMERA;
break;
case DECORATE_STATE_UPDATE_CAMERA:
if (IsScreenFadeDone()) {
PlayerAvatar_SetVisible(fieldSystem->playerAvatar, FALSE);
UndergroundPC_MoveCamera(TRUE, fieldSystem);
ctx->state = DECORATE_STATE_START;
}
break;
case DECORATE_STATE_START:
ov23_02254D98(fieldSystem, task);
ctx->state = DECORATE_STATE_MAIN;
break;
case DECORATE_STATE_MAIN:
ctx->state = DECORATE_STATE_REVERT_CAMERA;
break;
case DECORATE_STATE_REVERT_CAMERA:
PlayerAvatar_SetVisible(fieldSystem->playerAvatar, TRUE);
UndergroundPC_MoveCamera(FALSE, fieldSystem);
StartScreenFade(FADE_MAIN_THEN_SUB, FADE_TYPE_BRIGHTNESS_IN, FADE_TYPE_BRIGHTNESS_IN, COLOR_BLACK, 6, 1, HEAP_ID_FIELD1);
ctx->state = DECORATE_STATE_END;
break;
case DECORATE_STATE_END:
if (IsScreenFadeDone()) {
ov23_0224B2C8(fieldSystem);
SystemFlag_SetDecoratedSecretBase(SaveData_GetVarsFlags(fieldSystem->saveData));
UndergroundPC_OpenPCMenu(fieldSystem);
Heap_Free(ctx);
return TRUE;
}
break;
}
return FALSE;
}
static void UndergroundPC_ExitPCMenu(SysTask *sysTask, UndergroundMenu *menu)
{
Strbuf_Free(menu->strbuf);
Strbuf_Free(menu->fmtString);
StringTemplate_Free(menu->template);
if (menu->exitCallback != NULL) {
menu->exitCallback(0);
}
if (menu->scrollPrompts) {
ScrollPrompts_Free(menu->scrollPrompts);
menu->scrollPrompts = NULL;
}
UndergroundMenu_EraseCurrentMenu(menu);
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
SysTask_Done(sysTask);
Heap_Free(menu);
}
static void UndergroundPC_Main(SysTask *sysTask, void *data)
{
UndergroundMenu *menu = data;
DecorateContext *decorateCtx;
switch (menu->state) {
case UG_PC_MENU_STATE_INIT:
UndergroundMenu_RemoveDescriptionWindowInstant(menu);
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_PC);
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_PC);
menu->unk_2AE = menu->listMenuCursorPos;
UndergroundPC_InitMenu(menu, UndergroundPC_Text_Decorate, 5, UndergroundPC_PrintMenuItemDescription, 0);
menu->state = UG_PC_MENU_STATE_MAIN;
break;
case UG_PC_MENU_STATE_MAIN:
UndergroundPC_HandleMenu(sysTask, menu);
break;
case UG_PC_MENU_STATE_EXIT:
CommPlayerMan_ResumeFieldSystem();
CommManUnderground_ClearCurrentSysTaskInfo();
UndergroundPC_ExitPCMenu(sysTask, menu);
break;
case UG_PC_MENU_STATE_INIT_CHECK_FLAGS:
UndergroundMenu_EraseCurrentMenu(menu);
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
menu->unk_270 = ov23_02253C64(menu->fieldSystem->bgConfig, SaveData_GetTrainerInfo(FieldSystem_GetSaveData(menu->fieldSystem)), SaveData_GetUnderground(FieldSystem_GetSaveData(menu->fieldSystem)), NULL, NULL);
menu->state = UG_PC_MENU_STATE_CHECK_FLAGS;
break;
case UG_PC_MENU_STATE_CHECK_FLAGS:
if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) {
ov23_02253D10(menu->unk_270);
menu->unk_270 = NULL;
menu->state = UG_PC_MENU_STATE_INIT;
}
break;
case UG_PC_MENU_STATE_INIT_RADAR_MENU:
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_PC_RADAR);
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_PC_RADAR);
menu->unk_2AE = menu->listMenuCursorPos;
UndergroundPC_InitRadarMenu(menu, UndergroundPC_Text_TreasureSearch, 3, UndergroundPC_PrintRadarMenuItemDescription, 1);
menu->state = UG_PC_MENU_STATE_RADAR_MENU_MAIN;
break;
case UG_PC_MENU_STATE_RADAR_MENU_MAIN:
UndergroundPC_HandleRadarMenu(sysTask, menu);
break;
case UG_PC_MENU_STATE_START_TREASURE_RADAR:
UndergroundMenu_EraseCurrentMenu(menu);
CommManUnderground_SetTreasureRadarActive();
ov23_022412F0();
BrightnessController_StartTransition(1, -6, 0, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_TreasureRadarBootedUp, FALSE, NULL);
menu->state = UG_PC_MENU_STATE_EXIT_RADAR_ON_BUTTON_PRESS;
break;
case UG_PC_MENU_STATE_TREASURE_RADAR_NOT_AVAILABLE:
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_TreasureRadarEntranceClosed, FALSE, NULL);
menu->state = UG_PC_MENU_STATE_EXIT_RADAR_ON_BUTTON_PRESS;
break;
case UG_PC_MENU_STATE_START_SPHERE_RADAR:
UndergroundMenu_EraseCurrentMenu(menu);
CommManUnderground_SetSphereRadarActive();
SphereRadar_Start();
BrightnessController_StartTransition(1, -6, 0, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_SphereRadarBootedUp, FALSE, NULL);
menu->state = UG_PC_MENU_STATE_EXIT_RADAR_ON_BUTTON_PRESS;
break;
case UG_PC_MENU_STATE_SPHERE_RADAR_NOT_AVAILABLE:
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_SphereRadarEntranceClosed, FALSE, NULL);
menu->state = UG_PC_MENU_STATE_EXIT_RADAR_ON_BUTTON_PRESS;
break;
case UG_PC_MENU_STATE_START_TRAP_RADAR:
UndergroundMenu_EraseCurrentMenu(menu);
CommManUnderground_SetTrapRadarActive();
TrapRadar_Start();
BrightnessController_StartTransition(1, -6, 0, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_TrapRadarBootedUp, FALSE, NULL);
menu->state = UG_PC_MENU_STATE_EXIT_RADAR_ON_BUTTON_PRESS;
break;
case UG_PC_MENU_STATE_TRAP_RADAR_NOT_AVAILABLE:
UndergroundTextPrinter_PrintText(CommManUnderground_GetMiscTextPrinter(), UndergroundPC_Text_TrapRadarEntranceClosed, FALSE, NULL);
menu->state = UG_PC_MENU_STATE_EXIT_RADAR_ON_BUTTON_PRESS;
break;
case UG_PC_MENU_STATE_EXIT_RADAR_ON_BUTTON_PRESS:
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetMiscTextPrinter())) {
if (JOY_NEW(PAD_BUTTON_A | PAD_BUTTON_B)) {
if (!CommServerClient_IsInClosedSecretBase()) {
BrightnessController_StartTransition(1, 0, -6, GX_BLEND_PLANEMASK_BG0, BRIGHTNESS_MAIN_SCREEN);
}
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetMiscTextPrinter());
if (CommServerClient_IsInClosedSecretBase()) {
ov23_02242FA8();
} else {
ov23_02242FBC();
}
TrapRadar_Exit();
ov23_02241364();
SphereRadar_Exit();
menu->state = UG_PC_MENU_STATE_INIT_RADAR_MENU;
}
}
break;
case UG_PC_MENU_STATE_DECORATE:
if (menu->fieldSystem->task == NULL) {
decorateCtx = Heap_AllocAtEnd(HEAP_ID_FIELD2, sizeof(DecorateContext));
MI_CpuClear8(decorateCtx, sizeof(DecorateContext));
decorateCtx->state = 0;
decorateCtx->dummy = 0;
FieldSystem_CreateTask(menu->fieldSystem, UndergroundPC_DecorateTask, decorateCtx);
}
UndergroundPC_ExitPCMenu(sysTask, menu);
break;
case UG_PC_MENU_STATE_INIT_STORE_GOODS:
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_STORE_GOODS);
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_STORE_GOODS);
UndergroundMenu_OpenStoreGoodsMenu(menu);
UndergroundMenu_PrintMenuDescription(menu, UndergroundPC_Text_GoodsOnHand);
menu->state = UG_PC_MENU_STATE_STORE_GOODS;
break;
case UG_PC_MENU_STATE_STORE_GOODS:
UndergroundPC_HandleStoreGoodsMenu(sysTask, menu);
break;
case UG_PC_MENU_STATE_STORE_GOODS_WAIT_FOR_MESSAGE:
if (UndergroundPC_IsMessageClosed(menu)) {
menu->state = UG_PC_MENU_STATE_INIT_STORE_GOODS;
}
break;
case UG_PC_MENU_STATE_INIT_WITHDRAW_GOODS:
menu->listMenuCursorPos = CommManUnderground_GetStoredCursorPos(UNDERGROUND_MENU_KEY_WITHDRAW_GOODS);
menu->listMenuListPos = CommManUnderground_GetStoredListPos(UNDERGROUND_MENU_KEY_WITHDRAW_GOODS);
UndergroundMenu_OpenWithdrawGoodsMenu(menu);
UndergroundMenu_PrintMenuDescription(menu, UndergroundPC_Text_GoodsInPC);
menu->state = UG_PC_MENU_STATE_WITHDRAW_GOODS;
break;
case UG_PC_MENU_STATE_WITHDRAW_GOODS:
UndergroundPC_HandleWithdrawGoodsMenu(sysTask, menu);
break;
case UG_PC_MENU_STATE_WITHDRAW_GOODS_WAIT_FOR_MESSAGE:
if (UndergroundPC_IsMessageClosed(menu)) {
menu->state = UG_PC_MENU_STATE_INIT_WITHDRAW_GOODS;
}
break;
case UG_PC_MENU_STATE_WAIT_FOR_MESSAGE:
if (UndergroundPC_IsMessageClosed(menu)) {
menu->state = UG_PC_MENU_STATE_INIT;
}
break;
}
}
static void UndergroundPC_OpenPCMenu(FieldSystem *fieldSystem)
{
const int unused = 6;
CommManUnderground_SetStoredPosKey(UNDERGROUND_STORED_POS_KEY_PC);
UndergroundMenu *menu = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu));
MI_CpuFill8(menu, 0, sizeof(UndergroundMenu));
menu->fieldSystem = fieldSystem;
UndergroundTextPrinter_ChangeMessageLoaderBank(CommManUnderground_GetMiscTextPrinter(), TEXT_BANK_UNDERGROUND_PC, MSG_LOADER_LOAD_ON_DEMAND);
menu->state = UG_PC_MENU_STATE_INIT;
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);
menu->scrollPrompts = ScrollPrompts_New(HEAP_ID_FIELD1);
ScrollPrompts_SetPosition(menu->scrollPrompts, 200, 20, 122);
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_TOP_ARROW, FALSE);
ScrollPrompts_SetDrawFlag(menu->scrollPrompts, SCROLL_PROMPT_BOTTOM_ARROW, FALSE);
menu->sysTask = SysTask_Start(UndergroundPC_Main, menu, 10000);
CommManUnderground_SetCurrentSysTask(menu, menu->sysTask, UndergroundMenu_ResetBrightnessAndExit);
}
static void UndergroundPC_TakeFlagPromptTask(SysTask *sysTask, void *data)
{
TakeFlagPromptContext *ctx = data;
switch (ctx->state) {
case TAKE_FLAG_PROMPT_STATE_INIT:
if (!UndergroundTextPrinter_IsPrinterActive(CommManUnderground_GetCommonTextPrinter())) {
ctx->menu = Menu_MakeYesNoChoice(ctx->fieldSystem->bgConfig, &sWindowTemplate, BASE_TILE_STANDARD_WINDOW_FRAME, 11, HEAP_ID_FIELD1);
ctx->state = TAKE_FLAG_PROMPT_STATE_MAIN;
}
break;
case TAKE_FLAG_PROMPT_STATE_MAIN:
int input = Menu_ProcessInputAndHandleExit(ctx->menu, HEAP_ID_FIELD1);
if (input == MENU_NOTHING_CHOSEN) {
return;
} else if (input == 0) {
CommSys_SendDataFixedSize(89, &ctx->pcInteraction);
} else {
CommPlayerMan_ResumeFieldSystemWithContextBit(PAUSE_BIT_LINK_PC);
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetCommonTextPrinter());
}
ctx->state = TAKE_FLAG_PROMPT_STATE_EXIT;
ctx->menu = NULL;
break;
case TAKE_FLAG_PROMPT_STATE_EXIT:
Heap_Free(ctx);
CommManUnderground_ClearCurrentSysTaskInfo();
SysTask_Done(sysTask);
break;
}
}
static void UndergroundPC_EndFlagPromptTask(SysTask *sysTask, void *data)
{
TakeFlagPromptContext *ctx = data;
if (ctx->menu) {
Menu_DestroyForExit(ctx->menu, HEAP_ID_FIELD1);
}
Heap_Free(ctx);
SysTask_Done(sysTask);
}
static void UndergroundPC_StartTakeFlagPromptTask(FieldSystem *fieldSystem, PCInteraction *pcInteraction)
{
TakeFlagPromptContext *ctx = Heap_Alloc(HEAP_ID_FIELD1, sizeof(UndergroundMenu));
MI_CpuFill8(ctx, 0, sizeof(TakeFlagPromptContext));
ctx->state = TAKE_FLAG_PROMPT_STATE_INIT;
ctx->fieldSystem = fieldSystem;
ctx->sysTask = SysTask_Start(UndergroundPC_TakeFlagPromptTask, ctx, 10000);
UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCommonTextPrinter(), CommInfo_TrainerInfo(pcInteraction->pcNetID));
UndergroundTextPrinter_PrintText(CommManUnderground_GetCommonTextPrinter(), UndergroundCommon_Text_TakeFlagPrompt, FALSE, NULL);
ctx->pcInteraction.playerNetID = pcInteraction->playerNetID;
ctx->pcInteraction.pcNetID = pcInteraction->pcNetID;
ctx->pcInteraction.canTakeFlag = pcInteraction->canTakeFlag;
CommManUnderground_SetCurrentSysTask(ctx, ctx->sysTask, UndergroundPC_EndFlagPromptTask);
}
void UndergroundPC_ProcessTakeFlagAttempt(int unused0, int unused1, void *data, void *unused3)
{
PCInteraction *pcInteraction = data;
if (ov23_TryTakeFlag(pcInteraction->playerNetID, pcInteraction->pcNetID)) {
sub_02035B48(90, pcInteraction);
}
}
void UndergroundPC_ProcessTakenFlag(int unused0, int unused1, void *data, void *unused3)
{
PCInteraction *pcInteraction = data;
if (CommSys_CurNetId() == pcInteraction->playerNetID) {
UndergroundTextPrinter_SetPlayerNameIndex0(CommManUnderground_GetCaptureFlagTextPrinter(), CommInfo_TrainerInfo(pcInteraction->pcNetID));
UndergroundTextPrinter_PrintText(CommManUnderground_GetCaptureFlagTextPrinter(), UndergroundCaptureFlag_Text_YouObtainedFlag, TRUE, UndergroundPC_ResumeFieldSystem);
Sound_PlayBGM(SEQ_HATANIGE);
}
ov23_TryTakeFlag(pcInteraction->playerNetID, pcInteraction->pcNetID);
ov23_0224D500(pcInteraction->playerNetID, pcInteraction->pcNetID);
}
static void UndergroundPC_UpdateCursorPos(UndergroundMenu *menu)
{
u16 prevPos = menu->unk_2AE;
ListMenu_CalcTrueCursorPos(menu->unk_48, &menu->unk_2AE);
if (prevPos != menu->unk_2AE) {
Sound_PlayEffect(SEQ_SE_CONFIRM);
}
}

View File

@ -360,8 +360,8 @@ static void UndergroundTalk_Exit(SysTask *sysTask, TalkMenu *menu)
}
if (menu->giftMenu) {
UndergroundMenu_ExitGiftMenu(menu->giftMenu, LIST_CANCEL);
ov23_02243204();
UndergroundMenu_Exit(menu->giftMenu, LIST_CANCEL);
CommManUnderground_ClearCurrentSysTaskInfo();
}
UndergroundTalk_CloseTalkMenu(sysTask, menu);
@ -908,8 +908,8 @@ static void UndergroundTalk_Main(SysTask *sysTask, void *data)
}
if (menu->giftMenu) {
UndergroundMenu_ExitGiftMenu(menu->giftMenu, LIST_CANCEL);
ov23_02243204();
UndergroundMenu_Exit(menu->giftMenu, LIST_CANCEL);
CommManUnderground_ClearCurrentSysTaskInfo();
UndergroundTextPrinter_EraseMessageBoxWindow(CommManUnderground_GetItemNameTextPrinter());
menu->giftMenu = NULL;
}
@ -1456,12 +1456,10 @@ void UndergroundTalk_ExitConversation(void)
static void UndergroundTalk_UpdateCursorPos(TalkMenu *menu)
{
u16 pos = menu->cursorPos;
u16 prevPos = menu->cursorPos;
ListMenu_CalcTrueCursorPos(menu->listMenu, &menu->cursorPos);
if (pos != menu->cursorPos) {
if (prevPos != menu->cursorPos) {
Sound_PlayEffect(SEQ_SE_CONFIRM);
}
return;
}

View File

@ -270,11 +270,11 @@ int Player_MoveState(const PlayerAvatar *playerAvatar)
return playerAvatar->unk_18;
}
void PlayerAvatar_SetHidden(PlayerAvatar *playerAvatar, int param1)
void PlayerAvatar_SetVisible(PlayerAvatar *playerAvatar, BOOL visible)
{
MapObject *mapObj = Player_MapObject(playerAvatar);
if (param1 == 1) {
if (visible == TRUE) {
MapObject_SetStatusFlagOff(mapObj, MAP_OBJ_STATUS_HIDE);
} else {
MapObject_SetStatusFlagOn(mapObj, MAP_OBJ_STATUS_HIDE);

View File

@ -1274,15 +1274,15 @@ void UndergroundRecord_IncrementGiftsReceived(UndergroundRecord *undergroundReco
}
}
int sub_020297AC(const UndergroundRecord *param0)
int UndergroundRecord_GetTimesFlagTaken(const UndergroundRecord *undergroundRecord)
{
return param0->unk_2C_0;
return undergroundRecord->timesFlagTaken;
}
void sub_020297B4(UndergroundRecord *param0)
void UndergroundRecord_IncrementTimesFlagTaken(UndergroundRecord *undergroundRecord)
{
if (param0->unk_2C_0 < 999999) {
param0->unk_2C_0++;
if (undergroundRecord->timesFlagTaken < 999999) {
undergroundRecord->timesFlagTaken++;
}
}

View File

@ -779,7 +779,7 @@ static int sub_02033DDC(void)
return v0;
}
BOOL sub_02033DFC(void)
BOOL CommServerClient_IsInClosedSecretBase(void)
{
if (sCommServerClient && (sCommServerClient->unk_1516 == 3)) {
return 1;

View File

@ -2478,7 +2478,7 @@ void sub_02038A20(int param0)
BOOL sub_02038AB8(void)
{
if (sub_02033DFC() || !CommMan_IsInitialized()) {
if (CommServerClient_IsInClosedSecretBase() || !CommMan_IsInitialized()) {
return 1;
}

View File

@ -127,7 +127,7 @@ void sub_0205CA94(SysTask *param0, void *param1)
switch (v0->unk_1E4) {
case 0:
MapObject_SetPauseMovementOff(Player_MapObject(v0->fieldSystem->playerAvatar));
PlayerAvatar_SetHidden(v0->fieldSystem->playerAvatar, 0);
PlayerAvatar_SetVisible(v0->fieldSystem->playerAvatar, 0);
v0->unk_1E4++;
break;
case 1:
@ -189,7 +189,7 @@ void sub_0205CBFC(SysTask *param0, void *param1)
switch (v0->unk_1E4) {
case 0:
PlayerAvatar_SetHidden(v0->fieldSystem->playerAvatar, 0);
PlayerAvatar_SetVisible(v0->fieldSystem->playerAvatar, 0);
v0->unk_1E4++;
break;
case 1:
@ -216,7 +216,7 @@ void sub_0205CBFC(SysTask *param0, void *param1)
if (v0->unk_1E8 > 0) {
v0->unk_1E4++;
PlayerAvatar_SetHidden(v0->fieldSystem->playerAvatar, 1);
PlayerAvatar_SetVisible(v0->fieldSystem->playerAvatar, 1);
}
break;
case 4:
@ -242,7 +242,7 @@ void sub_0205CD3C(SysTask *param0, void *param1)
switch (v0->unk_1E4) {
case 0:
PlayerAvatar_SetHidden(v0->fieldSystem->playerAvatar, 0);
PlayerAvatar_SetVisible(v0->fieldSystem->playerAvatar, 0);
v0->unk_1E4++;
break;
case 1:
@ -303,7 +303,7 @@ void sub_0205CE7C(SysTask *param0, void *param1)
switch (v0->unk_1E4) {
case 0:
PlayerAvatar_SetHidden(v0->fieldSystem->playerAvatar, 0);
PlayerAvatar_SetVisible(v0->fieldSystem->playerAvatar, 0);
sub_0205D274(v0, &v0->unk_1C0[0], 4);
sub_0205D274(v0, &v0->unk_1C0[1], 5);
v0->unk_1E0 = 2;
@ -323,7 +323,7 @@ void sub_0205CE7C(SysTask *param0, void *param1)
v1[0] = v0->unk_1C0[0].unk_0C(&v0->unk_1C0[0]);
if (v1[0] == 0) {
PlayerAvatar_SetHidden(v0->fieldSystem->playerAvatar, 1);
PlayerAvatar_SetVisible(v0->fieldSystem->playerAvatar, 1);
v0->unk_1E8 = 6;
v0->unk_1E4++;
}

View File

@ -9,8 +9,8 @@
#include "overlay023/ov23_02241F74.h"
#include "overlay023/ov23_0224A1D0.h"
#include "overlay023/ov23_0224B05C.h"
#include "overlay023/ov23_0225128C.h"
#include "overlay023/ov23_02253598.h"
#include "overlay023/underground_pc.h"
#include "overlay023/underground_player_talk.h"
#include "overlay023/underground_spheres.h"
#include "overlay023/underground_traps.h"
@ -49,7 +49,7 @@ static const CommCmdTable Unk_020F68A4[] = {
{ CommPlayer_RecvLocation, CommPacketSizeOf_RecvLocation, NULL },
{ CommPlayer_RecvLocationAndInit, CommPacketSizeOf_RecvLocationAndInit, NULL },
{ ov23_022431C4, CommPacketSizeOf_NetId, NULL },
{ ov23_0224ACE8, sub_0203294C, NULL },
{ ov23_0224ACE8, sub_0203294C, NULL }, // 25
{ ov23_0224ACF8, CommPacketSizeOf_NetId, NULL },
{ ov23_0224A348, sub_0203294C, NULL },
{ ov23_022428D8, ov23_022428D4, NULL },
@ -74,7 +74,7 @@ static const CommCmdTable Unk_020F68A4[] = {
{ UndergroundTraps_ReceiveTrapRadarResults, CommPacketSizeOf_TrapRadarResult, NULL },
{ ov23_022425F8, CommPacketSizeOf_Coordinates, NULL },
{ ov23_02242624, sub_02032944, NULL },
{ ov23_02242654, sub_02032944, NULL },
{ ov23_02242654, sub_02032944, NULL }, // 50
{ UndergroundTraps_ProcessDisengagedTrap, CommPacketSizeOf_TriggeredTrap, NULL },
{ CommPlayer_RecvDelete, CommPacketSizeOf_NetId, NULL },
{ ov23_0224C384, ov23_0224C41C, NULL },
@ -99,7 +99,7 @@ static const CommCmdTable Unk_020F68A4[] = {
{ ov23_0224142C, ov23_022414D0, NULL },
{ UndergroundTalk_RequestLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL },
{ UndergroundTalkResponse_RequestLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL },
{ UndergroundTalkResponse_HandleLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL },
{ UndergroundTalkResponse_HandleLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL }, // 75
{ UndergroundTalk_HandleLinkTalkStateUpdateServer, CommPacketSizeOf_TalkStateChangeRequest, NULL },
{ UndergroundTalk_SendGiftServer, CommPacketSizeOf_Gift, NULL },
{ UndergroundTalkResponse_ReceiveGiftOffer, CommPacketSizeOf_Gift, NULL },
@ -107,14 +107,14 @@ static const CommCmdTable Unk_020F68A4[] = {
{ UndergroundTalk_ReceiveTalkMessage, CommPacketSizeOf_TalkMessage, NULL },
{ ov23_SendRecordServer, sub_02032944, NULL },
{ ov23_ReceiveRecord, sub_02032944, NULL },
{ ov23_022513B0, ov23_02251414, NULL },
{ UndergroundPC_ProcessPCInteraction, CommPacketSizeOf_PCInteraction, NULL }, // 83
{ ov23_0224A570, CommPacketSizeOf_NetId, NULL },
{ ov23_0224A77C, ov23_0224A56C, NULL },
{ ov23_0224CD80, CommPacketSizeOf_NetId, NULL },
{ ov23_0224CF18, ov23_0224CD7C, NULL },
{ sub_02059EAC, CommPacketSizeOf_TrainerCard, sub_02059EBC },
{ ov23_0225215C, ov23_02251414, NULL },
{ ov23_02252178, ov23_02251414, NULL },
{ UndergroundPC_ProcessTakeFlagAttempt, CommPacketSizeOf_PCInteraction, NULL },
{ UndergroundPC_ProcessTakenFlag, CommPacketSizeOf_PCInteraction, NULL },
{ ov23_0224AB30, ov23_0224AB2C, NULL },
{ ov23_0224ABC4, ov23_0224AC0C, ov23_0224AAA0 },
{ ov23_0224AC10, CommPacketSizeOf_NetId, NULL },