summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2020-07-04 17:15:04 -0400
committerluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2020-07-04 17:15:04 -0400
commitaecf2dbf6e26469cc40ab2c3aec155aecba7091b (patch)
tree7a580e0e725d63a3846c87381b8e2401662460d7 /src
parentdb2fb7785d7af0a2863345435493465ea830e004 (diff)
pokemon_summary_screen.c, part 13.
Diffstat (limited to 'src')
-rw-r--r--src/pokemon_summary_screen.c272
1 files changed, 269 insertions, 3 deletions
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 83fe5ffb0..e06dcb6dd 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -231,7 +231,7 @@ struct PokemonSummaryScreenData
u8 ALIGNED(4) unk3288; /* 0x3288 */
u8 ALIGNED(4) unk328C; /* 0x328C */
- struct Pokemon currentMon;
+ struct Pokemon currentMon; /* 0x3290 */
union
{
@@ -398,6 +398,7 @@ extern const struct OamData gUnknown_8463B30;
extern const union AnimCmd * const gUnknown_8463B40[];
extern const u16 gUnknown_84636E0[];
+extern const u8 gUnknown_8463FB8[];
#define FREE_AND_SET_NULL_IF_SET(ptr) \
{ \
@@ -2415,9 +2416,9 @@ void sub_8137C90(void)
BlitMoveInfoIcon(gMonSummaryScreen->unk3000[5], gMonSummaryScreen->unk3250[4] + 1, 3, MACRO_8137270(4));
}
-void sub_8137D28(u8 page)
+void sub_8137D28(u8 curPageIndex)
{
- switch (page)
+ switch (curPageIndex)
{
case PSS_PAGE_INFO:
sub_8136DA4(gUnknown_8419C1D);
@@ -4443,3 +4444,268 @@ void sub_813B120(u8 taskId, s8 a1)
CreateTask(sub_813B3F0, 0);
gMonSummaryScreen->unk328C = 0;
}
+
+s8 sub_813B20C(s8 a0)
+{
+ struct Pokemon * partyMons = gMonSummaryScreen->monList.mons;
+ s8 v1 = 0;
+
+ if (gMonSummaryScreen->curPageIndex == 0)
+ {
+ if (a0 == -1 && gLastViewedMonIndex == 0)
+ return -1;
+ else if (a0 == 1 && gLastViewedMonIndex >= gMonSummaryScreen->lastIndex)
+ return -1;
+ else
+ return gLastViewedMonIndex + a0;
+ }
+
+ while (TRUE)
+ {
+ v1 += a0;
+ if (0 > gLastViewedMonIndex + v1 || gLastViewedMonIndex + v1 > gMonSummaryScreen->lastIndex)
+ return -1;
+
+ if (GetMonData(&partyMons[gLastViewedMonIndex + v1], MON_DATA_IS_EGG) == 0)
+ return gLastViewedMonIndex + v1;
+ }
+
+ return -1;
+}
+
+u8 sub_813B2C8(struct Pokemon * partyMons)
+{
+ if (GetMonData(partyMons, MON_DATA_SPECIES) != 0 && (gMonSummaryScreen->curPageIndex != 0 || GetMonData(partyMons, MON_DATA_IS_EGG) == 0))
+ return TRUE;
+
+ return FALSE;
+}
+
+s8 sub_813B304(u8 a0)
+{
+ while (TRUE)
+ {
+ a0++;
+
+ if (a0 == 6)
+ return -1;
+ if (sub_813B2C8(&gPlayerParty[gUnknown_8463FB8[a0]]) == TRUE)
+ break;
+ }
+
+ return (s8)gUnknown_8463FB8[a0];
+}
+
+s8 sub_813B348(u8 a0)
+{
+ while (1)
+ {
+ if (a0 == 0)
+ return -1;
+
+ a0--;
+
+ if (sub_813B2C8(&gPlayerParty[gUnknown_8463FB8[a0]]) == TRUE)
+ break;
+ }
+
+ return (s8)(gUnknown_8463FB8[a0]);
+}
+
+s8 sub_813B38C(s8 a0)
+{
+ u8 v0 = 0;
+ u8 i;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ if (gUnknown_8463FB8[i] == GetLastViewedMonIndex())
+ {
+ v0 = i;
+ break;
+ }
+
+ if ((a0 == -1 && v0 == 0)
+ || (a0 == 1 && v0 == 5))
+ return -1;
+
+ if (a0 == 1)
+ return sub_813B304(v0);
+ else
+ return sub_813B348(v0);
+}
+
+void sub_813B3F0(u8 id)
+{
+ switch (gMonSummaryScreen->unk328C)
+ {
+ case 0:
+ StopCryAndClearCrySongs();
+ gUnknown_203B16D = 0;
+ gUnknown_203B16E = 0;
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 1:
+ sub_8139C80();
+ sub_8139F20();
+ sub_8139D90();
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 2:
+ sub_8138B8C(&gMonSummaryScreen->currentMon);
+
+ gMonSummaryScreen->isEgg = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_IS_EGG);
+ gMonSummaryScreen->isBadEgg = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_SANITY_IS_BAD_EGG);
+
+ if (gMonSummaryScreen->isBadEgg == TRUE)
+ gMonSummaryScreen->isEgg = TRUE;
+
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 3:
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
+
+ if (IsMonShiny(&gMonSummaryScreen->currentMon) == TRUE && !gMonSummaryScreen->isEgg)
+ {
+ LoadPalette(&gUnknown_8E9B310[16 * 6], 0, 0x20);
+ LoadPalette(&gUnknown_8E9B310[16 * 5], 0x10, 0x20);
+ }
+ else
+ {
+ LoadPalette(&gUnknown_8E9B310[16 * 0], 0, 0x20);
+ LoadPalette(&gUnknown_8E9B310[16 * 1], 0x10, 0x20);
+ }
+
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 4:
+ if (gMonSummaryScreen->curPageIndex == PSS_PAGE_INFO)
+ {
+ if (gMonSummaryScreen->isEgg)
+ {
+ CopyToBgTilemapBuffer(gMonSummaryScreen->unk323C, gUnknown_8E9BBCC, 0, 0);
+ CopyToBgTilemapBuffer(gMonSummaryScreen->unk3240, gUnknown_8E9B750, 0, 0);
+ }
+ else
+ {
+ CopyToBgTilemapBuffer(gMonSummaryScreen->unk323C, gUnknown_8E9B598, 0, 0);
+ CopyToBgTilemapBuffer(gMonSummaryScreen->unk3240, gUnknown_8E9B750, 0, 0);
+ }
+ }
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 5:
+ sub_81360D4();
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 6:
+ if (!gMonSummaryScreen->isEgg)
+ sub_8136350();
+
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 7:
+ if (!gMonSummaryScreen->isEgg)
+ sub_81367B0();
+
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 8:
+ sub_8136F4C();
+ sub_81374E8();
+ sub_8137BD0();
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 9:
+ sub_8138A38();
+ sub_8138538();
+ sub_8137D28(gMonSummaryScreen->curPageIndex);
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 10:
+ CopyWindowToVram(gMonSummaryScreen->unk3000[0], 2);
+ CopyWindowToVram(gMonSummaryScreen->unk3000[1], 2);
+ CopyWindowToVram(gMonSummaryScreen->unk3000[2], 2);
+ CopyWindowToVram(gMonSummaryScreen->unk3000[6], 2);
+ CopyWindowToVram(gMonSummaryScreen->unk3000[3], 2);
+ CopyWindowToVram(gMonSummaryScreen->unk3000[4], 2);
+ CopyWindowToVram(gMonSummaryScreen->unk3000[5], 2);
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(3);
+ gMonSummaryScreen->unk328C++;
+ break;
+ case 11:
+ if (!Overworld_LinkRecvQueueLengthMoreThan2() && !sub_800B270())
+ {
+ sub_813AFC4();
+ sub_813B784();
+ gMonSummaryScreen->unk328C++;
+ }
+ break;
+ default:
+ gMonSummaryScreen->unk328C = 0;
+ DestroyTask(id);
+ break;
+ }
+}
+
+void sub_813B750(u8 curPageIndex)
+{
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+
+ switch (curPageIndex)
+ {
+ case PSS_PAGE_INFO:
+ case PSS_PAGE_SKILLS:
+ case PSS_PAGE_MOVES:
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) | DISPCNT_WIN1_ON);
+ break;
+ default:
+ break;
+ }
+}
+
+void sub_813B784(void)
+{
+ if (!GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_IS_EGG))
+ {
+ if (ShouldPlayNormalPokeCry(&gMonSummaryScreen->currentMon) == TRUE)
+ PlayCry3(GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_SPECIES2), 0, 0);
+ else
+ PlayCry3(GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_SPECIES2), 0, 11);
+ }
+}
+
+bool32 sub_813B7E0(u8 nature)
+{
+ if (nature == NATURE_BOLD || nature == NATURE_GENTLE)
+ return TRUE;
+
+ return FALSE;
+}
+
+bool32 sub_813B7F8(void)
+{
+ u8 version = GetMonData(&gMonSummaryScreen->currentMon, MON_DATA_MET_GAME);
+
+ if (version == VERSION_LEAF_GREEN
+ || version == VERSION_FIRE_RED
+ || version == VERSION_RUBY
+ || version == VERSION_SAPPHIRE
+ || version == VERSION_EMERALD)
+ return TRUE;
+
+ return FALSE;
+}
+
+bool32 sub_813B838(u8 place)
+{
+ if (place >= MAPSECS_KANTO && place < MAPSEC_NONE)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_813B854(void)
+{
+ ShowPokemonSummaryScreen(0, 0, 0, CB2_ReturnToField, PSS_MODE_NORMAL);
+}