Skip to content

Commit

Permalink
document party_menu_items.c
Browse files Browse the repository at this point in the history
  • Loading branch information
PikalaxALT committed Jul 5, 2024
1 parent 6860b09 commit 372f7e4
Show file tree
Hide file tree
Showing 9 changed files with 235 additions and 222 deletions.
18 changes: 9 additions & 9 deletions include/party_menu.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ typedef enum PartyMenuState {
PARTY_MENU_STATE_HANDLE_CONTEXT_MENU_INPUT,
PARTY_MENU_STATE_3,
PARTY_MENU_STATE_4,
PARTY_MENU_STATE_5,
PARTY_MENU_STATE_ITEM_USE_CB,
PARTY_MENU_STATE_SELECT_MOVE,
PARTY_MENU_STATE_SACRED_ASH,
PARTY_MENU_STATE_8,
Expand Down Expand Up @@ -310,18 +310,18 @@ typedef struct PartyMenuArgs {
u8 partySlot;
u8 selectedAction;
u16 itemId;
u16 unk_2A;
u8 unk_2C;
u16 moveId;
u8 selectedMoveIdx;
u8 unk_2D;
u8 contestStat;
u8 contestLevel;
u8 selectedOrder[6];
u8 unk_36_0:4;
u8 maxMonsToSelect:4;
u8 unk_37;
int unk_38;
int levelUpMoveSearchState;
u16 species;
int unk_40;
int evoMethod;
} PartyMenuArgs;

typedef struct IconFormChangeData {
Expand Down Expand Up @@ -414,7 +414,7 @@ struct PartyMenuStruct {
PartyMenuMonsDrawState monsDrawState[PARTY_SIZE]; //0x828
const UnkStruct_02020654 *unk_948;
UnkPartyMenuSub_94C unk_94C;
int (*unk_C54)(PartyMenuStruct *);
int (*itemUseCallback)(PartyMenuStruct *);
int (*yesCallback)(PartyMenuStruct *); //0xc58
int (*noCallback)(PartyMenuStruct *); //0xc5c
u8 unk_C60;
Expand All @@ -426,8 +426,8 @@ struct PartyMenuStruct {
u8 textPrinterId;
u8 partyMonIndex; // 0xc65
u8 unk_C66;
u8 unk_C67;
u16 unk_C68[6];
u8 levelUpLearnMovesLoopState;
u16 levelUpStatsTmp[6];
Pokedex *pokedex; // 0xc74
int topScreenPanelYPos;
BOOL topScreenPanelShow;
Expand Down Expand Up @@ -474,7 +474,7 @@ u32 sub_0207CAA4(void);
u32 sub_0207CAA8(void);
void sub_0207CAAC(HeapID heapId, u16 *a1, u16 *a2, u16 *a3);
void PartyMenu_FormChangeScene_End(PartyMenuStruct *partyMenu);
void sub_0207CB20(PartyMenuStruct *partyMenu);
void PartyMenu_DeleteContextMenuAndList(PartyMenuStruct *partyMenu);
void sub_0207CB3C(PartyMenuStruct *partyMenu, BOOL a1);
void PartyMenu_FormChangeScene_Begin(PartyMenuStruct *partyMenu);

Expand Down
10 changes: 5 additions & 5 deletions include/party_menu_items.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
#define LEARN_MOVE_CHECK_FULL 0xFE
#define LEARN_MOVE_CHECK_INCOMPAT 0xFF

void sub_020812E8(PartyMenuStruct *partyMenu);
void PartyMenu_SetItemUseFuncFromBagSelection(PartyMenuStruct *partyMenu);
int sub_02081378(PartyMenuStruct *partyMenu);
BOOL sub_020817C4(u16 itemId);
int PartyMenu_Subtask_SacredAsh(PartyMenuStruct *partyMenu);
int sub_02081ED0(PartyMenuStruct *partyMenu);
u8 sub_020820DC(PartyMenuStruct *partyMenu, Pokemon *mon);
int PartyMenu_ItemUseFunc_LevelUpDoLearnMove(PartyMenuStruct *partyMenu);
u8 PartyMenu_CheckCanLearnTMHMMove(PartyMenuStruct *partyMenu, Pokemon *mon);
int sub_02082134(PartyMenuStruct *partyMenu);
int sub_020822CC(PartyMenuStruct *partyMenu);
int sub_02082370(PartyMenuStruct *partyMenu);
int PartyMenu_Subtask_SelectMove(PartyMenuStruct *partyMenu);
void sub_02082654(PartyMenuStruct *partyMenu, BOOL a1);
void sub_02082868(PartyMenuStruct *partyMenu);
void PartyMenu_SelectMoveForPpRestoreOrPpUp(PartyMenuStruct *partyMenu, BOOL isPpRestore);
void PartyMenu_HandleAttachMailFromMailbox(PartyMenuStruct *partyMenu);

#endif //GUARD_POKEHEARTGOLD_PARTY_MENU_MOVES_H
12 changes: 12 additions & 0 deletions replace.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,18 @@ if [ "$1" = "" -o "$2" = "" ]; then
exit 1
fi

git grep -w "$1" src asm include >/dev/null
if [ "$?" -ne 0 ]; then
echo "error: query symbol not found"
exit 1
fi

git grep -w "$2" src asm include >/dev/null
if [ "$?" -eq 0 ]; then
echo "error: replacement symbol already exists"
exit 1
fi

set -e

if [ "$(uname -s)" == "Darwin" ]; then
Expand Down
2 changes: 1 addition & 1 deletion src/field_use_item.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ static void ItemMenuUseFunc_TMHM(struct ItemMenuUseData *data, const struct Item
usedat->fieldSystem = fieldSystem;
usedat->itemId = data->itemId;
usedat->partySlot = data->unk6;
usedat->unk_2A = TMHMGetMove(data->itemId);
usedat->moveId = TMHMGetMove(data->itemId);
usedat->unk_20 = &fieldSystem->unk_10C;
FieldSystem_LaunchApplication(fieldSystem, &gOverlayTemplate_PartyMenu, usedat);
env->atexit_TaskEnv = usedat;
Expand Down
8 changes: 4 additions & 4 deletions src/party_context_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -652,7 +652,7 @@ void PartyMenu_DrawPartyMonsList_UseTMHM(PartyMenuStruct *partyMenu, u8 partySlo
PartyMenu_PrintTMHMCompatString(partyMenu, partySlot, 1);
} else {
PartyMenu_PrintMonLevelOnWindow(partyMenu, partySlot);
u8 x = sub_020820DC(partyMenu, Party_GetMonByIndex(partyMenu->args->party, partySlot));
u8 x = PartyMenu_CheckCanLearnTMHMMove(partyMenu, Party_GetMonByIndex(partyMenu->args->party, partySlot));
if (x == LEARN_MOVE_CHECK_INCOMPAT) {
PartyMenu_PrintTMHMCompatString(partyMenu, partySlot, 1);
} else if (x == LEARN_MOVE_CHECK_KNOWN) {
Expand Down Expand Up @@ -908,12 +908,12 @@ void PartyMenu_LevelUpPrintStatsChange(PartyMenuStruct *partyMenu) {
AddTextPrinterParameterized(&partyMenu->levelUpStatsWindow[0], 0, str_plusSign, 80, i * 16, TEXT_SPEED_NOTRANSFER, NULL);

str_formatInt = NewString_ReadMsgData(partyMenu->msgData, msg_0300_00176);
BufferIntegerAsString(partyMenu->msgFormat, 0, stats[i] - partyMenu->unk_C68[i], 2, PRINTING_MODE_LEFT_ALIGN, TRUE);
BufferIntegerAsString(partyMenu->msgFormat, 0, stats[i] - partyMenu->levelUpStatsTmp[i], 2, PRINTING_MODE_LEFT_ALIGN, TRUE);
StringExpandPlaceholders(partyMenu->msgFormat, partyMenu->formattedStrBuf, str_formatInt);
String_Delete(str_formatInt);
AddTextPrinterParameterized(&partyMenu->levelUpStatsWindow[0], 0, partyMenu->formattedStrBuf, 94, i * 16, TEXT_SPEED_NOTRANSFER, NULL);

partyMenu->unk_C68[i] = stats[i];
partyMenu->levelUpStatsTmp[i] = stats[i];
}
String_Delete(str_plusSign);
ScheduleWindowCopyToVram(&partyMenu->levelUpStatsWindow[0]);
Expand All @@ -926,7 +926,7 @@ void sub_0207DF98(PartyMenuStruct *partyMenu) {
FillWindowPixelRect(&partyMenu->levelUpStatsWindow[0], 15, 80, 0, 32, 112);
spC = NewString_ReadMsgData(partyMenu->msgData, msg_0300_00176);
for (i = 0; i < NUM_STATS; ++i) {
BufferIntegerAsString(partyMenu->msgFormat, 0, partyMenu->unk_C68[i], 3, PRINTING_MODE_LEFT_ALIGN, TRUE);
BufferIntegerAsString(partyMenu->msgFormat, 0, partyMenu->levelUpStatsTmp[i], 3, PRINTING_MODE_LEFT_ALIGN, TRUE);
StringExpandPlaceholders(partyMenu->msgFormat, partyMenu->formattedStrBuf, spC);
AddTextPrinterParameterized(&partyMenu->levelUpStatsWindow[0], 0, partyMenu->formattedStrBuf, 104 - FontID_String_GetWidth(0, partyMenu->formattedStrBuf, 0), i * 16, TEXT_SPEED_NOTRANSFER, NULL);
}
Expand Down
57 changes: 29 additions & 28 deletions src/party_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -302,8 +302,8 @@ static BOOL PartyMenuApp_Main(OVY_MANAGER *manager, int *pState) {
case PARTY_MENU_STATE_4:
*pState = sub_020793C0(partyMenu);
break;
case PARTY_MENU_STATE_5:
*pState = partyMenu->unk_C54(partyMenu);
case PARTY_MENU_STATE_ITEM_USE_CB:
*pState = partyMenu->itemUseCallback(partyMenu);
break;
case PARTY_MENU_STATE_SELECT_MOVE:
*pState = PartyMenu_Subtask_SelectMove(partyMenu);
Expand Down Expand Up @@ -441,7 +441,8 @@ static int PartyMenu_Subtask_Init(PartyMenuStruct *partyMenu) {
if (IsPaletteFadeFinished() == TRUE) {
if (partyMenu->args->context == PARTY_MENU_CONTEXT_USE_ITEM || partyMenu->args->context == PARTY_MENU_CONTEXT_EVO_STONE) {
if (sub_020817C4(partyMenu->args->itemId) == TRUE) {
partyMenu->afterTextPrinterState = PARTY_MENU_STATE_INIT;
// this field is overloaded
partyMenu->afterTextPrinterState = 0;
return PARTY_MENU_STATE_SACRED_ASH;
} else {
return PARTY_MENU_STATE_4;
Expand All @@ -451,7 +452,7 @@ static int PartyMenu_Subtask_Init(PartyMenuStruct *partyMenu) {
} else if (partyMenu->args->context == PARTY_MENU_CONTEXT_7) {
return sub_020822CC(partyMenu);
} else if (partyMenu->args->context == PARTY_MENU_CONTEXT_8) {
return sub_02081ED0(partyMenu);
return PartyMenu_ItemUseFunc_LevelUpDoLearnMove(partyMenu);
} else if (partyMenu->args->context == PARTY_MENU_CONTEXT_11 || partyMenu->args->context == PARTY_MENU_CONTEXT_12) {
return PARTY_MENU_STATE_14;
} else if (partyMenu->args->context == PARTY_MENU_CONTEXT_9) {
Expand All @@ -475,7 +476,7 @@ static int PartyMenu_Subtask_MainNormal(PartyMenuStruct *partyMenu) {
partyMenu->args->selectedAction = PARTY_MENU_ACTION_RETURN_0;
return PARTY_MENU_STATE_BEGIN_EXIT;
case PARTY_MENU_CONTEXT_14:
sub_02082868(partyMenu);
PartyMenu_HandleAttachMailFromMailbox(partyMenu);
return PARTY_MENU_STATE_WAIT_TEXT_PRINTER;
case PARTY_MENU_CONTEXT_19:
return sub_0207CA30(partyMenu);
Expand Down Expand Up @@ -534,7 +535,7 @@ static int PartyMenu_Subtask_HandleSubcontextMenuInput(PartyMenuStruct *partyMen
sub_0200E5D4(&partyMenu->windows[PARTY_MENU_WINDOW_ID_35], TRUE);
ClearWindowTilemapAndScheduleTransfer(&partyMenu->windows[PARTY_MENU_WINDOW_ID_35]);
PartyMenu_SetTopScreenSelectionPanelVisibility(partyMenu, FALSE);
sub_0207CB20(partyMenu);
PartyMenu_DeleteContextMenuAndList(partyMenu);
PartyMenu_DisableMainScreenBlend_AfterYesNo();
PartyMenu_PrintMessageOnWindow32(partyMenu, msg_0300_00029, TRUE);
thunk_Sprite_SetPalIndex(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], 0);
Expand Down Expand Up @@ -2146,7 +2147,7 @@ static BOOL PartyMenu_Subtask_HandleContextMenuInput(PartyMenuStruct *partyMenu,
case LIST_CANCEL:
PartyMenu_SetTopScreenSelectionPanelVisibility(partyMenu, FALSE);
ClearFrameAndWindow2(&partyMenu->windows[PARTY_MENU_WINDOW_ID_33], TRUE);
sub_0207CB20(partyMenu);
PartyMenu_DeleteContextMenuAndList(partyMenu);
PartyMenu_DisableMainScreenBlend_AfterYesNo();
if (partyMenu->args->context == PARTY_MENU_CONTEXT_2 || partyMenu->args->context == PARTY_MENU_CONTEXT_17 || partyMenu->args->context == PARTY_MENU_CONTEXT_22 || partyMenu->args->context == PARTY_MENU_CONTEXT_23) {
PartyMenu_PrintMessageOnWindow32(partyMenu, msg_0300_00035, TRUE);
Expand Down Expand Up @@ -2181,15 +2182,15 @@ static int PartyMenu_SoftboiledTryTargetCheck(PartyMenuStruct *partyMenu) {
case 0:
PlaySE(SEQ_SE_DP_KAIFUKU);
thunk_Sprite_SetPalIndex(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], 1);
if (partyMenu->monsDrawState[partyMenu->partyMonIndex].maxHp - partyMenu->monsDrawState[partyMenu->partyMonIndex].hp < partyMenu->unk_C68[0]) {
partyMenu->unk_C68[0] = partyMenu->monsDrawState[partyMenu->partyMonIndex].maxHp - partyMenu->monsDrawState[partyMenu->partyMonIndex].hp;
if (partyMenu->monsDrawState[partyMenu->partyMonIndex].maxHp - partyMenu->monsDrawState[partyMenu->partyMonIndex].hp < partyMenu->levelUpStatsTmp[0]) {
partyMenu->levelUpStatsTmp[0] = partyMenu->monsDrawState[partyMenu->partyMonIndex].maxHp - partyMenu->monsDrawState[partyMenu->partyMonIndex].hp;
}
partyMenu->unk_C68[1] = 2;
partyMenu->unk_C68[2] = 0;
partyMenu->levelUpStatsTmp[1] = 2;
partyMenu->levelUpStatsTmp[2] = 0;
return PARTY_MENU_STATE_SOFTBOILED;
case 1:
PlaySE(SEQ_SE_DP_SELECT);
partyMenu->unk_C68[1] = 1;
partyMenu->levelUpStatsTmp[1] = 1;
return PARTY_MENU_STATE_WAIT_TEXT_PRINTER;
case 2:
PlaySE(SEQ_SE_DP_CUSTOM06);
Expand All @@ -2213,7 +2214,7 @@ static int PartyMenu_Subtask_Softboiled(PartyMenuStruct *partyMenu) {
}
}

switch (partyMenu->unk_C68[1]) {
switch (partyMenu->levelUpStatsTmp[1]) {
case 0: {
u32 selection = PartyMenu_GetTouchButtonInput(partyMenu);
if (selection != -1) {
Expand Down Expand Up @@ -2259,25 +2260,25 @@ static int PartyMenu_Subtask_Softboiled(PartyMenuStruct *partyMenu) {
ClearFrameAndWindow2(&partyMenu->windows[PARTY_MENU_WINDOW_ID_34], TRUE);
thunk_Sprite_SetPalIndex(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], 0);
PartyMenu_PrintMessageOnWindow32(partyMenu, msg_0300_00037, TRUE);
partyMenu->unk_C68[1] = 0;
partyMenu->levelUpStatsTmp[1] = 0;
break;
case 2:
if (PartyMenu_SoftboiledHPTransferStep(partyMenu, partyMenu->softboiledDonorSlot, -1) == TRUE) {
PlaySE(SEQ_SE_DP_KAIFUKU);
partyMenu->unk_C68[1] = 3;
partyMenu->unk_C68[2] = 0;
partyMenu->levelUpStatsTmp[1] = 3;
partyMenu->levelUpStatsTmp[2] = 0;
}
break;
case 3:
if (PartyMenu_SoftboiledHPTransferStep(partyMenu, partyMenu->partyMonIndex, 1) == TRUE) {
Pokemon *pokemon = Party_GetMonByIndex(partyMenu->args->party, partyMenu->partyMonIndex);
String *string = NewString_ReadMsgData(partyMenu->msgData, msg_0300_00065);
BufferBoxMonNickname(partyMenu->msgFormat, 0, Mon_GetBoxMon(pokemon));
BufferIntegerAsString(partyMenu->msgFormat, 1, partyMenu->unk_C68[2], 3, PRINTING_MODE_LEFT_ALIGN, TRUE);
BufferIntegerAsString(partyMenu->msgFormat, 1, partyMenu->levelUpStatsTmp[2], 3, PRINTING_MODE_LEFT_ALIGN, TRUE);
StringExpandPlaceholders(partyMenu->msgFormat, partyMenu->formattedStrBuf, string);
String_Delete(string);
PartyMenu_PrintMessageOnWindow34(partyMenu, -1, TRUE);
partyMenu->unk_C68[1] = 4;
partyMenu->levelUpStatsTmp[1] = 4;
partyMenu->afterTextPrinterState = PARTY_MENU_STATE_SOFTBOILED;
return PARTY_MENU_STATE_WAIT_TEXT_PRINTER;
}
Expand All @@ -2299,7 +2300,7 @@ static u8 PartyMenu_SoftboiledTargetCheck(PartyMenuStruct *partyMenu) {
if (partyMenu->partyMonIndex == partyMenu->softboiledDonorSlot || partyMenu->monsDrawState[partyMenu->partyMonIndex].hp == 0 || partyMenu->monsDrawState[partyMenu->partyMonIndex].hp == partyMenu->monsDrawState[partyMenu->partyMonIndex].maxHp) {
thunk_Sprite_SetPalIndex(partyMenu->sprites[PARTY_MENU_SPRITE_ID_CURSOR], 1);
PartyMenu_PrintMessageOnWindow34(partyMenu, msg_0300_00120, TRUE);
partyMenu->unk_C68[1] = 1;
partyMenu->levelUpStatsTmp[1] = 1;
partyMenu->afterTextPrinterState = PARTY_MENU_STATE_SOFTBOILED;
return 1;
}
Expand All @@ -2308,12 +2309,12 @@ static u8 PartyMenu_SoftboiledTargetCheck(PartyMenuStruct *partyMenu) {

static BOOL PartyMenu_SoftboiledHPTransferStep(PartyMenuStruct *partyMenu, u8 partySlot, s8 delta) {
partyMenu->monsDrawState[partySlot].hp += delta;
++partyMenu->unk_C68[2];
++partyMenu->levelUpStatsTmp[2];
PartyMenu_ClearMonHpTextWindow(partyMenu, partySlot);
FillWindowPixelBuffer(&partyMenu->windows[partySlot * 5 + 3], 0);
PartyMenu_PrintMonCurHpOnWindow(partyMenu, partySlot);
PartyMenu_DrawMonHpBarOnWindow(partyMenu, partySlot);
if (partyMenu->unk_C68[0] == partyMenu->unk_C68[2] || partyMenu->monsDrawState[partySlot].hp == partyMenu->monsDrawState[partySlot].maxHp) {
if (partyMenu->levelUpStatsTmp[0] == partyMenu->levelUpStatsTmp[2] || partyMenu->monsDrawState[partySlot].hp == partyMenu->monsDrawState[partySlot].maxHp) {
Pokemon *mon = Party_GetMonByIndex(partyMenu->args->party, partySlot);
u32 hp = partyMenu->monsDrawState[partySlot].hp;
SetMonData(mon, MON_DATA_HP, &hp);
Expand Down Expand Up @@ -2409,33 +2410,33 @@ static int sub_0207C288(PartyMenuStruct *partyMenu) {

if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_UP) || GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_MAX)) {
FreeToHeap(itemData);
sub_02082654(partyMenu, 0);
PartyMenu_SelectMoveForPpRestoreOrPpUp(partyMenu, 0);
return PARTY_MENU_STATE_SELECT_MOVE;
}
if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_RESTORE) && !GetItemAttr_PreloadedItemData(itemData, ITEMATTR_PP_RESTORE_ALL)) {
FreeToHeap(itemData);
sub_02082654(partyMenu, 1);
PartyMenu_SelectMoveForPpRestoreOrPpUp(partyMenu, 1);
return PARTY_MENU_STATE_SELECT_MOVE;
}

if (CanUseItemOnMonInParty(partyMenu->args->party, partyMenu->args->itemId, partyMenu->partyMonIndex, 0, HEAP_ID_PARTY_MENU) == TRUE) {
Bag_TakeItem(partyMenu->args->bag, partyMenu->args->itemId, 1, HEAP_ID_PARTY_MENU);
if (GetItemAttr_PreloadedItemData(itemData, ITEMATTR_EVOLVE)) {
Pokemon *mon = Party_GetMonByIndex(partyMenu->args->party, partyMenu->partyMonIndex);
partyMenu->args->species = GetMonEvolution(NULL, mon, EVOCTX_ITEM_USE, partyMenu->args->itemId, &partyMenu->args->unk_40);
partyMenu->args->species = GetMonEvolution(NULL, mon, EVOCTX_ITEM_USE, partyMenu->args->itemId, &partyMenu->args->evoMethod);
partyMenu->args->selectedAction = PARTY_MENU_ACTION_RETURN_EVO_ITEM_USE;
FreeToHeap(itemData);
return PARTY_MENU_STATE_BEGIN_EXIT;
} else {
sub_020812E8(partyMenu);
PartyMenu_SetItemUseFuncFromBagSelection(partyMenu);
}
} else {
PartyMenu_PrintMessageOnWindow34(partyMenu, msg_0300_00102, TRUE);
partyMenu->partyMonIndex = PARTY_MON_SELECTION_CONFIRM;
partyMenu->unk_C54 = sub_02081378;
partyMenu->itemUseCallback = sub_02081378;
}
FreeToHeap(itemData);
return PARTY_MENU_STATE_5;
return PARTY_MENU_STATE_ITEM_USE_CB;
}

static u8 sub_0207C3D0(PartyMenuStruct *partyMenu) {
Expand Down Expand Up @@ -2701,7 +2702,7 @@ void sub_0207CAAC(HeapID heapId, u16 *a1, u16 *a2, u16 *a3) {
FreeToHeap(pNscrFile);
}

void sub_0207CB20(PartyMenuStruct *partyMenu) {
void PartyMenu_DeleteContextMenuAndList(PartyMenuStruct *partyMenu) {
PartyMenu_CloseContextMenu(partyMenu, partyMenu->contextMenuCursor);
ListMenuItems_Delete(partyMenu->listMenuItems);
}
Expand Down
Loading

0 comments on commit 372f7e4

Please sign in to comment.