Start documenting PSS

This commit is contained in:
PikalaxALT
2020-03-15 20:31:31 -04:00
parent d30e2597a0
commit 9c2e157123
5 changed files with 104 additions and 103 deletions
+1 -1
View File
@@ -13235,7 +13235,7 @@ _0813B16C:
ldrb r2, [r0] ldrb r2, [r0]
adds r3, r5, 0 adds r3, r5, 0
adds r0, r4, 0 adds r0, r4, 0
bl sub_808BDE8 bl SeekToNextMonInBox
b _0813B1CC b _0813B1CC
.align 2, 0 .align 2, 0
_0813B190: .4byte 0x000032f4 _0813B190: .4byte 0x000032f4
+10 -10
View File
@@ -171,16 +171,16 @@ struct UnkPSSStruct_2002370
{ {
struct Sprite *unk_0000; struct Sprite *unk_0000;
struct Sprite *unk_0004[4]; struct Sprite *unk_0004[4];
u32 unk_0014[3]; u32 unk_0014[3]; // unused
struct Sprite *unk_0020[2]; struct Sprite *unk_0020[2];
u8 filler_0028[0x200]; u8 buffer[0x200]; // passed but not used
u8 unk_0228[20]; u8 strbuf[20];
u32 unk_023c; bool32 loadPal;
u16 unk_0240; u16 tilesTag;
u16 unk_0242; u16 paletteTag;
u8 curBox; u8 curBox;
u8 unk_0245; u8 unk_0245; // unused
u8 unk_0246; u8 subpriority;
}; };
struct StorageMenu struct StorageMenu
@@ -393,11 +393,11 @@ void BoxMonAtToMon(u8 boxId, u8 boxPosition, struct Pokemon * dst);
void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * src); void SetBoxMonAt(u8 boxId, u8 boxPosition, struct BoxPokemon * src);
void Cb2_ExitPSS(void); void Cb2_ExitPSS(void);
void sub_808C8FC(void); void FreeBoxSelectionPopupSpriteGfx(void);
void sub_808C940(u8 curBox); void sub_808C940(u8 curBox);
void sub_808C950(void); void sub_808C950(void);
u8 HandleBoxChooseSelectionInput(void); u8 HandleBoxChooseSelectionInput(void);
void sub_808C854(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal); void LoadBoxSelectionPopupSpriteGfx(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal);
void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value); void SetCurrentBoxMonData(u8 boxPosition, s32 request, const void *value);
u32 GetCurrentBoxMonData(u8 boxPosition, s32 request); u32 GetCurrentBoxMonData(u8 boxPosition, s32 request);
u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst); u32 GetAndCopyBoxMonDataAt(u8 boxId, u8 boxPosition, s32 request, void *dst);
+1 -1
View File
@@ -138,7 +138,7 @@ void SetBoxWallpaper(u8 boxId, u8 wallpaperId)
gPokemonStoragePtr->boxWallpapers[boxId] = wallpaperId; gPokemonStoragePtr->boxWallpapers[boxId] = wallpaperId;
} }
s16 sub_808BDE8(struct BoxPokemon * boxMons, s8 currIndex, u8 maxIndex, u8 flags) s16 SeekToNextMonInBox(struct BoxPokemon * boxMons, s8 currIndex, u8 maxIndex, u8 flags)
{ {
// flags: // flags:
// bit 0: Allow eggs // bit 0: Allow eggs
+87 -86
View File
@@ -23,15 +23,15 @@ struct PSS_MenuStringPtrs
}; };
static EWRAM_DATA u8 sPreviousBoxOption = 0; static EWRAM_DATA u8 sPreviousBoxOption = 0;
static EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_20397AC = NULL; static EWRAM_DATA struct UnkPSSStruct_2002370 *sBoxSelectionPopupSpriteManager = NULL;
static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr); static void PSS_CreatePCMenu(u8 whichMenu, s16 *windowIdPtr);
static void sub_808C9C4(u8 curBox); static void sub_808C9C4(u8 curBox);
static void sub_808CBA4(void); static void sub_808CBA4(void);
static void sub_808CC10(void); static void UpdateBoxNameAndCountSprite_WraparoundRight(void);
static void sub_808CC44(void); static void UpdateBoxNameAndCountSprite_WraparoundLeft(void);
static void sub_808CC74(void); static void PrintBoxNameAndCountToSprite(void);
static void sub_808CCFC(const u8 *a0, u16 x, u16 y); static void PrintToSpriteWithTagUnk0240(const u8 *a0, u16 x, u16 y);
static void sub_808CD64(struct Sprite * sprite); static void sub_808CD64(struct Sprite * sprite);
// Forward declarations // Forward declarations
@@ -94,7 +94,7 @@ void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero
RemoveWindow(windowId); RemoveWindow(windowId);
} }
static void sub_808BFE0(const u8 *string, void *dst, u16 arg2, u8 arg3, u8 clr2, u8 clr3, u8 *buffer) static void PrintStringToBufferCopyNow(const u8 *string, void *dst, u16 rise, u8 bgClr, u8 fgClr, u8 shClr, u8 *buffer)
{ {
u32 var; u32 var;
u8 windowId; u8 windowId;
@@ -106,15 +106,15 @@ static void sub_808BFE0(const u8 *string, void *dst, u16 arg2, u8 arg3, u8 clr2,
winTemplate.height = 2; winTemplate.height = 2;
var = winTemplate.width * 32; var = winTemplate.width * 32;
windowId = AddWindow(&winTemplate); windowId = AddWindow(&winTemplate);
FillWindowPixelBuffer(windowId, PIXEL_FILL(arg3)); FillWindowPixelBuffer(windowId, PIXEL_FILL(bgClr));
tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA); tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA);
tileData2 = (winTemplate.width * 32) + tileData1; tileData2 = (winTemplate.width * 32) + tileData1;
txtColor[0] = arg3; txtColor[0] = bgClr;
txtColor[1] = clr2; txtColor[1] = fgClr;
txtColor[2] = clr3; txtColor[2] = shClr;
AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, txtColor, -1, string); AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, txtColor, -1, string);
CpuCopy16(tileData1, dst, var); CpuCopy16(tileData1, dst, var);
CpuCopy16(tileData2, dst + arg2, var); CpuCopy16(tileData2, dst + rise, var);
RemoveWindow(windowId); RemoveWindow(windowId);
} }
@@ -414,7 +414,7 @@ void ResetPokemonStorageSystem(void)
} }
} }
void sub_808C854(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal) void LoadBoxSelectionPopupSpriteGfx(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3, bool32 loadPal)
{ {
struct SpritePalette palette = { struct SpritePalette palette = {
gBoxSelectionPopupPalette, palTag gBoxSelectionPopupPalette, palTag
@@ -429,19 +429,19 @@ void sub_808C854(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3
LoadSpritePalette(&palette); LoadSpritePalette(&palette);
LoadSpriteSheets(sheets); LoadSpriteSheets(sheets);
gUnknown_20397AC = a0; sBoxSelectionPopupSpriteManager = a0;
a0->unk_0240 = tileTag; a0->tilesTag = tileTag;
a0->unk_0242 = palTag; a0->paletteTag = palTag;
a0->unk_0246 = a3; a0->subpriority = a3;
a0->unk_023c = loadPal; a0->loadPal = loadPal;
} }
void sub_808C8FC(void) void FreeBoxSelectionPopupSpriteGfx(void)
{ {
if (gUnknown_20397AC->unk_023c) if (sBoxSelectionPopupSpriteManager->loadPal)
FreeSpritePaletteByTag(gUnknown_20397AC->unk_0242); FreeSpritePaletteByTag(sBoxSelectionPopupSpriteManager->paletteTag);
FreeSpriteTilesByTag(gUnknown_20397AC->unk_0240); FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tilesTag);
FreeSpriteTilesByTag(gUnknown_20397AC->unk_0240 + 1); FreeSpriteTilesByTag(sBoxSelectionPopupSpriteManager->tilesTag + 1);
} }
void sub_808C940(u8 curBox) void sub_808C940(u8 curBox)
@@ -464,17 +464,17 @@ u8 HandleBoxChooseSelectionInput(void)
if (gMain.newKeys & A_BUTTON) if (gMain.newKeys & A_BUTTON)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
return gUnknown_20397AC->curBox; return sBoxSelectionPopupSpriteManager->curBox;
} }
if (gMain.newKeys & DPAD_LEFT) if (gMain.newKeys & DPAD_LEFT)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_808CC44(); UpdateBoxNameAndCountSprite_WraparoundLeft();
} }
else if (gMain.newKeys & DPAD_RIGHT) else if (gMain.newKeys & DPAD_RIGHT)
{ {
PlaySE(SE_SELECT); PlaySE(SE_SELECT);
sub_808CC10(); UpdateBoxNameAndCountSprite_WraparoundRight();
} }
return 200; return 200;
} }
@@ -527,108 +527,109 @@ static void sub_808C9C4(u8 curBox)
0, 0, &oamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy 0, 0, &oamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
}; };
{ {
const u8 gUnknown_83CDA94[] = _("/30"); const u8 gUnknown_83CDA94[] = _("/30");
gUnknown_20397AC->curBox = curBox; sBoxSelectionPopupSpriteManager->curBox = curBox;
template.tileTag = gUnknown_20397AC->unk_0240; template.tileTag = sBoxSelectionPopupSpriteManager->tilesTag;
template.paletteTag = gUnknown_20397AC->unk_0242; template.paletteTag = sBoxSelectionPopupSpriteManager->paletteTag;
spriteId = CreateSprite(&template, 160, 96, 0); spriteId = CreateSprite(&template, 160, 96, 0);
gUnknown_20397AC->unk_0000 = gSprites + spriteId; sBoxSelectionPopupSpriteManager->unk_0000 = gSprites + spriteId;
oamData.shape = SPRITE_SHAPE(8x32); // Manual subsprites
oamData.size = SPRITE_SIZE(8x32); oamData.shape = SPRITE_SHAPE(8x32);
template.tileTag = gUnknown_20397AC->unk_0240 + 1; oamData.size = SPRITE_SIZE(8x32);
template.anims = gUnknown_83CDA70; template.tileTag = sBoxSelectionPopupSpriteManager->tilesTag + 1;
for (i = 0; i < 4; i++) template.anims = gUnknown_83CDA70;
for (i = 0; i < 4; i++)
{
u16 r5;
spriteId = CreateSprite(&template, 124, 80, sBoxSelectionPopupSpriteManager->subpriority);
sBoxSelectionPopupSpriteManager->unk_0004[i] = gSprites + spriteId;
r5 = 0;
if (i & 2)
{ {
u16 r5; sBoxSelectionPopupSpriteManager->unk_0004[i]->pos1.x = 196;
spriteId = CreateSprite(&template, 124, 80, gUnknown_20397AC->unk_0246); r5 = 2;
gUnknown_20397AC->unk_0004[i] = gSprites + spriteId;
r5 = 0;
if (i & 2)
{
gUnknown_20397AC->unk_0004[i]->pos1.x = 196;
r5 = 2;
}
if (i & 1)
{
gUnknown_20397AC->unk_0004[i]->pos1.y = 112;
gUnknown_20397AC->unk_0004[i]->oam.size = 0;
r5++;
}
StartSpriteAnim(gUnknown_20397AC->unk_0004[i], r5);
} }
for (i = 0; i < 2; i++) if (i & 1)
{ {
gUnknown_20397AC->unk_0020[i] = sub_809223C(72 * i + 0x7c, 0x58, i, 0, gUnknown_20397AC->unk_0246); sBoxSelectionPopupSpriteManager->unk_0004[i]->pos1.y = 112;
if (gUnknown_20397AC->unk_0020[i]) sBoxSelectionPopupSpriteManager->unk_0004[i]->oam.size = SPRITE_SIZE(8x16);
{ r5++;
gUnknown_20397AC->unk_0020[i]->data[0] = (i == 0 ? -1 : 1);
gUnknown_20397AC->unk_0020[i]->callback = sub_808CD64;
}
} }
sub_808CC74(); StartSpriteAnim(sBoxSelectionPopupSpriteManager->unk_0004[i], r5);
sub_808CCFC(gUnknown_83CDA94, 5, 3); }
for (i = 0; i < 2; i++)
{
sBoxSelectionPopupSpriteManager->unk_0020[i] = sub_809223C(72 * i + 0x7c, 0x58, i, 0, sBoxSelectionPopupSpriteManager->subpriority);
if (sBoxSelectionPopupSpriteManager->unk_0020[i])
{
sBoxSelectionPopupSpriteManager->unk_0020[i]->data[0] = (i == 0 ? -1 : 1);
sBoxSelectionPopupSpriteManager->unk_0020[i]->callback = sub_808CD64;
}
}
PrintBoxNameAndCountToSprite();
PrintToSpriteWithTagUnk0240(gUnknown_83CDA94, 5, 3);
} }
} }
static void sub_808CBA4(void) static void sub_808CBA4(void)
{ {
u16 i; u16 i;
if (gUnknown_20397AC->unk_0000) if (sBoxSelectionPopupSpriteManager->unk_0000)
{ {
DestroySprite(gUnknown_20397AC->unk_0000); DestroySprite(sBoxSelectionPopupSpriteManager->unk_0000);
gUnknown_20397AC->unk_0000 = NULL; sBoxSelectionPopupSpriteManager->unk_0000 = NULL;
} }
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
if (gUnknown_20397AC->unk_0004[i]) if (sBoxSelectionPopupSpriteManager->unk_0004[i])
{ {
DestroySprite(gUnknown_20397AC->unk_0004[i]); DestroySprite(sBoxSelectionPopupSpriteManager->unk_0004[i]);
gUnknown_20397AC->unk_0004[i] = NULL; sBoxSelectionPopupSpriteManager->unk_0004[i] = NULL;
} }
} }
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
if (gUnknown_20397AC->unk_0020[i]) if (sBoxSelectionPopupSpriteManager->unk_0020[i])
DestroySprite(gUnknown_20397AC->unk_0020[i]); DestroySprite(sBoxSelectionPopupSpriteManager->unk_0020[i]);
} }
} }
static void sub_808CC10(void) static void UpdateBoxNameAndCountSprite_WraparoundRight(void)
{ {
if (++gUnknown_20397AC->curBox >= TOTAL_BOXES_COUNT) if (++sBoxSelectionPopupSpriteManager->curBox >= TOTAL_BOXES_COUNT)
gUnknown_20397AC->curBox = 0; sBoxSelectionPopupSpriteManager->curBox = 0;
sub_808CC74(); PrintBoxNameAndCountToSprite();
} }
static void sub_808CC44(void) static void UpdateBoxNameAndCountSprite_WraparoundLeft(void)
{ {
gUnknown_20397AC->curBox = (gUnknown_20397AC->curBox == 0 ? TOTAL_BOXES_COUNT - 1 : gUnknown_20397AC->curBox - 1); sBoxSelectionPopupSpriteManager->curBox = (sBoxSelectionPopupSpriteManager->curBox == 0 ? TOTAL_BOXES_COUNT - 1 : sBoxSelectionPopupSpriteManager->curBox - 1);
sub_808CC74(); PrintBoxNameAndCountToSprite();
} }
static void sub_808CC74(void) static void PrintBoxNameAndCountToSprite(void)
{ {
u8 nPokemonInBox = CountMonsInBox(gUnknown_20397AC->curBox); u8 nPokemonInBox = CountMonsInBox(sBoxSelectionPopupSpriteManager->curBox);
u8 *boxName = StringCopy(gUnknown_20397AC->unk_0228, GetBoxNamePtr(gUnknown_20397AC->curBox)); u8 *boxName = StringCopy(sBoxSelectionPopupSpriteManager->strbuf, GetBoxNamePtr(sBoxSelectionPopupSpriteManager->curBox));
while (boxName < gUnknown_20397AC->unk_0228 + BOX_NAME_LENGTH) while (boxName < sBoxSelectionPopupSpriteManager->strbuf + BOX_NAME_LENGTH)
*boxName++ = CHAR_SPACE; *boxName++ = CHAR_SPACE;
*boxName = EOS; *boxName = EOS;
sub_808CCFC(gUnknown_20397AC->unk_0228, 0, 1); PrintToSpriteWithTagUnk0240(sBoxSelectionPopupSpriteManager->strbuf, 0, 1);
ConvertIntToDecimalStringN(gUnknown_20397AC->unk_0228, nPokemonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2); ConvertIntToDecimalStringN(sBoxSelectionPopupSpriteManager->strbuf, nPokemonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2);
sub_808CCFC(gUnknown_20397AC->unk_0228, 3, 3); PrintToSpriteWithTagUnk0240(sBoxSelectionPopupSpriteManager->strbuf, 3, 3);
} }
static void sub_808CCFC(const u8 *str, u16 x, u16 y) static void PrintToSpriteWithTagUnk0240(const u8 *str, u16 x, u16 y)
{ {
u16 tileStart = GetSpriteTileStartByTag(gUnknown_20397AC->unk_0240); u16 tileStart = GetSpriteTileStartByTag(sBoxSelectionPopupSpriteManager->tilesTag);
sub_808BFE0(str, (void *)(OBJ_VRAM0 + tileStart * 32 + 256 * y + 32 * x), 0x100, 4, 15, 14, gUnknown_20397AC->filler_0028); PrintStringToBufferCopyNow(str, (void *)(OBJ_VRAM0 + tileStart * 32 + 256 * y + 32 * x), 0x100, TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5, sBoxSelectionPopupSpriteManager->buffer);
} }
static void sub_808CD64(struct Sprite *sprite) static void sub_808CD64(struct Sprite *sprite)
+5 -5
View File
@@ -1179,7 +1179,7 @@ static void Cb_DepositMenu(u8 taskId)
{ {
case 0: case 0:
PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX);
sub_808C854(&sPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE); LoadBoxSelectionPopupSpriteGfx(&sPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
sub_808C940(gUnknown_20397B6); sub_808C940(gUnknown_20397B6);
sPSSData->state++; sPSSData->state++;
break; break;
@@ -1193,7 +1193,7 @@ static void Cb_DepositMenu(u8 taskId)
{ {
ClearBottomWindow(); ClearBottomWindow();
sub_808C950(); sub_808C950();
sub_808C8FC(); FreeBoxSelectionPopupSpriteGfx();
SetPSSCallback(Cb_MainPSS); SetPSSCallback(Cb_MainPSS);
} }
else else
@@ -1204,7 +1204,7 @@ static void Cb_DepositMenu(u8 taskId)
sub_808FE54(2); sub_808FE54(2);
ClearBottomWindow(); ClearBottomWindow();
sub_808C950(); sub_808C950();
sub_808C8FC(); FreeBoxSelectionPopupSpriteGfx();
sPSSData->state = 2; sPSSData->state = 2;
} }
else else
@@ -1816,7 +1816,7 @@ static void Cb_JumpBox(u8 taskId)
{ {
case 0: case 0:
PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX); PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX);
sub_808C854(&sPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE); LoadBoxSelectionPopupSpriteGfx(&sPSSData->field_1E5C, TAG_TILE_A, TAG_PAL_DAC7, 3, FALSE);
sub_808C940(StorageGetCurrentBox()); sub_808C940(StorageGetCurrentBox());
sPSSData->state++; sPSSData->state++;
break; break;
@@ -1829,7 +1829,7 @@ static void Cb_JumpBox(u8 taskId)
default: default:
ClearBottomWindow(); ClearBottomWindow();
sub_808C950(); sub_808C950();
sub_808C8FC(); FreeBoxSelectionPopupSpriteGfx();
if (sPSSData->newCurrBoxId == 201 || sPSSData->newCurrBoxId == StorageGetCurrentBox()) if (sPSSData->newCurrBoxId == 201 || sPSSData->newCurrBoxId == StorageGetCurrentBox())
{ {
sub_80920FC(TRUE); sub_80920FC(TRUE);