summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_pyramid.c248
-rw-r--r--src/battle_script_commands.c4
-rw-r--r--src/berry_blender.c2
-rw-r--r--src/clear_save_data_screen.c2
-rw-r--r--src/contest_ai.c1756
-rw-r--r--src/data/text/nature_names.h54
-rw-r--r--src/egg_hatch.c2
-rw-r--r--src/event_data.c8
-rw-r--r--src/evolution_scene.c8
-rw-r--r--src/field_special_scene.c22
-rwxr-xr-xsrc/item_menu.c2
-rw-r--r--src/learn_move.c833
-rw-r--r--src/main_menu.c4
-rw-r--r--src/menu.c8
-rw-r--r--src/menu_helpers.c2
-rw-r--r--src/player_pc.c4
-rw-r--r--src/pokeblock.c2
-rw-r--r--src/pokemon.c1256
-rw-r--r--src/pokemon_summary_screen.c4012
-rw-r--r--src/secret_base.c2
-rw-r--r--src/slot_machine.c2
-rw-r--r--src/start_menu.c6
-rw-r--r--src/starter_choose.c2
-rw-r--r--src/unk_pokedex_area_screen_helper.c75
-rw-r--r--src/wallclock.c2
25 files changed, 6265 insertions, 2053 deletions
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
new file mode 100644
index 000000000..f9cc48a9a
--- /dev/null
+++ b/src/battle_pyramid.c
@@ -0,0 +1,248 @@
+#include "global.h"
+#include "main.h"
+#include "battle_controllers.h"
+#include "bg.h"
+#include "field_effect.h"
+#include "field_weather.h"
+#include "gpu_regs.h"
+#include "malloc.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "task.h"
+#include "constants/rgb.h"
+
+EWRAM_DATA struct
+{
+ u32 unk0;
+ u8 filler4[0x804 - 0x4];
+ u8 unk804[11];
+ u8 unk80F[5];
+ u8 unk814;
+ u8 filler815;
+ s8 unk816;
+ u8 filler817[0x984 - 0x817];
+ u16 unk984;
+ u8 filler986[0x98C - 0x986];
+} *gUnknown_0203CF2C = NULL;
+EWRAM_DATA struct
+{
+ void (*callback)(void);
+ u8 unk4;
+ u16 unk6;
+ u16 unk8;
+} gUnknown_0203CF30 = {0};
+
+extern const struct BgTemplate gUnknown_0861F2B4[3];
+
+void sub_81C4F98(u8 a0, void (*callback)(void));
+void sub_81C4F44(u8 taskId);
+void sub_81C504C(void);
+bool8 sub_81C5078(void);
+void sub_81C51DC(void);
+bool8 sub_81C5238(void);
+void sub_81C5314(void);
+void sub_81C5674(void);
+void sub_81C56F8(void);
+void sub_81C5924(void);
+void sub_81C59BC(void);
+void sub_81C5A20(void);
+void sub_81C6BD8(void);
+void sub_81C6EF4(void);
+void sub_81C700C(void);
+
+void sub_81C4EEC(void)
+{
+ gUnknown_0203CF30.unk6 = 0;
+ gUnknown_0203CF30.unk8 = 0;
+}
+
+void sub_81C4EFC(void)
+{
+ sub_81C4F98(0, CB2_ReturnToFieldWithOpenMenu);
+}
+
+void sub_81C4F10(void)
+{
+ sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2);
+}
+
+void sub_81C4F24(void)
+{
+ ScriptContext2_Enable();
+ FadeScreen(1, 0);
+ CreateTask(sub_81C4F44, 10);
+}
+
+void sub_81C4F44(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ gFieldCallback2 = hm_add_c3_without_phase_2;
+ sub_81C4F98(3, CB2_ReturnToField);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_81C4F84(void)
+{
+ sub_81C4F98(4, gUnknown_0203CF30.callback);
+}
+
+void sub_81C4F98(u8 a0, void (*callback)(void))
+{
+ gUnknown_0203CF2C = AllocZeroed(sizeof(*gUnknown_0203CF2C));
+
+ if (a0 != 4)
+ {
+ gUnknown_0203CF30.unk4 = a0;
+ }
+
+ if (callback != NULL)
+ {
+ gUnknown_0203CF30.callback = callback;
+ }
+
+ gUnknown_0203CF2C->unk0 = 0;
+ gUnknown_0203CF2C->unk814 = -1;
+ gUnknown_0203CF2C->unk816 = -1;
+
+ memset(gUnknown_0203CF2C->unk804, 0xFF, sizeof(gUnknown_0203CF2C->unk804));
+ memset(gUnknown_0203CF2C->unk80F, 0xFF, sizeof(gUnknown_0203CF2C->unk80F));
+
+ SetMainCallback2(sub_81C504C);
+}
+
+void sub_81C501C(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ do_scheduled_bg_tilemap_copies_to_vram();
+ UpdatePaletteFade();
+}
+
+void sub_81C5038(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void sub_81C504C(void)
+{
+ while (sub_81221EC() != TRUE && sub_81C5078() != TRUE && sub_81221AC() != TRUE);
+}
+
+bool8 sub_81C5078(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankHBlankCallbacksToNull();
+ clear_scheduled_bg_copies_to_vram();
+ gMain.state++;
+ break;
+ case 1:
+ ScanlineEffect_Stop();
+ gMain.state++;
+ break;
+ case 2:
+ FreeAllSpritePalettes();
+ gMain.state++;
+ break;
+ case 3:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gMain.state++;
+ break;
+ case 4:
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 5:
+ if (!sub_81221AC())
+ {
+ ResetTasks();
+ }
+ gMain.state++;
+ break;
+ case 6:
+ sub_81C51DC();
+ gUnknown_0203CF2C->unk984 = 0;
+ gMain.state++;
+ break;
+ case 7:
+ if (sub_81C5238())
+ {
+ gMain.state++;
+ }
+ break;
+ case 8:
+ sub_81C6BD8();
+ gMain.state++;
+ break;
+ case 9:
+ sub_81C5924();
+ sub_81C59BC();
+ sub_81C5A20();
+ gMain.state++;
+ break;
+ case 10:
+ sub_81C5314();
+ gMain.state++;
+ break;
+ case 11:
+ sub_81C56F8();
+ gMain.state++;
+ break;
+ case 12:
+ sub_81C6EF4();
+ gMain.state++;
+ break;
+ case 13:
+ sub_81C5674();
+ gMain.state++;
+ break;
+ case 14:
+ sub_81C700C();
+ gMain.state++;
+ break;
+ case 15:
+ BlendPalettes(0xFFFFFFFF, 0x10, 0);
+ gMain.state++;
+ break;
+ case 16:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gMain.state++;
+ break;
+ default:
+ SetVBlankCallback(sub_81C5038);
+ SetMainCallback2(sub_81C501C);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_81C51DC(void)
+{
+ ResetVramOamAndBgCntRegs();
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4));
+ SetBgTilemapBuffer(2, gUnknown_0203CF2C->filler4);
+ ResetAllBgsCoordinates();
+ schedule_bg_copy_tilemap_to_vram(2);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_OBJ_ON);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 7f5a4fb48..b13727a12 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -55,7 +55,7 @@ extern const u8* const gBattleScriptsForMoveEffects[];
// functions
extern void sub_81A5718(u8 battlerId); // battle frontier 2
extern void sub_81A56B4(void); // battle frontier 2
-extern void sub_81BFA38(struct Pokemon* party, u8 monPartyId, u8 monCount, void (*callback)(void), u16 move); // pokemon summary screen
+extern void ShowSelectMovePokemonSummaryScreen(struct Pokemon* party, u8 monPartyId, u8 monCount, void (*callback)(void), u16 move); // pokemon summary screen
extern u8 sub_81C1B94(void); // pokemon summary screen
extern void sub_81D388C(struct Pokemon* mon, void* statStoreLocation); // pokenav.s
extern void sub_81D3640(u8 arg0, void* statStoreLocation1, void* statStoreLocation2, u8 arg3, u8 arg4, u8 arg5); // pokenav.s
@@ -5732,7 +5732,7 @@ static void atk5A_yesnoboxlearnmove(void)
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
- sub_81BFA38(gPlayerParty, gBattleStruct->expGetterMonId, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gBattleStruct->expGetterMonId, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
gBattleScripting.learnMoveState++;
}
break;
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 257c7233f..46b0f76ad 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -2436,7 +2436,7 @@ static void CB2_HandleBlenderEndGame(void)
sBerryBlenderData->gameEndState++;
break;
case 10:
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 1:
case -1:
diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c
index 266ea8250..5c1f7db20 100644
--- a/src/clear_save_data_screen.c
+++ b/src/clear_save_data_screen.c
@@ -86,7 +86,7 @@ static void Task_DoClearSaveDataScreenYesNo(u8 taskId)
static void Task_ClearSaveDataScreenYesNoChoice(u8 taskId)
{
- switch(ProcessMenuInputNoWrap_())
+ switch(Menu_ProcessInputNoWrap_())
{
case 0:
FillWindowPixelBuffer(0, 17);
diff --git a/src/contest_ai.c b/src/contest_ai.c
new file mode 100644
index 000000000..3324ddf87
--- /dev/null
+++ b/src/contest_ai.c
@@ -0,0 +1,1756 @@
+#include "global.h"
+#include "contest.h"
+#include "random.h"
+#include "contest_ai.h"
+#include "contest_effect.h"
+
+extern u16 gContestMonConditions[];
+
+extern const u8 *gAIScriptPtr;
+extern const u8 *gContestAIs[];
+
+static void ContestAICmd_unk_00(void);
+static void ContestAICmd_get_turn(void);
+static void ContestAICmd_unk_02(void);
+static void ContestAICmd_unk_03(void);
+static void ContestAICmd_unk_04(void);
+static void ContestAICmd_unk_05(void);
+static void ContestAICmd_get_excitement(void);
+static void ContestAICmd_unk_07(void);
+static void ContestAICmd_unk_08(void);
+static void ContestAICmd_unk_09(void);
+static void ContestAICmd_unk_0A(void);
+static void ContestAICmd_get_user_order(void);
+static void ContestAICmd_unk_0C(void);
+static void ContestAICmd_unk_0D(void);
+static void ContestAICmd_unk_0E(void);
+static void ContestAICmd_unk_0F(void);
+static void ContestAICmd_get_user_condition_maybe(void);
+static void ContestAICmd_unk_11(void);
+static void ContestAICmd_unk_12(void);
+static void ContestAICmd_unk_13(void);
+static void ContestAICmd_unk_14(void);
+static void ContestAICmd_unk_15(void);
+static void ContestAICmd_unk_16(void);
+static void ContestAICmd_unk_17(void);
+static void ContestAICmd_unk_18(void);
+static void ContestAICmd_unk_19(void);
+static void ContestAICmd_unk_1A(void);
+static void ContestAICmd_unk_1B(void);
+static void ContestAICmd_unk_1C(void);
+static void ContestAICmd_unk_1D(void);
+static void ContestAICmd_unk_1E(void);
+static void ContestAICmd_get_contest_type(void);
+static void ContestAICmd_unk_20(void);
+static void ContestAICmd_unk_21(void);
+static void ContestAICmd_get_move_excitement(void);
+static void ContestAICmd_unk_23(void);
+static void ContestAICmd_unk_24(void);
+static void ContestAICmd_unk_25(void);
+static void ContestAICmd_unk_26(void);
+static void ContestAICmd_get_move_effect(void);
+static void ContestAICmd_unk_28(void);
+static void ContestAICmd_unk_29(void);
+static void ContestAICmd_get_move_effect_type(void);
+static void ContestAICmd_unk_2B(void);
+static void ContestAICmd_unk_2C(void);
+static void ContestAICmd_check_move_has_highest_appeal(void);
+static void ContestAICmd_unk_2E(void);
+static void ContestAICmd_unk_2F(void);
+static void ContestAICmd_unk_30(void);
+static void ContestAICmd_unk_31(void);
+static void ContestAICmd_unk_32(void);
+static void ContestAICmd_unk_33(void);
+static void ContestAICmd_unk_34(void);
+static void ContestAICmd_unk_35(void);
+static void ContestAICmd_unk_36(void);
+static void ContestAICmd_unk_37(void);
+static void ContestAICmd_unk_38(void);
+static void ContestAICmd_unk_39(void);
+static void ContestAICmd_unk_3A(void);
+static void ContestAICmd_get_move_used_count(void);
+static void ContestAICmd_unk_3C(void);
+static void ContestAICmd_unk_3D(void);
+static void ContestAICmd_unk_3E(void);
+static void ContestAICmd_unk_3F(void);
+static void ContestAICmd_check_combo_starter(void);
+static void ContestAICmd_unk_41(void);
+static void ContestAICmd_unk_42(void);
+static void ContestAICmd_check_combo_finisher(void);
+static void ContestAICmd_unk_44(void);
+static void ContestAICmd_unk_45(void);
+static void ContestAICmd_check_would_finish_combo(void);
+static void ContestAICmd_unk_47(void);
+static void ContestAICmd_unk_48(void);
+static void ContestAICmd_get_condition(void);
+static void ContestAICmd_unk_4A(void);
+static void ContestAICmd_unk_4B(void);
+static void ContestAICmd_unk_4C(void);
+static void ContestAICmd_unk_4D(void);
+static void ContestAICmd_get_used_combo_starter(void);
+static void ContestAICmd_unk_4F(void);
+static void ContestAICmd_unk_50(void);
+static void ContestAICmd_unk_51(void);
+static void ContestAICmd_unk_52(void);
+static void ContestAICmd_check_can_participate(void);
+static void ContestAICmd_unk_54(void);
+static void ContestAICmd_unk_55(void);
+static void ContestAICmd_get_val_812A188(void);
+static void ContestAICmd_unk_57(void);
+static void ContestAICmd_unk_58(void);
+static void ContestAICmd_unk_59(void);
+static void ContestAICmd_unk_5A(void);
+static void ContestAICmd_unk_5B(void);
+static void ContestAICmd_unk_5C(void);
+static void ContestAICmd_unk_5D(void);
+static void ContestAICmd_unk_5E(void);
+static void ContestAICmd_unk_5F(void);
+static void ContestAICmd_unk_60(void);
+static void ContestAICmd_unk_61(void);
+static void ContestAICmd_unk_62(void);
+static void ContestAICmd_unk_63(void);
+static void ContestAICmd_unk_64(void);
+static void ContestAICmd_unk_65(void);
+static void ContestAICmd_unk_66(void);
+static void ContestAICmd_unk_67(void);
+static void ContestAICmd_unk_68(void);
+static void ContestAICmd_unk_69(void);
+static void ContestAICmd_unk_6A(void);
+static void ContestAICmd_unk_6B(void);
+static void ContestAICmd_unk_6C(void);
+static void ContestAICmd_unk_6D(void);
+static void ContestAICmd_unk_6E(void);
+static void ContestAICmd_unk_6F(void);
+static void ContestAICmd_unk_70(void);
+static void ContestAICmd_unk_71(void);
+static void ContestAICmd_unk_72(void);
+static void ContestAICmd_unk_73(void);
+static void ContestAICmd_unk_74(void);
+static void ContestAICmd_unk_75(void);
+static void ContestAICmd_unk_76(void);
+static void ContestAICmd_unk_77(void);
+static void ContestAICmd_unk_78(void);
+static void ContestAICmd_unk_79(void);
+static void ContestAICmd_unk_7A(void);
+static void ContestAICmd_unk_7B(void);
+static void ContestAICmd_unk_7C(void);
+static void ContestAICmd_unk_7D(void);
+static void ContestAICmd_unk_7E(void);
+static void ContestAICmd_unk_7F(void);
+static void ContestAICmd_unk_80(void);
+static void ContestAICmd_unk_81(void);
+static void ContestAICmd_check_for_exciting_move(void);
+static void ContestAICmd_unk_83(void);
+static void ContestAICmd_unk_84(void);
+static void ContestAICmd_unk_85(void);
+static void ContestAICmd_unk_86(void);
+static void ContestAICmd_unk_87(void);
+
+typedef void (* ContestAICmdFunc)(void);
+
+static const ContestAICmdFunc sContestAICmdTable[] =
+{
+ ContestAICmd_unk_00, // 0x00
+ ContestAICmd_get_turn, // 0x01
+ ContestAICmd_unk_02, // 0x02
+ ContestAICmd_unk_03, // 0x03
+ ContestAICmd_unk_04, // 0x04
+ ContestAICmd_unk_05, // 0x05
+ ContestAICmd_get_excitement, // 0x06
+ ContestAICmd_unk_07, // 0x07
+ ContestAICmd_unk_08, // 0x08
+ ContestAICmd_unk_09, // 0x09
+ ContestAICmd_unk_0A, // 0x0A
+ ContestAICmd_get_user_order, // 0x0B
+ ContestAICmd_unk_0C, // 0x0C
+ ContestAICmd_unk_0D, // 0x0D
+ ContestAICmd_unk_0E, // 0x0E
+ ContestAICmd_unk_0F, // 0x0F
+ ContestAICmd_get_user_condition_maybe, // 0x10
+ ContestAICmd_unk_11, // 0x11
+ ContestAICmd_unk_12, // 0x12
+ ContestAICmd_unk_13, // 0x13
+ ContestAICmd_unk_14, // 0x14
+ ContestAICmd_unk_15, // 0x15
+ ContestAICmd_unk_16, // 0x16
+ ContestAICmd_unk_17, // 0x17
+ ContestAICmd_unk_18, // 0x18
+ ContestAICmd_unk_19, // 0x19
+ ContestAICmd_unk_1A, // 0x1A
+ ContestAICmd_unk_1B, // 0x1B
+ ContestAICmd_unk_1C, // 0x1C
+ ContestAICmd_unk_1D, // 0x1D
+ ContestAICmd_unk_1E, // 0x1E
+ ContestAICmd_get_contest_type, // 0x1F
+ ContestAICmd_unk_20, // 0x20
+ ContestAICmd_unk_21, // 0x21
+ ContestAICmd_get_move_excitement, // 0x22
+ ContestAICmd_unk_23, // 0x23
+ ContestAICmd_unk_24, // 0x24
+ ContestAICmd_unk_25, // 0x25
+ ContestAICmd_unk_26, // 0x26
+ ContestAICmd_get_move_effect, // 0x27
+ ContestAICmd_unk_28, // 0x28
+ ContestAICmd_unk_29, // 0x29
+ ContestAICmd_get_move_effect_type, // 0x2A
+ ContestAICmd_unk_2B, // 0x2B
+ ContestAICmd_unk_2C, // 0x2C
+ ContestAICmd_check_move_has_highest_appeal, // 0x2D
+ ContestAICmd_unk_2E, // 0x2E
+ ContestAICmd_unk_2F, // 0x2F
+ ContestAICmd_unk_30, // 0x30
+ ContestAICmd_unk_31, // 0x31
+ ContestAICmd_unk_32, // 0x32
+ ContestAICmd_unk_33, // 0x33
+ ContestAICmd_unk_34, // 0x34
+ ContestAICmd_unk_35, // 0x35
+ ContestAICmd_unk_36, // 0x36
+ ContestAICmd_unk_37, // 0x37
+ ContestAICmd_unk_38, // 0x38
+ ContestAICmd_unk_39, // 0x39
+ ContestAICmd_unk_3A, // 0x3A
+ ContestAICmd_get_move_used_count, // 0x3B
+ ContestAICmd_unk_3C, // 0x3C
+ ContestAICmd_unk_3D, // 0x3D
+ ContestAICmd_unk_3E, // 0x3E
+ ContestAICmd_unk_3F, // 0x3F
+ ContestAICmd_check_combo_starter, // 0x40
+ ContestAICmd_unk_41, // 0x41
+ ContestAICmd_unk_42, // 0x42
+ ContestAICmd_check_combo_finisher, // 0x43
+ ContestAICmd_unk_44, // 0x44
+ ContestAICmd_unk_45, // 0x45
+ ContestAICmd_check_would_finish_combo, // 0x46
+ ContestAICmd_unk_47, // 0x47
+ ContestAICmd_unk_48, // 0x48
+ ContestAICmd_get_condition, // 0x49
+ ContestAICmd_unk_4A, // 0x4A
+ ContestAICmd_unk_4B, // 0x4B
+ ContestAICmd_unk_4C, // 0x4C
+ ContestAICmd_unk_4D, // 0x4D
+ ContestAICmd_get_used_combo_starter, // 0x4E
+ ContestAICmd_unk_4F, // 0x4F
+ ContestAICmd_unk_50, // 0x50
+ ContestAICmd_unk_51, // 0x51
+ ContestAICmd_unk_52, // 0x52
+ ContestAICmd_check_can_participate, // 0x53
+ ContestAICmd_unk_54, // 0x54
+ ContestAICmd_unk_55, // 0x55
+ ContestAICmd_get_val_812A188, // 0x56
+ ContestAICmd_unk_57, // 0x57
+ ContestAICmd_unk_58, // 0x58
+ ContestAICmd_unk_59, // 0x59
+ ContestAICmd_unk_5A, // 0x5A
+ ContestAICmd_unk_5B, // 0x5B
+ ContestAICmd_unk_5C, // 0x5C
+ ContestAICmd_unk_5D, // 0x5D
+ ContestAICmd_unk_5E, // 0x5E
+ ContestAICmd_unk_5F, // 0x5F
+ ContestAICmd_unk_60, // 0x60
+ ContestAICmd_unk_61, // 0x61
+ ContestAICmd_unk_62, // 0x62
+ ContestAICmd_unk_63, // 0x63
+ ContestAICmd_unk_64, // 0x64
+ ContestAICmd_unk_65, // 0x65
+ ContestAICmd_unk_66, // 0x66
+ ContestAICmd_unk_67, // 0x67
+ ContestAICmd_unk_68, // 0x68
+ ContestAICmd_unk_69, // 0x69
+ ContestAICmd_unk_6A, // 0x6A
+ ContestAICmd_unk_6B, // 0x6B
+ ContestAICmd_unk_6C, // 0x6C
+ ContestAICmd_unk_6D, // 0x6D
+ ContestAICmd_unk_6E, // 0x6E
+ ContestAICmd_unk_6F, // 0x6F
+ ContestAICmd_unk_70, // 0x70
+ ContestAICmd_unk_71, // 0x71
+ ContestAICmd_unk_72, // 0x72
+ ContestAICmd_unk_73, // 0x73
+ ContestAICmd_unk_74, // 0x74
+ ContestAICmd_unk_75, // 0x75
+ ContestAICmd_unk_76, // 0x76
+ ContestAICmd_unk_77, // 0x77
+ ContestAICmd_unk_78, // 0x78
+ ContestAICmd_unk_79, // 0x79
+ ContestAICmd_unk_7A, // 0x7A
+ ContestAICmd_unk_7B, // 0x7B
+ ContestAICmd_unk_7C, // 0x7C
+ ContestAICmd_unk_7D, // 0x7D
+ ContestAICmd_unk_7E, // 0x7E
+ ContestAICmd_unk_7F, // 0x7F
+ ContestAICmd_unk_80, // 0x80
+ ContestAICmd_unk_81, // 0x81
+ ContestAICmd_check_for_exciting_move, // 0x82
+ ContestAICmd_unk_83, // 0x83
+ ContestAICmd_unk_84, // 0x84
+ ContestAICmd_unk_85, // 0x85
+ ContestAICmd_unk_86, // 0x86
+ ContestAICmd_unk_87, // 0x87
+};
+
+static void ContestAI_DoAIProcessing(void);
+static bool8 sub_81563B0(u8);
+static void AIStackPushVar(const u8 *);
+static u8 AIStackPop(void);
+
+void ContestAI_ResetAI(u8 contestantAI)
+{
+ int i;
+ memset(eContestAI, 0, sizeof(struct ContestAIInfo));
+
+ for (i = 0; i < 4; i++)
+ eContestAI->unk5[i] = 100;
+
+ eContestAI->contestantId = contestantAI;
+ eContestAI->stackSize = 0;
+ eContestAI->flags = gContestMons[eContestAI->contestantId].flags;
+}
+
+u8 ContestAI_GetActionToUse(void)
+{
+ while (eContestAI->flags != 0)
+ {
+ if (eContestAI->flags & 1)
+ {
+ eContestAI->aiState = 0;
+ ContestAI_DoAIProcessing();
+ }
+ eContestAI->flags >>= 1;
+ eContestAI->unk10++;
+ eContestAI->unk4 = 0;
+ }
+
+ while (1)
+ {
+ u8 rval = Random() & 3;
+ u8 r2 = eContestAI->unk5[rval];
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ if (r2 < eContestAI->unk5[i])
+ break;
+ }
+ if (i == 4)
+ return rval;
+ }
+}
+
+static void ContestAI_DoAIProcessing(void)
+{
+ while (eContestAI->aiState != CONTESTAI_FINISHED)
+ {
+ switch(eContestAI->aiState)
+ {
+ case CONTESTAI_DO_NOT_PROCESS:
+ break;
+ case CONTESTAI_SETTING_UP:
+ gAIScriptPtr = gContestAIs[eContestAI->unk10];
+
+ if (gContestMons[eContestAI->contestantId].moves[eContestAI->unk4] == 0)
+ eContestAI->unk2 = 0; // don't process a move that doesn't exist.
+ else
+ eContestAI->unk2 = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+ eContestAI->aiState++;
+ break;
+ case CONTESTAI_PROCESSING:
+ if (eContestAI->unk2 != 0)
+ sContestAICmdTable[*gAIScriptPtr](); // run the command.
+ else
+ {
+ eContestAI->unk5[eContestAI->unk4] = 0; // don't consider a move that doesn't exist.
+ eContestAI->aiAction |= 1;
+ }
+ if (eContestAI->aiAction & 1)
+ {
+ eContestAI->unk4++;
+ if (eContestAI->unk4 < 4)
+ eContestAI->aiState = 0;
+ else
+ eContestAI->aiState++;
+ eContestAI->aiAction &= 0xFE; // TODO: Define action flags
+ }
+ break;
+ }
+ }
+}
+
+static u8 sub_81563B0(u8 var)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ if (shared192D0.turnOrder[i] == var)
+ break;
+
+ return i;
+}
+
+static void ContestAICmd_unk_00(void)
+{
+ s16 score = eContestAI->unk5[eContestAI->unk4] + (s8)gAIScriptPtr[1];
+
+ if (score > 255)
+ score = 255;
+ else if (score < 0)
+ score = 0;
+
+ eContestAI->unk5[eContestAI->unk4] = score;
+
+ gAIScriptPtr += 2;
+}
+
+static void ContestAICmd_get_turn(void)
+{
+ eContestAI->scriptResult = sContest.turnNumber;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_02(void)
+{
+ ContestAICmd_get_turn();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_03(void)
+{
+ ContestAICmd_get_turn();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_04(void)
+{
+ ContestAICmd_get_turn();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_05(void)
+{
+ ContestAICmd_get_turn();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_get_excitement(void)
+{
+ eContestAI->scriptResult = sContest.applauseLevel;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_07(void)
+{
+ ContestAICmd_get_excitement();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_08(void)
+{
+ ContestAICmd_get_excitement();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_09(void)
+{
+ ContestAICmd_get_excitement();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_0A(void)
+{
+ ContestAICmd_get_excitement();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_get_user_order(void)
+{
+ eContestAI->scriptResult = shared192D0.turnOrder[eContestAI->contestantId];
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_0C(void)
+{
+ ContestAICmd_get_user_order();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_0D(void)
+{
+ ContestAICmd_get_user_order();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_0E(void)
+{
+ ContestAICmd_get_user_order();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_0F(void)
+{
+ ContestAICmd_get_user_order();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_get_user_condition_maybe(void)
+{
+ eContestAI->scriptResult = sContestantStatus[eContestAI->contestantId].condition / 10;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_11(void)
+{
+ ContestAICmd_get_user_condition_maybe();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_12(void)
+{
+ ContestAICmd_get_user_condition_maybe();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_13(void)
+{
+ ContestAICmd_get_user_condition_maybe();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_14(void)
+{
+ ContestAICmd_get_user_condition_maybe();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_15(void)
+{
+ eContestAI->scriptResult = sContestantStatus[eContestAI->contestantId].unk4;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_16(void)
+{
+ ContestAICmd_unk_15();
+
+ if (eContestAI->scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_unk_17(void)
+{
+ ContestAICmd_unk_15();
+
+ if (eContestAI->scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_unk_18(void)
+{
+ ContestAICmd_unk_15();
+
+ if (eContestAI->scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_unk_19(void)
+{
+ ContestAICmd_unk_15();
+
+ if (eContestAI->scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_unk_1A(void)
+{
+ eContestAI->scriptResult = gContestMonConditions[eContestAI->contestantId];
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_1B(void)
+{
+ ContestAICmd_unk_1A();
+
+ if (eContestAI->scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_unk_1C(void)
+{
+ ContestAICmd_unk_1A();
+
+ if (eContestAI->scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_unk_1D(void)
+{
+ ContestAICmd_unk_1A();
+
+ if (eContestAI->scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_unk_1E(void)
+{
+ ContestAICmd_unk_1A();
+
+ if (eContestAI->scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_get_contest_type(void)
+{
+ eContestAI->scriptResult = gSpecialVar_ContestCategory;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_20(void)
+{
+ ContestAICmd_get_contest_type();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_21(void)
+{
+ ContestAICmd_get_contest_type();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_get_move_excitement(void)
+{
+ eContestAI->scriptResult = Contest_GetMoveExcitement(gContestMons[eContestAI->contestantId].moves[eContestAI->unk4]);
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_23(void)
+{
+ ContestAICmd_get_move_excitement();
+
+ if (eContestAI->scriptResult < (s8)gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_24(void)
+{
+ ContestAICmd_get_move_excitement();
+
+ if (eContestAI->scriptResult > (s8)gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_25(void)
+{
+ ContestAICmd_get_move_excitement();
+
+ if (eContestAI->scriptResult == (s8)gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_26(void)
+{
+ ContestAICmd_get_move_excitement();
+
+ if (eContestAI->scriptResult != (s8)gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_get_move_effect(void)
+{
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+
+ eContestAI->scriptResult = gContestMoves[move].effect;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_28(void)
+{
+ ContestAICmd_get_move_effect();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_29(void)
+{
+ ContestAICmd_get_move_effect();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_get_move_effect_type(void)
+{
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+
+ eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].effectType;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_2B(void)
+{
+ ContestAICmd_get_move_effect_type();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_2C(void)
+{
+ ContestAICmd_get_move_effect_type();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_check_move_has_highest_appeal(void)
+{
+ int i;
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+ u8 appeal = gContestEffects[gContestMoves[move].effect].appeal;
+
+ for (i = 0; i < 4; i++)
+ {
+ u16 newMove = gContestMons[eContestAI->contestantId].moves[i];
+ if (newMove != 0 && appeal < gContestEffects[gContestMoves[newMove].effect].appeal)
+ break;
+ }
+
+ if (i == 4)
+ eContestAI->scriptResult = TRUE;
+ else
+ eContestAI->scriptResult = FALSE;
+
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_2E(void)
+{
+ ContestAICmd_check_move_has_highest_appeal();
+
+ if (eContestAI->scriptResult != FALSE)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_2F(void)
+{
+ int i;
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+ u8 jam = gContestEffects[gContestMoves[move].effect].jam;
+
+ for (i = 0; i < 4; i++)
+ {
+ u16 newMove = gContestMons[eContestAI->contestantId].moves[i];
+ if (newMove != 0 && jam < gContestEffects[gContestMoves[newMove].effect].jam)
+ break;
+ }
+
+ if (i == 4)
+ eContestAI->scriptResult = TRUE;
+ else
+ eContestAI->scriptResult = FALSE;
+
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_30(void)
+{
+ ContestAICmd_unk_2F();
+
+ if (eContestAI->scriptResult != FALSE)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_31(void)
+{
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+
+ eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].appeal / 10;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_32(void)
+{
+ ContestAICmd_unk_31();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_33(void)
+{
+ ContestAICmd_unk_31();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_34(void)
+{
+ ContestAICmd_unk_31();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_35(void)
+{
+ ContestAICmd_unk_31();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_36(void)
+{
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+
+ eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].jam / 10;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_37(void)
+{
+ ContestAICmd_unk_36();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_38(void)
+{
+ ContestAICmd_unk_36();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_39(void)
+{
+ ContestAICmd_unk_36();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_3A(void)
+{
+ ContestAICmd_unk_36();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_get_move_used_count(void)
+{
+ s16 result;
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+
+ if (move != sContestantStatus[eContestAI->contestantId].prevMove)
+ result = 0; // move is unique and not reused.
+ else
+ result = sContestantStatus[eContestAI->contestantId].moveRepeatCount + 1;
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_3C(void)
+{
+ ContestAICmd_get_move_used_count();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_3D(void)
+{
+ ContestAICmd_get_move_used_count();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_3E(void)
+{
+ ContestAICmd_get_move_used_count();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_3F(void)
+{
+ ContestAICmd_get_move_used_count();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_check_combo_starter(void)
+{
+ u8 result = 0;
+ int i;
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestMons[eContestAI->contestantId].moves[i])
+ {
+ result = AreMovesContestCombo(move, gContestMons[eContestAI->contestantId].moves[i]);
+ if (result)
+ {
+ result = 1;
+ break;
+ }
+ }
+ }
+
+ if (result)
+ result = 1;
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_41(void)
+{
+ ContestAICmd_check_combo_starter();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_42(void)
+{
+ ContestAICmd_check_combo_starter();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_check_combo_finisher(void)
+{
+ u8 result = 0;
+ int i;
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestMons[eContestAI->contestantId].moves[i])
+ {
+ result = AreMovesContestCombo(gContestMons[eContestAI->contestantId].moves[i], move);
+ if (result)
+ {
+ result = 1;
+ break;
+ }
+ }
+ }
+
+ if (result)
+ result = 1;
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_44(void)
+{
+ ContestAICmd_check_combo_finisher();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_45(void)
+{
+ ContestAICmd_check_combo_finisher();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_check_would_finish_combo(void)
+{
+ u8 result = 0;
+ u16 move = gContestMons[eContestAI->contestantId].moves[eContestAI->unk4];
+
+ if (sContestantStatus[eContestAI->contestantId].prevMove)
+ result = AreMovesContestCombo(sContestantStatus[eContestAI->contestantId].prevMove, move);
+
+ if (result)
+ result = 1;
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_47(void)
+{
+ ContestAICmd_check_would_finish_combo();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_48(void)
+{
+ ContestAICmd_check_would_finish_combo();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_get_condition(void)
+{
+ int var = sub_81563B0(gAIScriptPtr[1]);
+
+ eContestAI->scriptResult = sContestantStatus[var].condition / 10;
+ gAIScriptPtr += 2;
+}
+
+static void ContestAICmd_unk_4A(void)
+{
+ ContestAICmd_get_condition();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_4B(void)
+{
+ ContestAICmd_get_condition();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_4C(void)
+{
+ ContestAICmd_get_condition();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_4D(void)
+{
+ ContestAICmd_get_condition();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_get_used_combo_starter(void)
+{
+ u16 result = 0;
+ u8 var = sub_81563B0(gAIScriptPtr[1]);
+
+ if (sub_80DE1E8(var))
+ result = gContestMoves[sContestantStatus[var].prevMove].comboStarterId ? 1 : 0;
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 2;
+}
+
+static void ContestAICmd_unk_4F(void)
+{
+ ContestAICmd_get_used_combo_starter();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_50(void)
+{
+ ContestAICmd_get_used_combo_starter();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_51(void)
+{
+ ContestAICmd_get_used_combo_starter();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_52(void)
+{
+ ContestAICmd_get_used_combo_starter();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_check_can_participate(void)
+{
+ if (Contest_IsMonsTurnDisabled(sub_81563B0(gAIScriptPtr[1])))
+ eContestAI->scriptResult = FALSE;
+ else
+ eContestAI->scriptResult = TRUE;
+
+ gAIScriptPtr += 2;
+}
+
+static void ContestAICmd_unk_54(void)
+{
+ ContestAICmd_check_can_participate();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_55(void)
+{
+ ContestAICmd_check_can_participate();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_get_val_812A188(void)
+{
+ u8 var = sub_81563B0(gAIScriptPtr[1]);
+
+ eContestAI->scriptResult = sContestantStatus[var].unk15_3;
+ gAIScriptPtr += 2;
+}
+
+static void ContestAICmd_unk_57(void)
+{
+ ContestAICmd_get_val_812A188();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_58(void)
+{
+ ContestAICmd_get_val_812A188();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_59(void)
+{
+ u8 var = sub_81563B0(gAIScriptPtr[1]);
+
+ eContestAI->scriptResult = sContestantStatus[var].unk4 - sContestantStatus[eContestAI->contestantId].unk4;
+ gAIScriptPtr += 2;
+}
+
+static void ContestAICmd_unk_5A(void)
+{
+ ContestAICmd_unk_59();
+
+ if (eContestAI->scriptResult < 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_5B(void)
+{
+ ContestAICmd_unk_59();
+
+ if (eContestAI->scriptResult > 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_5C(void)
+{
+ ContestAICmd_unk_59();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_5D(void)
+{
+ ContestAICmd_unk_59();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_5E(void)
+{
+ u8 var = sub_81563B0(gAIScriptPtr[1]);
+
+ eContestAI->scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI->contestantId];
+ gAIScriptPtr += 2;
+}
+
+static void ContestAICmd_unk_5F(void)
+{
+ ContestAICmd_unk_5E();
+
+ if (eContestAI->scriptResult < 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_60(void)
+{
+ ContestAICmd_unk_5E();
+
+ if (eContestAI->scriptResult > 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_61(void)
+{
+ ContestAICmd_unk_5E();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_62(void)
+{
+ ContestAICmd_unk_5E();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_63(void)
+{
+ u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 var2 = gAIScriptPtr[2];
+ u16 move = sContest.unk19220[var2][var];
+
+ eContestAI->scriptResult = gContestMoves[move].effect;
+ gAIScriptPtr += 3;
+}
+
+static void ContestAICmd_unk_64(void)
+{
+ ContestAICmd_unk_63();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_65(void)
+{
+ ContestAICmd_unk_63();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_66(void)
+{
+ ContestAICmd_unk_63();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_67(void)
+{
+ ContestAICmd_unk_63();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_68(void)
+{
+ u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 var2 = gAIScriptPtr[2];
+ s8 result = sContest.unk19248[var2][var];
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 3;
+}
+
+static void ContestAICmd_unk_69(void)
+{
+ ContestAICmd_unk_68();
+
+ if (eContestAI->scriptResult < gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_6A(void)
+{
+ ContestAICmd_unk_68();
+
+ if (eContestAI->scriptResult > gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_6B(void)
+{
+ ContestAICmd_unk_68();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_6C(void)
+{
+ ContestAICmd_unk_68();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_6D(void)
+{
+ u8 var = sub_81563B0(gAIScriptPtr[1]);
+ u8 var2 = gAIScriptPtr[2];
+ u16 move = sContest.unk19220[var2][var];
+
+ eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].effectType;
+ gAIScriptPtr += 3;
+}
+
+static void ContestAICmd_unk_6E(void)
+{
+ ContestAICmd_unk_6D();
+
+ if (eContestAI->scriptResult == gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_6F(void)
+{
+ ContestAICmd_unk_6D();
+
+ if (eContestAI->scriptResult != gAIScriptPtr[0])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+ else
+ gAIScriptPtr += 5;
+}
+
+static void ContestAICmd_unk_70(void)
+{
+ eContestAI->scriptArr[gAIScriptPtr[1]] = eContestAI->scriptResult;
+ gAIScriptPtr += 2;
+}
+
+static void ContestAICmd_unk_71(void)
+{
+ eContestAI->scriptArr[gAIScriptPtr[1]] = T1_READ_16(gAIScriptPtr + 2);
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_72(void)
+{
+ // wtf? shouldn't T1_READ_16 work here? why the signed 8 load by gAIScriptPtr[2]?
+ eContestAI->scriptArr[gAIScriptPtr[1]] += ((s8)gAIScriptPtr[2] | gAIScriptPtr[3] << 8);
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_73(void)
+{
+ eContestAI->scriptArr[gAIScriptPtr[1]] += eContestAI->scriptArr[gAIScriptPtr[2]];
+ gAIScriptPtr += 3;
+}
+
+static void ContestAICmd_unk_74(void)
+{
+ eContestAI->scriptArr[gAIScriptPtr[1]] += eContestAI->scriptArr[gAIScriptPtr[2]];
+ gAIScriptPtr += 3;
+}
+
+static void ContestAICmd_unk_75(void)
+{
+ if (eContestAI->scriptArr[gAIScriptPtr[1]] < T1_READ_16(gAIScriptPtr + 2))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ else
+ gAIScriptPtr += 8;
+}
+
+static void ContestAICmd_unk_76(void)
+{
+ if (eContestAI->scriptArr[gAIScriptPtr[1]] > T1_READ_16(gAIScriptPtr + 2))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ else
+ gAIScriptPtr += 8;
+}
+
+static void ContestAICmd_unk_77(void)
+{
+ if (eContestAI->scriptArr[gAIScriptPtr[1]] == T1_READ_16(gAIScriptPtr + 2))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ else
+ gAIScriptPtr += 8;
+}
+
+static void ContestAICmd_unk_78(void)
+{
+ if (eContestAI->scriptArr[gAIScriptPtr[1]] != T1_READ_16(gAIScriptPtr + 2))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
+ else
+ gAIScriptPtr += 8;
+}
+
+static void ContestAICmd_unk_79(void)
+{
+ if (eContestAI->scriptArr[gAIScriptPtr[1]] < (eContestAI->scriptArr[gAIScriptPtr[2]]))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
+}
+
+static void ContestAICmd_unk_7A(void)
+{
+ if (eContestAI->scriptArr[gAIScriptPtr[1]] > (eContestAI->scriptArr[gAIScriptPtr[2]]))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
+}
+
+static void ContestAICmd_unk_7B(void)
+{
+ if (eContestAI->scriptArr[gAIScriptPtr[1]] == (eContestAI->scriptArr[gAIScriptPtr[2]]))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
+}
+
+static void ContestAICmd_unk_7C(void)
+{
+ if (eContestAI->scriptArr[gAIScriptPtr[1]] != (eContestAI->scriptArr[gAIScriptPtr[2]]))
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
+}
+
+static void ContestAICmd_unk_7D(void)
+{
+ if ((Random() & 0xFF) < eContestAI->scriptArr[gAIScriptPtr[1]])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+static void ContestAICmd_unk_7E(void)
+{
+ if ((Random() & 0xFF) > eContestAI->scriptArr[gAIScriptPtr[1]])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
+}
+
+// jump
+static void ContestAICmd_unk_7F(void)
+{
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+}
+
+static void ContestAICmd_unk_80(void)
+{
+ AIStackPushVar(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
+}
+
+static void ContestAICmd_unk_81(void)
+{
+ if (!AIStackPop())
+ eContestAI->aiAction |= 1;
+}
+
+static void AIStackPushVar(const u8 *ptr)
+{
+ eContestAI->stack[eContestAI->stackSize++] = ptr;
+}
+
+static bool8 AIStackPop(void)
+{
+ if (eContestAI->stackSize != 0)
+ {
+ --eContestAI->stackSize;
+ gAIScriptPtr = eContestAI->stack[eContestAI->stackSize];
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void ContestAICmd_check_for_exciting_move(void)
+{
+ int result = 0;
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gContestMons[eContestAI->contestantId].moves[i])
+ {
+ if (Contest_GetMoveExcitement(gContestMons[eContestAI->contestantId].moves[i]) == 1)
+ {
+ result = 1;
+ break;
+ }
+ }
+ }
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 1;
+}
+
+static void ContestAICmd_unk_83(void)
+{
+ ContestAICmd_check_for_exciting_move();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_84(void)
+{
+ ContestAICmd_check_for_exciting_move();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_85(void)
+{
+ int result = 0;
+ int i;
+ u16 arg = T1_READ_16(gAIScriptPtr + 1);
+
+ for (i = 0; i < 4; i++)
+ {
+ u16 move = gContestMons[eContestAI->contestantId].moves[i];
+ if (move == arg)
+ {
+ result = 1;
+ break;
+ }
+ }
+
+ eContestAI->scriptResult = result;
+ gAIScriptPtr += 3;
+}
+
+static void ContestAICmd_unk_86(void)
+{
+ ContestAICmd_unk_85();
+
+ if (eContestAI->scriptResult != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
+
+static void ContestAICmd_unk_87(void)
+{
+ ContestAICmd_unk_85();
+
+ if (eContestAI->scriptResult == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0);
+ else
+ gAIScriptPtr += 4;
+}
diff --git a/src/data/text/nature_names.h b/src/data/text/nature_names.h
new file mode 100644
index 000000000..d0d217d9b
--- /dev/null
+++ b/src/data/text/nature_names.h
@@ -0,0 +1,54 @@
+static const u8 sHardyNatureName[] = _("HARDY");
+static const u8 sLonelyNatureName[] = _("LONELY");
+static const u8 sBraveNatureName[] = _("BRAVE");
+static const u8 sAdamantNatureName[] = _("ADAMANT");
+static const u8 sNaughtyNatureName[] = _("NAUGHTY");
+static const u8 sBoldNatureName[] = _("BOLD");
+static const u8 sDocileNatureName[] = _("DOCILE");
+static const u8 sRelaxedNatureName[] = _("RELAXED");
+static const u8 sImpishNatureName[] = _("IMPISH");
+static const u8 sLaxNatureName[] = _("LAX");
+static const u8 sTimidNatureName[] = _("TIMID");
+static const u8 sHastyNatureName[] = _("HASTY");
+static const u8 sSeriousNatureName[] = _("SERIOUS");
+static const u8 sJollyNatureName[] = _("JOLLY");
+static const u8 sNaiveNatureName[] = _("NAIVE");
+static const u8 sModestNatureName[] = _("MODEST");
+static const u8 sMildNatureName[] = _("MILD");
+static const u8 sQuietNatureName[] = _("QUIET");
+static const u8 sBashfulNatureName[] = _("BASHFUL");
+static const u8 sRashNatureName[] = _("RASH");
+static const u8 sCalmNatureName[] = _("CALM");
+static const u8 sGentleNatureName[] = _("GENTLE");
+static const u8 sSassyNatureName[] = _("SASSY");
+static const u8 sCarefulNatureName[] = _("CAREFUL");
+static const u8 sQuirkyNatureName[] = _("QUIRKY");
+
+const u8 *const gNatureNamePointers[] =
+{
+ [NATURE_HARDY] = sHardyNatureName,
+ [NATURE_LONELY] = sLonelyNatureName,
+ [NATURE_BRAVE] = sBraveNatureName,
+ [NATURE_ADAMANT] = sAdamantNatureName,
+ [NATURE_NAUGHTY] = sNaughtyNatureName,
+ [NATURE_BOLD] = sBoldNatureName,
+ [NATURE_DOCILE] = sDocileNatureName,
+ [NATURE_RELAXED] = sRelaxedNatureName,
+ [NATURE_IMPISH] = sImpishNatureName,
+ [NATURE_LAX] = sLaxNatureName,
+ [NATURE_TIMID] = sTimidNatureName,
+ [NATURE_HASTY] = sHastyNatureName,
+ [NATURE_SERIOUS] = sSeriousNatureName,
+ [NATURE_JOLLY] = sJollyNatureName,
+ [NATURE_NAIVE] = sNaiveNatureName,
+ [NATURE_MODEST] = sModestNatureName,
+ [NATURE_MILD] = sMildNatureName,
+ [NATURE_QUIET] = sQuietNatureName,
+ [NATURE_BASHFUL] = sBashfulNatureName,
+ [NATURE_RASH] = sRashNatureName,
+ [NATURE_CALM] = sCalmNatureName,
+ [NATURE_GENTLE] = sGentleNatureName,
+ [NATURE_SASSY] = sSassyNatureName,
+ [NATURE_CAREFUL] = sCarefulNatureName,
+ [NATURE_QUIRKY] = sQuirkyNatureName,
+};
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 67876f33b..ab0cd92a2 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -659,7 +659,7 @@ static void CB2_EggHatch_1(void)
}
break;
case 10:
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0:
GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
diff --git a/src/event_data.c b/src/event_data.c
index 2cbe50f13..8a998fe26 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -168,8 +168,8 @@ u16 *GetVarPointer(u16 id)
return NULL;
else if (id < SPECIAL_VARS_START)
return &gSaveBlock1Ptr->vars[id - VARS_START];
- else
- return gSpecialVars[id - SPECIAL_VARS_START];
+ else
+ return gSpecialVars[id - SPECIAL_VARS_START];
}
u16 VarGet(u16 id)
@@ -200,8 +200,8 @@ u8 *GetFlagPointer(u16 id)
return NULL;
else if (id < SPECIAL_FLAGS_START)
return &gSaveBlock1Ptr->flags[id / 8];
- else
- return &gUnknown_020375FC[(id - SPECIAL_FLAGS_START) / 8];
+ else
+ return &gUnknown_020375FC[(id - SPECIAL_FLAGS_START) / 8];
}
u8 FlagSet(u16 id)
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index f039c5f24..7960d6cba 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -66,7 +66,7 @@ extern void sub_807F19C(void);
extern void sub_807B140(void);
extern void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
extern void Overworld_PlaySpecialMapMusic(void);
-extern void sub_81BFA38(struct Pokemon *party, u8 monId, u8 partyCount, void *CB2_ptr, u16 move);
+extern void ShowSelectMovePokemonSummaryScreen(struct Pokemon *party, u8 monId, u8 partyCount, void *CB2_ptr, u16 move);
extern u8 sub_81C1B94(void);
extern void sub_807F1A8(u8 arg0, const u8 *arg1, u8 arg2);
extern void sub_800E084(void);
@@ -918,7 +918,7 @@ static void Task_EvolutionScene(u8 taskID)
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
- sub_81BFA38(gPlayerParty, gTasks[taskID].tPartyID,
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskID].tPartyID,
gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics,
gMoveToLearn);
gTasks[taskID].tLearnMoveState++;
@@ -1222,7 +1222,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
}
break;
case 4:
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0:
sEvoCursorPos = 0;
@@ -1252,7 +1252,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
Free(GetBgTilemapBuffer(0));
FreeAllWindowBuffers();
- sub_81BFA38(gPlayerParty, gTasks[taskID].tPartyID,
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskID].tPartyID,
gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics,
gMoveToLearn);
gTasks[taskID].tLearnMoveState++;
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index 6f33b2c9b..c6cb0741d 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -63,32 +63,24 @@ s16 GetTruckBoxMovement(int a1) // for the box movement?
return 0;
}
-// smh STILL BROKEN IN EMERALD
void Task_Truck1(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 cameraYpan;
- s16 box1 = 0;
- s16 box2 = 0;
- s16 box3 = 0;
- u8 mapNum, mapGroup;
- register s16 zero asm("r4");
+ s16 cameraXpan = 0, cameraYpan = 0;
+ s16 box1, box2, box3;
box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box.
- sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, box1 + 3);
+ sub_808E82C(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box.
- sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, box2 - 3);
+ sub_808E82C(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box.
- mapNum = gSaveBlock1Ptr->location.mapNum;
- mapGroup = gSaveBlock1Ptr->location.mapGroup;
- zero = 0;
- sub_808E82C(3, mapNum, mapGroup, -3, box3);
+ sub_808E82C(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
if (++data[0] == SECONDS(500)) // this will never run
- data[0] = zero; // reset the timer if it gets stuck.
+ data[0] = 0; // reset the timer if it gets stuck.
cameraYpan = GetTruckCameraBobbingY(data[0]);
- SetCameraPanning(0, cameraYpan);
+ SetCameraPanning(cameraXpan, cameraYpan);
}
void Task_Truck2(u8 taskId)
diff --git a/src/item_menu.c b/src/item_menu.c
index d134e6375..f58c2b8b3 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -1369,7 +1369,7 @@ void Task_HandleInBattleItemMenuInput(u8 taskId)
{
if (sub_81221EC() != TRUE)
{
- s8 r4 = ProcessMenuInputNoWrapAround();
+ s8 r4 = Menu_ProcessInputNoWrapAround();
switch (r4)
{
case -2:
diff --git a/src/learn_move.c b/src/learn_move.c
new file mode 100644
index 000000000..e288a393d
--- /dev/null
+++ b/src/learn_move.c
@@ -0,0 +1,833 @@
+#include "global.h"
+#include "main.h"
+#include "battle.h"
+#include "bg.h"
+#include "contest_effect.h"
+#include "data2.h"
+#include "event_data.h"
+#include "field_screen.h"
+#include "gpu_regs.h"
+#include "learn_move.h"
+#include "list_menu.h"
+#include "malloc.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "overworld.h"
+#include "palette.h"
+#include "pokemon_summary_screen.h"
+#include "pokenav.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+
+static EWRAM_DATA struct
+{
+ u8 state;
+ u8 spriteIds[16]; /*0x001*/
+ u16 movesToLearn[4]; /*0x012*/
+ u8 filler1A[0x44 - 0x1A]; /*0x01A*/
+ u8 partyMon; /*0x044*/
+ u8 moveSlot; /*0x045*/
+ struct ListMenuItem menuItems[20]; /*0x048*/
+ u8 fillerE8[0x110 - 0xE8]; /*0x0E8*/
+ u8 numMenuChoices; /*0x110*/
+ u8 numToShowAtOnce; /*0x111*/
+ u8 listMenuTask; /*0x112*/
+ u8 scrollArrowTaskId1; /*0x113*/
+ u8 scrollArrowTaskId2; /*0x114*/
+ u16 scrollOffset; /*0x116*/
+} *sLearnMoveStruct = {0};
+
+static EWRAM_DATA struct {
+ u16 listOffset;
+ u16 listRow;
+ u8 showContestInfo;
+} sLearnMoveStruct2 = {0};
+
+const u16 gUnknown_085CE9F8[] = INCBIN_U16("graphics/interface/ui_learn_move.gbapal");
+const u8 gUnknown_085CEA18[] = INCBIN_U8("graphics/interface/ui_learn_move.4bpp");
+
+const struct OamData gUnknown_085CEB98 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_SQUARE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const struct OamData gUnknown_085CEBA0 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_V_RECTANGLE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const struct OamData gUnknown_085CEBA8 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_H_RECTANGLE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const struct SpriteSheet gUnknown_085CEBB0 =
+{
+ .data = gUnknown_085CEA18,
+ .size = 0x180,
+ .tag = 5525
+};
+
+const struct SpritePalette gUnknown_085CEBB8 =
+{
+ .data = gUnknown_085CE9F8,
+ .tag = 5526
+};
+
+const struct ScrollArrowsTemplate gUnknown_085CEBC0 =
+{
+ .firstArrowType = 0,
+ .firstX = 27,
+ .firstY = 16,
+ .secondArrowType = 1,
+ .secondX = 117,
+ .secondY = 16,
+ .fullyUpThreshold = -1,
+ .fullyDownThreshold = -1,
+ .tileTag = 5325,
+ .palTag = 5325,
+ .palNum = 0,
+};
+
+const struct ScrollArrowsTemplate gUnknown_085CEBD0 =
+{
+ .firstArrowType = 2,
+ .firstX = 192,
+ .firstY = 8,
+ .secondArrowType = 3,
+ .secondX = 192,
+ .secondY = 104,
+ .fullyUpThreshold = 0,
+ .fullyDownThreshold = 0,
+ .tileTag = 5425,
+ .palTag = 5425,
+ .palNum = 0,
+};
+
+const union AnimCmd gUnknown_085CEBE0[] =
+{
+ ANIMCMD_FRAME(8, 5, FALSE, FALSE),
+ ANIMCMD_END
+};
+
+const union AnimCmd gUnknown_085CEBE8[] =
+{
+ ANIMCMD_FRAME(9, 5, FALSE, FALSE),
+ ANIMCMD_END
+};
+
+const union AnimCmd gUnknown_085CEBF0[] =
+{
+ ANIMCMD_FRAME(10, 5, FALSE, FALSE),
+ ANIMCMD_END
+};
+
+const union AnimCmd gUnknown_085CEBF8[] =
+{
+ ANIMCMD_FRAME(11, 5, FALSE, FALSE),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gUnknown_085CEC00[] =
+{
+ gUnknown_085CEBE0,
+ gUnknown_085CEBE8,
+ gUnknown_085CEBF0,
+ gUnknown_085CEBF8,
+};
+
+const struct SpriteTemplate gUnknown_085CEC10 =
+{
+ .tileTag = 5525,
+ .paletteTag = 5526,
+ .oam = &gUnknown_085CEB98,
+ .anims = gUnknown_085CEC00,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct BgTemplate gUnknown_085CEC28[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0,
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0,
+ },
+};
+
+static void LearnMoveMain(void);
+static void CreateMenuItemsList(void);
+static void CreateHearts(void);
+static void CB2_Main(void);
+static void Task_WaitForFadeOut(u8 taskId);
+static void CB2_InitLearnMove(void);
+static void CB2_InitLearnMoveReturnFromSelectMove(void);
+static void InitBGs(void);
+static void AddScrollArrows(void);
+static void HandleInput(u8);
+static void ShowTeachMoveText(u8);
+static s32 GetCurrentItemId(void);
+static void FreeListMenuResources(void);
+static void RemoveScrollArrows(void);
+static void HideSpritesAndPrintTeachText(bool8);
+
+static void VBlankCB_LearnMove(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void TeachMoveTutorMove(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(Task_WaitForFadeOut, 0xA);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0);
+}
+
+static void Task_WaitForFadeOut(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_InitLearnMove);
+ gFieldCallback = sub_80AF168;
+ DestroyTask(taskId);
+ }
+}
+
+static void CB2_InitLearnMove(void)
+{
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ clear_scheduled_bg_copies_to_vram();
+ sLearnMoveStruct = AllocZeroed(sizeof(*sLearnMoveStruct));
+ sLearnMoveStruct->partyMon = gSpecialVar_0x8004;
+ SetVBlankCallback(VBlankCB_LearnMove);
+
+ InitBGs();
+ sub_81D2824(0);
+
+ sLearnMoveStruct2.listOffset = 0;
+ sLearnMoveStruct2.listRow = 0;
+ sLearnMoveStruct2.showContestInfo = FALSE;
+
+ CreateMenuItemsList();
+
+ LoadSpriteSheet(&gUnknown_085CEBB0);
+ LoadSpritePalette(&gUnknown_085CEBB8);
+ CreateHearts();
+
+ sLearnMoveStruct->listMenuTask = ListMenuInit(&gMultiuseListMenuTemplate, sLearnMoveStruct2.listOffset, sLearnMoveStruct2.listRow);
+ FillPalette(RGB_BLACK, 0, 2);
+ SetMainCallback2(CB2_Main);
+}
+
+static void CB2_InitLearnMoveReturnFromSelectMove(void)
+{
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetTasks();
+ clear_scheduled_bg_copies_to_vram();
+ sLearnMoveStruct = AllocZeroed(sizeof(*sLearnMoveStruct));
+ sLearnMoveStruct->state = 28;
+ sLearnMoveStruct->partyMon = gSpecialVar_0x8004;
+ sLearnMoveStruct->moveSlot = gSpecialVar_0x8005;
+ SetVBlankCallback(VBlankCB_LearnMove);
+
+ InitBGs();
+ sub_81D2824(sLearnMoveStruct2.showContestInfo);
+ CreateMenuItemsList();
+
+ LoadSpriteSheet(&gUnknown_085CEBB0);
+ LoadSpritePalette(&gUnknown_085CEBB8);
+ CreateHearts();
+
+ sLearnMoveStruct->listMenuTask = ListMenuInit(&gMultiuseListMenuTemplate, sLearnMoveStruct2.listOffset, sLearnMoveStruct2.listRow);
+ FillPalette(RGB_BLACK, 0, 2);
+ SetMainCallback2(CB2_Main);
+}
+
+static void InitBGs(void)
+{
+ ResetVramOamAndBgCntRegs();
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_085CEC28, 2);
+ ResetAllBgsCoordinates();
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_OBJ_ON);
+ ShowBg(0);
+ ShowBg(1);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+}
+
+static void CB2_Main(void)
+{
+ LearnMoveMain();
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ do_scheduled_bg_tilemap_copies_to_vram();
+ UpdatePaletteFade();
+}
+
+static void sub_816084C(const u8 *src)
+{
+ StringExpandPlaceholders(gStringVar4, src);
+ sub_81D2BF4(gStringVar4);
+}
+
+static void LearnMoveMain(void)
+{
+ switch (sLearnMoveStruct->state)
+ {
+ case 0:
+ sLearnMoveStruct->state++;
+ HideSpritesAndPrintTeachText(FALSE);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ sLearnMoveStruct->state = 4;
+ }
+ break;
+ case 2:
+ sLearnMoveStruct->state++;
+ break;
+ case 3:
+ HideSpritesAndPrintTeachText(FALSE);
+ sLearnMoveStruct->state++;
+ AddScrollArrows();
+ break;
+ case 4:
+ HandleInput(FALSE);
+ return;
+ case 5:
+ ShowTeachMoveText(FALSE);
+ sLearnMoveStruct->state++;
+ AddScrollArrows();
+ break;
+ case 6:
+ HandleInput(TRUE);
+ break;
+ case 8:
+ if (!sub_81D2C3C())
+ {
+ sub_81D2C50();
+ sLearnMoveStruct->state++;
+ }
+ break;
+ case 9:
+ {
+ s8 selection = Menu_ProcessInputNoWrap_();
+
+ if (selection == 0)
+ {
+ if (GiveMoveToMon(&gPlayerParty[sLearnMoveStruct->partyMon], GetCurrentItemId()) != 0xFFFF)
+ {
+ sub_816084C(gText_PkmnLearnedMove4);
+ gSpecialVar_0x8004 = 1;
+ sLearnMoveStruct->state = 31;
+ }
+ else
+ {
+ sLearnMoveStruct->state = 16;
+ }
+ }
+ else if (selection == -1 || selection == 1)
+ {
+ if (sLearnMoveStruct2.showContestInfo == FALSE)
+ {
+ sLearnMoveStruct->state = 3;
+ }
+ else if (sLearnMoveStruct2.showContestInfo == TRUE)
+ {
+ sLearnMoveStruct->state = 5;
+ }
+ }
+ }
+ break;
+ case 12:
+ if (!sub_81D2C3C())
+ {
+ sub_81D2C50();
+ sLearnMoveStruct->state++;
+ }
+ break;
+ case 13:
+ {
+ s8 selection = Menu_ProcessInputNoWrap_();
+
+ if (selection == 0)
+ {
+ gSpecialVar_0x8004 = selection;
+ sLearnMoveStruct->state = 14;
+ }
+ else if (selection == -1 || selection == 1)
+ {
+ if (sLearnMoveStruct2.showContestInfo == FALSE)
+ {
+ sLearnMoveStruct->state = 3;
+ }
+ else if (sLearnMoveStruct2.showContestInfo == TRUE)
+ {
+ sLearnMoveStruct->state = 5;
+ }
+ }
+ }
+ break;
+ case 16:
+ sub_816084C(gText_PkmnTryingToLearnMove);
+ sLearnMoveStruct->state++;
+ break;
+ case 17:
+ if (!sub_81D2C3C())
+ {
+ sub_81D2C50();
+ sLearnMoveStruct->state = 18;
+ }
+ break;
+ case 18:
+ {
+ s8 var = Menu_ProcessInputNoWrap_();
+
+ if (var == 0)
+ {
+ sub_816084C(gText_WhichMoveToForget2);
+ sLearnMoveStruct->state = 19;
+ }
+ else if (var == -1 || var == 1)
+ {
+ sLearnMoveStruct->state = 24;
+ }
+ }
+ break;
+ case 24:
+ StringCopy(gStringVar2, gMoveNames[GetCurrentItemId()]);
+ sub_816084C(gText_StopTryingToTeachMove);
+ sLearnMoveStruct->state++;
+ break;
+ case 25:
+ if (!sub_81D2C3C())
+ {
+ sub_81D2C50();
+ sLearnMoveStruct->state++;
+ }
+ break;
+ case 26:
+ {
+ s8 var = Menu_ProcessInputNoWrap_();
+
+ if (var == 0)
+ {
+ sLearnMoveStruct->state = 27;
+ }
+ else if (var == -1 || var == 1)
+ {
+ // What's the point? It gets set to 16, anyway.
+ if (sLearnMoveStruct2.showContestInfo == FALSE)
+ {
+ sLearnMoveStruct->state = 3;
+ }
+ else if (sLearnMoveStruct2.showContestInfo == TRUE)
+ {
+ sLearnMoveStruct->state = 5;
+ }
+ sLearnMoveStruct->state = 16;
+ }
+ }
+ break;
+ case 27:
+ if (!sub_81D2C3C())
+ {
+ FillWindowPixelBuffer(3, 0x11);
+ if (sLearnMoveStruct2.showContestInfo == FALSE)
+ {
+ sLearnMoveStruct->state = 3;
+ }
+ else if (sLearnMoveStruct2.showContestInfo == TRUE)
+ {
+ sLearnMoveStruct->state = 5;
+ }
+ }
+ break;
+ case 19:
+ if (!sub_81D2C3C())
+ {
+ sLearnMoveStruct->state = 20;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ }
+ break;
+ case 20:
+ if (!gPaletteFade.active)
+ {
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, sLearnMoveStruct->partyMon, gPlayerPartyCount - 1, CB2_InitLearnMoveReturnFromSelectMove, GetCurrentItemId());
+ FreeListMenuResources();
+ }
+ break;
+ case 21:
+ if (!sub_81D2C3C())
+ {
+ sLearnMoveStruct->state = 14;
+ }
+ break;
+ case 22:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ break;
+ case 14:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sLearnMoveStruct->state++;
+ break;
+ case 15:
+ if (!gPaletteFade.active)
+ {
+ FreeListMenuResources();
+ SetMainCallback2(CB2_ReturnToField);
+ }
+ break;
+ case 28:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ sLearnMoveStruct->state++;
+ if (sLearnMoveStruct2.showContestInfo == FALSE)
+ {
+ HideSpritesAndPrintTeachText(TRUE);
+ }
+ else if (sLearnMoveStruct2.showContestInfo == TRUE)
+ {
+ ShowTeachMoveText(TRUE);
+ }
+ RemoveScrollArrows();
+ CopyWindowToVram(3, 2);
+ break;
+ case 29:
+ if (!gPaletteFade.active)
+ {
+ if (sLearnMoveStruct->moveSlot == MAX_MON_MOVES)
+ {
+ sLearnMoveStruct->state = 24;
+ }
+ else
+ {
+ u16 moveId = GetMonData(&gPlayerParty[sLearnMoveStruct->partyMon], MON_DATA_MOVE1 + sLearnMoveStruct->moveSlot);
+
+ StringCopy(gStringVar3, gMoveNames[moveId]);
+ RemoveMonPPBonus(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->moveSlot);
+ SetMonMoveSlot(&gPlayerParty[sLearnMoveStruct->partyMon], GetCurrentItemId(), sLearnMoveStruct->moveSlot);
+ StringCopy(gStringVar2, gMoveNames[GetCurrentItemId()]);
+ sub_816084C(gText_12AndPoof);
+ sLearnMoveStruct->state = 30;
+ gSpecialVar_0x8004 = 1;
+ }
+ }
+ break;
+ case 30:
+ if (!sub_81D2C3C())
+ {
+ sub_816084C(gText_PkmnForgotMoveAndLearnedNew);
+ sLearnMoveStruct->state = 31;
+ PlayFanfare(MUS_FANFA1);
+ }
+ break;
+ case 31:
+ if (!sub_81D2C3C())
+ {
+ PlayFanfare(MUS_FANFA1);
+ sLearnMoveStruct->state = 32;
+ }
+ break;
+ case 32:
+ if (IsFanfareTaskInactive())
+ {
+ sLearnMoveStruct->state = 33;
+ }
+ break;
+ case 33:
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sLearnMoveStruct->state = 14;
+ }
+ break;
+ }
+}
+
+static void FreeListMenuResources(void)
+{
+ RemoveScrollArrows();
+ DestroyListMenuTask(sLearnMoveStruct->listMenuTask, &sLearnMoveStruct2.listOffset, &sLearnMoveStruct2.listRow);
+ FreeAllWindowBuffers();
+ FREE_AND_SET_NULL(sLearnMoveStruct);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+}
+
+static void HideSpritesAndPrintTeachText(bool8 a)
+{
+ s32 i;
+
+ for (i = 0; i < 16; i++)
+ {
+ gSprites[sLearnMoveStruct->spriteIds[i]].invisible = TRUE;
+ }
+
+ if (!a)
+ {
+ StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn);
+ FillWindowPixelBuffer(3, 0x11);
+ PrintTextOnWindow(3, 1, gStringVar4, 0, 1, 0, NULL);
+ }
+}
+
+static void HandleInput(bool8 showContest)
+{
+ s32 itemId = ListMenuHandleInputGetItemId(sLearnMoveStruct->listMenuTask);
+ ListMenuGetScrollAndRow(sLearnMoveStruct->listMenuTask, &sLearnMoveStruct2.listOffset, &sLearnMoveStruct2.listRow);
+
+ switch (itemId)
+ {
+ case LIST_NOTHING_CHOSEN:
+ if (!(gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysState())
+ {
+ break;
+ }
+
+ PlaySE(SE_SELECT);
+
+ if (showContest == FALSE)
+ {
+ PutWindowTilemap(1);
+ sLearnMoveStruct->state = 5;
+ sLearnMoveStruct2.showContestInfo = TRUE;
+ }
+ else
+ {
+ PutWindowTilemap(0);
+ sLearnMoveStruct->state = 3;
+ sLearnMoveStruct2.showContestInfo = FALSE;
+ }
+
+ schedule_bg_copy_tilemap_to_vram(1);
+ ShowHideHearts(GetCurrentItemId());
+ break;
+ case LIST_B_PRESSED:
+ PlaySE(SE_SELECT);
+ RemoveScrollArrows();
+ sLearnMoveStruct->state = 12;
+ StringExpandPlaceholders(gStringVar4, gText_GiveUpTeachingNewMove);
+ sub_81D2BF4(gStringVar4);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ RemoveScrollArrows();
+ sLearnMoveStruct->state = 8;
+ StringCopy(gStringVar2, gMoveNames[itemId]);
+ StringExpandPlaceholders(gStringVar4, gText_TeachX);
+ sub_81D2BF4(gStringVar4);
+ break;
+ }
+}
+
+static s32 GetCurrentItemId(void)
+{
+ return sLearnMoveStruct->menuItems[sLearnMoveStruct2.listRow + sLearnMoveStruct2.listOffset].id;
+}
+
+static void ShowTeachMoveText(bool8 showContest)
+{
+ if (showContest == FALSE)
+ {
+ StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToPkmn);
+ FillWindowPixelBuffer(3, 0x11);
+ PrintTextOnWindow(3, 1, gStringVar4, 0, 1, 0, NULL);
+ }
+}
+
+static void CreateHearts(void)
+{
+ int i;
+
+ sLearnMoveStruct->scrollArrowTaskId2 = -1;
+ sLearnMoveStruct->scrollArrowTaskId1 = -1;
+ AddScrollArrows();
+
+ for (i = 0; i < 8; i++)
+ {
+ sLearnMoveStruct->spriteIds[i] = CreateSprite(&gUnknown_085CEC10, (i - (i / 4) * 4) * 8 + 104, (i / 4) * 8 + 36, 0);
+ }
+
+ for (i = 0; i < 8; i++)
+ {
+ sLearnMoveStruct->spriteIds[i + 8] = CreateSprite(&gUnknown_085CEC10, (i - (i / 4) * 4) * 8 + 104, (i / 4) * 8 + 52, 0);
+ StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIds[i + 8]], 2);
+ }
+
+ for (i = 0; i < 16; i++)
+ {
+ gSprites[sLearnMoveStruct->spriteIds[i]].invisible = TRUE;
+ }
+}
+
+static void AddScrollArrows(void)
+{
+ if (sLearnMoveStruct->scrollArrowTaskId2 == 0xFF)
+ {
+ sLearnMoveStruct->scrollArrowTaskId2 = AddScrollIndicatorArrowPair(&gUnknown_085CEBC0, &sLearnMoveStruct->scrollOffset);
+ }
+
+ if (sLearnMoveStruct->scrollArrowTaskId1 == 0xFF)
+ {
+ gTempScrollArrowTemplate = gUnknown_085CEBD0;
+ gTempScrollArrowTemplate.fullyDownThreshold = sLearnMoveStruct->numMenuChoices - sLearnMoveStruct->numToShowAtOnce;
+ sLearnMoveStruct->scrollArrowTaskId1 = AddScrollIndicatorArrowPair(&gTempScrollArrowTemplate, &sLearnMoveStruct2.listOffset);
+ }
+}
+
+static void RemoveScrollArrows(void)
+{
+ if (sLearnMoveStruct->scrollArrowTaskId2 != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(sLearnMoveStruct->scrollArrowTaskId2);
+ sLearnMoveStruct->scrollArrowTaskId2 = 0xFF;
+ }
+
+ if (sLearnMoveStruct->scrollArrowTaskId1 != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(sLearnMoveStruct->scrollArrowTaskId1);
+ sLearnMoveStruct->scrollArrowTaskId1 = 0xFF;
+ }
+}
+
+static void CreateMenuItemsList(void)
+{
+ s32 i;
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+
+ sLearnMoveStruct->numMenuChoices = GetMoveRelearnerMoves(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->movesToLearn);
+
+ for (i = 0; i < sLearnMoveStruct->numMenuChoices; i++)
+ {
+ sLearnMoveStruct->menuItems[i].name = gMoveNames[sLearnMoveStruct->movesToLearn[i]];
+ sLearnMoveStruct->menuItems[i].id = sLearnMoveStruct->movesToLearn[i];
+ }
+
+ GetMonData(&gPlayerParty[sLearnMoveStruct->partyMon], MON_DATA_NICKNAME, nickname);
+ StringCopy10(gStringVar1, nickname);
+ sLearnMoveStruct->menuItems[sLearnMoveStruct->numMenuChoices].name = gText_Cancel;
+ sLearnMoveStruct->menuItems[sLearnMoveStruct->numMenuChoices].id = LIST_B_PRESSED;
+ sLearnMoveStruct->numMenuChoices++;
+ sLearnMoveStruct->numToShowAtOnce = sub_81D28C8(sLearnMoveStruct->menuItems, sLearnMoveStruct->numMenuChoices);
+}
+
+void ShowHideHearts(s32 item)
+{
+ u16 numHearts;
+ u16 i;
+
+ if (!sLearnMoveStruct2.showContestInfo || item == LIST_B_PRESSED)
+ {
+ for (i = 0; i < 16; i++)
+ {
+ gSprites[sLearnMoveStruct->spriteIds[i]].invisible = TRUE;
+ }
+ }
+ else
+ {
+ numHearts = (u8)(gContestEffects[gContestMoves[item].effect].appeal / 10);
+
+ if (numHearts == 0xFF)
+ {
+ numHearts = 0;
+ }
+
+ for (i = 0; i < 8; i++)
+ {
+ if (i < numHearts)
+ {
+ StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIds[i]], 1);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIds[i]], 0);
+ }
+ gSprites[sLearnMoveStruct->spriteIds[i]].invisible = FALSE;
+ }
+
+ numHearts = (u8)(gContestEffects[gContestMoves[item].effect].jam / 10);
+
+ if (numHearts == 0xFF)
+ {
+ numHearts = 0;
+ }
+
+ for (i = 0; i < 8; i++)
+ {
+ if (i < numHearts)
+ {
+ StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIds[i + 8]], 3);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIds[i + 8]], 2);
+ }
+ gSprites[sLearnMoveStruct->spriteIds[i + 8]].invisible = FALSE;
+ }
+ }
+}
diff --git a/src/main_menu.c b/src/main_menu.c
index 3afe1abe5..052035e34 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1362,7 +1362,7 @@ void task_new_game_prof_birch_speech_part2_3(u8 taskId)
void task_new_game_prof_birch_speech_part2_4(u8 taskId)
{
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0:
PlaySE(SE_SELECT);
@@ -1802,7 +1802,7 @@ void sub_8031D74(void)
s8 sub_8031DB4(void)
{
- return ProcessMenuInputNoWrapAround();
+ return Menu_ProcessInputNoWrapAround();
}
void set_default_player_name(u8 nameId)
diff --git a/src/menu.c b/src/menu.c
index f4ffec023..eda9513ba 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -986,7 +986,7 @@ s8 ProcessMenuInput(void)
return MENU_NOTHING_CHOSEN;
}
-s8 ProcessMenuInputNoWrapAround(void)
+s8 Menu_ProcessInputNoWrapAround(void)
{
u8 oldPos = gUnknown_0203CD90.cursorPos;
@@ -1044,7 +1044,7 @@ s8 ProcessMenuInput_other(void)
return MENU_NOTHING_CHOSEN;
}
-s8 ProcessMenuInputNoWrapAround_other(void)
+s8 Menu_ProcessInputNoWrapAround_other(void)
{
u8 oldPos = gUnknown_0203CD90.cursorPos;
@@ -1187,9 +1187,9 @@ void sub_8198C34(const struct WindowTemplate *window, u8 fontId, u16 baseTileNum
sub_8198AF8(window, fontId, 0, 1, baseTileNum, paletteNum, 0);
}
-s8 ProcessMenuInputNoWrap_(void)
+s8 Menu_ProcessInputNoWrap_(void)
{
- s8 result = ProcessMenuInputNoWrapAround();
+ s8 result = Menu_ProcessInputNoWrapAround();
if (result != MENU_NOTHING_CHOSEN)
sub_8198C78();
return result;
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index 178fbb5fa..217fdabae 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -169,7 +169,7 @@ void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *templa
static void Task_CallYesOrNoCallback(u8 taskId)
{
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0:
PlaySE(SE_SELECT);
diff --git a/src/player_pc.c b/src/player_pc.c
index ba18b45ab..ef00e2e06 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -272,7 +272,7 @@ static void PlayerPCProcessMenuInput(u8 taskId)
if(gPcItemMenuOptionsNum > 3)
inputOptionId = ProcessMenuInput();
else
- inputOptionId = ProcessMenuInputNoWrapAround();
+ inputOptionId = Menu_ProcessInputNoWrapAround();
switch(inputOptionId)
{
@@ -686,7 +686,7 @@ static void Mailbox_DrawYesNoBeforeMove(u8 taskId)
static void Mailbox_MoveToBagYesNoPrompt(u8 taskId)
{
- switch(ProcessMenuInputNoWrap_())
+ switch(Menu_ProcessInputNoWrap_())
{
case 0:
Mailbox_DoMailMoveToBag(taskId);
diff --git a/src/pokeblock.c b/src/pokeblock.c
index 7dd20b237..e615693b9 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -1042,7 +1042,7 @@ static void Task_HandlePokeblockOptionsInput(u8 taskId)
if (sub_81221EC() == TRUE)
return;
- itemId = ProcessMenuInputNoWrapAround();
+ itemId = Menu_ProcessInputNoWrapAround();
if (itemId == MENU_NOTHING_CHOSEN)
{
return;
diff --git a/src/pokemon.c b/src/pokemon.c
index 7c010cd39..3aa88e991 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -89,7 +89,7 @@ extern u8 GetTrainerEncounterMusicIdInBattlePyramind(u16 trainerOpponentId);
extern u8 sub_81D63C8(u16 trainerOpponentId);
extern u8 GetFrontierOpponentClass(u16 trainerId);
extern void GetFrontierTrainerName(u8* dest, u16 trainerId);
-extern void sub_81C488C(u8);
+extern void SummaryScreen_SetUnknownTaskId(u8);
// this file's functions
static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon);
@@ -112,9 +112,1253 @@ EWRAM_DATA struct Unknown_806F160_Struct *gUnknown_020249B4[2] = {NULL};
#include "data/battle_moves.h"
static const u8 sUnreferencedData[] = {0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00};
-const u16 gSpeciesToHoennPokedexNum[] = {203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 156, 157, 112, 113, 227, 228, 229, 230, 231, 232, 233, 234, 153, 154, 138, 139, 63, 64, 88, 89, 90, 235, 236, 237, 238, 239, 240, 241, 242, 158, 159, 243, 244, 245, 246, 247, 248, 249, 39, 40, 41, 73, 74, 75, 250, 251, 252, 66, 67, 57, 58, 59, 253, 254, 255, 256, 82, 83, 257, 92, 93, 258, 259, 106, 107, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 84, 85, 270, 271, 272, 273, 274, 275, 276, 108, 109, 169, 170, 277, 278, 279, 184, 185, 50, 51, 143, 144, 280, 281, 282, 283, 284, 167, 285, 52, 53, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 65, 181, 182, 155, 324, 137, 325, 326, 162, 163, 327, 328, 329, 91, 55, 56, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 161, 164, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 168, 357, 358, 359, 103, 104, 360, 361, 180, 362, 363, 364, 365, 115, 366, 367, 186, 165, 166, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, 44, 25, 26, 34, 35, 114, 27, 28, 32, 33, 99, 100, 61, 62, 145, 131, 132, 60, 105, 68, 127, 128, 183, 129, 130, 140, 141, 97, 98, 116, 117, 118, 48, 49, 78, 79, 101, 102, 173, 174, 175, 119, 120, 171, 172, 125, 126, 54, 110, 111, 80, 81, 69, 76, 77, 121, 122, 160, 148, 149, 94, 36, 37, 38, 95, 96, 150, 45, 46, 47, 176, 177, 178, 152, 146, 147, 124, 123, 179, 70, 71, 72, 142, 86, 87, 133, 134, 135, 136, 29, 30, 31, 187, 188, 189, 190, 191, 192, 193, 194, 195, 198, 199, 200, 196, 197, 201, 202, 151};
-const u16 gSpeciesToNationalPokedexNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 290, 291, 292, 276, 277, 285, 286, 327, 278, 279, 283, 284, 320, 321, 300, 301, 352, 343, 344, 299, 324, 302, 339, 340, 370, 341, 342, 349, 350, 318, 319, 328, 329, 330, 296, 297, 309, 310, 322, 323, 363, 364, 365, 331, 332, 361, 362, 337, 338, 298, 325, 326, 311, 312, 303, 307, 308, 333, 334, 360, 355, 356, 315, 287, 288, 289, 316, 317, 357, 293, 294, 295, 366, 367, 368, 359, 353, 354, 336, 335, 369, 304, 305, 306, 351, 313, 314, 345, 346, 347, 348, 280, 281, 282, 371, 372, 373, 374, 375, 376, 377, 378, 379, 382, 383, 384, 380, 381, 385, 386, 358};
-const u16 gHoennToNationalOrder[] = {252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 63, 64, 65, 290, 291, 292, 293, 294, 295, 296, 297, 118, 119, 129, 130, 298, 183, 184, 74, 75, 76, 299, 300, 301, 41, 42, 169, 72, 73, 302, 303, 304, 305, 306, 66, 67, 68, 307, 308, 309, 310, 311, 312, 81, 82, 100, 101, 313, 314, 43, 44, 45, 182, 84, 85, 315, 316, 317, 318, 319, 320, 321, 322, 323, 218, 219, 324, 88, 89, 109, 110, 325, 326, 27, 28, 327, 227, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 174, 39, 40, 349, 350, 351, 120, 121, 352, 353, 354, 355, 356, 357, 358, 359, 37, 38, 172, 25, 26, 54, 55, 360, 202, 177, 178, 203, 231, 232, 127, 214, 111, 112, 361, 362, 363, 364, 365, 366, 367, 368, 369, 222, 170, 171, 370, 116, 117, 230, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 77, 78, 79, 80, 83, 86, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 122, 123, 124, 125, 126, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 173, 175, 176, 179, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 220, 221, 223, 224, 225, 226, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411};
+const u16 gSpeciesToHoennPokedexNum[] = // Assigns all species to the Hoenn Dex Index (Summary No. for Hoenn Dex)
+{
+ // SPECIES_NONE
+ HOENN_DEX_BULBASAUR, // SPECIES_BULBASAUR
+ HOENN_DEX_IVYSAUR, // SPECIES_IVYSAUR
+ HOENN_DEX_VENUSAUR, // SPECIES_VENUSAUR
+ HOENN_DEX_CHARMANDER, // SPECIES_CHARMANDER
+ HOENN_DEX_CHARMELEON, // SPECIES_CHARMELEON
+ HOENN_DEX_CHARIZARD, // SPECIES_CHARIZARD
+ HOENN_DEX_SQUIRTLE, // SPECIES_SQUIRTLE
+ HOENN_DEX_WARTORTLE, // SPECIES_WARTORTLE
+ HOENN_DEX_BLASTOISE, // SPECIES_BLASTOISE
+ HOENN_DEX_CATERPIE, // SPECIES_CATERPIE
+ HOENN_DEX_METAPOD, // SPECIES_METAPOD
+ HOENN_DEX_BUTTERFREE, // SPECIES_BUTTERFREE
+ HOENN_DEX_WEEDLE, // SPECIES_WEEDLE
+ HOENN_DEX_KAKUNA, // SPECIES_KAKUNA
+ HOENN_DEX_BEEDRILL, // SPECIES_BEEDRILL
+ HOENN_DEX_PIDGEY, // SPECIES_PIDGEY
+ HOENN_DEX_PIDGEOTTO, // SPECIES_PIDGEOTTO
+ HOENN_DEX_PIDGEOT, // SPECIES_PIDGEOT
+ HOENN_DEX_RATTATA, // SPECIES_RATTATA
+ HOENN_DEX_RATICATE, // SPECIES_RATICATE
+ HOENN_DEX_SPEAROW, // SPECIES_SPEAROW
+ HOENN_DEX_FEAROW, // SPECIES_FEAROW
+ HOENN_DEX_EKANS, // SPECIES_EKANS
+ HOENN_DEX_ARBOK, // SPECIES_ARBOK
+ HOENN_DEX_PIKACHU, // SPECIES_PIKACHU
+ HOENN_DEX_RAICHU, // SPECIES_RAICHU
+ HOENN_DEX_SANDSHREW, // SPECIES_SANDSHREW
+ HOENN_DEX_SANDSLASH, // SPECIES_SANDSLASH
+ HOENN_DEX_NIDORAN_F, // SPECIES_NIDORAN_F
+ HOENN_DEX_NIDORINA, // SPECIES_NIDORINA
+ HOENN_DEX_NIDOQUEEN, // SPECIES_NIDOQUEEN
+ HOENN_DEX_NIDORAN_M, // SPECIES_NIDORAN_M
+ HOENN_DEX_NIDORINO, // SPECIES_NIDORINO
+ HOENN_DEX_NIDOKING, // SPECIES_NIDOKING
+ HOENN_DEX_CLEFAIRY, // SPECIES_CLEFAIRY
+ HOENN_DEX_CLEFABLE, // SPECIES_CLEFABLE
+ HOENN_DEX_VULPIX, // SPECIES_VULPIX
+ HOENN_DEX_NINETALES, // SPECIES_NINETALES
+ HOENN_DEX_JIGGLYPUFF, // SPECIES_JIGGLYPUFF
+ HOENN_DEX_WIGGLYTUFF, // SPECIES_WIGGLYTUFF
+ HOENN_DEX_ZUBAT, // SPECIES_ZUBAT
+ HOENN_DEX_GOLBAT, // SPECIES_GOLBAT
+ HOENN_DEX_ODDISH, // SPECIES_ODDISH
+ HOENN_DEX_GLOOM, // SPECIES_GLOOM
+ HOENN_DEX_VILEPLUME, // SPECIES_VILEPLUME
+ HOENN_DEX_PARAS, // SPECIES_PARAS
+ HOENN_DEX_PARASECT, // SPECIES_PARASECT
+ HOENN_DEX_VENONAT, // SPECIES_VENONAT
+ HOENN_DEX_VENOMOTH, // SPECIES_VENOMOTH
+ HOENN_DEX_DIGLETT, // SPECIES_DIGLETT
+ HOENN_DEX_DUGTRIO, // SPECIES_DUGTRIO
+ HOENN_DEX_MEOWTH, // SPECIES_MEOWTH
+ HOENN_DEX_PERSIAN, // SPECIES_PERSIAN
+ HOENN_DEX_PSYDUCK, // SPECIES_PSYDUCK
+ HOENN_DEX_GOLDUCK, // SPECIES_GOLDUCK
+ HOENN_DEX_MANKEY, // SPECIES_MANKEY
+ HOENN_DEX_PRIMEAPE, // SPECIES_PRIMEAPE
+ HOENN_DEX_GROWLITHE, // SPECIES_GROWLITHE
+ HOENN_DEX_ARCANINE, // SPECIES_ARCANINE
+ HOENN_DEX_POLIWAG, // SPECIES_POLIWAG
+ HOENN_DEX_POLIWHIRL, // SPECIES_POLIWHIRL
+ HOENN_DEX_POLIWRATH, // SPECIES_POLIWRATH
+ HOENN_DEX_ABRA, // SPECIES_ABRA
+ HOENN_DEX_KADABRA, // SPECIES_KADABRA
+ HOENN_DEX_ALAKAZAM, // SPECIES_ALAKAZAM
+ HOENN_DEX_MACHOP, // SPECIES_MACHOP
+ HOENN_DEX_MACHOKE, // SPECIES_MACHOKE
+ HOENN_DEX_MACHAMP, // SPECIES_MACHAMP
+ HOENN_DEX_BELLSPROUT, // SPECIES_BELLSPROUT
+ HOENN_DEX_WEEPINBELL, // SPECIES_WEEPINBELL
+ HOENN_DEX_VICTREEBEL, // SPECIES_VICTREEBEL
+ HOENN_DEX_TENTACOOL, // SPECIES_TENTACOOL
+ HOENN_DEX_TENTACRUEL, // SPECIES_TENTACRUEL
+ HOENN_DEX_GEODUDE, // SPECIES_GEODUDE
+ HOENN_DEX_GRAVELER, // SPECIES_GRAVELER
+ HOENN_DEX_GOLEM, // SPECIES_GOLEM
+ HOENN_DEX_PONYTA, // SPECIES_PONYTA
+ HOENN_DEX_RAPIDASH, // SPECIES_RAPIDASH
+ HOENN_DEX_SLOWPOKE, // SPECIES_SLOWPOKE
+ HOENN_DEX_SLOWBRO, // SPECIES_SLOWBRO
+ HOENN_DEX_MAGNEMITE, // SPECIES_MAGNEMITE
+ HOENN_DEX_MAGNETON, // SPECIES_MAGNETON
+ HOENN_DEX_FARFETCHD, // SPECIES_FARFETCHD
+ HOENN_DEX_DODUO, // SPECIES_DODUO
+ HOENN_DEX_DODRIO, // SPECIES_DODRIO
+ HOENN_DEX_SEEL, // SPECIES_SEEL
+ HOENN_DEX_DEWGONG, // SPECIES_DEWGONG
+ HOENN_DEX_GRIMER, // SPECIES_GRIMER
+ HOENN_DEX_MUK, // SPECIES_MUK
+ HOENN_DEX_SHELLDER, // SPECIES_SHELLDER
+ HOENN_DEX_CLOYSTER, // SPECIES_CLOYSTER
+ HOENN_DEX_GASTLY, // SPECIES_GASTLY
+ HOENN_DEX_HAUNTER, // SPECIES_HAUNTER
+ HOENN_DEX_GENGAR, // SPECIES_GENGAR
+ HOENN_DEX_ONIX, // SPECIES_ONIX
+ HOENN_DEX_DROWZEE, // SPECIES_DROWZEE
+ HOENN_DEX_HYPNO, // SPECIES_HYPNO
+ HOENN_DEX_KRABBY, // SPECIES_KRABBY
+ HOENN_DEX_KINGLER, // SPECIES_KINGLER
+ HOENN_DEX_VOLTORB, // SPECIES_VOLTORB
+ HOENN_DEX_ELECTRODE, // SPECIES_ELECTRODE
+ HOENN_DEX_EXEGGCUTE, // SPECIES_EXEGGCUTE
+ HOENN_DEX_EXEGGUTOR, // SPECIES_EXEGGUTOR
+ HOENN_DEX_CUBONE, // SPECIES_CUBONE
+ HOENN_DEX_MAROWAK, // SPECIES_MAROWAK
+ HOENN_DEX_HITMONLEE, // SPECIES_HITMONLEE
+ HOENN_DEX_HITMONCHAN, // SPECIES_HITMONCHAN
+ HOENN_DEX_LICKITUNG, // SPECIES_LICKITUNG
+ HOENN_DEX_KOFFING, // SPECIES_KOFFING
+ HOENN_DEX_WEEZING, // SPECIES_WEEZING
+ HOENN_DEX_RHYHORN, // SPECIES_RHYHORN
+ HOENN_DEX_RHYDON, // SPECIES_RHYDON
+ HOENN_DEX_CHANSEY, // SPECIES_CHANSEY
+ HOENN_DEX_TANGELA, // SPECIES_TANGELA
+ HOENN_DEX_KANGASKHAN, // SPECIES_KANGASKHAN
+ HOENN_DEX_HORSEA, // SPECIES_HORSEA
+ HOENN_DEX_SEADRA, // SPECIES_SEADRA
+ HOENN_DEX_GOLDEEN, // SPECIES_GOLDEEN
+ HOENN_DEX_SEAKING, // SPECIES_SEAKING
+ HOENN_DEX_STARYU, // SPECIES_STARYU
+ HOENN_DEX_STARMIE, // SPECIES_STARMIE
+ HOENN_DEX_MR_MIME, // SPECIES_MR_MIME
+ HOENN_DEX_SCYTHER, // SPECIES_SCYTHER
+ HOENN_DEX_JYNX, // SPECIES_JYNX
+ HOENN_DEX_ELECTABUZZ, // SPECIES_ELECTABUZZ
+ HOENN_DEX_MAGMAR, // SPECIES_MAGMAR
+ HOENN_DEX_PINSIR, // SPECIES_PINSIR
+ HOENN_DEX_TAUROS, // SPECIES_TAUROS
+ HOENN_DEX_MAGIKARP, // SPECIES_MAGIKARP
+ HOENN_DEX_GYARADOS, // SPECIES_GYARADOS
+ HOENN_DEX_LAPRAS, // SPECIES_LAPRAS
+ HOENN_DEX_DITTO, // SPECIES_DITTO
+ HOENN_DEX_EEVEE, // SPECIES_EEVEE
+ HOENN_DEX_VAPOREON, // SPECIES_VAPOREON
+ HOENN_DEX_JOLTEON, // SPECIES_JOLTEON
+ HOENN_DEX_FLAREON, // SPECIES_FLAREON
+ HOENN_DEX_PORYGON, // SPECIES_PORYGON
+ HOENN_DEX_OMANYTE, // SPECIES_OMANYTE
+ HOENN_DEX_OMASTAR, // SPECIES_OMASTAR
+ HOENN_DEX_KABUTO, // SPECIES_KABUTO
+ HOENN_DEX_KABUTOPS, // SPECIES_KABUTOPS
+ HOENN_DEX_AERODACTYL, // SPECIES_AERODACTYL
+ HOENN_DEX_SNORLAX, // SPECIES_SNORLAX
+ HOENN_DEX_ARTICUNO, // SPECIES_ARTICUNO
+ HOENN_DEX_ZAPDOS, // SPECIES_ZAPDOS
+ HOENN_DEX_MOLTRES, // SPECIES_MOLTRES
+ HOENN_DEX_DRATINI, // SPECIES_DRATINI
+ HOENN_DEX_DRAGONAIR, // SPECIES_DRAGONAIR
+ HOENN_DEX_DRAGONITE, // SPECIES_DRAGONITE
+ HOENN_DEX_MEWTWO, // SPECIES_MEWTWO
+ HOENN_DEX_MEW, // SPECIES_MEW
+ HOENN_DEX_CHIKORITA, // SPECIES_CHIKORITA
+ HOENN_DEX_BAYLEEF, // SPECIES_BAYLEEF
+ HOENN_DEX_MEGANIUM, // SPECIES_MEGANIUM
+ HOENN_DEX_CYNDAQUIL, // SPECIES_CYNDAQUIL
+ HOENN_DEX_QUILAVA, // SPECIES_QUILAVA
+ HOENN_DEX_TYPHLOSION, // SPECIES_TYPHLOSION
+ HOENN_DEX_TOTODILE, // SPECIES_TOTODILE
+ HOENN_DEX_CROCONAW, // SPECIES_CROCONAW
+ HOENN_DEX_FERALIGATR, // SPECIES_FERALIGATR
+ HOENN_DEX_SENTRET, // SPECIES_SENTRET
+ HOENN_DEX_FURRET, // SPECIES_FURRET
+ HOENN_DEX_HOOTHOOT, // SPECIES_HOOTHOOT
+ HOENN_DEX_NOCTOWL, // SPECIES_NOCTOWL
+ HOENN_DEX_LEDYBA, // SPECIES_LEDYBA
+ HOENN_DEX_LEDIAN, // SPECIES_LEDIAN
+ HOENN_DEX_SPINARAK, // SPECIES_SPINARAK
+ HOENN_DEX_ARIADOS, // SPECIES_ARIADOS
+ HOENN_DEX_CROBAT, // SPECIES_CROBAT
+ HOENN_DEX_CHINCHOU, // SPECIES_CHINCHOU
+ HOENN_DEX_LANTURN, // SPECIES_LANTURN
+ HOENN_DEX_PICHU, // SPECIES_PICHU
+ HOENN_DEX_CLEFFA, // SPECIES_CLEFFA
+ HOENN_DEX_IGGLYBUFF, // SPECIES_IGGLYBUFF
+ HOENN_DEX_TOGEPI, // SPECIES_TOGEPI
+ HOENN_DEX_TOGETIC, // SPECIES_TOGETIC
+ HOENN_DEX_NATU, // SPECIES_NATU
+ HOENN_DEX_XATU, // SPECIES_XATU
+ HOENN_DEX_MAREEP, // SPECIES_MAREEP
+ HOENN_DEX_FLAAFFY, // SPECIES_FLAAFFY
+ HOENN_DEX_AMPHAROS, // SPECIES_AMPHAROS
+ HOENN_DEX_BELLOSSOM, // SPECIES_BELLOSSOM
+ HOENN_DEX_MARILL, // SPECIES_MARILL
+ HOENN_DEX_AZUMARILL, // SPECIES_AZUMARILL
+ HOENN_DEX_SUDOWOODO, // SPECIES_SUDOWOODO
+ HOENN_DEX_POLITOED, // SPECIES_POLITOED
+ HOENN_DEX_HOPPIP, // SPECIES_HOPPIP
+ HOENN_DEX_SKIPLOOM, // SPECIES_SKIPLOOM
+ HOENN_DEX_JUMPLUFF, // SPECIES_JUMPLUFF
+ HOENN_DEX_AIPOM, // SPECIES_AIPOM
+ HOENN_DEX_SUNKERN, // SPECIES_SUNKERN
+ HOENN_DEX_SUNFLORA, // SPECIES_SUNFLORA
+ HOENN_DEX_YANMA, // SPECIES_YANMA
+ HOENN_DEX_WOOPER, // SPECIES_WOOPER
+ HOENN_DEX_QUAGSIRE, // SPECIES_QUAGSIRE
+ HOENN_DEX_ESPEON, // SPECIES_ESPEON
+ HOENN_DEX_UMBREON, // SPECIES_UMBREON
+ HOENN_DEX_MURKROW, // SPECIES_MURKROW
+ HOENN_DEX_SLOWKING, // SPECIES_SLOWKING
+ HOENN_DEX_MISDREAVUS, // SPECIES_MISDREAVUS
+ HOENN_DEX_UNOWN, // SPECIES_UNOWN
+ HOENN_DEX_WOBBUFFET, // SPECIES_WOBBUFFET
+ HOENN_DEX_GIRAFARIG, // SPECIES_GIRAFARIG
+ HOENN_DEX_PINECO, // SPECIES_PINECO
+ HOENN_DEX_FORRETRESS, // SPECIES_FORRETRESS
+ HOENN_DEX_DUNSPARCE, // SPECIES_DUNSPARCE
+ HOENN_DEX_GLIGAR, // SPECIES_GLIGAR
+ HOENN_DEX_STEELIX, // SPECIES_STEELIX
+ HOENN_DEX_SNUBBULL, // SPECIES_SNUBBULL
+ HOENN_DEX_GRANBULL, // SPECIES_GRANBULL
+ HOENN_DEX_QWILFISH, // SPECIES_QWILFISH
+ HOENN_DEX_SCIZOR, // SPECIES_SCIZOR
+ HOENN_DEX_SHUCKLE, // SPECIES_SHUCKLE
+ HOENN_DEX_HERACROSS, // SPECIES_HERACROSS
+ HOENN_DEX_SNEASEL, // SPECIES_SNEASEL
+ HOENN_DEX_TEDDIURSA, // SPECIES_TEDDIURSA
+ HOENN_DEX_URSARING, // SPECIES_URSARING
+ HOENN_DEX_SLUGMA, // SPECIES_SLUGMA
+ HOENN_DEX_MAGCARGO, // SPECIES_MAGCARGO
+ HOENN_DEX_SWINUB, // SPECIES_SWINUB
+ HOENN_DEX_PILOSWINE, // SPECIES_PILOSWINE
+ HOENN_DEX_CORSOLA, // SPECIES_CORSOLA
+ HOENN_DEX_REMORAID, // SPECIES_REMORAID
+ HOENN_DEX_OCTILLERY, // SPECIES_OCTILLERY
+ HOENN_DEX_DELIBIRD, // SPECIES_DELIBIRD
+ HOENN_DEX_MANTINE, // SPECIES_MANTINE
+ HOENN_DEX_SKARMORY, // SPECIES_SKARMORY
+ HOENN_DEX_HOUNDOUR, // SPECIES_HOUNDOUR
+ HOENN_DEX_HOUNDOOM, // SPECIES_HOUNDOOM
+ HOENN_DEX_KINGDRA, // SPECIES_KINGDRA
+ HOENN_DEX_PHANPY, // SPECIES_PHANPY
+ HOENN_DEX_DONPHAN, // SPECIES_DONPHAN
+ HOENN_DEX_PORYGON2, // SPECIES_PORYGON2
+ HOENN_DEX_STANTLER, // SPECIES_STANTLER
+ HOENN_DEX_SMEARGLE, // SPECIES_SMEARGLE
+ HOENN_DEX_TYROGUE, // SPECIES_TYROGUE
+ HOENN_DEX_HITMONTOP, // SPECIES_HITMONTOP
+ HOENN_DEX_SMOOCHUM, // SPECIES_SMOOCHUM
+ HOENN_DEX_ELEKID, // SPECIES_ELEKID
+ HOENN_DEX_MAGBY, // SPECIES_MAGBY
+ HOENN_DEX_MILTANK, // SPECIES_MILTANK
+ HOENN_DEX_BLISSEY, // SPECIES_BLISSEY
+ HOENN_DEX_RAIKOU, // SPECIES_RAIKOU
+ HOENN_DEX_ENTEI, // SPECIES_ENTEI
+ HOENN_DEX_SUICUNE, // SPECIES_SUICUNE
+ HOENN_DEX_LARVITAR, // SPECIES_LARVITAR
+ HOENN_DEX_PUPITAR, // SPECIES_PUPITAR
+ HOENN_DEX_TYRANITAR, // SPECIES_TYRANITAR
+ HOENN_DEX_LUGIA, // SPECIES_LUGIA
+ HOENN_DEX_HO_OH, // SPECIES_HO-OH
+ HOENN_DEX_CELEBI, // SPECIES_CELEBI
+ HOENN_DEX_OLD_UNOWN_B, // SPECIES_OLD_UNOWN_B
+ HOENN_DEX_OLD_UNOWN_C, // SPECIES_OLD_UNOWN_C
+ HOENN_DEX_OLD_UNOWN_D, // SPECIES_OLD_UNOWN_D
+ HOENN_DEX_OLD_UNOWN_E, // SPECIES_OLD_UNOWN_E
+ HOENN_DEX_OLD_UNOWN_F, // SPECIES_OLD_UNOWN_F
+ HOENN_DEX_OLD_UNOWN_G, // SPECIES_OLD_UNOWN_G
+ HOENN_DEX_OLD_UNOWN_H, // SPECIES_OLD_UNOWN_H
+ HOENN_DEX_OLD_UNOWN_I, // SPECIES_OLD_UNOWN_I
+ HOENN_DEX_OLD_UNOWN_J, // SPECIES_OLD_UNOWN_J
+ HOENN_DEX_OLD_UNOWN_K, // SPECIES_OLD_UNOWN_K
+ HOENN_DEX_OLD_UNOWN_L, // SPECIES_OLD_UNOWN_L
+ HOENN_DEX_OLD_UNOWN_M, // SPECIES_OLD_UNOWN_M
+ HOENN_DEX_OLD_UNOWN_N, // SPECIES_OLD_UNOWN_N
+ HOENN_DEX_OLD_UNOWN_O, // SPECIES_OLD_UNOWN_O
+ HOENN_DEX_OLD_UNOWN_P, // SPECIES_OLD_UNOWN_P
+ HOENN_DEX_OLD_UNOWN_Q, // SPECIES_OLD_UNOWN_Q
+ HOENN_DEX_OLD_UNOWN_R, // SPECIES_OLD_UNOWN_R
+ HOENN_DEX_OLD_UNOWN_S, // SPECIES_OLD_UNOWN_S
+ HOENN_DEX_OLD_UNOWN_T, // SPECIES_OLD_UNOWN_T
+ HOENN_DEX_OLD_UNOWN_U, // SPECIES_OLD_UNOWN_U
+ HOENN_DEX_OLD_UNOWN_V, // SPECIES_OLD_UNOWN_V
+ HOENN_DEX_OLD_UNOWN_W, // SPECIES_OLD_UNOWN_W
+ HOENN_DEX_OLD_UNOWN_X, // SPECIES_OLD_UNOWN_X
+ HOENN_DEX_OLD_UNOWN_Y, // SPECIES_OLD_UNOWN_Y
+ HOENN_DEX_OLD_UNOWN_Z, // SPECIES_OLD_UNOWN_Z
+ HOENN_DEX_TREECKO, // SPECIES_TREECKO
+ HOENN_DEX_GROVYLE, // SPECIES_GROVYLE
+ HOENN_DEX_SCEPTILE, // SPECIES_SCEPTILE
+ HOENN_DEX_TORCHIC, // SPECIES_TORCHIC
+ HOENN_DEX_COMBUSKEN, // SPECIES_COMBUSKEN
+ HOENN_DEX_BLAZIKEN, // SPECIES_BLAZIKEN
+ HOENN_DEX_MUDKIP, // SPECIES_MUDKIP
+ HOENN_DEX_MARSHTOMP, // SPECIES_MARSHTOMP
+ HOENN_DEX_SWAMPERT, // SPECIES_SWAMPERT
+ HOENN_DEX_POOCHYENA, // SPECIES_POOCHYENA
+ HOENN_DEX_MIGHTYENA, // SPECIES_MIGHTYENA
+ HOENN_DEX_ZIGZAGOON, // SPECIES_ZIGZAGOON
+ HOENN_DEX_LINOONE, // SPECIES_LINOONE
+ HOENN_DEX_WURMPLE, // SPECIES_WURMPLE
+ HOENN_DEX_SILCOON, // SPECIES_SILCOON
+ HOENN_DEX_BEAUTIFLY, // SPECIES_BEAUTIFLY
+ HOENN_DEX_CASCOON, // SPECIES_CASCOON
+ HOENN_DEX_DUSTOX, // SPECIES_DUSTOX
+ HOENN_DEX_LOTAD, // SPECIES_LOTAD
+ HOENN_DEX_LOMBRE, // SPECIES_LOMBRE
+ HOENN_DEX_LUDICOLO, // SPECIES_LUDICOLO
+ HOENN_DEX_SEEDOT, // SPECIES_SEEDOT
+ HOENN_DEX_NUZLEAF, // SPECIES_NUZLEAF
+ HOENN_DEX_SHIFTRY, // SPECIES_SHIFTRY
+ HOENN_DEX_NINCADA, // SPECIES_NINCADA
+ HOENN_DEX_NINJASK, // SPECIES_NINJASK
+ HOENN_DEX_SHEDINJA, // SPECIES_SHEDINJA
+ HOENN_DEX_TAILLOW, // SPECIES_TAILLOW
+ HOENN_DEX_SWELLOW, // SPECIES_SWELLOW
+ HOENN_DEX_SHROOMISH, // SPECIES_SHROOMISH
+ HOENN_DEX_BRELOOM, // SPECIES_BRELOOM
+ HOENN_DEX_SPINDA, // SPECIES_SPINDA
+ HOENN_DEX_WINGULL, // SPECIES_WINGULL
+ HOENN_DEX_PELIPPER, // SPECIES_PELIPPER
+ HOENN_DEX_SURSKIT, // SPECIES_SURSKIT
+ HOENN_DEX_MASQUERAIN, // SPECIES_MASQUERAIN
+ HOENN_DEX_WAILMER, // SPECIES_WAILMER
+ HOENN_DEX_WAILORD, // SPECIES_WAILORD
+ HOENN_DEX_SKITTY, // SPECIES_SKITTY
+ HOENN_DEX_DELCATTY, // SPECIES_DELCATTY
+ HOENN_DEX_KECLEON, // SPECIES_KECLEON
+ HOENN_DEX_BALTOY, // SPECIES_BALTOY
+ HOENN_DEX_CLAYDOL, // SPECIES_CLAYDOL
+ HOENN_DEX_NOSEPASS, // SPECIES_NOSEPASS
+ HOENN_DEX_TORKOAL, // SPECIES_TORKOAL
+ HOENN_DEX_SABLEYE, // SPECIES_SABLEYE
+ HOENN_DEX_BARBOACH, // SPECIES_BARBOACH
+ HOENN_DEX_WHISCASH, // SPECIES_WHISCASH
+ HOENN_DEX_LUVDISC, // SPECIES_LUVDISC
+ HOENN_DEX_CORPHISH, // SPECIES_CORPHISH
+ HOENN_DEX_CRAWDAUNT, // SPECIES_CRAWDAUNT
+ HOENN_DEX_FEEBAS, // SPECIES_FEEBAS
+ HOENN_DEX_MILOTIC, // SPECIES_MILOTIC
+ HOENN_DEX_CARVANHA, // SPECIES_CARVANHA
+ HOENN_DEX_SHARPEDO, // SPECIES_SHARPEDO
+ HOENN_DEX_TRAPINCH, // SPECIES_TRAPINCH
+ HOENN_DEX_VIBRAVA, // SPECIES_VIBRAVA
+ HOENN_DEX_FLYGON, // SPECIES_FLYGON
+ HOENN_DEX_MAKUHITA, // SPECIES_MAKUHITA
+ HOENN_DEX_HARIYAMA, // SPECIES_HARIYAMA
+ HOENN_DEX_ELECTRIKE, // SPECIES_ELECTRIKE
+ HOENN_DEX_MANECTRIC, // SPECIES_MANECTRIC
+ HOENN_DEX_NUMEL, // SPECIES_NUMEL
+ HOENN_DEX_CAMERUPT, // SPECIES_CAMERUPT
+ HOENN_DEX_SPHEAL, // SPECIES_SPHEAL
+ HOENN_DEX_SEALEO, // SPECIES_SEALEO
+ HOENN_DEX_WALREIN, // SPECIES_WALREIN
+ HOENN_DEX_CACNEA, // SPECIES_CACNEA
+ HOENN_DEX_CACTURNE, // SPECIES_CACTURNE
+ HOENN_DEX_SNORUNT, // SPECIES_SNORUNT
+ HOENN_DEX_GLALIE, // SPECIES_GLALIE
+ HOENN_DEX_LUNATONE, // SPECIES_LUNATONE
+ HOENN_DEX_SOLROCK, // SPECIES_SOLROCK
+ HOENN_DEX_AZURILL, // SPECIES_AZURILL
+ HOENN_DEX_SPOINK, // SPECIES_SPOINK
+ HOENN_DEX_GRUMPIG, // SPECIES_GRUMPIG
+ HOENN_DEX_PLUSLE, // SPECIES_PLUSLE
+ HOENN_DEX_MINUN, // SPECIES_MINUN
+ HOENN_DEX_MAWILE, // SPECIES_MAWILE
+ HOENN_DEX_MEDITITE, // SPECIES_MEDITITE
+ HOENN_DEX_MEDICHAM, // SPECIES_MEDICHAM
+ HOENN_DEX_SWABLU, // SPECIES_SWABLU
+ HOENN_DEX_ALTARIA, // SPECIES_ALTARIA
+ HOENN_DEX_WYNAUT, // SPECIES_WYNAUT
+ HOENN_DEX_DUSKULL, // SPECIES_DUSKULL
+ HOENN_DEX_DUSCLOPS, // SPECIES_DUSCLOPS
+ HOENN_DEX_ROSELIA, // SPECIES_ROSELIA
+ HOENN_DEX_SLAKOTH, // SPECIES_SLAKOTH
+ HOENN_DEX_VIGOROTH, // SPECIES_VIGOROTH
+ HOENN_DEX_SLAKING, // SPECIES_SLAKING
+ HOENN_DEX_GULPIN, // SPECIES_GULPIN
+ HOENN_DEX_SWALOT, // SPECIES_SWALOT
+ HOENN_DEX_TROPIUS, // SPECIES_TROPIUS
+ HOENN_DEX_WHISMUR, // SPECIES_WHISMUR
+ HOENN_DEX_LOUDRED, // SPECIES_LOUDRED
+ HOENN_DEX_EXPLOUD, // SPECIES_EXPLOUD
+ HOENN_DEX_CLAMPERL, // SPECIES_CLAMPERL
+ HOENN_DEX_HUNTAIL, // SPECIES_HUNTAIL
+ HOENN_DEX_GOREBYSS, // SPECIES_GOREBYSS
+ HOENN_DEX_ABSOL, // SPECIES_ABSOL
+ HOENN_DEX_SHUPPET, // SPECIES_SHUPPET
+ HOENN_DEX_BANETTE, // SPECIES_BANETTE
+ HOENN_DEX_SEVIPER, // SPECIES_SEVIPER
+ HOENN_DEX_ZANGOOSE, // SPECIES_ZANGOOSE
+ HOENN_DEX_RELICANTH, // SPECIES_RELICANTH
+ HOENN_DEX_ARON, // SPECIES_ARON
+ HOENN_DEX_LAIRON, // SPECIES_LAIRON
+ HOENN_DEX_AGGRON, // SPECIES_AGGRON
+ HOENN_DEX_CASTFORM, // SPECIES_CASTFORM
+ HOENN_DEX_VOLBEAT, // SPECIES_VOLBEAT
+ HOENN_DEX_ILLUMISE, // SPECIES_ILLUMISE
+ HOENN_DEX_LILEEP, // SPECIES_LILEEP
+ HOENN_DEX_CRADILY, // SPECIES_CRADILY
+ HOENN_DEX_ANORITH, // SPECIES_ANORITH
+ HOENN_DEX_ARMALDO, // SPECIES_ARMALDO
+ HOENN_DEX_RALTS, // SPECIES_RALTS
+ HOENN_DEX_KIRLIA, // SPECIES_KIRLIA
+ HOENN_DEX_GARDEVOIR, // SPECIES_GARDEVOIR
+ HOENN_DEX_BAGON, // SPECIES_BAGON
+ HOENN_DEX_SHELGON, // SPECIES_SHELGON
+ HOENN_DEX_SALAMENCE, // SPECIES_SALAMENCE
+ HOENN_DEX_BELDUM, // SPECIES_BELDUM
+ HOENN_DEX_METANG, // SPECIES_METANG
+ HOENN_DEX_METAGROSS, // SPECIES_METAGROSS
+ HOENN_DEX_REGIROCK, // SPECIES_REGIROCK
+ HOENN_DEX_REGICE, // SPECIES_REGICE
+ HOENN_DEX_REGISTEEL, // SPECIES_REGISTEEL
+ HOENN_DEX_KYOGRE, // SPECIES_KYOGRE
+ HOENN_DEX_GROUDON, // SPECIES_GROUDON
+ HOENN_DEX_RAYQUAZA, // SPECIES_RAYQUAZA
+ HOENN_DEX_LATIAS, // SPECIES_LATIAS
+ HOENN_DEX_LATIOS, // SPECIES_LATIOS
+ HOENN_DEX_JIRACHI, // SPECIES_JIRACHI
+ HOENN_DEX_DEOXYS, // SPECIES_DEOXYS
+ HOENN_DEX_CHIMECHO // SPECIES_CHIMECHO
+};
+
+const u16 gSpeciesToNationalPokedexNum[] = // Assigns all species to the National Dex Index (Summary No. for National Dex)
+{
+ // SPECIES_NONE
+ NATIONAL_DEX_BULBASAUR, // SPECIES_BULBASAUR
+ NATIONAL_DEX_IVYSAUR, // SPECIES_IVYSAUR
+ NATIONAL_DEX_VENUSAUR, // SPECIES_VENUSAUR
+ NATIONAL_DEX_CHARMANDER, // SPECIES_CHARMANDER
+ NATIONAL_DEX_CHARMELEON, // SPECIES_CHARMELEON
+ NATIONAL_DEX_CHARIZARD, // SPECIES_CHARIZARD
+ NATIONAL_DEX_SQUIRTLE, // SPECIES_SQUIRTLE
+ NATIONAL_DEX_WARTORTLE, // SPECIES_WARTORTLE
+ NATIONAL_DEX_BLASTOISE, // SPECIES_BLASTOISE
+ NATIONAL_DEX_CATERPIE, // SPECIES_CATERPIE
+ NATIONAL_DEX_METAPOD, // SPECIES_METAPOD
+ NATIONAL_DEX_BUTTERFREE, // SPECIES_BUTTERFREE
+ NATIONAL_DEX_WEEDLE, // SPECIES_WEEDLE
+ NATIONAL_DEX_KAKUNA, // SPECIES_KAKUNA
+ NATIONAL_DEX_BEEDRILL, // SPECIES_BEEDRILL
+ NATIONAL_DEX_PIDGEY, // SPECIES_PIDGEY
+ NATIONAL_DEX_PIDGEOTTO, // SPECIES_PIDGEOTTO
+ NATIONAL_DEX_PIDGEOT, // SPECIES_PIDGEOT
+ NATIONAL_DEX_RATTATA, // SPECIES_RATTATA
+ NATIONAL_DEX_RATICATE, // SPECIES_RATICATE
+ NATIONAL_DEX_SPEAROW, // SPECIES_SPEAROW
+ NATIONAL_DEX_FEAROW, // SPECIES_FEAROW
+ NATIONAL_DEX_EKANS, // SPECIES_EKANS
+ NATIONAL_DEX_ARBOK, // SPECIES_ARBOK
+ NATIONAL_DEX_PIKACHU, // SPECIES_PIKACHU
+ NATIONAL_DEX_RAICHU, // SPECIES_RAICHU
+ NATIONAL_DEX_SANDSHREW, // SPECIES_SANDSHREW
+ NATIONAL_DEX_SANDSLASH, // SPECIES_SANDSLASH
+ NATIONAL_DEX_NIDORAN_F, // SPECIES_NIDORAN_F
+ NATIONAL_DEX_NIDORINA, // SPECIES_NIDORINA
+ NATIONAL_DEX_NIDOQUEEN, // SPECIES_NIDOQUEEN
+ NATIONAL_DEX_NIDORAN_M, // SPECIES_NIDORAN_M
+ NATIONAL_DEX_NIDORINO, // SPECIES_NIDORINO
+ NATIONAL_DEX_NIDOKING, // SPECIES_NIDOKING
+ NATIONAL_DEX_CLEFAIRY, // SPECIES_CLEFAIRY
+ NATIONAL_DEX_CLEFABLE, // SPECIES_CLEFABLE
+ NATIONAL_DEX_VULPIX, // SPECIES_VULPIX
+ NATIONAL_DEX_NINETALES, // SPECIES_NINETALES
+ NATIONAL_DEX_JIGGLYPUFF, // SPECIES_JIGGLYPUFF
+ NATIONAL_DEX_WIGGLYTUFF, // SPECIES_WIGGLYTUFF
+ NATIONAL_DEX_ZUBAT, // SPECIES_ZUBAT
+ NATIONAL_DEX_GOLBAT, // SPECIES_GOLBAT
+ NATIONAL_DEX_ODDISH, // SPECIES_ODDISH
+ NATIONAL_DEX_GLOOM, // SPECIES_GLOOM
+ NATIONAL_DEX_VILEPLUME, // SPECIES_VILEPLUME
+ NATIONAL_DEX_PARAS, // SPECIES_PARAS
+ NATIONAL_DEX_PARASECT, // SPECIES_PARASECT
+ NATIONAL_DEX_VENONAT, // SPECIES_VENONAT
+ NATIONAL_DEX_VENOMOTH, // SPECIES_VENOMOTH
+ NATIONAL_DEX_DIGLETT, // SPECIES_DIGLETT
+ NATIONAL_DEX_DUGTRIO, // SPECIES_DUGTRIO
+ NATIONAL_DEX_MEOWTH, // SPECIES_MEOWTH
+ NATIONAL_DEX_PERSIAN, // SPECIES_PERSIAN
+ NATIONAL_DEX_PSYDUCK, // SPECIES_PSYDUCK
+ NATIONAL_DEX_GOLDUCK, // SPECIES_GOLDUCK
+ NATIONAL_DEX_MANKEY, // SPECIES_MANKEY
+ NATIONAL_DEX_PRIMEAPE, // SPECIES_PRIMEAPE
+ NATIONAL_DEX_GROWLITHE, // SPECIES_GROWLITHE
+ NATIONAL_DEX_ARCANINE, // SPECIES_ARCANINE
+ NATIONAL_DEX_POLIWAG, // SPECIES_POLIWAG
+ NATIONAL_DEX_POLIWHIRL, // SPECIES_POLIWHIRL
+ NATIONAL_DEX_POLIWRATH, // SPECIES_POLIWRATH
+ NATIONAL_DEX_ABRA, // SPECIES_ABRA
+ NATIONAL_DEX_KADABRA, // SPECIES_KADABRA
+ NATIONAL_DEX_ALAKAZAM, // SPECIES_ALAKAZAM
+ NATIONAL_DEX_MACHOP, // SPECIES_MACHOP
+ NATIONAL_DEX_MACHOKE, // SPECIES_MACHOKE
+ NATIONAL_DEX_MACHAMP, // SPECIES_MACHAMP
+ NATIONAL_DEX_BELLSPROUT, // SPECIES_BELLSPROUT
+ NATIONAL_DEX_WEEPINBELL, // SPECIES_WEEPINBELL
+ NATIONAL_DEX_VICTREEBEL, // SPECIES_VICTREEBEL
+ NATIONAL_DEX_TENTACOOL, // SPECIES_TENTACOOL
+ NATIONAL_DEX_TENTACRUEL, // SPECIES_TENTACRUEL
+ NATIONAL_DEX_GEODUDE, // SPECIES_GEODUDE
+ NATIONAL_DEX_GRAVELER, // SPECIES_GRAVELER
+ NATIONAL_DEX_GOLEM, // SPECIES_GOLEM
+ NATIONAL_DEX_PONYTA, // SPECIES_PONYTA
+ NATIONAL_DEX_RAPIDASH, // SPECIES_RAPIDASH
+ NATIONAL_DEX_SLOWPOKE, // SPECIES_SLOWPOKE
+ NATIONAL_DEX_SLOWBRO, // SPECIES_SLOWBRO
+ NATIONAL_DEX_MAGNEMITE, // SPECIES_MAGNEMITE
+ NATIONAL_DEX_MAGNETON, // SPECIES_MAGNETON
+ NATIONAL_DEX_FARFETCHD, // SPECIES_FARFETCHD
+ NATIONAL_DEX_DODUO, // SPECIES_DODUO
+ NATIONAL_DEX_DODRIO, // SPECIES_DODRIO
+ NATIONAL_DEX_SEEL, // SPECIES_SEEL
+ NATIONAL_DEX_DEWGONG, // SPECIES_DEWGONG
+ NATIONAL_DEX_GRIMER, // SPECIES_GRIMER
+ NATIONAL_DEX_MUK, // SPECIES_MUK
+ NATIONAL_DEX_SHELLDER, // SPECIES_SHELLDER
+ NATIONAL_DEX_CLOYSTER, // SPECIES_CLOYSTER
+ NATIONAL_DEX_GASTLY, // SPECIES_GASTLY
+ NATIONAL_DEX_HAUNTER, // SPECIES_HAUNTER
+ NATIONAL_DEX_GENGAR, // SPECIES_GENGAR
+ NATIONAL_DEX_ONIX, // SPECIES_ONIX
+ NATIONAL_DEX_DROWZEE, // SPECIES_DROWZEE
+ NATIONAL_DEX_HYPNO, // SPECIES_HYPNO
+ NATIONAL_DEX_KRABBY, // SPECIES_KRABBY
+ NATIONAL_DEX_KINGLER, // SPECIES_KINGLER
+ NATIONAL_DEX_VOLTORB, // SPECIES_VOLTORB
+ NATIONAL_DEX_ELECTRODE, // SPECIES_ELECTRODE
+ NATIONAL_DEX_EXEGGCUTE, // SPECIES_EXEGGCUTE
+ NATIONAL_DEX_EXEGGUTOR, // SPECIES_EXEGGUTOR
+ NATIONAL_DEX_CUBONE, // SPECIES_CUBONE
+ NATIONAL_DEX_MAROWAK, // SPECIES_MAROWAK
+ NATIONAL_DEX_HITMONLEE, // SPECIES_HITMONLEE
+ NATIONAL_DEX_HITMONCHAN, // SPECIES_HITMONCHAN
+ NATIONAL_DEX_LICKITUNG, // SPECIES_LICKITUNG
+ NATIONAL_DEX_KOFFING, // SPECIES_KOFFING
+ NATIONAL_DEX_WEEZING, // SPECIES_WEEZING
+ NATIONAL_DEX_RHYHORN, // SPECIES_RHYHORN
+ NATIONAL_DEX_RHYDON, // SPECIES_RHYDON
+ NATIONAL_DEX_CHANSEY, // SPECIES_CHANSEY
+ NATIONAL_DEX_TANGELA, // SPECIES_TANGELA
+ NATIONAL_DEX_KANGASKHAN, // SPECIES_KANGASKHAN
+ NATIONAL_DEX_HORSEA, // SPECIES_HORSEA
+ NATIONAL_DEX_SEADRA, // SPECIES_SEADRA
+ NATIONAL_DEX_GOLDEEN, // SPECIES_GOLDEEN
+ NATIONAL_DEX_SEAKING, // SPECIES_SEAKING
+ NATIONAL_DEX_STARYU, // SPECIES_STARYU
+ NATIONAL_DEX_STARMIE, // SPECIES_STARMIE
+ NATIONAL_DEX_MR_MIME, // SPECIES_MR_MIME
+ NATIONAL_DEX_SCYTHER, // SPECIES_SCYTHER
+ NATIONAL_DEX_JYNX, // SPECIES_JYNX
+ NATIONAL_DEX_ELECTABUZZ, // SPECIES_ELECTABUZZ
+ NATIONAL_DEX_MAGMAR, // SPECIES_MAGMAR
+ NATIONAL_DEX_PINSIR, // SPECIES_PINSIR
+ NATIONAL_DEX_TAUROS, // SPECIES_TAUROS
+ NATIONAL_DEX_MAGIKARP, // SPECIES_MAGIKARP
+ NATIONAL_DEX_GYARADOS, // SPECIES_GYARADOS
+ NATIONAL_DEX_LAPRAS, // SPECIES_LAPRAS
+ NATIONAL_DEX_DITTO, // SPECIES_DITTO
+ NATIONAL_DEX_EEVEE, // SPECIES_EEVEE
+ NATIONAL_DEX_VAPOREON, // SPECIES_VAPOREON
+ NATIONAL_DEX_JOLTEON, // SPECIES_JOLTEON
+ NATIONAL_DEX_FLAREON, // SPECIES_FLAREON
+ NATIONAL_DEX_PORYGON, // SPECIES_PORYGON
+ NATIONAL_DEX_OMANYTE, // SPECIES_OMANYTE
+ NATIONAL_DEX_OMASTAR, // SPECIES_OMASTAR
+ NATIONAL_DEX_KABUTO, // SPECIES_KABUTO
+ NATIONAL_DEX_KABUTOPS, // SPECIES_KABUTOPS
+ NATIONAL_DEX_AERODACTYL, // SPECIES_AERODACTYL
+ NATIONAL_DEX_SNORLAX, // SPECIES_SNORLAX
+ NATIONAL_DEX_ARTICUNO, // SPECIES_ARTICUNO
+ NATIONAL_DEX_ZAPDOS, // SPECIES_ZAPDOS
+ NATIONAL_DEX_MOLTRES, // SPECIES_MOLTRES
+ NATIONAL_DEX_DRATINI, // SPECIES_DRATINI
+ NATIONAL_DEX_DRAGONAIR, // SPECIES_DRAGONAIR
+ NATIONAL_DEX_DRAGONITE, // SPECIES_DRAGONITE
+ NATIONAL_DEX_MEWTWO, // SPECIES_MEWTWO
+ NATIONAL_DEX_MEW, // SPECIES_MEW
+ NATIONAL_DEX_CHIKORITA, // SPECIES_CHIKORITA
+ NATIONAL_DEX_BAYLEEF, // SPECIES_BAYLEEF
+ NATIONAL_DEX_MEGANIUM, // SPECIES_MEGANIUM
+ NATIONAL_DEX_CYNDAQUIL, // SPECIES_CYNDAQUIL
+ NATIONAL_DEX_QUILAVA, // SPECIES_QUILAVA
+ NATIONAL_DEX_TYPHLOSION, // SPECIES_TYPHLOSION
+ NATIONAL_DEX_TOTODILE, // SPECIES_TOTODILE
+ NATIONAL_DEX_CROCONAW, // SPECIES_CROCONAW
+ NATIONAL_DEX_FERALIGATR, // SPECIES_FERALIGATR
+ NATIONAL_DEX_SENTRET, // SPECIES_SENTRET
+ NATIONAL_DEX_FURRET, // SPECIES_FURRET
+ NATIONAL_DEX_HOOTHOOT, // SPECIES_HOOTHOOT
+ NATIONAL_DEX_NOCTOWL, // SPECIES_NOCTOWL
+ NATIONAL_DEX_LEDYBA, // SPECIES_LEDYBA
+ NATIONAL_DEX_LEDIAN, // SPECIES_LEDIAN
+ NATIONAL_DEX_SPINARAK, // SPECIES_SPINARAK
+ NATIONAL_DEX_ARIADOS, // SPECIES_ARIADOS
+ NATIONAL_DEX_CROBAT, // SPECIES_CROBAT
+ NATIONAL_DEX_CHINCHOU, // SPECIES_CHINCHOU
+ NATIONAL_DEX_LANTURN, // SPECIES_LANTURN
+ NATIONAL_DEX_PICHU, // SPECIES_PICHU
+ NATIONAL_DEX_CLEFFA, // SPECIES_CLEFFA
+ NATIONAL_DEX_IGGLYBUFF, // SPECIES_IGGLYBUFF
+ NATIONAL_DEX_TOGEPI, // SPECIES_TOGEPI
+ NATIONAL_DEX_TOGETIC, // SPECIES_TOGETIC
+ NATIONAL_DEX_NATU, // SPECIES_NATU
+ NATIONAL_DEX_XATU, // SPECIES_XATU
+ NATIONAL_DEX_MAREEP, // SPECIES_MAREEP
+ NATIONAL_DEX_FLAAFFY, // SPECIES_FLAAFFY
+ NATIONAL_DEX_AMPHAROS, // SPECIES_AMPHAROS
+ NATIONAL_DEX_BELLOSSOM, // SPECIES_BELLOSSOM
+ NATIONAL_DEX_MARILL, // SPECIES_MARILL
+ NATIONAL_DEX_AZUMARILL, // SPECIES_AZUMARILL
+ NATIONAL_DEX_SUDOWOODO, // SPECIES_SUDOWOODO
+ NATIONAL_DEX_POLITOED, // SPECIES_POLITOED
+ NATIONAL_DEX_HOPPIP, // SPECIES_HOPPIP
+ NATIONAL_DEX_SKIPLOOM, // SPECIES_SKIPLOOM
+ NATIONAL_DEX_JUMPLUFF, // SPECIES_JUMPLUFF
+ NATIONAL_DEX_AIPOM, // SPECIES_AIPOM
+ NATIONAL_DEX_SUNKERN, // SPECIES_SUNKERN
+ NATIONAL_DEX_SUNFLORA, // SPECIES_SUNFLORA
+ NATIONAL_DEX_YANMA, // SPECIES_YANMA
+ NATIONAL_DEX_WOOPER, // SPECIES_WOOPER
+ NATIONAL_DEX_QUAGSIRE, // SPECIES_QUAGSIRE
+ NATIONAL_DEX_ESPEON, // SPECIES_ESPEON
+ NATIONAL_DEX_UMBREON, // SPECIES_UMBREON
+ NATIONAL_DEX_MURKROW, // SPECIES_MURKROW
+ NATIONAL_DEX_SLOWKING, // SPECIES_SLOWKING
+ NATIONAL_DEX_MISDREAVUS, // SPECIES_MISDREAVUS
+ NATIONAL_DEX_UNOWN, // SPECIES_UNOWN
+ NATIONAL_DEX_WOBBUFFET, // SPECIES_WOBBUFFET
+ NATIONAL_DEX_GIRAFARIG, // SPECIES_GIRAFARIG
+ NATIONAL_DEX_PINECO, // SPECIES_PINECO
+ NATIONAL_DEX_FORRETRESS, // SPECIES_FORRETRESS
+ NATIONAL_DEX_DUNSPARCE, // SPECIES_DUNSPARCE
+ NATIONAL_DEX_GLIGAR, // SPECIES_GLIGAR
+ NATIONAL_DEX_STEELIX, // SPECIES_STEELIX
+ NATIONAL_DEX_SNUBBULL, // SPECIES_SNUBBULL
+ NATIONAL_DEX_GRANBULL, // SPECIES_GRANBULL
+ NATIONAL_DEX_QWILFISH, // SPECIES_QWILFISH
+ NATIONAL_DEX_SCIZOR, // SPECIES_SCIZOR
+ NATIONAL_DEX_SHUCKLE, // SPECIES_SHUCKLE
+ NATIONAL_DEX_HERACROSS, // SPECIES_HERACROSS
+ NATIONAL_DEX_SNEASEL, // SPECIES_SNEASEL
+ NATIONAL_DEX_TEDDIURSA, // SPECIES_TEDDIURSA
+ NATIONAL_DEX_URSARING, // SPECIES_URSARING
+ NATIONAL_DEX_SLUGMA, // SPECIES_SLUGMA
+ NATIONAL_DEX_MAGCARGO, // SPECIES_MAGCARGO
+ NATIONAL_DEX_SWINUB, // SPECIES_SWINUB
+ NATIONAL_DEX_PILOSWINE, // SPECIES_PILOSWINE
+ NATIONAL_DEX_CORSOLA, // SPECIES_CORSOLA
+ NATIONAL_DEX_REMORAID, // SPECIES_REMORAID
+ NATIONAL_DEX_OCTILLERY, // SPECIES_OCTILLERY
+ NATIONAL_DEX_DELIBIRD, // SPECIES_DELIBIRD
+ NATIONAL_DEX_MANTINE, // SPECIES_MANTINE
+ NATIONAL_DEX_SKARMORY, // SPECIES_SKARMORY
+ NATIONAL_DEX_HOUNDOUR, // SPECIES_HOUNDOUR
+ NATIONAL_DEX_HOUNDOOM, // SPECIES_HOUNDOOM
+ NATIONAL_DEX_KINGDRA, // SPECIES_KINGDRA
+ NATIONAL_DEX_PHANPY, // SPECIES_PHANPY
+ NATIONAL_DEX_DONPHAN, // SPECIES_DONPHAN
+ NATIONAL_DEX_PORYGON2, // SPECIES_PORYGON2
+ NATIONAL_DEX_STANTLER, // SPECIES_STANTLER
+ NATIONAL_DEX_SMEARGLE, // SPECIES_SMEARGLE
+ NATIONAL_DEX_TYROGUE, // SPECIES_TYROGUE
+ NATIONAL_DEX_HITMONTOP, // SPECIES_HITMONTOP
+ NATIONAL_DEX_SMOOCHUM, // SPECIES_SMOOCHUM
+ NATIONAL_DEX_ELEKID, // SPECIES_ELEKID
+ NATIONAL_DEX_MAGBY, // SPECIES_MAGBY
+ NATIONAL_DEX_MILTANK, // SPECIES_MILTANK
+ NATIONAL_DEX_BLISSEY, // SPECIES_BLISSEY
+ NATIONAL_DEX_RAIKOU, // SPECIES_RAIKOU
+ NATIONAL_DEX_ENTEI, // SPECIES_ENTEI
+ NATIONAL_DEX_SUICUNE, // SPECIES_SUICUNE
+ NATIONAL_DEX_LARVITAR, // SPECIES_LARVITAR
+ NATIONAL_DEX_PUPITAR, // SPECIES_PUPITAR
+ NATIONAL_DEX_TYRANITAR, // SPECIES_TYRANITAR
+ NATIONAL_DEX_LUGIA, // SPECIES_LUGIA
+ NATIONAL_DEX_HO_OH, // SPECIES_HO-OH
+ NATIONAL_DEX_CELEBI, // SPECIES_CELEBI
+ NATIONAL_DEX_OLD_UNOWN_B, // SPECIES_OLD_UNOWN_B
+ NATIONAL_DEX_OLD_UNOWN_C, // SPECIES_OLD_UNOWN_C
+ NATIONAL_DEX_OLD_UNOWN_D, // SPECIES_OLD_UNOWN_D
+ NATIONAL_DEX_OLD_UNOWN_E, // SPECIES_OLD_UNOWN_E
+ NATIONAL_DEX_OLD_UNOWN_F, // SPECIES_OLD_UNOWN_F
+ NATIONAL_DEX_OLD_UNOWN_G, // SPECIES_OLD_UNOWN_G
+ NATIONAL_DEX_OLD_UNOWN_H, // SPECIES_OLD_UNOWN_H
+ NATIONAL_DEX_OLD_UNOWN_I, // SPECIES_OLD_UNOWN_I
+ NATIONAL_DEX_OLD_UNOWN_J, // SPECIES_OLD_UNOWN_J
+ NATIONAL_DEX_OLD_UNOWN_K, // SPECIES_OLD_UNOWN_K
+ NATIONAL_DEX_OLD_UNOWN_L, // SPECIES_OLD_UNOWN_L
+ NATIONAL_DEX_OLD_UNOWN_M, // SPECIES_OLD_UNOWN_M
+ NATIONAL_DEX_OLD_UNOWN_N, // SPECIES_OLD_UNOWN_N
+ NATIONAL_DEX_OLD_UNOWN_O, // SPECIES_OLD_UNOWN_O
+ NATIONAL_DEX_OLD_UNOWN_P, // SPECIES_OLD_UNOWN_P
+ NATIONAL_DEX_OLD_UNOWN_Q, // SPECIES_OLD_UNOWN_Q
+ NATIONAL_DEX_OLD_UNOWN_R, // SPECIES_OLD_UNOWN_R
+ NATIONAL_DEX_OLD_UNOWN_S, // SPECIES_OLD_UNOWN_S
+ NATIONAL_DEX_OLD_UNOWN_T, // SPECIES_OLD_UNOWN_T
+ NATIONAL_DEX_OLD_UNOWN_U, // SPECIES_OLD_UNOWN_U
+ NATIONAL_DEX_OLD_UNOWN_V, // SPECIES_OLD_UNOWN_V
+ NATIONAL_DEX_OLD_UNOWN_W, // SPECIES_OLD_UNOWN_W
+ NATIONAL_DEX_OLD_UNOWN_X, // SPECIES_OLD_UNOWN_X
+ NATIONAL_DEX_OLD_UNOWN_Y, // SPECIES_OLD_UNOWN_Y
+ NATIONAL_DEX_OLD_UNOWN_Z, // SPECIES_OLD_UNOWN_Z
+ NATIONAL_DEX_TREECKO, // SPECIES_TREECKO
+ NATIONAL_DEX_GROVYLE, // SPECIES_GROVYLE
+ NATIONAL_DEX_SCEPTILE, // SPECIES_SCEPTILE
+ NATIONAL_DEX_TORCHIC, // SPECIES_TORCHIC
+ NATIONAL_DEX_COMBUSKEN, // SPECIES_COMBUSKEN
+ NATIONAL_DEX_BLAZIKEN, // SPECIES_BLAZIKEN
+ NATIONAL_DEX_MUDKIP, // SPECIES_MUDKIP
+ NATIONAL_DEX_MARSHTOMP, // SPECIES_MARSHTOMP
+ NATIONAL_DEX_SWAMPERT, // SPECIES_SWAMPERT
+ NATIONAL_DEX_POOCHYENA, // SPECIES_POOCHYENA
+ NATIONAL_DEX_MIGHTYENA, // SPECIES_MIGHTYENA
+ NATIONAL_DEX_ZIGZAGOON, // SPECIES_ZIGZAGOON
+ NATIONAL_DEX_LINOONE, // SPECIES_LINOONE
+ NATIONAL_DEX_WURMPLE, // SPECIES_WURMPLE
+ NATIONAL_DEX_SILCOON, // SPECIES_SILCOON
+ NATIONAL_DEX_BEAUTIFLY, // SPECIES_BEAUTIFLY
+ NATIONAL_DEX_CASCOON, // SPECIES_CASCOON
+ NATIONAL_DEX_DUSTOX, // SPECIES_DUSTOX
+ NATIONAL_DEX_LOTAD, // SPECIES_LOTAD
+ NATIONAL_DEX_LOMBRE, // SPECIES_LOMBRE
+ NATIONAL_DEX_LUDICOLO, // SPECIES_LUDICOLO
+ NATIONAL_DEX_SEEDOT, // SPECIES_SEEDOT
+ NATIONAL_DEX_NUZLEAF, // SPECIES_NUZLEAF
+ NATIONAL_DEX_SHIFTRY, // SPECIES_SHIFTRY
+ NATIONAL_DEX_NINCADA, // SPECIES_NINCADA
+ NATIONAL_DEX_NINJASK, // SPECIES_NINJASK
+ NATIONAL_DEX_SHEDINJA, // SPECIES_SHEDINJA
+ NATIONAL_DEX_TAILLOW, // SPECIES_TAILLOW
+ NATIONAL_DEX_SWELLOW, // SPECIES_SWELLOW
+ NATIONAL_DEX_SHROOMISH, // SPECIES_SHROOMISH
+ NATIONAL_DEX_BRELOOM, // SPECIES_BRELOOM
+ NATIONAL_DEX_SPINDA, // SPECIES_SPINDA
+ NATIONAL_DEX_WINGULL, // SPECIES_WINGULL
+ NATIONAL_DEX_PELIPPER, // SPECIES_PELIPPER
+ NATIONAL_DEX_SURSKIT, // SPECIES_SURSKIT
+ NATIONAL_DEX_MASQUERAIN, // SPECIES_MASQUERAIN
+ NATIONAL_DEX_WAILMER, // SPECIES_WAILMER
+ NATIONAL_DEX_WAILORD, // SPECIES_WAILORD
+ NATIONAL_DEX_SKITTY, // SPECIES_SKITTY
+ NATIONAL_DEX_DELCATTY, // SPECIES_DELCATTY
+ NATIONAL_DEX_KECLEON, // SPECIES_KECLEON
+ NATIONAL_DEX_BALTOY, // SPECIES_BALTOY
+ NATIONAL_DEX_CLAYDOL, // SPECIES_CLAYDOL
+ NATIONAL_DEX_NOSEPASS, // SPECIES_NOSEPASS
+ NATIONAL_DEX_TORKOAL, // SPECIES_TORKOAL
+ NATIONAL_DEX_SABLEYE, // SPECIES_SABLEYE
+ NATIONAL_DEX_BARBOACH, // SPECIES_BARBOACH
+ NATIONAL_DEX_WHISCASH, // SPECIES_WHISCASH
+ NATIONAL_DEX_LUVDISC, // SPECIES_LUVDISC
+ NATIONAL_DEX_CORPHISH, // SPECIES_CORPHISH
+ NATIONAL_DEX_CRAWDAUNT, // SPECIES_CRAWDAUNT
+ NATIONAL_DEX_FEEBAS, // SPECIES_FEEBAS
+ NATIONAL_DEX_MILOTIC, // SPECIES_MILOTIC
+ NATIONAL_DEX_CARVANHA, // SPECIES_CARVANHA
+ NATIONAL_DEX_SHARPEDO, // SPECIES_SHARPEDO
+ NATIONAL_DEX_TRAPINCH, // SPECIES_TRAPINCH
+ NATIONAL_DEX_VIBRAVA, // SPECIES_VIBRAVA
+ NATIONAL_DEX_FLYGON, // SPECIES_FLYGON
+ NATIONAL_DEX_MAKUHITA, // SPECIES_MAKUHITA
+ NATIONAL_DEX_HARIYAMA, // SPECIES_HARIYAMA
+ NATIONAL_DEX_ELECTRIKE, // SPECIES_ELECTRIKE
+ NATIONAL_DEX_MANECTRIC, // SPECIES_MANECTRIC
+ NATIONAL_DEX_NUMEL, // SPECIES_NUMEL
+ NATIONAL_DEX_CAMERUPT, // SPECIES_CAMERUPT
+ NATIONAL_DEX_SPHEAL, // SPECIES_SPHEAL
+ NATIONAL_DEX_SEALEO, // SPECIES_SEALEO
+ NATIONAL_DEX_WALREIN, // SPECIES_WALREIN
+ NATIONAL_DEX_CACNEA, // SPECIES_CACNEA
+ NATIONAL_DEX_CACTURNE, // SPECIES_CACTURNE
+ NATIONAL_DEX_SNORUNT, // SPECIES_SNORUNT
+ NATIONAL_DEX_GLALIE, // SPECIES_GLALIE
+ NATIONAL_DEX_LUNATONE, // SPECIES_LUNATONE
+ NATIONAL_DEX_SOLROCK, // SPECIES_SOLROCK
+ NATIONAL_DEX_AZURILL, // SPECIES_AZURILL
+ NATIONAL_DEX_SPOINK, // SPECIES_SPOINK
+ NATIONAL_DEX_GRUMPIG, // SPECIES_GRUMPIG
+ NATIONAL_DEX_PLUSLE, // SPECIES_PLUSLE
+ NATIONAL_DEX_MINUN, // SPECIES_MINUN
+ NATIONAL_DEX_MAWILE, // SPECIES_MAWILE
+ NATIONAL_DEX_MEDITITE, // SPECIES_MEDITITE
+ NATIONAL_DEX_MEDICHAM, // SPECIES_MEDICHAM
+ NATIONAL_DEX_SWABLU, // SPECIES_SWABLU
+ NATIONAL_DEX_ALTARIA, // SPECIES_ALTARIA
+ NATIONAL_DEX_WYNAUT, // SPECIES_WYNAUT
+ NATIONAL_DEX_DUSKULL, // SPECIES_DUSKULL
+ NATIONAL_DEX_DUSCLOPS, // SPECIES_DUSCLOPS
+ NATIONAL_DEX_ROSELIA, // SPECIES_ROSELIA
+ NATIONAL_DEX_SLAKOTH, // SPECIES_SLAKOTH
+ NATIONAL_DEX_VIGOROTH, // SPECIES_VIGOROTH
+ NATIONAL_DEX_SLAKING, // SPECIES_SLAKING
+ NATIONAL_DEX_GULPIN, // SPECIES_GULPIN
+ NATIONAL_DEX_SWALOT, // SPECIES_SWALOT
+ NATIONAL_DEX_TROPIUS, // SPECIES_TROPIUS
+ NATIONAL_DEX_WHISMUR, // SPECIES_WHISMUR
+ NATIONAL_DEX_LOUDRED, // SPECIES_LOUDRED
+ NATIONAL_DEX_EXPLOUD, // SPECIES_EXPLOUD
+ NATIONAL_DEX_CLAMPERL, // SPECIES_CLAMPERL
+ NATIONAL_DEX_HUNTAIL, // SPECIES_HUNTAIL
+ NATIONAL_DEX_GOREBYSS, // SPECIES_GOREBYSS
+ NATIONAL_DEX_ABSOL, // SPECIES_ABSOL
+ NATIONAL_DEX_SHUPPET, // SPECIES_SHUPPET
+ NATIONAL_DEX_BANETTE, // SPECIES_BANETTE
+ NATIONAL_DEX_SEVIPER, // SPECIES_SEVIPER
+ NATIONAL_DEX_ZANGOOSE, // SPECIES_ZANGOOSE
+ NATIONAL_DEX_RELICANTH, // SPECIES_RELICANTH
+ NATIONAL_DEX_ARON, // SPECIES_ARON
+ NATIONAL_DEX_LAIRON, // SPECIES_LAIRON
+ NATIONAL_DEX_AGGRON, // SPECIES_AGGRON
+ NATIONAL_DEX_CASTFORM, // SPECIES_CASTFORM
+ NATIONAL_DEX_VOLBEAT, // SPECIES_VOLBEAT
+ NATIONAL_DEX_ILLUMISE, // SPECIES_ILLUMISE
+ NATIONAL_DEX_LILEEP, // SPECIES_LILEEP
+ NATIONAL_DEX_CRADILY, // SPECIES_CRADILY
+ NATIONAL_DEX_ANORITH, // SPECIES_ANORITH
+ NATIONAL_DEX_ARMALDO, // SPECIES_ARMALDO
+ NATIONAL_DEX_RALTS, // SPECIES_RALTS
+ NATIONAL_DEX_KIRLIA, // SPECIES_KIRLIA
+ NATIONAL_DEX_GARDEVOIR, // SPECIES_GARDEVOIR
+ NATIONAL_DEX_BAGON, // SPECIES_BAGON
+ NATIONAL_DEX_SHELGON, // SPECIES_SHELGON
+ NATIONAL_DEX_SALAMENCE, // SPECIES_SALAMENCE
+ NATIONAL_DEX_BELDUM, // SPECIES_BELDUM
+ NATIONAL_DEX_METANG, // SPECIES_METANG
+ NATIONAL_DEX_METAGROSS, // SPECIES_METAGROSS
+ NATIONAL_DEX_REGIROCK, // SPECIES_REGIROCK
+ NATIONAL_DEX_REGICE, // SPECIES_REGICE
+ NATIONAL_DEX_REGISTEEL, // SPECIES_REGISTEEL
+ NATIONAL_DEX_KYOGRE, // SPECIES_KYOGRE
+ NATIONAL_DEX_GROUDON, // SPECIES_GROUDON
+ NATIONAL_DEX_RAYQUAZA, // SPECIES_RAYQUAZA
+ NATIONAL_DEX_LATIAS, // SPECIES_LATIAS
+ NATIONAL_DEX_LATIOS, // SPECIES_LATIOS
+ NATIONAL_DEX_JIRACHI, // SPECIES_JIRACHI
+ NATIONAL_DEX_DEOXYS, // SPECIES_DEOXYS
+ NATIONAL_DEX_CHIMECHO // SPECIES_CHIMECHO
+};
+
+const u16 gHoennToNationalOrder[] = // Assigns Hoenn Dex Pokémon (Using National Dex Index)
+{
+ // 0
+ NATIONAL_DEX_TREECKO, // HOENN_DEX_TREECKO
+ NATIONAL_DEX_GROVYLE, // HOENN_DEX_GROVYLE
+ NATIONAL_DEX_SCEPTILE, // HOENN_DEX_SCEPTILE
+ NATIONAL_DEX_TORCHIC, // HOENN_DEX_TORCHIC
+ NATIONAL_DEX_COMBUSKEN, // HOENN_DEX_COMBUSKEN
+ NATIONAL_DEX_BLAZIKEN, // HOENN_DEX_BLAZIKEN
+ NATIONAL_DEX_MUDKIP, // HOENN_DEX_MUDKIP
+ NATIONAL_DEX_MARSHTOMP, // HOENN_DEX_MARSHTOMP
+ NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT
+ NATIONAL_DEX_POOCHYENA, // HOENN_DEX_POOCHYENA
+ NATIONAL_DEX_MIGHTYENA, // HOENN_DEX_MIGHTYENA
+ NATIONAL_DEX_ZIGZAGOON, // HOENN_DEX_ZIGZAGOON
+ NATIONAL_DEX_LINOONE, // HOENN_DEX_LINOONE
+ NATIONAL_DEX_WURMPLE, // HOENN_DEX_WURMPLE
+ NATIONAL_DEX_SILCOON, // HOENN_DEX_SILCOON
+ NATIONAL_DEX_BEAUTIFLY, // HOENN_DEX_BEAUTIFLY
+ NATIONAL_DEX_CASCOON, // HOENN_DEX_CASCOON
+ NATIONAL_DEX_DUSTOX, // HOENN_DEX_DUSTOX
+ NATIONAL_DEX_LOTAD, // HOENN_DEX_LOTAD
+ NATIONAL_DEX_LOMBRE, // HOENN_DEX_LOMBRE
+ NATIONAL_DEX_LUDICOLO, // HOENN_DEX_LUDICOLO
+ NATIONAL_DEX_SEEDOT, // HOENN_DEX_SEEDOT
+ NATIONAL_DEX_NUZLEAF, // HOENN_DEX_NUZLEAF
+ NATIONAL_DEX_SHIFTRY, // HOENN_DEX_SHIFTRY
+ NATIONAL_DEX_TAILLOW, // HOENN_DEX_TAILLOW
+ NATIONAL_DEX_SWELLOW, // HOENN_DEX_SWELLOW
+ NATIONAL_DEX_WINGULL, // HOENN_DEX_WINGULL
+ NATIONAL_DEX_PELIPPER, // HOENN_DEX_PELIPPER
+ NATIONAL_DEX_RALTS, // HOENN_DEX_RALTS
+ NATIONAL_DEX_KIRLIA, // HOENN_DEX_KIRLIA
+ NATIONAL_DEX_GARDEVOIR, // HOENN_DEX_GARDEVOIR
+ NATIONAL_DEX_SURSKIT, // HOENN_DEX_SURSKIT
+ NATIONAL_DEX_MASQUERAIN, // HOENN_DEX_MASQUERAIN
+ NATIONAL_DEX_SHROOMISH, // HOENN_DEX_SHROOMISH
+ NATIONAL_DEX_BRELOOM, // HOENN_DEX_BRELOOM
+ NATIONAL_DEX_SLAKOTH, // HOENN_DEX_SLAKOTH
+ NATIONAL_DEX_VIGOROTH, // HOENN_DEX_VIGOROTH
+ NATIONAL_DEX_SLAKING, // HOENN_DEX_SLAKING
+ NATIONAL_DEX_ABRA, // HOENN_DEX_ABRA
+ NATIONAL_DEX_KADABRA, // HOENN_DEX_KADABRA
+ NATIONAL_DEX_ALAKAZAM, // HOENN_DEX_ALAKAZAM
+ NATIONAL_DEX_NINCADA, // HOENN_DEX_NINCADA
+ NATIONAL_DEX_NINJASK, // HOENN_DEX_NINJASK
+ NATIONAL_DEX_SHEDINJA, // HOENN_DEX_SHEDINJA
+ NATIONAL_DEX_WHISMUR, // HOENN_DEX_WHISMUR
+ NATIONAL_DEX_LOUDRED, // HOENN_DEX_LOUDRED
+ NATIONAL_DEX_EXPLOUD, // HOENN_DEX_EXPLOUD
+ NATIONAL_DEX_MAKUHITA, // HOENN_DEX_MAKUHITA
+ NATIONAL_DEX_HARIYAMA, // HOENN_DEX_HARIYAMA
+ NATIONAL_DEX_GOLDEEN, // HOENN_DEX_GOLDEEN
+ NATIONAL_DEX_SEAKING, // HOENN_DEX_SEAKING
+ NATIONAL_DEX_MAGIKARP, // HOENN_DEX_MAGIKARP
+ NATIONAL_DEX_GYARADOS, // HOENN_DEX_GYARADOS
+ NATIONAL_DEX_AZURILL, // HOENN_DEX_AZURILL
+ NATIONAL_DEX_MARILL, // HOENN_DEX_MARILL
+ NATIONAL_DEX_AZUMARILL, // HOENN_DEX_AZUMARILL
+ NATIONAL_DEX_GEODUDE, // HOENN_DEX_GEODUDE
+ NATIONAL_DEX_GRAVELER, // HOENN_DEX_GRAVELER
+ NATIONAL_DEX_GOLEM, // HOENN_DEX_GOLEM
+ NATIONAL_DEX_NOSEPASS, // HOENN_DEX_NOSEPASS
+ NATIONAL_DEX_SKITTY, // HOENN_DEX_SKITTY
+ NATIONAL_DEX_DELCATTY, // HOENN_DEX_DELCATTY
+ NATIONAL_DEX_ZUBAT, // HOENN_DEX_ZUBAT
+ NATIONAL_DEX_GOLBAT, // HOENN_DEX_GOLBAT
+ NATIONAL_DEX_CROBAT, // HOENN_DEX_CROBAT
+ NATIONAL_DEX_TENTACOOL, // HOENN_DEX_TENTACOOL
+ NATIONAL_DEX_TENTACRUEL, // HOENN_DEX_TENTACRUEL
+ NATIONAL_DEX_SABLEYE, // HOENN_DEX_SABLEYE
+ NATIONAL_DEX_MAWILE, // HOENN_DEX_MAWILE
+ NATIONAL_DEX_ARON, // HOENN_DEX_ARON
+ NATIONAL_DEX_LAIRON, // HOENN_DEX_LAIRON
+ NATIONAL_DEX_AGGRON, // HOENN_DEX_AGGRON
+ NATIONAL_DEX_MACHOP, // HOENN_DEX_MACHOP
+ NATIONAL_DEX_MACHOKE, // HOENN_DEX_MACHOKE
+ NATIONAL_DEX_MACHAMP, // HOENN_DEX_MACHAMP
+ NATIONAL_DEX_MEDITITE, // HOENN_DEX_MEDITITE
+ NATIONAL_DEX_MEDICHAM, // HOENN_DEX_MEDICHAM
+ NATIONAL_DEX_ELECTRIKE, // HOENN_DEX_ELECTRIKE
+ NATIONAL_DEX_MANECTRIC, // HOENN_DEX_MANECTRIC
+ NATIONAL_DEX_PLUSLE, // HOENN_DEX_PLUSLE
+ NATIONAL_DEX_MINUN, // HOENN_DEX_MINUN
+ NATIONAL_DEX_MAGNEMITE, // HOENN_DEX_MAGNEMITE
+ NATIONAL_DEX_MAGNETON, // HOENN_DEX_MAGNETON
+ NATIONAL_DEX_VOLTORB, // HOENN_DEX_VOLTORB
+ NATIONAL_DEX_ELECTRODE, // HOENN_DEX_ELECTRODE
+ NATIONAL_DEX_VOLBEAT, // HOENN_DEX_VOLBEAT
+ NATIONAL_DEX_ILLUMISE, // HOENN_DEX_ILLUMISE
+ NATIONAL_DEX_ODDISH, // HOENN_DEX_ODDISH
+ NATIONAL_DEX_GLOOM, // HOENN_DEX_GLOOM
+ NATIONAL_DEX_VILEPLUME, // HOENN_DEX_VILEPLUME
+ NATIONAL_DEX_BELLOSSOM, // HOENN_DEX_BELLOSSOM
+ NATIONAL_DEX_DODUO, // HOENN_DEX_DODUO
+ NATIONAL_DEX_DODRIO, // HOENN_DEX_DODRIO
+ NATIONAL_DEX_ROSELIA, // HOENN_DEX_ROSELIA
+ NATIONAL_DEX_GULPIN, // HOENN_DEX_GULPIN
+ NATIONAL_DEX_SWALOT, // HOENN_DEX_SWALOT
+ NATIONAL_DEX_CARVANHA, // HOENN_DEX_CARVANHA
+ NATIONAL_DEX_SHARPEDO, // HOENN_DEX_SHARPEDO
+ NATIONAL_DEX_WAILMER, // HOENN_DEX_WAILMER
+ NATIONAL_DEX_WAILORD, // HOENN_DEX_WAILORD
+ NATIONAL_DEX_NUMEL, // HOENN_DEX_NUMEL
+ NATIONAL_DEX_CAMERUPT, // HOENN_DEX_CAMERUPT
+ NATIONAL_DEX_SLUGMA, // HOENN_DEX_SLUGMA
+ NATIONAL_DEX_MAGCARGO, // HOENN_DEX_MAGCARGO
+ NATIONAL_DEX_TORKOAL, // HOENN_DEX_TORKOAL
+ NATIONAL_DEX_GRIMER, // HOENN_DEX_GRIMER
+ NATIONAL_DEX_MUK, // HOENN_DEX_MUK
+ NATIONAL_DEX_KOFFING, // HOENN_DEX_KOFFING
+ NATIONAL_DEX_WEEZING, // HOENN_DEX_WEEZING
+ NATIONAL_DEX_SPOINK, // HOENN_DEX_SPOINK
+ NATIONAL_DEX_GRUMPIG, // HOENN_DEX_GRUMPIG
+ NATIONAL_DEX_SANDSHREW, // HOENN_DEX_SANDSHREW
+ NATIONAL_DEX_SANDSLASH, // HOENN_DEX_SANDSLASH
+ NATIONAL_DEX_SPINDA, // HOENN_DEX_SPINDA
+ NATIONAL_DEX_SKARMORY, // HOENN_DEX_SKARMORY
+ NATIONAL_DEX_TRAPINCH, // HOENN_DEX_TRAPINCH
+ NATIONAL_DEX_VIBRAVA, // HOENN_DEX_VIBRAVA
+ NATIONAL_DEX_FLYGON, // HOENN_DEX_FLYGON
+ NATIONAL_DEX_CACNEA, // HOENN_DEX_CACNEA
+ NATIONAL_DEX_CACTURNE, // HOENN_DEX_CACTURNE
+ NATIONAL_DEX_SWABLU, // HOENN_DEX_SWABLU
+ NATIONAL_DEX_ALTARIA, // HOENN_DEX_ALTARIA
+ NATIONAL_DEX_ZANGOOSE, // HOENN_DEX_ZANGOOSE
+ NATIONAL_DEX_SEVIPER, // HOENN_DEX_SEVIPER
+ NATIONAL_DEX_LUNATONE, // HOENN_DEX_LUNATONE
+ NATIONAL_DEX_SOLROCK, // HOENN_DEX_SOLROCK
+ NATIONAL_DEX_BARBOACH, // HOENN_DEX_BARBOACH
+ NATIONAL_DEX_WHISCASH, // HOENN_DEX_WHISCASH
+ NATIONAL_DEX_CORPHISH, // HOENN_DEX_CORPHISH
+ NATIONAL_DEX_CRAWDAUNT, // HOENN_DEX_CRAWDAUNT
+ NATIONAL_DEX_BALTOY, // HOENN_DEX_BALTOY
+ NATIONAL_DEX_CLAYDOL, // HOENN_DEX_CLAYDOL
+ NATIONAL_DEX_LILEEP, // HOENN_DEX_LILEEP
+ NATIONAL_DEX_CRADILY, // HOENN_DEX_CRADILY
+ NATIONAL_DEX_ANORITH, // HOENN_DEX_ANORITH
+ NATIONAL_DEX_ARMALDO, // HOENN_DEX_ARMALDO
+ NATIONAL_DEX_IGGLYBUFF, // HOENN_DEX_IGGLYBUFF
+ NATIONAL_DEX_JIGGLYPUFF, // HOENN_DEX_JIGGLYPUFF
+ NATIONAL_DEX_WIGGLYTUFF, // HOENN_DEX_WIGGLYTUFF
+ NATIONAL_DEX_FEEBAS, // HOENN_DEX_FEEBAS
+ NATIONAL_DEX_MILOTIC, // HOENN_DEX_MILOTIC
+ NATIONAL_DEX_CASTFORM, // HOENN_DEX_CASTFORM
+ NATIONAL_DEX_STARYU, // HOENN_DEX_STARYU
+ NATIONAL_DEX_STARMIE, // HOENN_DEX_STARMIE
+ NATIONAL_DEX_KECLEON, // HOENN_DEX_KECLEON
+ NATIONAL_DEX_SHUPPET, // HOENN_DEX_SHUPPET
+ NATIONAL_DEX_BANETTE, // HOENN_DEX_BANETTE
+ NATIONAL_DEX_DUSKULL, // HOENN_DEX_DUSKULL
+ NATIONAL_DEX_DUSCLOPS, // HOENN_DEX_DUSCLOPS
+ NATIONAL_DEX_TROPIUS, // HOENN_DEX_TROPIUS
+ NATIONAL_DEX_CHIMECHO, // HOENN_DEX_CHIMECHO
+ NATIONAL_DEX_ABSOL, // HOENN_DEX_ABSOL
+ NATIONAL_DEX_VULPIX, // HOENN_DEX_VULPIX
+ NATIONAL_DEX_NINETALES, // HOENN_DEX_NINETALES
+ NATIONAL_DEX_PICHU, // HOENN_DEX_PICHU
+ NATIONAL_DEX_PIKACHU, // HOENN_DEX_PIKACHU
+ NATIONAL_DEX_RAICHU, // HOENN_DEX_RAICHU
+ NATIONAL_DEX_PSYDUCK, // HOENN_DEX_PSYDUCK
+ NATIONAL_DEX_GOLDUCK, // HOENN_DEX_GOLDUCK
+ NATIONAL_DEX_WYNAUT, // HOENN_DEX_WYNAUT
+ NATIONAL_DEX_WOBBUFFET, // HOENN_DEX_WOBBUFFET
+ NATIONAL_DEX_NATU, // HOENN_DEX_NATU
+ NATIONAL_DEX_XATU, // HOENN_DEX_XATU
+ NATIONAL_DEX_GIRAFARIG, // HOENN_DEX_GIRAFARIG
+ NATIONAL_DEX_PHANPY, // HOENN_DEX_PHANPY
+ NATIONAL_DEX_DONPHAN, // HOENN_DEX_DONPHAN
+ NATIONAL_DEX_PINSIR, // HOENN_DEX_PINSIR
+ NATIONAL_DEX_HERACROSS, // HOENN_DEX_HERACROSS
+ NATIONAL_DEX_RHYHORN, // HOENN_DEX_RHYHORN
+ NATIONAL_DEX_RHYDON, // HOENN_DEX_RHYDON
+ NATIONAL_DEX_SNORUNT, // HOENN_DEX_SNORUNT
+ NATIONAL_DEX_GLALIE, // HOENN_DEX_GLALIE
+ NATIONAL_DEX_SPHEAL, // HOENN_DEX_SPHEAL
+ NATIONAL_DEX_SEALEO, // HOENN_DEX_SEALEO
+ NATIONAL_DEX_WALREIN, // HOENN_DEX_WALREIN
+ NATIONAL_DEX_CLAMPERL, // HOENN_DEX_CLAMPERL
+ NATIONAL_DEX_HUNTAIL, // HOENN_DEX_HUNTAIL
+ NATIONAL_DEX_GOREBYSS, // HOENN_DEX_GOREBYSS
+ NATIONAL_DEX_RELICANTH, // HOENN_DEX_RELICANTH
+ NATIONAL_DEX_CORSOLA, // HOENN_DEX_CORSOLA
+ NATIONAL_DEX_CHINCHOU, // HOENN_DEX_CHINCHOU
+ NATIONAL_DEX_LANTURN, // HOENN_DEX_LANTURN
+ NATIONAL_DEX_LUVDISC, // HOENN_DEX_LUVDISC
+ NATIONAL_DEX_HORSEA, // HOENN_DEX_HORSEA
+ NATIONAL_DEX_SEADRA, // HOENN_DEX_SEADRA
+ NATIONAL_DEX_KINGDRA, // HOENN_DEX_KINGDRA
+ NATIONAL_DEX_BAGON, // HOENN_DEX_BAGON
+ NATIONAL_DEX_SHELGON, // HOENN_DEX_SHELGON
+ NATIONAL_DEX_SALAMENCE, // HOENN_DEX_SALAMENCE
+ NATIONAL_DEX_BELDUM, // HOENN_DEX_BELDUM
+ NATIONAL_DEX_METANG, // HOENN_DEX_METANG
+ NATIONAL_DEX_METAGROSS, // HOENN_DEX_METAGROSS
+ NATIONAL_DEX_REGIROCK, // HOENN_DEX_REGIROCK
+ NATIONAL_DEX_REGICE, // HOENN_DEX_REGICE
+ NATIONAL_DEX_REGISTEEL, // HOENN_DEX_REGISTEEL
+ NATIONAL_DEX_LATIAS, // HOENN_DEX_LATIAS
+ NATIONAL_DEX_LATIOS, // HOENN_DEX_LATIOS
+ NATIONAL_DEX_KYOGRE, // HOENN_DEX_KYOGRE
+ NATIONAL_DEX_GROUDON, // HOENN_DEX_GROUDON
+ NATIONAL_DEX_RAYQUAZA, // HOENN_DEX_RAYQUAZA
+ NATIONAL_DEX_JIRACHI, // HOENN_DEX_JIRACHI
+ NATIONAL_DEX_DEOXYS, // HOENN_DEX_DEOXYS
+ NATIONAL_DEX_BULBASAUR, // HOENN_DEX_BULBASAUR - Pokémon from here onwards are UNSEEN in the Hoenn Dex.
+ NATIONAL_DEX_IVYSAUR, // HOENN_DEX_IVYSAUR
+ NATIONAL_DEX_VENUSAUR, // HOENN_DEX_VENUSAUR
+ NATIONAL_DEX_CHARMANDER, // HOENN_DEX_CHARMANDER
+ NATIONAL_DEX_CHARMELEON, // HOENN_DEX_CHARMELEON
+ NATIONAL_DEX_CHARIZARD, // HOENN_DEX_CHARIZARD
+ NATIONAL_DEX_SQUIRTLE, // HOENN_DEX_SQUIRTLE
+ NATIONAL_DEX_WARTORTLE, // HOENN_DEX_WARTORTLE
+ NATIONAL_DEX_BLASTOISE, // HOENN_DEX_BLASTOISE
+ NATIONAL_DEX_CATERPIE, // HOENN_DEX_CATERPIE
+ NATIONAL_DEX_METAPOD, // HOENN_DEX_METAPOD
+ NATIONAL_DEX_BUTTERFREE, // HOENN_DEX_BUTTERFREE
+ NATIONAL_DEX_WEEDLE, // HOENN_DEX_WEEDLE
+ NATIONAL_DEX_KAKUNA, // HOENN_DEX_KAKUNA
+ NATIONAL_DEX_BEEDRILL, // HOENN_DEX_BEEDRILL
+ NATIONAL_DEX_PIDGEY, // HOENN_DEX_PIDGEY
+ NATIONAL_DEX_PIDGEOTTO, // HOENN_DEX_PIDGEOTTO
+ NATIONAL_DEX_PIDGEOT, // HOENN_DEX_PIDGEOT
+ NATIONAL_DEX_RATTATA, // HOENN_DEX_RATTATA
+ NATIONAL_DEX_RATICATE, // HOENN_DEX_RATICATE
+ NATIONAL_DEX_SPEAROW, // HOENN_DEX_SPEAROW
+ NATIONAL_DEX_FEAROW, // HOENN_DEX_FEAROW
+ NATIONAL_DEX_EKANS, // HOENN_DEX_EKANS
+ NATIONAL_DEX_ARBOK, // HOENN_DEX_ARBOK
+ NATIONAL_DEX_NIDORAN_F, // HOENN_DEX_NIDORAN♀
+ NATIONAL_DEX_NIDORINA, // HOENN_DEX_NIDORINA
+ NATIONAL_DEX_NIDOQUEEN, // HOENN_DEX_NIDOQUEEN
+ NATIONAL_DEX_NIDORAN_M, // HOENN_DEX_NIDORAN♂
+ NATIONAL_DEX_NIDORINO, // HOENN_DEX_NIDORINO
+ NATIONAL_DEX_NIDOKING, // HOENN_DEX_NIDOKING
+ NATIONAL_DEX_CLEFAIRY, // HOENN_DEX_CLEFAIRY
+ NATIONAL_DEX_CLEFABLE, // HOENN_DEX_CLEFABLE
+ NATIONAL_DEX_PARAS, // HOENN_DEX_PARAS
+ NATIONAL_DEX_PARASECT, // HOENN_DEX_PARASECT
+ NATIONAL_DEX_VENONAT, // HOENN_DEX_VENONAT
+ NATIONAL_DEX_VENOMOTH, // HOENN_DEX_VENOMOTH
+ NATIONAL_DEX_DIGLETT, // HOENN_DEX_DIGLETT
+ NATIONAL_DEX_DUGTRIO, // HOENN_DEX_DUGTRIO
+ NATIONAL_DEX_MEOWTH, // HOENN_DEX_MEOWTH
+ NATIONAL_DEX_PERSIAN, // HOENN_DEX_PERSIAN
+ NATIONAL_DEX_MANKEY, // HOENN_DEX_MANKEY
+ NATIONAL_DEX_PRIMEAPE, // HOENN_DEX_PRIMEAPE
+ NATIONAL_DEX_GROWLITHE, // HOENN_DEX_GROWLITHE
+ NATIONAL_DEX_ARCANINE, // HOENN_DEX_ARCANINE
+ NATIONAL_DEX_POLIWAG, // HOENN_DEX_POLIWAG
+ NATIONAL_DEX_POLIWHIRL, // HOENN_DEX_POLIWHIRL
+ NATIONAL_DEX_POLIWRATH, // HOENN_DEX_POLIWRATH
+ NATIONAL_DEX_BELLSPROUT, // HOENN_DEX_BELLSPROUT
+ NATIONAL_DEX_WEEPINBELL, // HOENN_DEX_WEEPINBELL
+ NATIONAL_DEX_VICTREEBEL, // HOENN_DEX_VICTREEBEL
+ NATIONAL_DEX_PONYTA, // HOENN_DEX_PONYTA
+ NATIONAL_DEX_RAPIDASH, // HOENN_DEX_RAPIDASH
+ NATIONAL_DEX_SLOWPOKE, // HOENN_DEX_SLOWPOKE
+ NATIONAL_DEX_SLOWBRO, // HOENN_DEX_SLOWBRO
+ NATIONAL_DEX_FARFETCHD, // HOENN_DEX_FARFETCH'D
+ NATIONAL_DEX_SEEL, // HOENN_DEX_SEEL
+ NATIONAL_DEX_DEWGONG, // HOENN_DEX_DEWGONG
+ NATIONAL_DEX_SHELLDER, // HOENN_DEX_SHELLDER
+ NATIONAL_DEX_CLOYSTER, // HOENN_DEX_CLOYSTER
+ NATIONAL_DEX_GASTLY, // HOENN_DEX_GASTLY
+ NATIONAL_DEX_HAUNTER, // HOENN_DEX_HAUNTER
+ NATIONAL_DEX_GENGAR, // HOENN_DEX_GENGAR
+ NATIONAL_DEX_ONIX, // HOENN_DEX_ONIX
+ NATIONAL_DEX_DROWZEE, // HOENN_DEX_DROWZEE
+ NATIONAL_DEX_HYPNO, // HOENN_DEX_HYPNO
+ NATIONAL_DEX_KRABBY, // HOENN_DEX_KRABBY
+ NATIONAL_DEX_KINGLER, // HOENN_DEX_KINGLER
+ NATIONAL_DEX_EXEGGCUTE, // HOENN_DEX_EXEGGCUTE
+ NATIONAL_DEX_EXEGGUTOR, // HOENN_DEX_EXEGGUTOR
+ NATIONAL_DEX_CUBONE, // HOENN_DEX_CUBONE
+ NATIONAL_DEX_MAROWAK, // HOENN_DEX_MAROWAK
+ NATIONAL_DEX_HITMONLEE, // HOENN_DEX_HITMONLEE
+ NATIONAL_DEX_HITMONCHAN, // HOENN_DEX_HITMONCHAN
+ NATIONAL_DEX_LICKITUNG, // HOENN_DEX_LICKITUNG
+ NATIONAL_DEX_CHANSEY, // HOENN_DEX_CHANSEY
+ NATIONAL_DEX_TANGELA, // HOENN_DEX_TANGELA
+ NATIONAL_DEX_KANGASKHAN, // HOENN_DEX_KANGASKHAN
+ NATIONAL_DEX_MR_MIME, // HOENN_DEX_MR. MIME
+ NATIONAL_DEX_SCYTHER, // HOENN_DEX_SCYTHER
+ NATIONAL_DEX_JYNX, // HOENN_DEX_JYNX
+ NATIONAL_DEX_ELECTABUZZ, // HOENN_DEX_ELECTABUZZ
+ NATIONAL_DEX_MAGMAR, // HOENN_DEX_MAGMAR
+ NATIONAL_DEX_TAUROS, // HOENN_DEX_TAUROS
+ NATIONAL_DEX_LAPRAS, // HOENN_DEX_LAPRAS
+ NATIONAL_DEX_DITTO, // HOENN_DEX_DITTO
+ NATIONAL_DEX_EEVEE, // HOENN_DEX_EEVEE
+ NATIONAL_DEX_VAPOREON, // HOENN_DEX_VAPOREON
+ NATIONAL_DEX_JOLTEON, // HOENN_DEX_JOLTEON
+ NATIONAL_DEX_FLAREON, // HOENN_DEX_FLAREON
+ NATIONAL_DEX_PORYGON, // HOENN_DEX_PORYGON
+ NATIONAL_DEX_OMANYTE, // HOENN_DEX_OMANYTE
+ NATIONAL_DEX_OMASTAR, // HOENN_DEX_OMASTAR
+ NATIONAL_DEX_KABUTO, // HOENN_DEX_KABUTO
+ NATIONAL_DEX_KABUTOPS, // HOENN_DEX_KABUTOPS
+ NATIONAL_DEX_AERODACTYL, // HOENN_DEX_AERODACTYL
+ NATIONAL_DEX_SNORLAX, // HOENN_DEX_SNORLAX
+ NATIONAL_DEX_ARTICUNO, // HOENN_DEX_ARTICUNO
+ NATIONAL_DEX_ZAPDOS, // HOENN_DEX_ZAPDOS
+ NATIONAL_DEX_MOLTRES, // HOENN_DEX_MOLTRES
+ NATIONAL_DEX_DRATINI, // HOENN_DEX_DRATINI
+ NATIONAL_DEX_DRAGONAIR, // HOENN_DEX_DRAGONAIR
+ NATIONAL_DEX_DRAGONITE, // HOENN_DEX_DRAGONITE
+ NATIONAL_DEX_MEWTWO, // HOENN_DEX_MEWTWO
+ NATIONAL_DEX_MEW, // HOENN_DEX_MEW
+ NATIONAL_DEX_CHIKORITA, // HOENN_DEX_CHIKORITA
+ NATIONAL_DEX_BAYLEEF, // HOENN_DEX_BAYLEEF
+ NATIONAL_DEX_MEGANIUM, // HOENN_DEX_MEGANIUM
+ NATIONAL_DEX_CYNDAQUIL, // HOENN_DEX_CYNDAQUIL
+ NATIONAL_DEX_QUILAVA, // HOENN_DEX_QUILAVA
+ NATIONAL_DEX_TYPHLOSION, // HOENN_DEX_TYPHLOSION
+ NATIONAL_DEX_TOTODILE, // HOENN_DEX_TOTODILE
+ NATIONAL_DEX_CROCONAW, // HOENN_DEX_CROCONAW
+ NATIONAL_DEX_FERALIGATR, // HOENN_DEX_FERALIGATR
+ NATIONAL_DEX_SENTRET, // HOENN_DEX_SENTRET
+ NATIONAL_DEX_FURRET, // HOENN_DEX_FURRET
+ NATIONAL_DEX_HOOTHOOT, // HOENN_DEX_HOOTHOOT
+ NATIONAL_DEX_NOCTOWL, // HOENN_DEX_NOCTOWL
+ NATIONAL_DEX_LEDYBA, // HOENN_DEX_LEDYBA
+ NATIONAL_DEX_LEDIAN, // HOENN_DEX_LEDIAN
+ NATIONAL_DEX_SPINARAK, // HOENN_DEX_SPINARAK
+ NATIONAL_DEX_ARIADOS, // HOENN_DEX_ARIADOS
+ NATIONAL_DEX_CLEFFA, // HOENN_DEX_CLEFFA
+ NATIONAL_DEX_TOGEPI, // HOENN_DEX_TOGEPI
+ NATIONAL_DEX_TOGETIC, // HOENN_DEX_TOGETIC
+ NATIONAL_DEX_MAREEP, // HOENN_DEX_MAREEP
+ NATIONAL_DEX_FLAAFFY, // HOENN_DEX_FLAAFFY
+ NATIONAL_DEX_AMPHAROS, // HOENN_DEX_AMPHAROS
+ NATIONAL_DEX_SUDOWOODO, // HOENN_DEX_SUDOWOODO
+ NATIONAL_DEX_POLITOED, // HOENN_DEX_POLITOED
+ NATIONAL_DEX_HOPPIP, // HOENN_DEX_HOPPIP
+ NATIONAL_DEX_SKIPLOOM, // HOENN_DEX_SKIPLOOM
+ NATIONAL_DEX_JUMPLUFF, // HOENN_DEX_JUMPLUFF
+ NATIONAL_DEX_AIPOM, // HOENN_DEX_AIPOM
+ NATIONAL_DEX_SUNKERN, // HOENN_DEX_SUNKERN
+ NATIONAL_DEX_SUNFLORA, // HOENN_DEX_SUNFLORA
+ NATIONAL_DEX_YANMA, // HOENN_DEX_YANMA
+ NATIONAL_DEX_WOOPER, // HOENN_DEX_WOOPER
+ NATIONAL_DEX_QUAGSIRE, // HOENN_DEX_QUAGSIRE
+ NATIONAL_DEX_ESPEON, // HOENN_DEX_ESPEON
+ NATIONAL_DEX_UMBREON, // HOENN_DEX_UMBREON
+ NATIONAL_DEX_MURKROW, // HOENN_DEX_MURKROW
+ NATIONAL_DEX_SLOWKING, // HOENN_DEX_SLOWKING
+ NATIONAL_DEX_MISDREAVUS, // HOENN_DEX_MISDREAVUS
+ NATIONAL_DEX_UNOWN, // HOENN_DEX_UNOWN
+ NATIONAL_DEX_PINECO, // HOENN_DEX_PINECO
+ NATIONAL_DEX_FORRETRESS, // HOENN_DEX_FORRETRESS
+ NATIONAL_DEX_DUNSPARCE, // HOENN_DEX_DUNSPARCE
+ NATIONAL_DEX_GLIGAR, // HOENN_DEX_GLIGAR
+ NATIONAL_DEX_STEELIX, // HOENN_DEX_STEELIX
+ NATIONAL_DEX_SNUBBULL, // HOENN_DEX_SNUBBULL
+ NATIONAL_DEX_GRANBULL, // HOENN_DEX_GRANBULL
+ NATIONAL_DEX_QWILFISH, // HOENN_DEX_QWILFISH
+ NATIONAL_DEX_SCIZOR, // HOENN_DEX_SCIZOR
+ NATIONAL_DEX_SHUCKLE, // HOENN_DEX_SHUCKLE
+ NATIONAL_DEX_SNEASEL, // HOENN_DEX_SNEASEL
+ NATIONAL_DEX_TEDDIURSA, // HOENN_DEX_TEDDIURSA
+ NATIONAL_DEX_URSARING, // HOENN_DEX_URSARING
+ NATIONAL_DEX_SWINUB, // HOENN_DEX_SWINUB
+ NATIONAL_DEX_PILOSWINE, // HOENN_DEX_PILOSWINE
+ NATIONAL_DEX_REMORAID, // HOENN_DEX_REMORAID
+ NATIONAL_DEX_OCTILLERY, // HOENN_DEX_OCTILLERY
+ NATIONAL_DEX_DELIBIRD, // HOENN_DEX_DELIBIRD
+ NATIONAL_DEX_MANTINE, // HOENN_DEX_MANTINE
+ NATIONAL_DEX_HOUNDOUR, // HOENN_DEX_HOUNDOUR
+ NATIONAL_DEX_HOUNDOOM, // HOENN_DEX_HOUNDOOM
+ NATIONAL_DEX_PORYGON2, // HOENN_DEX_PORYGON2
+ NATIONAL_DEX_STANTLER, // HOENN_DEX_STANTLER
+ NATIONAL_DEX_SMEARGLE, // HOENN_DEX_SMEARGLE
+ NATIONAL_DEX_TYROGUE, // HOENN_DEX_TYROGUE
+ NATIONAL_DEX_HITMONTOP, // HOENN_DEX_HITMONTOP
+ NATIONAL_DEX_SMOOCHUM, // HOENN_DEX_SMOOCHUM
+ NATIONAL_DEX_ELEKID, // HOENN_DEX_ELEKID
+ NATIONAL_DEX_MAGBY, // HOENN_DEX_MAGBY
+ NATIONAL_DEX_MILTANK, // HOENN_DEX_MILTANK
+ NATIONAL_DEX_BLISSEY, // HOENN_DEX_BLISSEY
+ NATIONAL_DEX_RAIKOU, // HOENN_DEX_RAIKOU
+ NATIONAL_DEX_ENTEI, // HOENN_DEX_ENTEI
+ NATIONAL_DEX_SUICUNE, // HOENN_DEX_SUICUNE
+ NATIONAL_DEX_LARVITAR, // HOENN_DEX_LARVITAR
+ NATIONAL_DEX_PUPITAR, // HOENN_DEX_PUPITAR
+ NATIONAL_DEX_TYRANITAR, // HOENN_DEX_TYRANITAR
+ NATIONAL_DEX_LUGIA, // HOENN_DEX_LUGIA
+ NATIONAL_DEX_HO_OH, // HOENN_DEX_HO-OH
+ NATIONAL_DEX_CELEBI, // HOENN_DEX_CELEBI
+ NATIONAL_DEX_OLD_UNOWN_B, // HOENN_DEX_OLD_UNOWN_B
+ NATIONAL_DEX_OLD_UNOWN_C, // HOENN_DEX_OLD_UNOWN_C
+ NATIONAL_DEX_OLD_UNOWN_D, // HOENN_DEX_OLD_UNOWN_D
+ NATIONAL_DEX_OLD_UNOWN_E, // HOENN_DEX_OLD_UNOWN_E
+ NATIONAL_DEX_OLD_UNOWN_F, // HOENN_DEX_OLD_UNOWN_F
+ NATIONAL_DEX_OLD_UNOWN_G, // HOENN_DEX_OLD_UNOWN_G
+ NATIONAL_DEX_OLD_UNOWN_H, // HOENN_DEX_OLD_UNOWN_H
+ NATIONAL_DEX_OLD_UNOWN_I, // HOENN_DEX_OLD_UNOWN_I
+ NATIONAL_DEX_OLD_UNOWN_J, // HOENN_DEX_OLD_UNOWN_J
+ NATIONAL_DEX_OLD_UNOWN_K, // HOENN_DEX_OLD_UNOWN_K
+ NATIONAL_DEX_OLD_UNOWN_L, // HOENN_DEX_OLD_UNOWN_L
+ NATIONAL_DEX_OLD_UNOWN_M, // HOENN_DEX_OLD_UNOWN_M
+ NATIONAL_DEX_OLD_UNOWN_N, // HOENN_DEX_OLD_UNOWN_N
+ NATIONAL_DEX_OLD_UNOWN_O, // HOENN_DEX_OLD_UNOWN_O
+ NATIONAL_DEX_OLD_UNOWN_P, // HOENN_DEX_OLD_UNOWN_P
+ NATIONAL_DEX_OLD_UNOWN_Q, // HOENN_DEX_OLD_UNOWN_Q
+ NATIONAL_DEX_OLD_UNOWN_R, // HOENN_DEX_OLD_UNOWN_R
+ NATIONAL_DEX_OLD_UNOWN_S, // HOENN_DEX_OLD_UNOWN_S
+ NATIONAL_DEX_OLD_UNOWN_T, // HOENN_DEX_OLD_UNOWN_T
+ NATIONAL_DEX_OLD_UNOWN_U, // HOENN_DEX_OLD_UNOWN_U
+ NATIONAL_DEX_OLD_UNOWN_V, // HOENN_DEX_OLD_UNOWN_V
+ NATIONAL_DEX_OLD_UNOWN_W, // HOENN_DEX_OLD_UNOWN_W
+ NATIONAL_DEX_OLD_UNOWN_X, // HOENN_DEX_OLD_UNOWN_X
+ NATIONAL_DEX_OLD_UNOWN_Y, // HOENN_DEX_OLD_UNOWN_Y
+ NATIONAL_DEX_OLD_UNOWN_Z // HOENN_DEX_OLD_UNOWN_Z
+};
const struct SpindaSpot gSpindaSpotGraphics[] =
{
@@ -5723,7 +6967,7 @@ static void Task_PokemonSummaryAnimateAfterDelay(u8 taskId)
if (--gTasks[taskId].data[3] == 0)
{
StartMonSummaryAnimation(READ_PTR_FROM_TASK(taskId, 0), gTasks[taskId].data[2]);
- sub_81C488C(0xFF);
+ SummaryScreen_SetUnknownTaskId(0xFF);
DestroyTask(taskId);
}
}
@@ -5790,7 +7034,7 @@ void PokemonSummaryDoMonAnimation(struct Sprite* sprite, u16 species, bool8 oneF
STORE_PTR_IN_TASK(sprite, taskId, 0);
gTasks[taskId].data[2] = sMonFrontAnimIdsTable[species - 1];
gTasks[taskId].data[3] = sMonAnimationDelayTable[species - 1];
- sub_81C488C(taskId);
+ SummaryScreen_SetUnknownTaskId(taskId);
SetSpriteCB_MonAnimDummy(sprite);
}
else
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 83554eba5..1afbaab7a 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -1,401 +1,769 @@
#include "global.h"
+#include "main.h"
#include "battle.h"
+#include "battle_anim.h"
+#include "battle_frontier_2.h"
+#include "battle_message.h"
+#include "battle_tent.h"
#include "bg.h"
+#include "contest.h"
+#include "contest_effect.h"
+#include "data2.h"
+#include "daycare.h"
#include "decompress.h"
+#include "dynamic_placeholder_text_util.h"
+#include "event_data.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "international_string_util.h"
#include "item.h"
-#include "constants/items.h"
#include "link.h"
#include "m4a.h"
-#include "main.h"
#include "malloc.h"
-#include "constants/moves.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "mon_markings.h"
+#include "party_menu.h"
#include "palette.h"
+#include "pokeball.h"
#include "pokemon.h"
-#include "constants/songs.h"
+#include "pokemon_storage_system.h"
+#include "pokemon_summary_screen.h"
+#include "region_map.h"
+#include "scanline_effect.h"
#include "sound.h"
-#include "constants/species.h"
#include "sprite.h"
-#include "dynamic_placeholder_text_util.h"
#include "string_util.h"
+#include "strings.h"
#include "task.h"
#include "text.h"
+#include "tv.h"
#include "window.h"
-#include "event_data.h"
-#include "gpu_regs.h"
-#include "menu.h"
-#include "international_string_util.h"
-#include "scanline_effect.h"
-#include "menu_helpers.h"
-#include "daycare.h"
-#include "data2.h"
-#include "contest.h"
-#include "contest_effect.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/region_map_sections.h"
+#include "constants/songs.h"
+#include "constants/species.h"
-extern struct UnkSummaryStruct* gUnknown_0203CF1C;
-extern struct BgTemplate gUnknown_0861CBB4;
-extern u8 gUnknown_0203CF20;
-extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern s8 gUnknown_0861CC1C[];
-extern u8 gUnknown_0203CF21;
-extern struct UnkStruct_61CC04 gUnknown_0861CC04;
-extern struct UnkStruct_61CC04 gUnknown_0861CC10;
-extern struct UnkStruct_61CC04 gUnknown_0861CBEC;
-extern struct UnkStruct_61CC04 gUnknown_0861CBF8;
-extern u16 gSummaryScreenWindow_Tilemap[];
-extern struct WindowTemplate gUnknown_0861CC24;
-extern u8 gUnknown_0861CD2C[][3];
-extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
-extern u8 gText_MaleSymbol[];
-extern u8 gText_FemaleSymbol[];
-extern u8 gUnknown_0861CDD3[];
-extern void (*const gUnknown_0861CE54[])();
-extern void (*const gUnknown_0861CE64[])(u8 taskId);
-extern struct WindowTemplate gUnknown_0861CCCC;
-extern u8 gUnknown_0861CE74[];
-extern u8 gUnknown_0861CE7B[];
-extern struct WindowTemplate gUnknown_0861CCEC;
-extern struct WindowTemplate gUnknown_0861CD14;
-extern const u8 *const gContestEffectDescriptionPointers[];
-
-void sub_81C488C(u8 a);
-extern u8 sub_81221EC();
-extern u8 sub_81221AC();
-extern u8 gUnknown_08D9862C;
-extern u8 gUnknown_08D98CC8;
-extern u8 gUnknown_08D987FC;
-extern u8 gUnknown_08D9898C;
-extern u8 gUnknown_08D98B28;
-extern u8 gUnknown_08D9853C;
-extern u8 gUnknown_08D85620;
-extern struct CompressedSpriteSheet gUnknown_0861CFBC;
-extern struct CompressedSpriteSheet gUnknown_0861D074;
-extern struct CompressedSpriteSheet gUnknown_0861D0F8;
-extern struct CompressedSpritePalette gUnknown_0861D100;
-extern struct CompressedSpritePalette gUnknown_0861D07C;
-extern u8 gMoveTypes_Pal;
-extern u8 gUnknown_08D97D0C;
-extern void sub_81C1E20(u8 taskId);
-extern u8 *GetMonNickname(struct Pokemon *mon, u8 *dest);
-extern u16 SpeciesToPokedexNum(u16 species);
-extern u8 gText_UnkCtrlF908Clear01[];
-extern u8 gText_LevelSymbol[];
-extern u8 gText_PkmnInfo[];
-extern u8 gText_PkmnSkills[];
-extern u8 gText_BattleMoves[];
-extern u8 gText_ContestMoves[];
-extern u8 gText_HMMovesCantBeForgotten2[];
-extern u8 gText_Cancel2[];
-extern u8 gText_Info[];
-extern u8 gText_Switch[];
-extern u8 gText_RentalPkmn[];
-extern u8 gText_TypeSlash[];
-extern u8 gText_HP4[];
-extern u8 gText_Attack3[];
-extern u8 gText_Defense3[];
-extern u8 gText_SpAtk4[];
-extern u8 gText_SpDef4[];
-extern u8 gText_Speed2[];
-extern u8 gText_ExpPoints[];
-extern u8 gText_NextLv[];
-extern u8 gText_Status[];
-extern u8 gText_Power[];
-extern u8 gText_Accuracy2[];
-extern u8 gText_Appeal[];
-extern u8 gText_Jam[];
-extern u8 gText_OTSlash[];
-extern u8 gText_UnkCtrlF907F908[];
-extern u8 gText_XNature[];
-extern u8 gText_XNatureHatchedAtYZ[];
-extern u8 gText_XNatureHatchedSomewhereAt[];
-extern u8 gText_XNatureMetAtYZ[];
-extern u8 gText_XNatureMetSomewhereAt[];
-extern u8 gText_XNatureFatefulEncounter[];
-extern u8 gText_XNatureProbablyMetAt[];
-extern u8 gText_XNatureObtainedInTrade[];
-extern u8 *gNatureNamePointers[];
-extern u8 gText_EmptyString5[];
-extern u32 gBattleTypeFlags;
-extern u8 gText_FiveMarks[];
-extern u8 gText_EggWillTakeALongTime[];
-extern u8 gText_EggAboutToHatch[];
-extern u8 gText_EggWillHatchSoon[];
-extern u8 gText_EggWillTakeSomeTime[];
-extern u8 gText_PeculiarEggNicePlace[];
-extern u8 gText_PeculiarEggTrade[];
-extern u8 gText_EggFromTraveler[];
-extern u8 gText_EggFromHotSprings[];
-extern u8 gText_OddEggFoundByCouple[];
-extern u8 gText_None[];
-extern u8 gText_RibbonsVar1[];
-extern u8 gUnknown_0861CE82[];
-extern u8 gUnknown_0861CE8E[];
-extern u8 gText_OneDash[];
-extern u8 gText_TwoDashes[];
-extern u8 gText_ThreeDashes[];
-extern u8 gText_Cancel[];
-extern u8 gUnknown_0861CE97[];
-extern const struct SpriteTemplate gUnknown_0861CFC4;
-
-extern void sub_8199C30(u8 a, u8 b, u8 c, u8 d, u8 e, u8 f);
-extern bool8 sub_81A6BF4();
-extern bool8 sub_81B9E94();
-extern void DynamicPlaceholderTextUtil_Reset();
-extern void sub_8124610(u8 *a, u8 b);
-extern int GetPlayerIDAsU32();
-extern u8 GetCurrentPpToMaxPpState(u8 a, u8 b);
-
-void sub_81BFAE4(void);
-void sub_81BFE24();
-u8 sub_81BFEB0();
-void sub_81C2554();
-void sub_81C1BA0();
-void sub_81C0098(struct Pokemon* a);
-bool8 sub_81C00F0(struct Pokemon* a);
-void sub_81C25E8();
-void sub_81C286C();
-void sub_81C2D9C(u8 a);
-void sub_81C0348();
-void sub_81C2AFC(u8 a);
-void sub_81C4190();
-void sub_81C42C8();
-u8 sub_81C45F4(void* a, u16* b);
-void sub_81C4984();
-void sub_81C4A08();
-void sub_81C4A88();
-void sub_81C4280();
-void sub_81C43A0();
-void sub_81C4484();
-void sub_81C4420();
-void sub_81C0510(u8 taskId);
-void sub_81C171C(u8 taskId);
-void ResetAllBgsCoordinates();
-u8 sub_81B205C(struct Pokemon* a);
-void sub_81C1DA4(u16 a, s16 b);
-void sub_81C1EFC(u16 a, s16 b, u16 c);
-void sub_81C240C(u16 a);
-void sub_81C2194(u16 *a, u16 b, u8 c);
-void sub_81C2074(u16 a, s16 b);
-void sub_81C2524();
-void sub_81C2228(struct Pokemon* mon);
-void sub_81C0484(u8 taskId);
-void sub_81C4898();
-void sub_806F47C(u8 a);
-u8 GetLRKeysState();
-void sub_81C0604(u8 taskId, s8 a);
-void sub_81C0A8C(u8 taskId, s8 a);
-void sub_81C48F0();
-void sub_81C0E48(u8 taskId);
-void sub_81C0704(u8 taskId);
-s8 sub_81C09B4(s8 a);
-s8 sub_81C08F8(s8 a);
-void sub_81C4204(u8 a, u8 b);
-void sub_81C20F0(u8 taskId);
-bool8 sub_81C0A50(struct Pokemon* mon);
-void sub_81C49E0();
-void sub_81C0E24();
-void sub_81C2C38(u8 a);
-void sub_81C0B8C(u8 taskId);
-void sub_81C0CC4(u8 taskId);
-void sub_81C2DE4(u8 a);
-void sub_81C424C();
-void sub_81C0C68(u8 taskId);
-void sub_81C0D44(u8 taskId);
-void sub_81C22CC(struct Pokemon* mon);
-void sub_81C0F44(u8 taskId);
-void sub_81C3E9C(u16 a);
-void sub_81C3F44();
-void sub_81C44F0();
-void sub_81C4AF8(u8 a);
-void sub_81C1070(s16* a, s8 b, u8* c);
-void sub_81C11F4(u8 a);
-void sub_81C129C(u8 a);
-bool8 sub_81C1040();
-void sub_81C4064();
-void sub_81C4C60(u8 a);
-void sub_81C12E4(u8 taskId);
-void sub_81C4C84(u8 a);
-void sub_81C13B0(u8 a, u8 b);
-void sub_81C14BC(struct Pokemon *mon, u8 a, u8 b);
-void sub_81C15EC(struct BoxPokemon *mon, u8 a, u8 b);
-void sub_81C40A0(u8 a, u8 b);
-void sub_81C4568(u8 a, u8 b);
-void sub_81C174C(u8 taskId);
-bool8 sub_81C18A8();
-void sub_81C18F4(u8 a);
-u8 sub_81B6D14(u16 a);
-void sub_81C1940(u8 taskId);
-void sub_81C4154();
-void sub_81C1F80(u8 taskId);
-void sub_81C2628();
-void sub_81C2794();
-void sub_81C27DC(struct Pokemon *mon, u16 a);
-void sub_81C2D68(u8 a);
-void sub_81C335C();
-void sub_81C33CC();
-void sub_81C3428();
-void sub_81C349C();
-void sub_81C2EC4();
-void sub_81C2F5C();
-void sub_81C2FD8();
-void sub_81C302C();
-void sub_81C307C();
-void sub_81C3194();
-void sub_81C31C0();
-bool8 sub_81C3304();
-void sub_81C31F0(u8 *a);
-u8 sub_81C3220();
-bool8 sub_81C32BC();
-void sub_81C35E4();
-void sub_81C3690();
-void sub_81C3710();
-void sub_81C37D8();
-void sub_81C3808();
-void sub_81C3890();
-void sub_81C38C0();
-void sub_81C3B08(u8 a);
-void sub_81C3E2C(u8 a);
-void sub_81C4D18();
-
-void SetBgAttribute(u8 bg, u8 attributeId, u8 value);
-
-bool8 sub_81BFB10();
-u8 sub_81B1250();
-
-union UnkUnion
-{
- struct Pokemon mon[6];
- struct BoxPokemon boxMon[6];
-};
-
-
-u8 sub_80D214C(union UnkUnion* a, u8 b, u8 c, u8 d);
-
-struct PokeSummary
-{
- u16 species; // 0x0
- u16 species2; // 0x2
- u8 isEgg; // 0x4
- u8 level; // 0x5
- u8 ribbons; // 0x6
- u8 unk7; // 0x7
- u8 altAbility; // 0x8
- u8 metLocation; // 0x9
- u8 metLevel; // 0xA
- u8 metGame; // 0xB
- u32 pid; // 0xC
- u32 exp; // 0x10
- u16 moves[4]; // 0x14
- u8 pp[4]; // 0x1C
- u16 currentHP; // 0x20
- u16 maxHP; // 0x22
- u16 atk; // 0x24
- u16 def; // 0x26
- u16 spatk; // 0x28
- u16 spdef; // 0x2A
- u16 speed; // 0x2C
- u16 item; // 0x2E
- u16 friendship; // 0x30
- u8 OTGender; // 0x32
- u8 nature; // 0x33
- u8 ppBonuses; // 0x34
- u8 sanity; // 0x35
- u8 OTName[8]; // 0x36
- u8 unk3E[9]; // 0x3E
- u32 OTID; // 0x48
-};
-
-struct UnkSummaryStruct
-{
- /*0x00*/ union UnkUnion *unk0;
- /*0x04*/ void *unk4;
- /*0x08*/ void *unk8;
+static EWRAM_DATA struct UnkSummaryStruct
+{
+ /*0x00*/ union {
+ struct Pokemon *mons;
+ struct BoxPokemon *boxMons;
+ } monList;
+ /*0x04*/ MainCallback callback;
+ /*0x08*/ struct Sprite *markingsSprite;
/*0x0C*/ struct Pokemon currentMon;
- /*0x70*/ struct PokeSummary summary;
- u16 unkTilemap0[0x400];
- u16 unkTilemap0_1[0x400];
- u16 unkTilemap1[0x400];
- u16 unkTilemap1_1[0x400];
- u16 unkTilemap2[0x400];
- u16 unkTilemap2_1[0x400];
- u16 unkTilemap3[0x400];
- u16 unkTilemap3_1[0x400];
- u8 unk40BC;
- u8 unk40BD;
- u8 unk40BE;
- u8 unk40BF;
- u8 unk40C0;
- u8 unk40C1;
- u8 unk40C2;
- u8 unk40C3;
- u16 unk40C4;
- u8 unk40C6;
- u8 unk40C7;
- u8 unk40C8;
+ /*0x70*/ struct PokeSummary
+ {
+ u16 species; // 0x0
+ u16 species2; // 0x2
+ u8 isEgg; // 0x4
+ u8 level; // 0x5
+ u8 ribbonCount; // 0x6
+ u8 unk7; // 0x7
+ u8 altAbility; // 0x8
+ u8 metLocation; // 0x9
+ u8 metLevel; // 0xA
+ u8 metGame; // 0xB
+ u32 pid; // 0xC
+ u32 exp; // 0x10
+ u16 moves[4]; // 0x14
+ u8 pp[4]; // 0x1C
+ u16 currentHP; // 0x20
+ u16 maxHP; // 0x22
+ u16 atk; // 0x24
+ u16 def; // 0x26
+ u16 spatk; // 0x28
+ u16 spdef; // 0x2A
+ u16 speed; // 0x2C
+ u16 item; // 0x2E
+ u16 friendship; // 0x30
+ u8 OTGender; // 0x32
+ u8 nature; // 0x33
+ u8 ppBonuses; // 0x34
+ u8 sanity; // 0x35
+ u8 OTName[8]; // 0x36
+ u8 unk3E[9]; // 0x3E
+ u32 OTID; // 0x48
+ } summary;
+ u16 bgTilemapBuffers[4][2][0x400];
+ u8 mode;
+ bool8 isBoxMon;
+ u8 curMonIndex;
+ u8 maxMonIndex;
+ u8 currPageIndex;
+ u8 minPageIndex;
+ u8 maxPageIndex;
+ bool8 unk40C3;
+ u16 newMove;
+ u8 firstMoveIndex;
+ u8 secondMoveIndex;
+ bool8 unk40C8;
u8 unk40C9;
- u8 unk40CA;
- u8 unk40CB[8];
- u8 unk40D3[0x1C];
- u8 unk40EF;
+ u8 filler40CA;
+ u8 windowIds[8];
+ u8 spriteIds[28];
+ bool8 unk40EF;
s16 unk40F0;
u8 unk_filler4[6];
+} *pssData = NULL;
+EWRAM_DATA u8 gUnknown_0203CF20 = 0;
+static EWRAM_DATA u8 gUnknown_0203CF21 = 0;
+static EWRAM_DATA u8 gFiller_0203CF22[2] = {0};
+static EWRAM_DATA u8 sUnknownTaskId = 0;
+static EWRAM_DATA u8 gFiller_0203CF25[3] = {0};
+
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+
+struct UnkStruct_61CC04
+{
+ const u16 *ptr;
+ u16 field_4;
+ u8 field_6;
+ u8 field_7;
+ u8 field_8;
+ u8 field_9;
};
+// forward declarations
+bool8 sub_81B1250(void);
+static bool8 SummaryScreen_LoadGraphics(void);
+static void SummaryScreen_LoadingCB2(void);
+static void InitBGs(void);
+static bool8 SummaryScreen_DecompressGraphics(void);
+static void CopyMonToSummaryStruct(struct Pokemon* a);
+static bool8 ExtractMonDataToSummaryStruct(struct Pokemon* a);
+static void sub_81C0348(void);
+static void sub_81C0484(u8 taskId);
+static void sub_81C0510(u8 taskId);
+static void sub_81C0604(u8 taskId, s8 a);
+static void sub_81C0704(u8 taskId);
+static s8 sub_81C08F8(s8 a);
+static s8 sub_81C09B4(s8 a);
+static bool8 sub_81C0A50(struct Pokemon* mon);
+static void sub_81C0A8C(u8 taskId, s8 a);
+static void sub_81C0B8C(u8 taskId);
+static void sub_81C0C68(u8 taskId);
+static void sub_81C0CC4(u8 taskId);
+static void sub_81C0D44(u8 taskId);
+static void sub_81C0E24(void);
+static void sub_81C0E48(u8 taskId);
+static void sub_81C0F44(u8 taskId);
+static bool8 sub_81C1040(void);
+static void sub_81C1070(s16* a, s8 b, u8* c);
+static void sub_81C11F4(u8 a);
+static void sub_81C129C(u8 a);
+static void sub_81C12E4(u8 taskId);
+static void sub_81C13B0(u8 taskId, bool8 b);
+static void SwapMonMoves(struct Pokemon *mon, u8 moveIndex1, u8 moveIndex2);
+static void SwapBoxMonMoves(struct BoxPokemon *mon, u8 moveIndex1, u8 moveIndex2);
+static void sub_81C171C(u8 taskId);
+static void sub_81C174C(u8 taskId);
+static bool8 sub_81C18A8(void);
+static void sub_81C18F4(u8 a);
+static void sub_81C1940(u8 taskId);
+static void sub_81C1BA0(void);
+static void sub_81C1DA4(u16 a, s16 b);
+static void sub_81C1E20(u8 taskId);
+static void sub_81C1EFC(u16 a, s16 b, u16 c);
+static void sub_81C1F80(u8 taskId);
+static void sub_81C2074(u16 a, s16 b);
+static void sub_81C20F0(u8 taskId);
+static void sub_81C2194(u16 *a, u16 b, u8 c);
+static void sub_81C2228(struct Pokemon* mon);
+static void sub_81C22CC(struct Pokemon* mon);
+static void sub_81C240C(u16 a);
+static void sub_81C2524(void);
+static void sub_81C2554(void);
+static void sub_81C25E8(void);
+static void sub_81C2628(void);
+static void sub_81C2794(void);
+static void sub_81C27DC(struct Pokemon *mon, u16 a);
+static void PrintPageNamesAndStatsPageToWindows(void);
+static void sub_81C2AFC(u8 a);
+static void sub_81C2C38(u8 a);
+static void SummaryScreen_RemoveWindowByIndex(u8 a);
+static void sub_81C2D9C(u8 a);
+static void sub_81C2DE4(u8 a);
+static void sub_81C2E00(void);
+static void sub_81C2E40(u8 taskId);
+static void PrintMonOTName(void);
+static void PrintMonOTID(void);
+static void PrintMonAbilityName(void);
+static void PrintMonAbilityDescription(void);
+static void BufferMonTrainerMemo(void);
+static void PrintMonTrainerMemo(void);
+static void BufferNatureString(void);
+static void GetMetLevelString(u8 *a);
+static bool8 DoesMonOTMatchOwner(void);
+static bool8 DidMonComeFromGBAGames(void);
+static bool8 IsInGamePartnerMon(void);
+static void PrintEggOTName(void);
+static void PrintEggOTID(void);
+static void PrintEggState(void);
+static void PrintEggMemo(void);
+static void sub_81C3554(u8 taskId);
+static void PrintHeldItemName(void);
+static void sub_81C3530(void);
+static void PrintRibbonCount(void);
+static void BufferLeftColumnStats(void);
+static void PrintLeftColumnStats(void);
+static void BufferRightColumnStats(void);
+static void PrintRightColumnStats(void);
+static void PrintExpPointsNextLevel(void);
+static void sub_81C3984(void);
+static void sub_81C39F0(u8 taskId);
+static void PrintMoveNameAndPP(u8 a);
+static void sub_81C3D08(void);
+static void sub_81C3D54(u8 taskId);
+static void PrintContestMoveDescription(u8 a);
+static void PrintMoveDetails(u16 a);
+static void PrintNewMoveDetailsOrCancelText(void);
+static void sub_81C4064(void);
+static void sub_81C40A0(u8 a, u8 b);
+static void PrintHMMovesCantBeForgotten(void);
+static void sub_81C4190(void);
+static void sub_81C4204(u8 a, u8 b);
+static void sub_81C424C(void);
+static void sub_81C4280(void);
+static void sub_81C42C8(void);
+static void sub_81C43A0(void);
+static void sub_81C4420(void);
+static void sub_81C4484(void);
+static void sub_81C44F0(void);
+static void sub_81C4568(u8 a, u8 b);
+static u8 sub_81C45F4(struct Pokemon *a, s16 *b);
+static u8 sub_81C47B4(struct Pokemon *unused);
+static void sub_81C4844(struct Sprite *);
+void SummaryScreen_SetUnknownTaskId(u8 a);
+void SummaryScreen_DestroyUnknownTask(void);
+static void sub_81C48F0(void);
+static void CreateMonMarkingsSprite(struct Pokemon *mon);
+static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *mon);
+static void CreateCaughtBallSprite(struct Pokemon *mon);
+static void CreateSetStatusSprite(void);
+static void sub_81C4AF8(u8 a);
+static void sub_81C4BE4(struct Sprite *sprite);
+static void sub_81C4C60(u8 a);
+static void sub_81C4C84(u8 a);
+static void sub_81C4D18(u8 a);
+
// const rom data
#include "data/text/move_descriptions.h"
+#include "data/text/nature_names.h"
+
+static const struct BgTemplate gUnknown_0861CBB4[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0,
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 27,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0,
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 25,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0,
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 29,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0,
+ },
+};
+
+static const u16 gUnknown_0861CBC4[] = INCBIN_U16("graphics/interface/unk_tilemap2.bin");
+static const struct UnkStruct_61CC04 gUnknown_0861CBEC =
+{
+ gUnknown_0861CBC4, 1, 10, 2, 0, 18
+};
+static const struct UnkStruct_61CC04 gUnknown_0861CBF8 =
+{
+ gUnknown_0861CBC4, 1, 10, 2, 0, 50
+};
+static const struct UnkStruct_61CC04 gUnknown_0861CC04 =
+{
+ gSummaryScreenPowAcc_Tilemap, 0, 10, 7, 0, 45
+};
+static const struct UnkStruct_61CC04 gUnknown_0861CC10 =
+{
+ gUnknown_08DC3C34, 0, 10, 7, 0, 45
+};
+static const s8 gUnknown_0861CC1C[] = {0, 2, 3, 1, 4, 5};
+static const struct WindowTemplate gUnknown_0861CC24[] =
+{
+ { 0x00, 0x00, 0x00, 0x0b, 0x02, 0x06, 0x0001 },
+ { 0x00, 0x00, 0x00, 0x0b, 0x02, 0x06, 0x0017 },
+ { 0x00, 0x00, 0x00, 0x0b, 0x02, 0x06, 0x002d },
+ { 0x00, 0x00, 0x00, 0x0b, 0x02, 0x06, 0x0043 },
+ { 0x00, 0x16, 0x00, 0x08, 0x02, 0x07, 0x0059 },
+ { 0x00, 0x16, 0x00, 0x08, 0x02, 0x07, 0x0069 },
+ { 0x00, 0x16, 0x00, 0x08, 0x02, 0x07, 0x0079 },
+ { 0x00, 0x0b, 0x04, 0x00, 0x02, 0x06, 0x0089 },
+ { 0x00, 0x0b, 0x04, 0x12, 0x02, 0x06, 0x0089 },
+ { 0x00, 0x0b, 0x06, 0x12, 0x02, 0x06, 0x00ad },
+ { 0x00, 0x0a, 0x07, 0x06, 0x06, 0x06, 0x00d1 },
+ { 0x00, 0x16, 0x07, 0x05, 0x06, 0x06, 0x00f5 },
+ { 0x00, 0x0a, 0x0e, 0x0b, 0x04, 0x06, 0x0113 },
+ { 0x00, 0x00, 0x12, 0x06, 0x02, 0x06, 0x013f },
+ { 0x00, 0x01, 0x0f, 0x09, 0x04, 0x06, 0x014b },
+ { 0x00, 0x01, 0x0f, 0x05, 0x04, 0x06, 0x016f },
+ { 0x00, 0x16, 0x04, 0x00, 0x02, 0x06, 0x0183 },
+ { 0x00, 0x01, 0x02, 0x04, 0x02, 0x07, 0x0183 },
+ { 0x00, 0x01, 0x0c, 0x09, 0x02, 0x06, 0x018b },
+ { 0x00, 0x01, 0x0e, 0x09, 0x04, 0x06, 0x019d },
+ DUMMY_WIN_TEMPLATE
+};
+static const struct WindowTemplate gUnknown_0861CCCC[] =
+{
+ { 0x00, 0x0b, 0x04, 0x0b, 0x02, 0x06, 0x01c1 },
+ { 0x00, 0x16, 0x04, 0x07, 0x02, 0x06, 0x01d7 },
+ { 0x00, 0x0b, 0x09, 0x12, 0x04, 0x06, 0x01e5 },
+ { 0x00, 0x0b, 0x0e, 0x12, 0x06, 0x06, 0x022d },
+};
+static const struct WindowTemplate gUnknown_0861CCEC[] =
+{
+ { 0x00, 0x0a, 0x04, 0x0a, 0x02, 0x06, 0x01c1 },
+ { 0x00, 0x14, 0x04, 0x0a, 0x02, 0x06, 0x01d5 },
+ { 0x00, 0x10, 0x07, 0x06, 0x06, 0x06, 0x01e9 },
+ { 0x00, 0x1b, 0x07, 0x03, 0x06, 0x06, 0x020d },
+ { 0x00, 0x18, 0x0e, 0x06, 0x04, 0x06, 0x021f },
+};
+static const struct WindowTemplate gUnknown_0861CD14[] =
+{
+ { 0x00, 0x0f, 0x04, 0x09, 0x0a, 0x06, 0x01c1 },
+ { 0x00, 0x18, 0x04, 0x06, 0x0a, 0x08, 0x021b },
+ { 0x00, 0x0a, 0x0f, 0x14, 0x04, 0x06, 0x0257 },
+};
+static const u8 sTextColors_861CD2C[][3] =
+{
+ {0, 1, 2},
+ {0, 3, 4},
+ {0, 5, 6},
+ {0, 7, 8},
+ {0, 9, 10},
+ {0, 11, 12},
+ {0, 13, 14},
+ {0, 7, 8},
+ {13, 15, 14},
+ {0, 1, 2},
+ {0, 3, 4},
+ {0, 5, 6},
+ {0, 7, 8}
+};
+static const u8 gUnknown_0861CD53[] = INCBIN_U8("graphics/interface/summary_a_button.4bpp");
+static const u8 gUnknown_0861CDD3[] = INCBIN_U8("graphics/interface/summary_b_button.4bpp");
+static void (*const gUnknown_0861CE54[])(void) =
+{
+ sub_81C2E00,
+ sub_81C3530,
+ sub_81C3984,
+ sub_81C3D08
+};
+static void (*const gUnknown_0861CE64[])(u8 taskId) =
+{
+ sub_81C2E40,
+ sub_81C3554,
+ sub_81C39F0,
+ sub_81C3D54
+};
+static const u8 gUnknown_0861CE74[] = _("{COLOR LIGHT_RED}{SHADOW GREEN}");
+static const u8 gUnknown_0861CE7B[] = _("{COLOR WHITE}{SHADOW DARK_GREY}");
+static const u8 gUnknown_0861CE82[] = _("{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}\n{SPECIAL_F7 0x03}");
+static const u8 gUnknown_0861CE8E[] = _("{SPECIAL_F7 0x00}\n{SPECIAL_F7 0x01}\n{SPECIAL_F7 0x02}");
+static const u8 gUnknown_0861CE97[] = _("{PP}{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}");
+static const struct OamData gOamData_861CEA0 =
+{
+ .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 gSpriteAnim_861CEA8[] = {
+ ANIMCMD_FRAME(0, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CEB0[] = {
+ ANIMCMD_FRAME(8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CEB8[] = {
+ ANIMCMD_FRAME(16, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CEC0[] = {
+ ANIMCMD_FRAME(24, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CEC8[] = {
+ ANIMCMD_FRAME(32, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CED0[] = {
+ ANIMCMD_FRAME(40, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CED8[] = {
+ ANIMCMD_FRAME(48, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CEE0[] = {
+ ANIMCMD_FRAME(56, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CEE8[] = {
+ ANIMCMD_FRAME(64, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CEF0[] = {
+ ANIMCMD_FRAME(72, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CEF8[] = {
+ ANIMCMD_FRAME(80, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF00[] = {
+ ANIMCMD_FRAME(88, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF08[] = {
+ ANIMCMD_FRAME(96, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF10[] = {
+ ANIMCMD_FRAME(104, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF18[] = {
+ ANIMCMD_FRAME(112, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF20[] = {
+ ANIMCMD_FRAME(120, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF28[] = {
+ ANIMCMD_FRAME(128, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF30[] = {
+ ANIMCMD_FRAME(136, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF38[] = {
+ ANIMCMD_FRAME(144, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF40[] = {
+ ANIMCMD_FRAME(152, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF48[] = {
+ ANIMCMD_FRAME(160, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF50[] = {
+ ANIMCMD_FRAME(168, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861CF58[] = {
+ ANIMCMD_FRAME(176, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd *const gSpriteAnimTable_861CF60[] = {
+ gSpriteAnim_861CEA8,
+ gSpriteAnim_861CEB0,
+ gSpriteAnim_861CEB8,
+ gSpriteAnim_861CEC0,
+ gSpriteAnim_861CEC8,
+ gSpriteAnim_861CED0,
+ gSpriteAnim_861CED8,
+ gSpriteAnim_861CEE0,
+ gSpriteAnim_861CEE8,
+ gSpriteAnim_861CEF0,
+ gSpriteAnim_861CEF8,
+ gSpriteAnim_861CF00,
+ gSpriteAnim_861CF08,
+ gSpriteAnim_861CF10,
+ gSpriteAnim_861CF18,
+ gSpriteAnim_861CF20,
+ gSpriteAnim_861CF28,
+ gSpriteAnim_861CF30,
+ gSpriteAnim_861CF38,
+ gSpriteAnim_861CF40,
+ gSpriteAnim_861CF48,
+ gSpriteAnim_861CF50,
+ gSpriteAnim_861CF58,
+};
+static const struct CompressedSpriteSheet gUnknown_0861CFBC =
+{
+ .data = gMoveTypes_Gfx,
+ .size = 0x1700,
+ .tag = 30002
+};
+static const struct SpriteTemplate gUnknown_0861CFC4 =
+{
+ .tileTag = 30002,
+ .paletteTag = 30002,
+ .oam = &gOamData_861CEA0,
+ .anims = gSpriteAnimTable_861CF60,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+static const u8 gUnknown_0861CFDC[] = {13, 13, 14, 14, 13, 13, 15, 14, 13, 15, 13, 14, 15, 13, 14, 14, 15, 13, 13, 14, 14, 15, 13};
+static const struct OamData gOamData_861CFF4 =
+{
+ .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 gSpriteAnim_861CFFC[] = {
+ ANIMCMD_FRAME(0, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D004[] = {
+ ANIMCMD_FRAME(4, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D00C[] = {
+ ANIMCMD_FRAME(8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D014[] = {
+ ANIMCMD_FRAME(12, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D01C[] = {
+ ANIMCMD_FRAME(16, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D024[] = {
+ ANIMCMD_FRAME(16, 0, TRUE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D02C[] = {
+ ANIMCMD_FRAME(20, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D034[] = {
+ ANIMCMD_FRAME(24, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D03C[] = {
+ ANIMCMD_FRAME(24, 0, TRUE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D044[] = {
+ ANIMCMD_FRAME(28, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd *const gSpriteAnimTable_861D04C[] = {
+ gSpriteAnim_861CFFC,
+ gSpriteAnim_861D004,
+ gSpriteAnim_861D00C,
+ gSpriteAnim_861D014,
+ gSpriteAnim_861D01C,
+ gSpriteAnim_861D024,
+ gSpriteAnim_861D02C,
+ gSpriteAnim_861D034,
+ gSpriteAnim_861D03C,
+ gSpriteAnim_861D044,
+};
+static const struct CompressedSpriteSheet gUnknown_0861D074 =
+{
+ .data = gUnknown_08D97BEC,
+ .size = 0x400,
+ .tag = 30000
+};
+static const struct CompressedSpritePalette gUnknown_0861D07C =
+{
+ .data = gUnknown_08D97CF4,
+ .tag = 30000
+};
+static const struct SpriteTemplate gUnknown_0861D084 =
+{
+ .tileTag = 30000,
+ .paletteTag = 30000,
+ .oam = &gOamData_861CFF4,
+ .anims = gSpriteAnimTable_861D04C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+static const struct OamData gOamData_861D09C =
+{
+ .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 gSpriteAnim_861D0A4[] = {
+ ANIMCMD_FRAME(0, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D0AC[] = {
+ ANIMCMD_FRAME(4, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D0B4[] = {
+ ANIMCMD_FRAME(8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D0BC[] = {
+ ANIMCMD_FRAME(12, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D0C4[] = {
+ ANIMCMD_FRAME(16, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D0CC[] = {
+ ANIMCMD_FRAME(20, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd gSpriteAnim_861D0D4[] = {
+ ANIMCMD_FRAME(24, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
+static const union AnimCmd *const gSpriteAnimTable_861D0DC[] = {
+ gSpriteAnim_861D0A4,
+ gSpriteAnim_861D0AC,
+ gSpriteAnim_861D0B4,
+ gSpriteAnim_861D0BC,
+ gSpriteAnim_861D0C4,
+ gSpriteAnim_861D0CC,
+ gSpriteAnim_861D0D4,
+};
+static const struct CompressedSpriteSheet gUnknown_0861D0F8 =
+{
+ .data = gStatusGfx_Icons,
+ .size = 0x380,
+ .tag = 30001
+};
+static const struct CompressedSpritePalette gUnknown_0861D100 =
+{
+ .data = gStatusPal_Icons,
+ .tag = 30001
+};
+static const struct SpriteTemplate gUnknown_0861D108 =
+{
+ .tileTag = 30001,
+ .paletteTag = 30001,
+ .oam = &gOamData_861D09C,
+ .anims = gSpriteAnimTable_861D0DC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+static const u16 gUnknown_0861D120[] = INCBIN_U16("graphics/interface/summary_markings.gbapal");
// code
-void sub_81BF8EC(u8 a, void *b, u8 c, u8 d, void *e)
-{
- u8 byte;
- gUnknown_0203CF1C = AllocZeroed(sizeof(struct UnkSummaryStruct));
- gUnknown_0203CF1C->unk40BC = a;
- gUnknown_0203CF1C->unk0 = b;
- gUnknown_0203CF1C->unk40BE = c;
- gUnknown_0203CF1C->unk40BF = d;
- gUnknown_0203CF1C->unk4 = e;
- if (a == 2)
- gUnknown_0203CF1C->unk40BD = 1;
+void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void))
+{
+ pssData = AllocZeroed(sizeof(*pssData));
+ pssData->mode = mode;
+ pssData->monList.mons = mons;
+ pssData->curMonIndex = monIndex;
+ pssData->maxMonIndex = maxMonIndex;
+ pssData->callback = callback;
+
+ if (mode == PSS_MODE_UNK2)
+ pssData->isBoxMon = TRUE;
else
- gUnknown_0203CF1C->unk40BD = 0;
- switch (a)
+ pssData->isBoxMon = FALSE;
+
+ switch (mode)
{
- case 0:
- case 2:
- gUnknown_0203CF1C->unk40C1 = 0;
- gUnknown_0203CF1C->unk40C2 = 3;
+ case PSS_MODE_NORMAL:
+ case PSS_MODE_UNK2:
+ pssData->minPageIndex = 0;
+ pssData->maxPageIndex = 3;
break;
- case 1:
- gUnknown_0203CF1C->unk40C1 = 0;
- gUnknown_0203CF1C->unk40C2 = 3;
- gUnknown_0203CF1C->unk40C8 = 1;
+ case PSS_MODE_UNK1:
+ pssData->minPageIndex = 0;
+ pssData->maxPageIndex = 3;
+ pssData->unk40C8 = TRUE;
break;
- case 3:
- gUnknown_0203CF1C->unk40C1 = 2;
- gUnknown_0203CF1C->unk40C2 = 3;
- gUnknown_0203CF1C->unk40C3 = 1;
+ case PSS_MODE_SELECT_MOVE:
+ pssData->minPageIndex = 2;
+ pssData->maxPageIndex = 3;
+ pssData->unk40C3 = TRUE;
break;
}
- byte = gUnknown_0203CF1C->unk40C1;
- gUnknown_0203CF1C->unk40C0 = byte;
- sub_81C488C(0xFF);
+
+ pssData->currPageIndex = pssData->minPageIndex;
+ SummaryScreen_SetUnknownTaskId(-1);
+
if (gMonSpritesGfxPtr == 0)
sub_806F2AC(0, 0);
- SetMainCallback2(sub_81BFAE4);
+
+ SetMainCallback2(SummaryScreen_LoadingCB2);
}
-void sub_81BFA38(void *a, u8 b, u8 c, void *d, u16 e)
+void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove)
{
- sub_81BF8EC(3, a, b, c, d);
- gUnknown_0203CF1C->unk40C4 = e;
+ ShowPokemonSummaryScreen(PSS_MODE_SELECT_MOVE, mons, monIndex, maxMonIndex, callback);
+ pssData->newMove = newMove;
}
-void sub_81BFA80(u8 a, void *b, u8 c, u8 d, void *e)
+void ShowPokemonSummaryScreenSet40EF(u8 mode, struct BoxPokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void))
{
- sub_81BF8EC(a, b, c, d, e);
- gUnknown_0203CF1C->unk40EF = 1;
+ ShowPokemonSummaryScreen(mode, mons, monIndex, maxMonIndex, callback);
+ pssData->unk40EF = TRUE;
}
-void sub_81BFAB4(void)
+static void SummaryScreen_MainCB2(void)
{
RunTasks();
AnimateSprites();
@@ -404,23 +772,19 @@ void sub_81BFAB4(void)
UpdatePaletteFade();
}
-void sub_81BFAD0(void)
+static void SummaryScreen_VBlank(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void sub_81BFAE4()
+static void SummaryScreen_LoadingCB2(void)
{
- while (1)
- {
- if (sub_81221EC() == 1 || sub_81BFB10() == TRUE || sub_81221AC() == 1)
- break;
- }
+ while (sub_81221EC() != TRUE && SummaryScreen_LoadGraphics() != TRUE && sub_81221AC() != TRUE);
}
-bool8 sub_81BFB10(void)
+static bool8 SummaryScreen_LoadGraphics(void)
{
switch (gMain.state)
{
@@ -448,12 +812,12 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 5:
- sub_81BFE24();
- gUnknown_0203CF1C->unk40F0 = 0;
+ InitBGs();
+ pssData->unk40F0 = 0;
gMain.state++;
break;
case 6:
- if (sub_81BFEB0() != 0)
+ if (SummaryScreen_DecompressGraphics() != FALSE)
gMain.state++;
break;
case 7:
@@ -465,12 +829,12 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 9:
- sub_81C0098(&gUnknown_0203CF1C->currentMon);
- gUnknown_0203CF1C->unk40F0 = 0;
+ CopyMonToSummaryStruct(&pssData->currentMon);
+ pssData->unk40F0 = 0;
gMain.state++;
break;
case 10:
- if (sub_81C00F0(&gUnknown_0203CF1C->currentMon) != 0)
+ if (ExtractMonDataToSummaryStruct(&pssData->currentMon) != 0)
gMain.state++;
break;
case 11:
@@ -478,11 +842,11 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 12:
- sub_81C286C();
+ PrintPageNamesAndStatsPageToWindows();
gMain.state++;
break;
case 13:
- sub_81C2D9C(gUnknown_0203CF1C->unk40C0);
+ sub_81C2D9C(pssData->currPageIndex);
gMain.state++;
break;
case 14:
@@ -490,33 +854,33 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 15:
- sub_81C2AFC(gUnknown_0203CF1C->unk40C0);
+ sub_81C2AFC(pssData->currPageIndex);
gMain.state++;
break;
case 16:
sub_81C4190();
sub_81C42C8();
- gUnknown_0203CF1C->unk40F0 = 0;
+ pssData->unk40F0 = 0;
gMain.state++;
break;
case 17:
- gUnknown_0203CF1C->unk40D3[0] = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &gUnknown_0203CF1C->unk40F0);
- if (gUnknown_0203CF1C->unk40D3[0] != 0xFF)
+ pssData->spriteIds[0] = sub_81C45F4(&pssData->currentMon, &pssData->unk40F0);
+ if (pssData->spriteIds[0] != 0xFF)
{
- gUnknown_0203CF1C->unk40F0 = 0;
+ pssData->unk40F0 = 0;
gMain.state++;
}
break;
case 18:
- sub_81C4984(&gUnknown_0203CF1C->currentMon);
+ CreateMonMarkingsSprite(&pssData->currentMon);
gMain.state++;
break;
case 19:
- sub_81C4A08(&gUnknown_0203CF1C->currentMon);
+ CreateCaughtBallSprite(&pssData->currentMon);
gMain.state++;
break;
case 20:
- sub_81C4A88();
+ CreateSetStatusSprite();
gMain.state++;
break;
case 21:
@@ -524,7 +888,7 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
case 22:
- if (gUnknown_0203CF1C->unk40BC != 3)
+ if (pssData->mode != PSS_MODE_SELECT_MOVE)
CreateTask(sub_81C0510, 0);
else
CreateTask(sub_81C171C, 0);
@@ -540,20 +904,20 @@ bool8 sub_81BFB10(void)
gMain.state++;
break;
default:
- SetVBlankCallback(sub_81BFAD0);
- SetMainCallback2(sub_81BFAB4);
+ SetVBlankCallback(SummaryScreen_VBlank);
+ SetMainCallback2(SummaryScreen_MainCB2);
return TRUE;
}
return FALSE;
}
-void sub_81BFE24()
+static void InitBGs(void)
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, &gUnknown_0861CBB4, 4);
- SetBgTilemapBuffer(1, &gUnknown_0203CF1C->unkTilemap2);
- SetBgTilemapBuffer(2, &gUnknown_0203CF1C->unkTilemap1);
- SetBgTilemapBuffer(3, &gUnknown_0203CF1C->unkTilemap0);
+ InitBgsFromTemplates(0, gUnknown_0861CBB4, ARRAY_COUNT(gUnknown_0861CBB4));
+ SetBgTilemapBuffer(1, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0]);
+ SetBgTilemapBuffer(2, pssData->bgTilemapBuffers[PSS_PAGE_SKILLS][0]);
+ SetBgTilemapBuffer(3, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0]);
ResetAllBgsCoordinates();
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
@@ -566,90 +930,90 @@ void sub_81BFE24()
ShowBg(3);
}
-u8 sub_81BFEB0()
+static bool8 SummaryScreen_DecompressGraphics(void)
{
- switch (gUnknown_0203CF1C->unk40F0)
+ switch (pssData->unk40F0)
{
case 0:
reset_temp_tile_data_buffers();
decompress_and_copy_tile_data_to_vram(1, &gUnknown_08D97D0C, 0, 0, 0);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 1:
if (free_temp_tile_data_buffers_if_possible() != 1)
{
- LZDecompressWram(&gUnknown_08D9862C, gUnknown_0203CF1C->unkTilemap0);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D9862C, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0]);
+ pssData->unk40F0++;
}
break;
case 2:
- LZDecompressWram(&gUnknown_08D98CC8, gUnknown_0203CF1C->unkTilemap0_1);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D98CC8, pssData->bgTilemapBuffers[PSS_PAGE_INFO][1]);
+ pssData->unk40F0++;
break;
case 3:
- LZDecompressWram(&gUnknown_08D987FC, gUnknown_0203CF1C->unkTilemap1_1);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D987FC, pssData->bgTilemapBuffers[PSS_PAGE_SKILLS][1]);
+ pssData->unk40F0++;
break;
case 4:
- LZDecompressWram(&gUnknown_08D9898C, gUnknown_0203CF1C->unkTilemap2_1);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D9898C, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][1]);
+ pssData->unk40F0++;
break;
case 5:
- LZDecompressWram(&gUnknown_08D98B28, gUnknown_0203CF1C->unkTilemap3_1);
- gUnknown_0203CF1C->unk40F0++;
+ LZDecompressWram(&gUnknown_08D98B28, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][1]);
+ pssData->unk40F0++;
break;
case 6:
LoadCompressedPalette(&gUnknown_08D9853C, 0, 0x100);
LoadPalette(&gUnknown_08D85620, 0x81, 0x1E);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 7:
LoadCompressedObjectPic(&gUnknown_0861CFBC);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 8:
LoadCompressedObjectPic(&gUnknown_0861D074);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 9:
LoadCompressedObjectPic(&gUnknown_0861D0F8);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 10:
LoadCompressedObjectPalette(&gUnknown_0861D100);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 11:
LoadCompressedObjectPalette(&gUnknown_0861D07C);
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
break;
case 12:
LoadCompressedPalette(&gMoveTypes_Pal, 0x1D0, 0x60);
- gUnknown_0203CF1C->unk40F0 = 0;
- return 1;
+ pssData->unk40F0 = 0;
+ return TRUE;
}
- return 0;
+ return FALSE;
}
-void sub_81C0098(struct Pokemon *mon)
+static void CopyMonToSummaryStruct(struct Pokemon *mon)
{
- if (gUnknown_0203CF1C->unk40BD == 0)
+ if (!pssData->isBoxMon)
{
- struct Pokemon *partyMon = gUnknown_0203CF1C->unk0->mon;
- *mon = partyMon[gUnknown_0203CF1C->unk40BE];
+ struct Pokemon *partyMon = pssData->monList.mons;
+ *mon = partyMon[pssData->curMonIndex];
}
else
{
- struct BoxPokemon *boxMon = gUnknown_0203CF1C->unk0->boxMon;
- BoxMonToMon(&boxMon[gUnknown_0203CF1C->unk40BE], mon);
+ struct BoxPokemon *boxMon = pssData->monList.boxMons;
+ BoxMonToMon(&boxMon[pssData->curMonIndex], mon);
}
}
-bool8 sub_81C00F0(struct Pokemon *a)
+static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *a)
{
u32 i;
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- switch (gUnknown_0203CF1C->unk40F0)
+ struct PokeSummary *sum = &pssData->summary;
+ switch (pssData->unk40F0)
{
case 0:
sum->species = GetMonData(a, MON_DATA_SPECIES);
@@ -660,10 +1024,12 @@ bool8 sub_81C00F0(struct Pokemon *a)
sum->item = GetMonData(a, MON_DATA_HELD_ITEM);
sum->pid = GetMonData(a, MON_DATA_PERSONALITY);
sum->sanity = GetMonData(a, MON_DATA_SANITY_BIT1);
- if (sum->sanity != 0)
- sum->isEgg = 1;
+
+ if (sum->sanity)
+ sum->isEgg = TRUE;
else
sum->isEgg = GetMonData(a, MON_DATA_IS_EGG);
+
break;
case 1:
for (i = 0; i < 4; i++)
@@ -674,7 +1040,7 @@ bool8 sub_81C00F0(struct Pokemon *a)
sum->ppBonuses = GetMonData(a, MON_DATA_PP_BONUSES);
break;
case 2:
- if ((struct Pokemon*)gUnknown_0203CF1C->unk0 == gPlayerParty || gUnknown_0203CF1C->unk40BC == 2 || gUnknown_0203CF1C->unk40EF == 1)
+ if (pssData->monList.mons == gPlayerParty || pssData->mode == PSS_MODE_UNK2 || pssData->unk40EF == TRUE)
{
sum->nature = GetNature(a);
sum->currentHP = GetMonData(a, MON_DATA_HP);
@@ -709,63 +1075,63 @@ bool8 sub_81C00F0(struct Pokemon *a)
sum->friendship = GetMonData(a, MON_DATA_FRIENDSHIP);
break;
default:
- sum->ribbons = GetMonData(a, MON_DATA_RIBBON_COUNT);
+ sum->ribbonCount = GetMonData(a, MON_DATA_RIBBON_COUNT);
return TRUE;
}
- gUnknown_0203CF1C->unk40F0++;
+ pssData->unk40F0++;
return FALSE;
}
-void sub_81C0348(void)
+static void sub_81C0348(void)
{
- if (gUnknown_0203CF1C->unk40C0 != 2 && gUnknown_0203CF1C->unk40C0 != 3)
+ if (pssData->currPageIndex != PSS_PAGE_BATTLE_MOVES && pssData->currPageIndex != PSS_PAGE_CONTEST_MOVES)
{
sub_81C1DA4(0, 255);
sub_81C1EFC(0, 255, 0);
}
else
{
- sub_81C240C(gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6]);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap2[0], 3, 0);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap3[0], 1, 0);
- SetBgTilemapBuffer(1, &gUnknown_0203CF1C->unkTilemap3);
- SetBgTilemapBuffer(2, &gUnknown_0203CF1C->unkTilemap2);
+ sub_81C240C(pssData->summary.moves[pssData->firstMoveIndex]);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], 3, 0);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, 0);
+ SetBgTilemapBuffer(1, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0]);
+ SetBgTilemapBuffer(2, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0]);
ChangeBgX(2, 0x10000, 1);
- ClearWindowTilemap(0x13);
- ClearWindowTilemap(0xD);
+ ClearWindowTilemap(19);
+ ClearWindowTilemap(13);
}
- if (gUnknown_0203CF1C->summary.unk7 == 0)
+ if (pssData->summary.unk7 == 0)
{
sub_81C2074(0, 0xFF);
}
else
{
- if (gUnknown_0203CF1C->unk40C0 != 2 && gUnknown_0203CF1C->unk40C0 != 3)
- PutWindowTilemap(0xD);
+ if (pssData->currPageIndex != PSS_PAGE_BATTLE_MOVES && pssData->currPageIndex != PSS_PAGE_CONTEST_MOVES)
+ PutWindowTilemap(13);
}
sub_81C2524();
- sub_81C2228(&gUnknown_0203CF1C->currentMon);
+ sub_81C2228(&pssData->currentMon);
}
-void sub_81C0434()
+static void sub_81C0434(void)
{
FreeAllWindowBuffers();
- Free(gUnknown_0203CF1C);
+ Free(pssData);
}
-void sub_81C044C(u8 taskId)
+static void sub_81C044C(u8 taskId)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gTasks[taskId].func = sub_81C0484;
}
-void sub_81C0484(u8 taskId)
+static void sub_81C0484(u8 taskId)
{
- if (sub_81221EC() != 1 && !gPaletteFade.active)
+ if (sub_81221EC() != TRUE && !gPaletteFade.active)
{
- SetMainCallback2(gUnknown_0203CF1C->unk4);
- gUnknown_0203CF20 = gUnknown_0203CF1C->unk40BE;
- sub_81C4898();
+ SetMainCallback2(pssData->callback);
+ gUnknown_0203CF20 = pssData->curMonIndex;
+ SummaryScreen_DestroyUnknownTask();
ResetSpriteData();
FreeAllSpritePalettes();
StopCryAndClearCrySongs();
@@ -777,9 +1143,9 @@ void sub_81C0484(u8 taskId)
}
}
-void sub_81C0510(u8 taskId)
+static void sub_81C0510(u8 taskId)
{
- if (sub_81221EC() != 1 && !gPaletteFade.active)
+ if (sub_81221EC() != TRUE && !gPaletteFade.active)
{
if (gMain.newKeys & DPAD_UP)
{
@@ -799,9 +1165,9 @@ void sub_81C0510(u8 taskId)
}
else if (gMain.newKeys & A_BUTTON)
{
- if (gUnknown_0203CF1C->unk40C0 != 1)
+ if (pssData->currPageIndex != PSS_PAGE_SKILLS)
{
- if (gUnknown_0203CF1C->unk40C0 == 0)
+ if (pssData->currPageIndex == PSS_PAGE_INFO)
{
sub_81C48F0();
PlaySE(SE_SELECT);
@@ -823,15 +1189,15 @@ void sub_81C0510(u8 taskId)
}
}
-void sub_81C0604(u8 taskId, s8 a)
+static void sub_81C0604(u8 taskId, s8 a)
{
s8 r4_2;
- if (gUnknown_0203CF1C->unk40C3 == 0)
+ if (!pssData->unk40C3)
{
- if (gUnknown_0203CF1C->unk40BD == 1)
+ if (pssData->isBoxMon == TRUE)
{
- if (gUnknown_0203CF1C->unk40C0 != 0)
+ if (pssData->currPageIndex != PSS_PAGE_INFO)
{
if (a == 1)
a = 0;
@@ -845,7 +1211,7 @@ void sub_81C0604(u8 taskId, s8 a)
else
a = 3;
}
- r4_2 = sub_80D214C(gUnknown_0203CF1C->unk0, gUnknown_0203CF1C->unk40BE, gUnknown_0203CF1C->unk40BF, a);
+ r4_2 = sub_80D214C(pssData->monList.boxMons, pssData->curMonIndex, pssData->maxMonIndex, a);
}
else if (sub_81B1250() == 1)
{
@@ -859,21 +1225,21 @@ void sub_81C0604(u8 taskId, s8 a)
if (r4_2 != -1)
{
PlaySE(SE_SELECT);
- if (gUnknown_0203CF1C->summary.unk7 != 0)
+ if (pssData->summary.unk7 != 0)
{
sub_81C4204(2, 1);
- ClearWindowTilemap(0xD);
+ ClearWindowTilemap(13);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C2074(0, 2);
}
- gUnknown_0203CF1C->unk40BE = r4_2;
+ pssData->curMonIndex = r4_2;
gTasks[taskId].data[0] = 0;
gTasks[taskId].func = sub_81C0704;
}
}
}
-void sub_81C0704(u8 taskId)
+static void sub_81C0704(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -883,37 +1249,37 @@ void sub_81C0704(u8 taskId)
StopCryAndClearCrySongs();
break;
case 1:
- sub_81C4898();
- DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3[0]]);
+ SummaryScreen_DestroyUnknownTask();
+ DestroySpriteAndFreeResources(&gSprites[pssData->spriteIds[0]]);
break;
case 2:
- DestroySpriteAndFreeResources(&gSprites[gUnknown_0203CF1C->unk40D3[1]]);
+ DestroySpriteAndFreeResources(&gSprites[pssData->spriteIds[1]]);
break;
case 3:
- sub_81C0098(&gUnknown_0203CF1C->currentMon);
- gUnknown_0203CF1C->unk40F0 = 0;
+ CopyMonToSummaryStruct(&pssData->currentMon);
+ pssData->unk40F0 = 0;
break;
case 4:
- if (sub_81C00F0(&gUnknown_0203CF1C->currentMon) == FALSE)
+ if (ExtractMonDataToSummaryStruct(&pssData->currentMon) == FALSE)
return;
break;
case 5:
- sub_81C49E0(&gUnknown_0203CF1C->currentMon);
+ RemoveAndCreateMonMarkingsSprite(&pssData->currentMon);
break;
case 6:
- sub_81C4A08(&gUnknown_0203CF1C->currentMon);
+ CreateCaughtBallSprite(&pssData->currentMon);
break;
case 7:
- if (gUnknown_0203CF1C->summary.unk7)
+ if (pssData->summary.unk7)
sub_81C2074(10, -2);
- sub_81C2228(&gUnknown_0203CF1C->currentMon);
+ sub_81C2228(&pssData->currentMon);
data[1] = 0;
break;
case 8:
- gUnknown_0203CF1C->unk40D3[0] = sub_81C45F4(&gUnknown_0203CF1C->currentMon, &data[1]);
- if (gUnknown_0203CF1C->unk40D3[0] == 0xFF)
+ pssData->spriteIds[0] = sub_81C45F4(&pssData->currentMon, &data[1]);
+ if (pssData->spriteIds[0] == 0xFF)
return;
- gSprites[gUnknown_0203CF1C->unk40D3[0]].data[2] = 1;
+ gSprites[pssData->spriteIds[0]].data[2] = 1;
sub_81C0E24();
data[1] = 0;
break;
@@ -924,11 +1290,11 @@ void sub_81C0704(u8 taskId)
sub_81C25E8();
break;
case 11:
- sub_81C2D9C(gUnknown_0203CF1C->unk40C0);
+ sub_81C2D9C(pssData->currPageIndex);
sub_81C2524();
break;
case 12:
- gSprites[gUnknown_0203CF1C->unk40D3[0]].data[2] = 0;
+ gSprites[pssData->spriteIds[0]].data[2] = 0;
break;
default:
if (sub_81221EC() == 0 && FuncIsActiveTask(sub_81C20F0) == 0)
@@ -941,51 +1307,52 @@ void sub_81C0704(u8 taskId)
data[0]++;
}
-s8 sub_81C08F8(s8 a)
+static s8 sub_81C08F8(s8 a)
{
- struct Pokemon *mon = gUnknown_0203CF1C->unk0->mon;
+ struct Pokemon *mon = pssData->monList.mons;
- if (gUnknown_0203CF1C->unk40C0 == 0)
+ if (pssData->currPageIndex == PSS_PAGE_INFO)
{
- if (a == -1 && gUnknown_0203CF1C->unk40BE == 0)
+ if (a == -1 && pssData->curMonIndex == 0)
return -1;
- if (a == 1 && gUnknown_0203CF1C->unk40BE >= gUnknown_0203CF1C->unk40BF)
+ else if (a == 1 && pssData->curMonIndex >= pssData->maxMonIndex)
return -1;
- return gUnknown_0203CF1C->unk40BE + a;
+ else
+ return pssData->curMonIndex + a;
}
else
{
- s8 index = gUnknown_0203CF1C->unk40BE;
+ s8 index = pssData->curMonIndex;
do
{
index += a;
- if (index < 0 || index > gUnknown_0203CF1C->unk40BF)
+ if (index < 0 || index > pssData->maxMonIndex)
return -1;
} while (GetMonData(&mon[index], MON_DATA_IS_EGG) != 0);
return index;
}
}
-s8 sub_81C09B4(s8 a)
+static s8 sub_81C09B4(s8 a)
{
- struct Pokemon *mon = gUnknown_0203CF1C->unk0->mon;
+ struct Pokemon *mon = pssData->monList.mons;
s8 r5 = 0;
u8 i;
for (i = 0; i < 6; i++)
{
- if (gUnknown_0861CC1C[i] == gUnknown_0203CF1C->unk40BE)
+ if (gUnknown_0861CC1C[i] == pssData->curMonIndex)
{
r5 = i;
break;
}
}
- while (1)
+ while (TRUE)
{
int b;
- s8* c = &gUnknown_0861CC1C[0];
+ const s8* c = gUnknown_0861CC1C;
r5 += a;
if (r5 < 0 || r5 >= 6)
@@ -996,45 +1363,46 @@ s8 sub_81C09B4(s8 a)
}
}
-bool8 sub_81C0A50(struct Pokemon* mon)
+static bool8 sub_81C0A50(struct Pokemon* mon)
{
- if (GetMonData(mon, MON_DATA_SPECIES) == 0)
+ if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE)
return FALSE;
- else if (gUnknown_0203CF1C->unk40BE != 0 || GetMonData(mon, MON_DATA_IS_EGG) == 0)
+ else if (pssData->curMonIndex != 0 || GetMonData(mon, MON_DATA_IS_EGG) == 0)
return TRUE;
else
return FALSE;
}
-void sub_81C0A8C(u8 taskId, s8 b)
+static void sub_81C0A8C(u8 taskId, s8 b)
{
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
s16 *data = gTasks[taskId].data;
if (summary->isEgg)
return;
- if (b == -1 && gUnknown_0203CF1C->unk40C0 == gUnknown_0203CF1C->unk40C1)
+ else if (b == -1 && pssData->currPageIndex == pssData->minPageIndex)
return;
- if (b == 1 && gUnknown_0203CF1C->unk40C0 == gUnknown_0203CF1C->unk40C2)
+ else if (b == 1 && pssData->currPageIndex == pssData->maxPageIndex)
return;
+
PlaySE(SE_SELECT);
- sub_81C2C38(gUnknown_0203CF1C->unk40C0);
- gUnknown_0203CF1C->unk40C0 += b;
+ sub_81C2C38(pssData->currPageIndex);
+ pssData->currPageIndex += b;
data[0] = 0;
if (b == 1)
SetTaskFuncWithFollowupFunc(taskId, sub_81C0B8C, gTasks[taskId].func);
else
SetTaskFuncWithFollowupFunc(taskId, sub_81C0CC4, gTasks[taskId].func);
- sub_81C2DE4(gUnknown_0203CF1C->unk40C0);
+ sub_81C2DE4(pssData->currPageIndex);
sub_81C424C();
}
-void sub_81C0B8C(u8 taskId)
+static void sub_81C0B8C(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (data[0] == 0)
{
- if (gUnknown_0203CF1C->unk40C9 == 0)
+ if (pssData->unk40C9 == 0)
{
data[1] = 1;
SetBgAttribute(1, 7, 1);
@@ -1049,7 +1417,7 @@ void sub_81C0B8C(u8 taskId)
schedule_bg_copy_tilemap_to_vram(2);
}
ChangeBgX(data[1], 0, 0);
- SetBgTilemapBuffer(data[1], (u8*)gUnknown_0203CF1C + ((gUnknown_0203CF1C->unk40C0 << 12) + 0xBC));
+ SetBgTilemapBuffer(data[1], pssData->bgTilemapBuffers[pssData->currPageIndex][0]);
ShowBg(1);
ShowBg(2);
}
@@ -1059,25 +1427,25 @@ void sub_81C0B8C(u8 taskId)
gTasks[taskId].func = sub_81C0C68;
}
-void sub_81C0C68(u8 taskId)
+static void sub_81C0C68(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- gUnknown_0203CF1C->unk40C9 ^= 1;
+ pssData->unk40C9 ^= 1;
data[1] = 0;
data[0] = 0;
sub_81C1BA0();
- sub_81C2AFC(gUnknown_0203CF1C->unk40C0);
+ sub_81C2AFC(pssData->currPageIndex);
sub_81C4280();
sub_81C0E24();
SwitchTaskToFollowupFunc(taskId);
}
-void sub_81C0CC4(u8 taskId)
+static void sub_81C0CC4(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (data[0] == 0)
{
- if (gUnknown_0203CF1C->unk40C9 == 0)
+ if (pssData->unk40C9 == 0)
data[1] = 2;
else
data[1] = 1;
@@ -1089,10 +1457,10 @@ void sub_81C0CC4(u8 taskId)
gTasks[taskId].func = sub_81C0D44;
}
-void sub_81C0D44(u8 taskId)
+static void sub_81C0D44(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (gUnknown_0203CF1C->unk40C9 == 0)
+ if (pssData->unk40C9 == 0)
{
SetBgAttribute(1, 7, 1);
SetBgAttribute(2, 7, 2);
@@ -1104,48 +1472,48 @@ void sub_81C0D44(u8 taskId)
SetBgAttribute(1, 7, 2);
schedule_bg_copy_tilemap_to_vram(1);
}
- if (gUnknown_0203CF1C->unk40C0 > 1)
+ if (pssData->currPageIndex > 1)
{
- SetBgTilemapBuffer(data[1], (u8*)gUnknown_0203CF1C + ((gUnknown_0203CF1C->unk40C0 << 12) + 0xFFFFF0BC));
+ SetBgTilemapBuffer(data[1], (u8*)pssData + ((pssData->currPageIndex << 12) + 0xFFFFF0BC));
ChangeBgX(data[1], 0x10000, 0);
}
ShowBg(1);
ShowBg(2);
- gUnknown_0203CF1C->unk40C9 ^= 1;
+ pssData->unk40C9 ^= 1;
data[1] = 0;
data[0] = 0;
sub_81C1BA0();
- sub_81C2AFC(gUnknown_0203CF1C->unk40C0);
+ sub_81C2AFC(pssData->currPageIndex);
sub_81C4280();
sub_81C0E24();
SwitchTaskToFollowupFunc(taskId);
}
-void sub_81C0E24()
+static void sub_81C0E24(void)
{
- if (gUnknown_0203CF1C->unk40C0 == 1)
- sub_81C22CC(&gUnknown_0203CF1C->currentMon);
+ if (pssData->currPageIndex == 1)
+ sub_81C22CC(&pssData->currentMon);
}
-void sub_81C0E48(u8 taskId)
+static void sub_81C0E48(u8 taskId)
{
u16 move;
- gUnknown_0203CF1C->unk40C6 = 0;
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
+ pssData->firstMoveIndex = 0;
+ move = pssData->summary.moves[pssData->firstMoveIndex];
ClearWindowTilemap(0x13);
- if (gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible == 0)
+ if (gSprites[pssData->spriteIds[2]].invisible == 0)
ClearWindowTilemap(0xD);
sub_81C1DA4(9, -3);
sub_81C1EFC(9, -3, move);
- if (gUnknown_0203CF1C->unk40C8 == 0)
+ if (!pssData->unk40C8)
{
ClearWindowTilemap(5);
PutWindowTilemap(6);
}
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap2[0], 3, 0);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap3[0], 1, 0);
- sub_81C3E9C(move);
- sub_81C3F44();
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], 3, 0);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, 0);
+ PrintMoveDetails(move);
+ PrintNewMoveDetailsOrCancelText();
sub_81C44F0();
schedule_bg_copy_tilemap_to_vram(0);
schedule_bg_copy_tilemap_to_vram(1);
@@ -1154,7 +1522,7 @@ void sub_81C0E48(u8 taskId)
gTasks[taskId].func = sub_81C0F44;
}
-void sub_81C0F44(u8 taskId)
+static void sub_81C0F44(u8 taskId)
{
u8 id = taskId;
s16 *data = gTasks[taskId].data;
@@ -1164,17 +1532,17 @@ void sub_81C0F44(u8 taskId)
if (gMain.newKeys & DPAD_UP)
{
data[0] = 4;
- sub_81C1070(data, -1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(data, -1, &pssData->firstMoveIndex);
}
else if (gMain.newKeys & DPAD_DOWN)
{
data[0] = 4;
- sub_81C1070(data, 1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(data, 1, &pssData->firstMoveIndex);
}
else if (gMain.newKeys & A_BUTTON)
{
- if (gUnknown_0203CF1C->unk40C8 == 1
- || (gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->unk40C8 == TRUE
+ || (pssData->newMove == MOVE_NONE && pssData->firstMoveIndex == MAX_MON_MOVES))
{
PlaySE(SE_SELECT);
sub_81C11F4(taskId);
@@ -1197,18 +1565,18 @@ void sub_81C0F44(u8 taskId)
}
}
-bool8 sub_81C1040(void)
+static bool8 sub_81C1040(void)
{
u8 i;
for (i = 1; i < 4; i++)
{
- if (gUnknown_0203CF1C->summary.moves[i] != 0)
+ if (pssData->summary.moves[i] != 0)
return TRUE;
}
return FALSE;
}
-void sub_81C1070(s16 *a, s8 b, u8 *c)
+static void sub_81C1070(s16 *a, s8 b, u8 *c)
{
s8 i;
s8 moveIndex;
@@ -1225,27 +1593,27 @@ void sub_81C1070(s16 *a, s8 b, u8 *c)
moveIndex = a[0];
if (moveIndex == 4)
{
- move = gUnknown_0203CF1C->unk40C4;
+ move = pssData->newMove;
break;
}
- move = gUnknown_0203CF1C->summary.moves[moveIndex];
+ move = pssData->summary.moves[moveIndex];
if (move != 0)
break;
}
sub_81C240C(move);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
- sub_81C3E9C(move);
- if ((*c == 4 && gUnknown_0203CF1C->unk40C4 == 0) || a[1] == 1)
+ PrintMoveDetails(move);
+ if ((*c == 4 && pssData->newMove == MOVE_NONE) || a[1] == 1)
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
ClearWindowTilemap(13);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C1DA4(9, -3);
sub_81C1EFC(9, -3, move);
}
- if (*c != 4 && moveIndex == 4 && gUnknown_0203CF1C->unk40C4 == 0)
+ if (*c != 4 && moveIndex == 4 && pssData->newMove == MOVE_NONE)
{
ClearWindowTilemap(14);
ClearWindowTilemap(15);
@@ -1254,22 +1622,22 @@ void sub_81C1070(s16 *a, s8 b, u8 *c)
sub_81C1EFC(0, 3, 0);
}
*c = moveIndex;
- if (c == &gUnknown_0203CF1C->unk40C6)
+ if (c == &pssData->firstMoveIndex)
sub_81C4D18(8);
else
sub_81C4D18(18);
}
-void sub_81C11F4(u8 taskId)
+static void sub_81C11F4(u8 taskId)
{
sub_81C4C60(8);
ClearWindowTilemap(6);
PutWindowTilemap(5);
- sub_81C3E9C(0);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap2[0], 3, 1);
- sub_81C2194(&gUnknown_0203CF1C->unkTilemap3[0], 1, 1);
+ PrintMoveDetails(0);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], 3, 1);
+ sub_81C2194(pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], 1, 1);
sub_81C4064();
- if (gUnknown_0203CF1C->unk40C6 != 4)
+ if (pssData->firstMoveIndex != MAX_MON_MOVES)
{
ClearWindowTilemap(14);
ClearWindowTilemap(15);
@@ -1282,506 +1650,160 @@ void sub_81C11F4(u8 taskId)
gTasks[taskId].func = sub_81C0510;
}
-void sub_81C129C(u8 taskId)
+static void sub_81C129C(u8 taskId)
{
- gUnknown_0203CF1C->unk40C7 = gUnknown_0203CF1C->unk40C6;
+ pssData->secondMoveIndex = pssData->firstMoveIndex;
sub_81C4C84(1);
sub_81C4AF8(18);
gTasks[taskId].func = sub_81C12E4;
}
-void sub_81C12E4(u8 taskId)
+static void sub_81C12E4(u8 taskId)
{
- u8 a = taskId;
s16* data = gTasks[taskId].data;
- if (sub_81221EC() != 1)
+
+ if (sub_81221EC() != TRUE)
{
if (gMain.newKeys & DPAD_UP)
{
data[0] = 3;
- sub_81C1070(&data[0], -1, &gUnknown_0203CF1C->unk40C7);
+ sub_81C1070(&data[0], -1, &pssData->secondMoveIndex);
}
else if (gMain.newKeys & DPAD_DOWN)
{
data[0] = 3;
- sub_81C1070(&data[0], 1, &gUnknown_0203CF1C->unk40C7);
+ sub_81C1070(&data[0], 1, &pssData->secondMoveIndex);
}
else if (gMain.newKeys & A_BUTTON)
{
- if (gUnknown_0203CF1C->unk40C6 == gUnknown_0203CF1C->unk40C7)
+ if (pssData->firstMoveIndex == pssData->secondMoveIndex)
{
sub_81C13B0(taskId, 0);
}
else
+ {
sub_81C13B0(taskId, 1);
+ }
}
else if (gMain.newKeys & B_BUTTON)
- sub_81C13B0(a, 0);
+ {
+ sub_81C13B0(taskId, 0);
+ }
}
}
-void sub_81C13B0(u8 taskId, u8 b)
+static void sub_81C13B0(u8 taskId, bool8 b)
{
u16 move;
+
PlaySE(SE_SELECT);
sub_81C4C84(0);
sub_81C4C60(18);
- if (b == 1)
+
+ if (b == TRUE)
{
- if (gUnknown_0203CF1C->unk40BD == 0)
+ if (!pssData->isBoxMon)
{
- struct Pokemon *why = gUnknown_0203CF1C->unk0->mon;
- sub_81C14BC(&why[gUnknown_0203CF1C->unk40BE], gUnknown_0203CF1C->unk40C6, gUnknown_0203CF1C->unk40C7);
+ struct Pokemon *why = pssData->monList.mons;
+ SwapMonMoves(&why[pssData->curMonIndex], pssData->firstMoveIndex, pssData->secondMoveIndex);
}
else
{
- struct BoxPokemon *why = gUnknown_0203CF1C->unk0->boxMon;
- sub_81C15EC(&why[gUnknown_0203CF1C->unk40BE], gUnknown_0203CF1C->unk40C6, gUnknown_0203CF1C->unk40C7);
+ struct BoxPokemon *why = pssData->monList.boxMons;
+ SwapBoxMonMoves(&why[pssData->curMonIndex], pssData->firstMoveIndex, pssData->secondMoveIndex);
}
- sub_81C0098(&gUnknown_0203CF1C->currentMon);
- sub_81C40A0(gUnknown_0203CF1C->unk40C6, gUnknown_0203CF1C->unk40C7);
- sub_81C4568(gUnknown_0203CF1C->unk40C6, gUnknown_0203CF1C->unk40C7);
- gUnknown_0203CF1C->unk40C6 = gUnknown_0203CF1C->unk40C7;
+ CopyMonToSummaryStruct(&pssData->currentMon);
+ sub_81C40A0(pssData->firstMoveIndex, pssData->secondMoveIndex);
+ sub_81C4568(pssData->firstMoveIndex, pssData->secondMoveIndex);
+ pssData->firstMoveIndex = pssData->secondMoveIndex;
}
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
- sub_81C3E9C(move);
+
+ move = pssData->summary.moves[pssData->firstMoveIndex];
+ PrintMoveDetails(move);
sub_81C240C(move);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = sub_81C0F44;
}
+static void SwapMonMoves(struct Pokemon *mon, u8 moveIndex1, u8 moveIndex2)
+{
+ struct PokeSummary* summary = &pssData->summary;
+
+ u16 move1 = summary->moves[moveIndex1];
+ u16 move2 = summary->moves[moveIndex2];
+ u8 move1pp = summary->pp[moveIndex1];
+ u8 move2pp = summary->pp[moveIndex2];
+ u8 ppBonuses = summary->ppBonuses;
+
+ // Calculate PP bonuses
+ u8 ppUpMask1 = gUnknown_08329D22[moveIndex1];
+ u8 ppBonusMove1 = (ppBonuses & ppUpMask1) >> (moveIndex1 * 2);
+ u8 ppUpMask2 = gUnknown_08329D22[moveIndex2];
+ u8 ppBonusMove2 = (ppBonuses & ppUpMask2) >> (moveIndex2 * 2);
+ ppBonuses &= ~ppUpMask1;
+ ppBonuses &= ~ppUpMask2;
+ ppBonuses |= (ppBonusMove1 << (moveIndex2 * 2)) + (ppBonusMove2 << (moveIndex1 * 2));
+
+ // Swap the moves
+ SetMonData(mon, MON_DATA_MOVE1 + moveIndex1, &move2);
+ SetMonData(mon, MON_DATA_MOVE1 + moveIndex2, &move1);
+ SetMonData(mon, MON_DATA_PP1 + moveIndex1, &move2pp);
+ SetMonData(mon, MON_DATA_PP1 + moveIndex2, &move1pp);
+ SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
+
+ summary->moves[moveIndex1] = move2;
+ summary->moves[moveIndex2] = move1;
+
+ summary->pp[moveIndex1] = move2pp;
+ summary->pp[moveIndex2] = move1pp;
+
+ summary->ppBonuses = ppBonuses;
+}
+
+static void SwapBoxMonMoves(struct BoxPokemon *mon, u8 moveIndex1, u8 moveIndex2)
+{
+ struct PokeSummary* summary = &pssData->summary;
+
+ u16 move1 = summary->moves[moveIndex1];
+ u16 move2 = summary->moves[moveIndex2];
+ u8 move1pp = summary->pp[moveIndex1];
+ u8 move2pp = summary->pp[moveIndex2];
+ u8 ppBonuses = summary->ppBonuses;
+
+ // Calculate PP bonuses
+ u8 ppUpMask1 = gUnknown_08329D22[moveIndex1];
+ u8 ppBonusMove1 = (ppBonuses & ppUpMask1) >> (moveIndex1 * 2);
+ u8 ppUpMask2 = gUnknown_08329D22[moveIndex2];
+ u8 ppBonusMove2 = (ppBonuses & ppUpMask2) >> (moveIndex2 * 2);
+ ppBonuses &= ~ppUpMask1;
+ ppBonuses &= ~ppUpMask2;
+ ppBonuses |= (ppBonusMove1 << (moveIndex2 * 2)) + (ppBonusMove2 << (moveIndex1 * 2));
-#ifdef NONMATCHING
-void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
-{
- u16 localMoveTo;
- u16 localMoveFrom;
- u8 localPpTo;
- u8 localPpFrom;
- u8 localPpBonuses;
- u16* moveFromPtr;
- u16* moveToPtr;
- u8* ppFromPtr;
- u8* ppToPtr;
- u8* ppBonusesPtr;
-
- moveFromPtr = &gUnknown_0203CF1C->summary.moves[swappingFromId];
- localMoveFrom = *moveFromPtr;
-
- moveToPtr = &gUnknown_0203CF1C->summary.moves[swappingToId];
- localMoveTo = *moveToPtr;
-
- ppFromPtr = &gUnknown_0203CF1C->summary.pp[swappingFromId];
- localPpFrom = *ppFromPtr;
-
- ppToPtr = &gUnknown_0203CF1C->summary.pp[swappingToId];
- localPpTo = *ppToPtr;
-
- ppBonusesPtr = &gUnknown_0203CF1C->summary.ppBonuses;
- localPpBonuses = *ppBonusesPtr;
-
-{
- u8 bitsFrom, bitsTo;
-
- bitsFrom = (localPpBonuses & gUnknown_08329D22[swappingFromId]) >> (swappingFromId << 1);
- bitsTo = (localPpBonuses & gUnknown_08329D22[swappingToId]) >> (swappingToId << 1);
-
-
- localPpBonuses &= ~(gUnknown_08329D22[swappingFromId]);
- localPpBonuses &= ~(gUnknown_08329D22[swappingToId]);
-
- localPpBonuses |= ((bitsFrom << (swappingToId << 1)) + (bitsTo << (swappingToId << 1)));
-}
-
- SetMonData(mon, swappingFromId + MON_DATA_MOVE1, &localMoveTo);
- SetMonData(mon, swappingToId + MON_DATA_MOVE1, &localMoveFrom);
-
- SetMonData(mon, swappingFromId + MON_DATA_PP1, &localPpTo);
- SetMonData(mon, swappingToId + MON_DATA_PP1, &localPpFrom);
-
- SetMonData(mon, MON_DATA_PP_BONUSES, &localPpBonuses);
-
- *moveFromPtr = localMoveTo;
- *moveToPtr = localMoveFrom;
-
- *ppFromPtr = localPpTo;
- *ppToPtr = localPpFrom;
-
- *ppBonusesPtr = localPpBonuses;
-}
-#else
-NAKED
-void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
-{
- 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, 0x28\n\
- adds r7, r0, 0\n\
- adds r4, r1, 0\n\
- adds r6, r2, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- lsls r6, 24\n\
- lsrs r6, 24\n\
- ldr r0, =gUnknown_0203CF1C\n\
- ldr r2, [r0]\n\
- lsls r0, r4, 1\n\
- mov r10, r0\n\
- adds r1, r2, 0\n\
- adds r1, 0x84\n\
- adds r0, r1, r0\n\
- str r0, [sp, 0x8]\n\
- ldrh r0, [r0]\n\
- mov r3, sp\n\
- adds r3, 0x2\n\
- str r3, [sp, 0x1C]\n\
- strh r0, [r3]\n\
- lsls r0, r6, 1\n\
- mov r9, r0\n\
- add r1, r9\n\
- str r1, [sp, 0xC]\n\
- ldrh r1, [r1]\n\
- mov r0, sp\n\
- strh r1, [r0]\n\
- adds r1, r2, 0\n\
- adds r1, 0x8C\n\
- adds r3, r1, r4\n\
- str r3, [sp, 0x10]\n\
- ldrb r0, [r3]\n\
- mov r3, sp\n\
- adds r3, 0x5\n\
- str r3, [sp, 0x24]\n\
- strb r0, [r3]\n\
- adds r1, r6\n\
- str r1, [sp, 0x14]\n\
- ldrb r0, [r1]\n\
- mov r1, sp\n\
- adds r1, 0x4\n\
- str r1, [sp, 0x20]\n\
- strb r0, [r1]\n\
- adds r2, 0xA4\n\
- str r2, [sp, 0x18]\n\
- ldrb r0, [r2]\n\
- mov r5, sp\n\
- adds r5, 0x6\n\
- strb r0, [r5]\n\
- ldr r1, =gUnknown_08329D22\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- mov r8, r0\n\
- ldrb r0, [r5]\n\
- adds r2, r0, 0\n\
- mov r3, r8\n\
- ands r2, r3\n\
- mov r3, r10\n\
- asrs r2, r3\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- adds r1, r6, r1\n\
- ldrb r1, [r1]\n\
- mov r12, r1\n\
- adds r1, r0, 0\n\
- mov r3, r12\n\
- ands r1, r3\n\
- mov r3, r9\n\
- asrs r1, r3\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r3, r8\n\
- bics r0, r3\n\
- strb r0, [r5]\n\
- ldrb r0, [r5]\n\
- mov r3, r12\n\
- bics r0, r3\n\
- strb r0, [r5]\n\
- mov r0, r9\n\
- lsls r2, r0\n\
- mov r3, r10\n\
- lsls r1, r3\n\
- adds r2, r1\n\
- ldrb r0, [r5]\n\
- orrs r0, r2\n\
- strb r0, [r5]\n\
- adds r1, r4, 0\n\
- adds r1, 0xD\n\
- adds r0, r7, 0\n\
- mov r2, sp\n\
- bl SetMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xD\n\
- adds r0, r7, 0\n\
- ldr r2, [sp, 0x1C]\n\
- bl SetMonData\n\
- adds r4, 0x11\n\
- adds r0, r7, 0\n\
- adds r1, r4, 0\n\
- ldr r2, [sp, 0x20]\n\
- bl SetMonData\n\
- adds r6, 0x11\n\
- adds r0, r7, 0\n\
- adds r1, r6, 0\n\
- ldr r2, [sp, 0x24]\n\
- bl SetMonData\n\
- adds r0, r7, 0\n\
- movs r1, 0x15\n\
- adds r2, r5, 0\n\
- bl SetMonData\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- ldr r1, [sp, 0x8]\n\
- strh r0, [r1]\n\
- ldr r3, [sp, 0x1C]\n\
- ldrh r0, [r3]\n\
- ldr r1, [sp, 0xC]\n\
- strh r0, [r1]\n\
- ldr r3, [sp, 0x20]\n\
- ldrb r0, [r3]\n\
- ldr r1, [sp, 0x10]\n\
- strb r0, [r1]\n\
- ldr r3, [sp, 0x24]\n\
- ldrb r0, [r3]\n\
- ldr r1, [sp, 0x14]\n\
- strb r0, [r1]\n\
- ldrb r0, [r5]\n\
- ldr r3, [sp, 0x18]\n\
- strb r0, [r3]\n\
- add sp, 0x28\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\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-#ifdef NONMATCHING
-void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
-{
- u16 localMoveTo;
- u16 localMoveFrom;
- u8 localPpTo;
- u8 localPpFrom;
- u8 localPpBonuses;
- u16* moveFromPtr;
- u16* moveToPtr;
- u8* ppFromPtr;
- u8* ppToPtr;
- u8* ppBonusesPtr;
-
- moveFromPtr = &gUnknown_0203CF1C->summary.moves[swappingFromId];
- localMoveFrom = *moveFromPtr;
-
- moveToPtr = &gUnknown_0203CF1C->summary.moves[swappingToId];
- localMoveTo = *moveToPtr;
-
- ppFromPtr = &gUnknown_0203CF1C->summary.pp[swappingFromId];
- localPpFrom = *ppFromPtr;
-
- ppToPtr = &gUnknown_0203CF1C->summary.pp[swappingToId];
- localPpTo = *ppToPtr;
-
- ppBonusesPtr = &gUnknown_0203CF1C->summary.ppBonuses;
- localPpBonuses = *ppBonusesPtr;
-
-{
- u8 bitsFrom, bitsTo;
-
- bitsFrom = (localPpBonuses & gUnknown_08329D22[swappingFromId]) >> (swappingFromId << 1);
- bitsTo = (localPpBonuses & gUnknown_08329D22[swappingToId]) >> (swappingToId << 1);
-
-
- localPpBonuses &= ~(gUnknown_08329D22[swappingFromId]);
- localPpBonuses &= ~(gUnknown_08329D22[swappingToId]);
-
- localPpBonuses |= ((bitsFrom << (swappingToId << 1)) + (bitsTo << (swappingToId << 1)));
-}
-
- SetBoxMonData(mon, swappingFromId + MON_DATA_MOVE1, &localMoveTo);
- SetBoxMonData(mon, swappingToId + MON_DATA_MOVE1, &localMoveFrom);
-
- SetBoxMonData(mon, swappingFromId + MON_DATA_PP1, &localPpTo);
- SetBoxMonData(mon, swappingToId + MON_DATA_PP1, &localPpFrom);
-
- SetBoxMonData(mon, MON_DATA_PP_BONUSES, &localPpBonuses);
-
- *moveFromPtr = localMoveTo;
- *moveToPtr = localMoveFrom;
-
- *ppFromPtr = localPpTo;
- *ppToPtr = localPpFrom;
-
- *ppBonusesPtr = localPpBonuses;
-}
-#else
-NAKED
-void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
-{
- 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, 0x28\n\
- adds r7, r0, 0\n\
- adds r4, r1, 0\n\
- adds r6, r2, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- lsls r6, 24\n\
- lsrs r6, 24\n\
- ldr r0, =gUnknown_0203CF1C\n\
- ldr r2, [r0]\n\
- lsls r0, r4, 1\n\
- mov r10, r0\n\
- adds r1, r2, 0\n\
- adds r1, 0x84\n\
- adds r0, r1, r0\n\
- str r0, [sp, 0x8]\n\
- ldrh r0, [r0]\n\
- mov r3, sp\n\
- adds r3, 0x2\n\
- str r3, [sp, 0x1C]\n\
- strh r0, [r3]\n\
- lsls r0, r6, 1\n\
- mov r9, r0\n\
- add r1, r9\n\
- str r1, [sp, 0xC]\n\
- ldrh r1, [r1]\n\
- mov r0, sp\n\
- strh r1, [r0]\n\
- adds r1, r2, 0\n\
- adds r1, 0x8C\n\
- adds r3, r1, r4\n\
- str r3, [sp, 0x10]\n\
- ldrb r0, [r3]\n\
- mov r3, sp\n\
- adds r3, 0x5\n\
- str r3, [sp, 0x24]\n\
- strb r0, [r3]\n\
- adds r1, r6\n\
- str r1, [sp, 0x14]\n\
- ldrb r0, [r1]\n\
- mov r1, sp\n\
- adds r1, 0x4\n\
- str r1, [sp, 0x20]\n\
- strb r0, [r1]\n\
- adds r2, 0xA4\n\
- str r2, [sp, 0x18]\n\
- ldrb r0, [r2]\n\
- mov r5, sp\n\
- adds r5, 0x6\n\
- strb r0, [r5]\n\
- ldr r1, =gUnknown_08329D22\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- mov r8, r0\n\
- ldrb r0, [r5]\n\
- adds r2, r0, 0\n\
- mov r3, r8\n\
- ands r2, r3\n\
- mov r3, r10\n\
- asrs r2, r3\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- adds r1, r6, r1\n\
- ldrb r1, [r1]\n\
- mov r12, r1\n\
- adds r1, r0, 0\n\
- mov r3, r12\n\
- ands r1, r3\n\
- mov r3, r9\n\
- asrs r1, r3\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r3, r8\n\
- bics r0, r3\n\
- strb r0, [r5]\n\
- ldrb r0, [r5]\n\
- mov r3, r12\n\
- bics r0, r3\n\
- strb r0, [r5]\n\
- mov r0, r9\n\
- lsls r2, r0\n\
- mov r3, r10\n\
- lsls r1, r3\n\
- adds r2, r1\n\
- ldrb r0, [r5]\n\
- orrs r0, r2\n\
- strb r0, [r5]\n\
- adds r1, r4, 0\n\
- adds r1, 0xD\n\
- adds r0, r7, 0\n\
- mov r2, sp\n\
- bl SetBoxMonData\n\
- adds r1, r6, 0\n\
- adds r1, 0xD\n\
- adds r0, r7, 0\n\
- ldr r2, [sp, 0x1C]\n\
- bl SetBoxMonData\n\
- adds r4, 0x11\n\
- adds r0, r7, 0\n\
- adds r1, r4, 0\n\
- ldr r2, [sp, 0x20]\n\
- bl SetBoxMonData\n\
- adds r6, 0x11\n\
- adds r0, r7, 0\n\
- adds r1, r6, 0\n\
- ldr r2, [sp, 0x24]\n\
- bl SetBoxMonData\n\
- adds r0, r7, 0\n\
- movs r1, 0x15\n\
- adds r2, r5, 0\n\
- bl SetBoxMonData\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- ldr r1, [sp, 0x8]\n\
- strh r0, [r1]\n\
- ldr r3, [sp, 0x1C]\n\
- ldrh r0, [r3]\n\
- ldr r1, [sp, 0xC]\n\
- strh r0, [r1]\n\
- ldr r3, [sp, 0x20]\n\
- ldrb r0, [r3]\n\
- ldr r1, [sp, 0x10]\n\
- strb r0, [r1]\n\
- ldr r3, [sp, 0x24]\n\
- ldrb r0, [r3]\n\
- ldr r1, [sp, 0x14]\n\
- strb r0, [r1]\n\
- ldrb r0, [r5]\n\
- ldr r3, [sp, 0x18]\n\
- strb r0, [r3]\n\
- add sp, 0x28\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\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C171C(u8 taskId)
+ // Swap the moves
+ SetBoxMonData(mon, MON_DATA_MOVE1 + moveIndex1, &move2);
+ SetBoxMonData(mon, MON_DATA_MOVE1 + moveIndex2, &move1);
+ SetBoxMonData(mon, MON_DATA_PP1 + moveIndex1, &move2pp);
+ SetBoxMonData(mon, MON_DATA_PP1 + moveIndex2, &move1pp);
+ SetBoxMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
+
+ summary->moves[moveIndex1] = move2;
+ summary->moves[moveIndex2] = move1;
+
+ summary->pp[moveIndex1] = move2pp;
+ summary->pp[moveIndex2] = move1pp;
+
+ summary->ppBonuses = ppBonuses;
+}
+
+static void sub_81C171C(u8 taskId)
{
sub_81C44F0();
sub_81C4AF8(8);
gTasks[taskId].func = sub_81C174C;
}
-void sub_81C174C(u8 taskId)
+static void sub_81C174C(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -1792,12 +1814,12 @@ void sub_81C174C(u8 taskId)
if (gMain.newKeys & DPAD_UP)
{
data[0] = 4;
- sub_81C1070(data, -1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(data, -1, &pssData->firstMoveIndex);
}
else if (gMain.newKeys & DPAD_DOWN)
{
data[0] = 4;
- sub_81C1070(data, 1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(data, 1, &pssData->firstMoveIndex);
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
{
@@ -1813,7 +1835,7 @@ void sub_81C174C(u8 taskId)
{
sub_81C48F0();
PlaySE(SE_SELECT);
- gUnknown_0203CF21 = gUnknown_0203CF1C->unk40C6;
+ gUnknown_0203CF21 = pssData->firstMoveIndex;
gSpecialVar_0x8005 = gUnknown_0203CF21;
sub_81C044C(taskId);
}
@@ -1836,26 +1858,26 @@ void sub_81C174C(u8 taskId)
}
}
-bool8 sub_81C18A8()
+static bool8 sub_81C18A8(void)
{
- if (gUnknown_0203CF1C->unk40C6 == 4 || gUnknown_0203CF1C->unk40C4 == 0 || sub_81B6D14(gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6]) != 1)
+ if (pssData->firstMoveIndex == MAX_MON_MOVES || pssData->newMove == MOVE_NONE || sub_81B6D14(pssData->summary.moves[pssData->firstMoveIndex]) != 1)
return TRUE;
else
return FALSE;
}
-void sub_81C18F4(u8 taskId)
+static void sub_81C18F4(u8 taskId)
{
ClearWindowTilemap(14);
ClearWindowTilemap(15);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C1DA4(0, 3);
sub_81C1EFC(0, 3, 0);
- sub_81C4154();
+ PrintHMMovesCantBeForgotten();
gTasks[taskId].func = sub_81C1940;
}
-void sub_81C1940(u8 taskId)
+static void sub_81C1940(u8 taskId)
{
s16* data = gTasks[taskId].data;
u16 move;
@@ -1865,7 +1887,7 @@ void sub_81C1940(u8 taskId)
{
data[1] = 1;
data[0] = 4;
- sub_81C1070(&data[0], -1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(&data[0], -1, &pssData->firstMoveIndex);
data[1] = 0;
gTasks[taskId].func = sub_81C174C;
}
@@ -1873,19 +1895,18 @@ void sub_81C1940(u8 taskId)
{
data[1] = 1;
data[0] = 4;
- sub_81C1070(&data[0], 1, &gUnknown_0203CF1C->unk40C6);
+ sub_81C1070(&data[0], 1, &pssData->firstMoveIndex);
data[1] = 0;
gTasks[taskId].func = sub_81C174C;
}
else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
{
- if (gUnknown_0203CF1C->unk40C0 != 2)
+ if (pssData->currPageIndex != 2)
{
-
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
ClearWindowTilemap(13);
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
+ move = pssData->summary.moves[pssData->firstMoveIndex];
gTasks[taskId].func = sub_81C174C;
sub_81C0A8C(taskId, -1);
sub_81C1DA4(9, -2);
@@ -1894,12 +1915,12 @@ void sub_81C1940(u8 taskId)
}
else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
{
- if (gUnknown_0203CF1C->unk40C0 != 3)
+ if (pssData->currPageIndex != 3)
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
ClearWindowTilemap(13);
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
+ move = pssData->summary.moves[pssData->firstMoveIndex];
gTasks[taskId].func = sub_81C174C;
sub_81C0A8C(taskId, 1);
sub_81C1DA4(9, -2);
@@ -1909,10 +1930,10 @@ void sub_81C1940(u8 taskId)
else if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
ClearWindowTilemap(19);
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
ClearWindowTilemap(13);
- move = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
- sub_81C3E9C(move);
+ move = pssData->summary.moves[pssData->firstMoveIndex];
+ PrintMoveDetails(move);
schedule_bg_copy_tilemap_to_vram(0);
sub_81C1DA4(9, -3);
sub_81C1EFC(9, -3, move);
@@ -1921,69 +1942,71 @@ void sub_81C1940(u8 taskId)
}
}
-u8 sub_81C1B94()
+u8 sub_81C1B94(void)
{
return gUnknown_0203CF21;
}
-void sub_81C1BA0()
+static void sub_81C1BA0(void)
{
u16 *alloced = Alloc(32);
u8 i;
+
for (i = 0; i < 4; i++)
{
- u8 j = i << 1;
- if (i < gUnknown_0203CF1C->unk40C1)
+ u8 j = i * 2;
+
+ if (i < pssData->minPageIndex)
{
- alloced[j+0] = 0x40;
- alloced[j+1] = 0x40;
- alloced[j+8] = 0x50;
- alloced[j+9] = 0x50;
+ alloced[j + 0] = 0x40;
+ alloced[j + 1] = 0x40;
+ alloced[j + 8] = 0x50;
+ alloced[j + 9] = 0x50;
}
- else if (i > gUnknown_0203CF1C->unk40C2)
+ else if (i > pssData->maxPageIndex)
{
- alloced[j+0] = 0x4A;
- alloced[j+1] = 0x4A;
- alloced[j+8] = 0x5A;
- alloced[j+9] = 0x5A;
+ alloced[j + 0] = 0x4A;
+ alloced[j + 1] = 0x4A;
+ alloced[j + 8] = 0x5A;
+ alloced[j + 9] = 0x5A;
}
- else if (i < gUnknown_0203CF1C->unk40C0)
+ else if (i < pssData->currPageIndex)
{
- alloced[j+0] = 0x46;
- alloced[j+1] = 0x47;
- alloced[j+8] = 0x56;
- alloced[j+9] = 0x57;
+ alloced[j + 0] = 0x46;
+ alloced[j + 1] = 0x47;
+ alloced[j + 8] = 0x56;
+ alloced[j + 9] = 0x57;
}
- else if (i == gUnknown_0203CF1C->unk40C0)
+ else if (i == pssData->currPageIndex)
{
- if (i != gUnknown_0203CF1C->unk40C2)
+ if (i != pssData->maxPageIndex)
{
- alloced[j+0] = 0x41;
- alloced[j+1] = 0x42;
- alloced[j+8] = 0x51;
- alloced[j+9] = 0x52;
+ alloced[j + 0] = 0x41;
+ alloced[j + 1] = 0x42;
+ alloced[j + 8] = 0x51;
+ alloced[j + 9] = 0x52;
}
else
{
- alloced[j+0] = 0x4B;
- alloced[j+1] = 0x4C;
- alloced[j+8] = 0x5B;
- alloced[j+9] = 0x5C;
+ alloced[j + 0] = 0x4B;
+ alloced[j + 1] = 0x4C;
+ alloced[j + 8] = 0x5B;
+ alloced[j + 9] = 0x5C;
}
}
- else if (i != gUnknown_0203CF1C->unk40C2)
+ else if (i != pssData->maxPageIndex)
{
- alloced[j+0] = 0x43;
- alloced[j+1] = 0x44;
- alloced[j+8] = 0x53;
- alloced[j+9] = 0x54;
+ alloced[j + 0] = 0x43;
+ alloced[j + 1] = 0x44;
+ alloced[j + 8] = 0x53;
+ alloced[j + 9] = 0x54;
}
else
{
- alloced[j+0] = 0x48;
- alloced[j+1] = 0x49;
- alloced[j+8] = 0x58;
- alloced[j+9] = 0x59;
+ alloced[j + 0] = 0x48;
+ alloced[j + 1] = 0x49;
+ alloced[j + 8] = 0x58;
+ alloced[j + 9] = 0x59;
}
}
CopyToBgTilemapBufferRect_ChangePalette(3, alloced, 11, 0, 8, 2, 16);
@@ -1991,181 +2014,42 @@ void sub_81C1BA0()
Free(alloced);
}
-struct UnkStruct_61CC04
-{
- u8 *ptr;
- u8 field_4;
- u8 field_5;
- u8 field_6;
- u8 field_7;
- u8 field_8;
- u8 field_9;
-};
-
-#ifdef NONMATCHING
-void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
+static void sub_81C1CB0(const struct UnkStruct_61CC04 *unkStruct, u16 *dest, u8 c, bool8 d)
{
- u8 *alloced = Alloc(a->field_6 * (a->field_7 << 1));
- CpuFill16(a->field_4, alloced, a->field_7*a->field_6);
- if (a->field_6 != c)
+ u16 i;
+ u16 *alloced = Alloc(unkStruct->field_6 * 2 * unkStruct->field_7);
+ CpuFill16(unkStruct->field_4, alloced, unkStruct->field_6 * 2 * unkStruct->field_7);
+ if (unkStruct->field_6 != c)
{
if (!d)
{
- for (d;d < a->field_7; d++)
+ for (i = 0; i < unkStruct->field_7; i++)
{
- CpuCopy16(&a->ptr + ((c + a->field_6*d)), alloced + ((a->field_6*d) << 1), (a->field_6 - c) * 2);
+ CpuCopy16(&unkStruct->ptr[c + unkStruct->field_6 * i], &alloced[unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2);
}
}
else
{
- for (d = 0;d < a->field_7; d++)
+ for (i = 0; i < unkStruct->field_7; i++)
{
- CpuCopy16(&a->ptr + (a->field_6*d), alloced + ((c + a->field_6*d) << 1), (a->field_6 - c) * 2);
+ CpuCopy16(&unkStruct->ptr[unkStruct->field_6 * i], &alloced[c + unkStruct->field_6 * i], (unkStruct->field_6 - c) * 2);
}
}
}
- d = 0;
- while (d < a->field_7)
+ for (i = 0; i < unkStruct->field_7; i++)
{
- CpuCopy16(alloced + ((a->field_6*d) << 1), b + ((((a->field_9 + d) << 5) + a->field_8) << 1), a->field_6 * 2);
- d++;
+ CpuCopy16(&alloced[unkStruct->field_6 * i], &dest[(unkStruct->field_9 + i) * 32 + unkStruct->field_8], unkStruct->field_6 * 2);
}
Free(alloced);
}
-#else
-NAKED
-void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0x4\n\
- adds r4, r0, 0\n\
- mov r8, r1\n\
- lsls r2, 24\n\
- lsrs r6, r2, 24\n\
- lsls r3, 24\n\
- lsrs r5, r3, 24\n\
- ldrb r1, [r4, 0x6]\n\
- ldrb r0, [r4, 0x7]\n\
- lsls r0, 1\n\
- muls r0, r1\n\
- bl Alloc\n\
- adds r7, r0, 0\n\
- mov r1, sp\n\
- ldrh r0, [r4, 0x4]\n\
- strh r0, [r1]\n\
- ldrb r1, [r4, 0x7]\n\
- ldrb r0, [r4, 0x6]\n\
- adds r2, r1, 0\n\
- muls r2, r0\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- orrs r2, r0\n\
- mov r0, sp\n\
- adds r1, r7, 0\n\
- bl CpuSet\n\
- ldrb r0, [r4, 0x6]\n\
- cmp r0, r6\n\
- beq _081C1D60\n\
- cmp r5, 0\n\
- bne _081C1D30\n\
- movs r5, 0\n\
- ldrb r0, [r4, 0x7]\n\
- cmp r5, r0\n\
- bcs _081C1D60\n\
-_081C1D00:\n\
- ldrb r2, [r4, 0x6]\n\
- adds r1, r2, 0\n\
- muls r1, r5\n\
- adds r3, r6, r1\n\
- lsls r3, 1\n\
- ldr r0, [r4]\n\
- adds r0, r3\n\
- lsls r1, 1\n\
- adds r1, r7, r1\n\
- subs r2, r6\n\
- ldr r3, =0x001fffff\n\
- ands r2, r3\n\
- bl CpuSet\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldrb r3, [r4, 0x7]\n\
- cmp r5, r3\n\
- bcc _081C1D00\n\
- b _081C1D60\n\
- .pool\n\
-_081C1D30:\n\
- movs r5, 0\n\
- ldrb r0, [r4, 0x7]\n\
- cmp r5, r0\n\
- bcs _081C1D60\n\
-_081C1D38:\n\
- ldrb r2, [r4, 0x6]\n\
- adds r1, r2, 0\n\
- muls r1, r5\n\
- lsls r3, r1, 1\n\
- ldr r0, [r4]\n\
- adds r0, r3\n\
- adds r1, r6, r1\n\
- lsls r1, 1\n\
- adds r1, r7, r1\n\
- subs r2, r6\n\
- ldr r3, =0x001fffff\n\
- ands r2, r3\n\
- bl CpuSet\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- ldrb r3, [r4, 0x7]\n\
- cmp r5, r3\n\
- bcc _081C1D38\n\
-_081C1D60:\n\
- movs r5, 0\n\
- b _081C1D8A\n\
- .pool\n\
-_081C1D68:\n\
- ldrb r2, [r4, 0x6]\n\
- adds r0, r2, 0\n\
- muls r0, r5\n\
- lsls r0, 1\n\
- adds r0, r7, r0\n\
- ldrb r1, [r4, 0x9]\n\
- adds r1, r5\n\
- lsls r1, 5\n\
- ldrb r3, [r4, 0x8]\n\
- adds r1, r3\n\
- lsls r1, 1\n\
- add r1, r8\n\
- bl CpuSet\n\
- adds r0, r5, 0x1\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
-_081C1D8A:\n\
- ldrb r0, [r4, 0x7]\n\
- cmp r5, r0\n\
- bcc _081C1D68\n\
- adds r0, r7, 0\n\
- bl Free\n\
- add sp, 0x4\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C1DA4(u16 a, s16 b)
+
+static void sub_81C1DA4(u16 a, s16 b)
{
if (b > gUnknown_0861CC04.field_6)
b = gUnknown_0861CC04.field_6;
if (b == 0 || b == gUnknown_0861CC04.field_6)
{
- sub_81C1CB0(&gUnknown_0861CC04, &gUnknown_0203CF1C->unkTilemap2[0], b, 1);
+ sub_81C1CB0(&gUnknown_0861CC04, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], b, 1);
}
else
{
@@ -2179,7 +2063,7 @@ void sub_81C1DA4(u16 a, s16 b)
}
}
-void sub_81C1E20(u8 taskId)
+static void sub_81C1E20(u8 taskId)
{
s16 *data = gTasks[taskId].data;
data[1] += data[0];
@@ -2191,18 +2075,17 @@ void sub_81C1E20(u8 taskId)
{
data[1] = gUnknown_0861CC04.field_6;
}
- sub_81C1CB0(&gUnknown_0861CC04, &gUnknown_0203CF1C->unkTilemap2[0], data[1], 1);
+ sub_81C1CB0(&gUnknown_0861CC04, pssData->bgTilemapBuffers[PSS_PAGE_BATTLE_MOVES][0], data[1], 1);
if (data[1] <= 0 || data[1] >= gUnknown_0861CC04.field_6)
{
if (data[0] < 0)
{
- if (gUnknown_0203CF1C->unk40C0 == 2)
+ if (pssData->currPageIndex == 2)
PutWindowTilemap(14);
-
}
else
{
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
PutWindowTilemap(13);
PutWindowTilemap(19);
}
@@ -2213,12 +2096,12 @@ void sub_81C1E20(u8 taskId)
schedule_bg_copy_tilemap_to_vram(2);
}
-void sub_81C1EFC(u16 a, s16 b, u16 move)
+static void sub_81C1EFC(u16 a, s16 b, u16 move)
{
if (b > gUnknown_0861CC10.field_6)
b = gUnknown_0861CC10.field_6;
if (b == 0 || b == gUnknown_0861CC10.field_6)
- sub_81C1CB0(&gUnknown_0861CC10, &gUnknown_0203CF1C->unkTilemap3[0], b, 1);
+ sub_81C1CB0(&gUnknown_0861CC10, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], b, 1);
else
{
u8 taskId = FindTaskIdByFunc(sub_81C1F80);
@@ -2230,7 +2113,7 @@ void sub_81C1EFC(u16 a, s16 b, u16 move)
}
}
-void sub_81C1F80(u8 taskId)
+static void sub_81C1F80(u8 taskId)
{
s16 *data = gTasks[taskId].data;
data[1] += data[0];
@@ -2242,18 +2125,18 @@ void sub_81C1F80(u8 taskId)
{
data[1] = gUnknown_0861CC10.field_6;
}
- sub_81C1CB0(&gUnknown_0861CC10, &gUnknown_0203CF1C->unkTilemap3[0], data[1], 1);
+ sub_81C1CB0(&gUnknown_0861CC10, pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][0], data[1], 1);
if (data[1] <= 0 || data[1] >= gUnknown_0861CC10.field_6)
{
if (data[0] < 0)
{
- if (gUnknown_0203CF1C->unk40C0 == 3 && FuncIsActiveTask(sub_81C0B8C) == 0)
+ if (pssData->currPageIndex == 3 && FuncIsActiveTask(sub_81C0B8C) == 0)
PutWindowTilemap(15);
sub_81C240C(data[2]);
}
else
{
- if (!gSprites[gUnknown_0203CF1C->unk40D3[2]].invisible)
+ if (!gSprites[pssData->spriteIds[2]].invisible)
{
PutWindowTilemap(13);
}
@@ -2266,14 +2149,14 @@ void sub_81C1F80(u8 taskId)
schedule_bg_copy_tilemap_to_vram(2);
}
-void sub_81C2074(u16 a, s16 b)
+static void sub_81C2074(u16 a, s16 b)
{
if (b > gUnknown_0861CBEC.field_6)
b = gUnknown_0861CBEC.field_6;
if (b == 0 || b == gUnknown_0861CBEC.field_6)
{
- sub_81C1CB0(&gUnknown_0861CBEC, &gUnknown_0203CF1C->unkTilemap0[0], b, 0);
- sub_81C1CB0(&gUnknown_0861CBF8, &gUnknown_0203CF1C->unkTilemap0[0], b, 0);
+ sub_81C1CB0(&gUnknown_0861CBEC, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0], b, 0);
+ sub_81C1CB0(&gUnknown_0861CBF8, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0], b, 0);
}
else
{
@@ -2283,7 +2166,7 @@ void sub_81C2074(u16 a, s16 b)
}
}
-void sub_81C20F0(u8 taskId)
+static void sub_81C20F0(u8 taskId)
{
s16 *data = gTasks[taskId].data;
data[1] += data[0];
@@ -2291,14 +2174,14 @@ void sub_81C20F0(u8 taskId)
data[1] = 0;
else if (data[1] > gUnknown_0861CBEC.field_6)
data[1] = gUnknown_0861CBEC.field_6;
- sub_81C1CB0(&gUnknown_0861CBEC, &gUnknown_0203CF1C->unkTilemap0[0], data[1], 0);
- sub_81C1CB0(&gUnknown_0861CBF8, &gUnknown_0203CF1C->unkTilemap0[0], data[1], 0);
+ sub_81C1CB0(&gUnknown_0861CBEC, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], 0);
+ sub_81C1CB0(&gUnknown_0861CBF8, pssData->bgTilemapBuffers[PSS_PAGE_INFO][0], data[1], 0);
schedule_bg_copy_tilemap_to_vram(3);
if (data[1] <= 0 || data[1] >= gUnknown_0861CBEC.field_6)
{
if (data[0] < 0)
{
- sub_81C4A88();
+ CreateSetStatusSprite();
PutWindowTilemap(13);
schedule_bg_copy_tilemap_to_vram(0);
}
@@ -2306,143 +2189,62 @@ void sub_81C20F0(u8 taskId)
}
}
-// somebody send help this is a complete fucking mess
-#ifdef NONMATCHING
-void sub_81C2194(u16 *a, u16 b, u8 c)
+static void sub_81C2194(u16 *output, u16 palette, bool8 c)
{
u16 i;
- int var;
- b *= 0x1000;
+ u32 var;
+
+ palette *= 0x1000;
var = 0x56A;
if (c == 0)
{
for (i = 0; i < 20; i++)
{
- a[(i + var) << 1] = gSummaryScreenWindow_Tilemap[i] + b;
- a[((i + var) << 1) + 0x40] = gSummaryScreenWindow_Tilemap[i] + b;
- a[((i + var) << 1) + 0x80] = gSummaryScreenWindow_Tilemap[i + 20] + b;
+ output[var + i] = gSummaryScreenWindow_Tilemap[i] + palette;
+ output[var + i + 0x20] = gSummaryScreenWindow_Tilemap[i] + palette;
+ output[var + i + 0x40] = gSummaryScreenWindow_Tilemap[i + 20] + palette;
}
}
else
{
for (i = 0; i < 20; i++)
{
- a[(i + var)] = gSummaryScreenWindow_Tilemap[i + 20] + b;
- a[((i + var)) + 0x40] = gSummaryScreenWindow_Tilemap[i + 40] + b;
- a[((i + var)) + 0x80] = gSummaryScreenWindow_Tilemap[i + 40] + b;
- }
- }
-}
-#else
-NAKED
-void sub_81C2194(u16 *a, u16 b, u8 c)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- adds r6, r0, 0\n\
- lsls r2, 24\n\
- lsls r1, 28\n\
- lsrs r4, r1, 16\n\
- ldr r7, =0x0000056a\n\
- cmp r2, 0\n\
- bne _081C21E4\n\
- movs r3, 0\n\
- ldr r5, =gSummaryScreenWindow_Tilemap\n\
-_081C21A8:\n\
- adds r2, r7, r3\n\
- lsls r2, 1\n\
- adds r2, r6\n\
- lsls r0, r3, 1\n\
- adds r0, r5\n\
- ldrh r1, [r0]\n\
- adds r1, r4, r1\n\
- strh r1, [r2]\n\
- adds r0, r2, 0\n\
- adds r0, 0x40\n\
- strh r1, [r0]\n\
- adds r2, 0x80\n\
- adds r0, r3, 0\n\
- adds r0, 0x14\n\
- lsls r0, 1\n\
- adds r0, r5\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r2]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x13\n\
- bls _081C21A8\n\
- b _081C221C\n\
- .pool\n\
-_081C21E4:\n\
- movs r3, 0\n\
- ldr r5, =gSummaryScreenWindow_Tilemap\n\
-_081C21E8:\n\
- adds r1, r7, r3\n\
- lsls r1, 1\n\
- adds r1, r6\n\
- adds r0, r3, 0\n\
- adds r0, 0x14\n\
- lsls r0, 1\n\
- adds r0, r5\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r1]\n\
- adds r2, r1, 0\n\
- adds r2, 0x40\n\
- adds r0, r3, 0\n\
- adds r0, 0x28\n\
- lsls r0, 1\n\
- adds r0, r5\n\
- ldrh r0, [r0]\n\
- adds r0, r4, r0\n\
- strh r0, [r2]\n\
- adds r1, 0x80\n\
- strh r0, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x13\n\
- bls _081C21E8\n\
-_081C221C:\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C2228(struct Pokemon *mon)
+ output[var + i] = gSummaryScreenWindow_Tilemap[i + 20] + palette;
+ output[var + i + 0x20] = gSummaryScreenWindow_Tilemap[i + 40] + palette;
+ output[var + i + 0x40] = gSummaryScreenWindow_Tilemap[i + 40] + palette;
+ }
+ }
+}
+
+static void sub_81C2228(struct Pokemon *mon)
{
if (!CheckPartyPokerus(mon, 0) && CheckPartyHasHadPokerus(mon, 0))
{
- gUnknown_0203CF1C->unkTilemap0[0x223] = 0x2C;
- gUnknown_0203CF1C->unkTilemap0_1[0x223] = 0x2C;
+ pssData->bgTilemapBuffers[PSS_PAGE_INFO][0][0x223] = 0x2C;
+ pssData->bgTilemapBuffers[PSS_PAGE_INFO][1][0x223] = 0x2C;
}
else
{
- gUnknown_0203CF1C->unkTilemap0[0x223] = 0x81A;
- gUnknown_0203CF1C->unkTilemap0_1[0x223] = 0x81A;
+ pssData->bgTilemapBuffers[PSS_PAGE_INFO][0][0x223] = 0x81A;
+ pssData->bgTilemapBuffers[PSS_PAGE_INFO][1][0x223] = 0x81A;
}
schedule_bg_copy_tilemap_to_vram(3);
}
-void sub_81C228C(u8 a)
+static void sub_81C228C(bool8 isMonShiny)
{
- if (a == 0)
+ if (!isMonShiny)
sub_8199C30(3, 1, 4, 8, 8, 0);
else
sub_8199C30(3, 1, 4, 8, 8, 5);
schedule_bg_copy_tilemap_to_vram(3);
}
-void sub_81C22CC(struct Pokemon *unused)
+static void sub_81C22CC(struct Pokemon *unused)
{
s64 r6r7;
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
u16 *r9;
u8 i;
@@ -2460,7 +2262,7 @@ void sub_81C22CC(struct Pokemon *unused)
r6r7 = 0;
}
- r9 = &gUnknown_0203CF1C->unkTilemap1_1[0x255];
+ r9 = &pssData->bgTilemapBuffers[PSS_PAGE_SKILLS][1][0x255];
for (i = 0; i < 8; i++)
{
if (r6r7 > 7)
@@ -2472,221 +2274,237 @@ void sub_81C22CC(struct Pokemon *unused)
r6r7 = 0;
}
- if (GetBgTilemapBuffer(1) == gUnknown_0203CF1C->unkTilemap1)
+ if (GetBgTilemapBuffer(1) == pssData->bgTilemapBuffers[PSS_PAGE_SKILLS][0])
schedule_bg_copy_tilemap_to_vram(1);
else
schedule_bg_copy_tilemap_to_vram(2);
}
-void sub_81C240C(u16 move)
+static void sub_81C240C(u16 move)
{
- u16* r5 = &gUnknown_0203CF1C->unkTilemap3_1[0];
+ u16 *tilemap = pssData->bgTilemapBuffers[PSS_PAGE_CONTEST_MOVES][1];
u8 i;
- u8 r4;
+ u8 effectValue;
+
if (move != MOVE_NONE)
{
- r4 = gContestEffects[gContestMoves[move].effect].appeal;
- if (r4 != 0xFF)
- r4 /= 10;
- for (i = 0;i < 8; i++)
+ effectValue = gContestEffects[gContestMoves[move].effect].appeal;
+
+ if (effectValue != 0xFF)
+ effectValue /= 10;
+
+ for (i = 0; i < 8; i++)
{
- if (r4 != 0xFF && i < r4)
+ if (effectValue != 0xFF && i < effectValue)
{
- r5[((i>>2)*32)+(i&3)+0x1E6] = 0x103A;
+ tilemap[(i / 4 * 32) + (i & 3) + 0x1E6] = 0x103A;
}
else
- r5[((i>>2)*32)+(i&3)+0x1E6] = 0x1039;
+ {
+ tilemap[(i / 4 * 32) + (i & 3) + 0x1E6] = 0x1039;
+ }
}
- r4 = gContestEffects[gContestMoves[move].effect].jam;
- if (r4 != 0xFF)
- r4 /= 10;
- for (i = 0;i < 8; i++)
+
+ effectValue = gContestEffects[gContestMoves[move].effect].jam;
+
+ if (effectValue != 0xFF)
+ effectValue /= 10;
+
+ for (i = 0; i < 8; i++)
{
- if (r4 != 0xFF && i < r4)
+ if (effectValue != 0xFF && i < effectValue)
{
- r5[((i>>2)*32)+(i&3)+0x226] = 0x103C;
+ tilemap[(i / 4 * 32) + (i & 3) + 0x226] = 0x103C;
}
else
- r5[((i>>2)*32)+(i&3)+0x226] = 0x103D;
+ {
+ tilemap[(i / 4 * 32) + (i & 3) + 0x226] = 0x103D;
+ }
}
}
}
-void sub_81C2524()
+static void sub_81C2524(void)
{
- if (gUnknown_0203CF1C->summary.isEgg != 0)
+ if (pssData->summary.isEgg)
ChangeBgX(3, 0x10000, 0);
else
ChangeBgX(3, 0, 0);
}
-void sub_81C2554()
+static void sub_81C2554(void)
{
u8 i;
- InitWindows(&gUnknown_0861CC24);
+ InitWindows(gUnknown_0861CC24);
DeactivateAllTextPrinters();
+
for (i = 0; i < 20; i++)
+ {
FillWindowPixelBuffer(i, 0);
+ }
for (i = 0; i < 8; i++)
- gUnknown_0203CF1C->unk40CB[i] |= 0xFF;
+ {
+ pssData->windowIds[i] = 0xFF;
+ }
}
-void sub_81C25A4(u8 a, const u8 *b, u8 c, u8 d, u8 e, u8 f)
+static void SummaryScreen_PrintTextOnWindow(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId)
{
- AddTextPrinterParameterized2(a, 1, c, d, 0, e, gUnknown_0861CD2C[f], 0, b);
+ AddTextPrinterParameterized2(windowId, 1, x, y, 0, lineSpacing, sTextColors_861CD2C[colorId], 0, string);
}
-void sub_81C25E8()
+static void sub_81C25E8(void)
{
FillWindowPixelBuffer(17, 0);
FillWindowPixelBuffer(18, 0);
FillWindowPixelBuffer(19, 0);
- if (gUnknown_0203CF1C->summary.isEgg == 0)
+ if (!pssData->summary.isEgg)
sub_81C2628();
else
sub_81C2794();
schedule_bg_copy_tilemap_to_vram(0);
}
-void sub_81C2628()
+static void sub_81C2628(void)
{
u8 strArray[16];
- struct Pokemon *mon = &gUnknown_0203CF1C->currentMon;
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
- u16 r5 = SpeciesToPokedexNum(summary->species);
- if (r5 != 0xFFFF)
+ struct Pokemon *mon = &pssData->currentMon;
+ struct PokeSummary *summary = &pssData->summary;
+ u16 dexNum = SpeciesToPokedexNum(summary->species);
+ if (dexNum != 0xFFFF)
{
StringCopy(gStringVar1, &gText_UnkCtrlF908Clear01[0]);
- ConvertIntToDecimalStringN(gStringVar2, r5, 2, 3);
+ ConvertIntToDecimalStringN(gStringVar2, dexNum, 2, 3);
StringAppend(gStringVar1, gStringVar2);
- if (IsMonShiny(mon) == 0)
+ if (!IsMonShiny(mon))
{
- sub_81C25A4(17, gStringVar1, 0, 1, 0, 1);
- sub_81C228C(0);
+ SummaryScreen_PrintTextOnWindow(17, gStringVar1, 0, 1, 0, 1);
+ sub_81C228C(FALSE);
}
else
{
- sub_81C25A4(17, gStringVar1, 0, 1, 0, 7);
- sub_81C228C(1);
+ SummaryScreen_PrintTextOnWindow(17, gStringVar1, 0, 1, 0, 7);
+ sub_81C228C(TRUE);
}
PutWindowTilemap(17);
}
else
{
ClearWindowTilemap(17);
- if (IsMonShiny(mon) == 0)
- sub_81C228C(0);
+ if (!IsMonShiny(mon))
+ sub_81C228C(FALSE);
else
- sub_81C228C(1);
+ sub_81C228C(TRUE);
}
StringCopy(gStringVar1, &gText_LevelSymbol[0]);
ConvertIntToDecimalStringN(gStringVar2, summary->level, 0, 3);
StringAppend(gStringVar1, gStringVar2);
- sub_81C25A4(19, gStringVar1, 0x18, 17, 0, 1);
+ SummaryScreen_PrintTextOnWindow(19, gStringVar1, 0x18, 17, 0, 1);
GetMonNickname(mon, gStringVar1);
- sub_81C25A4(18, gStringVar1, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(18, gStringVar1, 0, 1, 0, 1);
strArray[0] = CHAR_SLASH;
StringCopy(&strArray[1], &gSpeciesNames[summary->species2][0]);
- sub_81C25A4(19, &strArray[0], 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(19, &strArray[0], 0, 1, 0, 1);
sub_81C27DC(mon, summary->species2);
PutWindowTilemap(18);
PutWindowTilemap(19);
}
-void sub_81C2794()
+static void sub_81C2794(void)
{
- GetMonNickname(&gUnknown_0203CF1C->currentMon, gStringVar1);
- sub_81C25A4(18, gStringVar1, 0, 1, 0, 1);
+ GetMonNickname(&pssData->currentMon, gStringVar1);
+ SummaryScreen_PrintTextOnWindow(18, gStringVar1, 0, 1, 0, 1);
PutWindowTilemap(18);
ClearWindowTilemap(17);
ClearWindowTilemap(19);
}
-void sub_81C27DC(struct Pokemon *mon, u16 a)
+static void sub_81C27DC(struct Pokemon *mon, u16 species)
{
- if (a != SPECIES_NIDORAN_M && a != SPECIES_NIDORAN_F)
+ if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F)
{
u8 gender = GetMonGender(mon);
switch (gender)
{
- case 0:
- sub_81C25A4(0x13, &gText_MaleSymbol[0], 0x39, 17, 0, 3);
+ case MON_MALE:
+ SummaryScreen_PrintTextOnWindow(19, gText_MaleSymbol, 57, 17, 0, 3);
break;
- case 0xFE:
- sub_81C25A4(0x13, &gText_FemaleSymbol[0], 0x39, 17, 0, 4);
+ case MON_FEMALE:
+ SummaryScreen_PrintTextOnWindow(19, gText_FemaleSymbol, 57, 17, 0, 4);
break;
}
}
}
-void sub_81C2838(u8 a, bool8 b, u32 c)
-{
- BlitBitmapToWindow(a, (b) ? &gUnknown_0861CDD3[0] : &gUnknown_0861CDD3[0] - 0x80, c, 0, 16, 16);
-}
-
-void sub_81C286C()
-{
- int r4;
- int r2;
- int temp;
- sub_81C25A4(0, gText_PkmnInfo, 2, 1, 0, 1);
- sub_81C25A4(1, gText_PkmnSkills, 2, 1, 0, 1);
- sub_81C25A4(2, gText_BattleMoves, 2, 1, 0, 1);
- sub_81C25A4(3, gText_ContestMoves, 2, 1, 0, 1);
- r4 = GetStringRightAlignXOffset(1, gText_Cancel2, 0x3E);
- r2 = r4 - 16;
- if (r2 < 0)
- r2 = 0;
- sub_81C2838(4, 0, r2);
- sub_81C25A4(4, gText_Cancel2, r4, 1, 0, 0);
- r4 = GetStringRightAlignXOffset(1, gText_Info, 0x3E);
- r2 = r4 - 16;
- if (r2 < 0)
- r2 = 0;
- sub_81C2838(5, 0, r2);
- sub_81C25A4(5, gText_Info, r4, 1, 0, 0);
- r4 = GetStringRightAlignXOffset(1, gText_Switch, 0x3E);
- r2 = r4 - 16;
- if (r2 < 0)
- r2 = 0;
- sub_81C2838(6, 0, r2);
- sub_81C25A4(6, gText_Switch, r4, 1, 0, 0);
- sub_81C25A4(8, gText_RentalPkmn, 0, 1, 0, 1);
- sub_81C25A4(9, gText_TypeSlash, 0, 1, 0, 0);
- temp = 6;
- temp += GetStringCenterAlignXOffset(1, gText_HP4, 42);
- sub_81C25A4(10, gText_HP4, temp, 1, 0, 1);
- temp = 6;
- temp += GetStringCenterAlignXOffset(1, gText_Attack3, 42);
- sub_81C25A4(10, gText_Attack3, temp, 17, 0, 1);
- temp = 6;
- temp += GetStringCenterAlignXOffset(1, gText_Defense3, 42);
- sub_81C25A4(10, gText_Defense3, temp, 33, 0, 1);
- temp = 2;
- temp += GetStringCenterAlignXOffset(1, gText_SpAtk4, 36);
- sub_81C25A4(11, gText_SpAtk4, temp, 1, 0, 1);
- temp = 2;
- temp += GetStringCenterAlignXOffset(1, gText_SpDef4, 36);
- sub_81C25A4(11, gText_SpDef4, temp, 17, 0, 1);
- temp = 2;
- temp += GetStringCenterAlignXOffset(1, gText_Speed2, 36);
- sub_81C25A4(11, gText_Speed2, temp, 33, 0, 1);
- sub_81C25A4(12, gText_ExpPoints, 6, 1, 0, 1);
- sub_81C25A4(12, gText_NextLv, 6, 17, 0, 1);
- sub_81C25A4(13, gText_Status, 2, 1, 0, 1);
- sub_81C25A4(14, gText_Power, 0, 1, 0, 1);
- sub_81C25A4(14, gText_Accuracy2, 0, 17, 0, 1);
- sub_81C25A4(15, gText_Appeal, 0, 1, 0, 1);
- sub_81C25A4(15, gText_Jam, 0, 17, 0, 1);
-}
-
-void sub_81C2AFC(u8 a)
+static void PrintAOrBButtonIcon(u8 windowId, bool8 bButton, u32 x)
+{
+ BlitBitmapToWindow(windowId, (bButton) ? gUnknown_0861CDD3 : gUnknown_0861CDD3 - 0x80, x, 0, 16, 16);
+}
+
+static void PrintPageNamesAndStatsPageToWindows(void)
+{
+ int stringXPos;
+ int iconXPos;
+ int statsXPos;
+
+ SummaryScreen_PrintTextOnWindow(0, gText_PkmnInfo, 2, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(1, gText_PkmnSkills, 2, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(2, gText_BattleMoves, 2, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(3, gText_ContestMoves, 2, 1, 0, 1);
+
+ stringXPos = GetStringRightAlignXOffset(1, gText_Cancel2, 62);
+ iconXPos = stringXPos - 16;
+ if (iconXPos < 0)
+ iconXPos = 0;
+ PrintAOrBButtonIcon(4, FALSE, iconXPos);
+ SummaryScreen_PrintTextOnWindow(4, gText_Cancel2, stringXPos, 1, 0, 0);
+
+ stringXPos = GetStringRightAlignXOffset(1, gText_Info, 0x3E);
+ iconXPos = stringXPos - 16;
+ if (iconXPos < 0)
+ iconXPos = 0;
+ PrintAOrBButtonIcon(5, FALSE, iconXPos);
+ SummaryScreen_PrintTextOnWindow(5, gText_Info, stringXPos, 1, 0, 0);
+
+ stringXPos = GetStringRightAlignXOffset(1, gText_Switch, 0x3E);
+ iconXPos = stringXPos - 16;
+ if (iconXPos < 0)
+ iconXPos = 0;
+ PrintAOrBButtonIcon(6, FALSE, iconXPos);
+ SummaryScreen_PrintTextOnWindow(6, gText_Switch, stringXPos, 1, 0, 0);
+
+ SummaryScreen_PrintTextOnWindow(8, gText_RentalPkmn, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(9, gText_TypeSlash, 0, 1, 0, 0);
+ statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_HP4, 42);
+ SummaryScreen_PrintTextOnWindow(10, gText_HP4, statsXPos, 1, 0, 1);
+ statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_Attack3, 42);
+ SummaryScreen_PrintTextOnWindow(10, gText_Attack3, statsXPos, 17, 0, 1);
+ statsXPos = 6 + GetStringCenterAlignXOffset(1, gText_Defense3, 42);
+ SummaryScreen_PrintTextOnWindow(10, gText_Defense3, statsXPos, 33, 0, 1);
+ statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_SpAtk4, 36);
+ SummaryScreen_PrintTextOnWindow(11, gText_SpAtk4, statsXPos, 1, 0, 1);
+ statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_SpDef4, 36);
+ SummaryScreen_PrintTextOnWindow(11, gText_SpDef4, statsXPos, 17, 0, 1);
+ statsXPos = 2 + GetStringCenterAlignXOffset(1, gText_Speed2, 36);
+ SummaryScreen_PrintTextOnWindow(11, gText_Speed2, statsXPos, 33, 0, 1);
+ SummaryScreen_PrintTextOnWindow(12, gText_ExpPoints, 6, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(12, gText_NextLv, 6, 17, 0, 1);
+ SummaryScreen_PrintTextOnWindow(13, gText_Status, 2, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(14, gText_Power, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(14, gText_Accuracy2, 0, 17, 0, 1);
+ SummaryScreen_PrintTextOnWindow(15, gText_Appeal, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(15, gText_Jam, 0, 17, 0, 1);
+}
+
+static void sub_81C2AFC(u8 a)
{
u8 i;
+
ClearWindowTilemap(0);
ClearWindowTilemap(1);
ClearWindowTilemap(2);
ClearWindowTilemap(3);
+
switch (a)
{
case 0:
@@ -2704,33 +2522,39 @@ void sub_81C2AFC(u8 a)
break;
case 2:
PutWindowTilemap(2);
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if(!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
PutWindowTilemap(14);
}
else
+ {
PutWindowTilemap(5);
+ }
break;
case 3:
PutWindowTilemap(3);
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if(!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
PutWindowTilemap(15);
}
else
+ {
PutWindowTilemap(5);
+ }
break;
}
+
for (i = 0; i < 8; i++)
{
- PutWindowTilemap(gUnknown_0203CF1C->unk40CB[i]);
+ PutWindowTilemap(pssData->windowIds[i]);
}
+
schedule_bg_copy_tilemap_to_vram(0);
}
-void sub_81C2C38(u8 a)
+static void sub_81C2C38(u8 a)
{
u8 i;
switch (a)
@@ -2747,43 +2571,51 @@ void sub_81C2C38(u8 a)
ClearWindowTilemap(12);
break;
case 2:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if(!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
ClearWindowTilemap(14);
}
else
+ {
ClearWindowTilemap(5);
+ }
break;
case 3:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if(!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
ClearWindowTilemap(15);
}
else
+ {
ClearWindowTilemap(5);
+ }
break;
}
+
for (i = 0; i < 8; i++)
- sub_81C2D68(i);
+ {
+ SummaryScreen_RemoveWindowByIndex(i);
+ }
+
schedule_bg_copy_tilemap_to_vram(0);
}
-u8 sub_81C2D2C(struct WindowTemplate *template, u8 a)
+static u8 AddWindowFromTemplateList(const struct WindowTemplate *template, u8 templateId)
{
- u8 *windowIdPtr = &(gUnknown_0203CF1C->unk40CB[a]);
+ u8 *windowIdPtr = &(pssData->windowIds[templateId]);
if (*windowIdPtr == 0xFF)
{
- *windowIdPtr = AddWindow(&template[a]);
+ *windowIdPtr = AddWindow(&template[templateId]);
FillWindowPixelBuffer(*windowIdPtr, 0);
}
return *windowIdPtr;
}
-void sub_81C2D68(u8 a)
+static void SummaryScreen_RemoveWindowByIndex(u8 windowIndex)
{
- u8 *windowIdPtr = &(gUnknown_0203CF1C->unk40CB[a]);
+ u8 *windowIdPtr = &(pssData->windowIds[windowIndex]);
if (*windowIdPtr != 0xFF)
{
ClearWindowTilemap(*windowIdPtr);
@@ -2792,302 +2624,259 @@ void sub_81C2D68(u8 a)
}
}
-void sub_81C2D9C(u8 a)
+static void sub_81C2D9C(u8 pageIndex)
{
u16 i;
for (i = 0; i < 8; i++)
{
- if (gUnknown_0203CF1C->unk40CB[i] != 0xFF)
- FillWindowPixelBuffer(gUnknown_0203CF1C->unk40CB[i], 0);
+ if (pssData->windowIds[i] != 0xFF)
+ FillWindowPixelBuffer(pssData->windowIds[i], 0);
}
- gUnknown_0861CE54[a]();
+ gUnknown_0861CE54[pageIndex]();
}
-void sub_81C2DE4(u8 a)
+static void sub_81C2DE4(u8 pageIndex)
{
- CreateTask(gUnknown_0861CE64[a], 16);
+ CreateTask(gUnknown_0861CE64[pageIndex], 16);
}
-void sub_81C2E00()
+static void sub_81C2E00(void)
{
- if (gUnknown_0203CF1C->summary.isEgg)
+ if (pssData->summary.isEgg)
{
- sub_81C335C();
- sub_81C33CC();
- sub_81C3428();
- sub_81C349C();
+ PrintEggOTName();
+ PrintEggOTID();
+ PrintEggState();
+ PrintEggMemo();
}
else
{
- sub_81C2EC4();
- sub_81C2F5C();
- sub_81C2FD8();
- sub_81C302C();
- sub_81C307C();
- sub_81C3194();
+ PrintMonOTName();
+ PrintMonOTID();
+ PrintMonAbilityName();
+ PrintMonAbilityDescription();
+ BufferMonTrainerMemo();
+ PrintMonTrainerMemo();
}
}
-void sub_81C2E40(u8 taskId)
+static void sub_81C2E40(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 dataa = data[0] - 1;
- switch (dataa)
+ switch (data[0])
{
- case 0:
- sub_81C2EC4();
- break;
case 1:
- sub_81C2F5C();
+ PrintMonOTName();
break;
case 2:
- sub_81C2FD8();
+ PrintMonOTID();
break;
case 3:
- sub_81C302C();
+ PrintMonAbilityName();
break;
case 4:
- sub_81C307C();
+ PrintMonAbilityDescription();
break;
case 5:
- sub_81C3194();
+ BufferMonTrainerMemo();
break;
case 6:
+ PrintMonTrainerMemo();
+ break;
+ case 7:
DestroyTask(taskId);
return;
}
data[0]++;
}
-void sub_81C2EC4()
+static void PrintMonOTName(void)
{
- u8 r5;
- int r2;
- if (sub_81A6BF4() != 1 && sub_81B9E94() != 1)
+ u8 windowId;
+ int x;
+ if (sub_81A6BF4() != TRUE && sub_81B9E94() != TRUE)
{
- r5 = sub_81C2D2C(&gUnknown_0861CCCC, 0);
- sub_81C25A4(r5, gText_OTSlash, 0, 1, 0, 1);
- r2 = GetStringWidth(1, gText_OTSlash, 0);
- if (gUnknown_0203CF1C->summary.OTGender == 0)
- sub_81C25A4(r5, gUnknown_0203CF1C->summary.OTName, r2, 1, 0, 5);
+ windowId = AddWindowFromTemplateList(gUnknown_0861CCCC, 0);
+ SummaryScreen_PrintTextOnWindow(windowId, gText_OTSlash, 0, 1, 0, 1);
+ x = GetStringWidth(1, gText_OTSlash, 0);
+ if (pssData->summary.OTGender == 0)
+ SummaryScreen_PrintTextOnWindow(windowId, pssData->summary.OTName, x, 1, 0, 5);
else
- sub_81C25A4(r5, gUnknown_0203CF1C->summary.OTName, r2, 1, 0, 6);
+ SummaryScreen_PrintTextOnWindow(windowId, pssData->summary.OTName, x, 1, 0, 6);
}
}
-void sub_81C2F5C()
+static void PrintMonOTID(void)
{
- int r4;
+ int xPos;
if (sub_81A6BF4() != TRUE && sub_81B9E94() != TRUE)
{
- ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)gUnknown_0203CF1C->summary.OTID, 2, 5);
- r4 = GetStringRightAlignXOffset(1, gStringVar1, 0x38);
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 1), gStringVar1, r4, 1, 0, 1);
+ ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)pssData->summary.OTID, 2, 5);
+ xPos = GetStringRightAlignXOffset(1, gStringVar1, 56);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 1), gStringVar1, xPos, 1, 0, 1);
}
}
-void sub_81C2FD8()
+static void PrintMonAbilityName(void)
{
- u8 ability = GetAbilityBySpecies(gUnknown_0203CF1C->summary.species, gUnknown_0203CF1C->summary.altAbility);
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 2), gAbilityNames[ability], 0, 1, 0, 1);
+ u8 ability = GetAbilityBySpecies(pssData->summary.species, pssData->summary.altAbility);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), gAbilityNames[ability], 0, 1, 0, 1);
}
-void sub_81C302C()
+static void PrintMonAbilityDescription(void)
{
- u8 ability = GetAbilityBySpecies(gUnknown_0203CF1C->summary.species, gUnknown_0203CF1C->summary.altAbility);
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 2), gAbilityDescriptionPointers[ability], 0, 17, 0, 0);
+ u8 ability = GetAbilityBySpecies(pssData->summary.species, pssData->summary.altAbility);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), gAbilityDescriptionPointers[ability], 0, 17, 0, 0);
}
-void sub_81C307C()
+static void BufferMonTrainerMemo(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u8 *text;
+ struct PokeSummary *sum = &pssData->summary;
+ const u8 *text;
+
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_0861CE74);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_0861CE7B);
- sub_81C31C0();
- if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE || sub_81C3304() == TRUE)
+ BufferNatureString();
+
+ if (sub_81A6BF4() == TRUE || sub_81B9E94() == TRUE || IsInGamePartnerMon() == TRUE)
+ {
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_XNature);
+ }
else
{
- u8 *alloced1 = Alloc(32);
- u8 *alloced2 = Alloc(32);
- sub_81C31F0(alloced1);
- if (sum->metLocation <= 0xD4)
+ u8 *metLevelString = Alloc(32);
+ u8 *metLocationString = Alloc(32);
+ GetMetLevelString(metLevelString);
+
+ if (sum->metLocation < MAPSEC_NONE)
{
- sub_8124610(alloced2, sum->metLocation);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, alloced2);
+ sub_8124610(metLocationString, sum->metLocation);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, metLocationString);
}
- if (sub_81C3220() == 1)
+
+ if (DoesMonOTMatchOwner() == TRUE)
{
if (sum->metLevel == 0)
- text = (sum->metLocation > 0xD4) ? gText_XNatureHatchedSomewhereAt : gText_XNatureHatchedAtYZ;
+ text = (sum->metLocation >= MAPSEC_NONE) ? gText_XNatureHatchedSomewhereAt : gText_XNatureHatchedAtYZ;
else
- text = (sum->metLocation > 0xD4) ? gText_XNatureMetSomewhereAt : gText_XNatureMetAtYZ;
+ text = (sum->metLocation >= MAPSEC_NONE) ? gText_XNatureMetSomewhereAt : gText_XNatureMetAtYZ;
}
- else if (sum->metLocation == 0xFF)
+ else if (sum->metLocation == MAPSEC_FATEFUL_ENCOUNTER)
+ {
text = gText_XNatureFatefulEncounter;
- else if (sum->metLocation != 0xFE && sub_81C32BC())
- text = (sum->metLocation > 0xD4) ? gText_XNatureObtainedInTrade : gText_XNatureProbablyMetAt;
+ }
+ else if (sum->metLocation != MAPSEC_IN_GAME_TRADE && DidMonComeFromGBAGames())
+ {
+ text = (sum->metLocation >= MAPSEC_NONE) ? gText_XNatureObtainedInTrade : gText_XNatureProbablyMetAt;
+ }
else
+ {
text = gText_XNatureObtainedInTrade;
+ }
+
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, text);
- Free(alloced1);
- Free(alloced2);
+ Free(metLevelString);
+ Free(metLocationString);
}
}
-void sub_81C3194()
+static void PrintMonTrainerMemo(void)
{
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 3), gStringVar4, 0, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 3), gStringVar4, 0, 1, 0, 0);
}
-void sub_81C31C0()
+static void BufferNatureString(void)
{
- struct UnkSummaryStruct *sumStruct = gUnknown_0203CF1C;
+ struct UnkSummaryStruct *sumStruct = pssData;
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gNatureNamePointers[sumStruct->summary.nature]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gText_EmptyString5);
}
-void sub_81C31F0(u8 *a)
+static void GetMetLevelString(u8 *output)
{
- u8 level = gUnknown_0203CF1C->summary.metLevel;
+ u8 level = pssData->summary.metLevel;
if (level == 0)
level = EGG_HATCH_LEVEL;
- ConvertIntToDecimalStringN(a, level, 0, 3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, a);
+ ConvertIntToDecimalStringN(output, level, 0, 3);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, output);
}
-u8 sub_81C3220()
+static bool8 DoesMonOTMatchOwner(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u32 r4;
- u8 r5;
- if (gUnknown_0203CF1C->unk0 == (union UnkUnion *)&gEnemyParty)
+ struct PokeSummary *sum = &pssData->summary;
+ u32 trainerId;
+ u8 gender;
+
+ if (pssData->monList.mons == gEnemyParty)
{
- u8 multiID = GetMultiplayerId()^1;
- r4 = (u16)gLinkPlayers[multiID].trainerId;
- r5 = gLinkPlayers[multiID].gender;
+ u8 multiID = GetMultiplayerId() ^ 1;
+ trainerId = (u16)gLinkPlayers[multiID].trainerId;
+ gender = gLinkPlayers[multiID].gender;
StringCopy(gStringVar1, gLinkPlayers[multiID].name);
}
else
{
- r4 = GetPlayerIDAsU32() & 0xFFFF;
- r5 = gSaveBlock2Ptr->playerGender;
+ trainerId = GetPlayerIDAsU32() & 0xFFFF;
+ gender = gSaveBlock2Ptr->playerGender;
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
}
- if (r5 != sum->OTGender || r4 != (sum->OTID & 0xFFFF) || StringCompareWithoutExtCtrlCodes(gStringVar1, sum->OTName))
+ if (gender != sum->OTGender || trainerId != (sum->OTID & 0xFFFF) || StringCompareWithoutExtCtrlCodes(gStringVar1, sum->OTName))
{
- return 0;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
-bool8 sub_81C32BC()
+static bool8 DidMonComeFromGBAGames(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u8 r0 = sum->metGame - 1;
- if (r0 <= 4)
+ struct PokeSummary *sum = &pssData->summary;
+ if (sum->metGame > 0 && sum->metGame <= VERSION_LEAF_GREEN)
return TRUE;
return FALSE;
}
-bool8 sub_81C32E0()
+bool8 DidMonComeFromRSE(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u8 r0 = sum->metGame - 1;
- if (r0 <= 2)
+ struct PokeSummary *sum = &pssData->summary;
+ if (sum->metGame > 0 && sum->metGame <= VERSION_EMERALD)
return TRUE;
return FALSE;
}
-bool8 sub_81C3304()
+static bool8 IsInGamePartnerMon(void)
{
if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) && gMain.inBattle)
{
- if (gUnknown_0203CF1C->unk40BE == 1 || gUnknown_0203CF1C->unk40BE == 4 || gUnknown_0203CF1C->unk40BE == 5)
+ if (pssData->curMonIndex == 1 || pssData->curMonIndex == 4 || pssData->curMonIndex == 5)
return TRUE;
}
return FALSE;
}
-#ifdef NONMATCHING
-void sub_81C335C()
-{
- u8 r4 = sub_81C2D2C(&gUnknown_0861CCCC, 0);
- u32 r5 = GetStringWidth(1, gText_OTSlash, 0);
- sub_81C25A4(r4, gText_OTSlash, 0, 1, 0, 1);
- sub_81C25A4(r4, gText_FiveMarks, r5, 1, 0, 1);
-}
-#else
-NAKED
-void sub_81C335C()
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5,r6}\n\
- sub sp, 0x8\n\
- ldr r0, =gUnknown_0861CCCC\n\
- movs r1, 0\n\
- bl sub_81C2D2C\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- ldr r0, =gText_OTSlash\n\
- mov r8, r0\n\
- movs r0, 0x1\n\
- mov r1, r8\n\
- movs r2, 0\n\
- bl GetStringWidth\n\
- adds r5, r0, 0\n\
- movs r0, 0\n\
- mov r9, r0\n\
- str r0, [sp]\n\
- movs r6, 0x1\n\
- str r6, [sp, 0x4]\n\
- adds r0, r4, 0\n\
- mov r1, r8\n\
- movs r2, 0\n\
- movs r3, 0x1\n\
- bl sub_81C25A4\n\
- ldr r1, =gText_FiveMarks\n\
- lsls r5, 24\n\
- lsrs r5, 24\n\
- mov r0, r9\n\
- str r0, [sp]\n\
- str r6, [sp, 0x4]\n\
- adds r0, r4, 0\n\
- adds r2, r5, 0\n\
- movs r3, 0x1\n\
- bl sub_81C25A4\n\
- add sp, 0x8\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C33CC()
-{
- int r4;
+static void PrintEggOTName(void)
+{
+ u32 windowId = AddWindowFromTemplateList(gUnknown_0861CCCC, 0);
+ u32 width = GetStringWidth(1, gText_OTSlash, 0);
+ SummaryScreen_PrintTextOnWindow(windowId, gText_OTSlash, 0, 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(windowId, gText_FiveMarks, width, 1, 0, 1);
+}
+
+static void PrintEggOTID(void)
+{
+ int x;
StringCopy(gStringVar1, gText_UnkCtrlF907F908);
StringAppend(gStringVar1, gText_FiveMarks);
- r4 = GetStringRightAlignXOffset(1, gStringVar1, 0x38);
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 1), gStringVar1, r4, 1, 0, 1);
+ x = GetStringRightAlignXOffset(1, gStringVar1, 56);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 1), gStringVar1, x, 1, 0, 1);
}
-void sub_81C3428()
+static void PrintEggState(void)
{
- u8 *text;
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- if (gUnknown_0203CF1C->summary.sanity == 1)
+ const u8 *text;
+ struct PokeSummary *sum = &pssData->summary;
+
+ if (pssData->summary.sanity == TRUE)
text = gText_EggWillTakeALongTime;
else if (sum->friendship <= 5)
text = gText_EggAboutToHatch;
@@ -3097,141 +2886,158 @@ void sub_81C3428()
text = gText_EggWillTakeSomeTime;
else
text = gText_EggWillTakeALongTime;
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 2), text, 0, 1, 0, 0);
+
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 2), text, 0, 1, 0, 0);
}
-void sub_81C349C()
+static void PrintEggMemo(void)
{
- u8 *text;
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- if (gUnknown_0203CF1C->summary.sanity != 1)
+ const u8 *text;
+ struct PokeSummary *sum = &pssData->summary;
+
+ if (pssData->summary.sanity != 1)
{
- if (sum->metLocation == 0xFF)
+ if (sum->metLocation == MAPSEC_FATEFUL_ENCOUNTER)
text = gText_PeculiarEggNicePlace;
- else if (sub_81C32BC() == 0 || sub_81C3220() == 0)
+ else if (DidMonComeFromGBAGames() == FALSE || DoesMonOTMatchOwner() == FALSE)
text = gText_PeculiarEggTrade;
- else if (sum->metLocation == 0xFD)
- text = (sub_81C32E0() == TRUE) ? gText_EggFromHotSprings : gText_EggFromTraveler;
+ else if (sum->metLocation == MAPSEC_SPECIAL_EGG)
+ text = (DidMonComeFromRSE() == TRUE) ? gText_EggFromHotSprings : gText_EggFromTraveler;
else
text = gText_OddEggFoundByCouple;
}
else
+ {
text = gText_OddEggFoundByCouple;
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCCC, 3), text, 0, 1, 0, 0);
+ }
+
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCCC, 3), text, 0, 1, 0, 0);
}
-void sub_81C3530()
+static void sub_81C3530(void)
{
- sub_81C35E4();
- sub_81C3690();
- sub_81C3710();
- sub_81C37D8();
- sub_81C3808();
- sub_81C3890();
- sub_81C38C0();
+ PrintHeldItemName();
+ PrintRibbonCount();
+ BufferLeftColumnStats();
+ PrintLeftColumnStats();
+ BufferRightColumnStats();
+ PrintRightColumnStats();
+ PrintExpPointsNextLevel();
}
-void sub_81C3554(u8 taskId)
+static void sub_81C3554(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 dataa = data[0] - 1;
- switch (dataa)
+
+ switch (data[0])
{
- case 0:
- sub_81C35E4();
- break;
case 1:
- sub_81C3690();
+ PrintHeldItemName();
break;
case 2:
- sub_81C3710();
+ PrintRibbonCount();
break;
case 3:
- sub_81C37D8();
+ BufferLeftColumnStats();
break;
case 4:
- sub_81C3808();
+ PrintLeftColumnStats();
break;
case 5:
- sub_81C3890();
+ BufferRightColumnStats();
break;
case 6:
- sub_81C38C0();
+ PrintRightColumnStats();
break;
case 7:
+ PrintExpPointsNextLevel();
+ break;
+ case 8:
DestroyTask(taskId);
return;
}
data[0]++;
}
-void sub_81C35E4()
+static void PrintHeldItemName(void)
{
const u8 *text;
int offset;
- if (gUnknown_0203CF1C->summary.item == ITEM_ENIGMA_BERRY && sub_81B1250() == 1 && (gUnknown_0203CF1C->unk40BE == 1 || gUnknown_0203CF1C->unk40BE == 4 || gUnknown_0203CF1C->unk40BE == 5))
+
+ if (pssData->summary.item == ITEM_ENIGMA_BERRY && sub_81B1250() == TRUE && (pssData->curMonIndex == 1 || pssData->curMonIndex == 4 || pssData->curMonIndex == 5))
{
text = ItemId_GetName(ITEM_ENIGMA_BERRY);
}
- else if (gUnknown_0203CF1C->summary.item == ITEM_NONE)
+ else if (pssData->summary.item == ITEM_NONE)
+ {
text = gText_None;
+ }
else
{
- CopyItemName(gUnknown_0203CF1C->summary.item, gStringVar1);
+ CopyItemName(pssData->summary.item, gStringVar1);
text = gStringVar1;
}
- offset = GetStringCenterAlignXOffset(1, text, 0x48) + 6;
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCEC, 0), text, offset, 1, 0, 0);
+
+ offset = GetStringCenterAlignXOffset(1, text, 72) + 6;
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCEC, 0), text, offset, 1, 0, 0);
}
-void sub_81C3690()
+static void PrintRibbonCount(void)
{
- u8 *text;
+ const u8 *text;
int offset;
- if (gUnknown_0203CF1C->summary.ribbons == 0)
+
+ if (pssData->summary.ribbonCount == 0)
+ {
text = gText_None;
+ }
else
{
- ConvertIntToDecimalStringN(gStringVar1, gUnknown_0203CF1C->summary.ribbons, 1, 2);
+ ConvertIntToDecimalStringN(gStringVar1, pssData->summary.ribbonCount, 1, 2);
StringExpandPlaceholders(gStringVar4, gText_RibbonsVar1);
text = gStringVar4;
}
- offset = GetStringCenterAlignXOffset(1, text, 0x46) + 6;
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCEC, 1), text, offset, 1, 0, 0);
+
+ offset = GetStringCenterAlignXOffset(1, text, 70) + 6;
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCEC, 1), text, offset, 1, 0, 0);
}
-void sub_81C3710()
+static void BufferLeftColumnStats(void)
{
- u8 *alloced1 = Alloc(8);
- u8 *alloced2 = Alloc(8);
- u8 *alloced3 = Alloc(8);
- u8 *alloced4 = Alloc(8);
- ConvertIntToDecimalStringN(alloced1, gUnknown_0203CF1C->summary.currentHP, 1, 3);
- ConvertIntToDecimalStringN(alloced2, gUnknown_0203CF1C->summary.maxHP, 1, 3);
- ConvertIntToDecimalStringN(alloced3, gUnknown_0203CF1C->summary.atk, 1, 7);
- ConvertIntToDecimalStringN(alloced4, gUnknown_0203CF1C->summary.def, 1, 7);
+ u8 *currentHPString = Alloc(8);
+ u8 *maxHPString = Alloc(8);
+ u8 *attackString = Alloc(8);
+ u8 *defenseString = Alloc(8);
+
+ ConvertIntToDecimalStringN(currentHPString, pssData->summary.currentHP, 1, 3);
+ ConvertIntToDecimalStringN(maxHPString, pssData->summary.maxHP, 1, 3);
+ ConvertIntToDecimalStringN(attackString, pssData->summary.atk, 1, 7);
+ ConvertIntToDecimalStringN(defenseString, pssData->summary.def, 1, 7);
+
DynamicPlaceholderTextUtil_Reset();
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, alloced1);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, alloced2);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, alloced3);
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, alloced4);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, currentHPString);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, maxHPString);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, attackString);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, defenseString);
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE82);
- Free(alloced1);
- Free(alloced2);
- Free(alloced3);
- Free(alloced4);
+
+ Free(currentHPString);
+ Free(maxHPString);
+ Free(attackString);
+ Free(defenseString);
}
-void sub_81C37D8()
+static void PrintLeftColumnStats(void)
{
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCEC, 2), gStringVar4, 4, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCEC, 2), gStringVar4, 4, 1, 0, 0);
}
-void sub_81C3808()
+static void BufferRightColumnStats(void)
{
- ConvertIntToDecimalStringN(gStringVar1, gUnknown_0203CF1C->summary.spatk, 1, 3);
- ConvertIntToDecimalStringN(gStringVar2, gUnknown_0203CF1C->summary.spdef, 1, 3);
- ConvertIntToDecimalStringN(gStringVar3, gUnknown_0203CF1C->summary.speed, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, pssData->summary.spatk, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar2, pssData->summary.spdef, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar3, pssData->summary.speed, 1, 3);
+
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar2);
@@ -3239,317 +3045,183 @@ void sub_81C3808()
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE8E);
}
-void sub_81C3890()
+static void PrintRightColumnStats(void)
{
- sub_81C25A4(sub_81C2D2C(&gUnknown_0861CCEC, 3), gStringVar4, 2, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(gUnknown_0861CCEC, 3), gStringVar4, 2, 1, 0, 0);
}
-void sub_81C38C0()
+static void PrintExpPointsNextLevel(void)
{
- struct PokeSummary *sum = &gUnknown_0203CF1C->summary;
- u8 r6 = sub_81C2D2C(&gUnknown_0861CCEC, 4);
+ struct PokeSummary *sum = &pssData->summary;
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CCEC, 4);
int offset;
u32 expToNextLevel;
+
ConvertIntToDecimalStringN(gStringVar1, sum->exp, 1, 7);
- offset = GetStringRightAlignXOffset(1, gStringVar1, 0x2A) + 2;
- sub_81C25A4(r6, gStringVar1, offset, 1, 0, 0);
+ offset = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2;
+ SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 1, 0, 0);
+
if (sum->level < MAX_MON_LEVEL)
expToNextLevel = gExperienceTables[gBaseStats[sum->species].growthRate][sum->level + 1] - sum->exp;
else
expToNextLevel = 0;
+
ConvertIntToDecimalStringN(gStringVar1, expToNextLevel, 1, 6);
- offset = GetStringRightAlignXOffset(1, gStringVar1, 0x2A) + 2;
- sub_81C25A4(r6, gStringVar1, offset, 17, 0, 0);
+ offset = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2;
+ SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 17, 0, 0);
}
-void sub_81C3984()
+static void sub_81C3984(void)
{
- sub_81C3B08(0);
- sub_81C3B08(1);
- sub_81C3B08(2);
- sub_81C3B08(3);
- if (gUnknown_0203CF1C->unk40BC == 3)
+ PrintMoveNameAndPP(0);
+ PrintMoveNameAndPP(1);
+ PrintMoveNameAndPP(2);
+ PrintMoveNameAndPP(3);
+
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- sub_81C3F44();
- if (gUnknown_0203CF1C->unk40C6 == 4)
+ PrintNewMoveDetailsOrCancelText();
+ if (pssData->firstMoveIndex == MAX_MON_MOVES)
{
- if (gUnknown_0203CF1C->unk40C4 != 0)
- sub_81C3E9C(gUnknown_0203CF1C->unk40C4);
+ if (pssData->newMove != MOVE_NONE)
+ PrintMoveDetails(pssData->newMove);
}
else
- sub_81C3E9C(gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6]);
+ {
+ PrintMoveDetails(pssData->summary.moves[pssData->firstMoveIndex]);
+ }
}
}
-void sub_81C39F0(u8 taskId)
+static void sub_81C39F0(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- s16 dataa = data[0] - 1;
- switch (dataa)
+ switch (data[0])
{
- case 0:
- sub_81C3B08(0);
- break;
case 1:
- sub_81C3B08(1);
+ PrintMoveNameAndPP(0);
break;
case 2:
- sub_81C3B08(2);
+ PrintMoveNameAndPP(1);
break;
case 3:
- sub_81C3B08(3);
+ PrintMoveNameAndPP(2);
break;
case 4:
- if (gUnknown_0203CF1C->unk40BC == 3)
- sub_81C3F44();
+ PrintMoveNameAndPP(3);
break;
case 5:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
+ PrintNewMoveDetailsOrCancelText();
+ break;
+ case 6:
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if (gUnknown_0203CF1C->unk40C6 == 4)
- data[1] = gUnknown_0203CF1C->unk40C4;
+ if (pssData->firstMoveIndex == MAX_MON_MOVES)
+ data[1] = pssData->newMove;
else
- data[1] = gUnknown_0203CF1C->summary.moves[gUnknown_0203CF1C->unk40C6];
+ data[1] = pssData->summary.moves[pssData->firstMoveIndex];
}
break;
- case 6:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ case 7:
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if (!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
- sub_81C3E9C(data[1]);
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
+ PrintMoveDetails(data[1]);
}
break;
- case 7:
+ case 8:
DestroyTask(taskId);
return;
}
data[0]++;
}
-#ifdef NONMATCHING
-void sub_81C3B08(u8 a)
+static void PrintMoveNameAndPP(u8 moveIndex)
{
- struct UnkSummaryStruct *r10 = gUnknown_0203CF1C;
- u8 r8 = sub_81C2D2C(&gUnknown_0861CD14, 0);
- u8 sp = sub_81C2D2C(&gUnknown_0861CD14, 1);
- u8 r6;
- u8 r5;
- u8 *text;
- int offset;
- u16 move;
- if (r10->summary.moves[a] != 0)
+ u8 pp;
+ u32 ppState;
+ const u8 *text;
+ u32 offset;
+ struct UnkSummaryStruct *summaryStruct = pssData;
+ u8 moveNameWindowId = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
+ u8 ppValueWindowId = AddWindowFromTemplateList(gUnknown_0861CD14, 1);
+ u16 move = summaryStruct->summary.moves[moveIndex];
+
+ if (move != 0)
{
- move = r10->summary.moves[a];
- r6 = CalculatePPWithBonus(move, r10->summary.ppBonuses, a);
- sub_81C25A4(r8, gMoveNames[move], 0, (a<<4) + 1, 0, 1);
- ConvertIntToDecimalStringN(gStringVar1, r10->summary.pp[a], 1, 2);
- ConvertIntToDecimalStringN(gStringVar2, r6, 1, 2);
+ pp = CalculatePPWithBonus(move, summaryStruct->summary.ppBonuses, moveIndex);
+ SummaryScreen_PrintTextOnWindow(moveNameWindowId, gMoveNames[move], 0, moveIndex * 16 + 1, 0, 1);
+ ConvertIntToDecimalStringN(gStringVar1, summaryStruct->summary.pp[moveIndex], 1, 2);
+ ConvertIntToDecimalStringN(gStringVar2, pp, 1, 2);
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar2);
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE97);
text = gStringVar4;
- r5 = GetCurrentPpToMaxPpState(r10->summary.pp[a], r6) + 9;
- offset = GetStringRightAlignXOffset(1, text, 0x2C);
+ ppState = GetCurrentPpToMaxPpState(summaryStruct->summary.pp[moveIndex], pp) + 9;
+ offset = GetStringRightAlignXOffset(1, text, 44);
}
else
{
- sub_81C25A4(r8, gText_OneDash, 0, (a<<4) + 1, 0, 1);
+ SummaryScreen_PrintTextOnWindow(moveNameWindowId, gText_OneDash, 0, moveIndex * 16 + 1, 0, 1);
text = gText_TwoDashes;
- r5 = 12;
- offset = GetStringCenterAlignXOffset(1, text, 0x2C);
- }
- sub_81C25A4(sp, text, offset, (a<<4), 0, r5);
-}
-#else
-NAKED
-void sub_81C3B08(u8 a)
-{
- 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, 0xC\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- ldr r0, =gUnknown_0203CF1C\n\
- ldr r0, [r0]\n\
- mov r10, r0\n\
- ldr r4, =gUnknown_0861CD14\n\
- adds r0, r4, 0\n\
- movs r1, 0\n\
- bl sub_81C2D2C\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0x1\n\
- bl sub_81C2D2C\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x8]\n\
- lsls r1, r7, 1\n\
- mov r0, r10\n\
- adds r0, 0x84\n\
- adds r0, r1\n\
- ldrh r5, [r0]\n\
- cmp r5, 0\n\
- beq _081C3C00\n\
- mov r0, r10\n\
- adds r0, 0xA4\n\
- ldrb r1, [r0]\n\
- adds r0, r5, 0\n\
- adds r2, r7, 0\n\
- bl CalculatePPWithBonus\n\
- adds r6, r0, 0\n\
- lsls r6, 24\n\
- lsrs r6, 24\n\
- movs r0, 0xD\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, =gMoveNames\n\
- adds r1, r0\n\
- lsls r0, r7, 4\n\
- mov r9, r0\n\
- mov r3, r9\n\
- adds r3, 0x1\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0x1\n\
- str r0, [sp, 0x4]\n\
- mov r0, r8\n\
- movs r2, 0\n\
- bl sub_81C25A4\n\
- ldr r0, =gStringVar1\n\
- mov r8, r0\n\
- mov r5, r10\n\
- adds r5, 0x8C\n\
- adds r5, r7\n\
- ldrb r1, [r5]\n\
- movs r2, 0x1\n\
- movs r3, 0x2\n\
- bl ConvertIntToDecimalStringN\n\
- ldr r4, =gStringVar2\n\
- adds r0, r4, 0\n\
- adds r1, r6, 0\n\
- movs r2, 0x1\n\
- movs r3, 0x2\n\
- bl ConvertIntToDecimalStringN\n\
- bl DynamicPlaceholderTextUtil_Reset\n\
- movs r0, 0\n\
- mov r1, r8\n\
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr\n\
- movs r0, 0x1\n\
- adds r1, r4, 0\n\
- bl DynamicPlaceholderTextUtil_SetPlaceholderPtr\n\
- ldr r4, =gStringVar4\n\
- ldr r1, =gUnknown_0861CE97\n\
- adds r0, r4, 0\n\
- bl DynamicPlaceholderTextUtil_ExpandPlaceholders\n\
- adds r7, r4, 0\n\
- ldrb r0, [r5]\n\
- adds r1, r6, 0\n\
- bl GetCurrentPpToMaxPpState\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r5, r0, 0\n\
- adds r5, 0x9\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- movs r2, 0x2C\n\
- bl GetStringRightAlignXOffset\n\
- mov r4, r9\n\
- b _081C3C26\n\
- .pool\n\
-_081C3C00:\n\
- ldr r1, =gText_OneDash\n\
- lsls r4, r7, 4\n\
- adds r3, r4, 0x1\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- str r5, [sp]\n\
- movs r0, 0x1\n\
- str r0, [sp, 0x4]\n\
- mov r0, r8\n\
- movs r2, 0\n\
- bl sub_81C25A4\n\
- ldr r7, =gText_TwoDashes\n\
- movs r5, 0xC\n\
- movs r0, 0x1\n\
- adds r1, r7, 0\n\
- movs r2, 0x2C\n\
- bl GetStringCenterAlignXOffset\n\
-_081C3C26:\n\
- lsls r2, r0, 24\n\
- lsrs r2, 24\n\
- adds r3, r4, 0x1\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- lsls r0, r5, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x4]\n\
- ldr r0, [sp, 0x8]\n\
- adds r1, r7, 0\n\
- bl sub_81C25A4\n\
- add sp, 0xC\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\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_81C3C5C(u16 move)
-{
- u8 *text;
- if (move != 0)
+ ppState = 12;
+ offset = GetStringCenterAlignXOffset(1, text, 44);
+ }
+
+ SummaryScreen_PrintTextOnWindow(ppValueWindowId, text, offset, moveIndex * 16 + 1, 0, ppState);
+}
+
+static void PrintMovePowerAndAccuracy(u16 moveIndex)
+{
+ const u8 *text;
+ if (moveIndex != 0)
{
- FillWindowPixelRect(14, 0, 0x35, 0, 0x13, 0x20);
- if (gBattleMoves[move].power <= 1)
+ FillWindowPixelRect(14, 0, 53, 0, 19, 32);
+
+ if (gBattleMoves[moveIndex].power < 2)
+ {
text = gText_ThreeDashes;
+ }
else
{
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].power, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].power, 1, 3);
text = gStringVar1;
}
- sub_81C25A4(14, text, 0x35, 1, 0, 0);
- if (gBattleMoves[move].accuracy == 0)
+
+ SummaryScreen_PrintTextOnWindow(14, text, 53, 1, 0, 0);
+
+ if (gBattleMoves[moveIndex].accuracy == 0)
+ {
text = gText_ThreeDashes;
+ }
else
{
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].accuracy, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].accuracy, 1, 3);
text = gStringVar1;
}
- sub_81C25A4(14, text, 0x35, 17, 0, 0);
+
+ SummaryScreen_PrintTextOnWindow(14, text, 53, 17, 0, 0);
}
}
-void sub_81C3D08()
+static void sub_81C3D08(void)
{
- sub_81C3B08(0);
- sub_81C3B08(1);
- sub_81C3B08(2);
- sub_81C3B08(3);
- if (gUnknown_0203CF1C->unk40BC == 3)
+ PrintMoveNameAndPP(0);
+ PrintMoveNameAndPP(1);
+ PrintMoveNameAndPP(2);
+ PrintMoveNameAndPP(3);
+
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- sub_81C3F44();
- sub_81C3E2C(gUnknown_0203CF1C->unk40C6);
+ PrintNewMoveDetailsOrCancelText();
+ PrintContestMoveDescription(pssData->firstMoveIndex);
}
}
-void sub_81C3D54(u8 taskId)
+static void sub_81C3D54(u8 taskId)
{
s16 *data = gTasks[taskId].data;
s16 dataa = data[0] - 1;
@@ -3557,26 +3229,26 @@ void sub_81C3D54(u8 taskId)
switch (dataa)
{
case 0:
- sub_81C3B08(0);
+ PrintMoveNameAndPP(0);
break;
case 1:
- sub_81C3B08(1);
+ PrintMoveNameAndPP(1);
break;
case 2:
- sub_81C3B08(2);
+ PrintMoveNameAndPP(2);
break;
case 3:
- sub_81C3B08(3);
+ PrintMoveNameAndPP(3);
break;
case 4:
- if (gUnknown_0203CF1C->unk40BC == 3)
- sub_81C3F44();
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
+ PrintNewMoveDetailsOrCancelText();
break;
case 5:
- if (gUnknown_0203CF1C->unk40BC == 3)
+ if (pssData->mode == PSS_MODE_SELECT_MOVE)
{
- if (!(gUnknown_0203CF1C->unk40C4 == 0 && gUnknown_0203CF1C->unk40C6 == 4))
- sub_81C3E2C(gUnknown_0203CF1C->unk40C6);
+ if (pssData->newMove != MOVE_NONE || pssData->firstMoveIndex != MAX_MON_MOVES)
+ PrintContestMoveDescription(pssData->firstMoveIndex);
}
break;
case 6:
@@ -3586,36 +3258,36 @@ void sub_81C3D54(u8 taskId)
data[0]++;
}
-void sub_81C3E2C(u8 moveSlot)
+static void PrintContestMoveDescription(u8 moveSlot)
{
u16 move;
if (moveSlot == 4)
- move = gUnknown_0203CF1C->unk40C4;
+ move = pssData->newMove;
else
- move = gUnknown_0203CF1C->summary.moves[moveSlot];
+ move = pssData->summary.moves[moveSlot];
if (move != MOVE_NONE)
{
- u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
- sub_81C25A4(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CD14, 2);
+ SummaryScreen_PrintTextOnWindow(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
}
}
-void sub_81C3E9C(u16 move)
+static void PrintMoveDetails(u16 move)
{
- u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CD14, 2);
FillWindowPixelBuffer(windowId, 0);
if (move != MOVE_NONE)
{
- if (gUnknown_0203CF1C->unk40C0 == 2)
+ if (pssData->currPageIndex == 2)
{
- sub_81C3C5C(move);
- sub_81C25A4(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
+ PrintMovePowerAndAccuracy(move);
+ SummaryScreen_PrintTextOnWindow(windowId, gMoveDescriptionPointers[move - 1], 6, 1, 0, 0);
}
else
{
- sub_81C25A4(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(windowId, gContestEffectDescriptionPointers[gContestMoves[move].effect], 6, 1, 0, 0);
}
PutWindowTilemap(windowId);
}
@@ -3627,96 +3299,100 @@ void sub_81C3E9C(u16 move)
schedule_bg_copy_tilemap_to_vram(0);
}
-void sub_81C3F44(void)
+static void PrintNewMoveDetailsOrCancelText(void)
{
- u8 windowId1 = sub_81C2D2C(&gUnknown_0861CD14, 0);
- u8 windowId2 = sub_81C2D2C(&gUnknown_0861CD14, 1);
- if (gUnknown_0203CF1C->unk40C4 == MOVE_NONE)
+ u8 windowId1 = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
+ u8 windowId2 = AddWindowFromTemplateList(gUnknown_0861CD14, 1);
+
+ if (pssData->newMove == MOVE_NONE)
{
- sub_81C25A4(windowId1, gText_Cancel, 0, 0x41, 0, 1);
+ SummaryScreen_PrintTextOnWindow(windowId1, gText_Cancel, 0, 65, 0, 1);
}
else
{
- u16 move = gUnknown_0203CF1C->unk40C4;
- if (gUnknown_0203CF1C->unk40C0 == 2)
- sub_81C25A4(windowId1, gMoveNames[move], 0, 0x41, 0, 6);
+ u16 move = pssData->newMove;
+
+ if (pssData->currPageIndex == 2)
+ SummaryScreen_PrintTextOnWindow(windowId1, gMoveNames[move], 0, 65, 0, 6);
else
- sub_81C25A4(windowId1, gMoveNames[move], 0, 0x41, 0, 5);
+ SummaryScreen_PrintTextOnWindow(windowId1, gMoveNames[move], 0, 65, 0, 5);
ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, 1, 2);
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gUnknown_0861CE97);
- sub_81C25A4(windowId2, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x2C), 0x41, 0, 12);
+ SummaryScreen_PrintTextOnWindow(windowId2, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x2C), 0x41, 0, 12);
}
}
-void sub_81C4064(void)
+static void sub_81C4064(void)
{
- u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 0);
- FillWindowPixelRect(windowId, 0, 0, 0x42, 0x48, 0x10);
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
+ FillWindowPixelRect(windowId, 0, 0, 66, 72, 16);
CopyWindowToVram(windowId, 2);
}
-void sub_81C40A0(u8 a, u8 b)
+static void sub_81C40A0(u8 moveIndex1, u8 moveIndex2)
{
- u8 windowId1 = sub_81C2D2C(&gUnknown_0861CD14, 0);
- u8 windowId2 = sub_81C2D2C(&gUnknown_0861CD14, 1);
+ u8 windowId1 = AddWindowFromTemplateList(gUnknown_0861CD14, 0);
+ u8 windowId2 = AddWindowFromTemplateList(gUnknown_0861CD14, 1);
- FillWindowPixelRect(windowId1, 0, 0, a * 16, 0x48, 0x10);
- FillWindowPixelRect(windowId1, 0, 0, b * 16, 0x48, 0x10);
+ FillWindowPixelRect(windowId1, 0, 0, moveIndex1 * 16, 0x48, 0x10);
+ FillWindowPixelRect(windowId1, 0, 0, moveIndex2 * 16, 0x48, 0x10);
- FillWindowPixelRect(windowId2, 0, 0, a * 16, 0x30, 0x10);
- FillWindowPixelRect(windowId2, 0, 0, b * 16, 0x30, 0x10);
+ FillWindowPixelRect(windowId2, 0, 0, moveIndex1 * 16, 0x30, 0x10);
+ FillWindowPixelRect(windowId2, 0, 0, moveIndex2 * 16, 0x30, 0x10);
- sub_81C3B08(a);
- sub_81C3B08(b);
+ PrintMoveNameAndPP(moveIndex1);
+ PrintMoveNameAndPP(moveIndex2);
}
-void sub_81C4154(void)
+static void PrintHMMovesCantBeForgotten(void)
{
- u8 windowId = sub_81C2D2C(&gUnknown_0861CD14, 2);
+ u8 windowId = AddWindowFromTemplateList(gUnknown_0861CD14, 2);
FillWindowPixelBuffer(windowId, 0);
- sub_81C25A4(windowId, gText_HMMovesCantBeForgotten2, 6, 1, 0, 0);
+ SummaryScreen_PrintTextOnWindow(windowId, gText_HMMovesCantBeForgotten2, 6, 1, 0, 0);
}
-void sub_81C4190(void)
+static void sub_81C4190(void)
{
u8 i;
for (i = 0; i < 28; i++)
- gUnknown_0203CF1C->unk40D3[i] |= 0xFF;
+ {
+ pssData->spriteIds[i] = 0xFF;
+ }
}
-void sub_81C41C0(u8 spriteArrayId)
+static void DestroySpriteInArray(u8 spriteArrayId)
{
- if (gUnknown_0203CF1C->unk40D3[spriteArrayId] != 0xFF)
+ if (pssData->spriteIds[spriteArrayId] != 0xFF)
{
- DestroySprite(&gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]]);
- gUnknown_0203CF1C->unk40D3[spriteArrayId] = 0xFF;
+ DestroySprite(&gSprites[pssData->spriteIds[spriteArrayId]]);
+ pssData->spriteIds[spriteArrayId] = 0xFF;
}
}
-void sub_81C4204(u8 spriteArrayId, bool8 invisible)
+static void sub_81C4204(u8 spriteArrayId, bool8 invisible)
{
- gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]].invisible = invisible;
+ gSprites[pssData->spriteIds[spriteArrayId]].invisible = invisible;
}
-void sub_81C424C(void)
+static void sub_81C424C(void)
{
u8 i;
for (i = 3; i < 28; i++)
{
- if (gUnknown_0203CF1C->unk40D3[i] != 0xFF)
+ if (pssData->spriteIds[i] != 0xFF)
sub_81C4204(i, TRUE);
}
}
-void sub_81C4280(void)
+static void sub_81C4280(void)
{
- switch (gUnknown_0203CF1C->unk40C0)
+ switch (pssData->currPageIndex)
{
case 0:
sub_81C43A0();
@@ -3732,24 +3408,22 @@ void sub_81C4280(void)
}
}
-void sub_81C42C8(void)
+static void sub_81C42C8(void)
{
u8 i;
for (i = 3; i < 8; i++)
{
- if (gUnknown_0203CF1C->unk40D3[i] == 0xFF)
- gUnknown_0203CF1C->unk40D3[i] = CreateSprite(&gUnknown_0861CFC4, 0, 0, 2);
+ if (pssData->spriteIds[i] == 0xFF)
+ pssData->spriteIds[i] = CreateSprite(&gUnknown_0861CFC4, 0, 0, 2);
sub_81C4204(i, TRUE);
}
}
-extern const u8 gUnknown_0861CFDC[];
-
-void sub_81C4318(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
+static void SetMoveTypeSpritePosAndType(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
{
- struct Sprite *sprite = &gSprites[gUnknown_0203CF1C->unk40D3[spriteArrayId]];
+ struct Sprite *sprite = &gSprites[pssData->spriteIds[spriteArrayId]];
StartSpriteAnim(sprite, typeId);
sprite->oam.paletteNum = gUnknown_0861CFDC[typeId];
sprite->pos1.x = x + 16;
@@ -3757,20 +3431,20 @@ void sub_81C4318(u8 typeId, u8 x, u8 y, u8 spriteArrayId)
sub_81C4204(spriteArrayId, FALSE);
}
-void sub_81C43A0(void)
+static void sub_81C43A0(void)
{
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
if (summary->isEgg)
{
- sub_81C4318(TYPE_MYSTERY, 0x78, 0x30, 3);
+ SetMoveTypeSpritePosAndType(TYPE_MYSTERY, 120, 48, 3);
sub_81C4204(4, TRUE);
}
else
{
- sub_81C4318(gBaseStats[summary->species].type1, 0x78, 0x30, 3);
+ SetMoveTypeSpritePosAndType(gBaseStats[summary->species].type1, 0x78, 0x30, 3);
if (gBaseStats[summary->species].type1 != gBaseStats[summary->species].type2)
{
- sub_81C4318(gBaseStats[summary->species].type2, 0xA0, 0x30, 4);
+ SetMoveTypeSpritePosAndType(gBaseStats[summary->species].type2, 0xA0, 0x30, 4);
sub_81C4204(4, FALSE);
}
else
@@ -3780,43 +3454,379 @@ void sub_81C43A0(void)
}
}
-void sub_81C4420(void)
+static void sub_81C4420(void)
{
u8 i;
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
for (i = 0; i < 4; i++)
{
if (summary->moves[i] != MOVE_NONE)
- sub_81C4318(gBattleMoves[summary->moves[i]].type, 0x55, 0x20 + (i * 0x10), i + 3);
+ SetMoveTypeSpritePosAndType(gBattleMoves[summary->moves[i]].type, 0x55, 0x20 + (i * 0x10), i + 3);
else
sub_81C4204(i + 3, TRUE);
}
}
-void sub_81C4484(void)
+static void sub_81C4484(void)
{
u8 i;
- struct PokeSummary *summary = &gUnknown_0203CF1C->summary;
+ struct PokeSummary *summary = &pssData->summary;
for (i = 0; i < 4; i++)
{
if (summary->moves[i] != MOVE_NONE)
- sub_81C4318(NUMBER_OF_MON_TYPES + gContestMoves[summary->moves[i]].contestCategory, 0x55, 0x20 + (i * 0x10), i + 3);
+ SetMoveTypeSpritePosAndType(NUMBER_OF_MON_TYPES + gContestMoves[summary->moves[i]].contestCategory, 0x55, 0x20 + (i * 0x10), i + 3);
else
sub_81C4204(i + 3, TRUE);
}
}
-void sub_81C44F0(void)
+static void sub_81C44F0(void)
{
- if (gUnknown_0203CF1C->unk40C4 == MOVE_NONE)
+ if (pssData->newMove == MOVE_NONE)
{
sub_81C4204(7, TRUE);
}
else
{
- if (gUnknown_0203CF1C->unk40C0 == 2)
- sub_81C4318(gBattleMoves[gUnknown_0203CF1C->unk40C4].type, 0x55, 0x60, 7);
+ if (pssData->currPageIndex == 2)
+ SetMoveTypeSpritePosAndType(gBattleMoves[pssData->newMove].type, 85, 96, 7);
+ else
+ SetMoveTypeSpritePosAndType(NUMBER_OF_MON_TYPES + gContestMoves[pssData->newMove].contestCategory, 85, 96, 7);
+ }
+}
+
+static void sub_81C4568(u8 a0, u8 a1)
+{
+ struct Sprite *sprite1 = &gSprites[pssData->spriteIds[a0 + 3]];
+ struct Sprite *sprite2 = &gSprites[pssData->spriteIds[a1 + 3]];
+
+ u8 temp = sprite1->animNum;
+ sprite1->animNum = sprite2->animNum;
+ sprite2->animNum = temp;
+
+ temp = sprite1->oam.paletteNum;
+ sprite1->oam.paletteNum = sprite2->oam.paletteNum;
+ sprite2->oam.paletteNum = temp;
+
+ sprite1->animBeginning = TRUE;
+ sprite1->animEnded = FALSE;
+ sprite2->animBeginning = TRUE;
+ sprite2->animEnded = FALSE;
+}
+
+static u8 sub_81C45F4(struct Pokemon *mon, s16 *a1)
+{
+ const struct CompressedSpritePalette *pal;
+ struct PokeSummary *summary = &pssData->summary;
+
+ switch (*a1)
+ {
+ default:
+ return sub_81C47B4(mon);
+ case 0:
+ if (gMain.inBattle)
+ {
+ if (sub_80688F8(3, pssData->curMonIndex))
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid);
+ }
+ }
+ else
+ {
+ if (gMonSpritesGfxPtr != NULL)
+ {
+ if (pssData->monList.mons == gPlayerParty || pssData->mode == PSS_MODE_UNK2 || pssData->unk40EF == TRUE)
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], gMonSpritesGfxPtr->sprites[1], summary->species2, summary->pid);
+ }
+ }
+ else
+ {
+ if (pssData->monList.mons == gPlayerParty || pssData->mode == PSS_MODE_UNK2 || pssData->unk40EF == TRUE)
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[summary->species2], sub_806F4F8(0, 1), summary->species2, summary->pid);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[summary->species2], sub_806F4F8(0, 1), summary->species2, summary->pid);
+ }
+ }
+ }
+ (*a1)++;
+ return -1;
+ case 1:
+ pal = GetMonSpritePalStructFromOtIdPersonality(summary->species2, summary->OTID, summary->pid);
+ LoadCompressedObjectPalette(pal);
+ SetMultiuseSpriteTemplateToPokemon(pal->tag, 1);
+ (*a1)++;
+ return -1;
+ }
+}
+
+static void sub_81C4778(void)
+{
+ struct PokeSummary *summary = &pssData->summary;
+ if (!summary->isEgg)
+ {
+ if (ShouldPlayNormalMonCry(&pssData->currentMon) == TRUE)
+ {
+ PlayCry3(summary->species2, 0, 0);
+ }
else
- sub_81C4318(NUMBER_OF_MON_TYPES + gContestMoves[gUnknown_0203CF1C->unk40C4].contestCategory, 0x55, 0x60, 7);
+ {
+ PlayCry3(summary->species2, 0, 11);
+ }
+ }
+}
+
+static u8 sub_81C47B4(struct Pokemon *unused)
+{
+ struct PokeSummary *summary = &pssData->summary;
+ u8 spriteId = CreateSprite(&gMultiuseSpriteTemplate, 40, 64, 5);
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ FreeSpriteOamMatrix(sprite);
+
+ sprite->data[0] = summary->species2;
+ sprite->data[2] = 0;
+ gSprites[spriteId].callback = sub_81C4844;
+ sprite->oam.priority = 0;
+
+ if (!IsMonSpriteNotFlipped(summary->species2))
+ {
+ sprite->hFlip = TRUE;
+ }
+ else
+ {
+ sprite->hFlip = FALSE;
+ }
+
+ return spriteId;
+}
+
+static void sub_81C4844(struct Sprite *sprite)
+{
+ struct PokeSummary *summary = &pssData->summary;
+
+ if (!gPaletteFade.active && sprite->data[2] != 1)
+ {
+ sprite->data[1] = IsMonSpriteNotFlipped(sprite->data[0]);
+ sub_81C4778();
+ PokemonSummaryDoMonAnimation(sprite, sprite->data[0], summary->isEgg);
+ }
+}
+
+void SummaryScreen_SetUnknownTaskId(u8 a0)
+{
+ sUnknownTaskId = a0;
+}
+
+void SummaryScreen_DestroyUnknownTask(void)
+{
+ if (sUnknownTaskId != 0xFF)
+ {
+ DestroyTask(sUnknownTaskId);
+ sUnknownTaskId = 0xFF;
+ }
+}
+
+static bool32 SummaryScreen_DoesSpriteHaveCallback(void)
+{
+ if (gSprites[pssData->spriteIds[0]].callback == SpriteCallbackDummy)
+ {
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+static void sub_81C48F0(void)
+{
+ u16 i;
+ u16 paletteIndex;
+
+ gSprites[pssData->spriteIds[0]].animPaused = TRUE;
+ gSprites[pssData->spriteIds[0]].callback = SpriteCallbackDummy;
+ sub_806EE98();
+
+ paletteIndex = (gSprites[pssData->spriteIds[0]].oam.paletteNum * 16) | 0x100;
+
+ for (i = 0; i < 16; i++)
+ {
+ gPlttBufferUnfaded[(u16)(i + paletteIndex)] = gPlttBufferFaded[(u16)(i + paletteIndex)];
+ }
+}
+
+static void CreateMonMarkingsSprite(struct Pokemon *mon)
+{
+ struct Sprite *sprite = sub_811FF94(30003, 30003, gUnknown_0861D120);
+
+ pssData->markingsSprite = sprite;
+
+ if (sprite != NULL)
+ {
+ StartSpriteAnim(sprite, GetMonData(mon, MON_DATA_MARKINGS));
+ pssData->markingsSprite->pos1.x = 60;
+ pssData->markingsSprite->pos1.y = 26;
+ pssData->markingsSprite->oam.priority = 1;
+ }
+}
+
+static void RemoveAndCreateMonMarkingsSprite(struct Pokemon *mon)
+{
+ DestroySprite(pssData->markingsSprite);
+ FreeSpriteTilesByTag(30003);
+ CreateMonMarkingsSprite(mon);
+}
+
+static void CreateCaughtBallSprite(struct Pokemon *mon)
+{
+ u8 ball = ItemIdToBallId(GetMonData(mon, MON_DATA_POKEBALL));
+
+ LoadBallGfx(ball);
+ pssData->spriteIds[1] = CreateSprite(&gBallSpriteTemplates[ball], 16, 136, 0);
+ gSprites[pssData->spriteIds[1]].callback = SpriteCallbackDummy;
+ gSprites[pssData->spriteIds[1]].oam.priority = 3;
+}
+
+static void CreateSetStatusSprite(void)
+{
+ u8 *spriteId = &pssData->spriteIds[2];
+ u8 anim;
+
+ if (*spriteId == 0xFF)
+ {
+ *spriteId = CreateSprite(&gUnknown_0861D108, 64, 152, 0);
+ }
+
+ anim = sub_81B205C(&pssData->currentMon);
+
+ if (anim != 0)
+ {
+ StartSpriteAnim(&gSprites[*spriteId], anim - 1);
+ sub_81C4204(2, FALSE);
+ }
+ else
+ {
+ sub_81C4204(2, TRUE);
+ }
+}
+
+static void sub_81C4AF8(u8 a0)
+{
+ u8 i;
+ u8 *spriteIds = &pssData->spriteIds[a0];
+
+ if (pssData->currPageIndex > 1)
+ {
+ u8 subsprite = 0;
+ if (a0 == 8)
+ {
+ subsprite = 1;
+ }
+
+ for (i = 0; i < 10; i++)
+ {
+ spriteIds[i] = CreateSprite(&gUnknown_0861D084, i * 16 + 89, 40, subsprite);
+ if (i == 0)
+ {
+ StartSpriteAnim(&gSprites[spriteIds[0]], 4);
+ }
+ else if (i == 9)
+ {
+ StartSpriteAnim(&gSprites[spriteIds[9]], 5);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteIds[i]], 6);
+ }
+ gSprites[spriteIds[i]].callback = sub_81C4BE4;
+ gSprites[spriteIds[i]].data[0] = a0;
+ gSprites[spriteIds[i]].data[1] = 0;
+ }
+ }
+}
+
+static void sub_81C4BE4(struct Sprite *sprite)
+{
+ if (sprite->animNum > 3 && sprite->animNum < 7)
+ {
+ sprite->data[1] = (sprite->data[1] + 1) & 0x1F;
+ if (sprite->data[1] > 24)
+ {
+ sprite->invisible = TRUE;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ }
+ }
+ else
+ {
+ sprite->data[1] = 0;
+ sprite->invisible = FALSE;
+ }
+
+ if (sprite->data[0] == 8)
+ {
+ sprite->pos2.y = pssData->firstMoveIndex * 16;
+ }
+ else
+ {
+ sprite->pos2.y = pssData->secondMoveIndex * 16;
+ }
+}
+
+static void sub_81C4C60(u8 a0)
+{
+ u8 i;
+ for (i = 0; i < 10; i++)
+ {
+ DestroySpriteInArray(a0 + i);
+ }
+}
+
+static void sub_81C4C84(u8 a0)
+{
+ u8 i;
+ u8 *spriteIds = &pssData->spriteIds[8];
+ a0 *= 3;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (i == 0)
+ {
+ StartSpriteAnim(&gSprites[spriteIds[0]], a0 + 4);
+ }
+ else if (i == 9)
+ {
+ StartSpriteAnim(&gSprites[spriteIds[9]], a0 + 5);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteIds[i]], a0 + 6);
+ }
+ }
+}
+
+static void sub_81C4D18(u8 firstSpriteId)
+{
+ u8 i;
+ u8 *spriteIds = &pssData->spriteIds[firstSpriteId];
+
+ for (i = 0; i < 10; i++)
+ {
+ gSprites[spriteIds[i]].data[1] = 0;
+ gSprites[spriteIds[i]].invisible = FALSE;
}
}
diff --git a/src/secret_base.c b/src/secret_base.c
index c71f7ed23..b75163200 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -997,7 +997,7 @@ void sub_80E9FB0(u8 taskId)
{
s8 input;
- input = ProcessMenuInputNoWrapAround();
+ input = Menu_ProcessInputNoWrapAround();
switch (input)
{
case -1:
diff --git a/src/slot_machine.c b/src/slot_machine.c
index 5422103c3..6b6a46cf8 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -975,7 +975,7 @@ bool8 sub_8102318(struct Task *task)
bool8 sub_8102344(struct Task *task)
{
- s8 input = ProcessMenuInputNoWrap_();
+ s8 input = Menu_ProcessInputNoWrap_();
if (input == 0)
{
sub_8197434(0, TRUE);
diff --git a/src/start_menu.c b/src/start_menu.c
index 7591d3b57..60271317a 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -985,7 +985,7 @@ static u8 SaveYesNoCallback(void)
static u8 SaveConfirmInputCallback(void)
{
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0: // Yes
switch (gSaveFileStatus)
@@ -1045,7 +1045,7 @@ static u8 SaveConfirmOverwriteCallback(void)
static u8 SaveOverwriteInputCallback(void)
{
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0: // Yes
sSaveDialogCallback = SaveSavingMessageCallback;
@@ -1169,7 +1169,7 @@ static u8 BattlePyramidRetireYesNoCallback(void)
static u8 BattlePyramidRetireInputCallback(void)
{
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0: // Yes
return SAVE_CANCELED;
diff --git a/src/starter_choose.c b/src/starter_choose.c
index b55b0fbc5..36e2b121a 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -258,7 +258,7 @@ static void Task_StarterChoose5(u8 taskId)
{
u8 spriteId;
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0: // YES
// Return the starter choice and exit.
diff --git a/src/unk_pokedex_area_screen_helper.c b/src/unk_pokedex_area_screen_helper.c
new file mode 100644
index 000000000..521af6dd9
--- /dev/null
+++ b/src/unk_pokedex_area_screen_helper.c
@@ -0,0 +1,75 @@
+#include "global.h"
+#include "main.h"
+#include "menu.h"
+#include "bg.h"
+#include "malloc.h"
+#include "palette.h"
+
+EWRAM_DATA u8 *gUnknown_0203CF28 = NULL;
+
+static const u16 gUnknown_0861D140[] = INCBIN_U16("graphics/interface/region_map.gbapal");
+static const u8 gUnknown_0861D1A0[] = INCBIN_U8("graphics/interface/region_map.8bpp.lz");
+static const u8 gUnknown_0861DEF4[] = INCBIN_U8("graphics/interface/region_map.bin.lz");
+static const u8 gUnknown_0861E208[] = INCBIN_U8("graphics/interface/region_map_affine.8bpp.lz");
+static const u8 gUnknown_0861EF64[] = INCBIN_U8("graphics/interface/region_map_affine.bin.lz");
+
+struct UnkStruct_1C4D70
+{
+ u32 bg:2;
+ u32 unk2:8;
+ u32 unk10:2;
+ u32 unk12:20;
+};
+
+void sub_81C4D70(struct UnkStruct_1C4D70 *template)
+{
+ u8 unk;
+ gUnknown_0203CF28 = Alloc(4);
+ unk = template->unk10;
+
+ if (unk == 0)
+ {
+ SetBgAttribute(template->bg, BG_CTRL_ATTR_WRAPAROUND, 0);
+ decompress_and_copy_tile_data_to_vram(template->bg, gUnknown_0861D1A0, 0, template->unk2, unk);
+ sub_8199D3C(decompress_and_copy_tile_data_to_vram(template->bg, gUnknown_0861DEF4, 0, 0, 1), template->unk2, 32, 32, unk);
+ }
+ else
+ {
+ SetBgAttribute(template->bg, BG_CTRL_ATTR_WRAPAROUND, 2);
+ SetBgAttribute(template->bg, 9, 1);
+ decompress_and_copy_tile_data_to_vram(template->bg, gUnknown_0861E208, 0, template->unk2, 0);
+ sub_8199D3C(decompress_and_copy_tile_data_to_vram(template->bg, gUnknown_0861EF64, 0, 0, 1), template->unk2, 64, 64, 1);
+ }
+
+ ChangeBgX(template->bg, 0, 0);
+ ChangeBgY(template->bg, 0, 0);
+ SetBgAttribute(template->bg, BG_CTRL_ATTR_SCREENSIZE, 1);
+ CpuCopy32(gUnknown_0861D140, &gPlttBufferUnfaded[0x70], 0x60);
+ *gUnknown_0203CF28 = template->bg;
+}
+
+bool32 sub_81C4E90(void)
+{
+ if (!free_temp_tile_data_buffers_if_possible())
+ {
+ ShowBg(*gUnknown_0203CF28);
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+void sub_81C4EB4(void)
+{
+ if (gUnknown_0203CF28 != NULL)
+ {
+ FREE_AND_SET_NULL(gUnknown_0203CF28);
+ }
+}
+
+void sub_81C4ED0(u32 a0)
+{
+ ChangeBgY(*gUnknown_0203CF28, a0 * 0x100, 0);
+}
diff --git a/src/wallclock.c b/src/wallclock.c
index 3d95d75ac..5be20d5c9 100644
--- a/src/wallclock.c
+++ b/src/wallclock.c
@@ -763,7 +763,7 @@ static void Task_SetClock3(u8 taskId)
static void Task_SetClock4(u8 taskId)
{
- switch (ProcessMenuInputNoWrap_())
+ switch (Menu_ProcessInputNoWrap_())
{
case 0:
PlaySE(SE_SELECT);