summaryrefslogtreecommitdiff
path: root/src/pokemon/pokemon_summary_screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pokemon/pokemon_summary_screen.c')
-rw-r--r--src/pokemon/pokemon_summary_screen.c5334
1 files changed, 0 insertions, 5334 deletions
diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c
deleted file mode 100644
index c85bed0fb..000000000
--- a/src/pokemon/pokemon_summary_screen.c
+++ /dev/null
@@ -1,5334 +0,0 @@
-#include "global.h"
-#include "constants/items.h"
-#include "constants/songs.h"
-#include "constants/species.h"
-#include "battle.h"
-#include "contest.h"
-#include "data2.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "ewram.h"
-#include "item.h"
-#include "learn_move.h"
-#include "link.h"
-#include "m4a.h"
-#include "main.h"
-#include "menu.h"
-#include "menu_helpers.h"
-#include "overworld.h"
-#include "palette.h"
-#include "party_menu.h"
-#include "pokeball.h"
-#include "pokemon.h"
-#include "pokemon_summary_screen.h"
-#include "region_map.h"
-#include "sound.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "strings.h"
-#include "strings2.h"
-#include "task.h"
-#include "tv.h"
-#include "scanline_effect.h"
-
-static void sub_809FC0C(void);
-static void sub_809FEB8(void);
-static void sub_809F63C(struct Pokemon *);
-static void sub_809F650(struct Pokemon *);
-static void sub_809F664(struct Pokemon *);
-static void sub_809FE6C(struct Pokemon *);
-static void sub_80A0090(struct Pokemon *);
-static void sub_80A015C(struct Pokemon *);
-static void sub_809DE44(void);
-static void sub_809EB40(u8);
-static void sub_809EBC4(void);
-static void sub_809E044(void);
-static void sub_80A1D84(struct Pokemon *);
-static void sub_80A18C4(void);
-static bool8 LoadPokemonSummaryScreenGraphics(void);
-static bool8 MonKnowsMultipleMoves(struct Pokemon *);
-static void PrintSummaryWindowHeaderText(void);
-static void sub_80A1DCC(struct Pokemon *);
-static void sub_809FE80(void);
-static void sub_80A00A4(void);
-static void sub_80A0390(void);
-extern u8 sub_80A1808(struct Pokemon *);
-static void sub_80A1F98(s32, u8, u8, u8, u8, u16, s32);
-static void sub_80A0958(struct Pokemon *);
-static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *, u8, u8);
-static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *, u8, u8);
-static void sub_80A1EF8(const u8 *, u8, u8, u16, s32);
-static void sub_80A1F48(const u8 *, u8, u8, u8, u16);
-static void PrintHeldItemName(u16, u8, u8);
-static void PrintNumRibbons(struct Pokemon *);
-static void DrawExperienceProgressBar(struct Pokemon *, u8, u8);
-static void sub_809E13C(u8 taskId);
-static void sub_80A1950(void);
-static void sub_809DE64(void);
-static void SummaryScreenHandleAButton(u8);
-static void SummaryScreenHandleUpDownInput(u8, s8);
-static bool8 sub_809F7D0(u8);
-static void sub_809F9D0(u8, u8);
-static void sub_809EAC8(u8);
-static void sub_809E534(u8);
-static void sub_809E83C(u8, s8);
-static void sub_80A1B40(u8);
-static void sub_80A2078(int);
-static void sub_809E3FC(u8);
-static void SummaryScreenHandleKeyInput(u8);
-static void sub_80A1B1C(u8);
-static void sub_80A16CC(u8);
-static void sub_80A1A30(u8);
-static void DrawSummaryScreenNavigationDots(void);
-static void sub_80A00F4(u8);
-static void sub_80A029C(struct Pokemon *);
-static void sub_809FBE4(void);
-static void sub_80A1500(u8);
-static void sub_80A1334(u8);
-extern void sub_809F43C(u8);
-extern s8 sub_809F284(s8);
-extern s8 sub_809F3CC(s8);
-static bool8 sub_809F5F8(void);
-static void sub_80A1DE8(struct Pokemon *);
-static u8 sub_809F6B4(struct Pokemon *, u8 *);
-static void DrawPokerusSurvivorDot(struct Pokemon *);
-static void sub_80A12D0(s8);
-static void sub_809FAC8(struct Pokemon *);
-static void SummaryScreenHandleLeftRightInput(u8, s8);
-static void sub_809E8F0();
-static void sub_80A1654(s8, u8);
-static void sub_80A1488(s8, u8);
-static void sub_809FC34(struct Pokemon *);
-static void sub_809FF64(struct Pokemon *);
-static void sub_80A1918(u8, u8);
-static void sub_80A198C(u8, u8, u8, u8);
-static u16 GetMonMove(struct Pokemon *, u8);
-static void sub_80A04CC(u16);
-static void sub_80A057C(u16);
-static void sub_80A0498(u16);
-static void sub_80A046C(u16);
-static void sub_80A20A8(u8);
-static void sub_809F678(struct Pokemon *);
-static void sub_80A1BC0(struct Sprite *sprite);
-static void sub_80A1888(struct Sprite *);
-static void sub_80A0428(struct Pokemon *, u8 *);
-static void sub_80A18E4(u8);
-static u8 *sub_80A1E58(u8 *, u8);
-static void sub_80A0A2C(struct Pokemon *, u8, u8);
-static void sub_80A1FF8(const u8 *, u8, u8, u8);
-
-extern u8 ball_number_to_ball_processing_index(u16);
-extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8);
-
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u8 gUnknown_08208238[];
-extern TaskFunc gUnknown_03005CF0;
-extern struct SpriteTemplate gUnknown_02024E8C;
-
-extern const u8 gStatusPal_Icons[];
-extern const u8 gStatusGfx_Icons[];
-extern const u8 gMenuSummaryPal[];
-extern const u8 gMenuSummaryGfx[];
-extern const u8 gMoveTypes_Gfx[];
-extern const u8 gMoveTypes_Pal[];
-extern const u8 gStatusScreen_Pal[];
-extern const u8 gStatusScreen_Tilemap[];
-extern const u8 gUnknown_08E74688[];
-extern const u8 gUnknown_08E74E88[];
-extern const u8 gUnknown_08E73508[];
-extern const u8 gStatusScreen_Gfx[];
-extern const u8 gFontDefaultPalette[];
-extern const u8 gUnknownPalette_81E6692[];
-extern const u8 gAbilityNames[][13];
-extern const u8 * const gAbilityDescriptions[];
-extern const u8 * const gContestEffectStrings[];
-extern const struct ContestMove gContestMoves[];
-extern const struct ContestEffect gContestEffects[];
-extern const u16 gUnknown_08E94510[];
-extern const u16 gUnknown_08E94550[];
-extern const u16 gUnknown_08E94590[];
-extern const u8 gUnknown_08E73E88[];
-
-EWRAM_DATA u8 gUnknown_020384F0 = 0;
-EWRAM_DATA struct Sprite *gUnknown_020384F4 = NULL;
-
-#if ENGLISH
-#include "../data/text/move_descriptions_en.h"
-#include "../data/text/nature_names_en.h"
-#elif GERMAN
-#include "../data/text/move_descriptions_de.h"
-#include "../data/text/nature_names_de.h"
-#endif
-
-static const u8 * const sPageHeaderTexts[] = {
- gEmptyString_81E72B0,
- OtherText_PokeInfo,
- OtherText_PokeSkills,
- OtherText_BattleMoves,
- OtherText_ContestMoves,
- OtherText_Switch,
- OtherText_Info,
- gOtherText_CancelNoTerminator,
-};
-
-static const union AffineAnimCmd sUnusedSpriteAffineAnim[] = {
- AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd *const sUnsuedSpriteAffineAnimTable[] = {
- sUnusedSpriteAffineAnim,
-};
-
-static const struct OamData sOamData_83C109C = {
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_83C10A4[] = {
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10AC[] = {
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10B4[] = {
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10BC[] = {
- ANIMCMD_FRAME(24, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10C4[] = {
- ANIMCMD_FRAME(32, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10CC[] = {
- ANIMCMD_FRAME(40, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10D4[] = {
- ANIMCMD_FRAME(48, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10DC[] = {
- ANIMCMD_FRAME(56, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10E4[] = {
- ANIMCMD_FRAME(64, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10EC[] = {
- ANIMCMD_FRAME(72, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10F4[] = {
- ANIMCMD_FRAME(80, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C10FC[] = {
- ANIMCMD_FRAME(88, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1104[] = {
- ANIMCMD_FRAME(96, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C110C[] = {
- ANIMCMD_FRAME(104, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1114[] = {
- ANIMCMD_FRAME(112, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C111C[] = {
- ANIMCMD_FRAME(120, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1124[] = {
- ANIMCMD_FRAME(128, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C112C[] = {
- ANIMCMD_FRAME(136, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1134[] = {
- ANIMCMD_FRAME(144, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C113C[] = {
- ANIMCMD_FRAME(152, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1144[] = {
- ANIMCMD_FRAME(160, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C114C[] = {
- ANIMCMD_FRAME(168, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1154[] = {
- ANIMCMD_FRAME(176, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sSpriteAnimTable_83C115C[] = {
- sSpriteAnim_83C10A4,
- sSpriteAnim_83C10AC,
- sSpriteAnim_83C10B4,
- sSpriteAnim_83C10BC,
- sSpriteAnim_83C10C4,
- sSpriteAnim_83C10CC,
- sSpriteAnim_83C10D4,
- sSpriteAnim_83C10DC,
- sSpriteAnim_83C10E4,
- sSpriteAnim_83C10EC,
- sSpriteAnim_83C10F4,
- sSpriteAnim_83C10FC,
- sSpriteAnim_83C1104,
- sSpriteAnim_83C110C,
- sSpriteAnim_83C1114,
- sSpriteAnim_83C111C,
- sSpriteAnim_83C1124,
- sSpriteAnim_83C112C,
- sSpriteAnim_83C1134,
- sSpriteAnim_83C113C,
- sSpriteAnim_83C1144,
- sSpriteAnim_83C114C,
- sSpriteAnim_83C1154,
-};
-
-static const struct CompressedSpriteSheet sUnknown_083C11B8 = { gMoveTypes_Gfx, 0x1700, 30002 };
-
-static const struct SpriteTemplate sSpriteTemplate_83C11C0 = {
- .tileTag = 30002,
- .paletteTag = 30002,
- .oam = &sOamData_83C109C,
- .anims = sSpriteAnimTable_83C115C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const u8 sUnknown_PaletteNums[] = { 0xD, 0xD, 0xE, 0xE, 0xD, 0xD, 0xF, 0xE, 0xD, 0xF, 0xD, 0xE, 0xF, 0xD, 0xE, 0xE, 0xF, 0xD, 0xD, 0xE, 0xE, 0xF, 0xD };
-
-static const struct OamData sOamData_83C11F0 = {
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 1,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_83C11F8[] = {
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1200[] = {
- ANIMCMD_FRAME(4, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1208[] = {
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1210[] = {
- ANIMCMD_FRAME(12, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1218[] = {
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1220[] = {
- ANIMCMD_FRAME(16, 0, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1228[] = {
- ANIMCMD_FRAME(20, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1230[] = {
- ANIMCMD_FRAME(24, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1238[] = {
- ANIMCMD_FRAME(24, 0, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C1240[] = {
- ANIMCMD_FRAME(28, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sSpriteAnimTable_83C1248[] = {
- sSpriteAnim_83C11F8,
- sSpriteAnim_83C1200,
- sSpriteAnim_83C1208,
- sSpriteAnim_83C1210,
- sSpriteAnim_83C1218,
- sSpriteAnim_83C1220,
- sSpriteAnim_83C1228,
- sSpriteAnim_83C1230,
- sSpriteAnim_83C1238,
- sSpriteAnim_83C1240,
-};
-
-static const struct CompressedSpriteSheet sUnknown_083C1270 = { gMenuSummaryGfx, 0x400, 30000 };
-static const struct CompressedSpritePalette sUnknown_083C1278 = { gMenuSummaryPal, 30000 };
-
-static const struct SpriteTemplate sSpriteTemplate_83C1280 = {
- .tileTag = 30000,
- .paletteTag = 30000,
- .oam = &sOamData_83C11F0,
- .anims = sSpriteAnimTable_83C1248,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const struct OamData sOamData_83C1298 = {
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 1,
- .tileNum = 0,
- .priority = 3,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_83C12A0[] = {
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12A8[] = {
- ANIMCMD_FRAME(4, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12B0[] = {
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12B8[] = {
- ANIMCMD_FRAME(12, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12C0[] = {
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12C8[] = {
- ANIMCMD_FRAME(20, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd sSpriteAnim_83C12D0[] = {
- ANIMCMD_FRAME(24, 0),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const sSpriteAnimTable_83C12D8[] = {
- sSpriteAnim_83C12A0,
- sSpriteAnim_83C12A8,
- sSpriteAnim_83C12B0,
- sSpriteAnim_83C12B8,
- sSpriteAnim_83C12C0,
- sSpriteAnim_83C12C8,
- sSpriteAnim_83C12D0,
-};
-
-static const struct CompressedSpriteSheet sUnknown_083C12F4 = { gStatusGfx_Icons, 0x380, 30001 };
-static const struct CompressedSpritePalette sUnknown_083C12FC = { gStatusPal_Icons, 30001 };
-
-static const struct SpriteTemplate sSpriteTemplate_83C1304 = {
- .tileTag = 30001,
- .paletteTag = 30001,
- .oam = &sOamData_83C1298,
- .anims = sSpriteAnimTable_83C12D8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const u16 sSummaryScreenMonMarkingsPalette[] = INCBIN_U16("graphics/summary_screen/mon_markings.gbapal");
-
-#if ENGLISH
-static const u16 gSummaryScreenTextTiles[] = INCBIN_U16("graphics/summary_screen/text.4bpp");
-#elif GERMAN
-extern const u16 gSummaryScreenTextTiles[];
-#endif
-
-static const u16 sSummaryScreenButtonTiles[] = INCBIN_U16("graphics/summary_screen/buttons.4bpp");
-
-static const u16 sUnknown_083C157C[] = { RGB(26, 26, 23) };
-static const u16 sUnknown_083C157E[] = { RGB(30, 30, 27) };
-
-static void (*const sUnknown_083C1580[])(void) = {
- sub_809FC0C,
- sub_809FEB8,
-};
-
-static void (*const sUnknown_083C1588[])(struct Pokemon *) = {
- sub_809F63C,
- sub_809F650,
- sub_809F664,
- sub_809F664,
-};
-
-static void (*const sUnknown_083C1598[])(struct Pokemon *) = {
- sub_809FE6C,
- sub_80A0090,
- sub_80A015C,
- sub_80A015C,
-};
-
-static const u8 sDoubleBattlePartyOrder[] = { 0, 2, 3, 1, 4, 5 };
-
-static const u8 sUnknown_083C15AE[] = _("{STR_VAR_1}{CLEAR_TO 64}");
-static const u8 sUnknown_083C15B4[] = _("{STR_VAR_1}{CLEAR_TO 72}");
-
-asm(".align 2"); // TODO: this array is probably not correctly-typed
-static const u8 sUnknown_083C15BC[] = {
- 9, 1, 0, 2,
- 10, 3, 0, 4,
- 8, 5, 0, 6,
- 11, 7, 0, 8,
- 14, 9, 0, 10,
- 12, 11, 0, 12,
- 13, 13, 0, 14,
- -1, 15, 0, 10,
-};
-
-
-void sub_809D844(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-void sub_809D85C(void)
-{
- REG_BG1HOFS = gBattle_BG1_X;
- REG_BG1VOFS = gBattle_BG1_Y;
- REG_BG2HOFS = gBattle_BG2_X;
- REG_BG2VOFS = gBattle_BG2_Y;
- REG_BG3HOFS = gBattle_BG3_X;
- REG_BG3VOFS = gBattle_BG3_Y;
-
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-void ShowPokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u8 mode)
-{
- gPaletteFade.bufferTransferDisabled = 1;
-
- pssData.monList.partyMons = party;
- pssData.mode = mode;
- pssData.monIndex = monIndex;
- pssData.maxMonIndex = maxMonIndex;
- pssData.callback = callback;
- pssData.loadGfxState = 0;
- pssData.selectedMoveIndex = 4;
- pssData.moveToLearn = 0;
- pssData.bgToggle = 0;
- pssData.disableMoveOrderEditing = FALSE;
-
- if (mode >= PSS_MODE_PC_NORMAL)
- {
- pssData.usingPC = TRUE;
- }
- else
- {
- pssData.usingPC = FALSE;
- }
-
- switch (mode)
- {
- case PSS_MODE_NORMAL:
- case PSS_MODE_PC_NORMAL:
- pssData.firstPage = PSS_PAGE_INFO;
- pssData.lastPage = PSS_PAGE_CONTEST_MOVES;
- pssData.unk77 = 0;
- pssData.unk78 = 0;
- pssData.headerTextId = 1;
- pssData.headerActionTextId = 7;
- break;
- case PSS_MODE_NO_MOVE_ORDER_EDIT:
- pssData.firstPage = PSS_PAGE_INFO;
- pssData.lastPage = PSS_PAGE_CONTEST_MOVES;
- pssData.unk77 = 0;
- pssData.unk78 = 0;
- pssData.headerTextId = 1;
- pssData.headerActionTextId = 7;
- pssData.disableMoveOrderEditing = TRUE;
- break;
- case PSS_MODE_SELECT_MOVE:
- pssData.firstPage = PSS_PAGE_BATTLE_MOVES;
- pssData.lastPage = PSS_PAGE_CONTEST_MOVES;
- pssData.unk77 = 1;
- pssData.unk78 = 1;
- pssData.headerTextId = 3;
- pssData.headerActionTextId = 0;
- pssData.selectedMoveIndex = 0;
- break;
- case PSS_MODE_MOVES_ONLY:
- case PSS_MODE_PC_MOVES_ONLY:
- pssData.firstPage = PSS_PAGE_BATTLE_MOVES;
- pssData.lastPage = PSS_PAGE_CONTEST_MOVES;
- pssData.unk77 = 1;
- pssData.unk78 = 1;
- break;
- }
-
- pssData.page = pssData.firstPage;
- SetMainCallback2(sub_809DE44);
-}
-
-void ShowSelectMovePokemonSummaryScreen(struct Pokemon *party, u8 monIndex, u8 maxMonIndex, MainCallback callback, u16 move)
-{
- ShowPokemonSummaryScreen(party, monIndex, maxMonIndex, callback, PSS_MODE_SELECT_MOVE);
- pssData.moveToLearn = move;
-}
-
-void sub_809DA1C(void)
-{
- switch (pssData.mode)
- {
- case PSS_MODE_NORMAL:
- case PSS_MODE_PC_NORMAL:
- pssData.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0);
- break;
- case PSS_MODE_NO_MOVE_ORDER_EDIT:
- pssData.inputHandlingTaskId = CreateTask(SummaryScreenHandleKeyInput, 0);
- break;
- case PSS_MODE_SELECT_MOVE:
- case PSS_MODE_UNKNOWN:
- pssData.inputHandlingTaskId = CreateTask(sub_809EB40, 0);
- break;
- case PSS_MODE_MOVES_ONLY:
- case PSS_MODE_PC_MOVES_ONLY:
- pssData.inputHandlingTaskId = CreateTask(sub_809E3FC, 0);
- break;
- }
-}
-
-bool8 sub_809DA84(void)
-{
- switch (gMain.state)
- {
- case 0:
- SetVBlankCallback(NULL);
- ResetSpriteData();
- gMain.state++;
- break;
- case 1:
- ScanlineEffect_Stop();
- gMain.state++;
- break;
- case 2:
- FreeAllSpritePalettes();
- gMain.state++;
- break;
- case 3:
- DmaClearLarge(3, (void *)(VRAM + 0x0), 0x10000, 0x1000, 32);
- gMain.state++;
- break;
- case 4:
- sub_809DE64();
- gMain.state++;
- break;
- case 5:
- Text_LoadWindowTemplate(&gWindowTemplate_81E6E6C);
- gMain.state++;
- break;
- case 6:
- MultistepInitMenuWindowBegin(&gWindowTemplate_81E6E6C);
- gMain.state++;
- break;
- case 7:
- if (MultistepInitMenuWindowContinue())
- {
- gMain.state++;
- }
- break;
- case 8:
- sub_809DA1C();
- gMain.state++;
- break;
- case 9:
- DmaCopy16Defvars(3, gSummaryScreenTextTiles, (void *)(VRAM + 0xD000), 320);
- DmaCopy16Defvars(3, sSummaryScreenButtonTiles, (void *)(VRAM + 0xD140), 256);
- pssData.loadGfxState = 0;
- gMain.state++;
- break;
- case 10:
- if (LoadPokemonSummaryScreenGraphics())
- {
- pssData.loadGfxState = 0;
- gMain.state++;
- }
- break;
- case 11:
- sub_80A18C4();
- gMain.state++;
- break;
- case 12:
- sub_809F678(&pssData.loadedMon);
- if (!GetMonStatusAndPokerus(&pssData.loadedMon))
- {
- sub_80A12D0(0);
- }
- else
- {
- sub_80A12D0(10);
- }
-
- DrawPokerusSurvivorDot(&pssData.loadedMon);
- gMain.state++;
- break;
- case 13:
- sub_80A1950();
- sub_80A1D84(&pssData.loadedMon);
- gMain.state++;
- break;
- case 14:
- sub_80A1DE8(&pssData.loadedMon);
- pssData.loadGfxState = 0;
- gMain.state++;
- break;
- case 15:
- if ((pssData.monSpriteId = sub_809F6B4(&pssData.loadedMon, &pssData.loadGfxState)) != 0xFF)
- {
- pssData.loadGfxState = 0;
- gMain.state++;
- }
- break;
- case 16:
- sub_809E044();
- DrawSummaryScreenNavigationDots();
- gMain.state++;
- break;
- case 17:
- if (pssData.page <= PSS_PAGE_SKILLS)
- {
- sUnknown_083C1580[pssData.page]();
- }
-
- gMain.state++;
- break;
- case 18:
- sub_809FAC8(&pssData.loadedMon);
- gMain.state++;
- break;
- case 19:
- sUnknown_083C1598[pssData.page](&pssData.loadedMon);
- gMain.state++;
- break;
- case 20:
- if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG))
- {
- gBattle_BG3_X = 256;
- }
- else
- {
- gBattle_BG3_X = 0;
- }
-
- gMain.state++;
- break;
- case 21:
- sub_809EBC4();
- if (pssData.selectedMoveIndex != 0)
- {
- sub_80A1488(0, 0);
- sub_80A1654(0, 0);
- }
- else
- {
- sub_80A1488(10, 0);
- sub_80A1654(10, 0);
- }
-
- PrintSummaryWindowHeaderText();
- gMain.state++;
- break;
- case 22:
- if (sub_8055870() != TRUE)
- {
- gMain.state++;
- }
- break;
- default:
- SetVBlankCallback(sub_809D85C);
- BeginHardwarePaletteFade(0xFF, 0, 16, 0, 1);
- SetMainCallback2(sub_809D844);
- gPaletteFade.bufferTransferDisabled = 0;
- return TRUE;
- break;
- }
-
- return FALSE;
-}
-
-static void sub_809DE44(void)
-{
- while (sub_809DA84() != TRUE && sub_80F9344() != TRUE);
-}
-
-static void sub_809DE64(void)
-{
- REG_BG0CNT = 0x1E08;
- REG_BG1CNT = 0x4801;
- REG_BG2CNT = 0x4A02;
- REG_BG3CNT = 0x5C03;
-
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- gBattle_BG2_X = 0;
- gBattle_BG2_Y = 0;
- gBattle_BG3_X = 0;
- gBattle_BG3_Y = 0;
-
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 0;
-
- REG_BLDCNT = 0;
- REG_DISPCNT = 0x1F40;
-}
-
-static bool8 LoadPokemonSummaryScreenGraphics(void)
-{
- switch (pssData.loadGfxState)
- {
- case 0:
- LZDecompressVram(gStatusScreen_Gfx, (void *)VRAM + 0);
- break;
- case 1:
- CpuSet(gUnknown_08E73508, (void *)VRAM + 0xE000, 0x400);
- break;
- case 2:
- LZDecompressVram(gUnknown_08E74E88, (void *)VRAM + 0xE800);
- break;
- case 3:
- LZDecompressVram(gStatusScreen_Tilemap, (void *)VRAM + 0x4800);
- break;
- case 4:
- CpuSet(gUnknown_08E73E88, (void *)VRAM + 0x5800, 0x400);
- break;
- case 5:
- CpuSet(gUnknown_08E74688, (void *)VRAM + 0x6800, 0x400);
- break;
- case 6:
- LoadCompressedPalette(gStatusScreen_Pal, 0, 160);
- break;
- case 7:
- LoadCompressedObjectPic(&sUnknown_083C11B8);
- break;
- case 8:
- LoadCompressedObjectPic(&sUnknown_083C1270);
- break;
- case 9:
- LoadCompressedObjectPic(&sUnknown_083C12F4);
- break;
- case 10:
- LoadCompressedObjectPalette(&sUnknown_083C12FC);
- break;
- case 11:
- LoadCompressedObjectPalette(&sUnknown_083C1278);
- break;
- case 12:
- LoadCompressedPalette(gMoveTypes_Pal, 464, 96);
- pssData.loadGfxState = 0;
- return TRUE;
- }
-
- pssData.loadGfxState++;
- return FALSE;
-}
-
-static void sub_809E044(void)
-{
- LoadPalette(&gUnknownPalette_81E6692[28], 129, 2);
- LoadPalette(&gUnknownPalette_81E6692[30], 136, 2);
- LoadPalette(&gUnknownPalette_81E6692[28], 143, 2);
- LoadPalette(&gUnknownPalette_81E6692[30], 137, 2);
- LoadPalette(&gUnknownPalette_81E6692[12], 209, 4);
- LoadPalette(&gUnknownPalette_81E6692[20], 211, 4);
- LoadPalette(&gUnknownPalette_81E6692[28], 213, 4);
- LoadPalette(&gUnknownPalette_81E6692[12], 215, 4);
- LoadPalette(&gUnknownPalette_81E6692[8], 217, 4);
- LoadPalette(&gUnknownPalette_81E6692[16], 219, 4);
- LoadPalette(&gUnknownPalette_81E6692[4], 221, 2);
- LoadPalette(&gUnknownPalette_81E6692[6], 222, 2);
- LoadPalette(&gUnknownPalette_81E6692[2], 223, 2);
- LoadPalette(gFontDefaultPalette, 240, 32);
- LoadPalette(&gUnknownPalette_81E6692[6], 249, 2);
-}
-
-static void SummaryScreenExit(u8 taskId)
-{
- PlaySE(SE_SELECT);
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskId].func = sub_809E13C;
-}
-
-static void sub_809E13C(u8 taskId)
-{
- if (sub_8055870() != TRUE && !gPaletteFade.active)
- {
- gUnknown_020384F0 = pssData.monIndex;
-
- ResetSpriteData();
- FreeAllSpritePalettes();
- StopCryAndClearCrySongs();
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- SetMainCallback2(pssData.callback);
- DestroyTask(taskId);
- }
-}
-
-static void SummaryScreenHandleKeyInput(u8 taskId)
-{
- if (gPaletteFade.active)
- return;
-
- if (gMain.newKeys & DPAD_UP)
- {
- SummaryScreenHandleUpDownInput(taskId, -1);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- SummaryScreenHandleUpDownInput(taskId, 1);
- }
- else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1)
- {
- SummaryScreenHandleLeftRightInput(taskId, -1);
- }
- else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2)
- {
- SummaryScreenHandleLeftRightInput(taskId, 1);
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- if (pssData.page >= PSS_PAGE_BATTLE_MOVES)
- {
- SummaryScreenHandleAButton(taskId);
- }
-
- if (pssData.page == PSS_PAGE_INFO)
- {
- SummaryScreenExit(taskId);
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- SummaryScreenExit(taskId);
- }
-}
-
-static void sub_809E260(u8 taskId)
-{
- if (gPaletteFade.active)
- return;
-
- if (gMain.newKeys & DPAD_UP)
- {
- gTasks[taskId].data[0] = 4;
- sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- gTasks[taskId].data[0] = 4;
- sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex);
- }
- else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1)
- {
- if (pssData.page == PSS_PAGE_CONTEST_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0))
- {
- Menu_EraseWindowRect(0, 14, 9, 18);
- }
-
- SummaryScreenHandleLeftRightInput(taskId, -1);
- }
- else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2)
- {
- if (pssData.page != pssData.lastPage)
- {
- if (pssData.page == PSS_PAGE_BATTLE_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0))
- {
- Menu_EraseWindowRect(0, 14, 9, 18);
- }
-
- SummaryScreenHandleLeftRightInput(taskId, 1);
- }
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- if (sub_809F7D0(taskId) == TRUE || pssData.selectedMoveIndex == 4)
- {
- pssData.switchMoveIndex = pssData.selectedMoveIndex;
- gSpecialVar_0x8005 = pssData.switchMoveIndex;
- SummaryScreenExit(taskId);
- }
- else
- {
- PlaySE(SE_HAZURE);
- sub_809F9D0(taskId, pssData.selectedMoveIndex);
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- pssData.switchMoveIndex = 4;
- gSpecialVar_0x8005 = 4;
- SummaryScreenExit(taskId);
- }
-}
-
-static void sub_809E3FC(u8 taskId)
-{
- if (gPaletteFade.active)
- return;
-
- if (gMain.newKeys & DPAD_UP)
- {
- gTasks[taskId].data[0] = 4;
- sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- gTasks[taskId].data[0] = 4;
- sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex);
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- if (pssData.selectedMoveIndex != 4 && !pssData.disableMoveOrderEditing)
- {
- if (!MonKnowsMultipleMoves(&pssData.loadedMon))
- {
- PlaySE(SE_HAZURE);
- }
- else
- {
- PlaySE(SE_SELECT);
-
- pssData.switchMoveIndex = pssData.selectedMoveIndex;
- sub_80A1B40(1);
- sub_80A1A30(19);
-
- gTasks[taskId].func = sub_809E534;
- }
- }
- else
- {
- PlaySE(SE_SELECT);
- sub_809EAC8(taskId);
- }
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_SELECT);
- sub_809EAC8(taskId);
- }
-
-}
-
-static bool8 MonKnowsMultipleMoves(struct Pokemon *mon)
-{
- u8 i;
-
- for (i = 1; i < 4; i++)
- {
- if (GetMonMove(mon, i))
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-static void sub_809E534(u8 taskId)
-{
- if (gMain.newKeys & DPAD_UP)
- {
- gTasks[taskId].data[0] = 3;
- sub_809E8F0(taskId, -1, &pssData.switchMoveIndex);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- gTasks[taskId].data[0] = 3;
- sub_809E8F0(taskId, 1, &pssData.switchMoveIndex);
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- sub_809E83C(taskId, 1);
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- sub_809E83C(taskId, -1);
- }
-}
-
-static void sub_809E5C4(void)
-{
- struct Pokemon *party = pssData.monList.partyMons;
- struct Pokemon *pkmn = &party[pssData.monIndex];
- u8 moveIndex1 = pssData.selectedMoveIndex;
- u8 moveIndex2 = pssData.switchMoveIndex;
-
- u16 move1 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1);
- u16 move2 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2);
- u8 move1pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex1);
- u8 move2pp = GetMonData(pkmn, MON_DATA_PP1 + moveIndex2);
- u8 ppBonuses = GetMonData(pkmn, MON_DATA_PP_BONUSES);
-
- // Calculate PP bonuses
- u8 r9 = gUnknown_08208238[moveIndex1];
- u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2);
- u8 r3 = gUnknown_08208238[moveIndex2];
- u8 r1 = (ppBonuses & r3) >> (moveIndex2 * 2);
- ppBonuses &= ~r9;
- ppBonuses &= ~r3;
- ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2));
-
- // Swap the moves
- SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2);
- SetMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1);
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex1, &move2pp);
- SetMonData(pkmn, MON_DATA_PP1 + moveIndex2, &move1pp);
- SetMonData(pkmn, MON_DATA_PP_BONUSES, &ppBonuses);
-}
-
-static void sub_809E6D8(void)
-{
- struct BoxPokemon *boxMons = pssData.monList.boxMons;
- struct BoxPokemon *pkmn = &boxMons[pssData.monIndex];
- u8 moveIndex1 = pssData.selectedMoveIndex;
- u8 moveIndex2 = pssData.switchMoveIndex;
-
- u16 move1 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1);
- u16 move2 = GetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2);
- u8 move1pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1);
- u8 move2pp = GetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2);
- u8 ppBonuses = GetBoxMonData(pkmn, MON_DATA_PP_BONUSES);
-
- // Calculate PP bonuses
- u8 r9 = gUnknown_08208238[moveIndex1];
- u8 r2 = (ppBonuses & r9) >> (moveIndex1 * 2);
- u8 r3 = gUnknown_08208238[moveIndex2];
- u8 r1 = (ppBonuses & r3) >> (moveIndex2 * 2);
- ppBonuses &= ~r9;
- ppBonuses &= ~r3;
- ppBonuses |= (r2 << (moveIndex2 * 2)) + (r1 << (moveIndex1 * 2));
-
- // Swap the moves
- SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex1, &move2);
- SetBoxMonData(pkmn, MON_DATA_MOVE1 + moveIndex2, &move1);
- SetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex1, &move2pp);
- SetBoxMonData(pkmn, MON_DATA_PP1 + moveIndex2, &move1pp);
- SetBoxMonData(pkmn, MON_DATA_PP_BONUSES, &ppBonuses);
-}
-
-void sub_809E7F0(u8 taskId)
-{
- if (sub_809F5F8())
- {
- pssData.loadGfxState = 0;
- sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex);
- gTasks[taskId].func = sub_809E3FC;
- sub_80A2078(taskId);
- }
-}
-
-static void sub_809E83C(u8 taskId, s8 b)
-{
- PlaySE(SE_SELECT);
-
- sub_80A1B1C(19);
- sub_80A1B40(0);
-
- if (b == 1)
- {
- if (pssData.selectedMoveIndex != pssData.switchMoveIndex)
- {
- if (pssData.usingPC == FALSE)
- {
- sub_809E5C4();
- }
- else
- {
- sub_809E6D8();
- }
-
- pssData.selectedMoveIndex = pssData.switchMoveIndex;
- sub_809F678(&pssData.loadedMon);
- pssData.loadGfxState = 1;
-
- gTasks[taskId].func = sub_809E7F0;
- return;
- }
- }
- else
- {
- sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex);
- }
-
- gTasks[taskId].func = sub_809E3FC;
- sub_80A2078(taskId);
-}
-
-__attribute__((naked))
-static void sub_809E8F0(/*u8 taskId, s8 direction, u8 *c*/)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x8\n\
- adds r4, r1, 0\n\
- mov r9, r2\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r0, 0x1\n\
- str r0, [sp]\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- mov r1, r9\n\
- ldrb r6, [r1]\n\
- ldr r1, _0809E944 @ =gTasks\n\
- mov r2, r8\n\
- lsls r0, r2, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x8]\n\
- movs r2, 0\n\
- lsls r4, 24\n\
- asrs r4, 24\n\
- mov r10, r4\n\
- lsls r7, r0, 24\n\
-_0809E930:\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- add r0, r10\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- asrs r1, r0, 24\n\
- cmp r0, r7\n\
- ble _0809E948\n\
- movs r6, 0\n\
- b _0809E94E\n\
- .align 2, 0\n\
-_0809E944: .4byte gTasks\n\
-_0809E948:\n\
- cmp r1, 0\n\
- bge _0809E94E\n\
- lsrs r6, r7, 24\n\
-_0809E94E:\n\
- lsls r4, r6, 24\n\
- lsrs r1, r4, 24\n\
- ldr r0, _0809EA10 @ =gSharedMem + 0x18010\n\
- str r2, [sp, 0x4]\n\
- bl GetMonMove\n\
- lsls r0, 16\n\
- adds r5, r4, 0\n\
- ldr r2, [sp, 0x4]\n\
- cmp r0, 0\n\
- bne _0809E97A\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- beq _0809E97A\n\
- lsls r0, r2, 24\n\
- movs r3, 0x80\n\
- lsls r3, 17\n\
- adds r0, r3\n\
- lsrs r2, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3\n\
- ble _0809E930\n\
-_0809E97A:\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x4\n\
- bne _0809E996\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- beq _0809E996\n\
- ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\
- adds r0, 0x7C\n\
- ldrh r0, [r0]\n\
- mov r2, r8\n\
- lsls r7, r2, 2\n\
- cmp r0, 0\n\
- beq _0809E9AC\n\
-_0809E996:\n\
- ldr r2, _0809EA18 @ =gTasks\n\
- mov r3, r8\n\
- lsls r1, r3, 2\n\
- adds r0, r1, r3\n\
- lsls r0, 3\n\
- adds r0, r2\n\
- movs r2, 0x22\n\
- ldrsh r0, [r0, r2]\n\
- adds r7, r1, 0\n\
- cmp r0, 0x1\n\
- bne _0809E9D0\n\
-_0809E9AC:\n\
- lsrs r4, r5, 24\n\
- movs r0, 0x2\n\
- adds r1, r4, 0\n\
- bl sub_80A1488\n\
- movs r0, 0x2\n\
- adds r1, r4, 0\n\
- bl sub_80A1654\n\
- ldr r1, _0809EA18 @ =gTasks\n\
- mov r3, r8\n\
- adds r0, r7, r3\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strh r1, [r0, 0x22]\n\
- movs r0, 0\n\
- str r0, [sp]\n\
-_0809E9D0:\n\
- mov r1, r9\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x4\n\
- beq _0809E9FE\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x4\n\
- bne _0809E9FE\n\
- ldr r0, _0809EA14 @ =gSharedMem + 0x18000\n\
- adds r0, 0x7C\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- bne _0809E9FE\n\
- movs r4, 0x2\n\
- negs r4, r4\n\
- lsrs r5, 24\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_80A1488\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_80A1654\n\
-_0809E9FE:\n\
- mov r2, r9\n\
- strb r6, [r2]\n\
- ldr r0, _0809EA1C @ =gSharedMem + 0x18079\n\
- cmp r9, r0\n\
- bne _0809EA20\n\
- movs r0, 0\n\
- bl sub_80A1C30\n\
- b _0809EA26\n\
- .align 2, 0\n\
-_0809EA10: .4byte gSharedMem + 0x18010\n\
-_0809EA14: .4byte gSharedMem + 0x18000\n\
-_0809EA18: .4byte gTasks\n\
-_0809EA1C: .4byte gSharedMem + 0x18079\n\
-_0809EA20:\n\
- movs r0, 0x1\n\
- bl sub_80A1C30\n\
-_0809EA26:\n\
- ldr r3, [sp]\n\
- cmp r3, 0\n\
- beq _0809EA34\n\
- ldr r0, _0809EA4C @ =gSharedMem + 0x18010\n\
- mov r1, r9\n\
- bl sub_80A0428\n\
-_0809EA34:\n\
- mov r0, r8\n\
- bl sub_80A2078\n\
- add sp, 0x8\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809EA4C: .4byte gSharedMem + 0x18010\n\
- .syntax divided\n");
-}
-
-static void SummaryScreenHandleAButton(u8 taskId)
-{
- PlaySE(SE_SELECT);
-
- pssData.selectedMoveIndex = 0;
- sub_80A1488(2, 0);
- sub_80A1654(2, 0);
-
- if (!pssData.disableMoveOrderEditing)
- {
- pssData.headerActionTextId = 5;
- PrintSummaryWindowHeaderText();
- }
-
- sub_80A16CC(0);
- sub_80A029C(&pssData.loadedMon);
- sub_80A1A30(9);
-
- gTasks[taskId].func = sub_809E3FC;
- sub_80A2078(taskId);
-}
-
-static void sub_809EAC8(u8 taskId)
-{
- if (pssData.selectedMoveIndex != 4)
- {
- sub_80A1488(-2, 0);
- sub_80A1654(-2, 0);
- }
-
- sub_80A1B1C(9);
- sub_80A16CC(1);
-
- Menu_EraseWindowRect(15, 12, 28, 13);
- Menu_EraseWindowRect(11, 15, 28, 18);
-
- pssData.headerActionTextId = 6;
- PrintSummaryWindowHeaderText();
-
- gTasks[taskId].func = SummaryScreenHandleKeyInput;
-}
-
-static void sub_809EB40(u8 taskId)
-{
- switch (gTasks[taskId].data[0])
- {
- case 5:
- sub_80A1A30(9);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_809E260;
- break;
- case 0:
- pssData.selectedMoveIndex = 0;
- if (pssData.moveToLearn != 0)
- {
- sub_80A1488(10, 0);
- sub_80A1654(10, pssData.selectedMoveIndex);
- }
-
- sub_80A16CC(0);
- sub_80A029C(&pssData.loadedMon);
- // fall through
- default:
- gTasks[taskId].data[0]++;
- break;
- }
-}
-
-static void sub_809EBC4(void)
-{
- if (pssData.page != PSS_PAGE_INFO)
- {
- DrawSummaryScreenNavigationDots();
- gBattle_BG1_X = 0x100;
-
- if (pssData.page == PSS_PAGE_SKILLS)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00;
-
- if (pssData.page == PSS_PAGE_CONTEST_MOVES)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xC00;
- }
-}
-
-void sub_809EC38(u8 taskId)
-{
- u8 minus2;
- s16 *taskData = gTasks[taskId].data;
-
- switch (taskData[0])
- {
- case 0:
- if (pssData.bgToggle == 0)
- {
- if (pssData.page != PSS_PAGE_INFO)
- {
- gBattle_BG2_X = 0x100;
- }
-
- if (pssData.page == PSS_PAGE_SKILLS)
- {
- REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0x800;
- }
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- REG_BG2CNT = (REG_BG2CNT & 0xE0FF) + 0xA00;
- }
- }
- else
- {
- if (pssData.page != PSS_PAGE_INFO)
- {
- gBattle_BG1_X = 0x100;
- }
-
- if (pssData.page == PSS_PAGE_SKILLS)
- {
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0x800;
- }
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- REG_BG1CNT = (REG_BG1CNT & 0xE0FF) + 0xA00;
- }
- }
-
- taskData[0]++;
- break;
- case 1:
- if (pssData.bgToggle == 0)
- {
- int var2 = gBattle_BG1_X - 0x20;
- gBattle_BG1_X = var2;
- if (var2 << 16 == 0)
- {
- REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2;
- REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 1;
- taskData[0]++;
- }
- }
- else
- {
- int var2 = gBattle_BG2_X - 0x20;
- gBattle_BG2_X = var2;
- if (var2 << 16 == 0)
- {
- REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 1;
- REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2;
- taskData[0]++;
- }
- }
- break;
- case 2:
- pssData.headerTextId = pssData.page + 1;
- minus2 = pssData.mode - 2;
- if (minus2 < 2)
- {
- pssData.headerActionTextId = 0;
- sub_80A029C(&pssData.loadedMon);
- sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex);
- sub_80A00F4(pssData.selectedMoveIndex);
- }
- else
- {
- if (pssData.page >= PSS_PAGE_BATTLE_MOVES && (!pssData.disableMoveOrderEditing || pssData.mode == PSS_MODE_NO_MOVE_ORDER_EDIT))
- {
- pssData.headerActionTextId = 6;
- }
- else if (pssData.page == PSS_PAGE_INFO)
- {
- pssData.headerActionTextId = 7;
- }
- else
- {
- pssData.headerActionTextId = 0;
- }
- }
-
- taskData[0]++;
- break;
- case 3:
- DrawSummaryScreenNavigationDots();
- PrintSummaryWindowHeaderText();
- taskData[0]++;
- break;
- case 4:
- sUnknown_083C1598[pssData.page](&pssData.loadedMon);
- pssData.bgToggle ^= 1;
- taskData[0]++;
- break;
- case 5:
- if (sub_8055870() != TRUE)
- {
- gTasks[taskId].func = gUnknown_03005CF0;
- }
- break;
- }
-}
-
-void sub_809EE74(u8 taskId)
-{
- int var1;
- u8 minus2;
- s16 *taskData = gTasks[taskId].data;
-
- switch (taskData[0])
- {
- case 0:
- var1 = pssData.bgToggle;
- if (var1 == 0)
- {
- gBattle_BG2_X = pssData.bgToggle;
- taskData[0]++;
- }
- else
- {
- gBattle_BG1_X = 0;
- taskData[0]++;
- }
- break;
- case 1:
- if (pssData.bgToggle == 0)
- {
- if (pssData.page == PSS_PAGE_SKILLS)
- REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0x801;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xA01;
-
- if (pssData.page == PSS_PAGE_CONTEST_MOVES)
- REG_BG2CNT = (REG_BG2CNT & 0xE0FC) + 0xC01;
-
- REG_BG1CNT = (REG_BG1CNT & 0xFFFC) + 2;
- }
- else
- {
- if (pssData.page == PSS_PAGE_SKILLS)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0x801;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xA01;
-
- if (pssData.page == PSS_PAGE_CONTEST_MOVES)
- REG_BG1CNT = (REG_BG1CNT & 0xE0FC) + 0xC01;
-
- REG_BG2CNT = (REG_BG2CNT & 0xFFFC) + 2;
- }
-
- taskData[0]++;
- break;
- case 2:
- if (pssData.bgToggle == 0)
- {
- int var2 = gBattle_BG2_X + 0x20;
- gBattle_BG2_X = var2;
- if ((var2 << 16) == 0x1000000)
- {
- taskData[0]++;
- }
- }
- else
- {
- int var2 = gBattle_BG1_X + 0x20;
- gBattle_BG1_X = var2;
- if ((var2 << 16) == 0x1000000)
- {
- taskData[0]++;
- }
- }
- break;
- case 3:
- pssData.headerTextId = pssData.page + 1;
- minus2 = pssData.mode - 2;
- if (minus2 < 2)
- {
- pssData.headerActionTextId = 0;
- sub_80A029C(&pssData.loadedMon);
- sub_80A0428(&pssData.loadedMon, &pssData.selectedMoveIndex);
- sub_80A00F4(pssData.selectedMoveIndex);
- }
- else
- {
- if (pssData.page >= PSS_PAGE_BATTLE_MOVES && (!pssData.disableMoveOrderEditing || pssData.mode == PSS_MODE_NO_MOVE_ORDER_EDIT))
- {
- pssData.headerActionTextId = 6;
- }
- else if (pssData.page == PSS_PAGE_INFO)
- {
- pssData.headerActionTextId = 7;
- }
- else
- {
- pssData.headerActionTextId = 0;
- }
- }
-
- taskData[0]++;
- break;
- case 4:
- DrawSummaryScreenNavigationDots();
- PrintSummaryWindowHeaderText();
- taskData[0]++;
- break;
- case 5:
- sUnknown_083C1598[pssData.page](&pssData.loadedMon);
- pssData.bgToggle ^= 1;
- taskData[0]++;
- break;
- case 6:
- if (sub_8055870() != TRUE)
- {
- gTasks[taskId].func = gUnknown_03005CF0;
- }
- break;
- }
-}
-
-void sub_809F0D0(u8 taskId, s8 direction)
-{
- pssData.page += direction;
- gUnknown_03005CF0 = gTasks[taskId].func;
- sub_809FBE4();
- gTasks[taskId].data[0] = 0;
-
- if (direction == -1)
- {
- gTasks[taskId].func = sub_809EC38;
- }
- else
- {
- gTasks[taskId].func = sub_809EE74;
- gTasks[taskId].func(taskId);
- }
-}
-
-static void SummaryScreenHandleLeftRightInput(u8 taskId, s8 direction)
-{
- if (!GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG))
- {
- if (direction == -1 && pssData.page == pssData.firstPage) return;
- if (direction == 1 && pssData.page == pssData.lastPage) return;
-
- if (FindTaskIdByFunc(sub_80A1334) == 0xFF && FindTaskIdByFunc(sub_80A1500) == 0xFF)
- {
- PlaySE(SE_SELECT);
- sub_809F0D0(taskId, direction);
- }
- }
-}
-
-#ifdef NONMATCHING
-static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
-{
- s8 var3;
- u8 var1 = direction;
-
- if (pssData.usingPC == TRUE)
- {
- if (pssData.page != PSS_PAGE_INFO)
- {
- var1 = (direction == 1) ? 0 : 1;
- }
- else
- {
- var1 = (direction == 1) ? 2 : 3;
- }
-
- var3 = StorageSystemGetNextMonIndex(pssData.monList.boxMons, pssData.monIndex, pssData.maxMonIndex, var1);
- }
- else
- {
- if (sub_80F9344() == TRUE && IsLinkDoubleBattle() == TRUE)
- {
- var3 = sub_809F3CC(var1);
- }
- else
- {
- var3 = sub_809F284(var1);
- }
- }
-
- if (var3 != -1)
- {
- PlaySE(SE_SELECT);
- if (GetMonStatusAndPokerus(&pssData.loadedMon))
- {
- sub_80A12D0(-2);
- }
-
- pssData.monIndex = var3;
- pssData.unk84 = gTasks[taskId].func;
- gTasks[taskId].func = sub_809F43C;
- }
-}
-#else
-__attribute__((naked))
-static void SummaryScreenHandleUpDownInput(u8 taskId, s8 direction)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- lsls r1, 24\n\
- lsrs r4, r1, 24\n\
- ldr r0, _0809F1E4 @ =gSharedMem + 0x18000\n\
- ldrb r1, [r0, 0xE]\n\
- adds r2, r0, 0\n\
- cmp r1, 0x1\n\
- bne _0809F202\n\
- ldrb r0, [r2, 0xB]\n\
- cmp r0, 0\n\
- beq _0809F1E8\n\
- lsls r1, r4, 24\n\
- asrs r1, 24\n\
- movs r4, 0x1\n\
- eors r1, r4\n\
- negs r0, r1\n\
- orrs r0, r1\n\
- lsrs r4, r0, 31\n\
- b _0809F1F4\n\
- .align 2, 0\n\
-_0809F1E4: .4byte gSharedMem + 0x18000\n\
-_0809F1E8:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r4, 0x3\n\
- cmp r0, 0x1\n\
- bne _0809F1F4\n\
- movs r4, 0x2\n\
-_0809F1F4:\n\
- ldr r0, [r2]\n\
- ldrb r1, [r2, 0x9]\n\
- ldrb r2, [r2, 0xA]\n\
- adds r3, r4, 0\n\
- bl StorageSystemGetNextMonIndex\n\
- b _0809F22C\n\
-_0809F202:\n\
- bl sub_80F9344\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _0809F224\n\
- bl IsLinkDoubleBattle\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _0809F224\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- bl sub_809F3CC\n\
- b _0809F22C\n\
-_0809F224:\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- bl sub_809F284\n\
-_0809F22C:\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- movs r1, 0x1\n\
- negs r1, r1\n\
- cmp r0, r1\n\
- beq _0809F270\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- ldr r5, _0809F278 @ =gSharedMem + 0x18010\n\
- adds r0, r5, 0\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0809F258\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- bl sub_80A12D0\n\
-_0809F258:\n\
- adds r0, r5, 0\n\
- subs r0, 0x10\n\
- strb r4, [r0, 0x9]\n\
- ldr r1, _0809F27C @ =gTasks\n\
- lsls r0, r6, 2\n\
- adds r0, r6\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- str r1, [r5, 0x74]\n\
- ldr r1, _0809F280 @ =sub_809F43C\n\
- str r1, [r0]\n\
-_0809F270:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809F278: .4byte gSharedMem + 0x18010\n\
-_0809F27C: .4byte gTasks\n\
-_0809F280: .4byte sub_809F43C\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-#ifdef NONMATCHING
-s8 sub_809F284(s8 a)
-{
- struct Pokemon *mons = pssData.monList.partyMons;
- s8 r6 = 0;
-
- if (pssData.page == PSS_PAGE_INFO)
- {
- if (a == -1 && pssData.monIndex == 0)
- return -1;
- if (a == 1 && pssData.monIndex >= pssData.maxMonIndex)
- return -1;
- return pssData.monIndex + a;
- }
- else
- {
- do
- {
- r6 += a;
- if (pssData.monIndex + r6 < 0 || pssData.monIndex + r6 > pssData.maxMonIndex)
- return -1;
- } while (GetMonData(&mons[pssData.monIndex + r6], MON_DATA_IS_EGG) != 0);
- return pssData.monIndex + r6;
- }
-}
-#else
-__attribute__((naked))
-s8 sub_809F284(s8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- ldr r0, _0809F2C0 @ =gSharedMem + 0x18000\n\
- ldr r7, [r0]\n\
- movs r6, 0\n\
- ldrb r1, [r0, 0xB]\n\
- adds r4, r0, 0\n\
- cmp r1, 0\n\
- bne _0809F2C4\n\
- lsls r0, r3, 24\n\
- asrs r2, r0, 24\n\
- movs r1, 0x1\n\
- negs r1, r1\n\
- adds r5, r0, 0\n\
- cmp r2, r1\n\
- bne _0809F2AC\n\
- ldrb r0, [r4, 0x9]\n\
- cmp r0, 0\n\
- beq _0809F2E4\n\
-_0809F2AC:\n\
- asrs r0, r5, 24\n\
- cmp r0, 0x1\n\
- bne _0809F2BA\n\
- ldrb r0, [r4, 0x9]\n\
- ldrb r1, [r4, 0xA]\n\
- cmp r0, r1\n\
- bcs _0809F2E4\n\
-_0809F2BA:\n\
- ldrb r0, [r4, 0x9]\n\
- adds r0, r3\n\
- b _0809F304\n\
- .align 2, 0\n\
-_0809F2C0: .4byte gSharedMem + 0x18000\n\
-_0809F2C4:\n\
- lsls r5, r3, 24\n\
-_0809F2C6:\n\
- lsls r0, r6, 24\n\
- asrs r0, 24\n\
- asrs r1, r5, 24\n\
- adds r0, r1\n\
- lsls r0, 24\n\
- ldr r4, _0809F2EC @ =gSharedMem + 0x18000\n\
- lsrs r6, r0, 24\n\
- asrs r0, 24\n\
- ldrb r2, [r4, 0x9]\n\
- adds r1, r0, r2\n\
- cmp r1, 0\n\
- blt _0809F2E4\n\
- ldrb r0, [r4, 0xA]\n\
- cmp r1, r0\n\
- ble _0809F2F0\n\
-_0809F2E4:\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- b _0809F308\n\
- .align 2, 0\n\
-_0809F2EC: .4byte gSharedMem + 0x18000\n\
-_0809F2F0:\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- adds r0, r7, r0\n\
- movs r1, 0x2D\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- bne _0809F2C6\n\
- ldrb r0, [r4, 0x9]\n\
- adds r0, r6\n\
-_0809F304:\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
-_0809F308:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-bool8 sub_809F310(struct Pokemon *mon)
-{
- if (GetMonData(mon, MON_DATA_SPECIES))
- {
- if (pssData.page != PSS_PAGE_INFO || !GetMonData(mon, MON_DATA_IS_EGG))
- {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-s8 sub_809F344(u8 partyIndex)
-{
- while (1)
- {
- partyIndex++;
- if (partyIndex == PARTY_SIZE)
- {
- return -1;
- }
-
- if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE)
- {
- return sDoubleBattlePartyOrder[partyIndex];
- }
- }
-}
-
-s8 sub_809F388(u8 partyIndex)
-{
- while (1)
- {
- if (partyIndex == 0)
- {
- return -1;
- }
-
- partyIndex--;
- if (sub_809F310(&gPlayerParty[sDoubleBattlePartyOrder[partyIndex]]) == TRUE)
- {
- return sDoubleBattlePartyOrder[partyIndex];
- }
- }
-}
-
-s8 sub_809F3CC(s8 direction)
-{
- u8 i;
- u8 monIndex = 0;
-
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (sDoubleBattlePartyOrder[i] == pssData.monIndex)
- {
- monIndex = i;
- break;
- }
- }
-
- if ((direction == -1 && monIndex == 0) || (direction == 1 && monIndex == 5))
- {
- return -1;
- }
-
- if (direction != 1)
- {
- return sub_809F388(monIndex);
- }
- else if (monIndex != 5)
- {
- return sub_809F344(monIndex);
- }
-
- return -1;
-}
-
-void sub_809F43C(u8 taskId)
-{
- switch (gMain.state)
- {
- case 0:
- StopCryAndClearCrySongs();
- gMain.state++;
- break;
- case 1:
- DestroySpriteAndFreeResources(&gSprites[pssData.monSpriteId]);
- gMain.state++;
- break;
- case 2:
- DestroySpriteAndFreeResources(&gSprites[pssData.ballSpriteId]);
- gMain.state++;
- break;
- case 3:
- pssData.loadGfxState = 0;
- pssData.selectedMoveIndex = 0;
- gMain.state++;
- break;
- case 4:
- sub_809F678(&pssData.loadedMon);
- if (GetMonStatusAndPokerus(&pssData.loadedMon))
- {
- sub_80A12D0(2);
- }
-
- DrawPokerusSurvivorDot(&pssData.loadedMon);
- gMain.state++;
- break;
- case 5:
- if ((pssData.monSpriteId = sub_809F6B4(&pssData.loadedMon, &pssData.loadGfxState)) != 0xFF)
- {
- pssData.loadGfxState = 0;
- if (GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG))
- {
- gBattle_BG3_X = 256;
- }
- else
- {
- gBattle_BG3_X = 0;
- }
-
- gMain.state++;
- }
- break;
- case 6:
- sub_80A1DCC(&pssData.loadedMon);
- gMain.state++;
- break;
- case 7:
- sub_80A1DE8(&pssData.loadedMon);
- gMain.state++;
- break;
- case 8:
- if (sub_809F5F8())
- {
- pssData.loadGfxState = 0;
- gMain.state++;
- }
- break;
- default:
- if (sub_8055870() != TRUE)
- {
- gMain.state = 0;
- gTasks[taskId].func = pssData.unk84;
- }
- break;
- }
-}
-
-static bool8 sub_809F5F8(void)
-{
- if (pssData.loadGfxState == 0)
- {
- sub_809FAC8(&pssData.loadedMon);
- pssData.loadGfxState++;
- return FALSE;
- }
- else
- {
- sUnknown_083C1588[pssData.page](&pssData.loadedMon);
- return TRUE;
- }
-}
-
-static void sub_809F63C(struct Pokemon *mon)
-{
- sub_809FE80();
- sub_809FC34(mon);
-}
-
-static void sub_809F650(struct Pokemon *mon)
-{
- sub_80A00A4();
- sub_809FF64(mon);
-}
-
-static void sub_809F664(struct Pokemon *mon)
-{
- sub_80A0390();
- sub_80A015C(mon);
-}
-
-static void sub_809F678(struct Pokemon *mon)
-{
- if (pssData.usingPC == FALSE)
- {
- struct Pokemon *mons = pssData.monList.partyMons;
- *mon = mons[pssData.monIndex];
- }
- else
- {
- struct BoxPokemon *mons = pssData.monList.boxMons;
- sub_803B4B4(&mons[pssData.monIndex], mon);
- }
-}
-
-static u8 sub_809F6B4(struct Pokemon *mon, u8 *b)
-{
- u16 species;
- u32 personality;
- u32 otId;
- const struct CompressedSpritePalette *palette;
-
- switch (*b)
- {
- default:
- return sub_80A1808(mon);
- case 0:
- species = GetMonData(mon, MON_DATA_SPECIES2);
- personality = GetMonData(mon, MON_DATA_PERSONALITY);
-
- HandleLoadSpecialPokePic(
- &gMonFrontPicTable[species],
- gMonFrontPicCoords[species].coords,
- gMonFrontPicCoords[species].y_offset,
- ewram_addr,
- gUnknown_081FAF4C[1],
- species,
- personality);
- *b += 1;
- return 0xFF;
- case 1:
- species = GetMonData(mon, MON_DATA_SPECIES2);
- personality = GetMonData(mon, MON_DATA_PERSONALITY);
- otId = GetMonData(mon, MON_DATA_OT_ID);
-
- palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
- LoadCompressedObjectPalette(palette);
- GetMonSpriteTemplate_803C56C(palette->tag, 1);
- *b += 1;
- return 0xFF;
- }
-}
-
-static u16 GetMonMove(struct Pokemon *mon, u8 moveId)
-{
- switch (moveId)
- {
- case 0:
- return GetMonData(mon, MON_DATA_MOVE1);
- case 1:
- return GetMonData(mon, MON_DATA_MOVE2);
- case 2:
- return GetMonData(mon, MON_DATA_MOVE3);
- default:
- return GetMonData(mon, MON_DATA_MOVE4);
- }
-}
-
-static u16 GetMonMovePP(struct Pokemon *mon, u8 moveId)
-{
- switch (moveId)
- {
- case 0:
- return GetMonData(mon, MON_DATA_PP1);
- case 1:
- return GetMonData(mon, MON_DATA_PP2);
- case 2:
- return GetMonData(mon, MON_DATA_PP3);
- default:
- return GetMonData(mon, MON_DATA_PP4);
- }
-}
-
-static bool8 sub_809F7D0(u8 taskId)
-{
- struct Pokemon mon;
- u16 move;
-
- sub_809F678(&mon);
- move = GetMonMove(&mon, pssData.selectedMoveIndex);
- if (IsHMMove(move) == TRUE && pssData.mode != PSS_MODE_UNKNOWN)
- {
- return FALSE;
- }
-
- return TRUE;
-}
-
-void sub_809F814(u8 taskId)
-{
- s16 *taskData = gTasks[taskId].data;
-
- if (taskData[14] < 4)
- {
- taskData[14]++;
- }
- else if (gMain.newKeys & DPAD_UP)
- {
- gTasks[taskId].func = sub_809E260;
- taskData[0] = 4;
- taskData[13] = 1;
- pssData.selectedMoveIndex = taskData[15];
- sub_809E8F0(taskId, -1, &pssData.selectedMoveIndex);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- gTasks[taskId].func = sub_809E260;
- taskData[0] = 4;
- taskData[13] = 1;
- pssData.selectedMoveIndex = taskData[15];
- sub_809E8F0(taskId, 1, &pssData.selectedMoveIndex);
- }
- else if ((gMain.newKeys & DPAD_LEFT) || sub_80F9284() == 1)
- {
- if (pssData.page != PSS_PAGE_BATTLE_MOVES)
- {
- if (pssData.page == PSS_PAGE_CONTEST_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0))
- {
- Menu_EraseWindowRect(0, 14, 9, 18);
- }
-
- gTasks[taskId].func = sub_809E260;
-
- SummaryScreenHandleLeftRightInput(taskId, -1);
- sub_80A1488(1, taskData[15]);
- sub_80A1654(1, taskData[15]);
- }
- }
- else if ((gMain.newKeys & DPAD_RIGHT) || sub_80F9284() == 2)
- {
- if (pssData.page != pssData.lastPage)
- {
- if (pssData.page == PSS_PAGE_BATTLE_MOVES && (pssData.selectedMoveIndex != 4 || pssData.moveToLearn != 0))
- {
- Menu_EraseWindowRect(0, 14, 9, 18);
- }
-
- gTasks[taskId].func = sub_809E260;
-
- SummaryScreenHandleLeftRightInput(taskId, 1);
- sub_80A1488(1, taskData[15]);
- sub_80A1654(1, taskData[15]);
- }
- }
- else if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
- {
- sub_80A1488(2, taskData[15]);
- sub_80A1654(2, taskData[15]);
-
- gTasks[taskId].func = sub_809E260;
- }
-}
-
-static void sub_809F9D0(u8 taskId, u8 b)
-{
- s16 *taskData = gTasks[taskId].data;
- taskData[14] = 0;
- taskData[15] = b;
-
- sub_80A1488(-2, 4);
- sub_80A1654(-2, 4);
- Menu_EraseWindowRect(11, 15, 28, 18);
- Menu_PrintText(gOtherText_CantForgetHMs, 11, 15);
-
- gTasks[taskId].func = sub_809F814;
-}
-
-u8 sub_809FA30(void)
-{
- return pssData.switchMoveIndex;
-}
-
-// void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d)
-// {
-// u16 *vramAddr = (u16 *)(VRAM + 0xF000);
-
-// vramAddr[(d * 32) + c] = (b * 0x1000) + (a * 2) + 0x200 + 0x80;
-// vramAddr[(d * 32) + c + 32] = (b * 0x1000) + (a * 2) + 0x200 + 0x81;
-// }
-__attribute__((naked))
-void GetStringCenterAlignXOffsetWithLetterSpacing(u8 a, u8 b, u8 c, u8 d)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- lsls r0, 24\n\
- lsls r1, 24\n\
- lsls r2, 24\n\
- lsls r3, 24\n\
- lsrs r2, 23\n\
- lsrs r3, 18\n\
- ldr r4, _0809FA70 @ =0x0600f000\n\
- adds r3, r4\n\
- adds r2, r3\n\
- lsrs r1, 12\n\
- lsrs r0, 23\n\
- movs r4, 0x80\n\
- lsls r4, 2\n\
- adds r3, r4, 0\n\
- adds r0, r3\n\
- adds r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, 0x80\n\
- strh r0, [r2]\n\
- adds r2, 0x40\n\
- adds r1, 0x81\n\
- strh r1, [r2]\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0809FA70: .4byte 0x0600f000\n\
- .syntax divided\n");
-}
-
-void GetStringCenterAlignXOffset(u8 a, u8 b, u8 c)
-{
- GetStringCenterAlignXOffsetWithLetterSpacing(a, 15, b, c);
-}
-
-bool8 sub_809FA94(struct Pokemon *mon)
-{
- if (!IsShiny(mon))
- {
- LoadPalette(sUnknown_083C157C, 4, 2);
- return FALSE;
- }
- else
- {
- LoadPalette(sUnknown_083C157E, 4, 2);
- return TRUE;
- }
-}
-
-static void sub_809FAC8(struct Pokemon *mon)
-{
- bool8 shinyDexNum;
- u16 dexNum;
- u8 *buffer;
-
- if (GetMonData(mon, MON_DATA_IS_EGG))
- {
- Menu_EraseWindowRect(1, 2, 4, 3);
- Menu_EraseWindowRect(3, 16, 9, 17);
- Menu_EraseWindowRect(0, 12, 11, 15);
- GetMonNickname(mon, gStringVar1);
- sub_80A1FF8(gStringVar1, 13, 3, 16);
- LoadPalette(sUnknown_083C157C, 4, 2);
- }
- else
- {
- shinyDexNum = sub_809FA94(mon);
- dexNum = SpeciesToPokedexNum(GetMonData(mon, MON_DATA_SPECIES));
- if (dexNum != 0xFFFF)
- {
- if (!shinyDexNum)
- {
- GetStringCenterAlignXOffset(2, 1, 2);
- sub_80A1F98(dexNum, 13, 3, 2, 17, 16, 1);
- }
- else
- {
- GetStringCenterAlignXOffsetWithLetterSpacing(2, 8, 1, 2);
- sub_80A1F98(dexNum, 8, 3, 2, 17, 16, 1);
- }
- }
- else
- {
- Menu_EraseWindowRect(1, 2, 4, 3);
- }
-
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer = GetMonNickname(mon, buffer);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x3C;
- buffer[3] = EOS;
- Menu_PrintText(gStringVar1, 1, 12);
-
- sub_80A0958(mon);
- }
-}
-
-static void sub_809FBE4(void)
-{
- u8 i;
-
- for (i = 0; i < 28; i++)
- {
- sub_80A1918(i, 1);
- }
-
- Menu_EraseWindowRect(11, 4, 29, 18);
-}
-
-static void sub_809FC0C(void)
-{
- Menu_PrintText(gOtherText_Type2, 11, 6);
- GetStringCenterAlignXOffset(0, 22, 4);
- GetStringCenterAlignXOffset(2, 23, 4);
-}
-
-static void sub_809FC34(struct Pokemon *mon)
-{
- u8 i;
- u8 *buffer;
- u16 friendship;
- u8 language;
- u16 species;
- u8 ability;
-
- for (i = 0; i < 5; i++)
- {
- sub_80A1918(i, 1);
- }
-
- Menu_EraseWindowRect(11, 9, 28, 12);
- if (GetMonData(mon, MON_DATA_IS_EGG))
- {
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer = StringCopy(buffer, gOtherText_OriginalTrainer);
- buffer = StringCopy(buffer, gOtherText_FiveQuestionsAndSlash);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x4E;
- buffer[3] = EOS;
- Menu_PrintText(gStringVar1, 11, 4);
-
- sub_80A1EF8(gOtherText_FiveQuestionsAndSlash, 13, 193, 32, 1);
- sub_80A198C(9, 120, 48, 0);
-
- friendship = GetMonData(mon, MON_DATA_FRIENDSHIP);
- if (friendship < 6)
- {
- Menu_PrintText(gOtherText_EggAbout, 11, 9);
- }
- else if (friendship < 11)
- {
- Menu_PrintText(gOtherText_EggSoon, 11, 9);
- }
- else if (friendship < 41)
- {
- Menu_PrintText(gOtherText_EggSomeTime, 11, 9);
- }
- else
- {
- Menu_PrintText(gOtherText_EggLongTime, 11, 9);
- }
-
- PokemonSummaryScreen_PrintEggTrainerMemo(mon, 11, 14);
- }
- else
- {
- GetMonData(mon, MON_DATA_OT_NAME, gStringVar2);
- language = GetMonData(mon, MON_DATA_LANGUAGE);
- ConvertInternationalString(gStringVar2, language);
-
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer = StringCopy(buffer, gOtherText_OriginalTrainer);
-
- if (GetMonData(mon, MON_DATA_OT_GENDER) == MALE)
- {
- buffer = sub_80A1E58(buffer, 9);
- }
- else
- {
- buffer = sub_80A1E58(buffer, 10);
- }
-
- buffer = StringCopy(buffer, gStringVar2);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x4E;
- buffer[3] = EOS;
- Menu_PrintText(gStringVar1, 11, 4);
-
- sub_80A1F98(GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF, 13, 5, 2, 193, 32, 1);
-
- species = GetMonData(mon, MON_DATA_SPECIES);
- sub_80A198C(gBaseStats[species].type1, 120, 48, 0);
- if (gBaseStats[species].type1 != gBaseStats[species].type2)
- {
- sub_80A198C(gBaseStats[species].type2, 160, 48, 1);
- }
-
- ability = GetAbilityBySpecies(GetMonData(mon, MON_DATA_SPECIES), GetMonData(mon, MON_DATA_ALT_ABILITY));
- sub_80A1FF8(gAbilityNames[ability], 13, 11, 9);
- Menu_PrintText(gAbilityDescriptions[ability], 11, 11);
-
- PokemonSummaryScreen_PrintTrainerMemo(mon, 11, 14);
- }
-}
-
-static void sub_809FE6C(struct Pokemon *mon)
-{
- sub_809FC0C();
- sub_809FC34(mon);
-}
-
-static void sub_809FE80(void)
-{
- Menu_EraseWindowRect(14, 4, 18, 5);
- Menu_EraseWindowRect(25, 4, 30, 5);
- Menu_EraseWindowRect(11, 9, 28, 12);
- Menu_EraseWindowRect(11, 14, 28, 17);
-}
-
-static void sub_809FEB8(void)
-{
- sub_80A1FF8(gOtherText_ExpPoints, 13, 11, 14);
- sub_80A1FF8(gOtherText_NextLv, 13, 11, 16);
- Menu_PrintText(gOtherText_Terminator18, 21, 16);
-
- sub_80A1F48(gOtherText_HP, 13, 11, 7, 42);
- sub_80A1F48(gOtherText_Attack, 13, 11, 9, 42);
- sub_80A1F48(gOtherText_Defense, 13, 11, 11, 42);
- sub_80A1F48(gOtherText_SpAtk, 13, 22, 7, 36);
- sub_80A1F48(gOtherText_SpDef, 13, 22, 9, 36);
- sub_80A1F48(gOtherText_Speed, 13, 22, 11, 36);
-}
-
-static void sub_809FF64(struct Pokemon *mon)
-{
- u8 i;
- u16 heldItem;
- u8 *buffer;
-
- for (i = 0; i < 5; i++)
- {
- sub_80A1918(i, 1);
- }
-
- heldItem = GetMonData(mon, MON_DATA_HELD_ITEM);
- PrintHeldItemName(heldItem, 11, 4);
- PrintNumRibbons(mon);
-
- buffer = gStringVar1;
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_EXP));
- MenuPrint_RightAligned(buffer, 29, 14);
- DrawExperienceProgressBar(mon, 23, 16);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_ATK));
- sub_8072BD8(buffer, 16, 9, 50);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_DEF));
- sub_8072BD8(buffer, 16, 11, 50);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPATK));
- sub_8072BD8(buffer, 27, 7, 18);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPDEF));
- sub_8072BD8(buffer, 27, 9, 18);
-
- ConvertIntToDecimalString(buffer, GetMonData(mon, MON_DATA_SPEED));
- sub_8072BD8(buffer, 27, 11, 18);
-
- buffer = sub_8072C14(buffer, GetMonData(mon, MON_DATA_HP), 24, 1);
- *buffer++ = CHAR_SLASH;
- buffer = sub_8072C14(buffer, GetMonData(mon, MON_DATA_MAX_HP), 48, 1);
-
- Menu_PrintTextPixelCoords(gStringVar1, 126, 56, 1);
-}
-
-static void sub_80A0090(struct Pokemon *mon)
-{
- sub_809FEB8();
- sub_809FF64(mon);
-}
-
-static void sub_80A00A4(void)
-{
- Menu_EraseWindowRect(11, 4, 19, 5);
- Menu_EraseWindowRect(16, 7, 21, 8);
- Menu_EraseWindowRect(17, 9, 21, 12);
- Menu_EraseWindowRect(27, 7, 29, 12);
- Menu_EraseWindowRect(22, 14, 28, 15);
- Menu_EraseWindowRect(23, 16, 28, 17);
-}
-
-static void sub_80A00F4(u8 a)
-{
- if (pssData.moveToLearn != 0 || a != 4)
- {
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- sub_80A1FF8(gOtherText_Power2, 13, 1, 15);
- sub_80A1FF8(gOtherText_Accuracy2, 13, 1, 17);
- }
- else
- {
- sub_80A1FF8(gOtherText_Appeal2, 13, 1, 15);
- sub_80A1FF8(gOtherText_Jam2, 13, 1, 17);
- }
- }
-}
-
-static void sub_80A015C(struct Pokemon *mon)
-{
- u8 i;
- u16 move;
- u16 curPP;
- u8 ppBonuses;
- u8 maxPP;
- u8 *buffer;
-
- for (i = 0; i < 4; i++)
- {
- move = GetMonMove(mon, i);
- curPP = GetMonMovePP(mon, i);
-
- if (move == 0)
- {
- sub_80A1918(i, 1);
- sub_80A1FF8(gOtherText_OneDash, 13, 15, (2 * i) + 4);
- Menu_PrintText(gOtherText_TwoDashes, 26, (2 * i) + 4);
- }
- else
- {
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- sub_80A198C(gBattleMoves[move].type, 87, ((2 * i) + 4) * 8, i);
- }
- else
- {
- sub_80A198C(gContestMoves[move].contestCategory + 18, 87, ((2 * i) + 4) * 8, i);
- }
-
- sub_80A1FF8(gMoveNames[move], 13, 15, (2 * i) + 4);
- GetStringCenterAlignXOffset(1, 24, (2 * i) + 4);
-
- ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
- maxPP = CalculatePPWithBonus(move, ppBonuses, i);
-
- buffer = gStringVar1;
- buffer = sub_8072C14(buffer, curPP, 14, 1);
- *buffer++ = CHAR_SLASH;
- sub_8072C14(buffer, maxPP, 32, 1);
- Menu_PrintText(gStringVar1, 25, (2 * i) + 4);
- }
- }
-}
-
-static void sub_80A029C(struct Pokemon *mon)
-{
- u8 *buffer;
- u16 move;
- u8 pp;
-
- if (pssData.moveToLearn == 0)
- {
- sub_80A1FF8(gOtherText_CancelNoTerminator, 13, 15, 12);
- return;
- }
-
- move = pssData.moveToLearn;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- sub_80A198C(gBattleMoves[move].type, 87, 96, 4);
- else
- sub_80A198C(gContestMoves[move].contestCategory + 18, 87, 96, 4);
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- sub_80A1FF8(gMoveNames[move], 10, 15, 12);
- else
- sub_80A1FF8(gMoveNames[move], 9, 15, 12);
-
- GetStringCenterAlignXOffset(1, 24, 12);
-
- buffer = gStringVar1;
- pp = gBattleMoves[move].pp;
- buffer = sub_8072C14(buffer, pp, 14, 1);
- *buffer++ = CHAR_SLASH;
- buffer = sub_8072C14(buffer, pp, 32, 1);
- Menu_PrintText(gStringVar1, 25, 12);
-}
-
-static void sub_80A0390(void)
-{
- u8 i;
-
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- Menu_EraseWindowRect(15, (i * 2) + 4, 28, (i * 2) + 5);
- }
-}
-
-u16 sub_80A03BC(struct Pokemon *mon, u8 selectedMoveIndex)
-{
- u16 move;
-
- if (selectedMoveIndex != MAX_MON_MOVES)
- {
- move = GetMonMove(mon, selectedMoveIndex);
- }
- else
- {
- if (pssData.moveToLearn != 0)
- {
- move = pssData.moveToLearn;
- }
- else
- {
- move = 0xFFFF;
- }
- }
-
- return move;
-}
-
-void sub_80A03F0(struct Pokemon *mon, u8 *selectedMoveIndex)
-{
- u16 move = sub_80A03BC(mon, *selectedMoveIndex);
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- sub_80A04CC(move);
- sub_80A057C(0xFFFF);
- }
- else
- {
- sub_80A057C(move);
- }
-}
-
-static void sub_80A0428(struct Pokemon *mon, u8 *selectedMoveIndex)
-{
- u16 move = sub_80A03BC(mon, *selectedMoveIndex);
- Menu_EraseWindowRect(11, 15, 28, 18);
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- sub_80A046C(move);
- }
- else
- {
- sub_80A0498(move);
- }
-
- sub_80A03F0(mon, selectedMoveIndex);
-}
-
-static void sub_80A046C(u16 move)
-{
- if (move == 0xFFFF) return;
-
- Menu_PrintText(gMoveDescriptions[move - 1], 11, 15);
-}
-
-static void sub_80A0498(u16 move)
-{
- if (move == 0xFFFF) return;
-
- Menu_PrintText(gContestEffectStrings[gContestMoves[move].effect], 11, 15);
-}
-
-static void sub_80A04CC(u16 move)
-{
- u8 *buffer;
-
- if (move == 0xFFFF) return;
-
- if (gBattleMoves[move].power <= 1)
- {
- buffer = gStringVar1;
- buffer = sub_8072C74(buffer, gOtherText_ThreeDashes2, 21, 1);
- Menu_PrintText(gStringVar1, 7, 15);
- }
- else
- {
- buffer = gStringVar1;
- buffer = sub_8072C14(buffer, gBattleMoves[move].power, 21, 1);
- Menu_PrintText(gStringVar1, 7, 15);
- }
-
- if (gBattleMoves[move].accuracy == 0)
- {
- buffer = gStringVar1;
- buffer = sub_8072C74(buffer, gOtherText_ThreeDashes2, 21, 1);
- Menu_PrintText(gStringVar1, 7, 17);
- }
- else
- {
- buffer = gStringVar1;
- buffer = sub_8072C14(buffer, gBattleMoves[move].accuracy, 21, 1);
- Menu_PrintText(gStringVar1, 7, 17);
- }
-}
-
-#ifdef NONMATCHING // The two vramAddr lines are non-matching.
-static void sub_80A057C(u16 move)
-{
- u8 appeal;
- u8 jam;
- u8 i;
- u16 *vramAddr = (u16 *)(VRAM + 0x6800);
-
- if (move == 0xFFFF) return;
-
- appeal = gContestEffects[gContestMoves[move].effect].appeal;
- if (appeal != 0xFF)
- {
- appeal = appeal / 10;
- }
-
- for (i = 0; i < 8; i++)
- {
- u16 tile = 0x1039;
- int and = 3;
- int offset = 0x3CC / 2;
- if (appeal != 0xFF && i < appeal)
- {
- tile = 0x103A;
- }
-
- *(&vramAddr[(i >> 2 << 5) + (i & and)] + offset) = tile;
- }
-
- if (move == 0xFFFF) return;
-
- jam = gContestEffects[gContestMoves[move].effect].jam;
- if (jam != 0xFF)
- {
- jam = jam / 10;
- }
-
- for (i = 0; i < 8; i++)
- {
- u16 tile = 0x103D;
- int and = 3;
- int offset = 0x226;
- if (jam != 0xFF && i < jam)
- {
- tile = 0x103C;
- }
-
- *(&vramAddr[(i >> 2 << 5) + (i & and)] + offset) = tile;
- }
-}
-#else
-__attribute__((naked))
-static void sub_80A057C(u16 move)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldr r0, _080A0648 @ =0x06006800\n\
- mov r8, r0\n\
- ldr r0, _080A064C @ =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080A063A\n\
- ldr r1, _080A0650 @ =gContestEffects\n\
- ldr r2, _080A0654 @ =gContestMoves\n\
- lsls r3, r5, 3\n\
- adds r0, r3, r2\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x1]\n\
- mov r10, r2\n\
- mov r9, r3\n\
- cmp r4, 0xFF\n\
- beq _080A05B8\n\
- adds r0, r4, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_080A05B8:\n\
- movs r2, 0\n\
- movs r7, 0x3\n\
- movs r6, 0xF3\n\
- lsls r6, 2\n\
-_080A05C0:\n\
- ldr r3, _080A0658 @ =0x00001039\n\
- cmp r4, 0xFF\n\
- beq _080A05CC\n\
- cmp r2, r4\n\
- bcs _080A05CC\n\
- adds r3, 0x1\n\
-_080A05CC:\n\
- lsrs r0, r2, 2\n\
- lsls r0, 5\n\
- adds r1, r2, 0\n\
- ands r1, r7\n\
- adds r1, r0\n\
- lsls r1, 1\n\
- add r1, r8\n\
- adds r1, r6\n\
- strh r3, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x7\n\
- bls _080A05C0\n\
- ldr r0, _080A064C @ =0x0000ffff\n\
- cmp r5, r0\n\
- beq _080A063A\n\
- mov r0, r9\n\
- add r0, r10\n\
- ldrb r0, [r0]\n\
- lsls r0, 2\n\
- ldr r1, _080A0650 @ =gContestEffects\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x2]\n\
- cmp r4, 0xFF\n\
- beq _080A060C\n\
- adds r0, r4, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
-_080A060C:\n\
- movs r2, 0\n\
- movs r6, 0x3\n\
- ldr r5, _080A065C @ =0x0000044c\n\
-_080A0612:\n\
- ldr r3, _080A0660 @ =0x0000103d\n\
- cmp r4, 0xFF\n\
- beq _080A061E\n\
- cmp r2, r4\n\
- bcs _080A061E\n\
- subs r3, 0x1\n\
-_080A061E:\n\
- lsrs r0, r2, 2\n\
- lsls r0, 5\n\
- adds r1, r2, 0\n\
- ands r1, r6\n\
- adds r1, r0\n\
- lsls r1, 1\n\
- add r1, r8\n\
- adds r1, r5\n\
- strh r3, [r1]\n\
- adds r0, r2, 0x1\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r2, 0x7\n\
- bls _080A0612\n\
-_080A063A:\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A0648: .4byte 0x06006800\n\
-_080A064C: .4byte 0x0000ffff\n\
-_080A0650: .4byte gContestEffects\n\
-_080A0654: .4byte gContestMoves\n\
-_080A0658: .4byte 0x00001039\n\
-_080A065C: .4byte 0x0000044c\n\
-_080A0660: .4byte 0x0000103d\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-bool8 PokemonSummaryScreen_CheckOT(struct Pokemon *mon)
-{
- u32 trainerId;
-
- if (ewram18000_3 == gEnemyParty)
- {
- u8 enemyId = GetMultiplayerId() ^ 1;
- trainerId = gLinkPlayers[enemyId].trainerId & 0xFFFF;
- StringCopy(gStringVar1, gLinkPlayers[enemyId].name);
- Text_StripExtCtrlCodes(gStringVar1);
- }
- else
- {
- trainerId = GetPlayerTrainerId() & 0xFFFF;
- StringCopy(gStringVar1, gSaveBlock2.playerName);
- }
-
- if (trainerId != (GetMonData(mon, MON_DATA_OT_ID) & 0xFFFF))
- return FALSE;
-
- GetMonData(mon, MON_DATA_OT_NAME, gStringVar2);
-
- if (!StringCompareWithoutExtCtrlCodes(gStringVar1, gStringVar2))
- return TRUE;
-
- return FALSE;
-}
-
-static void PokemonSummaryScreen_PrintEggTrainerMemo(struct Pokemon *mon, u8 left, u8 top)
-{
- u8 locationMet;
- u8 gameMet = GetMonData(mon, MON_DATA_MET_GAME);
-
- if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD))
- {
- Menu_PrintText(gOtherText_EggObtainedInTrade, left, top);
- return;
- }
-
- locationMet = GetMonData(mon, MON_DATA_MET_LOCATION);
-
- if (locationMet == 255)
- {
- // Eggs received from Pokemon Box.
- Menu_PrintText(gOtherText_EggNicePlace, left, top);
- return;
- }
-
- if (!PokemonSummaryScreen_CheckOT(mon))
- {
- Menu_PrintText(gOtherText_EggObtainedInTrade, left, top);
- return;
- }
-
- asm(""); // needed to match for some reason
-
- if (locationMet == 253)
- {
- Menu_PrintText(gOtherText_EggHotSprings, left, top);
- return;
- }
-
- Menu_PrintText(gOtherText_EggDayCare, left, top);
-}
-
-static void PokemonSummaryScreen_PrintTrainerMemo(struct Pokemon *mon, u8 left, u8 top)
-{
- u8 locationMet;
- u8 gameMet;
- u8 *ptr = gStringVar4;
- u8 nature = GetNature(mon);
-
-#if ENGLISH
- ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14);
-
- if (nature != NATURE_BOLD && nature != NATURE_GENTLE)
- {
- ptr = StringCopy(ptr, gOtherText_Terminator4);
- }
-
- ptr = StringCopy(ptr, gOtherText_Nature);
-#elif GERMAN
- ptr = StringCopy(gStringVar4, gOtherText_Nature);
- ptr = sub_80A1E9C(ptr, gNatureNames[nature], 14);
- ptr = StringCopy(ptr, gOtherText_Terminator4);
-#endif
-
- if (PokemonSummaryScreen_CheckOT(mon) == TRUE)
- {
- locationMet = GetMonData(mon, MON_DATA_MET_LOCATION);
-
- if (GetMonData(mon, MON_DATA_MET_LEVEL) == 0)
- {
- ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, 5);
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- CopyLocationName(gStringVar1, locationMet);
- ptr = sub_80A1E9C(ptr, gStringVar1, 14);
- StringCopy(ptr, gOtherText_Egg2);
- }
- else if (locationMet >= 88)
- {
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- StringCopy(ptr, gOtherText_ObtainedInTrade);
- }
- else
- {
- u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL);
-
- ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- CopyLocationName(gStringVar1, locationMet);
- ptr = sub_80A1E9C(ptr, gStringVar1, 14);
- StringCopy(ptr, gOtherText_Met);
- }
- }
- else
- {
- gameMet = GetMonData(mon, MON_DATA_MET_GAME);
-
- if (!(gameMet == VERSION_RUBY || gameMet == VERSION_SAPPHIRE || gameMet == VERSION_EMERALD))
- {
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- StringCopy(ptr, gOtherText_ObtainedInTrade);
- }
- else
- {
- locationMet = GetMonData(mon, MON_DATA_MET_LOCATION);
- if (locationMet == 0xFF)
- {
- u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL);
-
- ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- StringCopy(ptr, gOtherText_FatefulEncounter);
- }
- else if (locationMet >= 88)
- {
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- StringCopy(ptr, gOtherText_ObtainedInTrade);
- }
- else
- {
- u8 levelMet = GetMonData(mon, MON_DATA_MET_LEVEL);
-
- ptr = PokemonSummaryScreen_CopyPokemonLevel(ptr, levelMet);
- *ptr = CHAR_NEWLINE;
- ptr++;
-
- CopyLocationName(gStringVar1, locationMet);
- ptr = sub_80A1E9C(ptr, gStringVar1, 14);
- StringCopy(ptr, gOtherText_Met2);
- }
- }
- }
-
- Menu_PrintText(gStringVar4, left++, top++);
-}
-
-static void sub_80A0958(struct Pokemon *mon)
-{
- u16 species;
- u8 *buffer;
- u8 level;
-
- species = GetMonData(mon, MON_DATA_SPECIES);
-
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x11;
- buffer[2] = 0x7;
- buffer[3] = CHAR_SLASH;
- buffer += 4;
- buffer = StringCopy(buffer, gSpeciesNames[species]);
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x50;
- buffer[3] = EOS;
-
- Menu_PrintText(gStringVar1, 0, 14);
- Menu_EraseWindowRect(3, 16, 9, 17);
-
- level = GetMonData(mon, MON_DATA_LEVEL);
-
- buffer = sub_80A1E58(gStringVar1, 13);
- buffer[0] = 0x34;
- buffer += 1;
- buffer = ConvertIntToDecimalString(buffer, level);
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x20;
- buffer[3] = EOS;
-
- Menu_PrintText(gStringVar1, 3, 16);
- sub_80A0A2C(mon, 7, 16);
-}
-
-static void sub_80A0A2C(struct Pokemon *mon, u8 left, u8 top)
-{
- const u8 *genderSymbol;
- u8 var1;
- u8 bottom;
- u16 species = GetMonData(mon, MON_DATA_SPECIES2);
-
- if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F)
- {
- u8 gender = GetMonGender(mon);
- switch (gender)
- {
- default:
- bottom = top + 1;
- Menu_EraseWindowRect(left, top, left, bottom);
- return;
- case MON_MALE:
- genderSymbol = gOtherText_MaleSymbol2;
- var1 = 11;
- break;
- case MON_FEMALE:
- genderSymbol = gOtherText_FemaleSymbolAndLv;
- var1 = 12;
- break;
- }
-
- sub_80A1FF8(genderSymbol, var1, left, top);
- }
-}
-
-u8 GetNumRibbons(struct Pokemon *mon)
-{
- u8 numRibbons = GetMonData(mon, MON_DATA_COOL_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_BEAUTY_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_CUTE_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_SMART_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_TOUGH_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_CHAMPION_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_WINNING_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_VICTORY_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_ARTIST_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_EFFORT_RIBBON);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_1);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_2);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_3);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_4);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_5);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_6);
- numRibbons += GetMonData(mon, MON_DATA_GIFT_RIBBON_7);
-
- return numRibbons;
-}
-
-static void PrintNumRibbons(struct Pokemon *mon)
-{
- u8 numRibbons = GetNumRibbons(mon);
-
- if (numRibbons == 0)
- {
- StringCopy(gStringVar1, gOtherText_None);
- }
- else
- {
- u8 ribbonsStringLength;
- u8 *text;
-
- StringCopy(gStringVar1, gOtherText_Ribbons00);
- ribbonsStringLength = StringLength(gStringVar1);
-
- text = &gStringVar1[ribbonsStringLength - 2];
-
- text[0] = EXT_CTRL_CODE_BEGIN;
- text[1] = 0x14;
- text[2] = 6;
- ConvertIntToDecimalStringN(&text[3], numRibbons, 1, 2);
- }
-
- Menu_PrintText(sUnknown_083C15AE, 21, 4);
-}
-
-static void PrintHeldItemName(u16 itemId, u8 left, u8 top)
-{
- if (itemId == ITEM_ENIGMA_BERRY
- && sub_80F9344() == TRUE
- && IsLinkDoubleBattle() == TRUE
- && (pssData.monIndex == 1 || pssData.monIndex == 4 || pssData.monIndex == 5))
- {
- StringCopy(gStringVar1, ItemId_GetItem(itemId)->name);
- }
- else if (itemId == 0)
- {
- StringCopy(gStringVar1, gOtherText_None);
- }
- else
- {
- CopyItemName(itemId, gStringVar1);
- }
-
- Menu_PrintText(sUnknown_083C15B4, left, top);
-}
-
-static void DrawExperienceProgressBar(struct Pokemon *mon, u8 left, u8 top)
-{
- u32 curExperience;
- u8 level;
- u16 species;
- u8 i;
- u16 *vramAddr;
- u32 expToNextLevel = 0;
- s64 numExpProgressBarTicks = 0;
-
- curExperience = GetMonData(mon, MON_DATA_EXP);
- level = GetMonData(mon, MON_DATA_LEVEL);
- species = GetMonData(mon, MON_DATA_SPECIES);
-
- // The experience progress bar is shown as empty when the Pokemon is already level 100.
- if (level < 100)
- {
- u32 nextLevelExp;
- u32 expSinceLastLevel;
- u32 expBetweenLevels;
- u32 curLevelExperience;
-
- nextLevelExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
- expToNextLevel = nextLevelExp - curExperience;
- curLevelExperience = gExperienceTables[gBaseStats[species].growthRate][level];
- expBetweenLevels = (nextLevelExp - curLevelExperience);
- expSinceLastLevel = curExperience - curLevelExperience;
-
- // Calculate the number of 1-pixel "ticks" to illuminate in the experience progress bar.
- // There are 8 tiles that make up the bar, and each tile has 8 "ticks". Hence, the numerator
- // is multiplied by 64.
- numExpProgressBarTicks = (expSinceLastLevel * 64) / expBetweenLevels;
- if (numExpProgressBarTicks == 0 && expSinceLastLevel != 0)
- {
- // Ensure sure some exp. gain is visible in the progress bar.
- numExpProgressBarTicks = 1;
- }
- }
-
- ConvertIntToDecimalString(gStringVar1, expToNextLevel);
- MenuPrint_RightAligned(gStringVar1, left + 6, top);
-
-
- // Draw each of the 8 tiles that make up the experience progress bar.
- vramAddr = (u16 *)(VRAM + 0x4CAA);
- for (i = 0; i < 8; i++)
- {
- u16 tile;
- u16 baseTile = 0x2062;
-
- if (numExpProgressBarTicks > 7)
- {
- tile = 0x206A; // full exp. bar block
- }
- else
- {
- tile = (numExpProgressBarTicks % 8) + baseTile;
- }
-
- vramAddr[i] = tile;
-
- numExpProgressBarTicks -= 8;
- if (numExpProgressBarTicks < 0)
- {
- numExpProgressBarTicks = 0;
- }
- }
-}
-
-// Prints the text displayed in the top-left or top-right of the screen.
-// Each of the 4 summary screens displays different text.
-static void PrintSummaryWindowHeaderText(void)
-{
- u8 *buffer = gStringVar1;
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x12;
- buffer[2] = 0x2;
-
- buffer += 3;
- buffer = sub_80A1E58(buffer, 13);
- buffer = StringCopy(buffer, sPageHeaderTexts[pssData.headerTextId]);
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x58;
- buffer[3] = EOS;
-
- Menu_PrintText(gStringVar1, 0, 0);
-
- if (pssData.headerActionTextId != 0)
- {
- GetStringCenterAlignXOffset(5, 23, 0);
- GetStringCenterAlignXOffset(6, 24, 0);
- }
- else
- {
- Menu_EraseWindowRect(23, 0, 24, 1);
- }
-
- buffer = gStringVar1;
- buffer = sub_80A1E58(buffer, 13);
- buffer = StringCopy(buffer, sPageHeaderTexts[pssData.headerActionTextId]);
-
- buffer[0] = EXT_CTRL_CODE_BEGIN;
- buffer[1] = 0x13;
- buffer[2] = 0x28;
- buffer[3] = EOS;
-
- Menu_PrintText(gStringVar1, 25, 0);
-}
-
-// If the given pokemon previously had the pokerus virus, a small
-// dot will be drawn in between the pokeball and the mon's level.
-static void DrawPokerusSurvivorDot(struct Pokemon *mon)
-{
- u16 *vram1 = (u16 *)(VRAM + 0xE444);
- u16 *vram2 = (u16 *)(VRAM + 0xEC44);
-
- if (!CheckPartyPokerus(mon, 0) && CheckPartyHasHadPokerus(mon, 0))
- {
- *vram1 = 0x2C;
- *vram2 = 0x2C;
- }
- else
- {
- *vram1 = 0x081A;
- *vram2 = 0x081A;
- }
-}
-
-// Draws the 4 small navigation circles at the top of the pokemon summary screen.
-#ifdef NONMATCHING
-static void DrawSummaryScreenNavigationDots(void)
-{
- void *dest;
- u16 arr[8];
- u8 i = 0;
- struct PokemonSummaryScreenStruct *SS = (struct PokemonSummaryScreenStruct *)(gSharedMem + 0x18000);
- u16 var1 = 0x4040;
- u16 var2 = 0x404A;
-
- for (i = 0; i < 4; i++)
- {
- if (i < SS->unk75)
- {
- arr[i * 2] = var1;
- arr[(i * 2) + 1] = var1 + 1;
- }
- else if (i > SS->unk76)
- {
- arr[i * 2] = var2;
- arr[(i * 2) + 1] = var2 + 1;
- }
- else
- {
- if (i < SS->unkB)
- {
- arr[i * 2] = 0x4046;
- arr[(i * 2) + 1] = 0x4046 + 1;
- }
-
- if (i == SS->unkB)
- {
- if (i != SS->unk76)
- {
- arr[i * 2] = 0x4041;
- arr[(i * 2) + 1] = 0x4041 + 1;
- }
- else
- {
- arr[i * 2] = 0x404B;
- arr[(i * 2) + 1] = 0x404B + 1;
- }
- }
-
- if (i > SS->unkB)
- {
- if (i != SS->unk76)
- {
- arr[i * 2] = 0x4043;
- arr[(i * 2) + 1] = 0x4043 + 1;
- }
- else
- {
- arr[i * 2] = 0x4048;
- arr[(i * 2) + 1] = 0x4048 + 1;
- }
- }
- }
- }
-
- DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xE016), 16);
-
- for (i = 0; i < 8; i++)
- {
- arr[i] += 0x10;
- }
-
- DmaCopy16Defvars(3, arr, (void *)(VRAM + 0xE056), 16);
-}
-#else
-__attribute__((naked))
-static void DrawSummaryScreenNavigationDots(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x10\n\
- movs r3, 0\n\
- ldr r6, _080A0F24 @ =gSharedMem + 0x18000\n\
- adds r5, r6, 0\n\
- ldr r1, _080A0F28 @ =0x00004040\n\
- mov r8, r1\n\
- ldr r2, _080A0F2C @ =0x0000404a\n\
- mov r10, r2\n\
-_080A0F02:\n\
- adds r0, r5, 0\n\
- adds r0, 0x75\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- bcs _080A0F30\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- add r0, sp\n\
- mov r4, r8\n\
- strh r4, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- mov r7, sp\n\
- adds r0, r7, r1\n\
- strh r4, [r0]\n\
- b _080A0FE2\n\
- .align 2, 0\n\
-_080A0F24: .4byte gSharedMem + 0x18000\n\
-_080A0F28: .4byte 0x00004040\n\
-_080A0F2C: .4byte 0x0000404a\n\
-_080A0F30:\n\
- movs r0, 0x76\n\
- adds r0, r6\n\
- mov r12, r0\n\
- ldrb r1, [r0]\n\
- cmp r3, r1\n\
- bls _080A0F52\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- add r0, sp\n\
- mov r2, r10\n\
- strh r2, [r0]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- mov r4, sp\n\
- adds r0, r4, r1\n\
- strh r2, [r0]\n\
- b _080A0FE2\n\
-_080A0F52:\n\
- ldrb r4, [r5, 0xB]\n\
- cmp r3, r4\n\
- bcs _080A0F6E\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A0F88 @ =0x00004046\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0F6E:\n\
- cmp r3, r4\n\
- bne _080A0FA6\n\
- mov r0, r12\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- beq _080A0F90\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r4, sp\n\
- adds r2, r4, r0\n\
- ldr r0, _080A0F8C @ =0x00004041\n\
- b _080A0F9A\n\
- .align 2, 0\n\
-_080A0F88: .4byte 0x00004046\n\
-_080A0F8C: .4byte 0x00004041\n\
-_080A0F90:\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A0FC4 @ =0x0000404b\n\
-_080A0F9A:\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0FA6:\n\
- ldrb r0, [r5, 0xB]\n\
- cmp r3, r0\n\
- bls _080A0FE2\n\
- adds r0, r6, 0\n\
- adds r0, 0x76\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- beq _080A0FCC\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r4, sp\n\
- adds r2, r4, r0\n\
- ldr r0, _080A0FC8 @ =0x00004043\n\
- b _080A0FD6\n\
- .align 2, 0\n\
-_080A0FC4: .4byte 0x0000404b\n\
-_080A0FC8: .4byte 0x00004043\n\
-_080A0FCC:\n\
- lsls r1, r3, 1\n\
- lsls r0, r3, 2\n\
- mov r7, sp\n\
- adds r2, r7, r0\n\
- ldr r0, _080A1034 @ =0x00004048\n\
-_080A0FD6:\n\
- strh r0, [r2]\n\
- adds r1, 0x1\n\
- lsls r1, 1\n\
- add r1, sp\n\
- adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080A0FE2:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x3\n\
- bls _080A0F02\n\
- ldr r1, _080A1038 @ =0x0600e016\n\
- ldr r0, _080A103C @ =0x040000d4\n\
- mov r2, sp\n\
- str r2, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080A1040 @ =0x80000008\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- movs r3, 0\n\
-_080A0FFE:\n\
- lsls r0, r3, 1\n\
- mov r4, sp\n\
- adds r1, r4, r0\n\
- ldrh r0, [r1]\n\
- adds r0, 0x10\n\
- strh r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x7\n\
- bls _080A0FFE\n\
- ldr r1, _080A1044 @ =0x0600e056\n\
- ldr r0, _080A103C @ =0x040000d4\n\
- str r4, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080A1040 @ =0x80000008\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- add sp, 0x10\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1034: .4byte 0x00004048\n\
-_080A1038: .4byte 0x0600e016\n\
-_080A103C: .4byte 0x040000d4\n\
-_080A1040: .4byte 0x80000008\n\
-_080A1044: .4byte 0x0600e056\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-__attribute__((naked))
-void sub_80A1048(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- lsls r0, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- ldr r1, _080A10A0 @ =gTasks + 0x8\n\
- adds r6, r0, r1\n\
- ldrh r0, [r6]\n\
- ldrh r1, [r6, 0x2]\n\
- adds r0, r1\n\
- strh r0, [r6, 0x2]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bne _080A106E\n\
- b _080A1224\n\
-_080A106E:\n\
- movs r5, 0x2\n\
- ldrsh r2, [r6, r5]\n\
- ldr r0, _080A10A4 @ =0x0000024a\n\
- subs r0, r2\n\
- lsls r0, 1\n\
- ldr r1, _080A10A8 @ =gUnknown_08E73508\n\
- adds r4, r0, r1\n\
- ldr r5, _080A10AC @ =0x0600e480\n\
- lsls r2, 1\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r7, r1, 0\n\
- cmp r2, r0\n\
- bhi _080A10B4\n\
- ldr r0, _080A10B0 @ =0x040000d4\n\
- str r4, [r0]\n\
- str r5, [r0, 0x4]\n\
- lsrs r1, r2, 1\n\
- movs r2, 0x80\n\
- lsls r2, 24\n\
- orrs r1, r2\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080A10E0\n\
- .align 2, 0\n\
-_080A10A0: .4byte gTasks + 0x8\n\
-_080A10A4: .4byte 0x0000024a\n\
-_080A10A8: .4byte gUnknown_08E73508\n\
-_080A10AC: .4byte 0x0600e480\n\
-_080A10B0: .4byte 0x040000d4\n\
-_080A10B4:\n\
- ldr r3, _080A110C @ =0x040000d4\n\
- str r4, [r3]\n\
- str r5, [r3, 0x4]\n\
- ldr r0, _080A1110 @ =0x80000800\n\
- str r0, [r3, 0x8]\n\
- ldr r0, [r3, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r4, r0\n\
- adds r5, r0\n\
- ldr r1, _080A1114 @ =0xfffff000\n\
- adds r2, r1\n\
- cmp r2, r0\n\
- bhi _080A10B4\n\
- str r4, [r3]\n\
- str r5, [r3, 0x4]\n\
- lsrs r0, r2, 1\n\
- movs r1, 0x80\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- str r0, [r3, 0x8]\n\
- ldr r0, [r3, 0x8]\n\
-_080A10E0:\n\
- movs r5, 0x2\n\
- ldrsh r0, [r6, r5]\n\
- ldr r1, _080A1118 @ =0x0000026a\n\
- subs r1, r0\n\
- lsls r1, 1\n\
- adds r3, r1, r7\n\
- ldr r4, _080A111C @ =0x0600e4c0\n\
- lsls r1, r0, 1\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- cmp r1, r0\n\
- bhi _080A1120\n\
- ldr r0, _080A110C @ =0x040000d4\n\
- str r3, [r0]\n\
- str r4, [r0, 0x4]\n\
- lsrs r1, 1\n\
- movs r2, 0x80\n\
- lsls r2, 24\n\
- orrs r1, r2\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080A114C\n\
- .align 2, 0\n\
-_080A110C: .4byte 0x040000d4\n\
-_080A1110: .4byte 0x80000800\n\
-_080A1114: .4byte 0xfffff000\n\
-_080A1118: .4byte 0x0000026a\n\
-_080A111C: .4byte 0x0600e4c0\n\
-_080A1120:\n\
- ldr r2, _080A1178 @ =0x040000d4\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- ldr r0, _080A117C @ =0x80000800\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r3, r0\n\
- adds r4, r0\n\
- ldr r5, _080A1180 @ =0xfffff000\n\
- adds r1, r5\n\
- cmp r1, r0\n\
- bhi _080A1120\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- lsrs r0, r1, 1\n\
- movs r1, 0x80\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
-_080A114C:\n\
- movs r1, 0x2\n\
- ldrsh r0, [r6, r1]\n\
- ldr r1, _080A1184 @ =0x0000024a\n\
- subs r1, r0\n\
- lsls r1, 1\n\
- adds r3, r1, r7\n\
- ldr r4, _080A1188 @ =0x0600ec80\n\
- lsls r1, r0, 1\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- cmp r1, r0\n\
- bhi _080A118C\n\
- ldr r0, _080A1178 @ =0x040000d4\n\
- str r3, [r0]\n\
- str r4, [r0, 0x4]\n\
- lsrs r1, 1\n\
- movs r2, 0x80\n\
- lsls r2, 24\n\
- orrs r1, r2\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080A11B8\n\
- .align 2, 0\n\
-_080A1178: .4byte 0x040000d4\n\
-_080A117C: .4byte 0x80000800\n\
-_080A1180: .4byte 0xfffff000\n\
-_080A1184: .4byte 0x0000024a\n\
-_080A1188: .4byte 0x0600ec80\n\
-_080A118C:\n\
- ldr r2, _080A11E4 @ =0x040000d4\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- ldr r0, _080A11E8 @ =0x80000800\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r3, r0\n\
- adds r4, r0\n\
- ldr r5, _080A11EC @ =0xfffff000\n\
- adds r1, r5\n\
- cmp r1, r0\n\
- bhi _080A118C\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- lsrs r0, r1, 1\n\
- movs r1, 0x80\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
-_080A11B8:\n\
- movs r1, 0x2\n\
- ldrsh r0, [r6, r1]\n\
- ldr r1, _080A11F0 @ =0x0000026a\n\
- subs r1, r0\n\
- lsls r1, 1\n\
- adds r3, r1, r7\n\
- ldr r4, _080A11F4 @ =0x0600ecc0\n\
- lsls r1, r0, 1\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- cmp r1, r0\n\
- bhi _080A11F8\n\
- ldr r0, _080A11E4 @ =0x040000d4\n\
- str r3, [r0]\n\
- str r4, [r0, 0x4]\n\
- lsrs r1, 1\n\
- movs r2, 0x80\n\
- lsls r2, 24\n\
- orrs r1, r2\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080A1224\n\
- .align 2, 0\n\
-_080A11E4: .4byte 0x040000d4\n\
-_080A11E8: .4byte 0x80000800\n\
-_080A11EC: .4byte 0xfffff000\n\
-_080A11F0: .4byte 0x0000026a\n\
-_080A11F4: .4byte 0x0600ecc0\n\
-_080A11F8:\n\
- ldr r2, _080A12B0 @ =0x040000d4\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- ldr r0, _080A12B4 @ =0x80000800\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r3, r0\n\
- adds r4, r0\n\
- ldr r5, _080A12B8 @ =0xfffff000\n\
- adds r1, r5\n\
- cmp r1, r0\n\
- bhi _080A11F8\n\
- str r3, [r2]\n\
- str r4, [r2, 0x4]\n\
- lsrs r0, r1, 1\n\
- movs r1, 0x80\n\
- lsls r1, 24\n\
- orrs r0, r1\n\
- str r0, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
-_080A1224:\n\
- ldrb r4, [r6, 0x2]\n\
- ldrh r7, [r6, 0x2]\n\
- ldrh r0, [r6]\n\
- mov r12, r0\n\
- cmp r4, 0x9\n\
- bhi _080A1272\n\
- adds r3, r6, 0x4\n\
- ldr r2, _080A12B0 @ =0x040000d4\n\
- ldr r5, _080A12BC @ =0x80000001\n\
-_080A1236:\n\
- lsls r1, r4, 1\n\
- ldr r6, _080A12C0 @ =0x0600e480\n\
- adds r0, r1, r6\n\
- str r3, [r2]\n\
- str r0, [r2, 0x4]\n\
- str r5, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- adds r6, 0x40\n\
- adds r0, r1, r6\n\
- str r3, [r2]\n\
- str r0, [r2, 0x4]\n\
- str r5, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- ldr r6, _080A12C4 @ =0x0600ec80\n\
- adds r0, r1, r6\n\
- str r3, [r2]\n\
- str r0, [r2, 0x4]\n\
- str r5, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- ldr r0, _080A12C8 @ =0x0600ecc0\n\
- adds r1, r0\n\
- str r3, [r2]\n\
- str r1, [r2, 0x4]\n\
- str r5, [r2, 0x8]\n\
- ldr r0, [r2, 0x8]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0x9\n\
- bls _080A1236\n\
-_080A1272:\n\
- mov r1, r12\n\
- lsls r0, r1, 16\n\
- cmp r0, 0\n\
- beq _080A1286\n\
- lsls r0, r7, 16\n\
- asrs r0, 16\n\
- cmp r0, 0\n\
- ble _080A1286\n\
- cmp r0, 0x9\n\
- ble _080A12A4\n\
-_080A1286:\n\
- lsls r0, r7, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x9\n\
- ble _080A129A\n\
- ldr r0, _080A12CC @ =gOtherText_Status\n\
- movs r1, 0xD\n\
- movs r2, 0x1\n\
- movs r3, 0x12\n\
- bl sub_80A1FF8\n\
-_080A129A:\n\
- bl sub_80A1D18\n\
- mov r0, r8\n\
- bl DestroyTask\n\
-_080A12A4:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A12B0: .4byte 0x040000d4\n\
-_080A12B4: .4byte 0x80000800\n\
-_080A12B8: .4byte 0xfffff000\n\
-_080A12BC: .4byte 0x80000001\n\
-_080A12C0: .4byte 0x0600e480\n\
-_080A12C4: .4byte 0x0600ec80\n\
-_080A12C8: .4byte 0x0600ecc0\n\
-_080A12CC: .4byte gOtherText_Status\n\
- .syntax divided\n");
-}
-
-static void sub_80A12D0(s8 a)
-{
- u8 newTaskId;
-
- Menu_EraseWindowRect(1, 18, 5, 19);
- sub_80A18E4(29);
-
- newTaskId = CreateTask(sub_80A1048, 0);
- gTasks[newTaskId].data[0] = a;
-
- if (a < 0)
- {
- gTasks[newTaskId].data[1] = 10;
- }
- else
- {
- gTasks[newTaskId].data[1] = 0;
- }
-
- gTasks[newTaskId].data[2] = 1;
-}
-
-// void sub_80A1334(u8 taskId)
-// {
-// u8 i;
-// s16 var1;
-
-// gTasks[taskId].data[1] += gTasks[taskId].data[0];
-
-// var1 = 0;
-// if (gTasks[taskId].data[1] >= 0)
-// {
-// var1 = 10;
-// if (gTasks[taskId].data[1] < 10)
-// {
-// var1 = gTasks[taskId].data[1];
-// }
-// }
-
-// if (var1 > 0)
-// {
-// u8 *vramAddr = (u8 *)(VRAM + 0x5B40);
-// for (i = 0; i < 7; i++)
-// {
-// CpuSet(&gUnknown_08E73E88[(i + 13) * 64], vramAddr, var1 & 0x1FFFFF);
-// vramAddr += 64;
-// }
-// }
-
-// if (var1 <= 9)
-// {
-// u8 *vramAddr = (u8 *)(VRAM + 0x5B40);
-// for (i = 0; i < 64; i++)
-// {
-// u16 val = gTasks[taskId].data[2];
-// CpuSet(&val, vramAddr, ((10 - var1) & 0x1FFFFF) | 0x800000);
-// }
-// }
-// else
-// {
-// Menu_EraseWindowRect(0, 19, 9, 19);
-// }
-
-// if (gTasks[taskId].data[0] == 0 || gTasks[taskId].data[1] < 0)
-// {
-// if (pssData.page == PSS_PAGE_BATTLE_MOVES)
-// {
-// Menu_EraseWindowRect(0, 14, 9, 18);
-// sub_80A0958(pssData.loadedMon);
-
-// if (GetMonStatusAndPokerus(pssData.loadedMon))
-// {
-// sub_80A1FF8(gOtherText_Status, 13, 1, 18);
-// }
-
-// DestroyTask(taskId);
-// }
-// }
-
-// if (gTasks[taskId].data[1] > 9)
-// {
-// if (pssData.page == PSS_PAGE_BATTLE_MOVES)
-// {
-// sub_80A00F4(gTasks[taskId].data[3]);
-// }
-
-// sub_80A0428(pssData.loadedMon, &gTasks[taskId].data[3]);
-// DestroyTask(taskId);
-// }
-// }
-__attribute__((naked))
-static void sub_80A1334(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r0, 2\n\
- add r0, r10\n\
- lsls r0, 3\n\
- ldr r1, _080A13E4 @ =gTasks + 0x8\n\
- adds r7, r0, r1\n\
- ldrh r0, [r7]\n\
- ldrh r1, [r7, 0x2]\n\
- adds r0, r1\n\
- strh r0, [r7, 0x2]\n\
- lsls r0, 16\n\
- asrs r1, r0, 16\n\
- movs r0, 0\n\
- cmp r1, 0\n\
- blt _080A136A\n\
- movs r0, 0xA\n\
- cmp r1, 0xA\n\
- bgt _080A136A\n\
- ldrh r0, [r7, 0x2]\n\
-_080A136A:\n\
- lsls r0, 16\n\
- asrs r2, r0, 16\n\
- mov r9, r0\n\
- cmp r2, 0\n\
- ble _080A13A6\n\
- movs r0, 0xA\n\
- subs r0, r2\n\
- lsls r0, 1\n\
- ldr r1, _080A13E8 @ =0x06005b40\n\
- adds r4, r0, r1\n\
- movs r5, 0\n\
- adds r6, r2, 0\n\
- ldr r0, _080A13EC @ =0x001fffff\n\
- mov r8, r0\n\
-_080A1386:\n\
- adds r0, r5, 0\n\
- adds r0, 0xD\n\
- lsls r0, 6\n\
- ldr r1, _080A13F0 @ =gUnknown_08E73E88\n\
- adds r0, r1\n\
- adds r1, r4, 0\n\
- mov r2, r8\n\
- ands r2, r6\n\
- bl CpuSet\n\
- adds r4, 0x40\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x6\n\
- bls _080A1386\n\
-_080A13A6:\n\
- mov r1, r9\n\
- asrs r2, r1, 16\n\
- cmp r2, 0x9\n\
- bgt _080A13F4\n\
- ldr r4, _080A13E8 @ =0x06005b40\n\
- movs r5, 0\n\
- mov r8, sp\n\
- movs r0, 0xA\n\
- subs r6, r0, r2\n\
- ldr r0, _080A13EC @ =0x001fffff\n\
- ands r6, r0\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- mov r9, r0\n\
-_080A13C2:\n\
- ldrh r0, [r7, 0x4]\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- mov r2, r9\n\
- orrs r2, r6\n\
- bl CpuSet\n\
- adds r4, 0x40\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x6\n\
- bls _080A13C2\n\
- b _080A1400\n\
- .align 2, 0\n\
-_080A13E4: .4byte gTasks + 0x8\n\
-_080A13E8: .4byte 0x06005b40\n\
-_080A13EC: .4byte 0x001fffff\n\
-_080A13F0: .4byte gUnknown_08E73E88\n\
-_080A13F4:\n\
- movs r0, 0\n\
- movs r1, 0x13\n\
- movs r2, 0x9\n\
- movs r3, 0x13\n\
- bl Menu_EraseWindowRect\n\
-_080A1400:\n\
- movs r1, 0\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0\n\
- beq _080A1410\n\
- movs r1, 0x2\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0\n\
- bge _080A144A\n\
-_080A1410:\n\
- ldr r4, _080A1480 @ =gSharedMem + 0x18000\n\
- ldrb r0, [r4, 0xB]\n\
- cmp r0, 0x2\n\
- bne _080A1444\n\
- movs r0, 0\n\
- movs r1, 0xE\n\
- movs r2, 0x9\n\
- movs r3, 0x12\n\
- bl Menu_EraseWindowRect\n\
- adds r4, 0x10\n\
- adds r0, r4, 0\n\
- bl sub_80A0958\n\
- adds r0, r4, 0\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080A1444\n\
- ldr r0, _080A1484 @ =gOtherText_Status\n\
- movs r1, 0xD\n\
- movs r2, 0x1\n\
- movs r3, 0x12\n\
- bl sub_80A1FF8\n\
-_080A1444:\n\
- mov r0, r10\n\
- bl DestroyTask\n\
-_080A144A:\n\
- movs r1, 0x2\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0x9\n\
- ble _080A1470\n\
- ldr r4, _080A1480 @ =gSharedMem + 0x18000\n\
- ldrb r0, [r4, 0xB]\n\
- cmp r0, 0x2\n\
- bne _080A1460\n\
- ldrb r0, [r7, 0x6]\n\
- bl sub_80A00F4\n\
-_080A1460:\n\
- adds r0, r4, 0\n\
- adds r0, 0x10\n\
- adds r1, r7, 0x6\n\
- bl sub_80A0428\n\
- mov r0, r10\n\
- bl DestroyTask\n\
-_080A1470:\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1480: .4byte gSharedMem + 0x18000\n\
-_080A1484: .4byte gOtherText_Status\n\
- .syntax divided\n");
-}
-
-// Related to re-drawing the summary area underneath the pokemon's picture
-// in all of the summary screen tabs.
-static void sub_80A1488(s8 a, u8 b)
-{
- u8 taskId;
-
- if (pssData.page == PSS_PAGE_BATTLE_MOVES)
- {
- Menu_EraseWindowRect(0, 14, 9, 19);
- }
-
- taskId = FindTaskIdByFunc(sub_80A1334);
- if (taskId == 0xFF)
- {
- taskId = CreateTask(sub_80A1334, 0);
- }
-
- gTasks[taskId].data[0] = (s8)a;
-
- if ((s8)a < 0)
- {
- gTasks[taskId].data[1] = 10;
- }
- else
- {
- gTasks[taskId].data[1] = 0;
- }
-
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = b;
-}
-
-__attribute__((naked))
-static void sub_80A1500(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r0, 2\n\
- add r0, r10\n\
- lsls r0, 3\n\
- ldr r1, _080A15B0 @ =gTasks + 0x8\n\
- adds r7, r0, r1\n\
- ldrh r0, [r7]\n\
- ldrh r1, [r7, 0x2]\n\
- adds r0, r1\n\
- strh r0, [r7, 0x2]\n\
- lsls r0, 16\n\
- asrs r1, r0, 16\n\
- movs r0, 0\n\
- cmp r1, 0\n\
- blt _080A1536\n\
- movs r0, 0xA\n\
- cmp r1, 0xA\n\
- bgt _080A1536\n\
- ldrh r0, [r7, 0x2]\n\
-_080A1536:\n\
- lsls r0, 16\n\
- asrs r2, r0, 16\n\
- mov r9, r0\n\
- cmp r2, 0\n\
- ble _080A1572\n\
- movs r0, 0xA\n\
- subs r0, r2\n\
- lsls r0, 1\n\
- ldr r1, _080A15B4 @ =0x06006b40\n\
- adds r4, r0, r1\n\
- movs r5, 0\n\
- adds r6, r2, 0\n\
- ldr r0, _080A15B8 @ =0x001fffff\n\
- mov r8, r0\n\
-_080A1552:\n\
- adds r0, r5, 0\n\
- adds r0, 0xD\n\
- lsls r0, 6\n\
- ldr r1, _080A15BC @ =gUnknown_08E74688\n\
- adds r0, r1\n\
- adds r1, r4, 0\n\
- mov r2, r8\n\
- ands r2, r6\n\
- bl CpuSet\n\
- adds r4, 0x40\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x6\n\
- bls _080A1552\n\
-_080A1572:\n\
- mov r1, r9\n\
- asrs r2, r1, 16\n\
- cmp r2, 0x9\n\
- bgt _080A15C0\n\
- ldr r4, _080A15B4 @ =0x06006b40\n\
- movs r5, 0\n\
- mov r8, sp\n\
- movs r0, 0xA\n\
- subs r6, r0, r2\n\
- ldr r0, _080A15B8 @ =0x001fffff\n\
- ands r6, r0\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- mov r9, r0\n\
-_080A158E:\n\
- ldrh r0, [r7, 0x4]\n\
- mov r1, r8\n\
- strh r0, [r1]\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- mov r2, r9\n\
- orrs r2, r6\n\
- bl CpuSet\n\
- adds r4, 0x40\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x6\n\
- bls _080A158E\n\
- b _080A15CC\n\
- .align 2, 0\n\
-_080A15B0: .4byte gTasks + 0x8\n\
-_080A15B4: .4byte 0x06006b40\n\
-_080A15B8: .4byte 0x001fffff\n\
-_080A15BC: .4byte gUnknown_08E74688\n\
-_080A15C0:\n\
- movs r0, 0\n\
- movs r1, 0x13\n\
- movs r2, 0x9\n\
- movs r3, 0x13\n\
- bl Menu_EraseWindowRect\n\
-_080A15CC:\n\
- movs r1, 0\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0\n\
- beq _080A15DC\n\
- movs r1, 0x2\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0\n\
- bge _080A1616\n\
-_080A15DC:\n\
- ldr r4, _080A164C @ =gSharedMem + 0x18000\n\
- ldrb r0, [r4, 0xB]\n\
- cmp r0, 0x3\n\
- bne _080A1610\n\
- movs r0, 0\n\
- movs r1, 0xE\n\
- movs r2, 0x9\n\
- movs r3, 0x12\n\
- bl Menu_EraseWindowRect\n\
- adds r4, 0x10\n\
- adds r0, r4, 0\n\
- bl sub_80A0958\n\
- adds r0, r4, 0\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080A1610\n\
- ldr r0, _080A1650 @ =gOtherText_Status\n\
- movs r1, 0xD\n\
- movs r2, 0x1\n\
- movs r3, 0x12\n\
- bl sub_80A1FF8\n\
-_080A1610:\n\
- mov r0, r10\n\
- bl DestroyTask\n\
-_080A1616:\n\
- movs r1, 0x2\n\
- ldrsh r0, [r7, r1]\n\
- cmp r0, 0x9\n\
- ble _080A163C\n\
- ldr r4, _080A164C @ =gSharedMem + 0x18000\n\
- ldrb r0, [r4, 0xB]\n\
- cmp r0, 0x3\n\
- bne _080A162C\n\
- ldrb r0, [r7, 0x6]\n\
- bl sub_80A00F4\n\
-_080A162C:\n\
- adds r0, r4, 0\n\
- adds r0, 0x10\n\
- adds r1, r7, 0x6\n\
- bl sub_80A0428\n\
- mov r0, r10\n\
- bl DestroyTask\n\
-_080A163C:\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A164C: .4byte gSharedMem + 0x18000\n\
-_080A1650: .4byte gOtherText_Status\n\
- .syntax divided\n");
-}
-
-static void sub_80A1654(s8 a, u8 b)
-{
- u8 taskId;
-
- if (pssData.page == PSS_PAGE_CONTEST_MOVES)
- {
- Menu_EraseWindowRect(0, 14, 9, 19);
- }
-
- taskId = FindTaskIdByFunc(sub_80A1500);
- if (taskId == 0xFF)
- {
- taskId = CreateTask(sub_80A1500, 0);
- }
-
- gTasks[taskId].data[0] = (s8)a;
-
- if ((s8)a < 0)
- {
- gTasks[taskId].data[1] = 10;
- }
- else
- {
- gTasks[taskId].data[1] = 0;
- }
-
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = b;
-}
-
-#ifdef NONMATCHING
-static void sub_80A16CC(u8 a)
-{
- u8 i;
- u16 *vramAddr = (u16 *)(VRAM + 0x6AD4);
-
- if (a == 0)
- {
- for (i = 0; i < 20; i++)
- {
- vramAddr[i] = gUnknown_08E94510[i] + 0x1000;
- vramAddr[i + 0x20] = gUnknown_08E94510[i] + 0x1000;
- vramAddr[i + 0x40] = gUnknown_08E94550[i] + 0x1000;
- }
- }
- else
- {
- i = 0;
- for (i = 0; i < 20; i++)
- {
- vramAddr[i] = gUnknown_08E94550[i] + 0x1000;
- vramAddr[i + 0x20] = gUnknown_08E94590[i] + 0x1000;
- vramAddr[i + 0x40] = gUnknown_08E94590[i] + 0x1000;
- }
- }
-
- vramAddr = (u16 *)(VRAM + 0x5AD4);
-
- if (a == 0)
- {
- for (i = 0; i < 20; i++)
- {
- vramAddr[i] = gUnknown_08E94510[i] + 0x3000;
- vramAddr[i + 0x20] = gUnknown_08E94510[i] + 0x3000;
- vramAddr[i + 0x40] = gUnknown_08E94550[i] + 0x3000;
- }
- }
- else
- {
- for (i = 0; i < 20; i++)
- {
- vramAddr[i] = gUnknown_08E94550[i] + 0x3000;
- vramAddr[i + 0x20] = gUnknown_08E94590[i] + 0x3000;
- vramAddr[i + 0x40] = gUnknown_08E94590[i] + 0x3000;
- }
- }
-}
-#else
-__attribute__((naked))
-static void sub_80A16CC(u8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- ldr r0, _080A1724 @ =0x06006ad4\n\
- mov r12, r0\n\
- mov r1, r9\n\
- cmp r1, 0\n\
- bne _080A172C\n\
- movs r5, 0\n\
- ldr r7, _080A1728 @ =gUnknown_08E94510\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- adds r6, r0, 0\n\
- movs r1, 0x40\n\
- adds r1, r7\n\
- mov r8, r1\n\
-_080A16F4:\n\
- lsls r2, r5, 1\n\
- mov r0, r12\n\
- adds r3, r2, r0\n\
- adds r4, r2, r7\n\
- ldrh r1, [r4]\n\
- adds r0, r6, r1\n\
- strh r0, [r3]\n\
- adds r1, r3, 0\n\
- adds r1, 0x40\n\
- ldrh r4, [r4]\n\
- adds r0, r6, r4\n\
- strh r0, [r1]\n\
- adds r3, 0x80\n\
- add r2, r8\n\
- ldrh r2, [r2]\n\
- adds r0, r6, r2\n\
- strh r0, [r3]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x13\n\
- bls _080A16F4\n\
- b _080A1768\n\
- .align 2, 0\n\
-_080A1724: .4byte 0x06006ad4\n\
-_080A1728: .4byte gUnknown_08E94510\n\
-_080A172C:\n\
- movs r5, 0\n\
- ldr r6, _080A17B0 @ =gUnknown_08E94550\n\
- movs r7, 0x80\n\
- lsls r7, 5\n\
- adds r4, r7, 0\n\
- movs r0, 0x40\n\
- adds r0, r6\n\
- mov r8, r0\n\
-_080A173C:\n\
- lsls r1, r5, 1\n\
- mov r7, r12\n\
- adds r2, r1, r7\n\
- adds r0, r1, r6\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r2]\n\
- adds r3, r2, 0\n\
- adds r3, 0x40\n\
- add r1, r8\n\
- ldrh r7, [r1]\n\
- adds r0, r4, r7\n\
- strh r0, [r3]\n\
- adds r2, 0x80\n\
- ldrh r1, [r1]\n\
- adds r0, r4, r1\n\
- strh r0, [r2]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x13\n\
- bls _080A173C\n\
-_080A1768:\n\
- ldr r0, _080A17B4 @ =0x06005ad4\n\
- mov r12, r0\n\
- mov r1, r9\n\
- cmp r1, 0\n\
- bne _080A17BC\n\
- movs r5, 0\n\
- ldr r7, _080A17B8 @ =gUnknown_08E94510\n\
- movs r0, 0xC0\n\
- lsls r0, 6\n\
- adds r6, r0, 0\n\
- movs r1, 0x40\n\
- adds r1, r7\n\
- mov r8, r1\n\
-_080A1782:\n\
- lsls r2, r5, 1\n\
- mov r0, r12\n\
- adds r3, r2, r0\n\
- adds r4, r2, r7\n\
- ldrh r1, [r4]\n\
- adds r0, r6, r1\n\
- strh r0, [r3]\n\
- adds r1, r3, 0\n\
- adds r1, 0x40\n\
- ldrh r4, [r4]\n\
- adds r0, r6, r4\n\
- strh r0, [r1]\n\
- adds r3, 0x80\n\
- add r2, r8\n\
- ldrh r2, [r2]\n\
- adds r0, r6, r2\n\
- strh r0, [r3]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x13\n\
- bls _080A1782\n\
- b _080A17F8\n\
- .align 2, 0\n\
-_080A17B0: .4byte gUnknown_08E94550\n\
-_080A17B4: .4byte 0x06005ad4\n\
-_080A17B8: .4byte gUnknown_08E94510\n\
-_080A17BC:\n\
- movs r5, 0\n\
- ldr r6, _080A1804 @ =gUnknown_08E94550\n\
- movs r7, 0xC0\n\
- lsls r7, 6\n\
- adds r4, r7, 0\n\
- movs r0, 0x40\n\
- adds r0, r6\n\
- mov r8, r0\n\
-_080A17CC:\n\
- lsls r1, r5, 1\n\
- mov r7, r12\n\
- adds r2, r1, r7\n\
- adds r0, r1, r6\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r2]\n\
- adds r3, r2, 0\n\
- adds r3, 0x40\n\
- add r1, r8\n\
- ldrh r7, [r1]\n\
- adds r0, r4, r7\n\
- strh r0, [r3]\n\
- adds r2, 0x80\n\
- ldrh r1, [r1]\n\
- adds r0, r4, r1\n\
- strh r0, [r2]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x13\n\
- bls _080A17CC\n\
-_080A17F8:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1804: .4byte gUnknown_08E94550\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-u8 sub_80A1808(struct Pokemon *mon)
-{
- u16 species;
- u8 spriteId;
-
- species = GetMonData(mon, MON_DATA_SPECIES2);
- spriteId = CreateSprite(&gUnknown_02024E8C, 40, 64, 5);
-
- FreeSpriteOamMatrix(&gSprites[spriteId]);
-
- gSprites[spriteId].data[0] = species;
- gSprites[spriteId].callback = sub_80A1888;
-
- if (!IsPokeSpriteNotFlipped(species))
- {
- gSprites[spriteId].hFlip = 1;
- }
- else
- {
- gSprites[spriteId].hFlip = 0;
- }
-
- return spriteId;
-}
-
-static void sub_80A1888(struct Sprite *sprite)
-{
- if (!gPaletteFade.active)
- {
- sprite->callback = SpriteCallbackDummy;
-
- if (!GetMonData(&pssData.loadedMon, MON_DATA_IS_EGG))
- {
- PlayCry1(sprite->data[0], 0);
- }
- }
-}
-
-static void sub_80A18C4(void)
-{
- u8 i;
-
- for (i = 0; i < 30; i++)
- {
- ewram1A000[i] = 0xFF;
- }
-}
-
-static void sub_80A18E4(u8 a)
-{
- if (ewram1A000[a] != 0xFF)
- {
- DestroySprite(&gSprites[ewram1A000[a]]);
- ewram1A000[a] = 0xFF;
- }
-}
-
-static void sub_80A1918(u8 a, u8 invisible)
-{
- gSprites[ewram1A000[a]].invisible = invisible;
-}
-
-static void sub_80A1950(void)
-{
- u8 i;
-
- for (i = 0; i < 5; i++)
- {
- if (ewram1A000[i] == 0xFF)
- {
- ewram1A000[i] = CreateSprite(&sSpriteTemplate_83C11C0, 0, 0, 2);
- }
-
- sub_80A1918(i, 1);
- }
-}
-
-static void sub_80A198C(u8 animNum, u8 x, u8 y, u8 d)
-{
- StartSpriteAnim(&gSprites[ewram1A000[d]], animNum);
-
- gSprites[ewram1A000[d]].oam.paletteNum = sUnknown_PaletteNums[animNum];
- gSprites[ewram1A000[d]].pos1.x = x + 16;
- gSprites[ewram1A000[d]].pos1.y = y + 8;
-
- sub_80A1918(d, 0);
-}
-
-static void sub_80A1A30(u8 a)
-{
- u8 i;
- s16 x;
- u8 subPriority = 0;
-
- if (pssData.page >= PSS_PAGE_BATTLE_MOVES)
- {
- if (a == 9)
- {
- subPriority = 1;
- }
-
- for (i = 0; i < 10; i++)
- {
- x = (i * 16) + 0x58;
- ewram1A000[a + i] = CreateSprite(&sSpriteTemplate_83C1280, x, 40, subPriority);
-
- if (i == 0)
- {
- StartSpriteAnim(&gSprites[ewram1A000[a]], 4);
- }
- else if (i == 9)
- {
- StartSpriteAnim(&gSprites[ewram1A000[a + i]], 5);
- }
- else
- {
- StartSpriteAnim(&gSprites[ewram1A000[a + i]], 6);
- }
-
- gSprites[ewram1A000[a + i]].callback = sub_80A1BC0;
- gSprites[ewram1A000[a + i]].data[0] = a;
- gSprites[ewram1A000[a + i]].data[1] = 0;
- }
- }
-}
-
-static void sub_80A1B1C(u8 a)
-{
- u8 i;
-
- for (i = 0; i < 10; i++)
- {
- sub_80A18E4(a + i);
- }
-}
-
-static void sub_80A1B40(u8 a)
-{
- u8 i;
- a *= 3;
-
- StartSpriteAnim(&gSprites[ewram1A000[9]], a + 4);
-
- for (i = 0; i < 8; i++)
- {
- StartSpriteAnim(&gSprites[ewram1A000[10 + i]], a + 6);
- }
-
- StartSpriteAnim(&gSprites[ewram1A000[18]], a + 5);
-}
-
-static void sub_80A1BC0(struct Sprite *sprite)
-{
- u8 animNum = sprite->animNum - 4;
- if (animNum < 3)
- {
- sprite->data[1] = (sprite->data[1] + 1) & 0x1F;
-
- if (sprite->data[1] > 24)
- {
- sprite->invisible = 1;
- }
- else
- {
- sprite->invisible = 0;
- }
- }
- else
- {
- sprite->data[1] = 0;
- sprite->invisible = 0;
- }
-
- if (sprite->data[0] == 9)
- {
- sprite->pos2.y = pssData.selectedMoveIndex * 16;
- }
- else
- {
- sprite->pos2.y = pssData.switchMoveIndex * 16;
- }
-}
-
-__attribute__((naked))
-void sub_80A1C30(u8 a)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 25\n\
- lsrs r3, r0, 24\n\
- adds r4, r3, 0\n\
- adds r0, r3, 0\n\
- adds r0, 0xA\n\
- cmp r3, r0\n\
- bge _080A1C82\n\
- ldr r5, _080A1C88 @ =gSprites\n\
- movs r7, 0x5\n\
- negs r7, r7\n\
- ldr r6, _080A1C8C @ =gSharedMem + 0x1A009\n\
-_080A1C50:\n\
- adds r2, r3, r6\n\
- ldrb r1, [r2]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r5\n\
- movs r1, 0\n\
- strh r1, [r0, 0x30]\n\
- ldrb r0, [r2]\n\
- lsls r1, r0, 4\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r5\n\
- adds r1, 0x3E\n\
- ldrb r2, [r1]\n\
- adds r0, r7, 0\n\
- ands r0, r2\n\
- strb r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- adds r0, r4, 0\n\
- adds r0, 0xA\n\
- cmp r3, r0\n\
- blt _080A1C50\n\
-_080A1C82:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1C88: .4byte gSprites\n\
-_080A1C8C: .4byte gSharedMem + 0x1A009\n\
- .syntax divided\n");
-}
-
-u8 pokemon_ailments_get_primary(u32 status)
-{
- if (status & 0x88)
- return 1;
- if (status & 0x40)
- return 2;
- if (status & 0x7)
- return 3;
- if (status & 0x20)
- return 4;
- if (status & 0x10)
- return 5;
-
- return 0;
-}
-
-u8 GetMonStatusAndPokerus(struct Pokemon *mon)
-{
- u8 statusAilment;
-
- if (GetMonData(mon, MON_DATA_HP) == 0)
- {
- return 7;
- }
-
- statusAilment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS));
- if (statusAilment == 0)
- {
- if (!CheckPartyPokerus(mon, 0))
- {
- return 0;
- }
- else
- {
- return 6;
- }
- }
-
- return statusAilment;
-}
-
-#ifdef NONMATCHING
-void sub_80A1D18(void)
-{
- struct Pokemon mon;
- u8 statusAndPkrs;
- u8 statusAndPkrs2;
-
- sub_809F678(&mon);
- statusAndPkrs = GetMonStatusAndPokerus(&mon);
-
- if (statusAndPkrs)
- {
- statusAndPkrs2 = statusAndPkrs - 1;
-
- if (ewram1A000[29] == 0xFF)
- {
- ewram1A000[29] = CreateSprite(&sSpriteTemplate_83C1304, 64, 152, 0);
- }
- }
- else
- {
- sub_80A18E4(29);
- return;
- }
-
- StartSpriteAnim(&gSprites[ewram1A000[29]], statusAndPkrs2);
-}
-#else
-__attribute__((naked))
-void sub_80A1D18(void)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- sub sp, 0x64\n\
- mov r0, sp\n\
- bl sub_809F678\n\
- mov r0, sp\n\
- bl GetMonStatusAndPokerus\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0\n\
- beq _080A1D58\n\
- subs r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r4, _080A1D50 @ =gSharedMem + 0x1A01D\n\
- ldrb r0, [r4]\n\
- cmp r0, 0xFF\n\
- bne _080A1D60\n\
- ldr r0, _080A1D54 @ =sSpriteTemplate_83C1304\n\
- movs r1, 0x40\n\
- movs r2, 0x98\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- strb r0, [r4]\n\
- b _080A1D60\n\
- .align 2, 0\n\
-_080A1D50: .4byte gSharedMem + 0x1A01D\n\
-_080A1D54: .4byte sSpriteTemplate_83C1304\n\
-_080A1D58:\n\
- movs r0, 0x1D\n\
- bl sub_80A18E4\n\
- b _080A1D74\n\
-_080A1D60:\n\
- ldr r0, _080A1D7C @ =gSharedMem + 0x1A01D\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, _080A1D80 @ =gSprites\n\
- adds r0, r1\n\
- adds r1, r5, 0\n\
- bl StartSpriteAnim\n\
-_080A1D74:\n\
- add sp, 0x64\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080A1D7C: .4byte gSharedMem + 0x1A01D\n\
-_080A1D80: .4byte gSprites\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
-
-static void sub_80A1D84(struct Pokemon *mon)
-{
- struct Sprite *sprite;
-
- sprite = sub_80F7920(0x7533, 0x7533, sSummaryScreenMonMarkingsPalette);
- gUnknown_020384F4 = sprite;
-
- if (sprite != NULL)
- {
- u8 markings = GetMonData(mon, MON_DATA_MARKINGS);
- StartSpriteAnim(sprite, markings);
-
- gUnknown_020384F4->pos1.x = 60;
- gUnknown_020384F4->pos1.y = 26;
- }
-}
-
-static void sub_80A1DCC(struct Pokemon *mon)
-{
- DestroySprite(gUnknown_020384F4);
- sub_80A1D84(mon);
-}
-
-static void sub_80A1DE8(struct Pokemon *mon)
-{
- u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL));
- sub_80478DC(ball);
-
- pssData.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0);
- gSprites[pssData.ballSpriteId].callback = SpriteCallbackDummy;
- gSprites[pssData.ballSpriteId].oam.priority = 3;
-}
-
-static u8 *sub_80A1E58(u8 *text, u8 id)
-{
- if (id != 0xFF)
- {
- const u8 *ptr = sUnknown_083C15BC;
- while (*ptr != 0xFF && *ptr != id)
- {
- ptr += 4;
- }
-
- text[0] = EXT_CTRL_CODE_BEGIN;
- text[1] = 4;
- text[2] = ptr[1];
- text[3] = ptr[2];
- text[4] = ptr[3];
-
- text += 5;
- }
-
- return text;
-}
-
-u8 *sub_80A1E9C(u8 *dest, const u8 *src, u8 id)
-{
- u8 arr[3];
-
- Menu_GetTextColors(&arr[0], &arr[1], &arr[2]);
-
- dest = sub_80A1E58(dest, id);
- dest = StringCopy(dest, src);
-
- if (id != 0xFF)
- {
- dest[0] = EXT_CTRL_CODE_BEGIN;
- dest[1] = 4;
- dest[2] = arr[0];
- dest[3] = arr[1];
- dest[4] = arr[2];
- dest[5] = 0xFF;
-
- dest += 5;
- }
-
- return dest;
-}
-
-static void sub_80A1EF8(const u8 *text, u8 id, u8 left, u16 top, s32 e)
-{
- sub_80A1E9C(gStringVar4, text, id);
- Menu_PrintTextPixelCoords(gStringVar4, left, top, (bool8)e);
-}
-
-static void sub_80A1F48(const u8 *text, u8 id, u8 c, u8 d, u16 e)
-{
- sub_80A1E9C(gStringVar4, text, id);
- sub_8072BD8(gStringVar4, c, d, e);
-}
-
-static void sub_80A1F98(s32 value, u8 id, u8 n, u8 mode, u8 left, u16 top, s32 e)
-{
- ConvertIntToDecimalStringN(gStringVar1, value, mode, n);
- sub_80A1EF8(gStringVar1, id, left, top, e);
-}
-
-static void sub_80A1FF8(const u8 *text, u8 id, u8 left, u8 top)
-{
- sub_80A1E9C(gStringVar4, text, id);
- Menu_PrintText(gStringVar4, left, top);
-}
-
-u8 *PokemonSummaryScreen_CopyPokemonLevel(u8 *dest, u8 level)
-{
- u8 buffer[12];
-
- dest[0] = 0x34;
- dest++;
-
- if (level == 0)
- {
- level = 5;
- }
-
- ConvertIntToDecimalString(buffer, level);
- dest = sub_80A1E9C(dest, buffer, 14);
- dest = StringCopy(dest, gOtherText_Comma);
-
- return dest;
-}
-
-static void sub_80A2078(int taskId)
-{
- gUnknown_03005CF0 = gTasks[taskId].func;
- gTasks[taskId].func = sub_80A20A8;
- gTasks[taskId].func((u8)taskId);
-}
-
-static void sub_80A20A8(u8 taskId)
-{
- if (sub_8055870() != TRUE)
- {
- gTasks[taskId].func = gUnknown_03005CF0;
- }
-}