Through GiveChosenBagItem

This commit is contained in:
PikalaxALT
2020-03-12 16:43:23 -04:00
parent 68c48a0cc3
commit 50e0630320
3 changed files with 834 additions and 1824 deletions
File diff suppressed because it is too large Load Diff
+17
View File
@@ -48,6 +48,22 @@ enum
PC_TEXT_CANT_STORE_MAIL,
};
enum
{
CURSOR_AREA_IN_BOX,
CURSOR_AREA_IN_PARTY,
CURSOR_AREA_BOX,
CURSOR_AREA_BUTTONS, // Party Pokemon and Close Box
};
enum
{
SCREEN_CHANGE_EXIT_BOX,
SCREEN_CHANGE_SUMMARY_SCREEN,
SCREEN_CHANGE_NAME_BOX,
SCREEN_CHANGE_ITEM_FROM_BAG,
};
#define TAG_PAL_WAVEFORM 0xDACA
#define TAG_PAL_DAC8 0xDAC8
#define TAG_PAL_DAC6 0xDAC6
@@ -293,5 +309,6 @@ void sub_808C940(u8 curBox);
void sub_808C950(void);
u8 HandleBoxChooseSelectionInput(void);
void sub_808C854(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal);
void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value);
#endif //GUARD_POKEMON_STORAGE_SYSTEM_INTERNAL_H
+770 -12
View File
@@ -2,13 +2,18 @@
#include "gflib.h"
#include "box_party_pokemon_dropdown.h"
#include "help_system.h"
#include "item.h"
#include "item_menu.h"
#include "mail_data.h"
#include "menu.h"
#include "naming_screen.h"
#include "new_menu_helpers.h"
#include "pc_screen_effect.h"
#include "pokemon_storage_system_internal.h"
#include "pokemon_summary_screen.h"
#include "task.h"
#include "text_window.h"
#include "constants/items.h"
#include "constants/help_system.h"
#include "constants/songs.h"
@@ -18,7 +23,7 @@ EWRAM_DATA u8 sCurrentBoxOption = 0;
EWRAM_DATA u8 gUnknown_20397B6 = 0;
EWRAM_DATA u8 sWhichToReshow = 0;
EWRAM_DATA u8 sLastUsedBox = 0;
EWRAM_DATA u16 gUnknown_20397BA = 0;
EWRAM_DATA u16 gUnknown_20397BA = ITEM_NONE;
void Cb_InitPSS(u8 taskId);
void Cb_ShowPSS(u8 taskId);
@@ -33,28 +38,46 @@ void Cb_ShiftMon(u8 taskId);
void Cb_WithdrawMon(u8 taskId);
void Cb_DepositMenu(u8 taskId);
void Cb_ReleaseMon(u8 taskId);
void Cb_HandleMovingMonFromParty(u8 taskId);
void Cb_GiveMovingItemToMon(u8 taskId);
void Cb_HandleBoxOptions(u8 taskId);
void Cb_OnBPressed(u8 taskId);
void Cb_OnCloseBoxPressed(u8 taskId);
void Cb_SwitchSelectedItem(u8 taskId);
void Cb_TakeItemForMoving(u8 taskId);
void Cb_ChangeScreen(u8 taskId);
void Cb_ShowMonSummary(u8 taskId);
void Cb_ShowMarkMenu(u8 taskId);
void Cb_TakeItemForMoving(u8 taskId);
void Cb_GiveMovingItemToMon(u8 taskId);
void Cb_ItemToBag(u8 taskId);
void Cb_GiveItemFromBag(u8 taskId);
void Cb_SwitchSelectedItem(u8 taskId);
void Cb_ShowItemInfo(u8 taskId);
void Cb_HandleMovingMonFromParty(u8 taskId);
void Cb_PrintCantStoreMail(u8 taskId);
void Cb_HandleBoxOptions(u8 taskId);
void Cb_HandleWallpapers(u8 taskId);
void Cb_JumpBox(u8 taskId);
void Cb_NameBox(u8 taskId);
void Cb_ShowMonSummary(u8 taskId);
void Cb_GiveItemFromBag(u8 taskId);
void Cb_OnCloseBoxPressed(u8 taskId);
void Cb_OnBPressed(u8 taskId);
void Cb_ChangeScreen(u8 taskId);
void GiveChosenBagItem(void);
void sub_80920FC(bool8 a0);
void sub_8094D14(u8 a0);
void Item_FromMonToMoving(u8 cursorArea, u8 cursorPos);
void Item_GiveMovingToMon(u8 cursorArea, u8 cursorPos);
void Item_TakeMons(u8 cursorArea, u8 cursorPos);
void Item_SwitchMonsWithMoving(u8 cursorArea, u8 cursorPos);
u8 GetBoxCursorPosition(void);
void PrintCursorMonInfo(void);
void InitMonPlaceChange(u8 a0);
bool8 DoMonPlaceChange(void);
void SetUpDoShowPartyMenu(void);
bool8 DoShowPartyMenu(void);
void GiveChosenBagItem(void);
bool8 InitPSSWindows(void);
void LoadPSSMenuGfx(void);
void LoadWaveformSpritePalette(void);
void SetScrollingBackground(void);
void SetMonMarkings(u8 markings);
void AddWallpaperSetsMenu(void);
void sub_8095024(void);
void AddWallpapersMenu(u8 wallpaperSet);
void SetWallpaperForCurrentBox(u8 wallpaper);
bool8 DoWallpaperGfxChange(void);
void sub_808EFC8(void);
void sub_808F078(void);
bool8 sub_808F258(void);
@@ -119,6 +142,16 @@ void RefreshCursorMonData(void);
void sub_8091114(void);
bool8 sub_8091150(void);
void sub_8093264(void);
void PrintItemDescription(void);
void sub_80966F4(void);
bool8 sub_8096728(void);
bool8 sub_80967C0(void);
void sub_8096088(void);
void sub_8093630(void);
void sub_80936B8(void);
void sub_808FF70(void);
u16 GetMovingItem(void);
void FreePSSData(void);
extern const u16 gUnknown_83CE6F8[];
@@ -1142,3 +1175,728 @@ void Cb_ReleaseMon(u8 taskId)
break;
}
}
void Cb_ShowMarkMenu(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
PrintStorageActionText(PC_TEXT_MARK_POKE);
sPSSData->field_DA4.markings = sPSSData->cursorMonMarkings;
DrawMonMarkingsMenu(sPSSData->cursorMonMarkings, 0xb0, 0x10);
sPSSData->state++;
break;
case 1:
if (!MonMarkingsHandleInput())
{
TeardownMonMarkingsMenu();
ClearBottomWindow();
SetMonMarkings(sPSSData->field_DA4.markings);
RefreshCursorMonData();
SetPSSCallback(Cb_MainPSS);
}
break;
}
}
void Cb_TakeItemForMoving(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
if (!ItemIsMail(sPSSData->cursorMonItem))
{
ClearBottomWindow();
sPSSData->state++;
}
else
{
SetPSSCallback(Cb_PrintCantStoreMail);
}
break;
case 1:
sub_8094D14(2);
Item_FromMonToMoving((sInPartyMenu != FALSE) ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
sPSSData->state++;
break;
case 2:
if (!sub_809610C())
{
sub_8094D14(3);
ClearBottomWindow();
sub_8092F54();
PrintCursorMonInfo();
sPSSData->state++;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
SetPSSCallback(Cb_MainPSS);
break;
}
}
void Cb_GiveMovingItemToMon(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
ClearBottomWindow();
sPSSData->state++;
break;
case 1:
sub_8094D14(2);
Item_GiveMovingToMon((sInPartyMenu != FALSE) ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
sPSSData->state++;
break;
case 2:
if (!sub_809610C())
{
sub_8094D14(0);
sub_8092F54();
PrintCursorMonInfo();
PrintStorageActionText(PC_TEXT_ITEM_IS_HELD);
sPSSData->state++;
}
break;
case 3:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
sPSSData->state++;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
SetPSSCallback(Cb_MainPSS);
break;
}
}
void Cb_ItemToBag(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
if (!AddBagItem(sPSSData->cursorMonItem, 1))
{
PlaySE(SE_HAZURE);
PrintStorageActionText(PC_TEXT_BAG_FULL);
sPSSData->state = 3;
}
else
{
PlaySE(SE_SELECT);
Item_TakeMons((sInPartyMenu != FALSE) ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
sPSSData->state = 1;
}
break;
case 1:
if (!sub_809610C())
{
PrintStorageActionText(PC_TEXT_PLACED_IN_BAG);
sPSSData->state = 2;
}
break;
case 2:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
sub_8092F54();
PrintCursorMonInfo();
sPSSData->state = 4;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
SetPSSCallback(Cb_MainPSS);
break;
case 3:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
SetPSSCallback(Cb_MainPSS);
}
break;
}
}
void Cb_SwitchSelectedItem(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
if (!ItemIsMail(sPSSData->cursorMonItem))
{
ClearBottomWindow();
sPSSData->state++;
}
else
{
SetPSSCallback(Cb_PrintCantStoreMail);
}
break;
case 1:
sub_8094D14(2);
Item_SwitchMonsWithMoving((sInPartyMenu != FALSE) ? CURSOR_AREA_IN_PARTY : CURSOR_AREA_IN_BOX, GetBoxCursorPosition());
sPSSData->state++;
break;
case 2:
if (!sub_809610C())
{
sub_8094D14(3);
sub_8092F54();
PrintCursorMonInfo();
PrintStorageActionText(PC_TEXT_CHANGED_TO_ITEM);
sPSSData->state++;
}
break;
case 3:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
sPSSData->state++;
}
break;
case 4:
if (!IsDma3ManagerBusyWithBgCopy())
SetPSSCallback(Cb_MainPSS);
break;
}
}
void Cb_ShowItemInfo(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
ClearBottomWindow();
sPSSData->state++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
PlaySE(SE_WIN_OPEN);
PrintItemDescription();
sub_80966F4();
sPSSData->state++;
}
break;
case 2:
if (!sub_8096728())
sPSSData->state++;
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
sPSSData->state++;
break;
case 4:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
PlaySE(SE_WIN_OPEN);
sPSSData->state++;
}
break;
case 5:
if (!sub_80967C0())
sPSSData->state++;
break;
case 6:
if (!IsDma3ManagerBusyWithBgCopy())
SetPSSCallback(Cb_MainPSS);
break;
}
}
void Cb_CloseBoxWhileHoldingItem(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
PlaySE(SE_SELECT);
PrintStorageActionText(PC_TEXT_PUT_IN_BAG);
ShowYesNoWindow(0);
sPSSData->state = 1;
break;
case 1:
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case MENU_B_PRESSED:
case 1:
ClearBottomWindow();
SetPSSCallback(Cb_MainPSS);
break;
case 0:
if (AddBagItem(sPSSData->movingItem, 1) == TRUE)
{
ClearBottomWindow();
sPSSData->state = 3;
}
else
{
PrintStorageActionText(PC_TEXT_BAG_FULL);
sPSSData->state = 2;
}
break;
}
break;
case 2:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
sPSSData->state = 5;
}
break;
case 3:
sub_8096088();
sPSSData->state = 4;
break;
case 4:
if (!sub_809610C())
{
sub_8094D14(0);
SetPSSCallback(Cb_MainPSS);
}
break;
case 5:
if (!IsDma3ManagerBusyWithBgCopy())
SetPSSCallback(Cb_MainPSS);
break;
}
}
void Cb_HandleMovingMonFromParty(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
CompactPartySlots();
sub_80909F4();
sPSSData->state++;
break;
case 1:
if (!sub_8090A60())
{
sub_808FAA8();
SetPSSCallback(Cb_MainPSS);
}
break;
}
}
void Cb_PrintCantStoreMail(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
PrintStorageActionText(PC_TEXT_CANT_STORE_MAIL);
sPSSData->state++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
sPSSData->state++;
break;
case 2:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
sPSSData->state++;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
SetPSSCallback(Cb_MainPSS);
break;
}
}
void Cb_HandleBoxOptions(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
PrintStorageActionText(PC_TEXT_WHAT_YOU_DO);
AddMenu();
sPSSData->state++;
break;
case 1:
if (sub_8094F90())
return;
sPSSData->state++;
case 2:
switch (sub_8094F94())
{
case -1:
case 0:
sub_80920FC(TRUE);
ClearBottomWindow();
SetPSSCallback(Cb_MainPSS);
break;
case 11:
PlaySE(SE_SELECT);
SetPSSCallback(Cb_NameBox);
break;
case 10:
PlaySE(SE_SELECT);
ClearBottomWindow();
SetPSSCallback(Cb_HandleWallpapers);
break;
case 9:
PlaySE(SE_SELECT);
ClearBottomWindow();
SetPSSCallback(Cb_JumpBox);
break;
}
break;
}
}
void Cb_HandleWallpapers(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
AddWallpaperSetsMenu();
PrintStorageActionText(PC_TEXT_PICK_A_THEME);
sPSSData->state++;
break;
case 1:
if (!sub_8094F90())
sPSSData->state++;
break;
case 2:
sPSSData->wallpaperSetId = sub_8094F94();
switch (sPSSData->wallpaperSetId)
{
case -1:
sub_80920FC(TRUE);
ClearBottomWindow();
SetPSSCallback(Cb_MainPSS);
break;
case 18 ... 21:
PlaySE(SE_SELECT);
sub_8095024();
sPSSData->wallpaperSetId -= 18;
sPSSData->state++;
break;
}
break;
case 3:
if (!IsDma3ManagerBusyWithBgCopy())
{
AddWallpapersMenu(sPSSData->wallpaperSetId);
PrintStorageActionText(PC_TEXT_PICK_A_WALLPAPER);
sPSSData->state++;
}
break;
case 4:
sPSSData->wallpaperId = sub_8094F94();
switch (sPSSData->wallpaperId)
{
case MENU_NOTHING_CHOSEN:
break;
case MENU_B_PRESSED:
ClearBottomWindow();
sPSSData->state = 0;
break;
default:
PlaySE(SE_SELECT);
ClearBottomWindow();
sPSSData->wallpaperId -= 22;
SetWallpaperForCurrentBox(sPSSData->wallpaperId);
sPSSData->state++;
break;
}
break;
case 5:
if (!DoWallpaperGfxChange())
{
sub_80920FC(TRUE);
SetPSSCallback(Cb_MainPSS);
}
break;
}
}
void Cb_JumpBox(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX);
sub_808C854(&sPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
sub_808C940(StorageGetCurrentBox());
sPSSData->state++;
break;
case 1:
sPSSData->newCurrBoxId = HandleBoxChooseSelectionInput();
switch (sPSSData->newCurrBoxId)
{
case 200:
break;
default:
ClearBottomWindow();
sub_808C950();
sub_808C8FC();
if (sPSSData->newCurrBoxId == 201 || sPSSData->newCurrBoxId == StorageGetCurrentBox())
{
sub_80920FC(TRUE);
SetPSSCallback(Cb_MainPSS);
}
else
{
sPSSData->state++;
}
break;
}
break;
case 2:
SetUpScrollToBox(sPSSData->newCurrBoxId);
sPSSData->state++;
break;
case 3:
if (!ScrollToBox())
{
SetCurrentBox(sPSSData->newCurrBoxId);
SetPSSCallback(Cb_MainPSS);
}
break;
}
}
void Cb_NameBox(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
sub_8093630();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
sPSSData->state++;
break;
case 1:
if (!UpdatePaletteFade())
{
sWhichToReshow = 1;
sPSSData->screenChangeType = SCREEN_CHANGE_NAME_BOX;
SetPSSCallback(Cb_ChangeScreen);
}
break;
}
}
void Cb_ShowMonSummary(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
sub_80936B8();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
sPSSData->state++;
break;
case 1:
if (!UpdatePaletteFade())
{
sWhichToReshow = 0;
sPSSData->screenChangeType = SCREEN_CHANGE_SUMMARY_SCREEN;
SetPSSCallback(Cb_ChangeScreen);
}
break;
}
}
void Cb_GiveItemFromBag(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
sPSSData->state++;
break;
case 1:
if (!UpdatePaletteFade())
{
sWhichToReshow = 2;
sPSSData->screenChangeType = SCREEN_CHANGE_ITEM_FROM_BAG;
SetPSSCallback(Cb_ChangeScreen);
}
break;
}
}
void Cb_OnCloseBoxPressed(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
if (IsMonBeingMoved())
{
PlaySE(SE_HAZURE);
PrintStorageActionText(PC_TEXT_HOLDING_POKE);
sPSSData->state = 1;
}
else if (IsActiveItemMoving())
{
SetPSSCallback(Cb_CloseBoxWhileHoldingItem);
}
else
{
PlaySE(SE_SELECT);
PrintStorageActionText(PC_TEXT_EXIT_BOX);
ShowYesNoWindow(0);
sPSSData->state = 2;
}
break;
case 1:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
SetPSSCallback(Cb_MainPSS);
}
break;
case 2:
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case MENU_B_PRESSED:
case 1:
ClearBottomWindow();
SetPSSCallback(Cb_MainPSS);
break;
case 0:
PlaySE(SE_PC_OFF);
ClearBottomWindow();
sPSSData->state++;
break;
}
break;
case 3:
sub_80A0A70(0x14, 0, 1);
sPSSData->state++;
break;
case 4:
if (!sub_80A0AAC())
{
sub_808FF70();
gPlayerPartyCount = CalculatePlayerPartyCount();
sPSSData->screenChangeType = SCREEN_CHANGE_EXIT_BOX;
SetPSSCallback(Cb_ChangeScreen);
}
break;
}
}
void Cb_OnBPressed(u8 taskId)
{
switch (sPSSData->state)
{
case 0:
if (IsMonBeingMoved())
{
PlaySE(SE_HAZURE);
PrintStorageActionText(PC_TEXT_HOLDING_POKE);
sPSSData->state = 1;
}
else if (IsActiveItemMoving())
{
SetPSSCallback(Cb_CloseBoxWhileHoldingItem);
}
else
{
PlaySE(SE_SELECT);
PrintStorageActionText(PC_TEXT_CONTINUE_BOX);
ShowYesNoWindow(0);
sPSSData->state = 2;
}
break;
case 1:
if (JOY_NEW(A_BUTTON | B_BUTTON | DPAD_ANY))
{
ClearBottomWindow();
SetPSSCallback(Cb_MainPSS);
}
break;
case 2:
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
ClearBottomWindow();
SetPSSCallback(Cb_MainPSS);
break;
case 1:
case MENU_B_PRESSED:
PlaySE(SE_PC_OFF);
ClearBottomWindow();
sPSSData->state++;
break;
}
break;
case 3:
sub_80A0A70(0x14, 0, 0);
sPSSData->state++;
break;
case 4:
if (!sub_80A0AAC())
{
sub_808FF70();
gPlayerPartyCount = CalculatePlayerPartyCount();
sPSSData->screenChangeType = SCREEN_CHANGE_EXIT_BOX;
SetPSSCallback(Cb_ChangeScreen);
}
break;
}
}
void Cb_ChangeScreen(u8 taskId)
{
struct Pokemon * partyMon;
u8 mode, monIndex, maxMonIndex;
u8 screenChangeType = sPSSData->screenChangeType;
if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS && IsActiveItemMoving() == TRUE)
gUnknown_20397BA = GetMovingItem();
else
gUnknown_20397BA = ITEM_NONE;
switch (screenChangeType)
{
case SCREEN_CHANGE_EXIT_BOX:
default:
FreePSSData();
SetMainCallback2(Cb2_ExitPSS);
break;
case SCREEN_CHANGE_SUMMARY_SCREEN:
partyMon = sPSSData->field_218C.mon;
monIndex = sPSSData->field_2187;
maxMonIndex = sPSSData->field_2186;
mode = sPSSData->field_2188;
FreePSSData();
ShowPokemonSummaryScreen(partyMon, monIndex, maxMonIndex, Cb2_ReturnToPSS, mode);
break;
case SCREEN_CHANGE_NAME_BOX:
FreePSSData();
DoNamingScreen(NAMING_SCREEN_BOX, GetBoxNamePtr(StorageGetCurrentBox()), 0, 0, 0, Cb2_ReturnToPSS);
break;
case SCREEN_CHANGE_ITEM_FROM_BAG:
FreePSSData();
GoToBagMenu(ITEMMENULOCATION_PCBOX, OPEN_BAG_ITEMS, Cb2_ReturnToPSS);
break;
}
DestroyTask(taskId);
}
void GiveChosenBagItem(void)
{
u16 item = gSpecialVar_ItemId;
if (item != 0)
{
u8 id = GetBoxCursorPosition();
if (sInPartyMenu)
SetMonData(&gPlayerParty[id], MON_DATA_HELD_ITEM, &item);
else
SetCurrentBoxMonData(id, MON_DATA_HELD_ITEM, &item);
RemoveBagItem(item, 1);
}
}