summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle/battle_anim_812C144.c1589
-rwxr-xr-xsrc/battle/battle_anim_813F0F4.c140
-rw-r--r--src/battle/battle_controller_linkopponent.c4
-rw-r--r--src/battle/battle_controller_linkpartner.c4
-rw-r--r--src/battle/battle_controller_opponent.c4
-rw-r--r--src/battle/battle_controller_player.c4
-rw-r--r--src/battle/battle_controller_wally.c4
-rw-r--r--src/battle/pokeball.c181
-rw-r--r--src/battle/post_battle_event_funcs.c5
-rw-r--r--src/birch_pc.c10
-rw-r--r--src/contest_effect.c180
-rw-r--r--src/data/heal_locations.h25
-rw-r--r--src/data/pokedex_orders.h3188
-rw-r--r--src/heal_location.c27
-rw-r--r--src/item_menu.c14
-rw-r--r--src/load_save.c32
-rw-r--r--src/pokedex.c9
-rw-r--r--src/pokemon_3.c15
-rw-r--r--src/pokemon_summary_screen.c2
-rw-r--r--src/pokenav_after.c5
-rw-r--r--src/pokenav_before.c4522
-rw-r--r--src/record_mixing.c22
-rw-r--r--src/region_map.c120
-rw-r--r--src/tv.c48
-rw-r--r--src/use_pokeblock.c10
25 files changed, 7636 insertions, 2528 deletions
diff --git a/src/battle/battle_anim_812C144.c b/src/battle/battle_anim_812C144.c
index 0e9c45023..6edc56549 100644
--- a/src/battle/battle_anim_812C144.c
+++ b/src/battle/battle_anim_812C144.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
+#include "blend_palette.h"
#include "contest.h"
#include "data2.h"
#include "decompress.h"
@@ -18,6 +19,7 @@ extern s16 gBattleAnimArgs[];
extern u8 gAnimBankAttacker;
extern u8 gAnimBankTarget;
extern u8 gAnimVisualTaskCount;
+extern u8 gAnimFriendship;
extern s32 gAnimMoveDmg;
extern u16 gBattle_WIN0H;
extern u16 gBattle_WIN0V;
@@ -30,6 +32,9 @@ extern u16 gBattle_BG2_Y;
extern const struct SpriteTemplate gBattleAnimSpriteTemplate_83D7220;
extern const struct SpriteTemplate gSpriteTemplate_8402500;
+extern const struct SpriteTemplate gSpriteTemplate_84028CC;
+extern const struct SpriteTemplate gSpriteTemplate_840294C;
+extern const struct SpriteTemplate gSpriteTemplate_84029AC;
extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18[];
extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[];
extern const union AffineAnimCmd gUnknown_08402400[];
@@ -38,6 +43,9 @@ extern const union AffineAnimCmd gUnknown_08402518[];
extern const union AffineAnimCmd gUnknown_08402540[];
extern const union AffineAnimCmd gUnknown_08402590[];
extern const union AffineAnimCmd gUnknown_08402610[];
+extern const union AffineAnimCmd gUnknown_08402750[];
+extern const union AffineAnimCmd gUnknown_084028AC[];
+extern const union AffineAnimCmd gUnknown_084029DC[];
extern const u32 gUnknown_08D2AA98[];
extern const u32 gUnknown_08D2A9E0[];
extern const u16 gUnknown_08D2AA80[];
@@ -45,11 +53,17 @@ extern const s8 gUnknown_084025C0[];
extern const s8 gUnknown_08402604[];
extern const u8 gUnknown_08402608[];
extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84025EC;
+extern const u8 gUnknown_08D2E014[];
+extern const u8 gUnknown_08D2E170[];
+extern const u16 gUnknown_08D2E150[];
extern u8 gBattleMonForms[];
extern u8 gBankSpriteIds[];
extern u16 gBattlerPartyIndexes[];
+extern s16 gUnknown_084028E4[];
extern u8 sub_8046234(s16 x, s16 y, u8 a3);
+extern void sub_80DA48C(struct Sprite *);
+extern void sub_80E3C4C(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u8 *arg8, const u8 *arg9, const u16 *palette);
static void sub_812C184(struct Sprite *sprite);
static void sub_812C268(struct Sprite *sprite);
@@ -82,7 +96,26 @@ static void sub_812EE00(struct Sprite *sprite);
static void sub_812EEEC(struct Sprite *sprite);
/*static*/ void sub_812F238(u8 taskId);
static void sub_812F290(u8 taskId);
-void sub_812F474(u8 taskId);
+static void sub_812F474(u8 taskId);
+static void sub_812F76C(u8 taskId);
+static void sub_812F8DC(struct Sprite *sprite);
+static void sub_812FE20(u8 taskId);
+static void sub_812FEB8(u8, bool8);
+static void sub_813003C(u8 taskId);
+static void sub_81301B4(struct Sprite *sprite);
+static void sub_81302E4(u8 taskId);
+static void sub_8130424(s16, s16, s16, s16, u8, u8, s16*, s16*);
+static void sub_81306A4(u8 taskId);
+static void sub_813085C(struct Sprite *sprite);
+static void sub_8130970(u8 taskId);
+static void sub_8130A94(struct Sprite *sprite);
+static void sub_8130B38(struct Sprite *sprite);
+static void sub_8130DBC(u8 taskId);
+static void sub_8130FE0(struct Sprite *sprite);
+static void sub_8131408(u8 taskId);
+static void sub_81315C8(struct Sprite *sprite);
+static void sub_8131810(u8 taskId);
+static void sub_8131838(struct Sprite *sprite);
void sub_812C144(struct Sprite *sprite)
@@ -2553,3 +2586,1557 @@ void sub_812F314(u8 taskId)
ScanlineEffect_SetParams(scanlineParams);
task->func = sub_812F474;
}
+
+static void sub_812F474(u8 taskId)
+{
+ struct Task *task;
+ s16 var1;
+ s16 var2;
+ s16 bgX, bgY;
+ s16 offset;
+ s16 var0;
+ s16 i;
+ s16 sineIndex;
+ s16 var3;
+
+ task = &gTasks[taskId];
+ if (GetBattlerPosition_permutated(task->data[5]) == 1)
+ {
+ bgX = gBattle_BG1_X;
+ bgY = gBattle_BG1_Y;
+ }
+ else
+ {
+ bgX = gBattle_BG2_X;
+ bgY = gBattle_BG2_Y;
+ }
+
+ switch (task->data[0])
+ {
+ case 0:
+ offset = task->data[14] * 2;
+ var1 = 0;
+ var2 = 0;
+ i = 0;
+ task->data[1] = (task->data[1] + 2) & 0xFF;
+ sineIndex = task->data[1];
+ task->data[9] = 0x7E0 / task->data[6];
+ task->data[10] = -((task->data[7] * 2) / task->data[9]);
+ task->data[11] = task->data[7];
+ var3 = task->data[11] >> 5;
+ task->data[12] = var3;
+ var0 = task->data[14];
+ while (var0 > task->data[13])
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset + 1] = (i - var2) + bgY;
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset] = bgX + var3 + (gSineTable[sineIndex] >> 5);
+ sineIndex = (sineIndex + 10) & 0xFF;
+ task->data[11] += task->data[10];
+ var3 = task->data[11] >> 5;
+ task->data[12] = var3;
+
+ i++;
+ offset -= 2;
+ var1 += task->data[6];
+ var2 = var1 >> 5;
+ var0--;
+ }
+
+ var0 *= 2;
+ while (var0 >= 0)
+ {
+ gScanlineEffectRegBuffers[0][var0] = bgX + 240;
+ gScanlineEffectRegBuffers[1][var0] = bgX + 240;
+ var0 -= 2;
+ }
+
+ if (++task->data[6] > 63)
+ {
+ task->data[6] = 64;
+ task->data[2]++;
+ if (task->data[2] & 1)
+ task->data[3]--;
+ else
+ task->data[4]++;
+
+ REG_BLDALPHA = (task->data[4] << 8) | task->data[3];
+ if (task->data[3] == 0 && task->data[4] == 16)
+ {
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[0]++;
+ }
+ }
+ else
+ {
+ task->data[7] += task->data[8];
+ }
+ break;
+ case 1:
+ if (++task->data[2] > 12)
+ {
+ gScanlineEffect.state = 3;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ task->data[2]++;
+ if (task->data[2] & 1)
+ task->data[3]++;
+ else
+ task->data[4]--;
+
+ REG_BLDALPHA = (task->data[4] << 8) | task->data[3];
+ if (task->data[3] == 16 && task->data[4] == 0)
+ {
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_812F724(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ sub_80798F4(&gTasks[taskId], task->data[15], &gUnknown_08402750);
+ task->func = sub_812F76C;
+}
+
+static void sub_812F76C(u8 taskId)
+{
+ u16 var0;
+
+ struct Task *task = &gTasks[taskId];
+ var0 = task->data[0];
+ task->data[0]++;
+ var0 -= 20;
+ if (var0 < 23)
+ {
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ if (task->data[2] & 1)
+ gSprites[task->data[15]].pos2.x = 1;
+ else
+ gSprites[task->data[15]].pos2.x = -1;
+ }
+ }
+ else
+ {
+ gSprites[task->data[15]].pos2.x = 0;
+ }
+
+ if (!sub_807992C(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_812F804(struct Sprite *sprite, s16 b, s16 c, s16 d, s16 e, u16 f)
+{
+ sprite->pos1.x = b;
+ sprite->pos1.y = c;
+ sprite->data[4] = b << 4;
+ sprite->data[5] = c << 4;
+ sprite->data[6] = ((d - b) << 4) / f;
+ sprite->data[7] = ((e - c) << 4) / f;
+}
+
+void sub_812F86C(struct Sprite *sprite)
+{
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+}
+
+void sub_812F88C(struct Sprite *sprite)
+{
+ s16 x = sprite->pos1.x;
+ s16 y = sprite->pos1.y;
+
+ sub_8078650(sprite);
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
+ sub_812F804(sprite, sprite->pos1.x, sprite->pos1.y, x, y, 64);
+ sprite->data[0] = 0;
+ sprite->callback = sub_812F8DC;
+}
+
+static void sub_812F8DC(struct Sprite *sprite)
+{
+ int index;
+
+ sprite->data[0]++;
+ index = (sprite->data[0] * 8) & 0xFF;
+ sub_812F86C(sprite);
+ sprite->pos2.y = Sin(index, 8);
+ if (sprite->data[0] > 58)
+ {
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ sprite->invisible = sprite->data[2] & 1;
+ if (sprite->data[2] > 3)
+ move_anim_8074EE0(sprite);
+ }
+ }
+}
+
+void sub_812F948(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[3];
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
+ if (GetBattlerSide(gAnimBankTarget) != B_SIDE_PLAYER)
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3) + gBattleAnimArgs[2];
+ sprite->callback = sub_80DA48C;
+}
+
+static void sub_812F9B0(u8 taskId)
+{
+ u16 var0 = 0;
+ u16 var1 = 0;
+
+ gTasks[taskId].data[0]--;
+ if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1))
+ {
+ if (gTasks[taskId].data[9] == 0)
+ {
+ gTasks[taskId].data[9] = gTasks[taskId].data[4];
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ }
+ else
+ {
+ gTasks[taskId].data[9] = 0;
+ }
+
+ if (gTasks[taskId].data[10] == 0)
+ {
+ gTasks[taskId].data[10] = gTasks[taskId].data[5];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+ else
+ {
+ gTasks[taskId].data[10] = 0;
+ }
+
+ gTasks[taskId].data[1] = gTasks[taskId].data[13];
+ }
+
+ var0 = gTasks[taskId].data[7];
+ var1 = gTasks[taskId].data[8];
+ if (gTasks[taskId].data[2] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8);
+
+ if (gTasks[taskId].data[3] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8);
+
+ if (gTasks[taskId].data[0] < 1)
+ {
+ DestroyTask(taskId);
+ gAnimVisualTaskCount--;
+ }
+}
+
+static void sub_812FAF8(u8 taskId)
+{
+ u16 var0 = 0;
+ u16 var1 = 0;
+
+ gTasks[taskId].data[0]--;
+ if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1))
+ {
+ if (gTasks[taskId].data[9] == 0)
+ {
+ gTasks[taskId].data[9] = gTasks[taskId].data[4];
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ }
+ else
+ {
+ gTasks[taskId].data[9] = var0;
+ }
+
+ if (gTasks[taskId].data[10] == 0)
+ {
+ gTasks[taskId].data[10] = gTasks[taskId].data[5];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+ else
+ {
+ gTasks[taskId].data[10] = 0;
+ }
+
+ gTasks[taskId].data[1] = gTasks[taskId].data[13];
+ }
+
+ var0 = (gTasks[taskId].data[2] & 0x7FFF) + gTasks[taskId].data[7];
+ var1 = (gTasks[taskId].data[3] & 0x7FFF) + gTasks[taskId].data[8];
+ if (gTasks[taskId].data[2] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8);
+
+ if (gTasks[taskId].data[3] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8);
+
+ gTasks[taskId].data[7] = var0;
+ gTasks[taskId].data[8] = var1;
+ if (gTasks[taskId].data[0] < 1)
+ {
+ gTasks[taskId].data[0] = 30;
+ gTasks[taskId].data[13] = 0;
+ gTasks[taskId].func = sub_812F9B0;
+ }
+}
+
+void sub_812FC68(u8 taskId)
+{
+ gTasks[taskId].data[15] = gBankSpriteIds[gAnimBankAttacker];
+ gTasks[taskId].data[14] = gBattleAnimArgs[0];
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[13] = gBattleAnimArgs[6];
+ if (gBattleAnimArgs[3])
+ gTasks[taskId].data[6] = gTasks[taskId].data[6] | -0x8000;
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ {
+ gTasks[taskId].data[2] = gBattleAnimArgs[1];
+ gTasks[taskId].data[3] = gBattleAnimArgs[2];
+ }
+ else
+ {
+ if (gBattleAnimArgs[1] & 0x8000)
+ gTasks[taskId].data[2] = gBattleAnimArgs[1] & 0x7FFF;
+ else
+ gTasks[taskId].data[2] = gBattleAnimArgs[1] | -0x8000;
+
+ if (gBattleAnimArgs[2] & 0x8000)
+ gTasks[taskId].data[3] = gBattleAnimArgs[2] & 0x7FFF;
+ else
+ gTasks[taskId].data[3] = gBattleAnimArgs[2] | -0x8000;
+ }
+
+ gTasks[taskId].data[8] = 0;
+ gTasks[taskId].data[7] = 0;
+ gTasks[taskId].data[4] = gBattleAnimArgs[4];
+ gTasks[taskId].data[5] = gBattleAnimArgs[5];
+ gTasks[taskId].func = sub_812FAF8;
+}
+
+void sub_812FD7C(u8 taskId)
+{
+ u8 battler;
+ struct Task *task = &gTasks[taskId];
+
+ if (gBattleAnimArgs[1] == 0)
+ DestroyAnimVisualTask(taskId);
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = gBattleAnimArgs[1];
+ if (gBattleAnimArgs[0] == 0)
+ battler = gAnimBankAttacker;
+ else
+ battler = gAnimBankTarget;
+
+ task->data[4] = GetBattlerSpriteCoord(battler, 0);
+ task->data[5] = GetBattlerSpriteCoord(battler, 1);
+ task->data[6] = sub_8079E90(battler);
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ sub_80798F4(task, task->data[15], &gUnknown_084028AC);
+ task->func = sub_812FE20;
+}
+
+static void sub_812FE20(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] == 6)
+ sub_812FEB8(taskId, TRUE);
+
+ if (task->data[1] == 18)
+ sub_812FEB8(taskId, FALSE);
+
+ if (!sub_807992C(task))
+ {
+ if (--task->data[3] == 0)
+ {
+ task->data[0]++;
+ }
+ else
+ {
+ task->data[1] = 0;
+ sub_80798F4(task, task->data[15], &gUnknown_084028AC);
+ }
+ }
+ break;
+ case 1:
+ if (task->data[2] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_812FEB8(u8 taskId, bool8 arg1)
+{
+ u8 i;
+ s8 xOffset, yOffset;
+ struct Task *task;
+ s16 xCoords[4];
+ s16 yCoords[2];
+
+ task = &gTasks[taskId];
+ if (!arg1)
+ {
+ xOffset = 18;
+ yOffset = -20;
+ }
+ else
+ {
+ xOffset = 30;
+ yOffset = 20;
+ }
+
+ xCoords[0] = task->data[4] - xOffset;
+ xCoords[1] = task->data[4] - xOffset - 4;
+ xCoords[2] = task->data[4] + xOffset;
+ xCoords[3] = task->data[4] + xOffset + 4;
+ yCoords[0] = task->data[5] + yOffset;
+ yCoords[1] = task->data[5] + yOffset + 6;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 spriteId = CreateSprite(&gSpriteTemplate_84028CC, xCoords[i], yCoords[i & 1], task->data[6] - 5);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = i < 2 ? -2 : 2;
+ gSprites[spriteId].data[2] = -1;
+ gSprites[spriteId].data[3] = taskId;
+ gSprites[spriteId].data[4] = 2;
+ task->data[2]++;
+ }
+ }
+}
+
+void sub_812FF94(struct Sprite *sprite)
+{
+ sprite->pos1.x += sprite->data[1];
+ sprite->pos1.y += sprite->data[2];
+ if (++sprite->data[0] > 6)
+ {
+ gTasks[sprite->data[3]].data[sprite->data[4]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_812FFE4(u8 taskId)
+{
+ u8 spriteId;
+
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = gBattleAnimArgs[1];
+ spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ gTasks[taskId].data[2] = 0x100 + gSprites[spriteId].oam.paletteNum * 16;
+ gTasks[taskId].func = sub_813003C;
+}
+
+static void sub_813003C(u8 taskId)
+{
+ if (gTasks[taskId].data[1])
+ {
+ BlendPalette(gTasks[taskId].data[2], 16, 8, gUnknown_084028E4[gTasks[taskId].data[0]]);
+ if (++gTasks[taskId].data[0] > 23)
+ gTasks[taskId].data[0] = 0;
+
+ gTasks[taskId].data[1]--;
+ }
+ else
+ {
+ BlendPalette(gTasks[taskId].data[2], 16, 0, RGB(0, 0, 0));
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_81300A4(u8 taskId)
+{
+ sub_80E3C4C(
+ taskId,
+ 0,
+ 0x1A0,
+ gAnimBankAttacker,
+ gBattleAnimArgs[0],
+ 10,
+ 2,
+ 30,
+ gUnknown_08D2E014,
+ gUnknown_08D2E170,
+ gUnknown_08D2E150);
+}
+
+void sub_81300F4(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 1) + gBattleAnimArgs[1];
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->data[0] = 640;
+ sprite->data[1] = -640;
+ }
+ else if (gBattleAnimArgs[2] == 1)
+ {
+ sprite->vFlip = 1;
+ sprite->data[0] = 640;
+ sprite->data[1] = 640;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 640;
+ }
+
+ if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->data[0] = -sprite->data[0];
+ sprite->hFlip = 1;
+ }
+
+ sprite->callback = sub_81301B4;
+}
+
+static void sub_81301B4(struct Sprite *sprite)
+{
+ sprite->data[6] += sprite->data[0];
+ sprite->data[7] += sprite->data[1];
+ sprite->pos2.x = sprite->data[6] >> 8;
+ sprite->pos2.y = sprite->data[7] >> 8;
+ if (++sprite->data[5] == 14)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81301EC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (IsContest())
+ {
+ task->data[5] = 8;
+ task->data[6] = 3;
+ task->data[7] = 1;
+ }
+ else
+ {
+ task->data[5] = 12;
+ task->data[6] = 3;
+ task->data[7] = 0;
+ }
+
+ if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER)
+ task->data[11] = GetBattlerSpriteCoord(gAnimBankAttacker, 2) + sub_807A100(gAnimBankAttacker, 0) / 4;
+ else
+ task->data[11] = GetBattlerSpriteCoord(gAnimBankAttacker, 2) - sub_807A100(gAnimBankAttacker, 0) / 4;
+
+ task->data[12] = GetBattlerSpriteCoord(gAnimBankAttacker, 3) - sub_807A100(gAnimBankAttacker, 0) / 4;
+ task->data[13] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ task->data[14] = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ task->func = sub_81302E4;
+}
+
+static void sub_81302E4(u8 taskId)
+{
+ u8 i;
+ s16 x, y;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 3)
+ {
+ task->data[1] = 0;
+ sub_8130424(
+ task->data[11],
+ task->data[12],
+ task->data[13],
+ task->data[14],
+ task->data[5],
+ task->data[2],
+ &x,
+ &y);
+
+ for (i = 0; i < 2; i++)
+ {
+ u8 spriteId = CreateSprite(&gSpriteTemplate_840294C, x, y, 35);
+ if (spriteId != MAX_SPRITES)
+ {
+ if (task->data[7] == 0)
+ {
+ if (i == 0)
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = -task->data[6];
+ else
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = task->data[6];
+ }
+ else
+ {
+ if (i == 0)
+ {
+ gSprites[spriteId].pos2.x = -task->data[6];
+ gSprites[spriteId].pos2.y = task->data[6];
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = task->data[6];
+ gSprites[spriteId].pos2.y = -task->data[6];
+ }
+ }
+
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = taskId;
+ gSprites[spriteId].data[2] = 10;
+ task->data[10]++;
+ }
+ }
+
+ if (task->data[2] == task->data[5])
+ task->data[0]++;
+
+ task->data[2]++;
+ }
+ break;
+ case 1:
+ if (task->data[10] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_8130424(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y)
+{
+ int x2;
+ int y2;
+
+ if (arg5 == 0)
+ {
+ *x = arg0;
+ *y = arg1;
+ return;
+ }
+
+ if (arg5 >= arg4)
+ {
+ *x = arg2;
+ *y = arg3;
+ return;
+ }
+
+ arg4--;
+ x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4);
+ y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4);
+ *x = x2 >> 8;
+ *y = y2 >> 8;
+}
+
+void sub_81304DC(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 36)
+ {
+ gTasks[sprite->data[1]].data[sprite->data[2]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_813051C(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->data[0] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData(sprite, DestroyAnimSprite);
+ sprite->callback = sub_8078CC0;
+}
+
+void sub_8130554(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[11] = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ task->data[12] = GetBattlerSpriteCoord(gAnimBankAttacker, 3);
+ task->data[13] = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ task->data[14] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + sub_807A100(gAnimBankTarget, 0) / 4;
+ task->data[15] = CreateSprite(&gSpriteTemplate_84029AC, task->data[11], task->data[12], sub_8079E90(gAnimBankTarget) - 5);
+ if (task->data[15] != MAX_SPRITES)
+ {
+ gSprites[task->data[15]].data[0] = 16;
+ gSprites[task->data[15]].data[2] = task->data[13];
+ gSprites[task->data[15]].data[4] = task->data[14];
+ gSprites[task->data[15]].data[5] = -32;
+ InitAnimArcTranslation(&gSprites[task->data[15]]);
+ if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_OPPONENT)
+ StartSpriteAffineAnim(&gSprites[task->data[15]], 1);
+
+ task->func = sub_81306A4;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void sub_81306A4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ TranslateAnimArc(&gSprites[task->data[15]]);
+ if (++task->data[2] > 7)
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ if (TranslateAnimArc(&gSprites[task->data[15]]))
+ {
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ gSprites[task->data[15]].invisible = task->data[2] & 1;
+ if (task->data[2] == 16)
+ {
+ FreeOamMatrix(gSprites[task->data[15]].oam.matrixNum);
+ DestroySprite(&gSprites[task->data[15]]);
+ task->data[0]++;
+ }
+ }
+ break;
+ case 3:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_81307B0(struct Sprite *sprite)
+{
+ u8 battler;
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gAnimBankAttacker;
+ else
+ battler = gAnimBankTarget;
+
+ sprite->oam.tileNum += 16;
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1;
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3);
+ if (gBattleAnimArgs[1] == 0)
+ {
+ sprite->oam.matrixNum |= 0x8;
+ sprite->pos1.x = sub_807A100(battler, 4) - 8;
+ }
+ else
+ {
+ sprite->pos1.x = sub_807A100(battler, 5) + 8;
+ }
+
+ sprite->callback = sub_813085C;
+}
+
+static void sub_813085C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.x += sprite->data[7];
+ if (++sprite->data[2] == 12)
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] == 8)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->pos2.x -= sprite->data[7] * 4;
+ if (++sprite->data[1] == 6)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ sprite->pos2.x += sprite->data[7] * 3;
+ if (++sprite->data[1] == 8)
+ {
+ if (--sprite->data[6])
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]--;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+ }
+ break;
+ }
+}
+
+void sub_8130918(u8 taskId)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[0] = gBattleAnimArgs[1];
+ gTasks[taskId].data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ sub_80798F4(&gTasks[taskId], gTasks[taskId].data[15], &gUnknown_084029DC);
+ gTasks[taskId].func = sub_8130970;
+ }
+}
+
+static void sub_8130970(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if (!(task->data[2] & 1))
+ gSprites[task->data[15]].pos2.x = 2;
+ else
+ gSprites[task->data[15]].pos2.x = -2;
+ }
+
+ if (!sub_807992C(task))
+ {
+ gSprites[task->data[15]].pos2.x = 0;
+ if (--task->data[0])
+ {
+ sub_80798F4(&gTasks[taskId], gTasks[taskId].data[15], &gUnknown_084029DC);
+ task->data[1] = 0;
+ task->data[2] = 0;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_8130A2C(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2);
+ sprite->pos1.y = sub_807A100(gAnimBankAttacker, 2);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 2);
+ sprite->pos1.y = sub_807A100(gAnimBankTarget, 2);
+ }
+
+ if (sprite->pos1.y < 8)
+ sprite->pos1.y = 8;
+
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = 0;
+ sprite->data[3] = gBattleAnimArgs[2];
+ sprite->callback = sub_8130A94;
+}
+
+static void sub_8130A94(struct Sprite *sprite)
+{
+ if (++sprite->data[0] >= sprite->data[1])
+ {
+ sprite->data[0] = 0;
+ sprite->data[2] = (sprite->data[2] + 1) & 1;
+ sprite->invisible = sprite->data[2];
+ if (sprite->data[2] && --sprite->data[3] == 0)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_8130AEC(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->oam.matrixNum |= 0x8;
+ sprite->pos1.x = 100;
+ sprite->data[7] = 1;
+ }
+ else
+ {
+ sprite->pos1.x = 140;
+ sprite->data[7] = -1;
+ }
+
+ sprite->pos1.y = 56;
+ sprite->callback = sub_8130B38;
+}
+
+static void sub_8130B38(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.y -= sprite->data[7] * 2;
+ if (sprite->data[1] & 1)
+ sprite->pos1.x -= sprite->data[7] * 2;
+
+ if (++sprite->data[1] == 9)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] == 4)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[1]++;
+ sprite->pos1.y += sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 12)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ if (++sprite->data[1] == 2)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ sprite->data[1]++;
+ sprite->pos1.y -= sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 12)
+ sprite->data[0]++;
+ break;
+ case 5:
+ sprite->data[1]++;
+ sprite->pos1.y += sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 15)
+ sprite->oam.tileNum += 16;
+
+ if (sprite->data[1] == 18)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 6:
+ sprite->pos1.x += sprite->data[7] * 6;
+ if (++sprite->data[1] == 9)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 7:
+ sprite->pos1.x += sprite->data[7] * 2;
+ if (++sprite->data[1] == 1)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 8:
+ sprite->pos1.x -= sprite->data[7] * 3;
+ if (++sprite->data[1] == 5)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_8130D20(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[15] = GetAnimBattlerSpriteId(0);
+ if (!IsContest())
+ {
+ if (IsDoubleBattle() == TRUE)
+ {
+ int x = GetBattlerSpriteCoord(gAnimBankAttacker, 0);
+ int y = GetBattlerSpriteCoord(gAnimBankAttacker ^ 2, 0);
+ if (x > y)
+ task->data[14] = 1;
+ else
+ task->data[14] = -1;
+ }
+ else
+ {
+ if (GetBattlerSide(gAnimBankAttacker) == B_SIDE_PLAYER)
+ task->data[14] = -1;
+ else
+ task->data[14] = 1;
+ }
+ }
+ else
+ {
+ task->data[14] = 1;
+ }
+
+ task->func = sub_8130DBC;
+}
+
+static void sub_8130DBC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] == 13)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ gSprites[task->data[15]].pos2.x -= task->data[14] * 3;
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ gSprites[task->data[15]].pos2.x += task->data[14] * 3;
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ if (++task->data[1] == 2)
+ {
+ task->data[1] = 0;
+ if (task->data[2] == 0)
+ {
+ task->data[2]++;
+ task->data[0] = 1;
+ }
+ else
+ {
+ task->data[0]++;
+ }
+ }
+ break;
+ case 4:
+ gSprites[task->data[15]].pos2.x += task->data[14];
+ if (++task->data[1] == 3)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 5:
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 6:
+ gSprites[task->data[15]].pos2.x -= task->data[14] * 4;
+ if (++task->data[1] == 5)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 7:
+ gSprites[task->data[15]].pos2.x += task->data[14] * 4;
+ if (++task->data[1] == 5)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 8:
+ gSprites[task->data[15]].pos2.x = 0;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8130F5C(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ InitAnimSpritePos(sprite, 1);
+ sprite->data[7] = gAnimBankAttacker;
+ }
+ else
+ {
+ sprite->data[7] = gAnimBankTarget;
+ }
+
+ if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT)
+ sprite->oam.matrixNum = 8;
+
+ sprite->oam.priority = sub_8079ED4(sprite->data[7]);
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ sprite->callback = sub_8130FE0;
+}
+
+static void sub_8130FE0(struct Sprite *sprite)
+{
+ u16 x, y;
+
+ switch (sprite->data[5])
+ {
+ case 0:
+ switch (sprite->data[6])
+ {
+ default:
+ sprite->data[6] = 0;
+ case 0:
+ case 4:
+ x = sub_807A100(sprite->data[7], 5) - 4;
+ y = sub_807A100(sprite->data[7], 3) - 4;
+ break;
+ case 1:
+ x = sub_807A100(sprite->data[7], 5) - 4;
+ y = sub_807A100(sprite->data[7], 2) + 4;
+ break;
+ case 2:
+ x = sub_807A100(sprite->data[7], 4) + 4;
+ y = sub_807A100(sprite->data[7], 3) - 4;
+ break;
+ case 3:
+ x = sub_807A100(sprite->data[7], 4) + 4;
+ y = sub_807A100(sprite->data[7], 2) - 4;
+ break;
+ case 5:
+ x = GetBattlerSpriteCoord(sprite->data[7], 2);
+ y = GetBattlerSpriteCoord(sprite->data[7], 3);
+ break;
+ }
+
+ if (sprite->data[6] == 4)
+ sprite->data[0] = 24;
+ else if (sprite->data[6] == 5)
+ sprite->data[0] = 6;
+ else
+ sprite->data[0] = 12;
+
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = x;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = y;
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5]++;
+ break;
+ case 1:
+ if (TranslateAnimLinear(sprite))
+ {
+ switch (sprite->data[6])
+ {
+ default:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 0;
+ sprite->data[5]++;
+ sprite->data[6]++;
+ break;
+ case 4:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[5] = 0;
+ sprite->data[6]++;
+ break;
+ case 5:
+ sprite->data[0] = 0;
+ sprite->data[1] = 16;
+ sprite->data[2] = 0;
+ sprite->data[5] = 3;
+ break;
+ }
+ }
+ break;
+ case 2:
+ if (++sprite->data[0] == 4)
+ sprite->data[5] = 0;
+ break;
+ case 3:
+ if (!(sprite->data[0] & 1))
+ sprite->data[1]--;
+ else
+ sprite->data[2]++;
+
+ REG_BLDALPHA = (sprite->data[2] << 8) | sprite->data[1];
+ if (++sprite->data[0] == 32)
+ {
+ sprite->invisible = 1;
+ sprite->data[5]++;
+ }
+ break;
+ case 4:
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+static void sub_81311E4(struct Sprite *sprite)
+{
+ sprite->pos2.x = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4];
+ sprite->pos2.y = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4];
+ if (!(sprite->data[5] & 1))
+ {
+ CreateSprite(
+ &gSpriteTemplate_8402500,
+ sprite->pos1.x + sprite->pos2.x,
+ sprite->pos1.y + sprite->pos2.y, 5);
+ }
+
+ if (sprite->data[5] == sprite->data[4])
+ DestroyAnimSprite(sprite);
+
+ sprite->data[5]++;
+}
+
+void sub_8131264(struct Sprite *sprite)
+{
+ GetBattlerSpriteCoord(gAnimBankTarget, 2); // unused local variable
+ GetBattlerSpriteCoord(gAnimBankTarget, 3); // unused local variable
+
+ if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER || IsContest())
+ {
+ sprite->data[0] = sprite->pos1.x - gBattleAnimArgs[0];
+ sprite->data[2] = sprite->pos1.x - gBattleAnimArgs[2];
+ }
+ else
+ {
+ sprite->data[0] = sprite->pos1.x + gBattleAnimArgs[0];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ }
+
+ sprite->data[1] = sprite->pos1.y + gBattleAnimArgs[1];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[3];
+ sprite->data[4] = gBattleAnimArgs[4];
+ sprite->pos1.x = sprite->data[0];
+ sprite->pos1.y = sprite->data[1];
+ sprite->callback = sub_81311E4;
+}
+
+void sub_81312E4(u8 taskId)
+{
+ int i;
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ sub_8078E70(spriteId, 0);
+ gTasks[taskId].data[1] = 0x100;
+ gTasks[taskId].data[2] = 0x100;
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 1)
+ {
+ gTasks[taskId].data[1] += 0x60;
+ gTasks[taskId].data[2] -= 0xD;
+ obj_id_set_rotscale(spriteId, gTasks[taskId].data[1], gTasks[taskId].data[2], 0);
+ if (++gTasks[taskId].data[3] == 9)
+ {
+ gTasks[taskId].data[3] = 0;
+ sub_8078F40(spriteId);
+ gSprites[spriteId].invisible = 1;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else
+ {
+ refresh_graphics_maybe(gAnimBankAttacker, 0, spriteId);
+ if (IsContest())
+ {
+ gSprites[gBankSpriteIds[gAnimBankAttacker]].affineAnims = gSpriteAffineAnimTable_81E7C18;
+ StartSpriteAffineAnim(&gSprites[gBankSpriteIds[gAnimBankAttacker]], 0);
+ }
+
+ for (i = 0; i < 16; i++)
+ gTasks[taskId].data[i] = 0;
+
+ gTasks[taskId].func = sub_8131408;
+ }
+}
+
+static void sub_8131408(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gSprites[spriteId].pos2.y = -200;
+ gSprites[spriteId].pos2.x = 200;
+ gSprites[spriteId].invisible = 0;
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[10] += 112;
+ gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8;
+ if (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y >= -32)
+ gSprites[spriteId].pos2.x = 0;
+
+ if (gSprites[spriteId].pos2.y > 0)
+ gSprites[spriteId].pos2.y = 0;
+
+ if (gSprites[spriteId].pos2.y == 0)
+ {
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ gTasks[taskId].data[10] -= 0x800;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ gTasks[taskId].data[10] -= 112;
+ if (gTasks[taskId].data[10] < 0)
+ gTasks[taskId].data[10] = 0;
+
+ gSprites[spriteId].pos2.y -= gTasks[taskId].data[10] >> 8;
+ if (gTasks[taskId].data[10] == 0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ gTasks[taskId].data[10] += 112;
+ gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8;
+ if (gSprites[spriteId].pos2.y > 0)
+ gSprites[spriteId].pos2.y = 0;
+
+ if (gSprites[spriteId].pos2.y == 0)
+ {
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_8131564(struct Sprite *sprite)
+{
+ s16 y2;
+
+ if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER)
+ {
+ sprite->subpriority = sub_8079E90(gAnimBankTarget) - 2;
+ y2 = -144;
+ }
+ else
+ {
+ sprite->subpriority = sub_8079E90(gAnimBankTarget) + 2;
+ y2 = -96;
+ }
+
+ sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankTarget, 3);
+ sprite->pos2.y = y2;
+ sprite->callback = sub_81315C8;
+}
+
+static void sub_81315C8(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos2.y += 10;
+ if (sprite->pos2.y >= 0)
+ {
+ PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ sprite->data[1] += 4;
+ sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3);
+ if (sprite->data[1] > 127)
+ {
+ PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
+ sprite->data[1] = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[1] += 6;
+ sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 4);
+ if (sprite->data[1] > 127)
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ if (++sprite->data[1] > 8)
+ {
+ PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63));
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ if (++sprite->data[1] > 8)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ sprite->invisible = sprite->data[2] & 1;
+ if (sprite->data[2] == 7)
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_81316F8(u8 taskId)
+{
+ s16 spriteId1, spriteId2;
+
+ if (IsContest())
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ spriteId1 = duplicate_obj_of_side_rel2move_in_transparent_mode(1);
+ if (spriteId1 < 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ spriteId2 = duplicate_obj_of_side_rel2move_in_transparent_mode(1);
+ if (spriteId2 < 0)
+ {
+ obj_delete_but_dont_free_vram(&gSprites[spriteId1]);
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ gSprites[spriteId2].pos2.x += 24;
+ gSprites[spriteId1].pos2.x -= 24;
+ gSprites[spriteId2].data[0] = 0;
+ gSprites[spriteId1].data[0] = 0;
+ gSprites[spriteId2].data[1] = 0;
+ gSprites[spriteId1].data[1] = 0;
+ gSprites[spriteId2].data[2] = 0;
+ gSprites[spriteId1].data[2] = 0;
+ gSprites[spriteId2].data[3] = 16;
+ gSprites[spriteId1].data[3] = -16;
+ gSprites[spriteId2].data[4] = 0;
+ gSprites[spriteId1].data[4] = 128;
+ gSprites[spriteId2].data[5] = 24;
+ gSprites[spriteId1].data[5] = 24;
+ gSprites[spriteId2].data[6] = taskId;
+ gSprites[spriteId1].data[6] = taskId;
+ gSprites[spriteId2].data[7] = 0;
+ gSprites[spriteId1].data[7] = 0;
+ gTasks[taskId].data[0] = 2;
+ gSprites[spriteId2].invisible = 0;
+ gSprites[spriteId1].invisible = 1;
+ gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[spriteId1].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[spriteId2].callback = sub_8131838;
+ gSprites[spriteId1].callback = sub_8131838;
+ gTasks[taskId].func = sub_8131810;
+}
+
+static void sub_8131810(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_8131838(struct Sprite *sprite)
+{
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible ^= 1;
+ }
+
+ sprite->data[4] = (sprite->data[4] + sprite->data[3]) & 0xFF;
+ sprite->pos2.x = Cos(sprite->data[4], sprite->data[5]);
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[2] == 60)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[2] > 0)
+ {
+ sprite->data[2] = 0;
+ sprite->data[5] -= 2;
+ if (sprite->data[5] < 0)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ obj_delete_but_dont_free_vram(sprite);
+ }
+ }
+ break;
+ }
+}
diff --git a/src/battle/battle_anim_813F0F4.c b/src/battle/battle_anim_813F0F4.c
index 219395baf..f112c59aa 100755
--- a/src/battle/battle_anim_813F0F4.c
+++ b/src/battle/battle_anim_813F0F4.c
@@ -36,13 +36,13 @@ extern u8 gEffectBank;
extern const u8 gUnknown_08D2EE48[];
extern const u8 gUnknown_08D2EDFC[];
extern const u16 gUnknown_08D2E150[];
-extern const struct CompressedSpritePalette gUnknown_0840B2B8[];
-extern const struct SpriteTemplate gSpriteTemplate_840B3B4[];
+extern const struct CompressedSpritePalette gBallOpenParticlePalettes[];
+extern const struct SpriteTemplate gSpriteTemplates_840B3B4[];
extern const struct SpriteTemplate gSpriteTemplate_8402500;
extern const struct SpriteTemplate gBattleAnimSpriteTemplate_84024E8;
-extern const u8 gUnknown_0840B378[];
-extern const struct CompressedSpriteSheet gUnknown_0840B258[];
-extern const TaskFunc gUnknown_0840B384[];
+extern const u8 gBallOpenParticleAnimNums[];
+extern const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[];
+extern const TaskFunc gBallOpenParticleAnimationFuncs[];
extern const u16 gUnknown_0840B4D4[];
extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
@@ -69,12 +69,12 @@ static void sub_81404E4(struct Sprite *sprite);
static void sub_81405C8(struct Sprite *sprite);
static void sub_81406BC(struct Sprite *sprite);
static void sub_81407F4(struct Sprite *sprite);
-static void sub_8140A08(struct Sprite *sprite);
-static void sub_8140A28(struct Sprite *sprite);
-static void sub_8141294(struct Sprite *sprite);
-static void sub_8140ECC(struct Sprite *sprite);
-static void sub_8140FF8(struct Sprite *sprite);
-static void sub_8141230(struct Sprite *sprite);
+static void PokeBallOpenParticleAnimation_Step1(struct Sprite *sprite);
+static void PokeBallOpenParticleAnimation_Step2(struct Sprite *sprite);
+static void DestroyBallOpenAnimationParticle(struct Sprite *sprite);
+static void FanOutBallOpenParticles_Step1(struct Sprite *sprite);
+static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *sprite);
+static void PremierBallOpenParticleAnimation_Step1(struct Sprite *sprite);
static void sub_81413DC(u8 taskId);
static void sub_814146C(u8 taskId);
static void sub_81414BC(u8 taskId);
@@ -338,7 +338,7 @@ void sub_813F844(u8 taskId)
y = GetBattlerSpriteCoord(gAnimBankAttacker, 1);
priority = gSprites[spriteId].oam.priority;
subpriority = gSprites[spriteId].subpriority;
- gTasks[taskId].data[10] = sub_814086C(x, y + 32, priority, subpriority, ballIndex);
+ gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballIndex);
selectedPalettes = sub_80791A8(1, 0, 0, 0, 0, 0, 0);
gTasks[taskId].data[11] = sub_8141314(0, gAnimBankAttacker, selectedPalettes, ballIndex);
gTasks[taskId].data[0]++;
@@ -353,14 +353,14 @@ void sub_813F844(u8 taskId)
void sub_813F990(u8 taskId)
{
u8 ballIndex = ball_number_to_ball_processing_index(gLastUsedItem);
- sub_80478DC(ballIndex);
+ LoadBallGraphics(ballIndex);
DestroyAnimVisualTask(taskId);
}
void sub_813F9B8(u8 taskId)
{
u8 ballIndex = ball_number_to_ball_processing_index(gLastUsedItem);
- sub_804794C(ballIndex);
+ FreeBallGraphics(ballIndex);
DestroyAnimVisualTask(taskId);
}
@@ -526,7 +526,7 @@ static void sub_813FDC0(struct Sprite *sprite)
if (ballIndex2 < 0)
return;
- sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballIndex);
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballIndex);
sub_8141314(0, gAnimBankTarget, 14, ballIndex);
}
}
@@ -946,7 +946,7 @@ static void sub_81405F4(struct Sprite *sprite)
if (ballIndex2 < 0)
goto LABEL;
- sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballIndex);
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballIndex);
sub_8141314(1, gAnimBankTarget, 14, ballIndex);
LABEL:
@@ -1090,17 +1090,17 @@ _08140868: .4byte gDoingBattleAnim\n\
}
#endif // NONMATCHING
-u8 sub_814086C(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballIndex)
+u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballIndex)
{
u8 taskId;
- if (GetSpriteTileStartByTag(gUnknown_0840B258[ballIndex].tag) == 0xFFFF)
+ if (GetSpriteTileStartByTag(gBallOpenParticleSpritesheets[ballIndex].tag) == 0xFFFF)
{
- LoadCompressedObjectPic(&gUnknown_0840B258[ballIndex]);
- LoadCompressedObjectPalette(&gUnknown_0840B2B8[ballIndex]);
+ LoadCompressedObjectPic(&gBallOpenParticleSpritesheets[ballIndex]);
+ LoadCompressedObjectPalette(&gBallOpenParticlePalettes[ballIndex]);
}
- taskId = CreateTask(gUnknown_0840B384[ballIndex], 5);
+ taskId = CreateTask(gBallOpenParticleAnimationFuncs[ballIndex], 5);
gTasks[taskId].data[1] = x;
gTasks[taskId].data[2] = y;
gTasks[taskId].data[3] = priority;
@@ -1113,7 +1113,7 @@ u8 sub_814086C(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballIndex)
return taskId;
}
-void sub_8140930(u8 taskId)
+void PokeBallOpenParticleAnimation(u8 taskId)
{
u8 spriteId;
u8 x, y;
@@ -1129,9 +1129,9 @@ void sub_8140930(u8 taskId)
priority = gTasks[taskId].data[3];
subpriority = gTasks[taskId].data[4];
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8140A08;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = PokeBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
var0 = (u8)gTasks[taskId].data[0];
@@ -1150,24 +1150,24 @@ void sub_8140930(u8 taskId)
gTasks[taskId].data[0]++;
}
-static void sub_8140A08(struct Sprite *sprite)
+static void PokeBallOpenParticleAnimation_Step1(struct Sprite *sprite)
{
if (sprite->data[1] == 0)
- sprite->callback = sub_8140A28;
+ sprite->callback = PokeBallOpenParticleAnimation_Step2;
else
sprite->data[1]--;
}
-static void sub_8140A28(struct Sprite *sprite)
+static void PokeBallOpenParticleAnimation_Step2(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]);
sprite->data[1] += 2;
if (sprite->data[1] == 50)
- sub_8141294(sprite);
+ DestroyBallOpenAnimationParticle(sprite);
}
-void sub_8140A64(u8 taskId)
+void TimerBallOpenParticleAnimation(u8 taskId)
{
u8 i;
u8 x, y, priority, subpriority, ballIndex;
@@ -1181,9 +1181,9 @@ void sub_8140A64(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8140ECC;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
gSprites[spriteId].data[4] = 10;
@@ -1195,7 +1195,7 @@ void sub_8140A64(u8 taskId)
DestroyTask(taskId);
}
-void sub_8140B3C(u8 taskId)
+void DiveBallOpenParticleAnimation(u8 taskId)
{
u8 i;
u8 x, y, priority, subpriority, ballIndex;
@@ -1209,9 +1209,9 @@ void sub_8140B3C(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8140ECC;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
gSprites[spriteId].data[4] = 10;
@@ -1223,7 +1223,7 @@ void sub_8140B3C(u8 taskId)
DestroyTask(taskId);
}
-void sub_8140C14(u8 taskId)
+void SafariBallOpenParticleAnimation(u8 taskId)
{
u8 i;
u8 x, y, priority, subpriority, ballIndex;
@@ -1237,9 +1237,9 @@ void sub_8140C14(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8140ECC;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
gSprites[spriteId].data[4] = 4;
@@ -1251,7 +1251,7 @@ void sub_8140C14(u8 taskId)
DestroyTask(taskId);
}
-void sub_8140CE8(u8 taskId)
+void UltraBallOpenParticleAnimation(u8 taskId)
{
u8 i;
u8 x, y, priority, subpriority, ballIndex;
@@ -1265,9 +1265,9 @@ void sub_8140CE8(u8 taskId)
for (i = 0; i < 10; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8140ECC;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 25;
gSprites[spriteId].data[4] = 5;
@@ -1279,7 +1279,7 @@ void sub_8140CE8(u8 taskId)
DestroyTask(taskId);
}
-void sub_8140DC4(u8 taskId)
+void GreatBallOpenParticleAnimation(u8 taskId)
{
u8 i;
u8 x, y, priority, subpriority, ballIndex;
@@ -1299,9 +1299,9 @@ void sub_8140DC4(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8140ECC;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
gSprites[spriteId].data[4] = 8;
@@ -1318,7 +1318,7 @@ void sub_8140DC4(u8 taskId)
}
}
-static void sub_8140ECC(struct Sprite *sprite)
+static void FanOutBallOpenParticles_Step1(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
sprite->pos2.y = Cos(sprite->data[0], sprite->data[2]);
@@ -1326,10 +1326,10 @@ static void sub_8140ECC(struct Sprite *sprite)
sprite->data[1] += sprite->data[5];
sprite->data[2] += sprite->data[6];
if (++sprite->data[3] == 51)
- sub_8141294(sprite);
+ DestroyBallOpenAnimationParticle(sprite);
}
-void sub_8140F24(u8 taskId)
+void RepeatBallOpenParticleAnimation(u8 taskId)
{
u8 i;
u8 x, y, priority, subpriority, ballIndex;
@@ -1343,9 +1343,9 @@ void sub_8140F24(u8 taskId)
for (i = 0; i < 12; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8140FF8;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = RepeatBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 21;
}
@@ -1354,7 +1354,7 @@ void sub_8140F24(u8 taskId)
DestroyTask(taskId);
}
-static void sub_8140FF8(struct Sprite *sprite)
+static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0], sprite->data[2]));
@@ -1362,10 +1362,10 @@ static void sub_8140FF8(struct Sprite *sprite)
sprite->data[1]++;
sprite->data[2]++;
if (++sprite->data[3] == 51)
- sub_8141294(sprite);
+ DestroyBallOpenAnimationParticle(sprite);
}
-void sub_8141058(u8 taskId)
+void MasterBallOpenParticleAnimation(u8 taskId)
{
u8 i, j;
u8 x, y, priority, subpriority, ballIndex;
@@ -1381,9 +1381,9 @@ void sub_8141058(u8 taskId)
{
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8140ECC;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
gSprites[spriteId].data[4] = 8;
@@ -1405,7 +1405,7 @@ void sub_8141058(u8 taskId)
DestroyTask(taskId);
}
-void sub_8141164(u8 taskId)
+void PremierBallOpenParticleAnimation(u8 taskId)
{
u8 i;
u8 x, y, priority, subpriority, ballIndex;
@@ -1419,9 +1419,9 @@ void sub_8141164(u8 taskId)
for (i = 0; i < 8; i++)
{
- spriteId = CreateSprite(&gSpriteTemplate_840B3B4[ballIndex], x, y, subpriority);
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840B378[ballIndex]);
- gSprites[spriteId].callback = sub_8141230;
+ spriteId = CreateSprite(&gSpriteTemplates_840B3B4[ballIndex], x, y, subpriority);
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballIndex]);
+ gSprites[spriteId].callback = PremierBallOpenParticleAnimation_Step1;
gSprites[spriteId].oam.priority = priority;
gSprites[spriteId].data[0] = i * 32;
}
@@ -1430,7 +1430,7 @@ void sub_8141164(u8 taskId)
DestroyTask(taskId);
}
-static void sub_8141230(struct Sprite *sprite)
+static void PremierBallOpenParticleAnimation_Step1(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0] & 0x3F, sprite->data[2]));
@@ -1438,10 +1438,10 @@ static void sub_8141230(struct Sprite *sprite)
sprite->data[1]++;
sprite->data[2]++;
if (++sprite->data[3] == 51)
- sub_8141294(sprite);
+ DestroyBallOpenAnimationParticle(sprite);
}
-static void sub_8141294(struct Sprite *sprite)
+static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
{
int i;
int temp;
@@ -1460,8 +1460,8 @@ static void sub_8141294(struct Sprite *sprite)
{
for (i = 0; i < 12; i++)
{
- FreeSpriteTilesByTag(gUnknown_0840B258[i].tag);
- FreeSpritePaletteByTag(gUnknown_0840B2B8[i].tag);
+ FreeSpriteTilesByTag(gBallOpenParticleSpritesheets[i].tag);
+ FreeSpritePaletteByTag(gBallOpenParticlePalettes[i].tag);
}
DestroySprite(sprite);
diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c
index 8ca3d160a..f9c8fe7d1 100644
--- a/src/battle/battle_controller_linkopponent.c
+++ b/src/battle/battle_controller_linkopponent.c
@@ -62,7 +62,7 @@ extern void sub_8037A74(void);
extern void sub_8032984(u8, u16);
extern void sub_8037E30(void);
extern void sub_80312F0(struct Sprite *);
-extern u8 sub_8046400();
+extern u8 StartSendOutMonAnimation();
extern void sub_8032A08();
extern void sub_8043DB0();
extern void sub_8037BBC(void);
@@ -1195,7 +1195,7 @@ void sub_8039430(u8 a, u8 b)
StartSpriteAnim(&gSprites[gBankSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBankSpriteIds[a]].invisible = TRUE;
gSprites[gBankSpriteIds[a]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_0300434C[a]].data[0] = sub_8046400(0, 0xFE);
+ gSprites[gUnknown_0300434C[a]].data[0] = StartSendOutMonAnimation(0, 0xFE);
}
void LinkOpponentHandleReturnPokeToBall(void)
diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c
index dff4edfc1..38514bfb5 100644
--- a/src/battle/battle_controller_linkpartner.c
+++ b/src/battle/battle_controller_linkpartner.c
@@ -79,7 +79,7 @@ extern void sub_80105EC(struct Sprite *);
extern s32 sub_803FC34(u16);
extern void LoadPlayerTrainerBankSprite();
extern void sub_80313A0(struct Sprite *);
-extern u8 sub_8046400();
+extern u8 StartSendOutMonAnimation();
extern void sub_80312F0(struct Sprite *);
extern u8 CreateInvisibleSpriteWithCallback();
extern void BattleLoadPlayerMonSprite();
@@ -1143,7 +1143,7 @@ void sub_811F864(u8 a, u8 b)
StartSpriteAnim(&gSprites[gBankSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBankSpriteIds[a]].invisible = TRUE;
gSprites[gBankSpriteIds[a]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_0300434C[a]].data[0] = sub_8046400(0, 0xFF);
+ gSprites[gUnknown_0300434C[a]].data[0] = StartSendOutMonAnimation(0, 0xFF);
}
void LinkPartnerHandleReturnPokeToBall(void)
diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c
index ee313c098..a7e99900b 100644
--- a/src/battle/battle_controller_opponent.c
+++ b/src/battle/battle_controller_opponent.c
@@ -74,7 +74,7 @@ extern u8 GetBattlerPosition(u8);
extern void sub_8032984(u8, u16);
extern void sub_80333D4(void);
extern void sub_80312F0(struct Sprite *);
-extern u8 sub_8046400();
+extern u8 StartSendOutMonAnimation();
extern void sub_8032A08();
extern void sub_8043DB0();
extern void sub_8033160(void);
@@ -1168,7 +1168,7 @@ void sub_803495C(u8 a, u8 b)
StartSpriteAnim(&gSprites[gBankSpriteIds[a]], gBattleMonForms[a]);
gSprites[gBankSpriteIds[a]].invisible = TRUE;
gSprites[gBankSpriteIds[a]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_0300434C[a]].data[0] = sub_8046400(0, 0xFE);
+ gSprites[gUnknown_0300434C[a]].data[0] = StartSendOutMonAnimation(0, 0xFE);
}
void OpponentHandleReturnPokeToBall(void)
diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c
index 654a2c195..de8b1579b 100644
--- a/src/battle/battle_controller_player.c
+++ b/src/battle/battle_controller_player.c
@@ -126,7 +126,7 @@ extern void sub_802DEAC(void);
extern void sub_80312F0(struct Sprite *);
extern u8 GetBattlerSpriteCoord();
extern u8 sub_8077F68();
-extern u8 sub_8046400();
+extern u8 StartSendOutMonAnimation();
extern void sub_802D798(void);
extern void bx_0802E404(void);
extern u8 gActiveBattler;
@@ -2523,7 +2523,7 @@ void sub_802F934(u8 bank, u8 b)
StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], gBattleMonForms[bank]);
gSprites[gBankSpriteIds[bank]].invisible = TRUE;
gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_0300434C[bank]].data[0] = sub_8046400(0, 0xFF);
+ gSprites[gUnknown_0300434C[bank]].data[0] = StartSendOutMonAnimation(0, 0xFF);
}
void PlayerHandleReturnPokeToBall(void)
diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c
index 312ef9d12..a7ce7d27d 100644
--- a/src/battle/battle_controller_wally.c
+++ b/src/battle/battle_controller_wally.c
@@ -88,7 +88,7 @@ extern void oamt_add_pos2_onto_pos1();
extern void StartAnimLinearTranslation(struct Sprite *);
extern void sub_8030E38(struct Sprite *);
extern void StoreSpriteCallbackInData();
-extern u8 sub_8046400();
+extern u8 StartSendOutMonAnimation();
extern u8 GetBattlerSpriteCoord();
extern u8 sub_8077F68();
extern u8 sub_8079E90();
@@ -1518,7 +1518,7 @@ void sub_81398BC(u8 bank)
StartSpriteAnim(&gSprites[gBankSpriteIds[bank]], gBattleMonForms[bank]);
gSprites[gBankSpriteIds[bank]].invisible = TRUE;
gSprites[gBankSpriteIds[bank]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_0300434C[bank]].data[0] = sub_8046400(0, 0xFF);
+ gSprites[gUnknown_0300434C[bank]].data[0] = StartSendOutMonAnimation(0, 0xFF);
}
void sub_8139A2C(u8 taskId)
diff --git a/src/battle/pokeball.c b/src/battle/pokeball.c
index ac15246d6..abfdf2c3d 100644
--- a/src/battle/pokeball.c
+++ b/src/battle/pokeball.c
@@ -300,7 +300,7 @@ const struct SpriteTemplate gBallSpriteTemplates[] =
extern void InitAnimArcTranslation();
extern bool8 TranslateAnimArc(struct Sprite *);
-static void sub_8046464(u8);
+static void SendOutMonAnimation(u8);
static void sub_80466E8(struct Sprite *);
static void sub_80466F4(struct Sprite *);
static void sub_8046760(struct Sprite *);
@@ -312,10 +312,10 @@ static void sub_8046C78(struct Sprite *);
static void sub_8046E7C(struct Sprite *);
static void sub_8046E9C(struct Sprite *);
static void sub_8046FBC(struct Sprite *);
-static void sub_8047074(struct Sprite *);
-static void sub_80470C4(struct Sprite *);
-static void sub_8047230(struct Sprite *);
-static void sub_8047254(struct Sprite *);
+static void SendOutPlayerMonAnimation_Step0(struct Sprite *);
+static void SendOutPlayerMonAnimation_Step1(struct Sprite *);
+static void SendOutMonAnimation_Delay(struct Sprite *);
+static void SendOutOpponentMonAnimation_Step0(struct Sprite *);
static void sub_80473D0(struct Sprite *);
static void sub_804748C(struct Sprite *);
static void sub_8047638(struct Sprite *);
@@ -324,28 +324,28 @@ static void sub_8047754(struct Sprite *);
static void sub_804780C(struct Sprite *);
static void sub_8047830(struct Sprite *);
static void oamc_804BEB4(struct Sprite *);
-static u16 sub_8047978(u8);
+static u16 GetBattlerBall(u8);
-u8 sub_8046400(u16 a, u8 b)
+u8 StartSendOutMonAnimation(u16 a, u8 side)
{
u8 taskId;
gDoingBattleAnim = 1;
ewram17810[gActiveBattler].unk0_3 = 1;
- taskId = CreateTask(sub_8046464, 5);
+ taskId = CreateTask(SendOutMonAnimation, 5);
gTasks[taskId].data[1] = a;
- gTasks[taskId].data[2] = b;
+ gTasks[taskId].data[2] = side;
gTasks[taskId].data[3] = gActiveBattler;
return 0;
}
-static void sub_8046464(u8 taskId)
+static void SendOutMonAnimation(u8 taskId)
{
- bool8 sp0 = FALSE;
- u16 r8;
- u8 r5;
+ bool8 debug = FALSE;
+ u16 side;
+ u8 battler;
u16 ball;
- u8 r4;
+ u8 ballIndex;
u8 spriteId;
if (gTasks[taskId].data[0] == 0)
@@ -353,44 +353,49 @@ static void sub_8046464(u8 taskId)
gTasks[taskId].data[0]++;
return;
}
- r8 = gTasks[taskId].data[2];
- r5 = gTasks[taskId].data[3];
- if (GetBattlerSide(r5) != 0)
- ball = GetMonData(&gEnemyParty[gBattlerPartyIndexes[r5]], MON_DATA_POKEBALL);
+
+ side = gTasks[taskId].data[2];
+ battler = gTasks[taskId].data[3];
+ if (GetBattlerSide(battler) != B_SIDE_PLAYER)
+ ball = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_POKEBALL);
else
- ball = GetMonData(&gPlayerParty[gBattlerPartyIndexes[r5]], MON_DATA_POKEBALL);
- r4 = ball_number_to_ball_processing_index(ball);
- sub_80478DC(r4);
- spriteId = CreateSprite(&gBallSpriteTemplates[r4], 32, 80, 0x1D);
+ ball = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_POKEBALL);
+
+ ballIndex = ball_number_to_ball_processing_index(ball);
+ LoadBallGraphics(ballIndex);
+ spriteId = CreateSprite(&gBallSpriteTemplates[ballIndex], 32, 80, 29);
gSprites[spriteId].data[0] = 0x80;
gSprites[spriteId].data[1] = 0;
- gSprites[spriteId].data[7] = r8;
- switch (r8)
+ gSprites[spriteId].data[7] = side;
+
+ switch (side)
{
- case 0xFF:
- gBankTarget = r5;
+ case 0xFF: // Player's side
+ gBankTarget = battler;
gSprites[spriteId].pos1.x = 24;
gSprites[spriteId].pos1.y = 68;
- gSprites[spriteId].callback = sub_8047074;
+ gSprites[spriteId].callback = SendOutPlayerMonAnimation_Step0;
break;
- case 0xFE:
- gSprites[spriteId].pos1.x = GetBattlerSpriteCoord(r5, 0);
- gSprites[spriteId].pos1.y = GetBattlerSpriteCoord(r5, 1) + 24;
- gBankTarget = r5;
+ case 0xFE: // Opponent's side
+ gSprites[spriteId].pos1.x = GetBattlerSpriteCoord(battler, 0);
+ gSprites[spriteId].pos1.y = GetBattlerSpriteCoord(battler, 1) + 24;
+ gBankTarget = battler;
gSprites[spriteId].data[0] = 0;
- gSprites[spriteId].callback = sub_8047254;
+ gSprites[spriteId].callback = SendOutOpponentMonAnimation_Step0;
break;
default:
gBankTarget = GetBattlerAtPosition(1);
- sp0 = TRUE;
+ debug = TRUE;
break;
}
+
gSprites[spriteId].data[6] = gBankTarget;
- if (!sp0)
+ if (!debug)
{
DestroyTask(taskId);
return;
}
+
gSprites[spriteId].data[0] = 0x22;
gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBankTarget, 0);
gSprites[spriteId].data[4] = GetBattlerSpriteCoord(gBankTarget, 1) - 16;
@@ -418,8 +423,8 @@ static void objc_0804ABD4(struct Sprite *sprite)
sprite->pos2.x = 0;
sprite->pos2.y = 0;
sprite->data[5] = 0;
- r4 = ball_number_to_ball_processing_index(sub_8047978(r5));
- sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4);
+ r4 = ball_number_to_ball_processing_index(GetBattlerBall(r5));
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4);
sprite->data[0] = sub_8141314(0, r5, 14, r4);
sprite->data[6] = r5;
sprite->data[7] = r8;
@@ -693,34 +698,35 @@ static void sub_8046AD0(u8 taskId)
static void sub_8046C78(struct Sprite *sprite)
{
- u8 r5 = sprite->data[6];
- u32 r4; // not sure of this type
+ int ballIndex;
+ u8 battler = sprite->data[6];
StartSpriteAnim(sprite, 1);
- r4 = ball_number_to_ball_processing_index(sub_8047978(r5));
- sub_814086C(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, r4);
- sprite->data[0] = sub_8141314(1, sprite->data[6], 14, r4);
+ ballIndex = ball_number_to_ball_processing_index(GetBattlerBall(battler));
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballIndex);
+ sprite->data[0] = sub_8141314(1, sprite->data[6], 14, ballIndex);
sprite->callback = sub_8046E9C;
if (gMain.inBattle)
{
- struct Pokemon *pkmn;
+ struct Pokemon *mon;
u16 species;
- s8 r8;
- u16 r4_2;
+ s8 cryPanning;
+ u16 cryBehavior;
u8 taskId;
- if (GetBattlerSide(r5) != 0)
+ if (GetBattlerSide(battler) != 0)
{
- pkmn = &gEnemyParty[gBattlerPartyIndexes[r5]];
- r8 = 25;
+ mon = &gEnemyParty[gBattlerPartyIndexes[battler]];
+ cryPanning = 25;
}
else
{
- pkmn = &gPlayerParty[gBattlerPartyIndexes[r5]];
- r8 = -25;
+ mon = &gPlayerParty[gBattlerPartyIndexes[battler]];
+ cryPanning = -25;
}
- species = GetMonData(pkmn, MON_DATA_SPECIES);
- if ((r5 == GetBattlerAtPosition(0) || r5 == GetBattlerAtPosition(1))
+
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ if ((battler == GetBattlerAtPosition(0) || battler == GetBattlerAtPosition(1))
&& IsDoubleBattle() && ewram17840.unk9_0)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
@@ -733,18 +739,21 @@ static void sub_8046C78(struct Sprite *sprite)
m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128);
}
}
+
if (!IsDoubleBattle() || !ewram17840.unk9_0)
- r4_2 = 0;
- else if (r5 == GetBattlerAtPosition(0) || r5 == GetBattlerAtPosition(1))
- r4_2 = 1;
+ cryBehavior = 0;
+ else if (battler == GetBattlerAtPosition(0) || battler == GetBattlerAtPosition(1))
+ cryBehavior = 1;
else
- r4_2 = 2;
+ cryBehavior = 2;
+
taskId = CreateTask(sub_8046AD0, 3);
gTasks[taskId].data[0] = species;
- gTasks[taskId].data[1] = r8;
- gTasks[taskId].data[2] = r4_2;
+ gTasks[taskId].data[1] = cryPanning;
+ gTasks[taskId].data[2] = cryBehavior;
gTasks[taskId].data[15] = 0;
}
+
StartSpriteAffineAnim(&gSprites[gBankSpriteIds[sprite->data[6]]], 1);
AnimateSprite(&gSprites[gBankSpriteIds[sprite->data[6]]]);
gSprites[gBankSpriteIds[sprite->data[6]]].data[1] = 0x1000;
@@ -795,7 +804,7 @@ static void sub_8046E9C(struct Sprite *sprite)
if (r3 == 4)
{
for (i = 0; i < 12; i++)
- sub_804794C(i);
+ FreeBallGraphics(i);
}
}
}
@@ -825,7 +834,7 @@ static void sub_8046FBC(struct Sprite *sprite)
}
}
-static void sub_8047074(struct Sprite *sprite)
+static void SendOutPlayerMonAnimation_Step0(struct Sprite *sprite)
{
sprite->data[0] = 25;
sprite->data[2] = GetBattlerSpriteCoord(sprite->data[6], 2);
@@ -833,12 +842,12 @@ static void sub_8047074(struct Sprite *sprite)
sprite->data[5] = -30;
sprite->oam.affineParam = sprite->data[6];
InitAnimArcTranslation(sprite);
- sprite->callback = sub_80470C4;
+ sprite->callback = SendOutPlayerMonAnimation_Step1;
}
#define HIBYTE(x) (((x) >> 8) & 0xFF)
-static void sub_80470C4(struct Sprite *sprite)
+static void SendOutPlayerMonAnimation_Step1(struct Sprite *sprite)
{
u32 r6;
u32 r7;
@@ -855,6 +864,7 @@ static void sub_80470C4(struct Sprite *sprite)
sprite->data[2] = ((sprite->data[2] / 3) & ~1) | r7;
StartSpriteAffineAnim(sprite, 4);
}
+
r4 = sprite->data[0];
TranslateAnimLinear(sprite);
sprite->data[7] += sprite->data[6] / 3;
@@ -864,6 +874,7 @@ static void sub_80470C4(struct Sprite *sprite)
sprite->data[0] = r4;
else
sprite->data[0] = r4 - 1;
+
if (HIBYTE(sprite->data[7]) >= 80)
{
r6 = sprite->data[1] & 1;
@@ -882,17 +893,17 @@ static void sub_80470C4(struct Sprite *sprite)
sprite->pos2.x = 0;
sprite->data[6] = sprite->oam.affineParam & 0xFF;
sprite->data[0] = 0;
- if (IsDoubleBattle() && ewram17840.unk9_0
- && sprite->data[6] == GetBattlerAtPosition(2))
- sprite->callback = sub_8047230;
+ if (IsDoubleBattle() && ewram17840.unk9_0 && sprite->data[6] == GetBattlerAtPosition(2))
+ sprite->callback = SendOutMonAnimation_Delay;
else
sprite->callback = sub_8046C78;
+
StartSpriteAffineAnim(sprite, 0);
}
}
}
-static void sub_8047230(struct Sprite *sprite)
+static void SendOutMonAnimation_Delay(struct Sprite *sprite)
{
if (sprite->data[0]++ > 24)
{
@@ -901,15 +912,14 @@ static void sub_8047230(struct Sprite *sprite)
}
}
-static void sub_8047254(struct Sprite *sprite)
+static void SendOutOpponentMonAnimation_Step0(struct Sprite *sprite)
{
sprite->data[0]++;
if (sprite->data[0] > 15)
{
sprite->data[0] = 0;
- if (IsDoubleBattle() && ewram17840.unk9_0
- && sprite->data[6] == GetBattlerAtPosition(3))
- sprite->callback = sub_8047230;
+ if (IsDoubleBattle() && ewram17840.unk9_0 && sprite->data[6] == GetBattlerAtPosition(3))
+ sprite->callback = SendOutMonAnimation_Delay;
else
sprite->callback = sub_8046C78;
}
@@ -917,7 +927,7 @@ static void sub_8047254(struct Sprite *sprite)
static u8 sub_80472B0(u8 a, u8 b, u8 c, u8 d)
{
- return sub_814086C(a, b, c, d, 0);
+ return AnimateBallOpenParticles(a, b, c, d, 0);
}
static u8 sub_80472D8(u8 a, u8 b, u32 c)
@@ -1155,38 +1165,39 @@ static void oamc_804BEB4(struct Sprite *sprite)
}
}
-void sub_80478DC(u8 a)
+void LoadBallGraphics(u8 ballIndex)
{
- u16 var;
+ u16 tileStart;
- if (GetSpriteTileStartByTag(sBallSpriteSheets[a].tag) == 0xFFFF)
+ if (GetSpriteTileStartByTag(sBallSpriteSheets[ballIndex].tag) == 0xFFFF)
{
- LoadCompressedObjectPic(&sBallSpriteSheets[a]);
- LoadCompressedObjectPalette(&sBallSpritePalettes[a]);
+ LoadCompressedObjectPic(&sBallSpriteSheets[ballIndex]);
+ LoadCompressedObjectPalette(&sBallSpritePalettes[ballIndex]);
}
- switch (a)
+
+ switch (ballIndex)
{
case 6:
case 10:
case 11:
break;
default:
- var = GetSpriteTileStartByTag(sBallSpriteSheets[a].tag);
- LZDecompressVram(gUnknown_08D030D0, (void *)(VRAM + 0x10100 + var * 32));
+ tileStart = GetSpriteTileStartByTag(sBallSpriteSheets[ballIndex].tag);
+ LZDecompressVram(gUnknown_08D030D0, (void *)(VRAM + 0x10100 + tileStart * 32));
break;
}
}
-void sub_804794C(u8 a)
+void FreeBallGraphics(u8 ballIndex)
{
- FreeSpriteTilesByTag(sBallSpriteSheets[a].tag);
- FreeSpritePaletteByTag(sBallSpritePalettes[a].tag);
+ FreeSpriteTilesByTag(sBallSpriteSheets[ballIndex].tag);
+ FreeSpritePaletteByTag(sBallSpritePalettes[ballIndex].tag);
}
-static u16 sub_8047978(u8 a)
+static u16 GetBattlerBall(u8 battler)
{
- if (GetBattlerSide(a) == 0)
- return GetMonData(&gPlayerParty[gBattlerPartyIndexes[a]], MON_DATA_POKEBALL);
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_POKEBALL);
else
- return GetMonData(&gEnemyParty[gBattlerPartyIndexes[a]], MON_DATA_POKEBALL);
+ return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_POKEBALL);
}
diff --git a/src/battle/post_battle_event_funcs.c b/src/battle/post_battle_event_funcs.c
index a44cf028b..d0fbbec85 100644
--- a/src/battle/post_battle_event_funcs.c
+++ b/src/battle/post_battle_event_funcs.c
@@ -6,6 +6,7 @@
#include "pokemon.h"
#include "overworld.h"
#include "script_pokemon_80C4.h"
+#include "constants/heal_locations.h"
extern u8 gUnknown_02039324;
@@ -32,9 +33,9 @@ int GameClear(void)
SetSecretBase2Field_9();
if (gSaveBlock2.playerGender == MALE)
- sub_80537CC(1);
+ sub_80537CC(HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F);
else
- sub_80537CC(2);
+ sub_80537CC(HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F);
ribbonGet = FALSE;
diff --git a/src/birch_pc.c b/src/birch_pc.c
index 4b0025504..2a76b3c8c 100644
--- a/src/birch_pc.c
+++ b/src/birch_pc.c
@@ -87,24 +87,24 @@ const u8 *GetPokedexRatingText(u16 count)
return gBirchDexRatingText_LessThan180;
if (count < 190)
return gBirchDexRatingText_LessThan190;
- if (count < 200)
+ if (count < HOENN_DEX_COUNT - 2)
return gBirchDexRatingText_LessThan200;
- if (count == 200)
+ if (count == HOENN_DEX_COUNT - 2)
{
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
|| GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200.
return gBirchDexRatingText_LessThan200;
return gBirchDexRatingText_DexCompleted;
}
- if (count == 201)
+ if (count == HOENN_DEX_COUNT - 1)
{
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
&& GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200.
return gBirchDexRatingText_LessThan200;
return gBirchDexRatingText_DexCompleted;
}
- if (count == 202)
- return gBirchDexRatingText_DexCompleted; // Hoenn dex is considered complete, even though the hoenn dex count is 210.
+ if (count == HOENN_DEX_COUNT)
+ return gBirchDexRatingText_DexCompleted; // Hoenn dex is considered complete, a count of 202 means Jirachi and Deoxys are obtained
return gBirchDexRatingText_LessThan10;
}
diff --git a/src/contest_effect.c b/src/contest_effect.c
index a5615851f..17779a0c6 100644
--- a/src/contest_effect.c
+++ b/src/contest_effect.c
@@ -158,10 +158,8 @@ static void ContestEffect_StartlePrevMons(void)
u8 a = shared192D0.contestant;
if (shared192D0.turnOrder[a] != 0) {
- int i;
- int j = 0;
-
- for (i = 0; i < 4; i++)
+ int i, j;
+ for (i = 0, j = 0; i < 4; i++)
if (shared192D0.turnOrder[a] > shared192D0.turnOrder[i])
shared192D0.jamQueue[j++] = i;
shared192D0.jamQueue[j] = 0xFF;
@@ -617,150 +615,40 @@ static void ContestEffect_QualityDependsOnTiming(void)
sContestantStatus[shared192D0.contestant].appeal2 = appeal;
}
-#ifdef NONMATCHING
-// Not even close, send help
-// Works well if it’s the same type as the one before.
static void ContestEffect_BetterIfSameType(void)
{
- s8 r4;
- s8 r2;
+ s8 turnOrder = shared192D0.turnOrder[shared192D0.contestant];
+ s8 i = turnOrder - 1, j;
+ u16 move;
- for (r4 = shared192D0.turnOrder[shared192D0.contestant]; r4 > 0; r4--)
+ if (turnOrder == 0)
+ return;
+
+ while (1)
{
- for (r2 = 0; r2 < 4; r2++)
+ for (j = 0; j < 4; j++)
{
- if (shared192D0.turnOrder[r2] == r4 - 1)
+ if (shared192D0.turnOrder[j] == i)
break;
}
- if (!(sContestantStatus[r2].noMoreTurns || sContestantStatus[r2].nervous || sContestantStatus[r2].numTurnsSkipped))
+ if (sContestantStatus[j].noMoreTurns || sContestantStatus[j].nervous || sContestantStatus[j].numTurnsSkipped)
+ {
+ if (--i < 0)
+ return;
+ }
+ else
{
- u16 move = sContestantStatus[shared192D0.contestant].currMove;
-
- if (gContestMoves[move].contestCategory == gContestMoves[sContestantStatus[r2].currMove].contestCategory)
- {
- sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
- SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
- }
break;
}
}
+
+ move = sContestantStatus[shared192D0.contestant].currMove;
+ if (gContestMoves[move].contestCategory == gContestMoves[sContestantStatus[j].currMove].contestCategory)
+ {
+ sContestantStatus[shared192D0.contestant].appeal2 += gContestEffects[gContestMoves[move].effect].appeal * 2;
+ SetContestantEffectStringID(shared192D0.contestant, CONTEST_STRING_SAME_TYPE_GOOD);
+ }
}
-#else
-NAKED void ContestEffect_BetterIfSameType(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tldr r1, _080B8940 @ =gSharedMem + 0x192D0\n"
- "\tldrb r0, [r1, 0x11]\n"
- "\tadds r0, r1\n"
- "\tmovs r2, 0\n"
- "\tldrsb r2, [r0, r2]\n"
- "\tsubs r0, r2, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tmov r12, r1\n"
- "\tcmp r2, 0\n"
- "\tbeq _080B8994\n"
- "\tldrb r5, [r1]\n"
- "\tmov r6, r12\n"
- "\tsubs r6, 0x70\n"
- "_080B88EA:\n"
- "\tmovs r2, 0\n"
- "\tlsls r0, r4, 24\n"
- "\tasrs r1, r0, 24\n"
- "\tadds r4, r0, 0\n"
- "\tcmp r5, r1\n"
- "\tbeq _080B8910\n"
- "\tldr r3, _080B8940 @ =gSharedMem + 0x192D0\n"
- "_080B88F8:\n"
- "\tlsls r0, r2, 24\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 17\n"
- "\tadds r0, r2\n"
- "\tlsrs r2, r0, 24\n"
- "\tasrs r0, 24\n"
- "\tcmp r0, 0x3\n"
- "\tbgt _080B8910\n"
- "\tadds r0, r3\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, r1\n"
- "\tbne _080B88F8\n"
- "_080B8910:\n"
- "\tlsls r2, 24\n"
- "\tasrs r1, r2, 24\n"
- "\tlsls r0, r1, 3\n"
- "\tsubs r0, r1\n"
- "\tlsls r0, 2\n"
- "\tadds r3, r0, r6\n"
- "\tldrb r1, [r3, 0xB]\n"
- "\tmovs r0, 0x80\n"
- "\tands r0, r1\n"
- "\tadds r7, r2, 0\n"
- "\tcmp r0, 0\n"
- "\tbne _080B8932\n"
- "\tldrb r1, [r3, 0xC]\n"
- "\tmovs r0, 0x7\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080B8944\n"
- "_080B8932:\n"
- "\tmovs r1, 0xFF\n"
- "\tlsls r1, 24\n"
- "\tadds r0, r4, r1\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r0, 0\n"
- "\tblt _080B8994\n"
- "\tb _080B88EA\n"
- "\t.align 2, 0\n"
- "_080B8940: .4byte gSharedMem + 0x192D0\n"
- "_080B8944:\n"
- "\tmov r2, r12\n"
- "\tldrb r1, [r2, 0x11]\n"
- "\tlsls r0, r1, 3\n"
- "\tsubs r0, r1\n"
- "\tlsls r0, 2\n"
- "\tmov r3, r12\n"
- "\tsubs r3, 0x70\n"
- "\tadds r5, r0, r3\n"
- "\tldrh r0, [r5, 0x6]\n"
- "\tldr r4, _080B899C @ =gContestMoves\n"
- "\tlsls r0, 3\n"
- "\tadds r6, r0, r4\n"
- "\tldrb r2, [r6, 0x1]\n"
- "\tlsls r2, 29\n"
- "\tasrs r1, r7, 24\n"
- "\tlsls r0, r1, 3\n"
- "\tsubs r0, r1\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r3\n"
- "\tldrh r0, [r0, 0x6]\n"
- "\tlsls r0, 3\n"
- "\tadds r0, r4\n"
- "\tldrb r0, [r0, 0x1]\n"
- "\tlsls r0, 29\n"
- "\tcmp r2, r0\n"
- "\tbne _080B8994\n"
- "\tldr r1, _080B89A0 @ =gContestEffects\n"
- "\tldrb r0, [r6]\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r1\n"
- "\tldrb r0, [r0, 0x1]\n"
- "\tlsls r0, 1\n"
- "\tldrh r1, [r5, 0x2]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r5, 0x2]\n"
- "\tmov r2, r12\n"
- "\tldrb r0, [r2, 0x11]\n"
- "\tmovs r1, 0x1F\n"
- "\tbl SetContestantEffectStringID\n"
- "_080B8994:\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_080B899C: .4byte gContestMoves\n"
- "_080B89A0: .4byte gContestEffects");
-}
-#endif
// Works well if different in type than the one before.
static void ContestEffect_BetterIfDiffType(void)
@@ -1113,16 +1001,20 @@ static bool8 WasAtLeastOneOpponentJammed(void)
shared192D0.jam2 = 10;
SetContestantEffectStringID(contestant, CONTEST_STRING_LITTLE_DISTRACTED);
}
- else if ((shared192D0.jam2 -= sContestantStatus[contestant].jamReduction) <= 0)
- {
- shared192D0.jam2 = 0;
- SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED);
- }
else
{
- JamContestant(contestant, shared192D0.jam2);
- SetStartledString(contestant, shared192D0.jam2);
- jamBuffer[contestant] = shared192D0.jam2;
+ shared192D0.jam2 -= sContestantStatus[contestant].jamReduction;
+ if (shared192D0.jam2 <= 0)
+ {
+ shared192D0.jam2 = 0;
+ SetContestantEffectStringID(contestant, CONTEST_STRING_NOT_FAZED);
+ }
+ else
+ {
+ JamContestant(contestant, shared192D0.jam2);
+ SetStartledString(contestant, shared192D0.jam2);
+ jamBuffer[contestant] = shared192D0.jam2;
+ }
}
}
}
diff --git a/src/data/heal_locations.h b/src/data/heal_locations.h
new file mode 100644
index 000000000..f764981bf
--- /dev/null
+++ b/src/data/heal_locations.h
@@ -0,0 +1,25 @@
+static const struct HealLocation sHealLocations[] =
+{
+ {MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), 4, 2},
+ {MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_2F), 4, 2},
+ {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), 20, 17},
+ {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), 19, 20},
+ {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), 22, 6},
+ {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), 16, 39},
+ {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), 5, 7},
+ {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), 24, 15},
+ {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), 28, 17},
+ {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), 43, 32},
+ {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 27, 49},
+ {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 5, 9},
+ {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 14, 9},
+ {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), 6, 17},
+ {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), 2, 11},
+ {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), 9, 7},
+ {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), 14, 8},
+ {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), 16, 4},
+ {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), 8, 16},
+ {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 18, 6},
+ {MAP_GROUP(BATTLE_TOWER_OUTSIDE), MAP_NUM(BATTLE_TOWER_OUTSIDE), 14, 9},
+ {MAP_GROUP(SOUTHERN_ISLAND_EXTERIOR), MAP_NUM(SOUTHERN_ISLAND_EXTERIOR), 15, 20},
+};
diff --git a/src/data/pokedex_orders.h b/src/data/pokedex_orders.h
index 736c0df6a..830f3d70a 100644
--- a/src/data/pokedex_orders.h
+++ b/src/data/pokedex_orders.h
@@ -1,1609 +1,1609 @@
#if ENGLISH
static const u16 gPokedexOrder_Alphabetical[] =
{
- 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,
- 63, // Abra
- 359, // Absol
- 142, // Aerodactyl
- 306, // Aggron
- 190, // Aipom
- 65, // Alakazam
- 334, // Altaria
- 181, // Ampharos
- 347, // Anorith
- 24, // Arbok
- 59, // Arcanine
- 168, // Ariados
- 348, // Armaldo
- 304, // Aron
- 144, // Articuno
- 184, // Azumarill
- 298, // Azurill
- 371, // Bagon
- 343, // Baltoy
- 354, // Banette
- 339, // Barboach
- 153, // Bayleef
- 267, // Beautifly
- 15, // Beedrill
- 374, // Beldum
- 182, // Bellossom
- 69, // Bellsprout
- 9, // Blastoise
- 257, // Blaziken
- 242, // Blissey
- 286, // Breloom
- 1, // Bulbasaur
- 12, // Butterfree
- 331, // Cacnea
- 332, // Cacturne
- 323, // Camerupt
- 318, // Carvanha
- 268, // Cascoon
- 351, // Castform
- 10, // Caterpie
- 251, // Celebi
- 113, // Chansey
- 6, // Charizard
- 4, // Charmander
- 5, // Charmeleon
- 152, // Chikorita
- 358, // Chimecho
- 170, // Chinchou
- 366, // Clamperl
- 344, // Claydol
- 36, // Clefable
- 35, // Clefairy
- 173, // Cleffa
- 91, // Cloyster
- 256, // Combusken
- 341, // Corphish
- 222, // Corsola
- 346, // Cradily
- 342, // Crawdaunt
- 169, // Crobat
- 159, // Croconaw
- 104, // Cubone
- 155, // Cyndaquil
- 301, // Delcatty
- 225, // Delibird
- 386, // Deoxys
- 87, // Dewgong
- 50, // Diglett
- 132, // Ditto
- 85, // Dodrio
- 84, // Doduo
- 232, // Donphan
- 148, // Dragonair
- 149, // Dragonite
- 147, // Dratini
- 96, // Drowzee
- 51, // Dugtrio
- 206, // Dunsparce
- 356, // Dusclops
- 355, // Duskull
- 269, // Dustox
- 133, // Eevee
- 23, // Ekans
- 125, // Electabuzz
- 309, // Electrike
- 101, // Electrode
- 239, // Elekid
- 244, // Entei
- 196, // Espeon
- 102, // Exeggcute
- 103, // Exeggutor
- 295, // Exploud
- 83, // Farfetch'd
- 22, // Fearow
- 349, // Feebas
- 160, // Feraligatr
- 180, // Flaaffy
- 136, // Flareon
- 330, // Flygon
- 205, // Forretress
- 162, // Furret
- 282, // Gardevoir
- 92, // Gastly
- 94, // Gengar
- 74, // Geodude
- 203, // Girafarig
- 362, // Glalie
- 207, // Gligar
- 44, // Gloom
- 42, // Golbat
- 118, // Goldeen
- 55, // Golduck
- 76, // Golem
- 368, // Gorebyss
- 210, // Granbull
- 75, // Graveler
- 88, // Grimer
- 383, // Groudon
- 253, // Grovyle
- 58, // Growlithe
- 326, // Grumpig
- 316, // Gulpin
- 130, // Gyarados
- 297, // Hariyama
- 93, // Haunter
- 214, // Heracross
- 107, // Hitmonchan
- 106, // Hitmonlee
- 237, // Hitmontop
- 250, // Ho-Oh
- 163, // Hoothoot
- 187, // Hoppip
- 116, // Horsea
- 229, // Houndoom
- 228, // Houndour
- 367, // Huntail
- 97, // Hypno
- 174, // Igglybuff
- 314, // Illumise
- 2, // Ivysaur
- 39, // Jigglypuff
- 385, // Jirachi
- 135, // Jolteon
- 189, // Jumpluff
- 124, // Jynx
- 140, // Kabuto
- 141, // Kabutops
- 64, // Kadabra
- 14, // Kakuna
- 115, // Kangaskhan
- 352, // Kecleon
- 230, // Kingdra
- 99, // Kingler
- 281, // Kirlia
- 109, // Koffing
- 98, // Krabby
- 382, // Kyogre
- 305, // Lairon
- 171, // Lanturn
- 131, // Lapras
- 246, // Larvitar
- 380, // Latias
- 381, // Latios
- 166, // Ledian
- 165, // Ledyba
- 108, // Lickitung
- 345, // Lileep
- 264, // Linoone
- 271, // Lombre
- 270, // Lotad
- 294, // Loudred
- 272, // Ludicolo
- 249, // Lugia
- 337, // Lunatone
- 370, // Luvdisc
- 68, // Machamp
- 67, // Machoke
- 66, // Machop
- 240, // Magby
- 219, // Magcargo
- 129, // Magikarp
- 126, // Magmar
- 81, // Magnemite
- 82, // Magneton
- 296, // Makuhita
- 310, // Manectric
- 56, // Mankey
- 226, // Mantine
- 179, // Mareep
- 183, // Marill
- 105, // Marowak
- 259, // Marshtomp
- 284, // Masquerain
- 303, // Mawile
- 308, // Medicham
- 307, // Meditite
- 154, // Meganium
- 52, // Meowth
- 376, // Metagross
- 375, // Metang
- 11, // Metapod
- 151, // Mew
- 150, // Mewtwo
- 262, // Mightyena
- 350, // Milotic
- 241, // Miltank
- 312, // Minun
- 200, // Misdreavus
- 146, // Moltres
- 122, // Mr. mime
- 258, // Mudkip
- 89, // Muk
- 198, // Murkrow
- 177, // Natu
- 34, // Nidoking
- 31, // Nidoqueen
- 29, // Nidoran?
- 32, // Nidoran?
- 30, // Nidorina
- 33, // Nidorino
- 290, // Nincada
- 38, // Ninetales
- 291, // Ninjask
- 164, // Noctowl
- 299, // Nosepass
- 322, // Numel
- 274, // Nuzleaf
- 224, // Octillery
- 43, // Oddish
- 138, // Omanyte
- 139, // Omastar
- 95, // Onix
- 46, // Paras
- 47, // Parasect
- 279, // Pelipper
- 53, // Persian
- 231, // Phanpy
- 172, // Pichu
- 18, // Pidgeot
- 17, // Pidgeotto
- 16, // Pidgey
- 25, // Pikachu
- 221, // Piloswine
- 204, // Pineco
- 127, // Pinsir
- 311, // Plusle
- 186, // Politoed
- 60, // Poliwag
- 61, // Poliwhirl
- 62, // Poliwrath
- 77, // Ponyta
- 261, // Poochyena
- 137, // Porygon
- 233, // Porygon2
- 57, // Primeape
- 54, // Psyduck
- 247, // Pupitar
- 195, // Quagsire
- 156, // Quilava
- 211, // Qwilfish
- 26, // Raichu
- 243, // Raikou
- 280, // Ralts
- 78, // Rapidash
- 20, // Raticate
- 19, // Rattata
- 384, // Rayquaza
- 378, // Regice
- 377, // Regirock
- 379, // Registeel
- 369, // Relicanth
- 223, // Remoraid
- 112, // Rhydon
- 111, // Rhyhorn
- 315, // Roselia
- 302, // Sableye
- 373, // Salamence
- 27, // Sandshrew
- 28, // Sandslash
- 254, // Sceptile
- 212, // Scizor
- 123, // Scyther
- 117, // Seadra
- 119, // Seaking
- 364, // Sealeo
- 273, // Seedot
- 86, // Seel
- 161, // Sentret
- 336, // Seviper
- 319, // Sharpedo
- 292, // Shedinja
- 372, // Shelgon
- 90, // Shellder
- 275, // Shiftry
- 285, // Shroomish
- 213, // Shuckle
- 353, // Shuppet
- 266, // Silcoon
- 227, // Skarmory
- 188, // Skiploom
- 300, // Skitty
- 289, // Slaking
- 287, // Slakoth
- 80, // Slowbro
- 199, // Slowking
- 79, // Slowpoke
- 218, // Slugma
- 235, // Smeargle
- 238, // Smoochum
- 215, // Sneasel
- 143, // Snorlax
- 361, // Snorunt
- 209, // Snubbull
- 338, // Solrock
- 21, // Spearow
- 363, // Spheal
- 167, // Spinarak
- 327, // Spinda
- 325, // Spoink
- 7, // Squirtle
- 234, // Stantler
- 121, // Starmie
- 120, // Staryu
- 208, // Steelix
- 185, // Sudowoodo
- 245, // Suicune
- 192, // Sunflora
- 191, // Sunkern
- 283, // Surskit
- 333, // Swablu
- 317, // Swalot
- 260, // Swampert
- 277, // Swellow
- 220, // Swinub
- 276, // Taillow
- 114, // Tangela
- 128, // Tauros
- 216, // Teddiursa
- 72, // Tentacool
- 73, // Tentacruel
- 175, // Togepi
- 176, // Togetic
- 255, // Torchic
- 324, // Torkoal
- 158, // Totodile
- 328, // Trapinch
- 252, // Treecko
- 357, // Tropius
- 157, // Typhlosion
- 248, // Tyranitar
- 236, // Tyrogue
- 197, // Umbreon
- 201, // Unown
- 217, // Ursaring
- 134, // Vaporeon
- 49, // Venomoth
- 48, // Venonat
- 3, // Venusaur
- 329, // Vibrava
- 71, // Victreebel
- 288, // Vigoroth
- 45, // Vileplume
- 313, // Volbeat
- 100, // Voltorb
- 37, // Vulpix
- 320, // Wailmer
- 321, // Wailord
- 365, // Walrein
- 8, // Wartortle
- 13, // Weedle
- 70, // Weepinbell
- 110, // Weezing
- 340, // Whiscash
- 293, // Whismur
- 40, // Wigglytuff
- 278, // Wingull
- 202, // Wobbuffet
- 194, // Wooper
- 265, // Wurmple
- 360, // Wynaut
- 178, // Xatu
- 193, // Yanma
- 335, // Zangoose
- 145, // Zapdos
- 263, // Zigzagoon
- 41, // Zubat
+ NATIONAL_DEX_OLD_UNOWN_B,
+ NATIONAL_DEX_OLD_UNOWN_C,
+ NATIONAL_DEX_OLD_UNOWN_D,
+ NATIONAL_DEX_OLD_UNOWN_E,
+ NATIONAL_DEX_OLD_UNOWN_F,
+ NATIONAL_DEX_OLD_UNOWN_G,
+ NATIONAL_DEX_OLD_UNOWN_H,
+ NATIONAL_DEX_OLD_UNOWN_I,
+ NATIONAL_DEX_OLD_UNOWN_J,
+ NATIONAL_DEX_OLD_UNOWN_K,
+ NATIONAL_DEX_OLD_UNOWN_L,
+ NATIONAL_DEX_OLD_UNOWN_M,
+ NATIONAL_DEX_OLD_UNOWN_N,
+ NATIONAL_DEX_OLD_UNOWN_O,
+ NATIONAL_DEX_OLD_UNOWN_P,
+ NATIONAL_DEX_OLD_UNOWN_Q,
+ NATIONAL_DEX_OLD_UNOWN_R,
+ NATIONAL_DEX_OLD_UNOWN_S,
+ NATIONAL_DEX_OLD_UNOWN_T,
+ NATIONAL_DEX_OLD_UNOWN_U,
+ NATIONAL_DEX_OLD_UNOWN_V,
+ NATIONAL_DEX_OLD_UNOWN_W,
+ NATIONAL_DEX_OLD_UNOWN_X,
+ NATIONAL_DEX_OLD_UNOWN_Y,
+ NATIONAL_DEX_OLD_UNOWN_Z,
+ NATIONAL_DEX_ABRA,
+ NATIONAL_DEX_ABSOL,
+ NATIONAL_DEX_AERODACTYL,
+ NATIONAL_DEX_AGGRON,
+ NATIONAL_DEX_AIPOM,
+ NATIONAL_DEX_ALAKAZAM,
+ NATIONAL_DEX_ALTARIA,
+ NATIONAL_DEX_AMPHAROS,
+ NATIONAL_DEX_ANORITH,
+ NATIONAL_DEX_ARBOK,
+ NATIONAL_DEX_ARCANINE,
+ NATIONAL_DEX_ARIADOS,
+ NATIONAL_DEX_ARMALDO,
+ NATIONAL_DEX_ARON,
+ NATIONAL_DEX_ARTICUNO,
+ NATIONAL_DEX_AZUMARILL,
+ NATIONAL_DEX_AZURILL,
+ NATIONAL_DEX_BAGON,
+ NATIONAL_DEX_BALTOY,
+ NATIONAL_DEX_BANETTE,
+ NATIONAL_DEX_BARBOACH,
+ NATIONAL_DEX_BAYLEEF,
+ NATIONAL_DEX_BEAUTIFLY,
+ NATIONAL_DEX_BEEDRILL,
+ NATIONAL_DEX_BELDUM,
+ NATIONAL_DEX_BELLOSSOM,
+ NATIONAL_DEX_BELLSPROUT,
+ NATIONAL_DEX_BLASTOISE,
+ NATIONAL_DEX_BLAZIKEN,
+ NATIONAL_DEX_BLISSEY,
+ NATIONAL_DEX_BRELOOM,
+ NATIONAL_DEX_BULBASAUR,
+ NATIONAL_DEX_BUTTERFREE,
+ NATIONAL_DEX_CACNEA,
+ NATIONAL_DEX_CACTURNE,
+ NATIONAL_DEX_CAMERUPT,
+ NATIONAL_DEX_CARVANHA,
+ NATIONAL_DEX_CASCOON,
+ NATIONAL_DEX_CASTFORM,
+ NATIONAL_DEX_CATERPIE,
+ NATIONAL_DEX_CELEBI,
+ NATIONAL_DEX_CHANSEY,
+ NATIONAL_DEX_CHARIZARD,
+ NATIONAL_DEX_CHARMANDER,
+ NATIONAL_DEX_CHARMELEON,
+ NATIONAL_DEX_CHIKORITA,
+ NATIONAL_DEX_CHIMECHO,
+ NATIONAL_DEX_CHINCHOU,
+ NATIONAL_DEX_CLAMPERL,
+ NATIONAL_DEX_CLAYDOL,
+ NATIONAL_DEX_CLEFABLE,
+ NATIONAL_DEX_CLEFAIRY,
+ NATIONAL_DEX_CLEFFA,
+ NATIONAL_DEX_CLOYSTER,
+ NATIONAL_DEX_COMBUSKEN,
+ NATIONAL_DEX_CORPHISH,
+ NATIONAL_DEX_CORSOLA,
+ NATIONAL_DEX_CRADILY,
+ NATIONAL_DEX_CRAWDAUNT,
+ NATIONAL_DEX_CROBAT,
+ NATIONAL_DEX_CROCONAW,
+ NATIONAL_DEX_CUBONE,
+ NATIONAL_DEX_CYNDAQUIL,
+ NATIONAL_DEX_DELCATTY,
+ NATIONAL_DEX_DELIBIRD,
+ NATIONAL_DEX_DEOXYS,
+ NATIONAL_DEX_DEWGONG,
+ NATIONAL_DEX_DIGLETT,
+ NATIONAL_DEX_DITTO,
+ NATIONAL_DEX_DODRIO,
+ NATIONAL_DEX_DODUO,
+ NATIONAL_DEX_DONPHAN,
+ NATIONAL_DEX_DRAGONAIR,
+ NATIONAL_DEX_DRAGONITE,
+ NATIONAL_DEX_DRATINI,
+ NATIONAL_DEX_DROWZEE,
+ NATIONAL_DEX_DUGTRIO,
+ NATIONAL_DEX_DUNSPARCE,
+ NATIONAL_DEX_DUSCLOPS,
+ NATIONAL_DEX_DUSKULL,
+ NATIONAL_DEX_DUSTOX,
+ NATIONAL_DEX_EEVEE,
+ NATIONAL_DEX_EKANS,
+ NATIONAL_DEX_ELECTABUZZ,
+ NATIONAL_DEX_ELECTRIKE,
+ NATIONAL_DEX_ELECTRODE,
+ NATIONAL_DEX_ELEKID,
+ NATIONAL_DEX_ENTEI,
+ NATIONAL_DEX_ESPEON,
+ NATIONAL_DEX_EXEGGCUTE,
+ NATIONAL_DEX_EXEGGUTOR,
+ NATIONAL_DEX_EXPLOUD,
+ NATIONAL_DEX_FARFETCHD,
+ NATIONAL_DEX_FEAROW,
+ NATIONAL_DEX_FEEBAS,
+ NATIONAL_DEX_FERALIGATR,
+ NATIONAL_DEX_FLAAFFY,
+ NATIONAL_DEX_FLAREON,
+ NATIONAL_DEX_FLYGON,
+ NATIONAL_DEX_FORRETRESS,
+ NATIONAL_DEX_FURRET,
+ NATIONAL_DEX_GARDEVOIR,
+ NATIONAL_DEX_GASTLY,
+ NATIONAL_DEX_GENGAR,
+ NATIONAL_DEX_GEODUDE,
+ NATIONAL_DEX_GIRAFARIG,
+ NATIONAL_DEX_GLALIE,
+ NATIONAL_DEX_GLIGAR,
+ NATIONAL_DEX_GLOOM,
+ NATIONAL_DEX_GOLBAT,
+ NATIONAL_DEX_GOLDEEN,
+ NATIONAL_DEX_GOLDUCK,
+ NATIONAL_DEX_GOLEM,
+ NATIONAL_DEX_GOREBYSS,
+ NATIONAL_DEX_GRANBULL,
+ NATIONAL_DEX_GRAVELER,
+ NATIONAL_DEX_GRIMER,
+ NATIONAL_DEX_GROUDON,
+ NATIONAL_DEX_GROVYLE,
+ NATIONAL_DEX_GROWLITHE,
+ NATIONAL_DEX_GRUMPIG,
+ NATIONAL_DEX_GULPIN,
+ NATIONAL_DEX_GYARADOS,
+ NATIONAL_DEX_HARIYAMA,
+ NATIONAL_DEX_HAUNTER,
+ NATIONAL_DEX_HERACROSS,
+ NATIONAL_DEX_HITMONCHAN,
+ NATIONAL_DEX_HITMONLEE,
+ NATIONAL_DEX_HITMONTOP,
+ NATIONAL_DEX_HO_OH,
+ NATIONAL_DEX_HOOTHOOT,
+ NATIONAL_DEX_HOPPIP,
+ NATIONAL_DEX_HORSEA,
+ NATIONAL_DEX_HOUNDOOM,
+ NATIONAL_DEX_HOUNDOUR,
+ NATIONAL_DEX_HUNTAIL,
+ NATIONAL_DEX_HYPNO,
+ NATIONAL_DEX_IGGLYBUFF,
+ NATIONAL_DEX_ILLUMISE,
+ NATIONAL_DEX_IVYSAUR,
+ NATIONAL_DEX_JIGGLYPUFF,
+ NATIONAL_DEX_JIRACHI,
+ NATIONAL_DEX_JOLTEON,
+ NATIONAL_DEX_JUMPLUFF,
+ NATIONAL_DEX_JYNX,
+ NATIONAL_DEX_KABUTO,
+ NATIONAL_DEX_KABUTOPS,
+ NATIONAL_DEX_KADABRA,
+ NATIONAL_DEX_KAKUNA,
+ NATIONAL_DEX_KANGASKHAN,
+ NATIONAL_DEX_KECLEON,
+ NATIONAL_DEX_KINGDRA,
+ NATIONAL_DEX_KINGLER,
+ NATIONAL_DEX_KIRLIA,
+ NATIONAL_DEX_KOFFING,
+ NATIONAL_DEX_KRABBY,
+ NATIONAL_DEX_KYOGRE,
+ NATIONAL_DEX_LAIRON,
+ NATIONAL_DEX_LANTURN,
+ NATIONAL_DEX_LAPRAS,
+ NATIONAL_DEX_LARVITAR,
+ NATIONAL_DEX_LATIAS,
+ NATIONAL_DEX_LATIOS,
+ NATIONAL_DEX_LEDIAN,
+ NATIONAL_DEX_LEDYBA,
+ NATIONAL_DEX_LICKITUNG,
+ NATIONAL_DEX_LILEEP,
+ NATIONAL_DEX_LINOONE,
+ NATIONAL_DEX_LOMBRE,
+ NATIONAL_DEX_LOTAD,
+ NATIONAL_DEX_LOUDRED,
+ NATIONAL_DEX_LUDICOLO,
+ NATIONAL_DEX_LUGIA,
+ NATIONAL_DEX_LUNATONE,
+ NATIONAL_DEX_LUVDISC,
+ NATIONAL_DEX_MACHAMP,
+ NATIONAL_DEX_MACHOKE,
+ NATIONAL_DEX_MACHOP,
+ NATIONAL_DEX_MAGBY,
+ NATIONAL_DEX_MAGCARGO,
+ NATIONAL_DEX_MAGIKARP,
+ NATIONAL_DEX_MAGMAR,
+ NATIONAL_DEX_MAGNEMITE,
+ NATIONAL_DEX_MAGNETON,
+ NATIONAL_DEX_MAKUHITA,
+ NATIONAL_DEX_MANECTRIC,
+ NATIONAL_DEX_MANKEY,
+ NATIONAL_DEX_MANTINE,
+ NATIONAL_DEX_MAREEP,
+ NATIONAL_DEX_MARILL,
+ NATIONAL_DEX_MAROWAK,
+ NATIONAL_DEX_MARSHTOMP,
+ NATIONAL_DEX_MASQUERAIN,
+ NATIONAL_DEX_MAWILE,
+ NATIONAL_DEX_MEDICHAM,
+ NATIONAL_DEX_MEDITITE,
+ NATIONAL_DEX_MEGANIUM,
+ NATIONAL_DEX_MEOWTH,
+ NATIONAL_DEX_METAGROSS,
+ NATIONAL_DEX_METANG,
+ NATIONAL_DEX_METAPOD,
+ NATIONAL_DEX_MEW,
+ NATIONAL_DEX_MEWTWO,
+ NATIONAL_DEX_MIGHTYENA,
+ NATIONAL_DEX_MILOTIC,
+ NATIONAL_DEX_MILTANK,
+ NATIONAL_DEX_MINUN,
+ NATIONAL_DEX_MISDREAVUS,
+ NATIONAL_DEX_MOLTRES,
+ NATIONAL_DEX_MR_MIME,
+ NATIONAL_DEX_MUDKIP,
+ NATIONAL_DEX_MUK,
+ NATIONAL_DEX_MURKROW,
+ NATIONAL_DEX_NATU,
+ NATIONAL_DEX_NIDOKING,
+ NATIONAL_DEX_NIDOQUEEN,
+ NATIONAL_DEX_NIDORAN_F,
+ NATIONAL_DEX_NIDORAN_M,
+ NATIONAL_DEX_NIDORINA,
+ NATIONAL_DEX_NIDORINO,
+ NATIONAL_DEX_NINCADA,
+ NATIONAL_DEX_NINETALES,
+ NATIONAL_DEX_NINJASK,
+ NATIONAL_DEX_NOCTOWL,
+ NATIONAL_DEX_NOSEPASS,
+ NATIONAL_DEX_NUMEL,
+ NATIONAL_DEX_NUZLEAF,
+ NATIONAL_DEX_OCTILLERY,
+ NATIONAL_DEX_ODDISH,
+ NATIONAL_DEX_OMANYTE,
+ NATIONAL_DEX_OMASTAR,
+ NATIONAL_DEX_ONIX,
+ NATIONAL_DEX_PARAS,
+ NATIONAL_DEX_PARASECT,
+ NATIONAL_DEX_PELIPPER,
+ NATIONAL_DEX_PERSIAN,
+ NATIONAL_DEX_PHANPY,
+ NATIONAL_DEX_PICHU,
+ NATIONAL_DEX_PIDGEOT,
+ NATIONAL_DEX_PIDGEOTTO,
+ NATIONAL_DEX_PIDGEY,
+ NATIONAL_DEX_PIKACHU,
+ NATIONAL_DEX_PILOSWINE,
+ NATIONAL_DEX_PINECO,
+ NATIONAL_DEX_PINSIR,
+ NATIONAL_DEX_PLUSLE,
+ NATIONAL_DEX_POLITOED,
+ NATIONAL_DEX_POLIWAG,
+ NATIONAL_DEX_POLIWHIRL,
+ NATIONAL_DEX_POLIWRATH,
+ NATIONAL_DEX_PONYTA,
+ NATIONAL_DEX_POOCHYENA,
+ NATIONAL_DEX_PORYGON,
+ NATIONAL_DEX_PORYGON2,
+ NATIONAL_DEX_PRIMEAPE,
+ NATIONAL_DEX_PSYDUCK,
+ NATIONAL_DEX_PUPITAR,
+ NATIONAL_DEX_QUAGSIRE,
+ NATIONAL_DEX_QUILAVA,
+ NATIONAL_DEX_QWILFISH,
+ NATIONAL_DEX_RAICHU,
+ NATIONAL_DEX_RAIKOU,
+ NATIONAL_DEX_RALTS,
+ NATIONAL_DEX_RAPIDASH,
+ NATIONAL_DEX_RATICATE,
+ NATIONAL_DEX_RATTATA,
+ NATIONAL_DEX_RAYQUAZA,
+ NATIONAL_DEX_REGICE,
+ NATIONAL_DEX_REGIROCK,
+ NATIONAL_DEX_REGISTEEL,
+ NATIONAL_DEX_RELICANTH,
+ NATIONAL_DEX_REMORAID,
+ NATIONAL_DEX_RHYDON,
+ NATIONAL_DEX_RHYHORN,
+ NATIONAL_DEX_ROSELIA,
+ NATIONAL_DEX_SABLEYE,
+ NATIONAL_DEX_SALAMENCE,
+ NATIONAL_DEX_SANDSHREW,
+ NATIONAL_DEX_SANDSLASH,
+ NATIONAL_DEX_SCEPTILE,
+ NATIONAL_DEX_SCIZOR,
+ NATIONAL_DEX_SCYTHER,
+ NATIONAL_DEX_SEADRA,
+ NATIONAL_DEX_SEAKING,
+ NATIONAL_DEX_SEALEO,
+ NATIONAL_DEX_SEEDOT,
+ NATIONAL_DEX_SEEL,
+ NATIONAL_DEX_SENTRET,
+ NATIONAL_DEX_SEVIPER,
+ NATIONAL_DEX_SHARPEDO,
+ NATIONAL_DEX_SHEDINJA,
+ NATIONAL_DEX_SHELGON,
+ NATIONAL_DEX_SHELLDER,
+ NATIONAL_DEX_SHIFTRY,
+ NATIONAL_DEX_SHROOMISH,
+ NATIONAL_DEX_SHUCKLE,
+ NATIONAL_DEX_SHUPPET,
+ NATIONAL_DEX_SILCOON,
+ NATIONAL_DEX_SKARMORY,
+ NATIONAL_DEX_SKIPLOOM,
+ NATIONAL_DEX_SKITTY,
+ NATIONAL_DEX_SLAKING,
+ NATIONAL_DEX_SLAKOTH,
+ NATIONAL_DEX_SLOWBRO,
+ NATIONAL_DEX_SLOWKING,
+ NATIONAL_DEX_SLOWPOKE,
+ NATIONAL_DEX_SLUGMA,
+ NATIONAL_DEX_SMEARGLE,
+ NATIONAL_DEX_SMOOCHUM,
+ NATIONAL_DEX_SNEASEL,
+ NATIONAL_DEX_SNORLAX,
+ NATIONAL_DEX_SNORUNT,
+ NATIONAL_DEX_SNUBBULL,
+ NATIONAL_DEX_SOLROCK,
+ NATIONAL_DEX_SPEAROW,
+ NATIONAL_DEX_SPHEAL,
+ NATIONAL_DEX_SPINARAK,
+ NATIONAL_DEX_SPINDA,
+ NATIONAL_DEX_SPOINK,
+ NATIONAL_DEX_SQUIRTLE,
+ NATIONAL_DEX_STANTLER,
+ NATIONAL_DEX_STARMIE,
+ NATIONAL_DEX_STARYU,
+ NATIONAL_DEX_STEELIX,
+ NATIONAL_DEX_SUDOWOODO,
+ NATIONAL_DEX_SUICUNE,
+ NATIONAL_DEX_SUNFLORA,
+ NATIONAL_DEX_SUNKERN,
+ NATIONAL_DEX_SURSKIT,
+ NATIONAL_DEX_SWABLU,
+ NATIONAL_DEX_SWALOT,
+ NATIONAL_DEX_SWAMPERT,
+ NATIONAL_DEX_SWELLOW,
+ NATIONAL_DEX_SWINUB,
+ NATIONAL_DEX_TAILLOW,
+ NATIONAL_DEX_TANGELA,
+ NATIONAL_DEX_TAUROS,
+ NATIONAL_DEX_TEDDIURSA,
+ NATIONAL_DEX_TENTACOOL,
+ NATIONAL_DEX_TENTACRUEL,
+ NATIONAL_DEX_TOGEPI,
+ NATIONAL_DEX_TOGETIC,
+ NATIONAL_DEX_TORCHIC,
+ NATIONAL_DEX_TORKOAL,
+ NATIONAL_DEX_TOTODILE,
+ NATIONAL_DEX_TRAPINCH,
+ NATIONAL_DEX_TREECKO,
+ NATIONAL_DEX_TROPIUS,
+ NATIONAL_DEX_TYPHLOSION,
+ NATIONAL_DEX_TYRANITAR,
+ NATIONAL_DEX_TYROGUE,
+ NATIONAL_DEX_UMBREON,
+ NATIONAL_DEX_UNOWN,
+ NATIONAL_DEX_URSARING,
+ NATIONAL_DEX_VAPOREON,
+ NATIONAL_DEX_VENOMOTH,
+ NATIONAL_DEX_VENONAT,
+ NATIONAL_DEX_VENUSAUR,
+ NATIONAL_DEX_VIBRAVA,
+ NATIONAL_DEX_VICTREEBEL,
+ NATIONAL_DEX_VIGOROTH,
+ NATIONAL_DEX_VILEPLUME,
+ NATIONAL_DEX_VOLBEAT,
+ NATIONAL_DEX_VOLTORB,
+ NATIONAL_DEX_VULPIX,
+ NATIONAL_DEX_WAILMER,
+ NATIONAL_DEX_WAILORD,
+ NATIONAL_DEX_WALREIN,
+ NATIONAL_DEX_WARTORTLE,
+ NATIONAL_DEX_WEEDLE,
+ NATIONAL_DEX_WEEPINBELL,
+ NATIONAL_DEX_WEEZING,
+ NATIONAL_DEX_WHISCASH,
+ NATIONAL_DEX_WHISMUR,
+ NATIONAL_DEX_WIGGLYTUFF,
+ NATIONAL_DEX_WINGULL,
+ NATIONAL_DEX_WOBBUFFET,
+ NATIONAL_DEX_WOOPER,
+ NATIONAL_DEX_WURMPLE,
+ NATIONAL_DEX_WYNAUT,
+ NATIONAL_DEX_XATU,
+ NATIONAL_DEX_YANMA,
+ NATIONAL_DEX_ZANGOOSE,
+ NATIONAL_DEX_ZAPDOS,
+ NATIONAL_DEX_ZIGZAGOON,
+ NATIONAL_DEX_ZUBAT,
};
#elif GERMAN
static const u16 gPokedexOrder_Alphabetical[] = {
- 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,
- 367, // Aalabyss
- 63, // Abra
- 359, // Absol
- 142, // Aerodactyl
- 93, // Alpollo
- 334, // Altaria
- 138, // Amonitas
- 139, // Amoroso
- 181, // Ampharos
- 347, // Anorith
- 134, // Aquana
- 24, // Arbok
- 168, // Ariados
- 59, // Arkani
- 144, // Arktos
- 348, // Armaldo
- 91, // Austos
- 184, // Azumarill
- 298, // Azurill
- 211, // Baldorfish
- 354, // Banette
- 349, // Barschwa
- 15, // Bibor
- 3, // Bisaflor
- 2, // Bisaknosp
- 1, // Bisasam
- 274, // Blanas
- 135, // Blitza
- 182, // Blubella
- 48, // Bluzuk
- 225, // Botogel
- 373, // Brutalanda
- 287, // Bummelz
- 322, // Camaub
- 323, // Camerupt
- 251, // Celebi
- 113, // Chaneira
- 222, // Corasonn
- 234, // Damhirplex
- 386, // Deoxys
- 248, // Despotar
- 50, // Digda
- 51, // Digdri
- 132, // Ditto
- 85, // Dodri
- 84, // Dodu
- 232, // Donphan
- 148, // Dragonir
- 149, // Dragoran
- 372, // Draschel
- 147, // Dratini
- 44, // Duflor
- 206, // Dummisel
- 239, // Elekid
- 125, // Elektek
- 152, // Endivie
- 300, // Eneco
- 301, // Enekoro
- 244, // Entei
- 54, // Enton
- 55, // Entoron
- 133, // Evoli
- 235, // Farbeagle
- 194, // Felino
- 155, // Feurigel
- 261, // Fiffyen
- 362, // Firnontor
- 136, // Flamara
- 79, // Flegmon
- 255, // Flemmli
- 174, // Fluffeluff
- 303, // Flunkifer
- 293, // Flurmel
- 351, // Formeo
- 205, // Forstellka
- 309, // Frizelbliz
- 58, // Fukano
- 78, // Gallopa
- 130, // Garados
- 252, // Geckarbor
- 283, // Gehweiher
- 94, // Gengar
- 75, // Georok
- 76, // Geowaz
- 264, // Geradaks
- 254, // Gewaldro
- 45, // Giflor
- 203, // Girafarig
- 4, // Glumanda
- 6, // Glurak
- 5, // Glutexo
- 42, // Golbat
- 118, // Goldini
- 119, // Golking
- 210, // Granbull
- 190, // Griffel
- 326, // Groink
- 383, // Groudon
- 282, // Guardevoir
- 21, // Habitak
- 297, // Hariyama
- 242, // Heiteira
- 250, // Ho-oh
- 163, // Hoothoot
- 187, // Hoppspross
- 13, // Hornliu
- 188, // Hubelupf
- 229, // Hundemon
- 228, // Hunduster
- 258, // Hydropi
- 97, // Hypno
- 22, // Ibitak
- 201, // Icognito
- 156, // Igelavar
- 169, // Iksbat
- 314, // Illumise
- 160, // Impergator
- 360, // Isso
- 385, // Jirachi
- 87, // Jugong
- 256, // Jungglut
- 86, // Jurob
- 140, // Kabuto
- 141, // Kabutops
- 64, // Kadabra
- 115, // Kangama
- 318, // Kanivanha
- 286, // Kapilz
- 237, // Kapoera
- 272, // Kappalores
- 158, // Karnimani
- 129, // Karpador
- 352, // Kecleon
- 221, // Keifel
- 106, // Kicklee
- 371, // Kindwurm
- 99, // Kingler
- 281, // Kirlia
- 74, // Kleinstein
- 328, // Knacklion
- 285, // Knilz
- 69, // Knofensa
- 105, // Knogga
- 40, // Knuddeluff
- 103, // Kokowei
- 14, // Kokuna
- 98, // Krabby
- 294, // Krakeelo
- 198, // Kramurx
- 295, // Krawumms
- 341, // Krebscorps
- 342, // Krebutack
- 238, // Kussilla
- 382, // Kyogre
- 80, // Lahmus
- 170, // Lampi
- 171, // Lanturn
- 131, // Lapras
- 246, // Larvitar
- 199, // Laschoking
- 380, // Latias
- 381, // Latios
- 146, // Lavados
- 166, // Ledian
- 165, // Ledyba
- 101, // Lektrobal
- 344, // Lepumentas
- 289, // Letarking
- 330, // Libelldra
- 370, // Liebiskus
- 345, // Liliep
- 257, // Lohgock
- 271, // Lombrero
- 153, // Lorblatt
- 270, // Loturzel
- 249, // Lugia
- 337, // Lunastein
- 66, // Machollo
- 68, // Machomei
- 240, // Magby
- 219, // Magcargo
- 126, // Magmar
- 262, // Magnayen
- 81, // Magnetilo
- 82, // Magneton
- 296, // Makuhita
- 226, // Mantax
- 183, // Marill
- 67, // Maschock
- 284, // Maskeregen
- 52, // Mauzi
- 308, // Meditalis
- 307, // Meditie
- 154, // Meganie
- 56, // Menki
- 376, // Metagross
- 375, // Metang
- 151, // Mew
- 150, // Mewtu
- 350, // Milotic
- 241, // Miltank
- 312, // Minun
- 185, // Mogelbaum
- 259, // Moorabbel
- 195, // Morlord
- 288, // Muntier
- 90, // Muschas
- 43, // Myrapla
- 197, // Nachtara
- 299, // Nasgnet
- 177, // Natu
- 92, // Nebulak
- 34, // Nidoking
- 31, // Nidoqueen
- 29, // Nidoran♀
- 32, // Nidoran♂
- 30, // Nidorina
- 33, // Nidorino
- 290, // Nincada
- 291, // Ninjask
- 292, // Ninjatom
- 107, // Nockchan
- 164, // Noctuh
- 332, // Noktuska
- 224, // Octillery
- 49, // Omot
- 95, // Onix
- 102, // Owei
- 358, // Palimpalim
- 327, // Pandir
- 268, // Panekon
- 122, // Pantimos
- 227, // Panzaeron
- 267, // Papinella
- 189, // Papungha
- 46, // Paras
- 47, // Parasek
- 279, // Pelipper
- 366, // Perlu
- 231, // Phanpy
- 172, // Pichu
- 35, // Piepi
- 173, // Pii
- 25, // Pikachu
- 127, // Pinsir
- 36, // Pixi
- 311, // Plusle
- 77, // Ponita
- 83, // Porenta
- 137, // Porygon
- 233, // Porygon2
- 213, // Pottrott
- 196, // Psiana
- 269, // Pudox
- 39, // Pummeluff
- 247, // Pupitar
- 343, // Puppance
- 62, // Quappo
- 60, // Quapsel
- 61, // Quaputzi
- 186, // Quaxo
- 220, // Quiekel
- 324, // Qurtel
- 236, // Rabauz
- 26, // Raichu
- 243, // Raikou
- 57, // Rasaff
- 19, // Rattfratz
- 20, // Rattikarl
- 10, // Raupy
- 384, // Rayquaza
- 378, // Regice
- 377, // Regirock
- 379, // Registeel
- 143, // Relaxo
- 369, // Relicanth
- 223, // Remoraid
- 253, // Reptain
- 23, // Rettan
- 111, // Rihorn
- 112, // Rizeros
- 315, // Roselia
- 124, // Rossana
- 11, // Safcon
- 368, // Saganabyss
- 273, // Samurzel
- 28, // Sandamer
- 27, // Sandan
- 71, // Sarzenia
- 266, // Schaloko
- 212, // Scherox
- 7, // Schiggy
- 8, // Schillok
- 317, // Schlukwech
- 316, // Schluppuck
- 108, // Schlurp
- 339, // Schmerbe
- 218, // Schneckmag
- 361, // Schneppke
- 276, // Schwalbini
- 277, // Schwalboss
- 230, // Seedraking
- 364, // Seejong
- 117, // Seemon
- 363, // Seemops
- 116, // Seeper
- 335, // Sengo
- 353, // Shuppet
- 123, // Sichlor
- 65, // Simsala
- 214, // Skaraborn
- 207, // Skorgla
- 88, // Sleima
- 89, // Sleimok
- 12, // Smettbo
- 110, // Smogmog
- 109, // Smogon
- 215, // Sniebel
- 53, // Snobilikat
- 209, // Snubbull
- 338, // Sonnfel
- 192, // Sonnflora
- 191, // Sonnkern
- 325, // Spoink
- 208, // Stahlos
- 121, // Starmie
- 120, // Sterndu
- 306, // Stolloss
- 305, // Stollrak
- 304, // Stollunior
- 245, // Suicune
- 260, // Sumpex
- 114, // Tangela
- 374, // Tanhel
- 204, // Tannza
- 17, // Tauboga
- 18, // Tauboss
- 16, // Taubsi
- 128, // Tauros
- 216, // Teddiursa
- 275, // Tengulist
- 72, // Tentacha
- 73, // Tentoxa
- 175, // Togepi
- 176, // Togetic
- 319, // Tohaido
- 157, // Tornupto
- 104, // Tragosso
- 280, // Trasla
- 96, // Traumato
- 200, // Traunfugil
- 357, // Tropius
- 9, // Turtok
- 331, // Tuska
- 159, // Tyracroc
- 70, // Ultrigaria
- 217, // Ursaring
- 329, // Vibrava
- 336, // Vipitis
- 313, // Volbeat
- 310, // Voltenso
- 179, // Voltilamm
- 100, // Voltobal
- 38, // Vulnona
- 37, // Vulpix
- 180, // Waaty
- 333, // Wablu
- 320, // Wailmer
- 321, // Wailord
- 365, // Walraisa
- 265, // Waumpel
- 167, // Webarak
- 340, // Welsar
- 346, // Wielie
- 162, // Wiesenior
- 161, // Wiesor
- 278, // Wingull
- 202, // Woingenau
- 178, // Xatu
- 193, // Yanma
- 145, // Zapdos
- 263, // Zigzachs
- 302, // Zobiris
- 41, // Zubat
- 356, // Zwirrklop
- 355, // Zwirrlicht
+ NATIONAL_DEX_OLD_UNOWN_B,
+ NATIONAL_DEX_OLD_UNOWN_C,
+ NATIONAL_DEX_OLD_UNOWN_D,
+ NATIONAL_DEX_OLD_UNOWN_E,
+ NATIONAL_DEX_OLD_UNOWN_F,
+ NATIONAL_DEX_OLD_UNOWN_G,
+ NATIONAL_DEX_OLD_UNOWN_H,
+ NATIONAL_DEX_OLD_UNOWN_I,
+ NATIONAL_DEX_OLD_UNOWN_J,
+ NATIONAL_DEX_OLD_UNOWN_K,
+ NATIONAL_DEX_OLD_UNOWN_L,
+ NATIONAL_DEX_OLD_UNOWN_M,
+ NATIONAL_DEX_OLD_UNOWN_N,
+ NATIONAL_DEX_OLD_UNOWN_O,
+ NATIONAL_DEX_OLD_UNOWN_P,
+ NATIONAL_DEX_OLD_UNOWN_Q,
+ NATIONAL_DEX_OLD_UNOWN_R,
+ NATIONAL_DEX_OLD_UNOWN_S,
+ NATIONAL_DEX_OLD_UNOWN_T,
+ NATIONAL_DEX_OLD_UNOWN_U,
+ NATIONAL_DEX_OLD_UNOWN_V,
+ NATIONAL_DEX_OLD_UNOWN_W,
+ NATIONAL_DEX_OLD_UNOWN_X,
+ NATIONAL_DEX_OLD_UNOWN_Y,
+ NATIONAL_DEX_OLD_UNOWN_Z,
+ NATIONAL_DEX_HUNTAIL, // Aalabyss
+ NATIONAL_DEX_ABRA, // Abra
+ NATIONAL_DEX_ABSOL, // Absol
+ NATIONAL_DEX_AERODACTYL, // Aerodactyl
+ NATIONAL_DEX_HAUNTER, // Alpollo
+ NATIONAL_DEX_ALTARIA, // Altaria
+ NATIONAL_DEX_OMANYTE, // Amonitas
+ NATIONAL_DEX_OMASTAR, // Amoroso
+ NATIONAL_DEX_AMPHAROS, // Ampharos
+ NATIONAL_DEX_ANORITH, // Anorith
+ NATIONAL_DEX_VAPOREON, // Aquana
+ NATIONAL_DEX_ARBOK, // Arbok
+ NATIONAL_DEX_ARIADOS, // Ariados
+ NATIONAL_DEX_ARCANINE, // Arkani
+ NATIONAL_DEX_ARTICUNO, // Arktos
+ NATIONAL_DEX_ARMALDO, // Armaldo
+ NATIONAL_DEX_CLOYSTER, // Austos
+ NATIONAL_DEX_AZUMARILL, // Azumarill
+ NATIONAL_DEX_AZURILL, // Azurill
+ NATIONAL_DEX_QWILFISH, // Baldorfish
+ NATIONAL_DEX_BANETTE, // Banette
+ NATIONAL_DEX_FEEBAS, // Barschwa
+ NATIONAL_DEX_BEEDRILL, // Bibor
+ NATIONAL_DEX_VENUSAUR, // Bisaflor
+ NATIONAL_DEX_IVYSAUR, // Bisaknosp
+ NATIONAL_DEX_BULBASAUR, // Bisasam
+ NATIONAL_DEX_NUZLEAF, // Blanas
+ NATIONAL_DEX_JOLTEON, // Blitza
+ NATIONAL_DEX_BELLOSSOM, // Blubella
+ NATIONAL_DEX_VENONAT, // Bluzuk
+ NATIONAL_DEX_DELIBIRD, // Botogel
+ NATIONAL_DEX_SALAMENCE, // Brutalanda
+ NATIONAL_DEX_SLAKOTH, // Bummelz
+ NATIONAL_DEX_NUMEL, // Camaub
+ NATIONAL_DEX_CAMERUPT, // Camerupt
+ NATIONAL_DEX_CELEBI, // Celebi
+ NATIONAL_DEX_CHANSEY, // Chaneira
+ NATIONAL_DEX_CORSOLA, // Corasonn
+ NATIONAL_DEX_STANTLER, // Damhirplex
+ NATIONAL_DEX_DEOXYS, // Deoxys
+ NATIONAL_DEX_TYRANITAR, // Despotar
+ NATIONAL_DEX_DIGLETT, // Digda
+ NATIONAL_DEX_DUGTRIO, // Digdri
+ NATIONAL_DEX_DITTO, // Ditto
+ NATIONAL_DEX_DODRIO, // Dodri
+ NATIONAL_DEX_DODUO, // Dodu
+ NATIONAL_DEX_DONPHAN, // Donphan
+ NATIONAL_DEX_DRAGONAIR, // Dragonir
+ NATIONAL_DEX_DRAGONITE, // Dragoran
+ NATIONAL_DEX_SHELGON, // Draschel
+ NATIONAL_DEX_DRATINI, // Dratini
+ NATIONAL_DEX_GLOOM, // Duflor
+ NATIONAL_DEX_DUNSPARCE, // Dummisel
+ NATIONAL_DEX_ELEKID, // Elekid
+ NATIONAL_DEX_ELECTABUZZ, // Elektek
+ NATIONAL_DEX_CHIKORITA, // Endivie
+ NATIONAL_DEX_SKITTY, // Eneco
+ NATIONAL_DEX_DELCATTY, // Enekoro
+ NATIONAL_DEX_ENTEI, // Entei
+ NATIONAL_DEX_PSYDUCK, // Enton
+ NATIONAL_DEX_GOLDUCK, // Entoron
+ NATIONAL_DEX_EEVEE, // Evoli
+ NATIONAL_DEX_SMEARGLE, // Farbeagle
+ NATIONAL_DEX_WOOPER, // Felino
+ NATIONAL_DEX_CYNDAQUIL, // Feurigel
+ NATIONAL_DEX_POOCHYENA, // Fiffyen
+ NATIONAL_DEX_GLALIE, // Firnontor
+ NATIONAL_DEX_FLAREON, // Flamara
+ NATIONAL_DEX_SLOWPOKE, // Flegmon
+ NATIONAL_DEX_TORCHIC, // Flemmli
+ NATIONAL_DEX_IGGLYBUFF, // Fluffeluff
+ NATIONAL_DEX_MAWILE, // Flunkifer
+ NATIONAL_DEX_WHISMUR, // Flurmel
+ NATIONAL_DEX_CASTFORM, // Formeo
+ NATIONAL_DEX_FORRETRESS, // Forstellka
+ NATIONAL_DEX_ELECTRIKE, // Frizelbliz
+ NATIONAL_DEX_GROWLITHE, // Fukano
+ NATIONAL_DEX_RAPIDASH, // Gallopa
+ NATIONAL_DEX_GYARADOS, // Garados
+ NATIONAL_DEX_TREECKO, // Geckarbor
+ NATIONAL_DEX_SURSKIT, // Gehweiher
+ NATIONAL_DEX_GENGAR, // Gengar
+ NATIONAL_DEX_GRAVELER, // Georok
+ NATIONAL_DEX_GOLEM, // Geowaz
+ NATIONAL_DEX_LINOONE, // Geradaks
+ NATIONAL_DEX_SCEPTILE, // Gewaldro
+ NATIONAL_DEX_VILEPLUME, // Giflor
+ NATIONAL_DEX_GIRAFARIG, // Girafarig
+ NATIONAL_DEX_CHARMANDER, // Glumanda
+ NATIONAL_DEX_CHARIZARD, // Glurak
+ NATIONAL_DEX_CHARMELEON, // Glutexo
+ NATIONAL_DEX_GOLBAT, // Golbat
+ NATIONAL_DEX_GOLDEEN, // Goldini
+ NATIONAL_DEX_SEAKING, // Golking
+ NATIONAL_DEX_GRANBULL, // Granbull
+ NATIONAL_DEX_AIPOM, // Griffel
+ NATIONAL_DEX_GRUMPIG, // Groink
+ NATIONAL_DEX_GROUDON, // Groudon
+ NATIONAL_DEX_GARDEVOIR, // Guardevoir
+ NATIONAL_DEX_SPEAROW, // Habitak
+ NATIONAL_DEX_HARIYAMA, // Hariyama
+ NATIONAL_DEX_BLISSEY, // Heiteira
+ NATIONAL_DEX_HO_OH, // Ho-oh
+ NATIONAL_DEX_HOOTHOOT, // Hoothoot
+ NATIONAL_DEX_HOPPIP, // Hoppspross
+ NATIONAL_DEX_WEEDLE, // Hornliu
+ NATIONAL_DEX_SKIPLOOM, // Hubelupf
+ NATIONAL_DEX_HOUNDOOM, // Hundemon
+ NATIONAL_DEX_HOUNDOUR, // Hunduster
+ NATIONAL_DEX_MUDKIP, // Hydropi
+ NATIONAL_DEX_HYPNO, // Hypno
+ NATIONAL_DEX_FEAROW, // Ibitak
+ NATIONAL_DEX_UNOWN, // Icognito
+ NATIONAL_DEX_QUILAVA, // Igelavar
+ NATIONAL_DEX_CROBAT, // Iksbat
+ NATIONAL_DEX_ILLUMISE, // Illumise
+ NATIONAL_DEX_FERALIGATR, // Impergator
+ NATIONAL_DEX_WYNAUT, // Isso
+ NATIONAL_DEX_JIRACHI, // Jirachi
+ NATIONAL_DEX_DEWGONG, // Jugong
+ NATIONAL_DEX_COMBUSKEN, // Jungglut
+ NATIONAL_DEX_SEEL, // Jurob
+ NATIONAL_DEX_KABUTO, // Kabuto
+ NATIONAL_DEX_KABUTOPS, // Kabutops
+ NATIONAL_DEX_KADABRA, // Kadabra
+ NATIONAL_DEX_KANGASKHAN, // Kangama
+ NATIONAL_DEX_CARVANHA, // Kanivanha
+ NATIONAL_DEX_BRELOOM, // Kapilz
+ NATIONAL_DEX_HITMONTOP, // Kapoera
+ NATIONAL_DEX_LUDICOLO, // Kappalores
+ NATIONAL_DEX_TOTODILE, // Karnimani
+ NATIONAL_DEX_MAGIKARP, // Karpador
+ NATIONAL_DEX_KECLEON, // Kecleon
+ NATIONAL_DEX_PILOSWINE, // Keifel
+ NATIONAL_DEX_HITMONLEE, // Kicklee
+ NATIONAL_DEX_BAGON, // Kindwurm
+ NATIONAL_DEX_KINGLER, // Kingler
+ NATIONAL_DEX_KIRLIA, // Kirlia
+ NATIONAL_DEX_GEODUDE, // Kleinstein
+ NATIONAL_DEX_TRAPINCH, // Knacklion
+ NATIONAL_DEX_SHROOMISH, // Knilz
+ NATIONAL_DEX_BELLSPROUT, // Knofensa
+ NATIONAL_DEX_MAROWAK, // Knogga
+ NATIONAL_DEX_WIGGLYTUFF, // Knuddeluff
+ NATIONAL_DEX_EXEGGUTOR, // Kokowei
+ NATIONAL_DEX_KAKUNA, // Kokuna
+ NATIONAL_DEX_KRABBY, // Krabby
+ NATIONAL_DEX_LOUDRED, // Krakeelo
+ NATIONAL_DEX_MURKROW, // Kramurx
+ NATIONAL_DEX_EXPLOUD, // Krawumms
+ NATIONAL_DEX_CORPHISH, // Krebscorps
+ NATIONAL_DEX_CRAWDAUNT, // Krebutack
+ NATIONAL_DEX_SMOOCHUM, // Kussilla
+ NATIONAL_DEX_KYOGRE, // Kyogre
+ NATIONAL_DEX_SLOWBRO, // Lahmus
+ NATIONAL_DEX_CHINCHOU, // Lampi
+ NATIONAL_DEX_LANTURN, // Lanturn
+ NATIONAL_DEX_LAPRAS, // Lapras
+ NATIONAL_DEX_LARVITAR, // Larvitar
+ NATIONAL_DEX_SLOWKING, // Laschoking
+ NATIONAL_DEX_LATIAS, // Latias
+ NATIONAL_DEX_LATIOS, // Latios
+ NATIONAL_DEX_MOLTRES, // Lavados
+ NATIONAL_DEX_LEDIAN, // Ledian
+ NATIONAL_DEX_LEDYBA, // Ledyba
+ NATIONAL_DEX_ELECTRODE, // Lektrobal
+ NATIONAL_DEX_CLAYDOL, // Lepumentas
+ NATIONAL_DEX_SLAKING, // Letarking
+ NATIONAL_DEX_FLYGON, // Libelldra
+ NATIONAL_DEX_LUVDISC, // Liebiskus
+ NATIONAL_DEX_LILEEP, // Liliep
+ NATIONAL_DEX_BLAZIKEN, // Lohgock
+ NATIONAL_DEX_LOMBRE, // Lombrero
+ NATIONAL_DEX_BAYLEEF, // Lorblatt
+ NATIONAL_DEX_LOTAD, // Loturzel
+ NATIONAL_DEX_LUGIA, // Lugia
+ NATIONAL_DEX_LUNATONE, // Lunastein
+ NATIONAL_DEX_MACHOP, // Machollo
+ NATIONAL_DEX_MACHAMP, // Machomei
+ NATIONAL_DEX_MAGBY, // Magby
+ NATIONAL_DEX_MAGCARGO, // Magcargo
+ NATIONAL_DEX_MAGMAR, // Magmar
+ NATIONAL_DEX_MIGHTYENA, // Magnayen
+ NATIONAL_DEX_MAGNEMITE, // Magnetilo
+ NATIONAL_DEX_MAGNETON, // Magneton
+ NATIONAL_DEX_MAKUHITA, // Makuhita
+ NATIONAL_DEX_MANTINE, // Mantax
+ NATIONAL_DEX_MARILL, // Marill
+ NATIONAL_DEX_MACHOKE, // Maschock
+ NATIONAL_DEX_MASQUERAIN, // Maskeregen
+ NATIONAL_DEX_MEOWTH, // Mauzi
+ NATIONAL_DEX_MEDICHAM, // Meditalis
+ NATIONAL_DEX_MEDITITE, // Meditie
+ NATIONAL_DEX_MEGANIUM, // Meganie
+ NATIONAL_DEX_MANKEY, // Menki
+ NATIONAL_DEX_METAGROSS, // Metagross
+ NATIONAL_DEX_METANG, // Metang
+ NATIONAL_DEX_MEW, // Mew
+ NATIONAL_DEX_MEWTWO, // Mewtu
+ NATIONAL_DEX_MILOTIC, // Milotic
+ NATIONAL_DEX_MILTANK, // Miltank
+ NATIONAL_DEX_MINUN, // Minun
+ NATIONAL_DEX_SUDOWOODO, // Mogelbaum
+ NATIONAL_DEX_MARSHTOMP, // Moorabbel
+ NATIONAL_DEX_QUAGSIRE, // Morlord
+ NATIONAL_DEX_VIGOROTH, // Muntier
+ NATIONAL_DEX_SHELLDER, // Muschas
+ NATIONAL_DEX_ODDISH, // Myrapla
+ NATIONAL_DEX_UMBREON, // Nachtara
+ NATIONAL_DEX_NOSEPASS, // Nasgnet
+ NATIONAL_DEX_NATU, // Natu
+ NATIONAL_DEX_GASTLY, // Nebulak
+ NATIONAL_DEX_NIDOKING, // Nidoking
+ NATIONAL_DEX_NIDOQUEEN, // Nidoqueen
+ NATIONAL_DEX_NIDORAN_F, // Nidoran♀
+ NATIONAL_DEX_NIDORAN_M, // Nidoran♂
+ NATIONAL_DEX_NIDORINA, // Nidorina
+ NATIONAL_DEX_NIDORINO, // Nidorino
+ NATIONAL_DEX_NINCADA, // Nincada
+ NATIONAL_DEX_NINJASK, // Ninjask
+ NATIONAL_DEX_SHEDINJA, // Ninjatom
+ NATIONAL_DEX_HITMONCHAN, // Nockchan
+ NATIONAL_DEX_NOCTOWL, // Noctuh
+ NATIONAL_DEX_CACTURNE, // Noktuska
+ NATIONAL_DEX_OCTILLERY, // Octillery
+ NATIONAL_DEX_VENOMOTH, // Omot
+ NATIONAL_DEX_ONIX, // Onix
+ NATIONAL_DEX_EXEGGCUTE, // Owei
+ NATIONAL_DEX_CHIMECHO, // Palimpalim
+ NATIONAL_DEX_SPINDA, // Pandir
+ NATIONAL_DEX_CASCOON, // Panekon
+ NATIONAL_DEX_MR_MIME, // Pantimos
+ NATIONAL_DEX_SKARMORY, // Panzaeron
+ NATIONAL_DEX_BEAUTIFLY, // Papinella
+ NATIONAL_DEX_JUMPLUFF, // Papungha
+ NATIONAL_DEX_PARAS, // Paras
+ NATIONAL_DEX_PARASECT, // Parasek
+ NATIONAL_DEX_PELIPPER, // Pelipper
+ NATIONAL_DEX_CLAMPERL, // Perlu
+ NATIONAL_DEX_PHANPY, // Phanpy
+ NATIONAL_DEX_PICHU, // Pichu
+ NATIONAL_DEX_CLEFAIRY, // Piepi
+ NATIONAL_DEX_CLEFFA, // Pii
+ NATIONAL_DEX_PIKACHU, // Pikachu
+ NATIONAL_DEX_PINSIR, // Pinsir
+ NATIONAL_DEX_CLEFABLE, // Pixi
+ NATIONAL_DEX_PLUSLE, // Plusle
+ NATIONAL_DEX_PONYTA, // Ponita
+ NATIONAL_DEX_FARFETCHD, // Porenta
+ NATIONAL_DEX_PORYGON, // Porygon
+ NATIONAL_DEX_PORYGON2, // Porygon2
+ NATIONAL_DEX_SHUCKLE, // Pottrott
+ NATIONAL_DEX_ESPEON, // Psiana
+ NATIONAL_DEX_DUSTOX, // Pudox
+ NATIONAL_DEX_JIGGLYPUFF, // Pummeluff
+ NATIONAL_DEX_PUPITAR, // Pupitar
+ NATIONAL_DEX_BALTOY, // Puppance
+ NATIONAL_DEX_POLIWRATH, // Quappo
+ NATIONAL_DEX_POLIWAG, // Quapsel
+ NATIONAL_DEX_POLIWHIRL, // Quaputzi
+ NATIONAL_DEX_POLITOED, // Quaxo
+ NATIONAL_DEX_SWINUB, // Quiekel
+ NATIONAL_DEX_TORKOAL, // Qurtel
+ NATIONAL_DEX_TYROGUE, // Rabauz
+ NATIONAL_DEX_RAICHU, // Raichu
+ NATIONAL_DEX_RAIKOU, // Raikou
+ NATIONAL_DEX_PRIMEAPE, // Rasaff
+ NATIONAL_DEX_RATTATA, // Rattfratz
+ NATIONAL_DEX_RATICATE, // Rattikarl
+ NATIONAL_DEX_CATERPIE, // Raupy
+ NATIONAL_DEX_RAYQUAZA, // Rayquaza
+ NATIONAL_DEX_REGICE, // Regice
+ NATIONAL_DEX_REGIROCK, // Regirock
+ NATIONAL_DEX_REGISTEEL, // Registeel
+ NATIONAL_DEX_SNORLAX, // Relaxo
+ NATIONAL_DEX_RELICANTH, // Relicanth
+ NATIONAL_DEX_REMORAID, // Remoraid
+ NATIONAL_DEX_GROVYLE, // Reptain
+ NATIONAL_DEX_EKANS, // Rettan
+ NATIONAL_DEX_RHYHORN, // Rihorn
+ NATIONAL_DEX_RHYDON, // Rizeros
+ NATIONAL_DEX_ROSELIA, // Roselia
+ NATIONAL_DEX_JYNX, // Rossana
+ NATIONAL_DEX_METAPOD, // Safcon
+ NATIONAL_DEX_GOREBYSS, // Saganabyss
+ NATIONAL_DEX_SEEDOT, // Samurzel
+ NATIONAL_DEX_SANDSLASH, // Sandamer
+ NATIONAL_DEX_SANDSHREW, // Sandan
+ NATIONAL_DEX_VICTREEBEL, // Sarzenia
+ NATIONAL_DEX_SILCOON, // Schaloko
+ NATIONAL_DEX_SCIZOR, // Scherox
+ NATIONAL_DEX_SQUIRTLE, // Schiggy
+ NATIONAL_DEX_WARTORTLE, // Schillok
+ NATIONAL_DEX_SWALOT, // Schlukwech
+ NATIONAL_DEX_GULPIN, // Schluppuck
+ NATIONAL_DEX_LICKITUNG, // Schlurp
+ NATIONAL_DEX_BARBOACH, // Schmerbe
+ NATIONAL_DEX_SLUGMA, // Schneckmag
+ NATIONAL_DEX_SNORUNT, // Schneppke
+ NATIONAL_DEX_TAILLOW, // Schwalbini
+ NATIONAL_DEX_SWELLOW, // Schwalboss
+ NATIONAL_DEX_KINGDRA, // Seedraking
+ NATIONAL_DEX_SEALEO, // Seejong
+ NATIONAL_DEX_SEADRA, // Seemon
+ NATIONAL_DEX_SPHEAL, // Seemops
+ NATIONAL_DEX_HORSEA, // Seeper
+ NATIONAL_DEX_ZANGOOSE, // Sengo
+ NATIONAL_DEX_SHUPPET, // Shuppet
+ NATIONAL_DEX_SCYTHER, // Sichlor
+ NATIONAL_DEX_ALAKAZAM, // Simsala
+ NATIONAL_DEX_HERACROSS, // Skaraborn
+ NATIONAL_DEX_GLIGAR, // Skorgla
+ NATIONAL_DEX_GRIMER, // Sleima
+ NATIONAL_DEX_MUK, // Sleimok
+ NATIONAL_DEX_BUTTERFREE, // Smettbo
+ NATIONAL_DEX_WEEZING, // Smogmog
+ NATIONAL_DEX_KOFFING, // Smogon
+ NATIONAL_DEX_SNEASEL, // Sniebel
+ NATIONAL_DEX_PERSIAN, // Snobilikat
+ NATIONAL_DEX_SNUBBULL, // Snubbull
+ NATIONAL_DEX_SOLROCK, // Sonnfel
+ NATIONAL_DEX_SUNFLORA, // Sonnflora
+ NATIONAL_DEX_SUNKERN, // Sonnkern
+ NATIONAL_DEX_SPOINK, // Spoink
+ NATIONAL_DEX_STEELIX, // Stahlos
+ NATIONAL_DEX_STARMIE, // Starmie
+ NATIONAL_DEX_STARYU, // Sterndu
+ NATIONAL_DEX_AGGRON, // Stolloss
+ NATIONAL_DEX_LAIRON, // Stollrak
+ NATIONAL_DEX_ARON, // Stollunior
+ NATIONAL_DEX_SUICUNE, // Suicune
+ NATIONAL_DEX_SWAMPERT, // Sumpex
+ NATIONAL_DEX_TANGELA, // Tangela
+ NATIONAL_DEX_BELDUM, // Tanhel
+ NATIONAL_DEX_PINECO, // Tannza
+ NATIONAL_DEX_PIDGEOTTO, // Tauboga
+ NATIONAL_DEX_PIDGEOT, // Tauboss
+ NATIONAL_DEX_PIDGEY, // Taubsi
+ NATIONAL_DEX_TAUROS, // Tauros
+ NATIONAL_DEX_TEDDIURSA, // Teddiursa
+ NATIONAL_DEX_SHIFTRY, // Tengulist
+ NATIONAL_DEX_TENTACOOL, // Tentacha
+ NATIONAL_DEX_TENTACRUEL, // Tentoxa
+ NATIONAL_DEX_TOGEPI, // Togepi
+ NATIONAL_DEX_TOGETIC, // Togetic
+ NATIONAL_DEX_SHARPEDO, // Tohaido
+ NATIONAL_DEX_TYPHLOSION, // Tornupto
+ NATIONAL_DEX_CUBONE, // Tragosso
+ NATIONAL_DEX_RALTS, // Trasla
+ NATIONAL_DEX_DROWZEE, // Traumato
+ NATIONAL_DEX_MISDREAVUS, // Traunfugil
+ NATIONAL_DEX_TROPIUS, // Tropius
+ NATIONAL_DEX_BLASTOISE, // Turtok
+ NATIONAL_DEX_CACNEA, // Tuska
+ NATIONAL_DEX_CROCONAW, // Tyracroc
+ NATIONAL_DEX_WEEPINBELL, // Ultrigaria
+ NATIONAL_DEX_URSARING, // Ursaring
+ NATIONAL_DEX_VIBRAVA, // Vibrava
+ NATIONAL_DEX_SEVIPER, // Vipitis
+ NATIONAL_DEX_VOLBEAT, // Volbeat
+ NATIONAL_DEX_MANECTRIC, // Voltenso
+ NATIONAL_DEX_MAREEP, // Voltilamm
+ NATIONAL_DEX_VOLTORB, // Voltobal
+ NATIONAL_DEX_NINETALES, // Vulnona
+ NATIONAL_DEX_VULPIX, // Vulpix
+ NATIONAL_DEX_FLAAFFY, // Waaty
+ NATIONAL_DEX_SWABLU, // Wablu
+ NATIONAL_DEX_WAILMER, // Wailmer
+ NATIONAL_DEX_WAILORD, // Wailord
+ NATIONAL_DEX_WALREIN, // Walraisa
+ NATIONAL_DEX_WURMPLE, // Waumpel
+ NATIONAL_DEX_SPINARAK, // Webarak
+ NATIONAL_DEX_WHISCASH, // Welsar
+ NATIONAL_DEX_CRADILY, // Wielie
+ NATIONAL_DEX_FURRET, // Wiesenior
+ NATIONAL_DEX_SENTRET, // Wiesor
+ NATIONAL_DEX_WINGULL, // Wingull
+ NATIONAL_DEX_WOBBUFFET, // Woingenau
+ NATIONAL_DEX_XATU, // Xatu
+ NATIONAL_DEX_YANMA, // Yanma
+ NATIONAL_DEX_ZAPDOS, // Zapdos
+ NATIONAL_DEX_ZIGZAGOON, // Zigzachs
+ NATIONAL_DEX_SABLEYE, // Zobiris
+ NATIONAL_DEX_ZUBAT, // Zubat
+ NATIONAL_DEX_DUSCLOPS, // Zwirrklop
+ NATIONAL_DEX_DUSKULL, // Zwirrlicht
};
#endif
static const u16 gPokedexOrder_Weight[] =
{
- 92, // Gastly
- 93, // Haunter
- 187, // Hoppip
- 50, // Diglett
- 351, // Castform
- 109, // Koffing
- 174, // Igglybuff
- 200, // Misdreavus
- 358, // Chimecho
- 188, // Skiploom
- 385, // Jirachi
- 333, // Swablu
- 292, // Shedinja
- 175, // Togepi
- 283, // Surskit
- 16, // Pidgey
- 191, // Sunkern
- 339, // Barboach
- 172, // Pichu
- 298, // Azurill
- 315, // Roselia
- 177, // Natu
- 21, // Spearow
- 198, // Murkrow
- 353, // Shuppet
- 276, // Taillow
- 102, // Exeggcute
- 255, // Torchic
- 270, // Lotad
- 10, // Caterpie
- 189, // Jumpluff
- 173, // Cleffa
- 13, // Weedle
- 176, // Togetic
- 147, // Dratini
- 19, // Rattata
- 284, // Masquerain
- 265, // Wurmple
- 211, // Qwilfish
- 151, // Mew
- 90, // Shellder
- 273, // Seedot
- 132, // Ditto
- 69, // Bellsprout
- 311, // Plusle
- 52, // Meowth
- 312, // Minun
- 285, // Shroomish
- 251, // Celebi
- 222, // Corsola
- 252, // Treecko
- 327, // Spinda
- 201, // Unown
- 46, // Paras
- 43, // Oddish
- 39, // Jigglypuff
- 290, // Nincada
- 182, // Bellossom
- 81, // Magnemite
- 25, // Pikachu
- 238, // Smoochum
- 161, // Sentret
- 70, // Weepinbell
- 152, // Chikorita
- 220, // Swinub
- 133, // Eevee
- 98, // Krabby
- 104, // Cubone
- 280, // Ralts
- 1, // Bulbasaur
- 23, // Ekans
- 29, // Nidoran?
- 204, // Pineco
- 349, // Feebas
- 138, // Omanyte
- 41, // Zubat
- 35, // Clefairy
- 258, // Mudkip
- 209, // Snubbull
- 179, // Mareep
- 155, // Cyndaquil
- 116, // Horsea
- 4, // Charmander
- 192, // Sunflora
- 183, // Marill
- 194, // Wooper
- 167, // Spinarak
- 44, // Gloom
- 370, // Luvdisc
- 216, // Teddiursa
- 32, // Nidoran?
- 7, // Squirtle
- 278, // Wingull
- 158, // Totodile
- 110, // Weezing
- 37, // Vulpix
- 11, // Metapod
- 266, // Silcoon
- 129, // Magikarp
- 14, // Kakuna
- 316, // Gulpin
- 100, // Voltorb
- 165, // Ledyba
- 228, // Houndour
- 300, // Skitty
- 302, // Sableye
- 307, // Meditite
- 341, // Corphish
- 190, // Aipom
- 268, // Cascoon
- 303, // Mawile
- 140, // Kabuto
- 40, // Wigglytuff
- 27, // Sandshrew
- 223, // Remoraid
- 291, // Ninjask
- 170, // Chinchou
- 60, // Poliwag
- 347, // Anorith
- 49, // Venomoth
- 354, // Banette
- 2, // Ivysaur
- 180, // Flaaffy
- 261, // Poochyena
- 360, // Wynaut
- 206, // Dunsparce
- 178, // Xatu
- 355, // Duskull
- 83, // Farfetch'd
- 328, // Trapinch
- 118, // Goldeen
- 309, // Electrike
- 329, // Vibrava
- 71, // Victreebel
- 153, // Bayleef
- 225, // Delibird
- 293, // Whismur
- 148, // Dragonair
- 361, // Snorunt
- 263, // Zigzagoon
- 314, // Illumise
- 313, // Volbeat
- 20, // Raticate
- 45, // Vileplume
- 156, // Quilava
- 5, // Charmeleon
- 58, // Growlithe
- 256, // Combusken
- 66, // Machop
- 63, // Abra
- 33, // Nidorino
- 54, // Psyduck
- 277, // Swellow
- 38, // Ninetales
- 30, // Nidorina
- 61, // Poliwhirl
- 74, // Geodude
- 281, // Kirlia
- 213, // Shuckle
- 334, // Altaria
- 318, // Carvanha
- 236, // Tyrogue
- 163, // Hoothoot
- 240, // Magby
- 343, // Baltoy
- 253, // Grovyle
- 352, // Kecleon
- 171, // Lanturn
- 8, // Wartortle
- 368, // Gorebyss
- 369, // Relicanth
- 239, // Elekid
- 340, // Whiscash
- 345, // Lileep
- 322, // Numel
- 287, // Slakoth
- 135, // Jolteon
- 159, // Croconaw
- 136, // Flareon
- 117, // Seadra
- 196, // Espeon
- 367, // Huntail
- 197, // Umbreon
- 259, // Marshtomp
- 274, // Nuzleaf
- 215, // Sneasel
- 56, // Mankey
- 279, // Pelipper
- 267, // Beautifly
- 224, // Octillery
- 184, // Azumarill
- 202, // Wobbuffet
- 134, // Vaporeon
- 28, // Sandslash
- 47, // Parasect
- 15, // Beedrill
- 89, // Muk
- 17, // Pidgeotto
- 88, // Grimer
- 26, // Raichu
- 77, // Ponyta
- 125, // Electabuzz
- 48, // Venonat
- 325, // Spoink
- 356, // Dusclops
- 308, // Medicham
- 269, // Dustox
- 53, // Persian
- 12, // Butterfree
- 57, // Primeape
- 96, // Drowzee
- 162, // Furret
- 233, // Porygon2
- 271, // Lombre
- 264, // Linoone
- 301, // Delcatty
- 342, // Crawdaunt
- 51, // Dugtrio
- 168, // Ariados
- 231, // Phanpy
- 186, // Politoed
- 120, // Staryu
- 113, // Chansey
- 139, // Omastar
- 114, // Tangela
- 218, // Slugma
- 229, // Houndoom
- 166, // Ledian
- 79, // Slowpoke
- 137, // Porygon
- 262, // Mightyena
- 193, // Yanma
- 22, // Fearow
- 185, // Sudowoodo
- 119, // Seaking
- 286, // Breloom
- 84, // Doduo
- 18, // Pidgeot
- 363, // Spheal
- 36, // Clefable
- 380, // Latias
- 310, // Manectric
- 335, // Zangoose
- 141, // Kabutops
- 94, // Gengar
- 294, // Loudred
- 124, // Jynx
- 164, // Noctowl
- 203, // Girafarig
- 371, // Bagon
- 126, // Magmar
- 105, // Marowak
- 72, // Tentacool
- 288, // Vigoroth
- 242, // Blissey
- 359, // Absol
- 65, // Alakazam
- 237, // Hitmontop
- 282, // Gardevoir
- 210, // Granbull
- 106, // Hitmonlee
- 107, // Hitmonchan
- 227, // Skarmory
- 331, // Cacnea
- 257, // Blaziken
- 254, // Sceptile
- 336, // Seviper
- 366, // Clamperl
- 145, // Zapdos
- 214, // Heracross
- 62, // Poliwrath
- 122, // Mr. mime
- 127, // Pinsir
- 272, // Ludicolo
- 73, // Tentacruel
- 42, // Golbat
- 219, // Magcargo
- 144, // Articuno
- 221, // Piloswine
- 123, // Scyther
- 64, // Kadabra
- 235, // Smeargle
- 142, // Aerodactyl
- 275, // Shiftry
- 99, // Kingler
- 31, // Nidoqueen
- 82, // Magneton
- 304, // Aron
- 381, // Latios
- 146, // Moltres
- 346, // Cradily
- 386, // Deoxys
- 181, // Ampharos
- 34, // Nidoking
- 207, // Gligar
- 24, // Arbok
- 108, // Lickitung
- 101, // Electrode
- 348, // Armaldo
- 67, // Machoke
- 234, // Stantler
- 326, // Grumpig
- 246, // Larvitar
- 169, // Crobat
- 195, // Quagsire
- 241, // Miltank
- 97, // Hypno
- 55, // Golduck
- 332, // Cacturne
- 80, // Slowbro
- 157, // Typhlosion
- 199, // Slowking
- 115, // Kangaskhan
- 121, // Starmie
- 317, // Swalot
- 324, // Torkoal
- 260, // Swampert
- 330, // Flygon
- 295, // Exploud
- 85, // Dodrio
- 9, // Blastoise
- 296, // Makuhita
- 364, // Sealeo
- 128, // Tauros
- 319, // Sharpedo
- 160, // Feraligatr
- 86, // Seel
- 6, // Charizard
- 78, // Rapidash
- 374, // Beldum
- 299, // Nosepass
- 3, // Venusaur
- 357, // Tropius
- 154, // Meganium
- 373, // Salamence
- 75, // Graveler
- 344, // Claydol
- 372, // Shelgon
- 111, // Rhyhorn
- 212, // Scizor
- 87, // Dewgong
- 112, // Rhydon
- 232, // Donphan
- 103, // Exeggutor
- 305, // Lairon
- 150, // Mewtwo
- 217, // Ursaring
- 205, // Forretress
- 68, // Machamp
- 320, // Wailmer
- 289, // Slaking
- 91, // Cloyster
- 365, // Walrein
- 247, // Pupitar
- 230, // Kingdra
- 338, // Solrock
- 59, // Arcanine
- 350, // Milotic
- 337, // Lunatone
- 378, // Regice
- 243, // Raikou
- 245, // Suicune
- 244, // Entei
- 250, // Ho-Oh
- 248, // Tyranitar
- 375, // Metang
- 379, // Registeel
- 384, // Rayquaza
- 95, // Onix
- 149, // Dragonite
- 249, // Lugia
- 131, // Lapras
- 323, // Camerupt
- 226, // Mantine
- 377, // Regirock
- 130, // Gyarados
- 297, // Hariyama
- 362, // Glalie
- 76, // Golem
- 382, // Kyogre
- 306, // Aggron
- 321, // Wailord
- 208, // Steelix
- 143, // Snorlax
- 376, // Metagross
- 383, // Groudon
+ NATIONAL_DEX_GASTLY,
+ NATIONAL_DEX_HAUNTER,
+ NATIONAL_DEX_HOPPIP,
+ NATIONAL_DEX_DIGLETT,
+ NATIONAL_DEX_CASTFORM,
+ NATIONAL_DEX_KOFFING,
+ NATIONAL_DEX_IGGLYBUFF,
+ NATIONAL_DEX_MISDREAVUS,
+ NATIONAL_DEX_CHIMECHO,
+ NATIONAL_DEX_SKIPLOOM,
+ NATIONAL_DEX_JIRACHI,
+ NATIONAL_DEX_SWABLU,
+ NATIONAL_DEX_SHEDINJA,
+ NATIONAL_DEX_TOGEPI,
+ NATIONAL_DEX_SURSKIT,
+ NATIONAL_DEX_PIDGEY,
+ NATIONAL_DEX_SUNKERN,
+ NATIONAL_DEX_BARBOACH,
+ NATIONAL_DEX_PICHU,
+ NATIONAL_DEX_AZURILL,
+ NATIONAL_DEX_ROSELIA,
+ NATIONAL_DEX_NATU,
+ NATIONAL_DEX_SPEAROW,
+ NATIONAL_DEX_MURKROW,
+ NATIONAL_DEX_SHUPPET,
+ NATIONAL_DEX_TAILLOW,
+ NATIONAL_DEX_EXEGGCUTE,
+ NATIONAL_DEX_TORCHIC,
+ NATIONAL_DEX_LOTAD,
+ NATIONAL_DEX_CATERPIE,
+ NATIONAL_DEX_JUMPLUFF,
+ NATIONAL_DEX_CLEFFA,
+ NATIONAL_DEX_WEEDLE,
+ NATIONAL_DEX_TOGETIC,
+ NATIONAL_DEX_DRATINI,
+ NATIONAL_DEX_RATTATA,
+ NATIONAL_DEX_MASQUERAIN,
+ NATIONAL_DEX_WURMPLE,
+ NATIONAL_DEX_QWILFISH,
+ NATIONAL_DEX_MEW,
+ NATIONAL_DEX_SHELLDER,
+ NATIONAL_DEX_SEEDOT,
+ NATIONAL_DEX_DITTO,
+ NATIONAL_DEX_BELLSPROUT,
+ NATIONAL_DEX_PLUSLE,
+ NATIONAL_DEX_MEOWTH,
+ NATIONAL_DEX_MINUN,
+ NATIONAL_DEX_SHROOMISH,
+ NATIONAL_DEX_CELEBI,
+ NATIONAL_DEX_CORSOLA,
+ NATIONAL_DEX_TREECKO,
+ NATIONAL_DEX_SPINDA,
+ NATIONAL_DEX_UNOWN,
+ NATIONAL_DEX_PARAS,
+ NATIONAL_DEX_ODDISH,
+ NATIONAL_DEX_JIGGLYPUFF,
+ NATIONAL_DEX_NINCADA,
+ NATIONAL_DEX_BELLOSSOM,
+ NATIONAL_DEX_MAGNEMITE,
+ NATIONAL_DEX_PIKACHU,
+ NATIONAL_DEX_SMOOCHUM,
+ NATIONAL_DEX_SENTRET,
+ NATIONAL_DEX_WEEPINBELL,
+ NATIONAL_DEX_CHIKORITA,
+ NATIONAL_DEX_SWINUB,
+ NATIONAL_DEX_EEVEE,
+ NATIONAL_DEX_KRABBY,
+ NATIONAL_DEX_CUBONE,
+ NATIONAL_DEX_RALTS,
+ NATIONAL_DEX_BULBASAUR,
+ NATIONAL_DEX_EKANS,
+ NATIONAL_DEX_NIDORAN_F,
+ NATIONAL_DEX_PINECO,
+ NATIONAL_DEX_FEEBAS,
+ NATIONAL_DEX_OMANYTE,
+ NATIONAL_DEX_ZUBAT,
+ NATIONAL_DEX_CLEFAIRY,
+ NATIONAL_DEX_MUDKIP,
+ NATIONAL_DEX_SNUBBULL,
+ NATIONAL_DEX_MAREEP,
+ NATIONAL_DEX_CYNDAQUIL,
+ NATIONAL_DEX_HORSEA,
+ NATIONAL_DEX_CHARMANDER,
+ NATIONAL_DEX_SUNFLORA,
+ NATIONAL_DEX_MARILL,
+ NATIONAL_DEX_WOOPER,
+ NATIONAL_DEX_SPINARAK,
+ NATIONAL_DEX_GLOOM,
+ NATIONAL_DEX_LUVDISC,
+ NATIONAL_DEX_TEDDIURSA,
+ NATIONAL_DEX_NIDORAN_M,
+ NATIONAL_DEX_SQUIRTLE,
+ NATIONAL_DEX_WINGULL,
+ NATIONAL_DEX_TOTODILE,
+ NATIONAL_DEX_WEEZING,
+ NATIONAL_DEX_VULPIX,
+ NATIONAL_DEX_METAPOD,
+ NATIONAL_DEX_SILCOON,
+ NATIONAL_DEX_MAGIKARP,
+ NATIONAL_DEX_KAKUNA,
+ NATIONAL_DEX_GULPIN,
+ NATIONAL_DEX_VOLTORB,
+ NATIONAL_DEX_LEDYBA,
+ NATIONAL_DEX_HOUNDOUR,
+ NATIONAL_DEX_SKITTY,
+ NATIONAL_DEX_SABLEYE,
+ NATIONAL_DEX_MEDITITE,
+ NATIONAL_DEX_CORPHISH,
+ NATIONAL_DEX_AIPOM,
+ NATIONAL_DEX_CASCOON,
+ NATIONAL_DEX_MAWILE,
+ NATIONAL_DEX_KABUTO,
+ NATIONAL_DEX_WIGGLYTUFF,
+ NATIONAL_DEX_SANDSHREW,
+ NATIONAL_DEX_REMORAID,
+ NATIONAL_DEX_NINJASK,
+ NATIONAL_DEX_CHINCHOU,
+ NATIONAL_DEX_POLIWAG,
+ NATIONAL_DEX_ANORITH,
+ NATIONAL_DEX_VENOMOTH,
+ NATIONAL_DEX_BANETTE,
+ NATIONAL_DEX_IVYSAUR,
+ NATIONAL_DEX_FLAAFFY,
+ NATIONAL_DEX_POOCHYENA,
+ NATIONAL_DEX_WYNAUT,
+ NATIONAL_DEX_DUNSPARCE,
+ NATIONAL_DEX_XATU,
+ NATIONAL_DEX_DUSKULL,
+ NATIONAL_DEX_FARFETCHD,
+ NATIONAL_DEX_TRAPINCH,
+ NATIONAL_DEX_GOLDEEN,
+ NATIONAL_DEX_ELECTRIKE,
+ NATIONAL_DEX_VIBRAVA,
+ NATIONAL_DEX_VICTREEBEL,
+ NATIONAL_DEX_BAYLEEF,
+ NATIONAL_DEX_DELIBIRD,
+ NATIONAL_DEX_WHISMUR,
+ NATIONAL_DEX_DRAGONAIR,
+ NATIONAL_DEX_SNORUNT,
+ NATIONAL_DEX_ZIGZAGOON,
+ NATIONAL_DEX_ILLUMISE,
+ NATIONAL_DEX_VOLBEAT,
+ NATIONAL_DEX_RATICATE,
+ NATIONAL_DEX_VILEPLUME,
+ NATIONAL_DEX_QUILAVA,
+ NATIONAL_DEX_CHARMELEON,
+ NATIONAL_DEX_GROWLITHE,
+ NATIONAL_DEX_COMBUSKEN,
+ NATIONAL_DEX_MACHOP,
+ NATIONAL_DEX_ABRA,
+ NATIONAL_DEX_NIDORINO,
+ NATIONAL_DEX_PSYDUCK,
+ NATIONAL_DEX_SWELLOW,
+ NATIONAL_DEX_NINETALES,
+ NATIONAL_DEX_NIDORINA,
+ NATIONAL_DEX_POLIWHIRL,
+ NATIONAL_DEX_GEODUDE,
+ NATIONAL_DEX_KIRLIA,
+ NATIONAL_DEX_SHUCKLE,
+ NATIONAL_DEX_ALTARIA,
+ NATIONAL_DEX_CARVANHA,
+ NATIONAL_DEX_TYROGUE,
+ NATIONAL_DEX_HOOTHOOT,
+ NATIONAL_DEX_MAGBY,
+ NATIONAL_DEX_BALTOY,
+ NATIONAL_DEX_GROVYLE,
+ NATIONAL_DEX_KECLEON,
+ NATIONAL_DEX_LANTURN,
+ NATIONAL_DEX_WARTORTLE,
+ NATIONAL_DEX_GOREBYSS,
+ NATIONAL_DEX_RELICANTH,
+ NATIONAL_DEX_ELEKID,
+ NATIONAL_DEX_WHISCASH,
+ NATIONAL_DEX_LILEEP,
+ NATIONAL_DEX_NUMEL,
+ NATIONAL_DEX_SLAKOTH,
+ NATIONAL_DEX_JOLTEON,
+ NATIONAL_DEX_CROCONAW,
+ NATIONAL_DEX_FLAREON,
+ NATIONAL_DEX_SEADRA,
+ NATIONAL_DEX_ESPEON,
+ NATIONAL_DEX_HUNTAIL,
+ NATIONAL_DEX_UMBREON,
+ NATIONAL_DEX_MARSHTOMP,
+ NATIONAL_DEX_NUZLEAF,
+ NATIONAL_DEX_SNEASEL,
+ NATIONAL_DEX_MANKEY,
+ NATIONAL_DEX_PELIPPER,
+ NATIONAL_DEX_BEAUTIFLY,
+ NATIONAL_DEX_OCTILLERY,
+ NATIONAL_DEX_AZUMARILL,
+ NATIONAL_DEX_WOBBUFFET,
+ NATIONAL_DEX_VAPOREON,
+ NATIONAL_DEX_SANDSLASH,
+ NATIONAL_DEX_PARASECT,
+ NATIONAL_DEX_BEEDRILL,
+ NATIONAL_DEX_MUK,
+ NATIONAL_DEX_PIDGEOTTO,
+ NATIONAL_DEX_GRIMER,
+ NATIONAL_DEX_RAICHU,
+ NATIONAL_DEX_PONYTA,
+ NATIONAL_DEX_ELECTABUZZ,
+ NATIONAL_DEX_VENONAT,
+ NATIONAL_DEX_SPOINK,
+ NATIONAL_DEX_DUSCLOPS,
+ NATIONAL_DEX_MEDICHAM,
+ NATIONAL_DEX_DUSTOX,
+ NATIONAL_DEX_PERSIAN,
+ NATIONAL_DEX_BUTTERFREE,
+ NATIONAL_DEX_PRIMEAPE,
+ NATIONAL_DEX_DROWZEE,
+ NATIONAL_DEX_FURRET,
+ NATIONAL_DEX_PORYGON2,
+ NATIONAL_DEX_LOMBRE,
+ NATIONAL_DEX_LINOONE,
+ NATIONAL_DEX_DELCATTY,
+ NATIONAL_DEX_CRAWDAUNT,
+ NATIONAL_DEX_DUGTRIO,
+ NATIONAL_DEX_ARIADOS,
+ NATIONAL_DEX_PHANPY,
+ NATIONAL_DEX_POLITOED,
+ NATIONAL_DEX_STARYU,
+ NATIONAL_DEX_CHANSEY,
+ NATIONAL_DEX_OMASTAR,
+ NATIONAL_DEX_TANGELA,
+ NATIONAL_DEX_SLUGMA,
+ NATIONAL_DEX_HOUNDOOM,
+ NATIONAL_DEX_LEDIAN,
+ NATIONAL_DEX_SLOWPOKE,
+ NATIONAL_DEX_PORYGON,
+ NATIONAL_DEX_MIGHTYENA,
+ NATIONAL_DEX_YANMA,
+ NATIONAL_DEX_FEAROW,
+ NATIONAL_DEX_SUDOWOODO,
+ NATIONAL_DEX_SEAKING,
+ NATIONAL_DEX_BRELOOM,
+ NATIONAL_DEX_DODUO,
+ NATIONAL_DEX_PIDGEOT,
+ NATIONAL_DEX_SPHEAL,
+ NATIONAL_DEX_CLEFABLE,
+ NATIONAL_DEX_LATIAS,
+ NATIONAL_DEX_MANECTRIC,
+ NATIONAL_DEX_ZANGOOSE,
+ NATIONAL_DEX_KABUTOPS,
+ NATIONAL_DEX_GENGAR,
+ NATIONAL_DEX_LOUDRED,
+ NATIONAL_DEX_JYNX,
+ NATIONAL_DEX_NOCTOWL,
+ NATIONAL_DEX_GIRAFARIG,
+ NATIONAL_DEX_BAGON,
+ NATIONAL_DEX_MAGMAR,
+ NATIONAL_DEX_MAROWAK,
+ NATIONAL_DEX_TENTACOOL,
+ NATIONAL_DEX_VIGOROTH,
+ NATIONAL_DEX_BLISSEY,
+ NATIONAL_DEX_ABSOL,
+ NATIONAL_DEX_ALAKAZAM,
+ NATIONAL_DEX_HITMONTOP,
+ NATIONAL_DEX_GARDEVOIR,
+ NATIONAL_DEX_GRANBULL,
+ NATIONAL_DEX_HITMONLEE,
+ NATIONAL_DEX_HITMONCHAN,
+ NATIONAL_DEX_SKARMORY,
+ NATIONAL_DEX_CACNEA,
+ NATIONAL_DEX_BLAZIKEN,
+ NATIONAL_DEX_SCEPTILE,
+ NATIONAL_DEX_SEVIPER,
+ NATIONAL_DEX_CLAMPERL,
+ NATIONAL_DEX_ZAPDOS,
+ NATIONAL_DEX_HERACROSS,
+ NATIONAL_DEX_POLIWRATH,
+ NATIONAL_DEX_MR_MIME,
+ NATIONAL_DEX_PINSIR,
+ NATIONAL_DEX_LUDICOLO,
+ NATIONAL_DEX_TENTACRUEL,
+ NATIONAL_DEX_GOLBAT,
+ NATIONAL_DEX_MAGCARGO,
+ NATIONAL_DEX_ARTICUNO,
+ NATIONAL_DEX_PILOSWINE,
+ NATIONAL_DEX_SCYTHER,
+ NATIONAL_DEX_KADABRA,
+ NATIONAL_DEX_SMEARGLE,
+ NATIONAL_DEX_AERODACTYL,
+ NATIONAL_DEX_SHIFTRY,
+ NATIONAL_DEX_KINGLER,
+ NATIONAL_DEX_NIDOQUEEN,
+ NATIONAL_DEX_MAGNETON,
+ NATIONAL_DEX_ARON,
+ NATIONAL_DEX_LATIOS,
+ NATIONAL_DEX_MOLTRES,
+ NATIONAL_DEX_CRADILY,
+ NATIONAL_DEX_DEOXYS,
+ NATIONAL_DEX_AMPHAROS,
+ NATIONAL_DEX_NIDOKING,
+ NATIONAL_DEX_GLIGAR,
+ NATIONAL_DEX_ARBOK,
+ NATIONAL_DEX_LICKITUNG,
+ NATIONAL_DEX_ELECTRODE,
+ NATIONAL_DEX_ARMALDO,
+ NATIONAL_DEX_MACHOKE,
+ NATIONAL_DEX_STANTLER,
+ NATIONAL_DEX_GRUMPIG,
+ NATIONAL_DEX_LARVITAR,
+ NATIONAL_DEX_CROBAT,
+ NATIONAL_DEX_QUAGSIRE,
+ NATIONAL_DEX_MILTANK,
+ NATIONAL_DEX_HYPNO,
+ NATIONAL_DEX_GOLDUCK,
+ NATIONAL_DEX_CACTURNE,
+ NATIONAL_DEX_SLOWBRO,
+ NATIONAL_DEX_TYPHLOSION,
+ NATIONAL_DEX_SLOWKING,
+ NATIONAL_DEX_KANGASKHAN,
+ NATIONAL_DEX_STARMIE,
+ NATIONAL_DEX_SWALOT,
+ NATIONAL_DEX_TORKOAL,
+ NATIONAL_DEX_SWAMPERT,
+ NATIONAL_DEX_FLYGON,
+ NATIONAL_DEX_EXPLOUD,
+ NATIONAL_DEX_DODRIO,
+ NATIONAL_DEX_BLASTOISE,
+ NATIONAL_DEX_MAKUHITA,
+ NATIONAL_DEX_SEALEO,
+ NATIONAL_DEX_TAUROS,
+ NATIONAL_DEX_SHARPEDO,
+ NATIONAL_DEX_FERALIGATR,
+ NATIONAL_DEX_SEEL,
+ NATIONAL_DEX_CHARIZARD,
+ NATIONAL_DEX_RAPIDASH,
+ NATIONAL_DEX_BELDUM,
+ NATIONAL_DEX_NOSEPASS,
+ NATIONAL_DEX_VENUSAUR,
+ NATIONAL_DEX_TROPIUS,
+ NATIONAL_DEX_MEGANIUM,
+ NATIONAL_DEX_SALAMENCE,
+ NATIONAL_DEX_GRAVELER,
+ NATIONAL_DEX_CLAYDOL,
+ NATIONAL_DEX_SHELGON,
+ NATIONAL_DEX_RHYHORN,
+ NATIONAL_DEX_SCIZOR,
+ NATIONAL_DEX_DEWGONG,
+ NATIONAL_DEX_RHYDON,
+ NATIONAL_DEX_DONPHAN,
+ NATIONAL_DEX_EXEGGUTOR,
+ NATIONAL_DEX_LAIRON,
+ NATIONAL_DEX_MEWTWO,
+ NATIONAL_DEX_URSARING,
+ NATIONAL_DEX_FORRETRESS,
+ NATIONAL_DEX_MACHAMP,
+ NATIONAL_DEX_WAILMER,
+ NATIONAL_DEX_SLAKING,
+ NATIONAL_DEX_CLOYSTER,
+ NATIONAL_DEX_WALREIN,
+ NATIONAL_DEX_PUPITAR,
+ NATIONAL_DEX_KINGDRA,
+ NATIONAL_DEX_SOLROCK,
+ NATIONAL_DEX_ARCANINE,
+ NATIONAL_DEX_MILOTIC,
+ NATIONAL_DEX_LUNATONE,
+ NATIONAL_DEX_REGICE,
+ NATIONAL_DEX_RAIKOU,
+ NATIONAL_DEX_SUICUNE,
+ NATIONAL_DEX_ENTEI,
+ NATIONAL_DEX_HO_OH,
+ NATIONAL_DEX_TYRANITAR,
+ NATIONAL_DEX_METANG,
+ NATIONAL_DEX_REGISTEEL,
+ NATIONAL_DEX_RAYQUAZA,
+ NATIONAL_DEX_ONIX,
+ NATIONAL_DEX_DRAGONITE,
+ NATIONAL_DEX_LUGIA,
+ NATIONAL_DEX_LAPRAS,
+ NATIONAL_DEX_CAMERUPT,
+ NATIONAL_DEX_MANTINE,
+ NATIONAL_DEX_REGIROCK,
+ NATIONAL_DEX_GYARADOS,
+ NATIONAL_DEX_HARIYAMA,
+ NATIONAL_DEX_GLALIE,
+ NATIONAL_DEX_GOLEM,
+ NATIONAL_DEX_KYOGRE,
+ NATIONAL_DEX_AGGRON,
+ NATIONAL_DEX_WAILORD,
+ NATIONAL_DEX_STEELIX,
+ NATIONAL_DEX_SNORLAX,
+ NATIONAL_DEX_METAGROSS,
+ NATIONAL_DEX_GROUDON,
};
static const u16 gPokedexOrder_Height[] =
{
- 50, // Diglett
- 298, // Azurill
- 177, // Natu
- 13, // Weedle
- 172, // Pichu
- 173, // Cleffa
- 175, // Togepi
- 351, // Castform
- 174, // Igglybuff
- 10, // Caterpie
- 276, // Taillow
- 132, // Ditto
- 133, // Eevee
- 315, // Roselia
- 21, // Spearow
- 16, // Pidgey
- 191, // Sunkern
- 90, // Shellder
- 19, // Rattata
- 81, // Magnemite
- 46, // Paras
- 265, // Wurmple
- 385, // Jirachi
- 104, // Cubone
- 258, // Mudkip
- 194, // Wooper
- 116, // Horsea
- 52, // Meowth
- 29, // Nidoran?
- 220, // Swinub
- 151, // Mew
- 333, // Swablu
- 304, // Aron
- 311, // Plusle
- 312, // Minun
- 102, // Exeggcute
- 25, // Pikachu
- 182, // Bellossom
- 316, // Gulpin
- 263, // Zigzagoon
- 285, // Shroomish
- 138, // Omanyte
- 331, // Cacnea
- 98, // Krabby
- 280, // Ralts
- 187, // Hoppip
- 255, // Torchic
- 366, // Clamperl
- 74, // Geodude
- 183, // Marill
- 339, // Barboach
- 238, // Smoochum
- 100, // Voltorb
- 290, // Nincada
- 302, // Sableye
- 198, // Murkrow
- 211, // Qwilfish
- 7, // Squirtle
- 252, // Treecko
- 343, // Baltoy
- 43, // Oddish
- 270, // Lotad
- 39, // Jigglypuff
- 283, // Surskit
- 155, // Cyndaquil
- 140, // Kabuto
- 264, // Linoone
- 324, // Torkoal
- 32, // Nidoran?
- 167, // Spinarak
- 56, // Mankey
- 273, // Seedot
- 261, // Poochyena
- 231, // Phanpy
- 201, // Unown
- 170, // Chinchou
- 233, // Porygon2
- 60, // Poliwag
- 371, // Bagon
- 349, // Feebas
- 353, // Shuppet
- 158, // Totodile
- 251, // Celebi
- 360, // Wynaut
- 27, // Sandshrew
- 358, // Chimecho
- 370, // Luvdisc
- 228, // Houndour
- 266, // Silcoon
- 309, // Electrike
- 4, // Charmander
- 307, // Meditite
- 278, // Wingull
- 223, // Remoraid
- 341, // Corphish
- 222, // Corsola
- 314, // Illumise
- 209, // Snubbull
- 37, // Vulpix
- 246, // Larvitar
- 374, // Beldum
- 293, // Whismur
- 204, // Pineco
- 239, // Elekid
- 35, // Clefairy
- 213, // Shuckle
- 216, // Teddiursa
- 14, // Kakuna
- 300, // Skitty
- 176, // Togetic
- 118, // Goldeen
- 303, // Mawile
- 179, // Mareep
- 188, // Skiploom
- 109, // Koffing
- 51, // Dugtrio
- 268, // Cascoon
- 322, // Numel
- 347, // Anorith
- 313, // Volbeat
- 163, // Hoothoot
- 328, // Trapinch
- 325, // Spoink
- 11, // Metapod
- 69, // Bellsprout
- 361, // Snorunt
- 20, // Raticate
- 259, // Marshtomp
- 277, // Swellow
- 240, // Magby
- 58, // Growlithe
- 200, // Misdreavus
- 1, // Bulbasaur
- 236, // Tyrogue
- 218, // Slugma
- 287, // Slakoth
- 281, // Kirlia
- 190, // Aipom
- 135, // Jolteon
- 30, // Nidorina
- 184, // Azumarill
- 292, // Shedinja
- 66, // Machop
- 291, // Ninjask
- 284, // Masquerain
- 355, // Duskull
- 192, // Sunflora
- 189, // Jumpluff
- 120, // Staryu
- 180, // Flaaffy
- 363, // Spheal
- 54, // Psyduck
- 219, // Magcargo
- 83, // Farfetch'd
- 41, // Zubat
- 137, // Porygon
- 161, // Sentret
- 318, // Carvanha
- 44, // Gloom
- 26, // Raichu
- 129, // Magikarp
- 215, // Sneasel
- 305, // Lairon
- 256, // Combusken
- 224, // Octillery
- 33, // Nidorino
- 136, // Flareon
- 225, // Delibird
- 72, // Tentacool
- 63, // Abra
- 253, // Grovyle
- 340, // Whiscash
- 156, // Quilava
- 196, // Espeon
- 88, // Grimer
- 152, // Chikorita
- 326, // Grumpig
- 299, // Nosepass
- 53, // Persian
- 262, // Mightyena
- 48, // Venonat
- 82, // Magneton
- 77, // Ponyta
- 296, // Makuhita
- 337, // Lunatone
- 28, // Sandslash
- 96, // Drowzee
- 114, // Tangela
- 57, // Primeape
- 165, // Ledyba
- 40, // Wigglytuff
- 47, // Parasect
- 139, // Omastar
- 294, // Loudred
- 8, // Wartortle
- 75, // Graveler
- 197, // Umbreon
- 345, // Lileep
- 61, // Poliwhirl
- 134, // Vaporeon
- 15, // Beedrill
- 105, // Marowak
- 70, // Weepinbell
- 369, // Relicanth
- 111, // Rhyhorn
- 2, // Ivysaur
- 352, // Kecleon
- 274, // Nuzleaf
- 267, // Beautifly
- 17, // Pidgeotto
- 168, // Ariados
- 86, // Seel
- 186, // Politoed
- 159, // Croconaw
- 113, // Chansey
- 354, // Banette
- 232, // Donphan
- 121, // Starmie
- 5, // Charmeleon
- 221, // Piloswine
- 12, // Butterfree
- 329, // Vibrava
- 125, // Electabuzz
- 342, // Crawdaunt
- 301, // Delcatty
- 334, // Altaria
- 372, // Shelgon
- 38, // Ninetales
- 207, // Gligar
- 364, // Sealeo
- 327, // Spinda
- 247, // Pupitar
- 79, // Slowpoke
- 338, // Solrock
- 241, // Miltank
- 22, // Fearow
- 45, // Vileplume
- 89, // Muk
- 205, // Forretress
- 185, // Sudowoodo
- 359, // Absol
- 193, // Yanma
- 269, // Dustox
- 108, // Lickitung
- 235, // Smeargle
- 171, // Lanturn
- 101, // Electrode
- 271, // Lombre
- 286, // Breloom
- 153, // Bayleef
- 117, // Seadra
- 110, // Weezing
- 279, // Pelipper
- 375, // Metang
- 31, // Nidoqueen
- 332, // Cacturne
- 275, // Shiftry
- 308, // Medicham
- 335, // Zangoose
- 141, // Kabutops
- 99, // Kingler
- 64, // Kadabra
- 119, // Seaking
- 36, // Clefable
- 126, // Magmar
- 202, // Wobbuffet
- 92, // Gastly
- 122, // Mr. mime
- 62, // Poliwrath
- 128, // Tauros
- 380, // Latias
- 181, // Ampharos
- 288, // Vigoroth
- 166, // Ledian
- 76, // Golem
- 365, // Walrein
- 84, // Doduo
- 229, // Houndoom
- 34, // Nidoking
- 124, // Jynx
- 107, // Hitmonchan
- 234, // Stantler
- 210, // Granbull
- 237, // Hitmontop
- 195, // Quagsire
- 344, // Claydol
- 260, // Swampert
- 242, // Blissey
- 272, // Ludicolo
- 295, // Exploud
- 206, // Dunsparce
- 127, // Pinsir
- 91, // Cloyster
- 67, // Machoke
- 203, // Girafarig
- 18, // Pidgeot
- 178, // Xatu
- 346, // Cradily
- 106, // Hitmonlee
- 49, // Venomoth
- 94, // Gengar
- 214, // Heracross
- 362, // Glalie
- 123, // Scyther
- 373, // Salamence
- 310, // Manectric
- 348, // Armaldo
- 65, // Alakazam
- 97, // Hypno
- 164, // Noctowl
- 73, // Tentacruel
- 356, // Dusclops
- 145, // Zapdos
- 42, // Golbat
- 376, // Metagross
- 282, // Gardevoir
- 9, // Blastoise
- 80, // Slowbro
- 93, // Haunter
- 68, // Machamp
- 377, // Regirock
- 317, // Swalot
- 254, // Sceptile
- 227, // Skarmory
- 55, // Golduck
- 386, // Deoxys
- 71, // Victreebel
- 78, // Rapidash
- 6, // Charizard
- 367, // Huntail
- 87, // Dewgong
- 144, // Articuno
- 157, // Typhlosion
- 142, // Aerodactyl
- 368, // Gorebyss
- 217, // Ursaring
- 154, // Meganium
- 378, // Regice
- 212, // Scizor
- 230, // Kingdra
- 147, // Dratini
- 85, // Dodrio
- 319, // Sharpedo
- 169, // Crobat
- 162, // Furret
- 59, // Arcanine
- 243, // Raikou
- 257, // Blaziken
- 323, // Camerupt
- 112, // Rhydon
- 379, // Registeel
- 23, // Ekans
- 330, // Flygon
- 357, // Tropius
- 381, // Latios
- 245, // Suicune
- 146, // Moltres
- 3, // Venusaur
- 103, // Exeggutor
- 199, // Slowking
- 248, // Tyranitar
- 289, // Slaking
- 320, // Wailmer
- 150, // Mewtwo
- 306, // Aggron
- 143, // Snorlax
- 226, // Mantine
- 244, // Entei
- 149, // Dragonite
- 115, // Kangaskhan
- 297, // Hariyama
- 160, // Feraligatr
- 131, // Lapras
- 336, // Seviper
- 24, // Arbok
- 383, // Groudon
- 250, // Ho-Oh
- 148, // Dragonair
- 382, // Kyogre
- 249, // Lugia
- 350, // Milotic
- 130, // Gyarados
- 384, // Rayquaza
- 95, // Onix
- 208, // Steelix
- 321, // Wailord
+ NATIONAL_DEX_DIGLETT,
+ NATIONAL_DEX_AZURILL,
+ NATIONAL_DEX_NATU,
+ NATIONAL_DEX_WEEDLE,
+ NATIONAL_DEX_PICHU,
+ NATIONAL_DEX_CLEFFA,
+ NATIONAL_DEX_TOGEPI,
+ NATIONAL_DEX_CASTFORM,
+ NATIONAL_DEX_IGGLYBUFF,
+ NATIONAL_DEX_CATERPIE,
+ NATIONAL_DEX_TAILLOW,
+ NATIONAL_DEX_DITTO,
+ NATIONAL_DEX_EEVEE,
+ NATIONAL_DEX_ROSELIA,
+ NATIONAL_DEX_SPEAROW,
+ NATIONAL_DEX_PIDGEY,
+ NATIONAL_DEX_SUNKERN,
+ NATIONAL_DEX_SHELLDER,
+ NATIONAL_DEX_RATTATA,
+ NATIONAL_DEX_MAGNEMITE,
+ NATIONAL_DEX_PARAS,
+ NATIONAL_DEX_WURMPLE,
+ NATIONAL_DEX_JIRACHI,
+ NATIONAL_DEX_CUBONE,
+ NATIONAL_DEX_MUDKIP,
+ NATIONAL_DEX_WOOPER,
+ NATIONAL_DEX_HORSEA,
+ NATIONAL_DEX_MEOWTH,
+ NATIONAL_DEX_NIDORAN_F,
+ NATIONAL_DEX_SWINUB,
+ NATIONAL_DEX_MEW,
+ NATIONAL_DEX_SWABLU,
+ NATIONAL_DEX_ARON,
+ NATIONAL_DEX_PLUSLE,
+ NATIONAL_DEX_MINUN,
+ NATIONAL_DEX_EXEGGCUTE,
+ NATIONAL_DEX_PIKACHU,
+ NATIONAL_DEX_BELLOSSOM,
+ NATIONAL_DEX_GULPIN,
+ NATIONAL_DEX_ZIGZAGOON,
+ NATIONAL_DEX_SHROOMISH,
+ NATIONAL_DEX_OMANYTE,
+ NATIONAL_DEX_CACNEA,
+ NATIONAL_DEX_KRABBY,
+ NATIONAL_DEX_RALTS,
+ NATIONAL_DEX_HOPPIP,
+ NATIONAL_DEX_TORCHIC,
+ NATIONAL_DEX_CLAMPERL,
+ NATIONAL_DEX_GEODUDE,
+ NATIONAL_DEX_MARILL,
+ NATIONAL_DEX_BARBOACH,
+ NATIONAL_DEX_SMOOCHUM,
+ NATIONAL_DEX_VOLTORB,
+ NATIONAL_DEX_NINCADA,
+ NATIONAL_DEX_SABLEYE,
+ NATIONAL_DEX_MURKROW,
+ NATIONAL_DEX_QWILFISH,
+ NATIONAL_DEX_SQUIRTLE,
+ NATIONAL_DEX_TREECKO,
+ NATIONAL_DEX_BALTOY,
+ NATIONAL_DEX_ODDISH,
+ NATIONAL_DEX_LOTAD,
+ NATIONAL_DEX_JIGGLYPUFF,
+ NATIONAL_DEX_SURSKIT,
+ NATIONAL_DEX_CYNDAQUIL,
+ NATIONAL_DEX_KABUTO,
+ NATIONAL_DEX_LINOONE,
+ NATIONAL_DEX_TORKOAL,
+ NATIONAL_DEX_NIDORAN_M,
+ NATIONAL_DEX_SPINARAK,
+ NATIONAL_DEX_MANKEY,
+ NATIONAL_DEX_SEEDOT,
+ NATIONAL_DEX_POOCHYENA,
+ NATIONAL_DEX_PHANPY,
+ NATIONAL_DEX_UNOWN,
+ NATIONAL_DEX_CHINCHOU,
+ NATIONAL_DEX_PORYGON2,
+ NATIONAL_DEX_POLIWAG,
+ NATIONAL_DEX_BAGON,
+ NATIONAL_DEX_FEEBAS,
+ NATIONAL_DEX_SHUPPET,
+ NATIONAL_DEX_TOTODILE,
+ NATIONAL_DEX_CELEBI,
+ NATIONAL_DEX_WYNAUT,
+ NATIONAL_DEX_SANDSHREW,
+ NATIONAL_DEX_CHIMECHO,
+ NATIONAL_DEX_LUVDISC,
+ NATIONAL_DEX_HOUNDOUR,
+ NATIONAL_DEX_SILCOON,
+ NATIONAL_DEX_ELECTRIKE,
+ NATIONAL_DEX_CHARMANDER,
+ NATIONAL_DEX_MEDITITE,
+ NATIONAL_DEX_WINGULL,
+ NATIONAL_DEX_REMORAID,
+ NATIONAL_DEX_CORPHISH,
+ NATIONAL_DEX_CORSOLA,
+ NATIONAL_DEX_ILLUMISE,
+ NATIONAL_DEX_SNUBBULL,
+ NATIONAL_DEX_VULPIX,
+ NATIONAL_DEX_LARVITAR,
+ NATIONAL_DEX_BELDUM,
+ NATIONAL_DEX_WHISMUR,
+ NATIONAL_DEX_PINECO,
+ NATIONAL_DEX_ELEKID,
+ NATIONAL_DEX_CLEFAIRY,
+ NATIONAL_DEX_SHUCKLE,
+ NATIONAL_DEX_TEDDIURSA,
+ NATIONAL_DEX_KAKUNA,
+ NATIONAL_DEX_SKITTY,
+ NATIONAL_DEX_TOGETIC,
+ NATIONAL_DEX_GOLDEEN,
+ NATIONAL_DEX_MAWILE,
+ NATIONAL_DEX_MAREEP,
+ NATIONAL_DEX_SKIPLOOM,
+ NATIONAL_DEX_KOFFING,
+ NATIONAL_DEX_DUGTRIO,
+ NATIONAL_DEX_CASCOON,
+ NATIONAL_DEX_NUMEL,
+ NATIONAL_DEX_ANORITH,
+ NATIONAL_DEX_VOLBEAT,
+ NATIONAL_DEX_HOOTHOOT,
+ NATIONAL_DEX_TRAPINCH,
+ NATIONAL_DEX_SPOINK,
+ NATIONAL_DEX_METAPOD,
+ NATIONAL_DEX_BELLSPROUT,
+ NATIONAL_DEX_SNORUNT,
+ NATIONAL_DEX_RATICATE,
+ NATIONAL_DEX_MARSHTOMP,
+ NATIONAL_DEX_SWELLOW,
+ NATIONAL_DEX_MAGBY,
+ NATIONAL_DEX_GROWLITHE,
+ NATIONAL_DEX_MISDREAVUS,
+ NATIONAL_DEX_BULBASAUR,
+ NATIONAL_DEX_TYROGUE,
+ NATIONAL_DEX_SLUGMA,
+ NATIONAL_DEX_SLAKOTH,
+ NATIONAL_DEX_KIRLIA,
+ NATIONAL_DEX_AIPOM,
+ NATIONAL_DEX_JOLTEON,
+ NATIONAL_DEX_NIDORINA,
+ NATIONAL_DEX_AZUMARILL,
+ NATIONAL_DEX_SHEDINJA,
+ NATIONAL_DEX_MACHOP,
+ NATIONAL_DEX_NINJASK,
+ NATIONAL_DEX_MASQUERAIN,
+ NATIONAL_DEX_DUSKULL,
+ NATIONAL_DEX_SUNFLORA,
+ NATIONAL_DEX_JUMPLUFF,
+ NATIONAL_DEX_STARYU,
+ NATIONAL_DEX_FLAAFFY,
+ NATIONAL_DEX_SPHEAL,
+ NATIONAL_DEX_PSYDUCK,
+ NATIONAL_DEX_MAGCARGO,
+ NATIONAL_DEX_FARFETCHD,
+ NATIONAL_DEX_ZUBAT,
+ NATIONAL_DEX_PORYGON,
+ NATIONAL_DEX_SENTRET,
+ NATIONAL_DEX_CARVANHA,
+ NATIONAL_DEX_GLOOM,
+ NATIONAL_DEX_RAICHU,
+ NATIONAL_DEX_MAGIKARP,
+ NATIONAL_DEX_SNEASEL,
+ NATIONAL_DEX_LAIRON,
+ NATIONAL_DEX_COMBUSKEN,
+ NATIONAL_DEX_OCTILLERY,
+ NATIONAL_DEX_NIDORINO,
+ NATIONAL_DEX_FLAREON,
+ NATIONAL_DEX_DELIBIRD,
+ NATIONAL_DEX_TENTACOOL,
+ NATIONAL_DEX_ABRA,
+ NATIONAL_DEX_GROVYLE,
+ NATIONAL_DEX_WHISCASH,
+ NATIONAL_DEX_QUILAVA,
+ NATIONAL_DEX_ESPEON,
+ NATIONAL_DEX_GRIMER,
+ NATIONAL_DEX_CHIKORITA,
+ NATIONAL_DEX_GRUMPIG,
+ NATIONAL_DEX_NOSEPASS,
+ NATIONAL_DEX_PERSIAN,
+ NATIONAL_DEX_MIGHTYENA,
+ NATIONAL_DEX_VENONAT,
+ NATIONAL_DEX_MAGNETON,
+ NATIONAL_DEX_PONYTA,
+ NATIONAL_DEX_MAKUHITA,
+ NATIONAL_DEX_LUNATONE,
+ NATIONAL_DEX_SANDSLASH,
+ NATIONAL_DEX_DROWZEE,
+ NATIONAL_DEX_TANGELA,
+ NATIONAL_DEX_PRIMEAPE,
+ NATIONAL_DEX_LEDYBA,
+ NATIONAL_DEX_WIGGLYTUFF,
+ NATIONAL_DEX_PARASECT,
+ NATIONAL_DEX_OMASTAR,
+ NATIONAL_DEX_LOUDRED,
+ NATIONAL_DEX_WARTORTLE,
+ NATIONAL_DEX_GRAVELER,
+ NATIONAL_DEX_UMBREON,
+ NATIONAL_DEX_LILEEP,
+ NATIONAL_DEX_POLIWHIRL,
+ NATIONAL_DEX_VAPOREON,
+ NATIONAL_DEX_BEEDRILL,
+ NATIONAL_DEX_MAROWAK,
+ NATIONAL_DEX_WEEPINBELL,
+ NATIONAL_DEX_RELICANTH,
+ NATIONAL_DEX_RHYHORN,
+ NATIONAL_DEX_IVYSAUR,
+ NATIONAL_DEX_KECLEON,
+ NATIONAL_DEX_NUZLEAF,
+ NATIONAL_DEX_BEAUTIFLY,
+ NATIONAL_DEX_PIDGEOTTO,
+ NATIONAL_DEX_ARIADOS,
+ NATIONAL_DEX_SEEL,
+ NATIONAL_DEX_POLITOED,
+ NATIONAL_DEX_CROCONAW,
+ NATIONAL_DEX_CHANSEY,
+ NATIONAL_DEX_BANETTE,
+ NATIONAL_DEX_DONPHAN,
+ NATIONAL_DEX_STARMIE,
+ NATIONAL_DEX_CHARMELEON,
+ NATIONAL_DEX_PILOSWINE,
+ NATIONAL_DEX_BUTTERFREE,
+ NATIONAL_DEX_VIBRAVA,
+ NATIONAL_DEX_ELECTABUZZ,
+ NATIONAL_DEX_CRAWDAUNT,
+ NATIONAL_DEX_DELCATTY,
+ NATIONAL_DEX_ALTARIA,
+ NATIONAL_DEX_SHELGON,
+ NATIONAL_DEX_NINETALES,
+ NATIONAL_DEX_GLIGAR,
+ NATIONAL_DEX_SEALEO,
+ NATIONAL_DEX_SPINDA,
+ NATIONAL_DEX_PUPITAR,
+ NATIONAL_DEX_SLOWPOKE,
+ NATIONAL_DEX_SOLROCK,
+ NATIONAL_DEX_MILTANK,
+ NATIONAL_DEX_FEAROW,
+ NATIONAL_DEX_VILEPLUME,
+ NATIONAL_DEX_MUK,
+ NATIONAL_DEX_FORRETRESS,
+ NATIONAL_DEX_SUDOWOODO,
+ NATIONAL_DEX_ABSOL,
+ NATIONAL_DEX_YANMA,
+ NATIONAL_DEX_DUSTOX,
+ NATIONAL_DEX_LICKITUNG,
+ NATIONAL_DEX_SMEARGLE,
+ NATIONAL_DEX_LANTURN,
+ NATIONAL_DEX_ELECTRODE,
+ NATIONAL_DEX_LOMBRE,
+ NATIONAL_DEX_BRELOOM,
+ NATIONAL_DEX_BAYLEEF,
+ NATIONAL_DEX_SEADRA,
+ NATIONAL_DEX_WEEZING,
+ NATIONAL_DEX_PELIPPER,
+ NATIONAL_DEX_METANG,
+ NATIONAL_DEX_NIDOQUEEN,
+ NATIONAL_DEX_CACTURNE,
+ NATIONAL_DEX_SHIFTRY,
+ NATIONAL_DEX_MEDICHAM,
+ NATIONAL_DEX_ZANGOOSE,
+ NATIONAL_DEX_KABUTOPS,
+ NATIONAL_DEX_KINGLER,
+ NATIONAL_DEX_KADABRA,
+ NATIONAL_DEX_SEAKING,
+ NATIONAL_DEX_CLEFABLE,
+ NATIONAL_DEX_MAGMAR,
+ NATIONAL_DEX_WOBBUFFET,
+ NATIONAL_DEX_GASTLY,
+ NATIONAL_DEX_MR_MIME,
+ NATIONAL_DEX_POLIWRATH,
+ NATIONAL_DEX_TAUROS,
+ NATIONAL_DEX_LATIAS,
+ NATIONAL_DEX_AMPHAROS,
+ NATIONAL_DEX_VIGOROTH,
+ NATIONAL_DEX_LEDIAN,
+ NATIONAL_DEX_GOLEM,
+ NATIONAL_DEX_WALREIN,
+ NATIONAL_DEX_DODUO,
+ NATIONAL_DEX_HOUNDOOM,
+ NATIONAL_DEX_NIDOKING,
+ NATIONAL_DEX_JYNX,
+ NATIONAL_DEX_HITMONCHAN,
+ NATIONAL_DEX_STANTLER,
+ NATIONAL_DEX_GRANBULL,
+ NATIONAL_DEX_HITMONTOP,
+ NATIONAL_DEX_QUAGSIRE,
+ NATIONAL_DEX_CLAYDOL,
+ NATIONAL_DEX_SWAMPERT,
+ NATIONAL_DEX_BLISSEY,
+ NATIONAL_DEX_LUDICOLO,
+ NATIONAL_DEX_EXPLOUD,
+ NATIONAL_DEX_DUNSPARCE,
+ NATIONAL_DEX_PINSIR,
+ NATIONAL_DEX_CLOYSTER,
+ NATIONAL_DEX_MACHOKE,
+ NATIONAL_DEX_GIRAFARIG,
+ NATIONAL_DEX_PIDGEOT,
+ NATIONAL_DEX_XATU,
+ NATIONAL_DEX_CRADILY,
+ NATIONAL_DEX_HITMONLEE,
+ NATIONAL_DEX_VENOMOTH,
+ NATIONAL_DEX_GENGAR,
+ NATIONAL_DEX_HERACROSS,
+ NATIONAL_DEX_GLALIE,
+ NATIONAL_DEX_SCYTHER,
+ NATIONAL_DEX_SALAMENCE,
+ NATIONAL_DEX_MANECTRIC,
+ NATIONAL_DEX_ARMALDO,
+ NATIONAL_DEX_ALAKAZAM,
+ NATIONAL_DEX_HYPNO,
+ NATIONAL_DEX_NOCTOWL,
+ NATIONAL_DEX_TENTACRUEL,
+ NATIONAL_DEX_DUSCLOPS,
+ NATIONAL_DEX_ZAPDOS,
+ NATIONAL_DEX_GOLBAT,
+ NATIONAL_DEX_METAGROSS,
+ NATIONAL_DEX_GARDEVOIR,
+ NATIONAL_DEX_BLASTOISE,
+ NATIONAL_DEX_SLOWBRO,
+ NATIONAL_DEX_HAUNTER,
+ NATIONAL_DEX_MACHAMP,
+ NATIONAL_DEX_REGIROCK,
+ NATIONAL_DEX_SWALOT,
+ NATIONAL_DEX_SCEPTILE,
+ NATIONAL_DEX_SKARMORY,
+ NATIONAL_DEX_GOLDUCK,
+ NATIONAL_DEX_DEOXYS,
+ NATIONAL_DEX_VICTREEBEL,
+ NATIONAL_DEX_RAPIDASH,
+ NATIONAL_DEX_CHARIZARD,
+ NATIONAL_DEX_HUNTAIL,
+ NATIONAL_DEX_DEWGONG,
+ NATIONAL_DEX_ARTICUNO,
+ NATIONAL_DEX_TYPHLOSION,
+ NATIONAL_DEX_AERODACTYL,
+ NATIONAL_DEX_GOREBYSS,
+ NATIONAL_DEX_URSARING,
+ NATIONAL_DEX_MEGANIUM,
+ NATIONAL_DEX_REGICE,
+ NATIONAL_DEX_SCIZOR,
+ NATIONAL_DEX_KINGDRA,
+ NATIONAL_DEX_DRATINI,
+ NATIONAL_DEX_DODRIO,
+ NATIONAL_DEX_SHARPEDO,
+ NATIONAL_DEX_CROBAT,
+ NATIONAL_DEX_FURRET,
+ NATIONAL_DEX_ARCANINE,
+ NATIONAL_DEX_RAIKOU,
+ NATIONAL_DEX_BLAZIKEN,
+ NATIONAL_DEX_CAMERUPT,
+ NATIONAL_DEX_RHYDON,
+ NATIONAL_DEX_REGISTEEL,
+ NATIONAL_DEX_EKANS,
+ NATIONAL_DEX_FLYGON,
+ NATIONAL_DEX_TROPIUS,
+ NATIONAL_DEX_LATIOS,
+ NATIONAL_DEX_SUICUNE,
+ NATIONAL_DEX_MOLTRES,
+ NATIONAL_DEX_VENUSAUR,
+ NATIONAL_DEX_EXEGGUTOR,
+ NATIONAL_DEX_SLOWKING,
+ NATIONAL_DEX_TYRANITAR,
+ NATIONAL_DEX_SLAKING,
+ NATIONAL_DEX_WAILMER,
+ NATIONAL_DEX_MEWTWO,
+ NATIONAL_DEX_AGGRON,
+ NATIONAL_DEX_SNORLAX,
+ NATIONAL_DEX_MANTINE,
+ NATIONAL_DEX_ENTEI,
+ NATIONAL_DEX_DRAGONITE,
+ NATIONAL_DEX_KANGASKHAN,
+ NATIONAL_DEX_HARIYAMA,
+ NATIONAL_DEX_FERALIGATR,
+ NATIONAL_DEX_LAPRAS,
+ NATIONAL_DEX_SEVIPER,
+ NATIONAL_DEX_ARBOK,
+ NATIONAL_DEX_GROUDON,
+ NATIONAL_DEX_HO_OH,
+ NATIONAL_DEX_DRAGONAIR,
+ NATIONAL_DEX_KYOGRE,
+ NATIONAL_DEX_LUGIA,
+ NATIONAL_DEX_MILOTIC,
+ NATIONAL_DEX_GYARADOS,
+ NATIONAL_DEX_RAYQUAZA,
+ NATIONAL_DEX_ONIX,
+ NATIONAL_DEX_STEELIX,
+ NATIONAL_DEX_WAILORD,
};
diff --git a/src/heal_location.c b/src/heal_location.c
index 4c78f5921..3bb24e1a1 100644
--- a/src/heal_location.c
+++ b/src/heal_location.c
@@ -1,32 +1,7 @@
#include "global.h"
#include "heal_location.h"
#include "constants/maps.h"
-
-static const struct HealLocation sHealLocations[] =
-{
- {MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), 4, 2},
- {MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_2F), 4, 2},
- {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), 20, 17},
- {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), 19, 20},
- {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), 22, 6},
- {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), 16, 39},
- {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), 5, 7},
- {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), 24, 15},
- {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), 28, 17},
- {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), 43, 32},
- {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 27, 49},
- {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 5, 9},
- {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 14, 9},
- {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), 6, 17},
- {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), 2, 11},
- {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), 9, 7},
- {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), 14, 8},
- {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), 16, 4},
- {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), 8, 16},
- {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 18, 6},
- {MAP_GROUP(BATTLE_TOWER_OUTSIDE), MAP_NUM(BATTLE_TOWER_OUTSIDE), 14, 9},
- {MAP_GROUP(SOUTHERN_ISLAND_EXTERIOR), MAP_NUM(SOUTHERN_ISLAND_EXTERIOR), 15, 20},
-};
+#include "data/heal_locations.h"
u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum)
{
diff --git a/src/item_menu.c b/src/item_menu.c
index 915aa5183..12d02ebd8 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -762,7 +762,7 @@ static void sub_80A39B8(u16 *a, u8 b)
{
u8 var = b * 2;
- sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2);
+ sub_809D104(a, 4, 10, gBagScreenLabels_Tilemap, 0, var, 8, 2);
}
static void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d)
@@ -776,8 +776,8 @@ static void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d)
if (b == 5)
r7 = 2;
- sub_809D104(a, 4, 10, gUnknown_08E96EC8, 8 - c, r2, c, 2);
- sub_809D104(a, c + 4, 10, gUnknown_08E96EC8, 0, r7, 8 - c, 2);
+ sub_809D104(a, 4, 10, gBagScreenLabels_Tilemap, 8 - c, r2, c, 2);
+ sub_809D104(a, c + 4, 10, gBagScreenLabels_Tilemap, 0, r7, 8 - c, 2);
}
else if (d == 1)
{
@@ -785,8 +785,8 @@ static void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d)
if (b == 1)
r7 = 10;
- sub_809D104(a, 4, 10, gUnknown_08E96EC8, c, r7, 8 - c, 2);
- sub_809D104(a, 12 - c, 10, gUnknown_08E96EC8, 0, r2, c, 2);
+ sub_809D104(a, 4, 10, gBagScreenLabels_Tilemap, c, r7, 8 - c, 2);
+ sub_809D104(a, 12 - c, 10, gBagScreenLabels_Tilemap, 0, r2, c, 2);
}
}
@@ -4024,7 +4024,7 @@ static int sub_80A7988(void)
}
static const u16 gPalette_83C170C[] = INCBIN_U16("graphics/unknown/83C170C.gbapal");
-static const u8 gSpriteImage_83C172C[] = INCBIN_U8("graphics/unknown_sprites/83C172C.4bpp");
+static const u8 gSpriteImage_BagSpinner[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp");
const u8 gSpriteImage_UnusedCherry[] = INCBIN_U8("graphics/unused/cherry.4bpp");
const u16 gSpritePalette_UnusedCherry[] = INCBIN_U16("graphics/unused/cherry.gbapal");
@@ -4258,7 +4258,7 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1D20[] =
static const struct SpriteFrameImage gSpriteImageTable_83C1D28[] =
{
- {gSpriteImage_83C172C, sizeof(gSpriteImage_83C172C)},
+ {gSpriteImage_BagSpinner, sizeof(gSpriteImage_BagSpinner)},
};
static const struct SpritePalette sPokeballSpritePalette = {gPalette_83C170C, 8};
diff --git a/src/load_save.c b/src/load_save.c
index 7960a42eb..a1ca7ce76 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -67,7 +67,7 @@ void SavePlayerParty(void)
gSaveBlock1.playerPartyCount = gPlayerPartyCount;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
gSaveBlock1.playerParty[i] = gPlayerParty[i];
}
@@ -77,7 +77,7 @@ void LoadPlayerParty(void)
gPlayerPartyCount = gSaveBlock1.playerPartyCount;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
gPlayerParty[i] = gSaveBlock1.playerParty[i];
}
@@ -85,7 +85,7 @@ static void SaveEventObjects(void)
{
int i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
gSaveBlock1.eventObjects[i] = gEventObjects[i];
}
@@ -93,7 +93,7 @@ static void LoadEventObjects(void)
{
int i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
gEventObjects[i] = gSaveBlock1.eventObjects[i];
}
@@ -114,27 +114,27 @@ void LoadPlayerBag(void)
int i;
// load player items.
- for (i = 0; i < 20; i++)
+ for (i = 0; i < BAG_ITEMS_COUNT; i++)
gLoadedSaveData.items[i] = gSaveBlock1.bagPocket_Items[i];
// load player key items.
- for (i = 0; i < 20; i++)
+ for (i = 0; i < BAG_KEYITEMS_COUNT; i++)
gLoadedSaveData.keyItems[i] = gSaveBlock1.bagPocket_KeyItems[i];
// load player pokeballs.
- for (i = 0; i < 16; i++)
+ for (i = 0; i < BAG_POKEBALLS_COUNT; i++)
gLoadedSaveData.pokeBalls[i] = gSaveBlock1.bagPocket_PokeBalls[i];
// load player TMs and HMs.
- for (i = 0; i < 64; i++)
+ for (i = 0; i < BAG_TMHM_COUNT; i++)
gLoadedSaveData.TMsHMs[i] = gSaveBlock1.bagPocket_TMHM[i];
// load player berries.
- for (i = 0; i < 46; i++)
+ for (i = 0; i < BAG_BERRIES_COUNT; i++)
gLoadedSaveData.berries[i] = gSaveBlock1.bagPocket_Berries[i];
// load mail.
- for (i = 0; i < 16; i++)
+ for (i = 0; i < MAIL_COUNT; i++)
gLoadedSaveData.mail[i] = gSaveBlock1.mail[i];
}
@@ -143,26 +143,26 @@ void SavePlayerBag(void)
int i;
// save player items.
- for (i = 0; i < 20; i++)
+ for (i = 0; i < BAG_ITEMS_COUNT; i++)
gSaveBlock1.bagPocket_Items[i] = gLoadedSaveData.items[i];
// save player key items.
- for (i = 0; i < 20; i++)
+ for (i = 0; i < BAG_KEYITEMS_COUNT; i++)
gSaveBlock1.bagPocket_KeyItems[i] = gLoadedSaveData.keyItems[i];
// save player pokeballs.
- for (i = 0; i < 16; i++)
+ for (i = 0; i < BAG_POKEBALLS_COUNT; i++)
gSaveBlock1.bagPocket_PokeBalls[i] = gLoadedSaveData.pokeBalls[i];
// save player TMs and HMs.
- for (i = 0; i < 64; i++)
+ for (i = 0; i < BAG_TMHM_COUNT; i++)
gSaveBlock1.bagPocket_TMHM[i] = gLoadedSaveData.TMsHMs[i];
// save player berries.
- for (i = 0; i < 46; i++)
+ for (i = 0; i < BAG_BERRIES_COUNT; i++)
gSaveBlock1.bagPocket_Berries[i] = gLoadedSaveData.berries[i];
// save mail.
- for (i = 0; i < 16; i++)
+ for (i = 0; i < MAIL_COUNT; i++)
gSaveBlock1.mail[i] = gLoadedSaveData.mail[i];
}
diff --git a/src/pokedex.c b/src/pokedex.c
index eb4d1d918..caa6a1565 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -26,7 +26,6 @@
#include "scanline_effect.h"
#include "ewram.h"
-#define NATIONAL_DEX_COUNT 386
struct PokedexListItem
{
@@ -1971,7 +1970,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
{
default:
case DEX_MODE_HOENN:
- vars[0] = 202;
+ vars[0] = HOENN_DEX_COUNT;
vars[1] = 1;
break;
case DEX_MODE_NATIONAL:
@@ -1982,7 +1981,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
}
else
{
- vars[0] = 202;
+ vars[0] = HOENN_DEX_COUNT;
vars[1] = 1;
}
break;
@@ -2028,7 +2027,7 @@ static void SortPokedex(u8 dexMode, u8 sortMode)
}
break;
case 1:
- for (i = 0; i < 411; i++)
+ for (i = 0; i < POKEMON_SLOTS_NUMBER - 1; i++)
{
vars[2] = gPokedexOrder_Alphabetical[i];
@@ -4060,7 +4059,7 @@ u16 GetHoennPokedexCount(u8 caseID)
u16 count = 0;
u16 i;
- for (i = 0; i < 202; i++)
+ for (i = 0; i < HOENN_DEX_COUNT; i++)
{
switch (caseID)
{
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 30e9503cd..4814c900d 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -12,6 +12,7 @@
#include "main.h"
#include "move_tutor_menu.h"
#include "pokemon.h"
+#include "pokedex.h"
#include "random.h"
#include "overworld.h"
#include "rom_8077ABC.h"
@@ -390,10 +391,10 @@ u16 HoennPokedexNumToSpecies(u16 hoennNum)
species = 0;
- while (species < 411 && gSpeciesToHoennPokedexNum[species] != hoennNum)
+ while (species < POKEMON_SLOTS_NUMBER - 1 && gSpeciesToHoennPokedexNum[species] != hoennNum)
species++;
- if (species == 411)
+ if (species == POKEMON_SLOTS_NUMBER - 1)
return 0;
return species + 1;
@@ -408,10 +409,10 @@ u16 NationalPokedexNumToSpecies(u16 nationalNum)
species = 0;
- while (species < 411 && gSpeciesToNationalPokedexNum[species] != nationalNum)
+ while (species < POKEMON_SLOTS_NUMBER - 1 && gSpeciesToNationalPokedexNum[species] != nationalNum)
species++;
- if (species == 411)
+ if (species == POKEMON_SLOTS_NUMBER - 1)
return 0;
return species + 1;
@@ -426,10 +427,10 @@ u16 NationalToHoennOrder(u16 nationalNum)
hoennNum = 0;
- while (hoennNum < 411 && gHoennToNationalOrder[hoennNum] != nationalNum)
+ while (hoennNum < POKEMON_SLOTS_NUMBER - 1 && gHoennToNationalOrder[hoennNum] != nationalNum)
hoennNum++;
- if (hoennNum == 411)
+ if (hoennNum == POKEMON_SLOTS_NUMBER - 1)
return 0;
return hoennNum + 1;
@@ -1095,7 +1096,7 @@ u16 SpeciesToPokedexNum(u16 species)
else
{
species = SpeciesToHoennPokedexNum(species);
- if (species <= 202)
+ if (species <= HOENN_DEX_COUNT)
return species;
return 0xFFFF;
}
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 2fd7cb1ca..fe908de03 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -4778,7 +4778,7 @@ static void sub_80A1DCC(struct Pokemon *mon)
static void sub_80A1DE8(struct Pokemon *mon)
{
u8 ball = ball_number_to_ball_processing_index(GetMonData(mon, MON_DATA_POKEBALL));
- sub_80478DC(ball);
+ LoadBallGraphics(ball);
pssData.ballSpriteId = CreateSprite(&gBallSpriteTemplates[ball], 6, 136, 0);
gSprites[pssData.ballSpriteId].callback = SpriteCallbackDummy;
diff --git a/src/pokenav_after.c b/src/pokenav_after.c
index 330305ea3..7619577cc 100644
--- a/src/pokenav_after.c
+++ b/src/pokenav_after.c
@@ -3,6 +3,7 @@
#include "pokenav.h"
#include "battle.h"
#include "data2.h"
+#include "text.h"
#include "de_rom_8040FE0.h"
#include "string_util.h"
@@ -20,14 +21,14 @@ void sub_80F700C(u8 *arg0, u16 arg1)
ptr = StringCopy(ptr, de_sub_8041024(0, gUnknown_083DFEC4->unkCEE8[arg1].unk0));
#endif
- ptr[0] = 0xFC;
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
ptr[1] = 0x13;
ptr[2] = 0x4B;
ptr += 3;
ptr = StringCopy(ptr, trainer->trainerName);
}
- ptr[0] = 0xFC;
+ ptr[0] = EXT_CTRL_CODE_BEGIN;
ptr[1] = 0x13;
ptr[2] = 0x80;
ptr[3] = 0xFF;
diff --git a/src/pokenav_before.c b/src/pokenav_before.c
index 21394f348..710756c11 100644
--- a/src/pokenav_before.c
+++ b/src/pokenav_before.c
@@ -5,6 +5,7 @@
#include "battle.h"
#include "data2.h"
#include "de_rom_8040FE0.h"
+#include "decompress.h"
#include "event_data.h"
#include "constants/flags.h"
#include "landmark.h"
@@ -15,11 +16,16 @@
#include "region_map.h"
#include "constants/songs.h"
#include "string_util.h"
+#include "strings.h"
#include "sound.h"
#include "task.h"
#include "text.h"
+#include "trig.h"
#include "scanline_effect.h"
#include "pokemon_storage_system.h"
+#include "pokemon_summary_screen.h"
+#include "use_pokeblock.h"
+#include "constants/game_stat.h"
struct UnknownPokenav0
{
@@ -87,6 +93,11 @@ struct UnknownPokenav0_1 {
s8 var6dae;
};
+struct PokenavRibbonIconGfx {
+ u16 baseTile;
+ u8 paletteNum;
+};
+
IWRAM_DATA void (*gUnknown_03000744)(void);
extern const u8 gUnknown_083E0314[];
@@ -129,6 +140,77 @@ extern const u8 gPokenavHoennMapMisc_Gfx[];
extern const u8 gUnknown_08E99FB0[];
extern const u8 gUnknown_08E9A100[];
extern const u16 gPokenavHoennMap1_Pal[];
+extern void (*const gUnknown_083E3270[])(u16, u16);
+extern const u8 gUnknown_083E039C[];
+extern const u8 gUnknown_083E03A0[];
+extern const u8 gUnknown_083E01F4[];
+extern const u8 *const gTrainerEyeDescriptions[];
+extern const u8 gUnknown_08E9FBA0[];
+extern const u8 gPokenavRibbonView_Gfx[];
+extern const u8 gUnknown_083E040C[];
+extern const u16 gPokenavRibbonView_Pal[];
+extern const u16 gUnknown_083E03A8[];
+extern const u16 gUnknown_083E3C60[][16];
+extern const u16 gPokenavRibbonsIconGfx[][2];
+extern const u8 *const gRibbonDescriptions[][2];
+extern const u8 *const gGiftRibbonDescriptions[][2];
+extern const u8 gUnknown_08E9FF58[];
+extern const u8 gPokenavRibbonPokeView_Gfx[];
+extern const u16 gUnknown_083E0124[];
+extern const u16 gUnknown_083E0144[];
+extern const u8 gPokenavMenuOptions_Gfx[];
+extern const u8 gPokenavConditionMenu_Gfx[];
+extern const u8 gPokenavConditionSearch_Gfx[];
+extern const struct SpriteTemplate gSpriteTemplate_83E4454;
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_83E4450[];
+extern const u16 gUnknown_083E42F8[];
+extern const u16 gPokenavMenuOptions1_Pal[];
+extern const u16 gPokenavMenuOptions2_Pal[];
+extern const u16 gPokenavConditionMenu_Pal[];
+extern const u16 gPokenavCondition6_Pal[];
+extern const u16 gPokenavCondition7_Pal[];
+extern const struct SpriteSheet gSpriteSheet_PokenavBlueLight;
+extern const struct SpritePalette gSpritePalette_PokenavBlueLight;
+extern const struct SpriteTemplate gSpriteTemplate_83E4484;
+extern const u8 gPokenavMainMenu_Gfx[];
+extern const u8 gPokenavConditionMenuHeader_Gfx[];
+extern const u8 gPokenavRibbonsHeader_Gfx[];
+extern const u8 gPokenavHoennMapHeader_Gfx[];
+extern const u8 gPokenavConditionMenuOptions_Gfx[];
+extern const u8 gPokenavConditionMenuOptions2_Gfx[];
+extern const u8 gPokenavTrainersEyesHeader_Gfx[];
+extern const struct SpritePalette gUnknown_083E449C[];
+extern const struct SpriteTemplate gSpriteTemplate_83E4530;
+extern const struct SpriteTemplate gSpriteTemplate_83E4548;
+extern const struct SpriteTemplate gSpriteTemplate_83E44E0;
+extern const struct SpriteTemplate gSpriteTemplate_83E44F8;
+extern const struct SpriteSheet gUnknown_083E4568;
+extern const struct SpriteTemplate gSpriteTemplate_83E4570;
+extern const struct SpritePalette gUnknown_083E4588;
+extern const struct SpriteSheet gUnknown_083E4590[3];
+extern const struct SpritePalette gUnknown_083E45A8;
+extern const u16 gUnknown_08E9F988[];
+extern const struct SpriteTemplate gSpriteTemplate_83E45B8;
+extern const struct SpriteTemplate gSpriteTemplate_83E45F0;
+extern const struct SpriteSheet gUnknown_083E4628[4];
+extern const struct SpritePalette gUnknown_083E4648[3];
+extern const struct SpriteTemplate gSpriteTemplate_83E4660;
+extern const u16 gUnknown_083E4678[];
+extern const u8 gUnknown_083E3D00[];
+extern const struct SpriteTemplate gSpriteTemplate_83E476C;
+extern const struct SpriteSheet gUnknown_083E4784;
+extern const struct SpritePalette gUnknown_083E478C;
+extern const struct SpriteTemplate gSpriteTemplate_83E4800;
+extern const s16 gUnknown_083E4794[][2];
+extern const u8 gUnknown_083E329C[];
+extern const struct SpritePalette gUnknown_083E4818;
+extern const struct SpriteTemplate gSpriteTemplate_83E4850;
+extern const struct SpritePalette gUnknown_083E4868;
+extern const struct SpriteTemplate gSpriteTemplate_83E4878;
+
+extern u16 gUnknown_020388B4;
+extern u8 gUnknown_020388B0[];
+
// TODO: decompile the debug code so the compiler doesn't complain about
// unused static functions
@@ -171,20 +253,117 @@ static void sub_80EE58C();
static void sub_80EE658();
static void sub_80EE8F4();
static void sub_80EEDC4();
+static void ShowMapNamePopUpWindow(void);
+static void sub_80F0954(u16, u16, u16);
+static bool8 sub_80F098C(void);
+static u8 *sub_80F445C(u8*, u16);
+static void sub_80F081C(u8);
+bool8 sub_80F0944(void);
+static u8 *sub_80F4428(u8*, u16, u8);
+void sub_80F700C(u8*, u16);
+static void sub_80F0B24(void);
+static bool8 sub_80F0B44(void);
+static void sub_80F0C28(void);
+static bool8 sub_80F0C48(void);
+void LoadTrainerEyesDescriptionLines(void);
+bool8 sub_80F0D5C(void);
+static void sub_80F0EC0(void);
+static bool8 sub_80F0EF4(void);
+static void sub_80F0F64(void);
+static void sub_80F0FA0(void);
+static bool8 sub_80F0FEC(void);
+static bool8 sub_80F0718(void);
+void sub_80F0FFC(u8);
+static void sub_80F19DC(u8*);
+static bool8 sub_80F1080(void);
+void sub_80F1614(void);
+void DrawMonRibbonIcons(void);
+void sub_80F13FC(void);
+void sub_80F1438(void);
+static void sub_80F1494(void);
+bool8 sub_80F162C(u8);
+static void sub_80F01E0(u16);
+static void sub_80F19FC(void);
+static void sub_80F1A74(void);
+static void sub_80F1A80(void);
+static void sub_80F1A90(void);
+static bool8 sub_80F1AC4(void);
+static void sub_80F1B8C(u8);
+static bool8 sub_80F1BC8(u8);
+static void sub_80F2458(u8);
+static void sub_80F2514(u8);
+static void sub_80F1DF0(void);
+static void sub_80F2218(struct Sprite *sprite);
+static bool8 sub_80F1E50(void);
+static bool8 sub_80F22F8(void);
+static void sub_80F2108(void);
+static bool8 sub_80F1E6C(void);
+static void sub_80F1E84(void);
+static void sub_80F2148(void);
+static void sub_80F2240(struct Sprite *sprite);
+static bool8 sub_80F1F10(void);
+static bool8 sub_80F2360(void);
+static void sub_80F2170(void);
+static bool8 sub_80F23C8(void);
+static void sub_80F21F8(void);
+static void sub_80F1FF0(void);
+static void sub_80F208C(void);
+static void sub_80F22B0(struct Sprite *sprite);
+static void sub_80F240C(struct Sprite *sprite);
+static void sub_80F2598(void);
+static void sub_80F2620(void);
+static bool8 sub_80F26BC(void);
+static void sub_80F2C58(struct Sprite *sprite);
+static void sub_80F2D04(u8);
+static void sub_80F2D6C(u8);
+static void sub_80F2DD8(void);
+static void sub_80F2DF4(void);
+static void sub_80F2FEC(struct Sprite *sprite);
+static void sub_80F2FB0(void);
+static void sub_80F3008(u8);
+static void sub_80F3130(void);
+static void sub_80F3264(void);
+static void sub_80F3294(u8);
+static void sub_80F35B4(void);
+static void sub_80F363C(struct Sprite *sprite);
+static void SetMonMarkings(u16, u16, u8);
+static void sub_80F36F0(void);
+static bool8 sub_80F3724(void);
+static void sub_80F379C(void);
+static bool8 sub_80F37D0(void);
+static void sub_80F38B8(void);
+static bool8 sub_80F38EC(void);
+static void sub_80F3970(void);
+static bool8 sub_80F39A4(void);
+static void sub_80F3B00(void);
+static bool8 sub_80F3B58(void);
+static void sub_80F3B94(void);
+static bool8 sub_80F3BD4(void);
+static void sub_80F3C2C(void);
+static void sub_80F3F20(u8, u8);
+static void sub_80F3FAC(void);
+static void sub_80F3FF0(void);
+static bool8 sub_80F4024(void);
+static void sub_80F42C4(u8*);
+static void sub_80F4394(void);
+u8 *sub_80F6514(u8*, u16, u8);
+static u8 *sub_80F443C(u8 *, u16);
+void sub_80F55AC(u8*, struct UnkPokenav11 *);
+static void sub_80F4CF0(void);
+static void sub_80F4D44(void);
+static bool8 sub_80F4D88(void);
+static void sub_80F53EC(struct UnkPokenav11*, struct UnkPokenav11*);
+static bool8 sub_80F5504(void);
+static bool8 sub_80F5264(void);
+static bool8 sub_80F52F8(void);
+static bool8 sub_80F5364(void);
-extern bool8 sub_80F0944(void);
-extern void sub_80F081C();
extern void sub_80F0900(void);
-extern void sub_80F443C(u8 *, u16);
-extern bool8 sub_80F162C(u8);
-extern void sub_80F01E0(u16);
extern void sub_80F01A4(void);
-extern void sub_80F1614(void);
extern void sub_80EFD3C(void);
extern void sub_8095C8C();
extern void sub_80EFDA0(void);
extern void sub_80EFD74(void);
-extern void sub_80F1A80(void);
extern bool8 sub_80EFC64(void);
extern void sub_80EFC3C(void);
extern void sub_80EF624(const u16 *, const u16 *, u8, u8, u16 *);
@@ -192,109 +371,50 @@ extern void sub_80EF7D4(void);
extern void sub_80EF54C(u8);
extern void sub_80EF58C(u8);
extern void sub_80F6FFC();
-extern void sub_80F3294();
-extern void sub_80F0B24();
-extern bool8 sub_80F0B44();
-extern void sub_80F0F64();
-extern bool8 sub_80F0FEC();
extern void sub_80F6FB8();
extern void sub_80F6DB8();
-extern void sub_80F0CD8();
extern bool8 sub_80F6E9C();
-extern bool8 sub_80F0D5C();
extern bool8 sub_80F6ED4();
-extern bool8 sub_80F0EF4();
-extern void sub_80F2FB0();
-extern void sub_80F0FA0();
-extern void sub_80F0C28();
-extern bool8 sub_80F0C48();
extern bool8 sub_80F70FC();
extern void sub_80F708C(u32);
-extern void sub_80F4394();
-extern void sub_80F0EC0();
-extern void sub_80F700C();
-extern void sub_80F42C4();
-extern void sub_80F0FFC();
extern void sub_80F6F10();
-extern void sub_80F3C2C();
-extern void sub_80F15A8();
+static extern void sub_80F15A8(void);
extern void sub_80F6A4C();
extern bool8 sub_80F6AF0();
-extern void sub_80F3B00();
-extern bool8 sub_80F3B58();
-extern void sub_80F1494();
extern u8 sub_80F68E8();
-extern void sub_80F3B94();
-extern bool8 sub_80F3BD4();
extern void sub_80F66E0();
-extern bool8 sub_80F1080();
-extern void sub_80F38B8();
-extern bool8 sub_80F38EC();
extern void sub_80F638C();
extern bool8 sub_80F63D0();
-extern void sub_80F4CF0();
extern void sub_80EFF34();
extern bool8 sub_80EFF68();
-extern void sub_80F35B4();
extern void sub_80F6134();
extern u8 sub_80F5DD4();
-extern void ShowMapNamePopUpWindow();
-extern bool8 sub_80F0718();
-extern bool8 sub_80F3264();
-extern void sub_80F4D44();
-extern bool8 sub_80F4D88();
extern void sub_80F0264(u8);
extern bool8 sub_80F02A0();
-extern void sub_80F3008();
-extern void sub_80F3130();
-extern void sub_80F2D6C(u32);
-extern bool8 sub_80F1E6C();
extern void sub_80EF9F8(void);
extern bool8 sub_80EFBDC(bool8);
extern void sub_80EFBB0(void);
-extern void sub_80F2DF4();
-extern void sub_80F1E84();
-extern bool8 sub_80F1F10();
extern void sub_80EEFBC(u8);
-extern void sub_80F2620();
extern void sub_80EF814(void);
extern void sub_80EF840(void);
extern bool8 sub_80EF874(void);
-extern void sub_80F2DD8();
extern bool8 sub_80F6250();
extern void sub_80F6208();
-extern void sub_80F208C();
extern void sub_80F6C20();
-extern void sub_80F3FF0();
-extern bool8 sub_80F4024();
-extern void sub_80F2598();
extern void sub_80EF248(u8);
extern bool8 sub_80EF284(u8);
-extern void sub_80F1B8C();
-extern bool8 sub_80F1BC8(u32 unk);
-extern void sub_80F1DF0();
-extern bool8 sub_80F1E50();
extern void sub_80EF428(u8, u8);
extern bool8 sub_80EEF78();
-extern void sub_80F1A90();
-extern void sub_80F2D04(u32);
-extern bool8 sub_80F1AC4();
-extern void sub_80F36F0();
-extern bool8 sub_80F3724();
extern void sub_80EBC10();
extern void sub_80EBDBC(void (*func)(void));
extern void sub_80EBBE8();
-extern bool8 sub_80F26BC(void);
extern void sub_80EBDD8();
extern void sub_80EBD90();
extern void sub_80EBD18();
-extern void sub_80F1A74();
-extern void sub_80F1FF0();
extern void sub_80FB260();
extern void sub_80EFE7C(void);
extern void sub_80F5BF0();
extern void sub_80F6F64();
-extern void sub_80F19FC();
extern u16 gKeyRepeatStartDelay;
@@ -1194,11 +1314,11 @@ void sub_80ECD80()
ewram0_10.var304++;
break;
case 9:
- sub_80F1B8C(0x2);
+ sub_80F1B8C(2);
ewram0_10.var304++;
// fall through
case 10:
- if (!sub_80F1BC8(0x2))
+ if (!sub_80F1BC8(2))
ewram0_10.var304++;
break;
case 11:
@@ -3131,7 +3251,7 @@ void sub_80EE658()
ewram0_10.var304++;
break;
case 6:
- sub_80F0CD8();
+ LoadTrainerEyesDescriptionLines();
ewram0_10.var304++;
case 7:
if (!sub_80F6E9C() && !sub_80F0D5C())
@@ -3662,7 +3782,7 @@ bool8 sub_80EEE54(void)
sub_80EF58C(2);
break;
case 4:
- gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0;
+ gUnknown_083DFEC4->unk030C = 0;
REG_BG1HOFS = 0;
REG_BG1VOFS = 0;
REG_BG1CNT = 0x1B0C;
@@ -3678,17 +3798,17 @@ bool8 sub_80EEF34(void)
{
bool8 retVal = TRUE;
- if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 32)
+ if (gUnknown_083DFEC4->unk030C == 32)
return FALSE;
- gUnknown_083DFEC4->unk030C.unk030C.unk0 += 2;
- if (gUnknown_083DFEC4->unk030C.unk030C.unk0 > 31)
+ gUnknown_083DFEC4->unk030C += 2;
+ if (gUnknown_083DFEC4->unk030C > 31)
{
- gUnknown_083DFEC4->unk030C.unk030C.unk0 = 32;
+ gUnknown_083DFEC4->unk030C = 32;
retVal = FALSE;
}
- REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0;
+ REG_BG1VOFS = gUnknown_083DFEC4->unk030C;
return retVal;
}
@@ -3696,17 +3816,17 @@ bool8 sub_80EEF78(void)
{
bool8 retVal = TRUE;
- if (gUnknown_083DFEC4->unk030C.unk030C.unk0 == 0)
+ if (gUnknown_083DFEC4->unk030C == 0)
return FALSE;
- gUnknown_083DFEC4->unk030C.unk030C.unk0 -= 2;
- if (gUnknown_083DFEC4->unk030C.unk030C.unk0 <= 0)
+ gUnknown_083DFEC4->unk030C -= 2;
+ if (gUnknown_083DFEC4->unk030C <= 0)
{
- gUnknown_083DFEC4->unk030C.unk030C.unk0 = 0;
+ gUnknown_083DFEC4->unk030C = 0;
retVal = FALSE;
}
- REG_BG1VOFS = gUnknown_083DFEC4->unk030C.unk030C.unk0;
+ REG_BG1VOFS = gUnknown_083DFEC4->unk030C;
return retVal;
}
@@ -4484,7 +4604,7 @@ bool8 sub_80EFF68(void)
{
case 0:
sub_80EEDE8();
- gUnknown_083DFEC4->unkD162[0] = 11;
+ gUnknown_083DFEC4->unkD162 = 11;
break;
case 1:
Text_LoadWindowTemplate(&gWindowTemplate_81E7080);
@@ -4529,7 +4649,7 @@ bool8 sub_80EFF68(void)
sub_80F01A4();
break;
case 12:
- sub_80F01E0((u16)gUnknown_083DFEC4->unk8fe9);
+ sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
break;
case 13:
REG_BG3CNT = 0x1E03;
@@ -4563,7 +4683,7 @@ void sub_80F01A4(void)
REG_WINOUT = 0x001B;
}
-void sub_80F01E0(u16 a)
+static void sub_80F01E0(u16 a)
{
Menu_PrintText(gUnknown_083DFEC4->unk8829[a], 13, 1);
@@ -4587,7 +4707,6 @@ void sub_80F0264(u8 a)
}
}
-#ifdef NONMATCHING // small nonmatching part is in the third else clause in case 7.
bool8 sub_80F02A0(void)
{
const u16 *pointer;
@@ -4598,7 +4717,7 @@ bool8 sub_80F02A0(void)
sub_80EEDE8();
gUnknown_083DFEC4->unk87C8 = gUnknown_083DFEC4->unk87CA == 1;
- gUnknown_083DFEC4->unkD162[0] = 11;
+ gUnknown_083DFEC4->unkD162 = 11;
break;
case 1:
Text_LoadWindowTemplate(&gWindowTemplate_81E70D4);
@@ -4647,8 +4766,7 @@ bool8 sub_80F02A0(void)
else
{
LoadPalette(gUnknown_08E9F9E8, 0x30, 0x20);
- pointer = &gUnknown_08E9F9E8[5];
- gPlttBufferUnfaded[0] = gUnknown_08E9F9E8[5];
+ gPlttBufferUnfaded[0] = *(pointer = &gUnknown_08E9F9E8[5]);
LoadPalette(gUnknown_083E0314, 0x50, 0x20);
LoadPalette(&gUnknown_083E02B4[1], 0xB1, 0x2);
LoadPalette(&gUnknown_083E02B4[8], 0xB5, 0x2);
@@ -4690,7 +4808,7 @@ bool8 sub_80F02A0(void)
else
{
sub_80F081C(0);
- sub_80F0FFC(gUnknown_083DFEC4->unk876E);
+ sub_80F0FFC((u8)gUnknown_083DFEC4->unk876E);
}
break;
case 14:
@@ -4712,414 +4830,3910 @@ bool8 sub_80F02A0(void)
gUnknown_083DFEC4->unk306++;
return TRUE;
}
+
+void sub_80F063C(s16 arg0)
+{
+ s16 var0;
+ s16 var1;
+ s16 var2;
+
+ gUnknown_083DFEC4->unk877C = arg0 * 16;
+ gUnknown_083DFEC4->unk877A = (arg0 == 1 || arg0 == -1) ? 4 : 8;
+ if (arg0 < 0)
+ {
+ gUnknown_083DFEC4->unk877A *= -1;
+ var0 = arg0 * 2 + gUnknown_083DFEC4->unk8778;
+ var1 = arg0 + gUnknown_083DFEC4->unk8770;
+ if (var1 < 0)
+ var1 += gUnknown_083DFEC4->unk8774 + 1;
+
+ arg0 *= -1;
+ }
+ else
+ {
+ var0 = gUnknown_083DFEC4->unk8778 + 16;
+ var1 = gUnknown_083DFEC4->unk8772 + 1;
+ }
+
+ if (var1 > gUnknown_083DFEC4->unk8774)
+ var1 = 0;
+
+ var2 = var0 & 0x1F;
+ sub_80F0954(var1, var2, arg0);
+}
+
+static bool8 sub_80F0718(void)
+{
+ if (!sub_80F098C())
+ {
+ if (gUnknown_083DFEC4->unk877C == 0)
+ return FALSE;
+
+ gUnknown_083DFEC4->unk877C -= gUnknown_083DFEC4->unk877A;
+ gUnknown_083DFEC4->unk8776 += gUnknown_083DFEC4->unk877A;
+ gUnknown_083DFEC4->unk8776 &= 0xFF;
+ REG_BG3VOFS = gUnknown_083DFEC4->unk8776;
+ if (gUnknown_083DFEC4->unk877C == 0)
+ {
+ gUnknown_083DFEC4->unk8778 = ((8 + gUnknown_083DFEC4->unk8776) & 0xFF) / 8;
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static void ShowMapNamePopUpWindow(void)
+{
+ switch (gUnknown_083DFEC4->unk87CA)
+ {
+ case 0:
+ sub_80F443C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk876E].unk2);
+ break;
+ case 1:
+ sub_80F445C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk876E + 1);
+ break;
+ default:
+ return;
+ }
+
+ BasicInitMenuWindow(&gWindowTemplate_81E710C);
+ Menu_PrintText(gUnknown_083DFEC4->unk8788, 1, 6);
+}
+
+void sub_80F081C(u8 arg0)
+{
+ u32 numTrainerBattles;
+
+ BasicInitMenuWindow(&gWindowTemplate_81E710C);
+ switch (arg0)
+ {
+ case 0:
+ case 1:
+ MenuPrint_RightAligned(gOtherText_NumberRegistered, 10, 9);
+ if (arg0 != 0)
+ break;
+ // fall through
+ case 2:
+ ConvertIntToDecimalStringN(
+ gUnknown_083DFEC4->unk8788,
+ gUnknown_083DFEC4->unk8774 + 1,
+ STR_CONV_MODE_RIGHT_ALIGN,
+ 5);
+ MenuPrint_RightAligned(gUnknown_083DFEC4->unk8788, 10, 11);
+ if (arg0 != 0)
+ break;
+ // fall through
+ case 3:
+ MenuPrint_RightAligned(gOtherText_NumberBattles, 10, 13);
+ if (arg0 != 0)
+ break;
+ // fall through
+ case 4:
+ numTrainerBattles = GetGameStat(GAME_STAT_TRAINER_BATTLES);
+ if (numTrainerBattles > 99999)
+ numTrainerBattles = 99999;
+
+ ConvertIntToDecimalStringN(
+ gUnknown_083DFEC4->unk8788,
+ numTrainerBattles,
+ STR_CONV_MODE_RIGHT_ALIGN,
+ 5);
+ MenuPrint_RightAligned(gUnknown_083DFEC4->unk8788, 10, 15);
+ break;
+ }
+}
+
+static void sub_80F08E4(void)
+{
+ BasicInitMenuWindow(&gWindowTemplate_81E710C);
+ Menu_EraseWindowRect(0, 9, 11, 16);
+}
+
+void sub_80F0900(void)
+{
+ s16 var0 = (gUnknown_083DFEC4->unk8772 - gUnknown_083DFEC4->unk8770) + 1;
+ if (var0 < 8)
+ Menu_EraseWindowRect(12, 1, 31, 15);
+
+ sub_80F0954(gUnknown_083DFEC4->unk8770, 0, var0);
+}
+
+bool8 sub_80F0944(void)
+{
+ return sub_80F098C();
+}
+
+static void sub_80F0954(u16 arg0, u16 arg1, u16 arg2)
+{
+ gUnknown_083DFEC4->unk877E = arg0;
+ gUnknown_083DFEC4->unk8780 = arg1;
+ gUnknown_083DFEC4->unk8784 = arg2;
+ gUnknown_083DFEC4->unk8786 = 0;
+}
+
+#ifdef NONMATCHING
+static bool8 sub_80F098C(void)
+{
+ register u16 zero asm("r8");
+ if (!gUnknown_083DFEC4->unk8784)
+ {
+ DONE:
+ return FALSE;
+ }
+
+ zero = 0;
+ gUnknown_083E3270[gUnknown_083DFEC4->unk87CA](gUnknown_083DFEC4->unk877E, gUnknown_083DFEC4->unk8780);
+ if (!--gUnknown_083DFEC4->unk8784)
+ goto DONE;
+
+ if ((++gUnknown_083DFEC4->unk877E & 0xFFFF) > gUnknown_083DFEC4->unk8774)
+ gUnknown_083DFEC4->unk877E = zero;
+
+ gUnknown_083DFEC4->unk8780 += 2;
+ gUnknown_083DFEC4->unk8780 &= 0x1F;
+ return TRUE;
+}
#else
NAKED
-bool8 sub_80F02A0(void)
+static bool8 sub_80F098C(void)
{
asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- mov r6, r8\n\
- push {r6}\n\
- sub sp, 0x18\n\
- ldr r1, _080F02C4 @ =gUnknown_083DFEC4\n\
- ldr r0, [r1]\n\
- ldr r2, _080F02C8 @ =0x00000306\n\
- adds r0, r2\n\
- ldrh r0, [r0]\n\
- adds r2, r1, 0\n\
- cmp r0, 0xE\n\
- bls _080F02BA\n\
- b _080F05FA\n\
-_080F02BA:\n\
- lsls r0, 2\n\
- ldr r1, _080F02CC @ =_080F02D0\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ ldr r0, _080F09A4 @ =gUnknown_083DFEC4\n\
+ ldr r6, [r0]\n\
+ ldr r0, _080F09A8 @ =0x00008784\n\
+ adds r7, r6, r0\n\
+ ldrh r0, [r7]\n\
+ cmp r0, 0\n\
+ bne _080F09AC\n\
+_080F09A0:\n\
+ movs r0, 0\n\
+ b _080F0A02\n\
+ .align 2, 0\n\
+_080F09A4: .4byte gUnknown_083DFEC4\n\
+_080F09A8: .4byte 0x00008784\n\
+_080F09AC:\n\
+ movs r1, 0\n\
+ mov r8, r1\n\
+ ldr r1, _080F0A0C @ =gUnknown_083E3270\n\
+ ldr r2, _080F0A10 @ =0x000087ca\n\
+ adds r0, r6, r2\n\
+ ldrb r2, [r0]\n\
+ lsls r2, 2\n\
+ adds r2, r1\n\
+ ldr r0, _080F0A14 @ =0x0000877e\n\
+ adds r4, r6, r0\n\
+ ldrh r0, [r4]\n\
+ ldr r1, _080F0A18 @ =0x00008780\n\
+ adds r5, r6, r1\n\
+ ldrh r1, [r5]\n\
+ ldr r2, [r2]\n\
+ bl _call_via_r2\n\
+ ldrh r0, [r7]\n\
+ subs r0, 0x1\n\
+ strh r0, [r7]\n\
+ ldr r2, _080F0A1C @ =0x0000ffff\n\
+ adds r1, r2, 0\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _080F09A0\n\
+ ldrh r0, [r4]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4]\n\
+ ands r0, r1\n\
+ ldr r2, _080F0A20 @ =0x00008774\n\
+ adds r1, r6, r2\n\
+ movs r2, 0\n\
+ ldrsh r1, [r1, r2]\n\
+ cmp r0, r1\n\
+ ble _080F09F6\n\
+ mov r0, r8\n\
+ strh r0, [r4]\n\
+_080F09F6:\n\
+ ldrh r0, [r5]\n\
+ adds r0, 0x2\n\
+ movs r1, 0x1F\n\
+ ands r0, r1\n\
+ strh r0, [r5]\n\
+ movs r0, 0x1\n\
+_080F0A02:\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
+_080F0A0C: .4byte gUnknown_083E3270\n\
+_080F0A10: .4byte 0x000087ca\n\
+_080F0A14: .4byte 0x0000877e\n\
+_080F0A18: .4byte 0x00008780\n\
+_080F0A1C: .4byte 0x0000ffff\n\
+_080F0A20: .4byte 0x00008774\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+void sub_80F0A24(u16 arg0, u16 arg1)
+{
+ u8 var0 = gUnknown_083DFEC4->unk87C8 == 0 ? 2 : 1;
+ sub_80F4428(gUnknown_083DFEC4->unk8788, arg0, var0);
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ Menu_PrintText(gUnknown_083DFEC4->unk8788, 13, arg1);
+}
+
+static void sub_80F0A74(u16 arg0, u16 arg1)
+{
+ sub_80F700C(gUnknown_083DFEC4->unk8788, arg0);
+ arg1 &= 0x1F;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, arg1 * 8, 0);
+ if (arg0 < gUnknown_083DFEC4->unkD158 && gUnknown_083DFEC4->unkCEE8[arg0].unk5)
+ sub_8095C8C((void *)VRAM + 0xF000, 29, arg1, gUnknown_083E039C, 0, 0, 1, 2, 1);
+ else
+ sub_8095C8C((void *)VRAM + 0xF000, 29, arg1, gUnknown_083E03A0, 0, 0, 1, 2, 1);
+}
+
+static void sub_80F0B24(void)
+{
+ gUnknown_083DFEC4->unkD15C = 0;
+ gUnknown_083DFEC4->unk306 = 0;
+}
+
+static bool8 sub_80F0B44(void)
+{
+ int top;
+ if (gUnknown_083DFEC4->unkD15C > 8)
+ {
+ return FALSE;
+ }
+
+ if (++gUnknown_083DFEC4->unk306 > 1)
+ {
+ gUnknown_083DFEC4->unk306 = 0;
+ if (gUnknown_083DFEC4->unkD15C < 8)
+ {
+ top = (gUnknown_083DFEC4->unk8778 + (gUnknown_083DFEC4->unkD15C * 2)) & 0x1F;
+ if (gUnknown_083DFEC4->unkD15C != gUnknown_083DFEC4->unk876C)
+ {
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ Menu_EraseWindowRect(12, top, 31, top + 1);
+ }
+
+ if (!gUnknown_083DFEC4->unkD15C)
+ sub_80F08E4();
+
+ gUnknown_083DFEC4->unkD15C++;
+ return TRUE;
+ }
+ else
+ {
+ u16 i;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ top = (gUnknown_083DFEC4->unk8778 + 16) & 0x1F;
+ for (i = 0; i < 8; i++)
+ {
+ Menu_EraseWindowRect(12, top, 31, top + 1);
+ top = (top + 2) & 0x1F;
+ }
+
+ gUnknown_083DFEC4->unkD15C++;
+ return FALSE;
+ }
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+static void sub_80F0C28(void)
+{
+ gUnknown_083DFEC4->unkD15C = 0;
+ gUnknown_083DFEC4->unk306 = 0;
+}
+
+static bool8 sub_80F0C48(void)
+{
+ if (gUnknown_083DFEC4->unkD15C > 7)
+ return FALSE;
+
+ if (++gUnknown_083DFEC4->unk306 > 1)
+ {
+ gUnknown_083DFEC4->unk306 = 0;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ sub_80F0A74(gUnknown_083DFEC4->unk8770 + gUnknown_083DFEC4->unkD15C,
+ gUnknown_083DFEC4->unk8778 + gUnknown_083DFEC4->unkD15C * 2);
+
+ if ((++gUnknown_083DFEC4->unkD15C) > 7)
+ {
+ sub_80F081C(0);
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+void LoadTrainerEyesDescriptionLines(void)
+{
+ u16 i;
+ int trainerEyesId;
+ const u8 *curChar;
+
+ gUnknown_083DFEC4->unk306 = 0;
+ gUnknown_083DFEC4->unkD15C = 0;
+ trainerEyesId = gUnknown_083DFEC4->unkCEE8[gUnknown_083DFEC4->unk876E].unk4;
+ gUnknown_083DFEC4->trainerEyeDescriptionLines[0] = gTrainerEyeDescriptions[trainerEyesId];
+
+ // Find the start of the 3 other lines in the Trainer's Eyes description.
+ curChar = gUnknown_083DFEC4->trainerEyeDescriptionLines[0];
+ for (i = 0; i < 3; i++)
+ {
+ while (*curChar != EOS)
+ curChar++;
+ gUnknown_083DFEC4->trainerEyeDescriptionLines[i + 1] = ++curChar;
+ }
+}
+
+#ifdef NONMATCHING
+// small register mismatch (r2/r3) on the line where var0 is set.
+bool8 sub_80F0D5C(void)
+{
+ int var0;
+ if (gUnknown_083DFEC4->unkD15C == 7)
+ return FALSE;
+
+ if (++gUnknown_083DFEC4->unk306 > 1)
+ {
+ gUnknown_083DFEC4->unk306 = 0;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ var0 = (gUnknown_083DFEC4->unk8778 + 2 + gUnknown_083DFEC4->unkD15C * 2) & 0x1F;
+ switch (gUnknown_083DFEC4->unkD15C)
+ {
+ case 0:
+ Menu_PrintTextPixelCoords(gOtherText_Strategy, 97, var0 * 8, 0);
+ break;
+ case 1:
+ AlignStringInMenuWindow(
+ gUnknown_083DFEC4->unk8788,
+ gUnknown_083DFEC4->trainerEyeDescriptionLines[0],
+ 136,
+ 0);
+ Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, var0 * 8, 0);
+ break;
+ case 2:
+ Menu_PrintTextPixelCoords(gOtherText_TrainersPokemon, 97, var0 * 8, 0);
+ break;
+ case 3:
+ AlignStringInMenuWindow(
+ gUnknown_083DFEC4->unk8788,
+ gUnknown_083DFEC4->trainerEyeDescriptionLines[1],
+ 136,
+ 0);
+ Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, var0 * 8, 0);
+ break;
+ case 4:
+ Menu_PrintTextPixelCoords(gOtherText_SelfIntroduction, 97, var0 * 8, 0);
+ break;
+ case 5:
+ AlignStringInMenuWindow(
+ gUnknown_083DFEC4->unk8788,
+ gUnknown_083DFEC4->trainerEyeDescriptionLines[2],
+ 136,
+ 0);
+ Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, var0 * 8, 0);
+ break;
+ case 6:
+ AlignStringInMenuWindow(
+ gUnknown_083DFEC4->unk8788,
+ gUnknown_083DFEC4->trainerEyeDescriptionLines[3],
+ 136,
+ 0);
+ Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 97, var0 * 8, 0);
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unkD15C++;
+ return TRUE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+#else
+NAKED
+bool8 sub_80F0D5C(void)
+{
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ ldr r0, _080F0D70 @ =gUnknown_083DFEC4\n\
+ ldr r4, [r0]\n\
+ ldr r0, _080F0D74 @ =0x0000d15c\n\
+ adds r5, r4, r0\n\
+ ldrh r0, [r5]\n\
+ cmp r0, 0x7\n\
+ bne _080F0D78\n\
+_080F0D6C:\n\
+ movs r0, 0\n\
+ b _080F0EB0\n\
+ .align 2, 0\n\
+_080F0D70: .4byte gUnknown_083DFEC4\n\
+_080F0D74: .4byte 0x0000d15c\n\
+_080F0D78:\n\
+ ldr r0, _080F0DB8 @ =0x00000306\n\
+ adds r1, r4, r0\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1]\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x1\n\
+ bhi _080F0D8C\n\
+ b _080F0EAE\n\
+_080F0D8C:\n\
+ movs r0, 0\n\
+ strh r0, [r1]\n\
+ ldr r0, _080F0DBC @ =gWindowTemplate_81E70D4\n\
+ bl BasicInitMenuWindow\n\
+ ldr r0, _080F0DC0 @ =0x00008778\n\
+ adds r1, r4, r0\n\
+ ldrh r3, [r5]\n\
+ lsls r0, r3, 1\n\
+ adds r0, 0x2\n\
+ ldrh r1, [r1]\n\
+ adds r5, r0, r1\n\
+ movs r0, 0x1F\n\
+ ands r5, r0\n\
+ cmp r3, 0x6\n\
+ bhi _080F0D6C\n\
+ lsls r0, r3, 2\n\
+ ldr r1, _080F0DC4 @ =_080F0DC8\n\
adds r0, r1\n\
ldr r0, [r0]\n\
mov pc, r0\n\
.align 2, 0\n\
-_080F02C4: .4byte gUnknown_083DFEC4\n\
-_080F02C8: .4byte 0x00000306\n\
-_080F02CC: .4byte _080F02D0\n\
+_080F0DB8: .4byte 0x00000306\n\
+_080F0DBC: .4byte gWindowTemplate_81E70D4\n\
+_080F0DC0: .4byte 0x00008778\n\
+_080F0DC4: .4byte _080F0DC8\n\
.align 2, 0\n\
-_080F02D0:\n\
- .4byte _080F030C\n\
- .4byte _080F0344\n\
- .4byte _080F0350\n\
- .4byte _080F035C\n\
- .4byte _080F0368\n\
- .4byte _080F036E\n\
- .4byte _080F0380\n\
- .4byte _080F0394\n\
- .4byte _080F04BC\n\
- .4byte _080F053C\n\
- .4byte _080F0550\n\
- .4byte _080F0574\n\
- .4byte _080F057A\n\
- .4byte _080F0586\n\
- .4byte _080F05BC\n\
-_080F030C:\n\
- bl sub_80EEDE8\n\
- ldr r0, _080F0334 @ =gUnknown_083DFEC4\n\
- ldr r1, [r0]\n\
- movs r2, 0\n\
- ldr r3, _080F0338 @ =0x000087ca\n\
- adds r0, r1, r3\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080F0322\n\
- movs r2, 0x1\n\
-_080F0322:\n\
- ldr r3, _080F033C @ =0x000087c8\n\
- adds r0, r1, r3\n\
- strb r2, [r0]\n\
- ldr r0, _080F0340 @ =0x0000d162\n\
- adds r1, r0\n\
- movs r0, 0xB\n\
- strb r0, [r1]\n\
- b _080F0618\n\
+_080F0DC8:\n\
+ .4byte _080F0DE4\n\
+ .4byte _080F0DF0\n\
+ .4byte _080F0E08\n\
+ .4byte _080F0E14\n\
+ .4byte _080F0E2C\n\
+ .4byte _080F0E38\n\
+ .4byte _080F0E6C\n\
+_080F0DE4:\n\
+ ldr r0, _080F0DEC @ =gOtherText_Strategy\n\
+ lsls r2, r5, 3\n\
+ b _080F0E54\n\
.align 2, 0\n\
-_080F0334: .4byte gUnknown_083DFEC4\n\
-_080F0338: .4byte 0x000087ca\n\
-_080F033C: .4byte 0x000087c8\n\
-_080F0340: .4byte 0x0000d162\n\
-_080F0344:\n\
- ldr r0, _080F034C @ =gWindowTemplate_81E70D4\n\
- bl Text_LoadWindowTemplate\n\
- b _080F0618\n\
+_080F0DEC: .4byte gOtherText_Strategy\n\
+_080F0DF0:\n\
+ ldr r0, _080F0DFC @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080F0E00 @ =0x00008788\n\
+ adds r4, r0, r1\n\
+ ldr r1, _080F0E04 @ =0x0000d110\n\
+ b _080F0E42\n\
.align 2, 0\n\
-_080F034C: .4byte gWindowTemplate_81E70D4\n\
-_080F0350:\n\
- ldr r0, _080F0358 @ =gWindowTemplate_81E70D4\n\
- bl MultistepInitMenuWindowBegin\n\
- b _080F0618\n\
+_080F0DFC: .4byte gUnknown_083DFEC4\n\
+_080F0E00: .4byte 0x00008788\n\
+_080F0E04: .4byte 0x0000d110\n\
+_080F0E08:\n\
+ ldr r0, _080F0E10 @ =gOtherText_TrainersPokemon\n\
+ lsls r2, r5, 3\n\
+ b _080F0E54\n\
.align 2, 0\n\
-_080F0358: .4byte gWindowTemplate_81E70D4\n\
-_080F035C:\n\
- bl MultistepInitMenuWindowContinue\n\
- cmp r0, 0\n\
- beq _080F0366\n\
- b _080F0618\n\
-_080F0366:\n\
- b _080F0626\n\
-_080F0368:\n\
- bl Menu_EraseScreen\n\
- b _080F0618\n\
-_080F036E:\n\
- ldr r0, _080F0378 @ =gUnknown_08E9FC64\n\
- ldr r1, _080F037C @ =0x0600e800\n\
- bl LZ77UnCompVram\n\
- b _080F0618\n\
+_080F0E10: .4byte gOtherText_TrainersPokemon\n\
+_080F0E14:\n\
+ ldr r0, _080F0E20 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080F0E24 @ =0x00008788\n\
+ adds r4, r0, r1\n\
+ ldr r1, _080F0E28 @ =0x0000d114\n\
+ b _080F0E42\n\
.align 2, 0\n\
-_080F0378: .4byte gUnknown_08E9FC64\n\
-_080F037C: .4byte 0x0600e800\n\
-_080F0380:\n\
- ldr r0, _080F038C @ =gPokenavConditionSearch2_Gfx\n\
- ldr r1, _080F0390 @ =0x06008000\n\
- bl LZ77UnCompVram\n\
- b _080F0618\n\
+_080F0E20: .4byte gUnknown_083DFEC4\n\
+_080F0E24: .4byte 0x00008788\n\
+_080F0E28: .4byte 0x0000d114\n\
+_080F0E2C:\n\
+ ldr r0, _080F0E34 @ =gOtherText_SelfIntroduction\n\
+ lsls r2, r5, 3\n\
+ b _080F0E54\n\
.align 2, 0\n\
-_080F038C: .4byte gPokenavConditionSearch2_Gfx\n\
-_080F0390: .4byte 0x06008000\n\
-_080F0394:\n\
- ldr r6, _080F03FC @ =gUnknown_083E02B4\n\
- adds r0, r6, 0\n\
- movs r1, 0xB0\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- adds r0, r6, 0\n\
- movs r1, 0xF0\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- ldr r0, _080F0400 @ =gUnknown_083E0334\n\
- movs r1, 0x40\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- ldr r0, _080F0404 @ =gUnknown_083DFEC4\n\
+_080F0E34: .4byte gOtherText_SelfIntroduction\n\
+_080F0E38:\n\
+ ldr r0, _080F0E60 @ =gUnknown_083DFEC4\n\
ldr r0, [r0]\n\
- ldr r1, _080F0408 @ =0x000087ca\n\
+ ldr r1, _080F0E64 @ =0x00008788\n\
+ adds r4, r0, r1\n\
+ ldr r1, _080F0E68 @ =0x0000d118\n\
+_080F0E42:\n\
adds r0, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _080F0418\n\
- ldr r4, _080F040C @ =gPokenavConditionSearch2_Pal\n\
+ ldr r1, [r0]\n\
adds r0, r4, 0\n\
- movs r1, 0x30\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- ldr r1, _080F0410 @ =gPlttBufferUnfaded\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r1]\n\
- ldr r0, _080F0414 @ =gUnknownPalette_81E6692\n\
- movs r1, 0xB0\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- adds r0, r6, 0x2\n\
- movs r1, 0xB1\n\
- movs r2, 0x2\n\
- bl LoadPalette\n\
- adds r0, r6, 0\n\
- adds r0, 0x10\n\
- movs r1, 0xB5\n\
- movs r2, 0x2\n\
- bl LoadPalette\n\
- adds r4, 0xA\n\
+ movs r2, 0x88\n\
+ movs r3, 0\n\
+ bl AlignStringInMenuWindow\n\
+ lsls r2, r5, 3\n\
adds r0, r4, 0\n\
- movs r1, 0xBF\n\
- b _080F04A8\n\
+_080F0E54:\n\
+ movs r1, 0x61\n\
+ movs r3, 0\n\
+ bl Menu_PrintTextPixelCoords\n\
+ b _080F0EA0\n\
.align 2, 0\n\
-_080F03FC: .4byte gUnknown_083E02B4\n\
-_080F0400: .4byte gUnknown_083E0334\n\
-_080F0404: .4byte gUnknown_083DFEC4\n\
-_080F0408: .4byte 0x000087ca\n\
-_080F040C: .4byte gPokenavConditionSearch2_Pal\n\
-_080F0410: .4byte gPlttBufferUnfaded\n\
-_080F0414: .4byte gUnknownPalette_81E6692\n\
-_080F0418:\n\
- cmp r0, 0x1\n\
- bne _080F0464\n\
- ldr r4, _080F0458 @ =gUnknown_083E0274\n\
+_080F0E60: .4byte gUnknown_083DFEC4\n\
+_080F0E64: .4byte 0x00008788\n\
+_080F0E68: .4byte 0x0000d118\n\
+_080F0E6C:\n\
+ ldr r0, _080F0E94 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080F0E98 @ =0x00008788\n\
+ adds r4, r0, r1\n\
+ ldr r1, _080F0E9C @ =0x0000d11c\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
adds r0, r4, 0\n\
- movs r1, 0x30\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- ldr r1, _080F045C @ =gPlttBufferUnfaded\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r1]\n\
- ldr r0, _080F0460 @ =gUnknownPalette_81E6692\n\
- movs r1, 0xB0\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- adds r0, r6, 0x2\n\
- movs r1, 0xB1\n\
- movs r2, 0x2\n\
- bl LoadPalette\n\
- adds r0, r6, 0\n\
- adds r0, 0x10\n\
- movs r1, 0xB5\n\
- movs r2, 0x2\n\
- bl LoadPalette\n\
- adds r4, 0xA\n\
+ movs r2, 0x88\n\
+ movs r3, 0\n\
+ bl AlignStringInMenuWindow\n\
+ lsls r2, r5, 3\n\
adds r0, r4, 0\n\
- movs r1, 0xBF\n\
- b _080F04A8\n\
+ movs r1, 0x61\n\
+ movs r3, 0\n\
+ bl Menu_PrintTextPixelCoords\n\
+ b _080F0D6C\n\
.align 2, 0\n\
-_080F0458: .4byte gUnknown_083E0274\n\
-_080F045C: .4byte gPlttBufferUnfaded\n\
-_080F0460: .4byte gUnknownPalette_81E6692\n\
-_080F0464:\n\
- ldr r4, _080F04B0 @ =gUnknown_08E9F9E8\n\
- adds r0, r4, 0\n\
- movs r1, 0x30\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- ldr r1, _080F04B4 @ =gPlttBufferUnfaded\n\
- adds r5, r4, 0\n\
- adds r5, 0xA\n\
- ldrh r0, [r4, 0xA]\n\
+_080F0E94: .4byte gUnknown_083DFEC4\n\
+_080F0E98: .4byte 0x00008788\n\
+_080F0E9C: .4byte 0x0000d11c\n\
+_080F0EA0:\n\
+ ldr r0, _080F0EB8 @ =gUnknown_083DFEC4\n\
+ ldr r1, [r0]\n\
+ ldr r0, _080F0EBC @ =0x0000d15c\n\
+ adds r1, r0\n\
+ ldrh r0, [r1]\n\
+ adds r0, 0x1\n\
strh r0, [r1]\n\
- ldr r0, _080F04B8 @ =gUnknown_083E0314\n\
- movs r1, 0x50\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
- adds r0, r6, 0x2\n\
- movs r1, 0xB1\n\
- movs r2, 0x2\n\
- bl LoadPalette\n\
- adds r0, r6, 0\n\
- adds r0, 0x10\n\
- movs r1, 0xB5\n\
- movs r2, 0x2\n\
- bl LoadPalette\n\
- adds r0, r5, 0\n\
- movs r1, 0xBF\n\
- movs r2, 0x2\n\
- bl LoadPalette\n\
- adds r0, r5, 0\n\
- movs r1, 0x5F\n\
-_080F04A8:\n\
- movs r2, 0x2\n\
- bl LoadPalette\n\
- b _080F0618\n\
- .align 2, 0\n\
-_080F04B0: .4byte gUnknown_08E9F9E8\n\
-_080F04B4: .4byte gPlttBufferUnfaded\n\
-_080F04B8: .4byte gUnknown_083E0314\n\
-_080F04BC:\n\
- ldr r0, _080F04E8 @ =gUnknown_083DFEC4\n\
- ldr r0, [r0]\n\
- ldr r2, _080F04EC @ =0x000087ca\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x2\n\
- beq _080F04F8\n\
- ldr r0, _080F04F0 @ =0x0600e800\n\
- ldr r3, _080F04F4 @ =gUnknown_08E9FD1C\n\
- movs r1, 0\n\
- str r1, [sp]\n\
- str r1, [sp, 0x4]\n\
- movs r2, 0x9\n\
- str r2, [sp, 0x8]\n\
- movs r1, 0x4\n\
- str r1, [sp, 0xC]\n\
- str r2, [sp, 0x10]\n\
- movs r1, 0\n\
- movs r2, 0x5\n\
- bl sub_8095C8C\n\
- b _080F0618\n\
+_080F0EAE:\n\
+ movs r0, 0x1\n\
+_080F0EB0:\n\
+ pop {r4,r5}\n\
+ pop {r1}\n\
+ bx r1\n\
.align 2, 0\n\
-_080F04E8: .4byte gUnknown_083DFEC4\n\
-_080F04EC: .4byte 0x000087ca\n\
-_080F04F0: .4byte 0x0600e800\n\
-_080F04F4: .4byte gUnknown_08E9FD1C\n\
-_080F04F8:\n\
- ldr r3, _080F0530 @ =0x0600e800\n\
- mov r8, r3\n\
- ldr r3, _080F0534 @ =gUnknown_08E9FE54\n\
- movs r4, 0\n\
- str r4, [sp]\n\
- str r4, [sp, 0x4]\n\
- movs r5, 0xC\n\
- str r5, [sp, 0x8]\n\
- movs r6, 0xA\n\
- str r6, [sp, 0xC]\n\
- str r5, [sp, 0x10]\n\
- mov r0, r8\n\
- movs r1, 0\n\
- movs r2, 0x4\n\
- bl sub_8095C8C\n\
- ldr r3, _080F0538 @ =gUnknown_08E9FD64\n\
- str r4, [sp]\n\
- str r4, [sp, 0x4]\n\
- str r5, [sp, 0x8]\n\
- str r6, [sp, 0xC]\n\
- str r5, [sp, 0x10]\n\
- mov r0, r8\n\
- movs r1, 0\n\
- movs r2, 0x8\n\
- bl sub_8095C8C\n\
- b _080F0618\n\
+_080F0EB8: .4byte gUnknown_083DFEC4\n\
+_080F0EBC: .4byte 0x0000d15c\n\
+ .syntax divided\n");
+}
+#endif
+
+static void sub_80F0EC0(void)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ gUnknown_083DFEC4->unkD15C = 0;
+ StringFill(gUnknown_083DFEC4->unk8788, CHAR_SPACE, 16);
+}
+
+static bool8 sub_80F0EF4(void)
+{
+ int top;
+ if (gUnknown_083DFEC4->unkD15C > 6)
+ return FALSE;
+
+ if (++gUnknown_083DFEC4->unk306 > 1)
+ {
+ gUnknown_083DFEC4->unk306 = 0;
+ top = (gUnknown_083DFEC4->unk8778 + 2 + gUnknown_083DFEC4->unkD15C * 2) & 0x1F;
+ BasicInitMenuWindow(&gWindowTemplate_81E70D4);
+ Menu_EraseWindowRect(12, top, 31, top + 1);
+ gUnknown_083DFEC4->unkD15C++;
+ }
+
+ return TRUE;
+}
+
+static void sub_80F0F64(void)
+{
+ s16 var0 = gUnknown_083DFEC4->unk876C;
+ gUnknown_083DFEC4->unk877C = var0 * 16;
+ gUnknown_083DFEC4->unk877A = var0 == 1 ? 4 : 8;
+}
+
+static void sub_80F0FA0(void)
+{
+ s16 var0 = gUnknown_083DFEC4->unk876C * -1;
+ gUnknown_083DFEC4->unk877C = var0 * 16;
+ gUnknown_083DFEC4->unk877A = var0 == -1 ? -4 : -8;
+}
+
+static bool8 sub_80F0FEC(void)
+{
+ return sub_80F0718();
+}
+
+void sub_80F0FFC(u8 arg0)
+{
+ GetMapSectionName(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unkCEE8[arg0].unk2, 0);
+ BasicInitMenuWindow(&gWindowTemplate_81E710C);
+ sub_80F19DC(gUnknown_083DFEC4->unk8788);
+ AlignStringInMenuWindow(gUnknown_083DFEC4->unkD138, gUnknown_083DFEC4->unk8788, 88, 2);
+ Menu_PrintText(gUnknown_083DFEC4->unkD138, 0, 5);
+}
+
+void sub_80F105C(void)
+{
+ sub_80F0A74(gUnknown_083DFEC4->unk876E, gUnknown_083DFEC4->unk8778);
+}
+
+static bool8 sub_80F1080(void)
+{
+ switch (gUnknown_083DFEC4->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ gUnknown_083DFEC4->unkD162 = 11;
+ break;
+ case 1:
+ Text_LoadWindowTemplate(&gWindowTemplate_81E70B8);
+ break;
+ case 2:
+ MultistepInitMenuWindowBegin(&gWindowTemplate_81E70B8);
+ break;
+ case 3:
+ if (!MultistepInitMenuWindowContinue())
+ return TRUE;
+ break;
+ case 4:
+ Menu_EraseScreen();
+ break;
+ case 5:
+ sub_80F1614();
+ break;
+ case 6:
+ if (sub_80F162C(1))
+ return TRUE;
+ break;
+ case 7:
+ LZ77UnCompWram(gUnknown_08E9FBA0, gUnknown_083DFEC4->unk934C);
+ break;
+ case 8:
+ DrawMonRibbonIcons();
+ break;
+ case 9:
+ sub_80F13FC();
+ break;
+ case 10:
+ LZ77UnCompVram(gPokenavRibbonView_Gfx, (void *)(VRAM + 0x8000));
+ break;
+ case 11:
+ LZ77UnCompVram(gUnknown_083E040C, (void *)(VRAM + 0x8200));
+ break;
+ case 12:
+ LoadPalette(gPokenavRibbonView_Pal, 0x20, 0x20);
+ LoadPalette(gUnknown_083E03A8, 0xF0, 0x20);
+ LoadPalette(gUnknown_083E3C60[0], 0x30, 0xA0);
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(gUnknown_083E03A8 + 0xF, 0xBF, 0x2);
+ break;
+ case 13:
+ sub_80F1438();
+ break;
+ case 14:
+ REG_BG2CNT = 0x1E02;
+ REG_BG3CNT = 0x170B;
+ REG_BLDCNT = 0;
+ gUnknown_083DFEC4->unkD160++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unkD160++;
+ return TRUE;
+}
+
+void DrawMonRibbonIcons(void)
+{
+ u16 i;
+ u16 offset;
+ u8 index, palette, tile;
+ u8 var0;
+
+ offset = 0x8B;
+ var0 = gUnknown_083DFEC4->unkBC8E - gUnknown_083DFEC4->unkBC8F;
+
+ for (i = 0; i < 8; i++)
+ CpuFill16(0x2000, &gUnknown_083DFEC4->unk934C[offset + i * 32], 0x24);
+
+ for (i = 0; i < var0; i++)
+ {
+ index = gUnknown_083DFEC4->unkBC4C[i];
+ palette = gPokenavRibbonsIconGfx[index][1] + 3;
+ tile = gPokenavRibbonsIconGfx[index][0] * 2 + 0x10;
+ gUnknown_083DFEC4->unk934C[offset] = (palette << 12) | tile;
+ gUnknown_083DFEC4->unk934C[offset + 1] = ((palette << 12) | 0x400) | tile;
+ gUnknown_083DFEC4->unk934C[offset + 0x20] = (palette << 12) | (tile + 1);
+ gUnknown_083DFEC4->unk934C[offset + 0x21] = (palette << 12) | 0x400 | (tile + 1);
+
+ if ((i + 1) % 9 == 0)
+ offset += 0x30;
+ else
+ offset += 2;
+ }
+
+ offset = 0x14B;
+ for (i = 0; i < gUnknown_083DFEC4->unkBC8F; i++)
+ {
+ index = gUnknown_083DFEC4->unkBC4C[var0 + i];
+ palette = gPokenavRibbonsIconGfx[index][1] + 3;
+ tile = gPokenavRibbonsIconGfx[index][0] * 2 + 0x10;
+ gUnknown_083DFEC4->unk934C[offset] = (palette << 12) | tile;
+ gUnknown_083DFEC4->unk934C[offset + 1] = ((palette << 12) | 0x400) | tile;
+ gUnknown_083DFEC4->unk934C[offset + 0x20] = (palette << 12) | (tile + 1);
+ gUnknown_083DFEC4->unk934C[offset + 0x21] = (palette << 12) | 0x400 | (tile + 1);
+
+ offset += 2;
+ }
+}
+
+void sub_80F13FC(void)
+{
+ u16 *src = gUnknown_083DFEC4->unk934C;
+ u16 *dest = (u16 *)(VRAM + 0xB800);
+ DmaCopy32(3, src, dest, 0x500);
+ gPlttBufferUnfaded[0] = *(gPokenavRibbonView_Pal + 14);
+}
+
+void sub_80F1438(void)
+{
+ Menu_PrintText(gUnknown_083DFEC4->unk8829[0], 13, 1);
+ sub_80F445C(gUnknown_083DFEC4->unk8788, gUnknown_083DFEC4->unk876E + 1);
+ Menu_PrintText(gUnknown_083DFEC4->unk8788, 1, 5);
+}
+
+void sub_80F1480(void)
+{
+ Menu_EraseWindowRect(12, 13, 27, 16);
+}
+
+// This is a fakematching function, due to a hardcoded access of gSaveBlock1.
+// Due to this hardcoded address access, gift ribbons do not properly display
+// their descriptions, since the hardcoded access is inside of the LinkBattleRecords
+// save data, rather than the giftRibbons array, which is almost certainly what the
+// intended access is.
+static void sub_80F1494(void)
+{
+ u8 *arr;
+ u8 *tileBuffer1 = &gUnknown_083DFEC8[0x800];
+ u8 *tileBuffer2 = &gUnknown_083DFEC8[0xA98];
+
+ if (gUnknown_083DFEC4->unkBC91 < 3)
+ {
+ gUnknown_020388B4 = gUnknown_083DFEC4->unkBC91 * 9 + gUnknown_083DFEC4->unkBC90;
+ gUnknown_020388B4 = gUnknown_083DFEC4->unkBC4C[gUnknown_020388B4];
+ AlignStringInMenuWindow(tileBuffer1, gRibbonDescriptions[gUnknown_020388B4][0], 128, 0);
+ AlignStringInMenuWindow(tileBuffer2, gRibbonDescriptions[gUnknown_020388B4][1], 128, 0);
+ }
+ else
+ {
+ gUnknown_020388B4 = gUnknown_083DFEC4->unkBC8E - gUnknown_083DFEC4->unkBC8F;
+ gUnknown_020388B4 = gUnknown_083DFEC4->unkBC4C[gUnknown_020388B4 + gUnknown_083DFEC4->unkBC90];
+
+ // FIXME!
+ arr = ((u8*)&gSaveBlock1);
+ asm("ldrh r1, [r5]\n\
+ add r0, r0, r1");
+ gUnknown_020388B4 = arr[0x30F7];
+ // The bug fix for this code is the following:
+ // gUnknown_020388B4 = gSaveBlock1.externalReservedData.giftRibbons[gUnknown_020388B4];
+ if (gUnknown_020388B4)
+ {
+ gUnknown_020388B4--;
+ AlignStringInMenuWindow(tileBuffer1, gGiftRibbonDescriptions[gUnknown_020388B4][0], 128, 0);
+ AlignStringInMenuWindow(tileBuffer2, gGiftRibbonDescriptions[gUnknown_020388B4][1], 128, 0);
+ }
+ else
+ {
+ AlignStringInMenuWindow(tileBuffer1, gEmptyString_81E72B0, 128, 0);
+ AlignStringInMenuWindow(tileBuffer2, gEmptyString_81E72B0, 128, 0);
+ }
+ }
+
+ Menu_PrintText(tileBuffer1, 12, 13);
+ Menu_PrintText(tileBuffer2, 12, 15);
+}
+
+static void sub_80F15A8(void)
+{
+ u8 *buffer;
+ Menu_EraseWindowRect(12, 13, 27, 16);
+ buffer = StringCopy(gUnknown_083DFEC4->unk8788, gOtherText_Ribbons);
+ buffer[0] = CHAR_SPACE;
+ buffer++;
+ buffer = ConvertIntToDecimalStringN(
+ buffer,
+ gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk0,
+ STR_CONV_MODE_LEFT_ALIGN,
+ 2);
+ buffer[0] = EOS;
+ Menu_PrintText(gUnknown_083DFEC4->unk8788, 12, 13);
+}
+
+void sub_80F1614(void)
+{
+ gUnknown_083DFEC4->unk8764 = 0;
+}
+
+bool8 sub_80F162C(u8 arg0)
+{
+ switch (gUnknown_083DFEC4->unk8764)
+ {
+ case 0:
+ break;
+ case 1:
+ LZ77UnCompVram(gUnknown_08E9FF58, (void *)(VRAM + 0xE800));
+ break;
+ case 2:
+ DmaCopy16Defvars(3, gPokenavRibbonPokeView_Gfx, (void *)(VRAM + 0xE000), 0xE0);
+ break;
+ case 3:
+ if (!arg0)
+ LoadPalette(gUnknown_083E0124, 0xD0, 0x20);
+ else
+ LoadPalette(gUnknown_083E0144, 0xD0, 0x20);
+
+ gUnknown_083DFEC4->unk8766 = -80;
+ REG_BG0CNT = 0x1D0D;
+ gUnknown_083DFEC4->unk8764++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk8764++;
+ return TRUE;
+}
+
+bool8 sub_80F170C(void)
+{
+ gUnknown_083DFEC4->unk8766 += 0x10;
+ if (gUnknown_083DFEC4->unk8766 > 0)
+ gUnknown_083DFEC4->unk8766 = 0;
+
+ return gUnknown_083DFEC4->unk8766 != 0;
+}
+
+bool8 sub_80F173C(void)
+{
+ gUnknown_083DFEC4->unk8766 -= 0x10;
+ if (gUnknown_083DFEC4->unk8766 < -0x50)
+ gUnknown_083DFEC4->unk8766 = -0x50;
+
+ return gUnknown_083DFEC4->unk8766 != -0x50;
+}
+
+bool8 sub_80F1778(void)
+{
+ switch (gUnknown_083DFEC4->unkD160)
+ {
+ case 0:
+ sub_80EEDE8();
+ gUnknown_083DFEC4->unkD162 = 2;
+ break;
+ case 1:
+ sub_80F1614();
+ break;
+ case 2:
+ if (sub_80F162C(0))
+ return TRUE;
+ break;
+ case 3:
+ LZ77UnCompVram(gPokenavConditionView_Gfx, (void *)(VRAM + 0x5000));
+ break;
+ case 4:
+ LZ77UnCompVram(gUnknown_08E9AC4C, (void *)(VRAM + 0xF000));
+ LoadPalette(gPokenavConditionMenu2_Pal, 0x20, 0x20);
+ break;
+ case 5:
+ sub_8095C8C((void *)VRAM + 0xF000, 0, 13, gUnknown_083E01F4, 0, 0, 12, 4, 12);
+ break;
+ case 6:
+ LZ77UnCompVram(gUnknown_08E9FEB4, (void *)(VRAM + 0xB800));
+ break;
+ case 7:
+ LoadPalette(gUnknown_083E0254, 0x30, 0x20);
+ LoadPalette(gUnknownPalette_81E6692, 0xB0, 0x20);
+ LoadPalette(&gPokenavConditionMenu2_Pal[2], 0xB1, 0x2);
+ LoadPalette(&gPokenavConditionMenu2_Pal[16], 0xB5, 0x2);
+ LoadPalette(&gPokenavConditionMenu2_Pal[30], 0xBF, 0x2);
+ sub_80F01A4();
+ break;
+ case 8:
+ sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
+ break;
+ case 9:
+ REG_BG3CNT = 0x1E03;
+ REG_BG2CNT = 0x1702;
+ REG_BLDCNT = 0x844;
+ REG_BLDALPHA = 0x40B;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unkD160++;
+ return TRUE;
+}
+
+void sub_80F1934(void)
+{
+ u8 *buffer = gUnknown_083DFEC4->unk8788;
+ if (gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk4)
+ {
+ u8 nature = GetNature(&gPlayerParty[sub_8137124(gUnknown_083DFEC4->unk87DC)]);
+ buffer = StringCopy(buffer, gOtherText_Nature2);
+ AlignStringInMenuWindow(buffer, gNatureNames[nature], 87, 0);
+ }
+ else
+ {
+ AlignStringInMenuWindow(buffer, gEmptyString_81E72B0, 87, 0);
+ }
+
+ Menu_PrintTextPixelCoords(gUnknown_083DFEC4->unk8788, 1, 112, 1);
+}
+
+static void sub_80F19DC(u8 *text)
+{
+ while (text[0] != EOS)
+ {
+ if (text[0] == EXT_CTRL_CODE_BEGIN && text[1] == CHAR_SPACE)
+ {
+ text[0] = EOS;
+ break;
+ }
+
+ text++;
+ }
+}
+
+static void sub_80F19FC(void)
+{
+ // FIXME r4/r5 swapped
+ register u8 *ptr asm("r5") = gUnknown_020388B0;
+ if (ptr[0] == 1)
+ {
+ const u8 *landmarkName = GetLandmarkName(
+ gUnknown_083DFEC4->regionMap.mapSectionId,
+ gUnknown_083DFEC4->regionMap.everGrandeCityArea,
+ ptr[1]);
+
+ if (landmarkName)
+ {
+ sub_8072A18(landmarkName, 0x70, 4 * (ptr[1] * 4 + 12), 0x78, 1);
+ if (++ptr[1] != 4)
+ return;
+ }
+
+ Menu_BlankWindowRect(14, ptr[1] * 2 + 6, 28, 15);
+ ptr[0] = 0;
+ }
+}
+
+static void sub_80F1A74(void)
+{
+ gUnknown_020388B0[0] = 0;
+}
+
+static void sub_80F1A80(void)
+{
+ gUnknown_020388B0[0] = 1;
+ gUnknown_020388B0[1] = 0;
+}
+
+static void sub_80F1A90(void)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (gUnknown_083DFEC4->unk6DAC == 0)
+ while (sub_80F1AC4());
+}
+
+static bool8 sub_80F1AC4(void)
+{
+ u16 i, j;
+
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ for (i = 0; i < 6; i++)
+ {
+ for (j = 0; j < 4; j++)
+ gUnknown_083DFEC4->unk320[i][j] = NULL;
+ }
+
+ gUnknown_083DFEC4->unk311 = 0;
+ break;
+ case 1:
+ LZ77UnCompWram(gPokenavMenuOptions_Gfx, gUnknown_083DFEC4->unk388);
+ break;
+ case 2:
+ LZ77UnCompWram(gPokenavConditionMenu_Gfx, gUnknown_083DFEC4->unk1788);
+ break;
+ case 3:
+ LZ77UnCompWram(gPokenavConditionSearch_Gfx, gUnknown_083DFEC4->unk2388);
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+
+static void sub_80F1B8C(u8 arg0)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (gUnknown_083DFEC4->unk6DAC == 0)
+ while (sub_80F1BC8(arg0));
+}
+
+#ifdef NONMATCHING
+// very close, but for some reason, (i + 1) is being stored in sp[0x10]
+static bool8 sub_80F1BC8(u8 arg0)
+{
+ u16 i, j;
+ u16 animNum;
+ u16 topOffset;
+ u16 height;
+ u16 middle;
+ u8 spriteId;
+
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ sub_80F2458(arg0);
+ break;
+ case 1:
+ sub_80F2514(arg0);
+ break;
+ case 2:
+ switch (arg0)
+ {
+ case 0:
+ topOffset = 42;
+ height = 20;
+ gUnknown_083DFEC4->unk30E = 5;
+ break;
+ case 1:
+ topOffset = 56;
+ height = 20;
+ gUnknown_083DFEC4->unk30E = 3;
+ break;
+ case 2:
+ topOffset = 40;
+ height = 16;
+ gUnknown_083DFEC4->unk30E = 6;
+ break;
+ default:
+ return FALSE;
+ }
+
+ animNum = 0;
+ for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
+ {
+ middle = (height * i) + topOffset - 8;
+ gUnknown_083DFEC4->unk314[i] = (middle << 8) | (middle + 0x11);
+ if (!arg0)
+ {
+ if (gUnknown_083DFEC4->unk6DB2[i] == 0)
+ {
+ for (j = 0; j < 4; j++)
+ gUnknown_083DFEC4->unk320[i][j] = NULL;
+ continue;
+ }
+ else
+ {
+ animNum = (gUnknown_083DFEC4->unk6DB2[i] - 1) * 4;
+ }
+ }
+
+ for (j = 0; j < 4; j++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E4454, j * 32 + 256, (height * i) + topOffset, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk320[i][j] = &gSprites[spriteId];
+ gUnknown_083DFEC4->unk320[i][j]->data[0] = i;
+ gUnknown_083DFEC4->unk320[i][j]->data[1] = j;
+ gUnknown_083DFEC4->unk320[i][j]->data[2] = j * 32 + 152;
+ gUnknown_083DFEC4->unk320[i][j]->data[3] = j * 32 + 256;
+ StartSpriteAnim(gUnknown_083DFEC4->unk320[i][j], animNum++);
+
+ if ((arg0 == 2 || arg0 == 0) && i > 2)
+ gUnknown_083DFEC4->unk320[i][j]->oam.paletteNum = IndexOfSpritePaletteTag(0x1);
+ }
+ }
+ }
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+#else
+NAKED
+static bool8 sub_80F1BC8(u8 arg0)
+{
+ 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 r0, 24\n\
+ mov r9, r0\n\
+ ldr r1, _080F1BF4 @ =gUnknown_083DFEC4\n\
+ ldr r2, [r1]\n\
+ ldr r3, _080F1BF8 @ =0x00000306\n\
+ adds r0, r2, r3\n\
+ ldrh r0, [r0]\n\
+ adds r3, r1, 0\n\
+ cmp r0, 0x1\n\
+ beq _080F1C0A\n\
+ cmp r0, 0x1\n\
+ bgt _080F1BFC\n\
+ cmp r0, 0\n\
+ beq _080F1C02\n\
+ b _080F1DC4\n\
.align 2, 0\n\
-_080F0530: .4byte 0x0600e800\n\
-_080F0534: .4byte gUnknown_08E9FE54\n\
-_080F0538: .4byte gUnknown_08E9FD64\n\
-_080F053C:\n\
- ldr r0, _080F0548 @ =gUnknown_083E0354\n\
- ldr r1, _080F054C @ =0x06005000\n\
- bl LZ77UnCompVram\n\
- b _080F0618\n\
+_080F1BF4: .4byte gUnknown_083DFEC4\n\
+_080F1BF8: .4byte 0x00000306\n\
+_080F1BFC:\n\
+ cmp r0, 0x2\n\
+ beq _080F1C12\n\
+ b _080F1DC4\n\
+_080F1C02:\n\
+ mov r0, r9\n\
+ bl sub_80F2458\n\
+ b _080F1DC8\n\
+_080F1C0A:\n\
+ mov r0, r9\n\
+ bl sub_80F2514\n\
+ b _080F1DC8\n\
+_080F1C12:\n\
+ mov r4, r9\n\
+ cmp r4, 0x1\n\
+ beq _080F1C40\n\
+ cmp r4, 0x1\n\
+ bgt _080F1C22\n\
+ cmp r4, 0\n\
+ beq _080F1C2A\n\
+ b _080F1DC4\n\
+_080F1C22:\n\
+ mov r5, r9\n\
+ cmp r5, 0x2\n\
+ beq _080F1C54\n\
+ b _080F1DC4\n\
+_080F1C2A:\n\
+ movs r0, 0x2A\n\
+ str r0, [sp, 0x4]\n\
+ movs r1, 0x14\n\
+ str r1, [sp, 0x8]\n\
+ ldr r4, _080F1C3C @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x5\n\
+ b _080F1C62\n\
.align 2, 0\n\
-_080F0548: .4byte gUnknown_083E0354\n\
-_080F054C: .4byte 0x06005000\n\
-_080F0550:\n\
- ldr r2, _080F0568 @ =0x0600f800\n\
- add r1, sp, 0x14\n\
- movs r0, 0\n\
- strh r0, [r1]\n\
- ldr r0, _080F056C @ =0x040000d4\n\
- str r1, [r0]\n\
- str r2, [r0, 0x4]\n\
- ldr r1, _080F0570 @ =0x81000400\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- b _080F0618\n\
+_080F1C3C: .4byte 0x0000030e\n\
+_080F1C40:\n\
+ movs r5, 0x38\n\
+ str r5, [sp, 0x4]\n\
+ movs r0, 0x14\n\
+ str r0, [sp, 0x8]\n\
+ ldr r4, _080F1C50 @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x3\n\
+ b _080F1C62\n\
.align 2, 0\n\
-_080F0568: .4byte 0x0600f800\n\
-_080F056C: .4byte 0x040000d4\n\
-_080F0570: .4byte 0x81000400\n\
-_080F0574:\n\
- bl sub_80F0900\n\
- b _080F0618\n\
-_080F057A:\n\
- bl sub_80F0944\n\
+_080F1C50: .4byte 0x0000030e\n\
+_080F1C54:\n\
+ movs r5, 0x28\n\
+ str r5, [sp, 0x4]\n\
+ movs r0, 0x10\n\
+ str r0, [sp, 0x8]\n\
+ ldr r4, _080F1CDC @ =0x0000030e\n\
+ adds r1, r2, r4\n\
+ movs r0, 0x6\n\
+_080F1C62:\n\
+ strb r0, [r1]\n\
+ movs r5, 0\n\
+ str r5, [sp]\n\
+ mov r8, r5\n\
+ adds r1, r3, 0\n\
+ ldr r0, [r1]\n\
+ ldr r2, _080F1CDC @ =0x0000030e\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r8, r0\n\
+ blt _080F1C7E\n\
+ b _080F1DC8\n\
+_080F1C7E:\n\
+ ldr r4, [sp, 0x8]\n\
+ mov r3, r8\n\
+ muls r3, r4\n\
+ ldr r5, [sp, 0x4]\n\
+ adds r0, r5, r3\n\
+ subs r0, 0x8\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r4, [r1]\n\
+ mov r2, r8\n\
+ lsls r1, r2, 1\n\
+ movs r5, 0xC5\n\
+ lsls r5, 2\n\
+ adds r2, r4, r5\n\
+ adds r2, r1\n\
+ lsls r1, r0, 8\n\
+ adds r0, 0x11\n\
+ orrs r1, r0\n\
+ strh r1, [r2]\n\
+ mov r0, r9\n\
cmp r0, 0\n\
- beq _080F0618\n\
- b _080F0626\n\
-_080F0586:\n\
- ldr r0, _080F059C @ =gUnknown_083DFEC4\n\
- ldr r4, [r0]\n\
- ldr r1, _080F05A0 @ =0x000087ca\n\
+ bne _080F1CF2\n\
+ ldr r1, _080F1CE0 @ =0x00006db2\n\
adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x2\n\
- beq _080F05A4\n\
- bl ShowMapNamePopUpWindow\n\
- b _080F0618\n\
- .align 2, 0\n\
-_080F059C: .4byte gUnknown_083DFEC4\n\
-_080F05A0: .4byte 0x000087ca\n\
-_080F05A4:\n\
- movs r0, 0\n\
- bl sub_80F081C\n\
- ldr r2, _080F05B8 @ =0x0000876e\n\
- adds r0, r4, r2\n\
- ldrb r0, [r0]\n\
- bl sub_80F0FFC\n\
- b _080F0618\n\
+ mov r2, r8\n\
+ adds r1, r0, r2\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _080F1CE8\n\
+ movs r5, 0\n\
+ ldr r0, _080F1CE4 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r0]\n\
+ lsls r2, 4\n\
+ movs r3, 0xC8\n\
+ lsls r3, 2\n\
+ adds r1, r0, r3\n\
+ movs r3, 0\n\
+_080F1CC8:\n\
+ lsls r0, r5, 2\n\
+ adds r0, r2\n\
+ adds r0, r1, r0\n\
+ str r3, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x3\n\
+ bls _080F1CC8\n\
+ b _080F1D92\n\
.align 2, 0\n\
-_080F05B8: .4byte 0x0000876e\n\
-_080F05BC:\n\
- ldr r1, _080F0600 @ =REG_BG2CNT\n\
- ldr r3, _080F0604 @ =0x00001d0a\n\
- adds r0, r3, 0\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- adds r3, 0xF9\n\
- adds r0, r3, 0\n\
- strh r0, [r1]\n\
- subs r1, 0x6\n\
- adds r3, 0xFE\n\
- adds r0, r3, 0\n\
- strh r0, [r1]\n\
- adds r1, 0x16\n\
- movs r0, 0xF8\n\
- strh r0, [r1]\n\
- ldr r1, [r2]\n\
- ldr r0, _080F0608 @ =0x00008776\n\
- adds r2, r1, r0\n\
+_080F1CDC: .4byte 0x0000030e\n\
+_080F1CE0: .4byte 0x00006db2\n\
+_080F1CE4: .4byte gUnknown_083DFEC4\n\
+_080F1CE8:\n\
+ ldrb r0, [r1]\n\
+ subs r0, 0x1\n\
+ lsls r0, 18\n\
+ lsrs r0, 16\n\
+ str r0, [sp]\n\
+_080F1CF2:\n\
+ movs r5, 0\n\
+ ldr r4, [sp, 0x4]\n\
+ adds r0, r4, r3\n\
+ lsls r0, 16\n\
+ mov r10, r0\n\
+_080F1CFC:\n\
+ lsls r6, r5, 5\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ adds r7, r6, r0\n\
+ lsls r1, r7, 16\n\
+ asrs r1, 16\n\
+ ldr r0, _080F1DB4 @ =gSpriteTemplate_83E4454\n\
+ mov r3, r10\n\
+ asrs r2, r3, 16\n\
movs r3, 0\n\
- movs r0, 0xF8\n\
- strh r0, [r2]\n\
- ldr r2, _080F060C @ =0x00008778\n\
- adds r0, r1, r2\n\
- strh r3, [r0]\n\
- ldr r0, _080F0610 @ =REG_BLDCNT\n\
- strh r3, [r0]\n\
- ldr r3, _080F0614 @ =0x0000d160\n\
- adds r1, r3\n\
- ldrh r0, [r1]\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ cmp r3, 0x40\n\
+ beq _080F1DC4\n\
+ ldr r0, _080F1DB8 @ =gUnknown_083DFEC4\n\
+ ldr r2, [r0]\n\
+ lsls r1, r5, 2\n\
+ mov r4, r8\n\
+ lsls r0, r4, 4\n\
+ adds r1, r0\n\
+ movs r0, 0xC8\n\
+ lsls r0, 2\n\
+ adds r2, r0\n\
+ adds r4, r2, r1\n\
+ lsls r0, r3, 4\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ ldr r1, _080F1DBC @ =gSprites\n\
+ adds r0, r1\n\
+ str r0, [r4]\n\
+ mov r1, r8\n\
+ strh r1, [r0, 0x2E]\n\
+ ldr r0, [r4]\n\
+ strh r5, [r0, 0x30]\n\
+ ldr r1, [r4]\n\
+ adds r0, r6, 0\n\
+ adds r0, 0x98\n\
+ strh r0, [r1, 0x32]\n\
+ ldr r0, [r4]\n\
+ strh r7, [r0, 0x34]\n\
+ ldr r0, [r4]\n\
+ ldr r1, [sp]\n\
+ adds r2, r1, 0x1\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ str r2, [sp]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ bl StartSpriteAnim\n\
+ mov r2, r9\n\
+ cmp r2, 0x2\n\
+ beq _080F1D6E\n\
+ cmp r2, 0\n\
+ bne _080F1D88\n\
+_080F1D6E:\n\
+ mov r3, r8\n\
+ cmp r3, 0x2\n\
+ bls _080F1D88\n\
+ movs r0, 0x1\n\
+ bl IndexOfSpritePaletteTag\n\
+ ldr r3, [r4]\n\
+ lsls r0, 4\n\
+ ldrb r2, [r3, 0x5]\n\
+ movs r1, 0xF\n\
+ ands r1, r2\n\
+ orrs r1, r0\n\
+ strb r1, [r3, 0x5]\n\
+_080F1D88:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x3\n\
+ bls _080F1CFC\n\
+_080F1D92:\n\
+ mov r0, r8\n\
adds r0, 0x1\n\
- strh r0, [r1]\n\
-_080F05FA:\n\
- movs r0, 0\n\
- b _080F0628\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ ldr r1, _080F1DB8 @ =gUnknown_083DFEC4\n\
+ ldr r0, [r1]\n\
+ ldr r4, _080F1DC0 @ =0x0000030e\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ cmp r8, r0\n\
+ bge _080F1DB0\n\
+ b _080F1C7E\n\
+_080F1DB0:\n\
+ b _080F1DC8\n\
.align 2, 0\n\
-_080F0600: .4byte REG_BG2CNT\n\
-_080F0604: .4byte 0x00001d0a\n\
-_080F0608: .4byte 0x00008776\n\
-_080F060C: .4byte 0x00008778\n\
-_080F0610: .4byte REG_BLDCNT\n\
-_080F0614: .4byte 0x0000d160\n\
-_080F0618:\n\
- ldr r0, _080F0634 @ =gUnknown_083DFEC4\n\
+_080F1DB4: .4byte gSpriteTemplate_83E4454\n\
+_080F1DB8: .4byte gUnknown_083DFEC4\n\
+_080F1DBC: .4byte gSprites\n\
+_080F1DC0: .4byte 0x0000030e\n\
+_080F1DC4:\n\
+ movs r0, 0\n\
+ b _080F1DD8\n\
+_080F1DC8:\n\
+ ldr r0, _080F1DE8 @ =gUnknown_083DFEC4\n\
ldr r1, [r0]\n\
- ldr r0, _080F0638 @ =0x00000306\n\
- adds r1, r0\n\
+ ldr r5, _080F1DEC @ =0x00000306\n\
+ adds r1, r5\n\
ldrh r0, [r1]\n\
adds r0, 0x1\n\
strh r0, [r1]\n\
-_080F0626:\n\
movs r0, 0x1\n\
-_080F0628:\n\
- add sp, 0x18\n\
- pop {r3}\n\
+_080F1DD8:\n\
+ add sp, 0xC\n\
+ pop {r3-r5}\n\
mov r8, r3\n\
- pop {r4-r6}\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
pop {r1}\n\
bx r1\n\
.align 2, 0\n\
-_080F0634: .4byte gUnknown_083DFEC4\n\
-_080F0638: .4byte 0x00000306\n\
+_080F1DE8: .4byte gUnknown_083DFEC4\n\
+_080F1DEC: .4byte 0x00000306\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+static void sub_80F1DF0(void)
+{
+ u16 i, j;
+ for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (gUnknown_083DFEC4->unk320[i][j])
+ gUnknown_083DFEC4->unk320[i][j]->callback = sub_80F2218;
+ }
+ }
+
+ PlaySE(SE_WIN_OPEN);
+}
+
+static bool8 sub_80F1E50(void)
+{
+ if (sub_80F22F8())
+ {
+ sub_80F2108();
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+static bool8 sub_80F1E6C(void)
+{
+ return !sub_80F22F8();
+}
+
+static void sub_80F1E84(void)
+{
+ u16 i, j;
+
+ gUnknown_083DFEC4->unk30F = 0;
+ sub_80F2148();
+ for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
+ {
+ if (i != gUnknown_083DFEC4->unk6DAD)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ if (gUnknown_083DFEC4->unk320[i][j])
+ gUnknown_083DFEC4->unk320[i][j]->callback = sub_80F2240;
+ }
+ }
+ }
+}
+
+static bool8 sub_80F1F10(void)
+{
+ u16 j;
+
+ switch (gUnknown_083DFEC4->unk30F)
+ {
+ case 0:
+ if (sub_80F2360())
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ sprite->affineAnims = gSpriteAffineAnimTable_83E4450;
+ InitSpriteAffineAnim(sprite);
+ sprite->data[4] = j * 4 - 6;
+ sprite->data[4] /= 2;
+ sprite->data[5] = sprite->data[4] * 8;
+ sprite->callback = sub_80F2240;
+ }
+
+ sub_80F2170();
+ gUnknown_083DFEC4->unk30F++;
+ }
+ break;
+ case 1:
+ if (sub_80F23C8())
+ {
+ sub_80F21F8();
+ FreeSpriteTilesByTag(0x0);
+ FreeSpritePaletteByTag(0x0);
+ FreeSpritePaletteByTag(0x1);
+ return FALSE;
+ }
+ break;
+ }
+
+ return TRUE;
+}
+
+static void sub_80F1FF0(void)
+{
+ if (gUnknown_083DFEC4->unk311 == 1)
+ {
+ REG_WIN0V = gUnknown_083DFEC4->unk314[gUnknown_083DFEC4->unk6DAD];
+ REG_BLDY = gSineTable[gUnknown_083DFEC4->unk312] >> 5;
+ gUnknown_083DFEC4->unk312 += 3;
+ gUnknown_083DFEC4->unk312 &= 0x7F;
+ }
+ else if (gUnknown_083DFEC4->unk311 == 2)
+ {
+ REG_BLDALPHA = gUnknown_083E42F8[gUnknown_083DFEC4->unk312];
+ if (gUnknown_083DFEC4->unk312 < 15)
+ gUnknown_083DFEC4->unk312++;
+ }
+}
+
+static void sub_80F208C(void)
+{
+ sub_80F2148();
+}
+
+static void sub_80F2098(void)
+{
+ REG_WIN0H = 0x77F0;
+ REG_WIN0V = gUnknown_083DFEC4->unk314[gUnknown_083DFEC4->unk6DAD];
+ REG_WININ = 0x3F;
+ REG_WINOUT = 0x1F;
+ REG_DISPCNT |= DISPCNT_WIN0_ON;
+}
+
+static void sub_80F20F4(void)
+{
+ REG_DISPCNT &= ~DISPCNT_WIN0_ON;
+}
+
+static void sub_80F2108(void)
+{
+ if (!gUnknown_083DFEC4->unk311)
+ {
+ gUnknown_083DFEC4->unk311 = 1;
+ gUnknown_083DFEC4->unk312 = 0;
+ REG_BLDCNT = 0x90;
+ REG_BLDY = 0;
+ sub_80F2098();
+ }
+}
+
+static void sub_80F2148(void)
+{
+ gUnknown_083DFEC4->unk311 = 0;
+ REG_BLDCNT = 0;
+ sub_80F20F4();
+}
+
+static void sub_80F2170(void)
+{
+ u16 j;
+
+ if (!gUnknown_083DFEC4->unk311)
+ {
+ sub_80F20F4();
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ }
+
+ gUnknown_083DFEC4->unk311 = 2;
+ gUnknown_083DFEC4->unk312 = 0;
+ REG_BLDCNT = 0x3F40;
+ REG_BLDALPHA = 0x10;
+ }
+}
+
+static void sub_80F21F8()
+{
+ gUnknown_083DFEC4->unk311 = 0;
+ REG_BLDCNT = 0;
+}
+
+static void sub_80F2218(struct Sprite *sprite)
+{
+ sprite->pos1.x -= 8;
+ if (sprite->pos1.x <= sprite->data[2])
+ {
+ sprite->pos1.x = sprite->data[2];
+ sprite->callback = sub_80F22B0;
+ }
+}
+
+static void sub_80F2240(struct Sprite *sprite)
+{
+ if (sprite->data[0] == gUnknown_083DFEC4->unk6DAD)
+ {
+ if (sprite->data[5])
+ {
+ sprite->pos1.x += sprite->data[4];
+ sprite->data[5] -= sprite->data[4];
+ }
+
+ if (sprite->affineAnimEnded)
+ sub_80F240C(sprite);
+ }
+ else
+ {
+ sprite->pos1.x += 8;
+ if (sprite->pos1.x >= sprite->data[3])
+ sub_80F240C(sprite);
+ }
+}
+
+static void sub_80F22B0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == gUnknown_083DFEC4->unk6DAD)
+ {
+ if (sprite->pos2.x > -16)
+ sprite->pos2.x -= 4;
+ }
+ else
+ {
+ if (sprite->pos2.x < 0)
+ sprite->pos2.x += 4;
+ }
+}
+
+static bool8 sub_80F22F8(void)
+{
+ u16 i, j;
+
+ for (i = 0; i < gUnknown_083DFEC4->unk6DAE; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[i][j];
+ if (!sprite)
+ return TRUE;
+
+ if (sprite->pos2.x != 0 && sprite->pos2.x != -16)
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_80F2360(void)
+{
+ u16 i, j;
+
+ for (i = 0; i < gUnknown_083DFEC4->unk30E; i++)
+ {
+ if (i != gUnknown_083DFEC4->unk6DAD)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[i][j];
+ if (sprite)
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_80F23C8(void)
+{
+ u16 j;
+
+ for (j = 0; j < 4; j++)
+ {
+ struct Sprite *sprite = gUnknown_083DFEC4->unk320[gUnknown_083DFEC4->unk6DAD][j];
+ if (sprite)
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void sub_80F240C(struct Sprite *sprite)
+{
+ gUnknown_083DFEC4->unk320[sprite->data[0]][sprite->data[1]] = NULL;
+ if (sprite->affineAnimEnded)
+ FreeOamMatrix(sprite->oam.matrixNum);
+
+ DestroySprite(sprite);
+}
+
+static void sub_80F2458(u8 arg0)
+{
+ switch (arg0)
+ {
+ case 0:
+ gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk388;
+ gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk388);
+ gUnknown_083DFEC4->unk380.tag = 0x0;
+ break;
+ case 1:
+ gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk1788;
+ gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk1788);
+ gUnknown_083DFEC4->unk380.tag = 0x0;
+ break;
+ case 2:
+ gUnknown_083DFEC4->unk380.data = gUnknown_083DFEC4->unk2388;
+ gUnknown_083DFEC4->unk380.size = sizeof(gUnknown_083DFEC4->unk2388);
+ gUnknown_083DFEC4->unk380.tag = 0x0;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpriteSheet(&gUnknown_083DFEC4->unk380);
+}
+
+static void sub_80F2514(u8 arg0)
+{
+ struct SpritePalette spritePalette;
+
+ switch (arg0)
+ {
+ case 0:
+ spritePalette.data = gPokenavMenuOptions1_Pal;
+ spritePalette.tag = 0;
+ LoadSpritePalette(&spritePalette);
+ spritePalette.data = gPokenavMenuOptions2_Pal;
+ spritePalette.tag = 0x1;
+ break;
+ case 1:
+ spritePalette.data = gPokenavConditionMenu_Pal;
+ spritePalette.tag = 0x0;
+ break;
+ case 2:
+ spritePalette.data = gPokenavCondition6_Pal;
+ spritePalette.tag = 0;
+ LoadSpritePalette(&spritePalette);
+ spritePalette.data = gPokenavCondition7_Pal;
+ spritePalette.tag = 0x1;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpritePalette(&spritePalette);
+}
+
+static void sub_80F2598(void)
+{
+ u8 spriteId;
+
+ gUnknown_083DFEC4->unk6D9C = NULL;
+ if (DoesSomeoneWantRematchIn(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) == TRUE)
+ {
+ LoadSpriteSheet(&gSpriteSheet_PokenavBlueLight);
+ LoadSpritePalette(&gSpritePalette_PokenavBlueLight);
+ spriteId = CreateSprite(&gSpriteTemplate_83E4484, 12, 96, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk6D9C = &gSprites[spriteId];
+ }
+ else
+ {
+ FreeSpriteTilesByTag(0x19);
+ FreeSpritePaletteByTag(0x11);
+ }
+ }
+}
+
+static void sub_80F2620(void)
+{
+ if (gUnknown_083DFEC4->unk6D9C)
+ {
+ DestroySprite(gUnknown_083DFEC4->unk6D9C);
+ FreeSpriteTilesByTag(0x19);
+ FreeSpritePaletteByTag(0x11);
+ gUnknown_083DFEC4->unk6D9C = NULL;
+ }
+}
+
+void sub_80F2654(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 6)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+}
+
+void sub_80F2688(void)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while(sub_80F26BC());
+}
+
+static bool8 sub_80F26BC(void)
+{
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ LZ77UnCompWram(gPokenavMainMenu_Gfx, gUnknown_083DFEC4->unk3B98);
+ break;
+ case 1:
+ LZ77UnCompWram(gPokenavConditionMenuHeader_Gfx, gUnknown_083DFEC4->unk4198);
+ break;
+ case 2:
+ LZ77UnCompWram(gPokenavRibbonsHeader_Gfx, gUnknown_083DFEC4->unk4D98);
+ break;
+ case 3:
+ LZ77UnCompWram(gPokenavHoennMapHeader_Gfx, gUnknown_083DFEC4->unk5398);
+ break;
+ case 4:
+ LZ77UnCompWram(gPokenavConditionMenuOptions_Gfx, gUnknown_083DFEC4->unk5F98);
+ break;
+ case 5:
+ LZ77UnCompWram(gPokenavConditionMenuOptions2_Gfx, gUnknown_083DFEC4->unk6798);
+ break;
+ case 6:
+ LZ77UnCompWram(gPokenavTrainersEyesHeader_Gfx, gUnknown_083DFEC4->unk4798);
+ break;
+ case 7:
+ LoadSpritePalettes(gUnknown_083E449C);
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+
+static void sub_80F27DC(u8 arg0)
+{
+ struct SpriteSheet spriteSheet;
+
+ switch (arg0)
+ {
+ case 0:
+ spriteSheet.data = gUnknown_083DFEC4->unk3B98;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk3B98);
+ spriteSheet.tag = 0x1;
+ break;
+ case 1:
+ spriteSheet.data = gUnknown_083DFEC4->unk4198;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4198);
+ spriteSheet.tag = 0x1;
+ break;
+ case 3:
+ spriteSheet.data = gUnknown_083DFEC4->unk4798;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4798);
+ spriteSheet.tag = 0x1;
+ break;
+ case 2:
+ spriteSheet.data = gUnknown_083DFEC4->unk4D98;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk4D98);
+ spriteSheet.tag = 0x1;
+ break;
+ case 4:
+ spriteSheet.data = gUnknown_083DFEC4->unk5398;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk5398);
+ spriteSheet.tag = 0x1;
+ break;
+ case 5:
+ spriteSheet.data = gUnknown_083DFEC4->unk5F98;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk5F98);
+ spriteSheet.tag = 0x2;
+ break;
+ case 6:
+ spriteSheet.data = gUnknown_083DFEC4->unk6198;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6198);
+ spriteSheet.tag = 0x2;
+ break;
+ case 8:
+ spriteSheet.data = gUnknown_083DFEC4->unk6398;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6398);
+ spriteSheet.tag = 0x2;
+ break;
+ case 9:
+ spriteSheet.data = gUnknown_083DFEC4->unk6598;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6598);
+ spriteSheet.tag = 0x2;
+ break;
+ case 11:
+ spriteSheet.data = gUnknown_083DFEC4->unk6998;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6998);
+ spriteSheet.tag = 0x2;
+ break;
+ case 10:
+ spriteSheet.data = gUnknown_083DFEC4->unk6798;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6798);
+ spriteSheet.tag = 0x2;
+ break;
+ case 7:
+ spriteSheet.data = gUnknown_083DFEC4->unk6B98;
+ spriteSheet.size = sizeof(gUnknown_083DFEC4->unk6B98);
+ spriteSheet.tag = 0x2;
+ break;
+ default:
+ return;
+ }
+
+ LoadSpriteSheet(&spriteSheet);
+}
+
+void sub_80F29B8(u8 arg0)
+{
+ u16 i;
+ s16 deltaX, endX, initialX;
+ u16 y;
+ s16 width;
+ struct Sprite **sprites;
+ const struct SpriteTemplate *spriteTemplate;
+ u8 spriteId;
+
+ spriteTemplate = NULL;
+ switch (arg0)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ initialX = -96;
+ y = 49 - gUnknown_083DFEC4->unk030C;
+ deltaX = 8;
+ endX = 32;
+ width = 64;
+ sprites = gUnknown_083DFEC4->unk3B88;
+ spriteTemplate = arg0 != 3 ? &gSpriteTemplate_83E44E0 : &gSpriteTemplate_83E44F8;
+ break;
+ case 4:
+ initialX = 272;
+ y = 49 - gUnknown_083DFEC4->unk030C;
+ deltaX = -8;
+ endX = 152;
+ width = 64;
+ spriteTemplate = &gSpriteTemplate_83E44E0;
+ sprites = gUnknown_083DFEC4->unk3B88;
+ break;
+ case 5:
+ case 6:
+ case 8:
+ case 9:
+ spriteTemplate = &gSpriteTemplate_83E4530;
+ // fall through
+ case 7:
+ case 10:
+ case 11:
+ if (spriteTemplate == NULL)
+ spriteTemplate = &gSpriteTemplate_83E4548;
+
+ initialX = -96;
+ y = 68 - gUnknown_083DFEC4->unk030C;
+ deltaX = 8;
+ endX = 16;
+ width = 32;
+ sprites = gUnknown_083DFEC4->unk3B90;
+ break;
+ default:
+ return;
+ }
+
+ for (i = 0; i < 2; i++)
+ {
+ spriteId = CreateSprite(spriteTemplate, i * width + initialX, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = deltaX;
+ gSprites[spriteId].data[1] = endX + i * width;
+ gSprites[spriteId].data[2] = i;
+ gSprites[spriteId].data[3] = arg0;
+ if (arg0 == 4 && i == 1)
+ {
+ int anim = !gUnknown_083DFEC4->regionMap.zoomed ? 1 : 2;
+ StartSpriteAnim(&gSprites[spriteId], anim);
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], i);
+ }
+
+ if (arg0 < 4 && i == 1)
+ {
+ gSprites[spriteId].oam.shape = ST_OAM_SQUARE;
+ gSprites[spriteId].oam.size = 2;
+ }
+
+ sprites[i] = &gSprites[spriteId];
+ }
+ }
+}
+
+#define sEndX sprite->data[1]
+void sub_80F2BBC(struct Sprite *sprite)
+{
+ s16 x = sprite->pos1.x;
+ sprite->pos1.x += sprite->data[0];
+ if ((x <= sEndX && sprite->pos1.x >= sEndX) || (x >= sEndX && sprite->pos1.x <= sEndX))
+ {
+ sprite->pos1.x = sEndX;
+ if (sprite->data[3] == 4 && sprite->data[2] == 1)
+ sprite->callback = sub_80F2C58;
+ else
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+#undef sEndX
+
+static void sub_80F2C14(struct Sprite *sprite)
+{
+ u16 right;
+
+ sprite->pos1.x -= sprite->data[0];
+ right = sprite->pos1.x + 32;
+ if (right > 304)
+ {
+ if (sprite->data[2] == 1)
+ {
+ if (sprite->data[3] < 5)
+ FreeSpriteTilesByTag(0x1);
+ else
+ FreeSpriteTilesByTag(0x2);
+ }
+
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_80F2C58(struct Sprite *sprite)
+{
+ int anim = !gUnknown_083DFEC4->regionMap.zoomed ? 1 : 2;
+ StartSpriteAnim(sprite, anim);
+}
+
+void sub_80F2C80(u8 arg0)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while (sub_80F2CBC(arg0));
+}
+
+bool8 sub_80F2CBC(u8 arg0)
+{
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ sub_80F27DC(arg0);
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+ case 1:
+ sub_80F29B8(arg0);
+ gUnknown_083DFEC4->unk306++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+}
+
+static void sub_80F2D04(u8 arg0)
+{
+ u16 i;
+
+ if (arg0 < 5)
+ {
+ for (i = 0; i < 2; i++)
+ gUnknown_083DFEC4->unk3B88[i]->callback = sub_80F2C14;
+ }
+ else
+ {
+ for (i = 0; i < 2; i++)
+ gUnknown_083DFEC4->unk3B90[i]->callback = sub_80F2C14;
+ }
+}
+
+static void sub_80F2D6C(u8 arg0)
+{
+ u16 i;
+
+ if (arg0 < 5)
+ {
+ FreeSpriteTilesByTag(0x1);
+ for (i = 0; i < 2; i++)
+ DestroySprite(gUnknown_083DFEC4->unk3B88[i]);
+ }
+ else
+ {
+ FreeSpriteTilesByTag(0x2);
+ for (i = 0; i < 2; i++)
+ DestroySprite(gUnknown_083DFEC4->unk3B90[i]);
+ }
+}
+
+static void sub_80F2DD8(void)
+{
+ CreateRegionMapCursor(7, 7);
+ CreateRegionMapPlayerIcon(8, 8);
+ sub_80FBF94();
+}
+
+static void sub_80F2DF4(void)
+{
+ FreeRegionMapIconResources();
+}
+
+void sub_80F2E00(struct Sprite *sprite)
+{
+ sprite->pos1.x = gUnknown_083DFEC4->unk8766 + 38;
+}
+
+static void sub_80F2E18(u8 arg0)
+{
+ u8 spriteId;
+ struct SpriteTemplate spriteTemplate;
+ struct SpritePalette spritePalette;
+ struct SpriteSheet spriteSheet;
+
+ if (!gUnknown_083DFEC4->unk8768)
+ {
+ spriteSheet = gUnknown_083E4568;
+ spriteTemplate = gSpriteTemplate_83E4570;
+ spritePalette = gUnknown_083E4588;
+
+ spriteSheet.data = gUnknown_083DFEC4->unkD1E4[arg0];
+ spritePalette.data = gUnknown_083DFEC4->unk0[arg0];
+ gUnknown_083DFEC4->unkD1DC = LoadSpritePalette(&spritePalette);
+ gUnknown_083DFEC4->unkD1DE = LoadSpriteSheet(&spriteSheet);
+
+ spriteId = CreateSprite(&spriteTemplate, 38, 104, 0);
+ if (spriteId == MAX_SPRITES)
+ {
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gUnknown_083DFEC4->unk8768 = NULL;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk8768 = &gSprites[spriteId];
+ gUnknown_083DFEC4->unkD1E0 = (void *)(VRAM + 0x10000) + gUnknown_083DFEC4->unkD1DE * 32;
+ gUnknown_083DFEC4->unkD1DC = gUnknown_083DFEC4->unkD1DC * 16 + 0x100;
+ }
+ }
+ else
+ {
+ DmaCopy16Defvars(3, gUnknown_083DFEC4->unkD1E4[arg0], gUnknown_083DFEC4->unkD1E0, 0x800);
+ LoadPalette(gUnknown_083DFEC4->unk0[arg0], gUnknown_083DFEC4->unkD1DC, 0x20);
+ }
+}
+
+void sub_80F2F48(void)
+{
+ if (gUnknown_083DFEC4->unk8768)
+ {
+ DestroySprite(gUnknown_083DFEC4->unk8768);
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gUnknown_083DFEC4->unk8768 = NULL;
+ }
+}
+
+void sub_80F2F7C(u8 arg0)
+{
+ sub_80F2E18(arg0);
+ gUnknown_083DFEC4->unkCED0 = gUnknown_083DFEC4->unk8768;
+ gUnknown_083DFEC4->unkCED0->callback = sub_80F2FEC;
+}
+
+static void sub_80F2FB0(void)
+{
+ if (gUnknown_083DFEC4->unkCED0)
+ {
+ DestroySprite(gUnknown_083DFEC4->unkCED0);
+ FreeSpriteTilesByTag(0x6);
+ FreeSpritePaletteByTag(0x6);
+ gUnknown_083DFEC4->unkCED0 = NULL;
+ gUnknown_083DFEC4->unk8768 = NULL;
+ }
+}
+
+static void sub_80F2FEC(struct Sprite *sprite)
+{
+ sprite->pos1.x = gUnknown_083DFEC4->unkD15A + 40;
+ sprite->pos1.y = 104;
+}
+
+static void sub_80F3008(u8 arg0)
+{
+ u16 i;
+ u8 spriteId;
+ struct SpritePalette spritePalette;
+ struct SpriteSheet spriteSheets[3];
+
+ memcpy(spriteSheets, gUnknown_083E4590, sizeof(gUnknown_083E4590));
+ spritePalette = gUnknown_083E45A8;
+ switch (arg0)
+ {
+ case 1:
+ case 2:
+ spritePalette.data = gUnknown_08E9F988;
+ break;
+ }
+
+ LoadSpriteSheets(spriteSheets);
+ LoadSpritePalette(&spritePalette);
+ spriteId = CreateSprite(&gSpriteTemplate_83E45B8, 95, 0, 0);
+ if (spriteId == MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk87CC = NULL;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk87CC = &gSprites[spriteId];
+ for (i = 0; i < 2; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E45F0, 168, i * 128 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk87D0[i] = &gSprites[spriteId];
+ gSprites[spriteId].invisible = 1;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].data[2] = i == 0 ? -1 : 1;
+ gSprites[spriteId].data[3] = i;
+ gSprites[spriteId].data[4] = 1;
+ StartSpriteAnim(&gSprites[spriteId], i);
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk87D0[i] = NULL;
+ }
+ }
+ }
+}
+
+static void sub_80F3130(void)
+{
+ u16 i;
+
+ if (gUnknown_083DFEC4->unk87CC)
+ {
+ DestroySprite(gUnknown_083DFEC4->unk87CC);
+ FreeSpriteTilesByTag(0x9);
+ FreeSpritePaletteByTag(0x9);
+ gUnknown_083DFEC4->unk87CC = NULL;
+ }
+
+ for (i = 0; i < 2; i++)
+ {
+ if (gUnknown_083DFEC4->unk87D0[i])
+ {
+ DestroySprite(gUnknown_083DFEC4->unk87D0[i]);
+ gUnknown_083DFEC4->unk87D0[i] = NULL;
+ }
+ }
+
+ FreeSpriteTilesByTag(0xA);
+}
+
+void sub_80F3190(struct Sprite *sprite)
+{
+ sprite->pos1.y = gUnknown_083DFEC4->unk876C * 16 + 16;
+}
+
+void sub_80F31AC(struct Sprite *sprite)
+{
+ if (gUnknown_083DFEC4->unk87C9)
+ {
+ if (sprite->data[4])
+ {
+ if (!sprite->data[3])
+ sprite->invisible = gUnknown_083DFEC4->unk8770 == 0;
+ else
+ sprite->invisible = gUnknown_083DFEC4->unk8772 == gUnknown_083DFEC4->unk8774;
+
+ sprite->data[4] = 0;
+ }
+
+ if (++sprite->data[0] > 4)
+ {
+ sprite->data[0] = 0;
+ if (++sprite->data[1] < 5)
+ {
+ sprite->pos2.y += sprite->data[2];
+ }
+ else
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.y = 0;
+ }
+ }
+ }
+}
+
+static void sub_80F3264(void)
+{
+ u16 i;
+
+ for (i = 0; i < 2; i++)
+ {
+ if (gUnknown_083DFEC4->unk87D0[i])
+ gUnknown_083DFEC4->unk87D0[i]->data[4] = 1;
+ }
+}
+
+static void sub_80F3294(u8 arg0)
+{
+ gUnknown_083DFEC4->unk87CC->invisible = arg0;
+ if (gUnknown_083DFEC4->unk87C9)
+ {
+ if (arg0 == 1)
+ {
+ gUnknown_083DFEC4->unk87D0[0]->invisible = arg0;
+ gUnknown_083DFEC4->unk87D0[1]->invisible = arg0;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk87D0[0]->data[4] = 1;
+ gUnknown_083DFEC4->unk87D0[1]->data[4] = 1;
+ }
+ }
+}
+
+void sub_80F3328(struct Sprite *sprite)
+{
+ if (sprite->data[0] == gUnknown_083DFEC4->unk87DC)
+ StartSpriteAnim(sprite, 0);
+ else
+ StartSpriteAnim(sprite, 1);
+}
+
+static void sub_80F3360(struct Sprite *sprite)
+{
+ if (gUnknown_083DFEC4->unk87DC == gUnknown_083DFEC4->unk87DA - 1)
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x4);
+ else
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x5);
+}
+
+void sub_80F33A8(void)
+{
+ u16 i;
+ u8 spriteId;
+ struct SpriteSheet spriteSheets[4];
+ struct SpritePalette spritePalettes[3];
+ struct SpriteTemplate spriteTemplate;
+
+ memcpy(spriteSheets, gUnknown_083E4628, sizeof(gUnknown_083E4628));
+ memcpy(spritePalettes, gUnknown_083E4648, sizeof(gUnknown_083E4648));
+ spriteTemplate = gSpriteTemplate_83E4660;
+ LoadSpriteSheets(spriteSheets);
+ LoadSpritePalettes(spritePalettes);
+
+ for (i = 0; i < gUnknown_083DFEC4->unk87DA - 1; i++)
+ {
+ spriteId = CreateSprite(&spriteTemplate, 226, i * 20 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk87E4[i] = &gSprites[spriteId];
+ gUnknown_083DFEC4->unk87E4[i]->data[0] = i;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk87E4[i] = NULL;
+ }
+ }
+
+ spriteTemplate.tileTag = 0x4;
+ spriteTemplate.callback = SpriteCallbackDummy;
+ for (; i < 6; i++)
+ {
+ spriteId = CreateSprite(&spriteTemplate, 230, i * 20 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk87E4[i] = &gSprites[spriteId];
+ gUnknown_083DFEC4->unk87E4[i]->oam.size = 0;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk87E4[i] = NULL;
+ }
+ }
+
+ spriteTemplate.tileTag = 0x5;
+ spriteTemplate.callback = sub_80F3360;
+ spriteId = CreateSprite(&spriteTemplate, 222, i * 20 + 8, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk87E4[i] = &gSprites[spriteId];
+ gUnknown_083DFEC4->unk87E4[i]->oam.shape = ST_OAM_H_RECTANGLE;
+ gUnknown_083DFEC4->unk87E4[i]->oam.size = 2;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk87E4[i] = NULL;
+ }
+}
+
+void sub_80F357C(void)
+{
+ u16 i;
+
+ for (i = 0; i < 7; i++)
+ {
+ if (gUnknown_083DFEC4->unk87E4[i])
+ {
+ DestroySprite(gUnknown_083DFEC4->unk87E4[i]);
+ gUnknown_083DFEC4->unk87E4[i] = NULL;
+ }
+ }
+}
+
+static void sub_80F35B4(void)
+{
+ struct Sprite *sprite;
+
+ gUnknown_083DFEC4->unk76B0.baseTileTag = 0x1C;
+ gUnknown_083DFEC4->unk76B0.basePaletteTag = 0x13;
+ sub_80F727C(&gUnknown_083DFEC4->unk76B0);
+ sub_80F7404();
+ sprite = sub_80F7920(27, 21, gUnknown_083E4678);
+ sprite->oam.priority = 3;
+ sprite->pos1.x = 192;
+ sprite->pos1.y = 32;
+ sprite->callback = sub_80F363C;
+ gUnknown_083DFEC4->unk76AC = sprite;
+}
+
+void sub_80F3614(void)
+{
+ DestroySprite(gUnknown_083DFEC4->unk76AC);
+ FreeSpriteTilesByTag(0x1B);
+ FreeSpritePaletteByTag(0x15);
+}
+
+static void sub_80F363C(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, gUnknown_083DFEC4->unk8934[gUnknown_083DFEC4->unk8fe9]);
+}
+
+void sub_80F3668(void)
+{
+ sub_80F7418(gUnknown_083DFEC4->unk8934[gUnknown_083DFEC4->unk8fe9], 176, 32);
+}
+
+void sub_80F3698(void)
+{
+ struct UnkUsePokeblockSub *var0 = &gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC];
+ gUnknown_083DFEC4->unk8934[gUnknown_083DFEC4->unk8fe9] = gUnknown_083DFEC4->unk76B0.markings;
+ SetMonMarkings(var0->unk1, var0->partyIdx, gUnknown_083DFEC4->unk76B0.markings);
+ sub_80F7470();
+}
+
+static void sub_80F36F0(void)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while (sub_80F3724());
+}
+
+static bool8 sub_80F3724(void)
+{
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ LZ77UnCompWram(gUnknown_083E3D00, gUnknown_083DFEC4->unk984C);
+ break;
+ case 1:
+ sub_80F379C();
+ gUnknown_083DFEC4->unk306++;
+ // fall through
+ case 2:
+ if (sub_80F37D0())
+ return TRUE;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+
+static void sub_80F379C(void)
+{
+ gUnknown_083DFEC4->unkBC93 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while (sub_80F37D0());
+}
+
+static bool8 sub_80F37D0(void)
+{
+ u16 i;
+ u8 j, k, l, m;
+
+ if (gUnknown_083DFEC4->unkBC93 > 11)
+ return FALSE;
+
+ for (i = 0; i < 2; i++)
+ {
+ u8 *r4 = &gUnknown_083DFEC4->unk984C[gUnknown_083DFEC4->unkBC93][0];
+ u8 *r5 = &gUnknown_083DFEC4->unkA44C[gUnknown_083DFEC4->unkBC93][0];
+ for (j = 0; j < 4; j++)
+ {
+ CpuFastSet(r4, r5, 0x10);
+ r5 += 0x40;
+ r4 += 0x20;
+ for (k = 0; k < 2; k++)
+ {
+ for (l = 0; l < 8; l++)
+ {
+ r4 += 4;
+ for (m = 0; m < 4; m++)
+ {
+ r4 -= 1;
+ *r5 = (*r4 << 4) | ((*r4 >> 4) & 0xF);
+ r5++;
+ }
+
+ r4 += 4;
+ }
+
+ r4 -= 0x40;
+ }
+
+ r4 += 0x60;
+ }
+
+ if (++gUnknown_083DFEC4->unkBC93 > 11)
+ return FALSE;
+ }
+
+ if (gUnknown_083DFEC4->unkBC93 > 11)
+ return FALSE;
+
+ return TRUE;
+}
+
+static void sub_80F38B8(void)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while (sub_80F38EC());
+}
+
+static bool8 sub_80F38EC(void)
+{
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ gUnknown_083DFEC4->unk9348 = NULL;
+ gUnknown_083DFEC4->unkBC92 = 0;
+ break;
+ case 1:
+ sub_80F2E18(0);
+ break;
+ case 2:
+ sub_80F3970();
+ gUnknown_083DFEC4->unk306++;
+ // fall through
+ case 3:
+ if (sub_80F39A4())
+ return TRUE;
+ break;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+
+static void sub_80F3970(void)
+{
+ gUnknown_083DFEC4->unkBC93 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while (sub_80F39A4());
+}
+
+static bool8 sub_80F39A4(void)
+{
+ struct SpriteSheet spriteSheet;
+ struct SpritePalette spritePalette;
+ if (gUnknown_083DFEC4->unkBC93 > 11)
+ return FALSE;
+
+ spriteSheet.data = &gUnknown_083DFEC4->unkA44C[gUnknown_083DFEC4->unkBC93][0];
+ spriteSheet.size = 0x200;
+ spriteSheet.tag = gUnknown_083DFEC4->unkBC93 + 11;
+ LoadSpriteSheet(&spriteSheet);
+ if (gUnknown_083DFEC4->unkBC93 < 5)
+ {
+ spritePalette.data = gUnknown_083E3C60[gUnknown_083DFEC4->unkBC93];
+ spritePalette.tag = gUnknown_083DFEC4->unkBC93 + 10;
+ LoadSpritePalette(&spritePalette);
+ }
+
+ if (++gUnknown_083DFEC4->unkBC93 > 11)
+ return FALSE;
+
+ return TRUE;
+}
+
+static struct Sprite *sub_80F3A3C(u16 arg0, u16 arg1)
+{
+ struct SpriteTemplate spriteTemplate;
+ u16 var0;
+ u8 ribbon;
+ u8 spriteId;
+
+ if (arg1 < 3)
+ var0 = arg0 + arg1 * 9;
+ else
+ var0 = arg0 + (gUnknown_083DFEC4->unkBC8E - gUnknown_083DFEC4->unkBC8F);
+
+ ribbon = gUnknown_083DFEC4->unkBC4C[var0];
+ spriteTemplate = gSpriteTemplate_83E476C;
+ spriteTemplate.tileTag = gPokenavRibbonsIconGfx[ribbon][0] + 11;
+ spriteTemplate.paletteTag = gPokenavRibbonsIconGfx[ribbon][1] + 10;
+ spriteId = CreateSprite(&spriteTemplate, arg0 * 16 + 96, arg1 * 16 + 40, 2);
+ if (spriteId != MAX_SPRITES)
+ return &gSprites[spriteId];
+ else
+ return NULL;
+}
+
+static void sub_80F3B00(void)
+{
+ gUnknown_083DFEC4->unk9348 = sub_80F3A3C(gUnknown_083DFEC4->unkBC90, gUnknown_083DFEC4->unkBC91);
+ if (gUnknown_083DFEC4->unk9348)
+ {
+ StartSpriteAffineAnim(gUnknown_083DFEC4->unk9348, 1);
+ gUnknown_083DFEC4->unkBC92 = 1;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unkBC92 = 0;
+ }
+}
+
+static bool8 sub_80F3B58(void)
+{
+ if (gUnknown_083DFEC4->unkBC92)
+ {
+ gUnknown_083DFEC4->unkBC92 = !gUnknown_083DFEC4->unk9348->affineAnimEnded;
+ return gUnknown_083DFEC4->unkBC92;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void sub_80F3B94(void)
+{
+ if (gUnknown_083DFEC4->unk9348)
+ {
+ StartSpriteAffineAnim(gUnknown_083DFEC4->unk9348, 2);
+ gUnknown_083DFEC4->unkBC92 = 1;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unkBC92 = 0;
+ }
+}
+
+static bool8 sub_80F3BD4(void)
+{
+ if (gUnknown_083DFEC4->unkBC92)
+ {
+ gUnknown_083DFEC4->unkBC92 = !gUnknown_083DFEC4->unk9348->affineAnimEnded;
+ if (!gUnknown_083DFEC4->unkBC92)
+ {
+ FreeOamMatrix(gUnknown_083DFEC4->unk9348->oam.matrixNum);
+ DestroySprite(gUnknown_083DFEC4->unk9348);
+ gUnknown_083DFEC4->unk9348 = NULL;
+ }
+
+ return gUnknown_083DFEC4->unkBC92;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void sub_80F3C2C(void)
+{
+ u16 i;
+
+ if (gUnknown_083DFEC4->unk9348)
+ {
+ FreeOamMatrix(gUnknown_083DFEC4->unk9348->oam.matrixNum);
+ DestroySprite(gUnknown_083DFEC4->unk9348);
+ gUnknown_083DFEC4->unk9348 = NULL;
+ }
+
+ for (i = 0; i < 12; i++)
+ FreeSpriteTilesByTag(i + 0xB);
+
+ for (i = 0; i < 5; i++)
+ FreeSpritePaletteByTag(i + 0xA);
+
+ sub_80F2F48();
+}
+
+void sub_80F3C94(void)
+{
+ u16 i;
+ struct SpriteSheet spriteSheet;
+ struct SpritePalette spritePalette;
+
+ spriteSheet = gUnknown_083E4784;
+ spritePalette = gUnknown_083E478C;
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&spritePalette);
+ for (i = 0; i < 10; i++)
+ gUnknown_083DFEC4->unk8800[i] = NULL;
+}
+
+void sub_80F3CE8(void)
+{
+ move_anim_execute();
+ FreeSpriteTilesByTag(0x17);
+ FreeSpritePaletteByTag(0xF);
+}
+
+void sub_80F3D00(void)
+{
+ u8 spriteId;
+ u16 i;
+ u8 var1;
+ struct UnkUsePokeblockSub *var0 = &gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC];
+
+ if (!var0->unk4)
+ return;
+
+ var1 = gUnknown_083DFEC4->unk8931[gUnknown_083DFEC4->unk8fe9];
+ for (i = 0; i < var1 + 1; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E4800, 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk8800[i] = &gSprites[spriteId];
+ gUnknown_083DFEC4->unk8800[i]->invisible = 1;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ sub_80F3F20(var1, 1);
+}
+
+void move_anim_execute(void)
+{
+ u16 i;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (!gUnknown_083DFEC4->unk8800[i])
+ return;
+
+ DestroySprite(gUnknown_083DFEC4->unk8800[i]);
+ gUnknown_083DFEC4->unk8800[i] = NULL;
+ }
+}
+
+void sub_80F3DDC(struct Sprite *sprite)
+{
+ if (++sprite->data[1] > 60)
+ {
+ sprite->data[1] = 0;
+ sub_80F3F20(sprite->data[2], 0);
+ }
+}
+
+static void sub_80F3E04(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ sprite->data[1] = 0;
+ sprite->callback = sub_80F3DDC;
+ }
+}
+
+static void sub_80F3E24(struct Sprite *sprite)
+{
+ if (gUnknown_083DFEC4->unk8768)
+ {
+ sprite->pos1.x = gUnknown_083DFEC4->unk8768->pos1.x
+ + gUnknown_083DFEC4->unk8768->pos2.x
+ + gUnknown_083E4794[sprite->data[0]][0];
+ sprite->pos1.y = gUnknown_083DFEC4->unk8768->pos1.y
+ + gUnknown_083DFEC4->unk8768->pos2.y
+ + gUnknown_083E4794[sprite->data[0]][1];
+ }
+ else
+ {
+ sprite->pos1.x = gUnknown_083E4794[sprite->data[0]][0] + 40;
+ sprite->pos1.y = gUnknown_083E4794[sprite->data[0]][1] + 104;
+ }
+}
+
+static void sub_80F3E9C(struct Sprite *sprite)
+{
+ if (sprite->data[1])
+ {
+ if (--sprite->data[1])
+ return;
+
+ SeekSpriteAnim(sprite, 0);
+ sprite->invisible = 0;
+ }
+
+ sub_80F3E24(sprite);
+ if (sprite->animEnded)
+ {
+ sprite->invisible = 1;
+ if (sprite->data[3] == sprite->data[2])
+ {
+ if (sprite->data[3] == 9)
+ {
+ sub_80F3FAC();
+ sprite->callback = sub_80F3E04;
+ }
+ else
+ {
+ sprite->callback = sub_80F3DDC;
+ }
+ }
+ else
+ {
+ sprite->callback = SpriteCallbackDummy;
+ }
+ }
+}
+
+static void sub_80F3F20(u8 arg0, u8 arg1)
+{
+ u16 i;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (gUnknown_083DFEC4->unk8800[i])
+ {
+ gUnknown_083DFEC4->unk8800[i]->data[0] = i;
+ gUnknown_083DFEC4->unk8800[i]->data[1] = i * 16 + 1;
+ gUnknown_083DFEC4->unk8800[i]->data[2] = arg0;
+ gUnknown_083DFEC4->unk8800[i]->data[3] = i;
+
+ if (!arg1 || arg0 != 9)
+ {
+ gUnknown_083DFEC4->unk8800[i]->callback = sub_80F3E9C;
+ }
+ else
+ {
+ sub_80F3E24(gUnknown_083DFEC4->unk8800[i]);
+ sub_80F3FAC();
+ gUnknown_083DFEC4->unk8800[i]->callback = sub_80F3E04;
+ gUnknown_083DFEC4->unk8800[i]->invisible = 0;
+ }
+ }
+ }
+}
+
+static void sub_80F3FAC(void)
+{
+ u16 i;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (gUnknown_083DFEC4->unk8800[i])
+ {
+ SeekSpriteAnim(gUnknown_083DFEC4->unk8800[i], 0);
+ gUnknown_083DFEC4->unk8800[i]->invisible = 0;
+ }
+ }
+}
+
+static void sub_80F3FF0(void)
+{
+ gUnknown_083DFEC4->unk306 = 0;
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while (sub_80F4024());
+}
+
+static bool8 sub_80F4024(void)
+{
+ u8 paletteIndex;
+ u8 spriteId;
+ struct SpritePalette spritePalette;
+
+ switch (gUnknown_083DFEC4->unk306)
+ {
+ case 0:
+ LZ77UnCompWram(gUnknown_083E329C, gUnknown_083DFEC4->unk131E4);
+ break;
+ case 1:
+ {
+ struct SpriteSheet spriteSheet = {
+ .data = gUnknown_083DFEC4->unk131E4,
+ .size = sizeof(gUnknown_083DFEC4->unk131E4),
+ .tag = 0x18,
+ };
+ LoadSpriteSheet(&spriteSheet);
+ break;
+ }
+ case 2:
+ spritePalette = gUnknown_083E4818;
+ LoadSpritePalette(&spritePalette);
+ paletteIndex = IndexOfSpritePaletteTag(0x10);
+ gUnknown_083DFEC4->unk308 = -3 & ~(1 << (paletteIndex + 0x10));
+ break;
+ case 3:
+ spriteId = CreateSprite(&gSpriteTemplate_83E4850, 218, 14, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gUnknown_083DFEC4->unk6D98 = &gSprites[spriteId];
+ gUnknown_083DFEC4->unk6D98->data[0] = 0;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk6D98 = NULL;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+
+ gUnknown_083DFEC4->unk306++;
+ return TRUE;
+}
+
+void sub_80F4138(struct Sprite *sprite)
+{
+ sprite->pos2.y = -gUnknown_083DFEC4->unk030C;
+ if (sprite->pos2.y <= -32)
+ {
+ if (sprite->data[0] == 0)
+ {
+ sprite->invisible = 1;
+ sprite->data[0] = 1;
+ }
+ }
+ else
+ {
+ if (sprite->data[0] == 1)
+ {
+ sprite->invisible = 0;
+ sprite->data[0] = 0;
+ }
+ }
+}
+
+#ifdef NONMATCHING
+// close, but the last DmaCopy16 is sharing the 0x400 value from the beginning of the function.
+void sub_80F4194(u8 *arg0, u8 *text)
+{
+ u8 i;
+ u8 *tileBuffer;
+ u32 *tileBuf2;
+
+ tileBuffer = gUnknown_083DFEC8;
+ DmaFill16(3, 0x1111, tileBuffer, 0x280);
+ DmaFill16Defvars(3, 0x1111, 0x400 + tileBuffer, 0x280);
+ Text_InitWindow8004E3C(&gWindowTemplate_81E70F0, tileBuffer, text);
+
+ DmaClear16(3, tileBuffer + 0x220, 0x60);
+ DmaClear16(3, tileBuffer + 0x620, 0x60);
+
+ tileBuf2 = (int *)tileBuffer + 0x80;
+ tileBuf2[0] &= 0x0FFFFFFF;
+ tileBuf2[1] &= 0x0FFFFFFF;
+ tileBuf2[2] &= 0x0FFFFFFF;
+ tileBuf2[3] &= 0x0FFFFFFF;
+ tileBuf2[4] &= 0x0FFFFFFF;
+ tileBuf2[5] &= 0x0FFFFFFF;
+ tileBuf2[6] &= 0x0FFFFFFF;
+ tileBuf2[7] &= 0x0FFFFFFF;
+
+ tileBuf2 = (int *)tileBuffer + 0x180;
+ tileBuf2[0] &= 0x0FFFFFFF;
+ tileBuf2[1] &= 0x0FFFFFFF;
+ tileBuf2[2] &= 0x0FFFFFFF;
+ tileBuf2[3] &= 0x0FFFFFFF;
+ tileBuf2[4] &= 0x0FFFFFFF;
+ tileBuf2[5] &= 0x0FFFFFFF;
+ tileBuf2[6] &= 0x0FFFFFFF;
+ tileBuf2[7] &= 0x0FFFFFFF;
+
+ for (i = 0; i < 5; i++)
+ {
+ DmaCopy16(3, &tileBuffer[128 * i], &arg0[i * 256], 128);
+ DmaCopy16(3, &tileBuffer[128 * i + 0x400], &arg0[32 * ((i * 8) + 4)], 128);
+ }
+}
+#else
+NAKED
+void sub_80F4194(u8 *arg0, u8 *text)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x4\n\
+ adds r7, r0, 0\n\
+ adds r2, r1, 0\n\
+ ldr r0, _080F42A4 @ =gUnknown_083DFEC8\n\
+ ldr r6, [r0] @ r6 = tileBuffer\n\
+ mov r0, sp \n\
+ ldr r1, _080F42A8 @ =0x00001111\n\
+ adds r5, r1, 0\n\
+ strh r5, [r0]\n\
+ ldr r4, _080F42AC @ =0x040000d4\n\
+ str r0, [r4]\n\
+ str r6, [r4, 0x4]\n\
+ ldr r3, _080F42B0 @ =0x81000140\n\
+ str r3, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ adds r1, r6, r0\n\
+ mov r0, sp\n\
+ strh r5, [r0]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ str r3, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ ldr r0, _080F42B4 @ =gWindowTemplate_81E70F0\n\
+ adds r1, r6, 0\n\
+ bl Text_InitWindow8004E3C\n\
+ movs r3, 0x88\n\
+ lsls r3, 2\n\
+ adds r1, r6, r3\n\
+ mov r0, sp\n\
+ movs r3, 0\n\
+ strh r3, [r0]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ ldr r2, _080F42B8 @ =0x81000030\n\
+ str r2, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ movs r0, 0xC4\n\
+ lsls r0, 3\n\
+ adds r1, r6, r0\n\
+ mov r0, sp\n\
+ strh r3, [r0]\n\
+ str r0, [r4]\n\
+ str r1, [r4, 0x4]\n\
+ str r2, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ movs r1, 0x80\n\
+ lsls r1, 2\n\
+ adds r2, r6, r1\n\
+ ldr r0, [r2]\n\
+ ldr r1, _080F42BC @ =0x0fffffff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r0, [r2, 0x4]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x4]\n\
+ ldr r0, [r2, 0x8]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x8]\n\
+ ldr r0, [r2, 0xC]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0xC]\n\
+ ldr r0, [r2, 0x10]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x10]\n\
+ ldr r0, [r2, 0x14]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x14]\n\
+ ldr r0, [r2, 0x18]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x18]\n\
+ ldr r0, [r2, 0x1C]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x1C]\n\
+ movs r3, 0xC0\n\
+ lsls r3, 3\n\
+ adds r2, r6, r3\n\
+ ldr r0, [r2]\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r0, [r2, 0x4]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x4]\n\
+ ldr r0, [r2, 0x8]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x8]\n\
+ ldr r0, [r2, 0xC]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0xC]\n\
+ ldr r0, [r2, 0x10]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x10]\n\
+ ldr r0, [r2, 0x14]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x14]\n\
+ ldr r0, [r2, 0x18]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x18]\n\
+ ldr r0, [r2, 0x1C]\n\
+ ands r0, r1\n\
+ str r0, [r2, 0x1C]\n\
+ movs r1, 0\n\
+ ldr r2, _080F42C0 @ =0x80000040\n\
+_080F4268:\n\
+ lsls r0, r1, 7\n\
+ adds r0, r6, r0\n\
+ str r0, [r4]\n\
+ lsls r0, r1, 8\n\
+ adds r0, r7, r0\n\
+ str r0, [r4, 0x4]\n\
+ str r2, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ lsls r0, r1, 7\n\
+ movs r3, 0x80\n\
+ lsls r3, 3\n\
+ adds r0, r3\n\
+ adds r0, r6, r0\n\
+ str r0, [r4]\n\
+ lsls r0, r1, 3\n\
+ adds r0, 0x4\n\
+ lsls r0, 5\n\
+ adds r0, r7, r0\n\
+ str r0, [r4, 0x4]\n\
+ str r2, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ cmp r1, 0x4\n\
+ bls _080F4268\n\
+ add sp, 0x4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080F42A4: .4byte gUnknown_083DFEC8\n\
+_080F42A8: .4byte 0x00001111\n\
+_080F42AC: .4byte 0x040000d4\n\
+_080F42B0: .4byte 0x81000140\n\
+_080F42B4: .4byte gWindowTemplate_81E70F0\n\
+_080F42B8: .4byte 0x81000030\n\
+_080F42BC: .4byte 0x0fffffff\n\
+_080F42C0: .4byte 0x80000040\n\
+ .syntax divided\n");
+}
+#endif // NONMATCHING
+
+static void sub_80F42C4(u8 *arg0)
+{
+ u16 i, tileOffset;
+ u8 spriteId;
+ struct SpriteSheet spriteSheet = {
+ .data = gUnknown_083DFEC4->unkD1E4[0],
+ .size = 0x500,
+ .tag = 0x1A,
+ };
+
+ sub_80F4194(gUnknown_083DFEC4->unkD1E4[0], arg0);
+ LoadSpriteSheet(&spriteSheet);
+ LoadSpritePalette(&gUnknown_083E4868);
+
+ tileOffset = 0;
+ for (i = 0; i < 5; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_83E4878, i * 32 + 113, 16, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.tileNum += tileOffset;
+ gUnknown_083DFEC4->unkCED4[i] = &gSprites[spriteId];
+ }
+ else
+ {
+ gUnknown_083DFEC4->unkCED4[i] = NULL;
+ }
+
+ tileOffset += 8;
+ }
+}
+
+static void sub_80F4394(void)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (gUnknown_083DFEC4->unkCED4[i])
+ DestroySprite(gUnknown_083DFEC4->unkCED4[i]);
+ }
+
+ FreeSpriteTilesByTag(0x1A);
+ FreeSpritePaletteByTag(0x12);
+}
+
+void sub_80F43D4(u8 *arg0)
+{
+ u16 tile;
+
+ sub_80F4194(gUnknown_083DFEC4->unkD1E4[0], arg0);
+ tile = GetSpriteTileStartByTag(0x1A);
+ if (tile != 0xFFFF)
+ DmaCopy32Defvars(3, gUnknown_083DFEC4->unkD1E4[0], (void *)(VRAM + 0x10000 + (tile * 32)), 0x500);
+}
+
+static u8 *sub_80F4428(u8 *arg0, u16 arg1, u8 arg2)
+{
+ return sub_80F6514(arg0, arg1, arg2);
+}
+
+static u8 *sub_80F443C(u8 *arg0, u16 arg1)
+{
+ return AlignInt1InMenuWindow(StringCopy(arg0, gOtherText_Number), arg1, 56, 1);
+}
+
+static u8 *sub_80F445C(u8 *arg0, u16 arg1)
+{
+ u8 *buffer = AlignInt1InMenuWindow(arg0, arg1, 23, 1);
+ buffer[0] = EXT_CTRL_CODE_BEGIN;
+ buffer[1] = 0x11;
+ buffer[2] = 1;
+ buffer += 3;
+ buffer[0] = CHAR_SLASH;
+ buffer += 1;
+ buffer[0] = EXT_CTRL_CODE_BEGIN;
+ buffer[1] = 0x11;
+ buffer[2] = 1;
+ buffer += 3;
+ buffer = AlignInt1InMenuWindow(buffer, gUnknown_083DFEC4->unk8774 + 1, 50, 1);
+ return buffer;
+}
+
+u32 sub_80F44B0(u16 box, u16 monIndex, int monDataField, int *text)
+{
+ if (box == 14)
+ {
+ if (monDataField == MON_DATA_NICKNAME || monDataField == MON_DATA_OT_NAME)
+ return GetMonData(&gPlayerParty[monIndex], monDataField, text);
+ else
+ return GetMonData(&gPlayerParty[monIndex], monDataField);
+ }
+ else
+ {
+ if (monDataField == MON_DATA_NICKNAME || monDataField == MON_DATA_OT_NAME)
+ return GetBoxMonData(&gPokemonStorage.boxes[box][monIndex], monDataField, text);
+ else
+ return GetBoxMonData(&gPokemonStorage.boxes[box][monIndex], monDataField);
+ }
+}
+
+static void SetMonMarkings(u16 box, u16 monIndex, u8 markings)
+{
+ if (box == 14)
+ SetMonData(&gPlayerParty[monIndex], MON_DATA_MARKINGS, &markings);
+ else
+ SetBoxMonData(&gPokemonStorage.boxes[box][monIndex], MON_DATA_MARKINGS, &markings);
+}
+
+static void sub_80F45A0(s16 arg0, u8 arg1)
+{
+ u8 box;
+ u8 var0 = gUnknown_083DFEC4->unk893c[arg0].unk4;
+ if (var0)
+ {
+ sub_80F4428(gUnknown_083DFEC4->unk8829[arg1], arg0, 0);
+ box = gUnknown_083DFEC4->unk893c[arg0].unk1;
+ if (box == 14)
+ AlignStringInMenuWindow(gUnknown_083DFEC4->unk88E9[arg1], gOtherText_InParty, 64, 0);
+ else
+ AlignStringInMenuWindow(gUnknown_083DFEC4->unk88E9[arg1], gPokemonStorage.boxNames[box], 64, 0);
+
+ gUnknown_083DFEC4->unk8937[arg1] = 1;
+ }
+ else
+ {
+ AlignStringInMenuWindow(gUnknown_083DFEC4->unk8829[arg1], gEmptyString_81E72B0, 104, 0);
+ AlignStringInMenuWindow(gUnknown_083DFEC4->unk88E9[arg1], gEmptyString_81E72B0, 64, 0);
+ gUnknown_083DFEC4->unk8937[arg1] = var0;
+ }
+}
+
+static void sub_80F468C(s16 arg0, u8 arg1)
+{
+ u16 i;
+ u16 box;
+ u16 monIndex;
+
+ if (gUnknown_083DFEC4->unk893c[arg0].unk4)
+ {
+ box = gUnknown_083DFEC4->unk893c[arg0].unk1;
+ monIndex = gUnknown_083DFEC4->unk893c[arg0].partyIdx;
+ gUnknown_083DFEC4->unk8ff0[arg1][0] = sub_80F44B0(box, monIndex, MON_DATA_COOL, NULL);
+ gUnknown_083DFEC4->unk8ff0[arg1][1] = sub_80F44B0(box, monIndex, MON_DATA_TOUGH, NULL);
+ gUnknown_083DFEC4->unk8ff0[arg1][2] = sub_80F44B0(box, monIndex, MON_DATA_SMART, NULL);
+ gUnknown_083DFEC4->unk8ff0[arg1][3] = sub_80F44B0(box, monIndex, MON_DATA_CUTE, NULL);
+ gUnknown_083DFEC4->unk8ff0[arg1][4] = sub_80F44B0(box, monIndex, MON_DATA_BEAUTY, NULL);
+
+ gUnknown_083DFEC4->unk8931[arg1] = sub_80F44B0(box, monIndex, MON_DATA_SHEEN, NULL) != 255
+ ? sub_80F44B0(box, monIndex, MON_DATA_SHEEN, NULL) / 29
+ : 9;
+
+ gUnknown_083DFEC4->unk8934[arg1] = sub_80F44B0(box, monIndex, MON_DATA_MARKINGS, NULL);
+ sub_80F55AC(gUnknown_083DFEC4->unk8ff0[arg1], gUnknown_083DFEC4->unk9004[arg1]);
+ }
+ else
+ {
+ for (i = 0; i < 5; i++)
+ {
+ gUnknown_083DFEC4->unk8ff0[arg1][i] = 0;
+ gUnknown_083DFEC4->unk9004[arg1][i].unk0 = 0x9B;
+ gUnknown_083DFEC4->unk9004[arg1][i].unk2 = 0x5B;
+ }
+ }
+}
+
+static void sub_80F4824(s16 arg0, u8 arg1)
+{
+ u16 species;
+ u32 otId;
+ u32 personality;
+ u16 box;
+ u16 monIndex;
+
+ if (gUnknown_083DFEC4->unk893c[arg0].unk4)
+ {
+ box = gUnknown_083DFEC4->unk893c[arg0].unk1;
+ monIndex = gUnknown_083DFEC4->unk893c[arg0].partyIdx;
+ species = sub_80F44B0(box, monIndex, MON_DATA_SPECIES2, NULL);
+ otId = sub_80F44B0(box, monIndex, MON_DATA_OT_ID, NULL);
+ personality = sub_80F44B0(box, monIndex, MON_DATA_PERSONALITY, NULL);
+
+ HandleLoadSpecialPokePic(
+ &gMonFrontPicTable[species],
+ gMonFrontPicCoords[species].coords,
+ 1,
+ (intptr_t)gUnknown_083DFEC4->unk131E4,
+ gUnknown_083DFEC4->unkD1E4[arg1],
+ species,
+ personality);
+
+ LZ77UnCompWram(GetMonSpritePalFromOtIdPersonality(species, otId, personality), gUnknown_083DFEC4->unk0[arg1]);
+ gUnknown_083DFEC4->unkD1D6[arg1] = species;
+ }
+}
+
+void sub_80F4900(s16 arg0, u8 arg1)
+{
+ sub_80F45A0(arg0, arg1);
+ sub_80F468C(arg0, arg1);
+ sub_80F4824(arg0, arg1);
+}
+
+void sub_80F492C(void)
+{
+ gUnknown_083DFEC4->unk8FE4 = 0;
+}
+
+#ifdef NONMATCHING
+// registers r3/r4 are swapped
+void sub_80F4944(struct UnkUsePokeblockSub *arg0)
+{
+ u16 i;
+ u16 r3;
+ u16 r4;
+
+ i = 0;
+ r4 = gUnknown_083DFEC4->unk8FE4;
+ r3 = r4 / 2;
+ while (r3 != r4)
+ {
+ if (arg0->unk0 > gUnknown_083DFEC4->unk893c[r3].unk0)
+ r4 = r3;
+ else
+ i = r3 + 1;
+
+ r3 = ((r4 - i) / 2) + i;
+ }
+
+ r4 = gUnknown_083DFEC4->unk8FE4;
+ while (r4 > r3)
+ {
+ gUnknown_083DFEC4->unk893c[r4] = gUnknown_083DFEC4->unk893c[r4 - 1];
+ r4--;
+ }
+
+ gUnknown_083DFEC4->unk893c[r3] = *arg0;
+ gUnknown_083DFEC4->unk8FE4++;
+}
+#else
+NAKED
+void sub_80F4944(struct UnkUsePokeblockSub *arg0)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ mov r12, r0\n\
+ movs r2, 0\n\
+ ldr r1, _080F4978 @ =gUnknown_083DFEC4\n\
+ ldr r5, [r1]\n\
+ ldr r3, _080F497C @ =0x00008fe4\n\
+ adds r0, r5, r3\n\
+ ldrh r4, [r0]\n\
+ lsrs r3, r4, 1\n\
+ mov r8, r1\n\
+ cmp r4, r3\n\
+ beq _080F499C\n\
+ adds r6, r5, 0\n\
+ mov r0, r12\n\
+ ldrb r5, [r0]\n\
+ ldr r7, _080F4980 @ =0x0000893c\n\
+_080F4968:\n\
+ lsls r0, r3, 2\n\
+ adds r0, r6, r0\n\
+ adds r0, r7\n\
+ ldrb r0, [r0]\n\
+ cmp r5, r0\n\
+ bls _080F4984\n\
+ adds r4, r3, 0\n\
+ b _080F498A\n\
+ .align 2, 0\n\
+_080F4978: .4byte gUnknown_083DFEC4\n\
+_080F497C: .4byte 0x00008fe4\n\
+_080F4980: .4byte 0x0000893c\n\
+_080F4984:\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+_080F498A:\n\
+ subs r0, r4, r2\n\
+ lsrs r1, r0, 31\n\
+ adds r0, r1\n\
+ asrs r0, 1\n\
+ adds r0, r2, r0\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r4, r3\n\
+ bne _080F4968\n\
+_080F499C:\n\
+ mov r1, r8\n\
+ ldr r2, [r1]\n\
+ ldr r1, _080F49EC @ =0x00008fe4\n\
+ adds r0, r2, r1\n\
+ ldrh r4, [r0]\n\
+ lsls r6, r3, 2\n\
+ cmp r4, r3\n\
+ bls _080F49C6\n\
+ ldr r0, _080F49F0 @ =0x0000893c\n\
+ adds r5, r2, r0\n\
+_080F49B0:\n\
+ lsls r2, r4, 2\n\
+ adds r2, r5, r2\n\
+ subs r1, r4, 0x1\n\
+ lsls r0, r1, 2\n\
+ adds r0, r5, r0\n\
+ ldr r0, [r0]\n\
+ str r0, [r2]\n\
+ lsls r1, 16\n\
+ lsrs r4, r1, 16\n\
+ cmp r4, r3\n\
+ bhi _080F49B0\n\
+_080F49C6:\n\
+ mov r1, r8\n\
+ ldr r2, [r1]\n\
+ ldr r3, _080F49F0 @ =0x0000893c\n\
+ adds r0, r2, r3\n\
+ adds r0, r6\n\
+ mov r3, r12\n\
+ ldr r1, [r3]\n\
+ str r1, [r0]\n\
+ ldr r0, _080F49EC @ =0x00008fe4\n\
+ adds r2, r0\n\
+ ldrh r0, [r2]\n\
+ adds r0, 0x1\n\
+ strh r0, [r2]\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_080F49EC: .4byte 0x00008fe4\n\
+_080F49F0: .4byte 0x0000893c\n\
.syntax divided\n");
}
#endif // NONMATCHING
+
+void sub_80F49F4(void)
+{
+ u16 i;
+
+ gUnknown_083DFEC4->unk893c[0].unk2 = 1;
+ for (i = 1; i < gUnknown_083DFEC4->unk8FE4; i++)
+ {
+ if (gUnknown_083DFEC4->unk893c[i].unk0 == gUnknown_083DFEC4->unk893c[i - 1].unk0)
+ gUnknown_083DFEC4->unk893c[i].unk2 = gUnknown_083DFEC4->unk893c[i - 1].unk2;
+ else
+ gUnknown_083DFEC4->unk893c[i].unk2 = i + 1;
+ }
+
+ gUnknown_083DFEC4->unk876C = 0;
+ gUnknown_083DFEC4->unk8770 = 0;
+ gUnknown_083DFEC4->unk876E = 0;
+ gUnknown_083DFEC4->unk8772 = gUnknown_083DFEC4->unk8FE4 < 9 ? (gUnknown_083DFEC4->unk8FE4 - 1) : 7;
+ gUnknown_083DFEC4->unk8774 = gUnknown_083DFEC4->unk8FE4 - 1;
+ gUnknown_083DFEC4->unk87C9 = gUnknown_083DFEC4->unk8774 > 7;
+}
+
+void sub_80F4B20(void)
+{
+ s16 var0;
+ s16 var1;
+
+ sub_80F4900(gUnknown_083DFEC4->unk87DC, 0);
+ sub_80F2E18(0);
+ if (gUnknown_083DFEC4->unk87DA == 1)
+ {
+ gUnknown_083DFEC4->unk8fe9 = 0;
+ gUnknown_083DFEC4->unk8FEA = 0;
+ gUnknown_083DFEC4->unk8FEB = 0;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk8fe9 = 0;
+ gUnknown_083DFEC4->unk8FEA = 1;
+ gUnknown_083DFEC4->unk8FEB = 2;
+
+ var0 = gUnknown_083DFEC4->unk87DC + 1;
+ if (var0 >= gUnknown_083DFEC4->unk87DA)
+ var0 = 0;
+
+ var1 = gUnknown_083DFEC4->unk87DC - 1;
+ if (var1 < 0)
+ var1 = gUnknown_083DFEC4->unk87DA - 1;
+
+ sub_80F4900(var0, 1);
+ sub_80F4900(var1, 2);
+ }
+}
+
+void sub_80F4BD0(void)
+{
+ u16 i, j;
+
+ for (i = 0, j = 0; i < gUnknown_083DFEC4->unk8828; i++)
+ {
+ if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ {
+ gUnknown_083DFEC4->unk893c[j].unk1 = 14;
+ gUnknown_083DFEC4->unk893c[j].partyIdx = i;
+ gUnknown_083DFEC4->unk893c[j].unk2 = j + 1;
+ gUnknown_083DFEC4->unk893c[j].unk4 = 1;
+ j++;
+ }
+ }
+
+ gUnknown_083DFEC4->unk893c[j].unk1 = 0;
+ gUnknown_083DFEC4->unk893c[j].partyIdx = 0;
+ gUnknown_083DFEC4->unk893c[j].unk2 = 0;
+ gUnknown_083DFEC4->unk893c[j].unk4 = 0;
+ gUnknown_083DFEC4->unk87DC = 0;
+ gUnknown_083DFEC4->unk87DA = j + 1;
+ sub_80F4B20();
+ gUnknown_083DFEC4->unk87CB = 1;
+}
+
+static void sub_80F4CF0(void)
+{
+ gUnknown_083DFEC4->unk87DC = gUnknown_083DFEC4->unk876E;
+ sub_80F4B20();
+
+ if (gUnknown_083DFEC4->unk8774 == 0)
+ gUnknown_083DFEC4->unk87CB = 0;
+ else
+ gUnknown_083DFEC4->unk87CB = 1;
+}
+
+static void sub_80F4D44(void)
+{
+ gUnknown_083DFEC4->unk8FE6 = 0;
+ gUnknown_083DFEC4->unk8FE7 = 0;
+ sub_80F492C();
+
+ if (!gUnknown_083DFEC4->unk6DAC)
+ while (sub_80F4D88());
+}
+
+static bool8 sub_80F4D88(void)
+{
+ u16 i;
+ register int mask asm("r3"); // FIXME
+ int nextValue;
+ struct UnkUsePokeblockSub var0;
+
+ switch (gUnknown_083DFEC4->unk8FE6)
+ {
+ default:
+ var0.unk4 = 1;
+ for (i = 0; i < 15; i++)
+ {
+
+ if (GetBoxMonData(&gPokemonStorage.boxes[gUnknown_083DFEC4->unk8FE6][gUnknown_083DFEC4->unk8FE7], MON_DATA_SPECIES)
+ && !GetBoxMonData(&gPokemonStorage.boxes[gUnknown_083DFEC4->unk8FE6][gUnknown_083DFEC4->unk8FE7], MON_DATA_IS_EGG))
+ {
+ var0.unk1 = gUnknown_083DFEC4->unk8FE6;
+ var0.partyIdx = gUnknown_083DFEC4->unk8FE7;
+ var0.unk0 = GetBoxMonData(
+ &gPokemonStorage.boxes[gUnknown_083DFEC4->unk8FE6][gUnknown_083DFEC4->unk8FE7],
+ gUnknown_083DFEC4->unk87D8);
+ sub_80F4944(&var0);
+ }
+
+ gUnknown_083DFEC4->unk8FE7++;
+ mask = 0xFF;
+ if (gUnknown_083DFEC4->unk8FE7 == 30)
+ {
+ gUnknown_083DFEC4->unk8FE7 = 0;
+ nextValue = gUnknown_083DFEC4->unk8FE6 + 1;
+ gUnknown_083DFEC4->unk8FE6 = nextValue;
+ if ((nextValue & mask) == 14)
+ break;
+ }
+ }
+ break;
+ case 14:
+ var0.unk4 = 1;
+ var0.unk1 = 14;
+ for (i = 0; i < gUnknown_083DFEC4->unk8828; i++)
+ {
+ if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ {
+ var0.partyIdx = i;
+ var0.unk0 = GetMonData(&gPlayerParty[i], gUnknown_083DFEC4->unk87D8);
+ sub_80F4944(&var0);
+ }
+ }
+
+ sub_80F49F4();
+ gUnknown_083DFEC4->unk87DA = gUnknown_083DFEC4->unk8FE4;
+ gUnknown_083DFEC4->unk8FE6++;
+ break;
+ case 15:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void sub_80F4F78(void)
+{
+ sub_80F53EC(gUnknown_083DFEC4->unk9040, gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9]);
+ sub_80F5504();
+}
+
+bool8 sub_80F4FB4(void)
+{
+ bool8 var0 = sub_80F5504();
+ bool8 var1 = sub_80F170C();
+ return var0 || var1;
+}
+
+void sub_80F4FDC(void)
+{
+ if (gUnknown_083DFEC4->unk76AA || gUnknown_083DFEC4->unk87DC != gUnknown_083DFEC4->unk8828)
+ sub_80F53EC(gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9], gUnknown_083DFEC4->unk9040);
+}
+
+bool8 sub_80F5038(void)
+{
+ bool8 var0 = sub_80F5504();
+ bool8 var1 = sub_80F173C();
+ return var0 || var1;
+}
+
+void sub_80F5060(u8 arg0)
+{
+ u16 var0;
+ u8 var1;
+ u8 var2;
+
+ if (arg0)
+ var0 = gUnknown_083DFEC4->unk8FEB;
+ else
+ var0 = gUnknown_083DFEC4->unk8FEA;
+
+ sub_80F53EC(gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9], gUnknown_083DFEC4->unk9004[var0]);
+ var1 = gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk4;
+ if (arg0)
+ {
+ gUnknown_083DFEC4->unk8FEB = gUnknown_083DFEC4->unk8FEA;
+ gUnknown_083DFEC4->unk8FEA = gUnknown_083DFEC4->unk8fe9;
+ gUnknown_083DFEC4->unk8fe9 = var0;
+ gUnknown_083DFEC4->unk8FEC = gUnknown_083DFEC4->unk8FEB;
+
+ gUnknown_083DFEC4->unk87DC = gUnknown_083DFEC4->unk87DC
+ ? gUnknown_083DFEC4->unk87DC - 1
+ : gUnknown_083DFEC4->unk87DA - 1;
+ gUnknown_083DFEC4->unk8FEE = gUnknown_083DFEC4->unk87DC
+ ? gUnknown_083DFEC4->unk87DC - 1
+ : gUnknown_083DFEC4->unk87DA - 1;
+ }
+ else
+ {
+ gUnknown_083DFEC4->unk8FEA = gUnknown_083DFEC4->unk8FEB;
+ gUnknown_083DFEC4->unk8FEB = gUnknown_083DFEC4->unk8fe9;
+ gUnknown_083DFEC4->unk8fe9 = var0;
+ gUnknown_083DFEC4->unk8FEC = gUnknown_083DFEC4->unk8FEA;
+
+ gUnknown_083DFEC4->unk87DC = (gUnknown_083DFEC4->unk87DC < gUnknown_083DFEC4->unk87DA - 1)
+ ? gUnknown_083DFEC4->unk87DC + 1
+ : 0;
+ gUnknown_083DFEC4->unk8FEE = (gUnknown_083DFEC4->unk87DC < gUnknown_083DFEC4->unk87DA - 1)
+ ? gUnknown_083DFEC4->unk87DC + 1
+ : 0;
+ }
+
+ var2 = gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].unk4;
+ if (!var1)
+ gUnknown_083DFEC4->unk87E0 = sub_80F5264;
+ else if (!var2)
+ gUnknown_083DFEC4->unk87E0 = sub_80F52F8;
+ else
+ gUnknown_083DFEC4->unk87E0 = sub_80F5364;
+
+ gUnknown_083DFEC4->unk87DE = 0;
+}
+
+bool8 gpu_sync_bg_show(void)
+{
+ return gUnknown_083DFEC4->unk87E0();
+}
+
+static bool8 sub_80F5264(void)
+{
+ switch (gUnknown_083DFEC4->unk87DE)
+ {
+ case 0:
+ sub_80F2E18(gUnknown_083DFEC4->unk8fe9);
+ sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
+ gUnknown_083DFEC4->unk87DE++;
+ // fall through
+ case 1:
+ if (!sub_80F4FB4())
+ {
+ sub_80F4900(gUnknown_083DFEC4->unk8FEE, gUnknown_083DFEC4->unk8FEC);
+ gUnknown_083DFEC4->unk87DE++;
+ }
+ break;
+ case 2:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_80F52F8(void)
+{
+ switch (gUnknown_083DFEC4->unk87DE)
+ {
+ case 0:
+ if (!sub_80F5038())
+ {
+ sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
+ sub_80F4900(gUnknown_083DFEC4->unk8FEE, gUnknown_083DFEC4->unk8FEC);
+ gUnknown_083DFEC4->unk87DE++;
+ }
+ break;
+ case 1:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static bool8 sub_80F5364(void)
+{
+ switch (gUnknown_083DFEC4->unk87DE)
+ {
+ case 0:
+ sub_80F5504();
+ if (!sub_80F173C())
+ {
+ sub_80F2E18(gUnknown_083DFEC4->unk8fe9);
+ sub_80F01E0(gUnknown_083DFEC4->unk8fe9);
+ gUnknown_083DFEC4->unk87DE++;
+ }
+ break;
+ case 1:
+ if (!sub_80F4FB4())
+ gUnknown_083DFEC4->unk87DE++;
+ break;
+ case 2:
+ sub_80F4900(gUnknown_083DFEC4->unk8FEE, gUnknown_083DFEC4->unk8FEC);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void sub_80F53EC(struct UnkPokenav11 *arg0, struct UnkPokenav11 *arg1)
+{
+ u16 i, j;
+ int r5;
+ int r6;
+
+ for (i = 0; i < 5; i++)
+ {
+ r5 = arg0[i].unk0 << 8;
+ r6 = ((arg1[i].unk0 - arg0[i].unk0) << 8) / 10;
+ for (j = 0; j < 9; j++)
+ {
+ gUnknown_083DFEC4->unk9054[j][i].unk0 = (r5 >> 8) + ((r5 >> 7) & 1);
+ r5 += r6;
+ }
+
+ gUnknown_083DFEC4->unk9054[j][i].unk0 = arg1[i].unk0;
+ r5 = arg0[i].unk2 << 8;
+ r6 = ((arg1[i].unk2 - arg0[i].unk2) << 8) / 10;
+ for (j = 0; j < 9; j++)
+ {
+ gUnknown_083DFEC4->unk9054[j][i].unk2 = (r5 >> 8) + ((r5 >> 7) & 1);
+ r5 += r6;
+ }
+
+ gUnknown_083DFEC4->unk9054[j][i].unk2 = arg1[i].unk2;
+ }
+
+ gUnknown_083DFEC4->unk9342 = 0;
+}
+
+static bool8 sub_80F5504(void)
+{
+ if (gUnknown_083DFEC4->unk9342 < 10)
+ {
+ sub_80F556C(gUnknown_083DFEC4->unk9054[gUnknown_083DFEC4->unk9342++]);
+ return gUnknown_083DFEC4->unk9342 != 10;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+void sub_80F5550(struct UnkPokenav11 *arg0, struct UnkPokenav11 *arg1)
+{
+ sub_80F53EC(arg0, arg1);
+}
+
+bool8 sub_80F555C(void)
+{
+ return sub_80F5504();
+}
+
+void sub_80F556C(struct UnkPokenav11 *arg0)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ gUnknown_083DFEC4->unk911C[i] = arg0[i];
+
+ gUnknown_083DFEC4->unk9344 = 1;
+}
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 50ef21139..374e73d2e 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -36,8 +36,8 @@ static u8 gUnknown_0300071C[4];
void *recordMixingSecretBases = &gSaveBlock1.secretBases;
void *recordMixingTvShows = &gSaveBlock1.tvShows;
-void *gUnknown_083D0274 = &gSaveBlock1.pokeNews;
-void *gUnknown_083D0278 = &gSaveBlock1.mauvilleMan;
+void *recordMixingPokeNews = &gSaveBlock1.pokeNews;
+void *recordMixingMauvilleMan = &gSaveBlock1.mauvilleMan;
void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs;
struct RecordMixingDayCareMail *gDayCareMailPlayerRecord = &gDayCareMailRecord;
struct BattleTowerRecord *gBattleTowerPlayerRecord = &gSaveBlock2.battleTower.playerRecord;
@@ -51,10 +51,10 @@ void sub_80B929C(void)
struct PlayerRecords
{
- struct SecretBaseRecord secretBases[20];
- TVShow tvShows[25];
- u8 filler1004[0x40];
- u8 filler1044[0x40];
+ struct SecretBaseRecord secretBases[SECRET_BASES_COUNT];
+ TVShow tvShows[TV_SHOWS_COUNT];
+ struct PokeNews pokeNews[POKE_NEWS_COUNT];
+ union MauvilleMan mauvilleMan;
struct EasyChatPair easyChatPairs[5];
struct RecordMixingDayCareMail daycareMailRecord;
struct BattleTowerRecord battleTowerRecord;
@@ -68,8 +68,8 @@ void RecordMixing_PrepareExchangePacket(void)
memcpy(ewram_2018000.secretBases, recordMixingSecretBases, sizeof(ewram_2018000.secretBases));
memcpy(ewram_2018000.tvShows, recordMixingTvShows, sizeof(ewram_2018000.tvShows));
- memcpy(ewram_2018000.filler1004, gUnknown_083D0274, sizeof(ewram_2008000.filler1004));
- memcpy(ewram_2018000.filler1044, gUnknown_083D0278, sizeof(ewram_2008000.filler1044));
+ memcpy(ewram_2018000.pokeNews, recordMixingPokeNews, sizeof(ewram_2008000.pokeNews));
+ memcpy(&ewram_2018000.mauvilleMan, recordMixingMauvilleMan, sizeof(ewram_2008000.mauvilleMan));
memcpy(ewram_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(ewram_2018000.easyChatPairs));
gDayCareMailRecord.mail[0] = gSaveBlock1.daycare.misc.mail[0];
gDayCareMailRecord.mail[1] = gSaveBlock1.daycare.misc.mail[1];
@@ -85,8 +85,8 @@ void RecordMixing_ReceiveExchangePacket(u32 a)
{
sub_80BD674(ewram_2008000.secretBases, sizeof(struct PlayerRecords), a);
sub_80BFD44((u8 *)ewram_2008000.tvShows, sizeof(struct PlayerRecords), a);
- sub_80C0514(ewram_2008000.filler1004, sizeof(struct PlayerRecords), a);
- sub_80B9B1C(ewram_2008000.filler1044, sizeof(struct PlayerRecords), a);
+ sub_80C0514(ewram_2008000.pokeNews, sizeof(struct PlayerRecords), a);
+ sub_80B9B1C((u8 *)&ewram_2008000.mauvilleMan, sizeof(struct PlayerRecords), a);
sub_80FA4E4(ewram_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
sub_80B9C6C((u8 *)&ewram_2008000.daycareMailRecord, sizeof(struct PlayerRecords), a, ewram_2008000.tvShows);
sub_80B9B70(&ewram_2008000.battleTowerRecord, sizeof(struct PlayerRecords), a);
@@ -439,7 +439,7 @@ void sub_80B9B1C(u8 *a, size_t size, u8 index)
sub_80B9A88(arr);
//Probably not how it was originally written, but this matches.
- memcpy(a + index * size, (ptr = gUnknown_083D0278), 0x40);
+ memcpy(a + index * size, (ptr = recordMixingMauvilleMan), 0x40);
memcpy(ptr, a + arr[index] * size, 0x40);
sub_80F7F30();
}
diff --git a/src/region_map.c b/src/region_map.c
index 74062f435..e9ae4599a 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -19,6 +19,8 @@
#include "text.h"
#include "trig.h"
#include "ewram.h"
+#include "heal_location.h"
+#include "constants/heal_locations.h"
#define MAP_WIDTH 28
#define MAP_HEIGHT 15
@@ -1260,58 +1262,58 @@ static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map
static const u16 sFlyTargetIcons_Pal[] = INCBIN_U16("graphics/pokenav/fly_target_icons.gbapal");
static const u8 sFlyTargetIcons_ImageLZ[] = INCBIN_U8("graphics/pokenav/fly_target_icons.4bpp.lz");
-static const u8 sUnknown_083E7920[][3] =
-{
- {0, 9, 1},
- {0, 10, 14},
- {0, 11, 15},
- {0, 12, 16},
- {0, 13, 17},
- {0, 14, 18},
- {0, 15, 19},
- {0, 0, 3},
- {0, 1, 4},
- {0, 2, 5},
- {0, 3, 6},
- {0, 4, 7},
- {0, 5, 8},
- {0, 6, 9},
- {0, 7, 10},
- {0, 8, 11},
- {0, 16, 0},
- {0, 17, 0},
- {0, 18, 0},
- {0, 19, 0},
- {0, 20, 0},
- {0, 21, 0},
- {0, 22, 0},
- {0, 23, 0},
- {0, 24, 0},
- {0, 25, 0},
- {0, 26, 0},
- {0, 27, 0},
- {0, 28, 0},
- {0, 29, 0},
- {0, 30, 0},
- {0, 31, 0},
- {0, 32, 0},
- {0, 33, 0},
- {0, 34, 0},
- {0, 35, 0},
- {0, 36, 0},
- {0, 37, 0},
- {0, 38, 0},
- {0, 39, 0},
- {0, 40, 0},
- {0, 41, 0},
- {0, 42, 0},
- {0, 43, 0},
- {0, 44, 0},
- {0, 45, 0},
- {0, 46, 0},
- {0, 47, 0},
- {0, 48, 0},
- {0, 49, 0},
+static const u8 sMapHealLocations[][3] =
+{
+ {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F},
+ {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), HEAL_LOCATION_OLDALE_TOWN},
+ {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), HEAL_LOCATION_DEWFORD_TOWN},
+ {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), HEAL_LOCATION_LAVARIDGE_TOWN},
+ {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), HEAL_LOCATION_FALLARBOR_TOWN},
+ {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), HEAL_LOCATION_VERDANTURF_TOWN},
+ {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), HEAL_LOCATION_PACIFIDLOG_TOWN},
+ {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), HEAL_LOCATION_PETALBURG_CITY},
+ {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), HEAL_LOCATION_SLATEPORT_CITY},
+ {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), HEAL_LOCATION_MAUVILLE_CITY},
+ {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), HEAL_LOCATION_RUSTBORO_CITY},
+ {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), HEAL_LOCATION_FORTREE_CITY},
+ {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), HEAL_LOCATION_LILYCOVE_CITY},
+ {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), HEAL_LOCATION_MOSSDEEP_CITY},
+ {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), HEAL_LOCATION_SOOTOPOLIS_CITY},
+ {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), HEAL_LOCATION_EVER_GRANDE_CITY_1},
+ {MAP_GROUP(ROUTE101), MAP_NUM(ROUTE101), 0},
+ {MAP_GROUP(ROUTE102), MAP_NUM(ROUTE102), 0},
+ {MAP_GROUP(ROUTE103), MAP_NUM(ROUTE103), 0},
+ {MAP_GROUP(ROUTE104), MAP_NUM(ROUTE104), 0},
+ {MAP_GROUP(ROUTE105), MAP_NUM(ROUTE105), 0},
+ {MAP_GROUP(ROUTE106), MAP_NUM(ROUTE106), 0},
+ {MAP_GROUP(ROUTE107), MAP_NUM(ROUTE107), 0},
+ {MAP_GROUP(ROUTE108), MAP_NUM(ROUTE108), 0},
+ {MAP_GROUP(ROUTE109), MAP_NUM(ROUTE109), 0},
+ {MAP_GROUP(ROUTE110), MAP_NUM(ROUTE110), 0},
+ {MAP_GROUP(ROUTE111), MAP_NUM(ROUTE111), 0},
+ {MAP_GROUP(ROUTE112), MAP_NUM(ROUTE112), 0},
+ {MAP_GROUP(ROUTE113), MAP_NUM(ROUTE113), 0},
+ {MAP_GROUP(ROUTE114), MAP_NUM(ROUTE114), 0},
+ {MAP_GROUP(ROUTE115), MAP_NUM(ROUTE115), 0},
+ {MAP_GROUP(ROUTE116), MAP_NUM(ROUTE116), 0},
+ {MAP_GROUP(ROUTE117), MAP_NUM(ROUTE117), 0},
+ {MAP_GROUP(ROUTE118), MAP_NUM(ROUTE118), 0},
+ {MAP_GROUP(ROUTE119), MAP_NUM(ROUTE119), 0},
+ {MAP_GROUP(ROUTE120), MAP_NUM(ROUTE120), 0},
+ {MAP_GROUP(ROUTE121), MAP_NUM(ROUTE121), 0},
+ {MAP_GROUP(ROUTE122), MAP_NUM(ROUTE122), 0},
+ {MAP_GROUP(ROUTE123), MAP_NUM(ROUTE123), 0},
+ {MAP_GROUP(ROUTE124), MAP_NUM(ROUTE124), 0},
+ {MAP_GROUP(ROUTE125), MAP_NUM(ROUTE125), 0},
+ {MAP_GROUP(ROUTE126), MAP_NUM(ROUTE126), 0},
+ {MAP_GROUP(ROUTE127), MAP_NUM(ROUTE127), 0},
+ {MAP_GROUP(ROUTE128), MAP_NUM(ROUTE128), 0},
+ {MAP_GROUP(ROUTE129), MAP_NUM(ROUTE129), 0},
+ {MAP_GROUP(ROUTE130), MAP_NUM(ROUTE130), 0},
+ {MAP_GROUP(ROUTE131), MAP_NUM(ROUTE131), 0},
+ {MAP_GROUP(ROUTE132), MAP_NUM(ROUTE132), 0},
+ {MAP_GROUP(ROUTE133), MAP_NUM(ROUTE133), 0},
+ {MAP_GROUP(ROUTE134), MAP_NUM(ROUTE134), 0},
};
static const u8 *const sEverGrandeCityAreaNames[] =
@@ -1717,22 +1719,22 @@ void sub_80FC69C(void)
switch (sFlyDataPtr->regionMap.mapSectionId)
{
case MAPSEC_SOUTHERN_ISLAND:
- sub_8053538(22);
+ sub_8053538(HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR);
break;
case MAPSEC_BATTLE_TOWER:
- sub_8053538(21);
+ sub_8053538(HEAL_LOCATION_BATTLE_TOWER_OUTSIDE);
break;
case MAPSEC_LITTLEROOT_TOWN:
- sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13);
+ sub_8053538((gSaveBlock2.playerGender == MALE) ? HEAL_LOCATION_LITTLEROOT_TOWN_1 : HEAL_LOCATION_LITTLEROOT_TOWN_2);
break;
case MAPSEC_EVER_GRANDE_CITY:
- sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && sFlyDataPtr->regionMap.everGrandeCityArea == 0) ? 20 : 11);
+ sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && sFlyDataPtr->regionMap.everGrandeCityArea == 0) ? HEAL_LOCATION_EVER_GRANDE_CITY_2 : HEAL_LOCATION_EVER_GRANDE_CITY_1);
break;
default:
- if (sUnknown_083E7920[sFlyDataPtr->regionMap.mapSectionId][2] != 0)
- sub_8053538(sUnknown_083E7920[sFlyDataPtr->regionMap.mapSectionId][2]);
+ if (sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][2] != 0)
+ sub_8053538(sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][2]);
else
- warp1_set_2(sUnknown_083E7920[sFlyDataPtr->regionMap.mapSectionId][0], sUnknown_083E7920[sFlyDataPtr->regionMap.mapSectionId][1], -1);
+ warp1_set_2(sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][0], sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][1], -1);
break;
}
sub_80865BC();
diff --git a/src/tv.c b/src/tv.c
index fd6b7c62f..68694c058 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -432,7 +432,7 @@ void ClearTVShowData(void)
{
u8 showidx;
u8 extradataidx;
- for (showidx=0; showidx<25; showidx++) {
+ for (showidx=0; showidx<TV_SHOWS_COUNT; showidx++) {
gSaveBlock1.tvShows[showidx].common.kind = 0;
gSaveBlock1.tvShows[showidx].common.active = 0;
for (extradataidx=0; extradataidx<34; extradataidx++) {
@@ -1341,7 +1341,7 @@ int sub_80BEBC8(struct PokeNews *pokeNews)
{
s8 i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (pokeNews[i].kind == 0)
return i;
@@ -1353,7 +1353,7 @@ void sub_80BEBF4(void)
{
u8 i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
sub_80BEC10(i);
}
@@ -1372,7 +1372,7 @@ void sub_80BEC40(void)
{
if (gSaveBlock1.pokeNews[i].kind == 0)
{
- for (j = i + 1; j < 16; j++)
+ for (j = i + 1; j < POKE_NEWS_COUNT; j++)
{
if (gSaveBlock1.pokeNews[j].kind != 0)
{
@@ -1388,7 +1388,7 @@ void sub_80BEC40(void)
u8 FindAnyTVNewsOnTheAir(void)
{
u8 i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1.pokeNews[i].kind != 0
&& gSaveBlock1.pokeNews[i].state == 1
@@ -1432,7 +1432,7 @@ bool8 GetPriceReduction(u8 arg0)
if (arg0 == 0)
return FALSE;
- for (i=0; i<16; i++)
+ for (i=0; i<POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1.pokeNews[i].kind == arg0)
{
@@ -1475,7 +1475,7 @@ bool8 sub_80BEE48(u8 arg0)
if (arg0 == 0)
return TRUE;
- for (i=0; i<16; i++)
+ for (i=0; i<POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1.pokeNews[i].kind == arg0)
return TRUE;
@@ -1487,7 +1487,7 @@ void sub_80BEE84(u16 var0)
{
u8 i;
- for (i=0; i<16; i++)
+ for (i=0; i<POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1.pokeNews[i].kind)
{
@@ -2189,11 +2189,11 @@ void sub_80BFD20(void)
typedef union ewramStruct_02007000
{
- TVShow tvshows[4][25];
- struct PokeNews pokeNews[4][16];
+ TVShow tvshows[4][TV_SHOWS_COUNT];
+ struct PokeNews pokeNews[4][POKE_NEWS_COUNT];
} ewramStruct_02007000;
-void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[25]);
+void sub_80BFE24(TVShow arg0[TV_SHOWS_COUNT], TVShow arg1[TV_SHOWS_COUNT], TVShow arg2[TV_SHOWS_COUNT], TVShow arg3[TV_SHOWS_COUNT]);
void sub_80C04A0(void);
void sub_80C01D4(void);
@@ -2205,7 +2205,7 @@ void sub_80BFD44(u8 *arg0, u32 arg1, u8 arg2)
ewramStruct_02007000 *ewramTVShows;
for (i = 0; i < 4; i++)
- memcpy(&gUnknown_02007000.tvshows[i], &arg0[i * arg1], 25 * sizeof(TVShow));
+ memcpy(&gUnknown_02007000.tvshows[i], &arg0[i * arg1], TV_SHOWS_COUNT * sizeof(TVShow));
ewramTVShows = &gUnknown_02007000;
switch (arg2)
{
@@ -2230,12 +2230,12 @@ void sub_80BFD44(u8 *arg0, u32 arg1, u8 arg2)
}
s8 sub_80C019C(TVShow tvShows[]);
-bool8 sub_80BFF68(TVShow * tv1[25], TVShow * tv2[25], u8 idx);
+bool8 sub_80BFF68(TVShow * tv1[TV_SHOWS_COUNT], TVShow * tv2[TV_SHOWS_COUNT], u8 idx);
u8 sub_80C004C(TVShow *tv1, TVShow *tv2, u8 idx);
u8 sub_80C00B4(TVShow *tv1, TVShow *tv2, u8 idx);
u8 sub_80C0134(TVShow *tv1, TVShow *tv2, u8 idx);
-void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[25])
+void sub_80BFE24(TVShow arg0[TV_SHOWS_COUNT], TVShow arg1[TV_SHOWS_COUNT], TVShow arg2[TV_SHOWS_COUNT], TVShow arg3[TV_SHOWS_COUNT])
{
u8 i, j;
TVShow **argslist[4];
@@ -2274,7 +2274,7 @@ void sub_80BFE24(TVShow arg0[25], TVShow arg1[25], TVShow arg2[25], TVShow arg3[
}
}
-bool8 sub_80BFF68(TVShow * arg1[25], TVShow * arg2[25], u8 idx)
+bool8 sub_80BFF68(TVShow * arg1[TV_SHOWS_COUNT], TVShow * arg2[TV_SHOWS_COUNT], u8 idx)
{
u8 value;
u8 switchval;
@@ -2677,11 +2677,11 @@ void sub_80C04A0(void)
sub_80BF55C(gSaveBlock1.tvShows, showIdx+5);
}
-void sub_80C05C4(struct PokeNews[16], struct PokeNews[16], struct PokeNews[16], struct PokeNews[16]);
+void sub_80C05C4(struct PokeNews[POKE_NEWS_COUNT], struct PokeNews[POKE_NEWS_COUNT], struct PokeNews[POKE_NEWS_COUNT], struct PokeNews[POKE_NEWS_COUNT]);
void sub_80C0750(void);
void sub_80C0788(void);
-s8 sub_80C0730(struct PokeNews[16], u8);
-void sub_80C06BC(struct PokeNews *[16], struct PokeNews *[16]);
+s8 sub_80C0730(struct PokeNews[POKE_NEWS_COUNT], u8);
+void sub_80C06BC(struct PokeNews *[POKE_NEWS_COUNT], struct PokeNews *[POKE_NEWS_COUNT]);
void sub_80C0514(void *a0, u32 a1, u8 a2)
{
@@ -2710,7 +2710,7 @@ void sub_80C0514(void *a0, u32 a1, u8 a2)
sub_80C0788();
}
-void sub_80C05C4(struct PokeNews a0[16], struct PokeNews a1[16], struct PokeNews a2[16], struct PokeNews a3[16])
+void sub_80C05C4(struct PokeNews a0[POKE_NEWS_COUNT], struct PokeNews a1[POKE_NEWS_COUNT], struct PokeNews a2[POKE_NEWS_COUNT], struct PokeNews a3[POKE_NEWS_COUNT])
{
u8 i;
u8 j;
@@ -2722,7 +2722,7 @@ void sub_80C05C4(struct PokeNews a0[16], struct PokeNews a1[16], struct PokeNews
arglist[2] = &a2;
arglist[3] = &a3;
gUnknown_03000721 = GetLinkPlayerCount();
- for (i = 0; i < 16; i++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
for (j = 0; j < gUnknown_03000721; j++)
{
@@ -2740,7 +2740,7 @@ void sub_80C05C4(struct PokeNews a0[16], struct PokeNews a1[16], struct PokeNews
}
}
-void sub_80C06BC(struct PokeNews *arg0[16], struct PokeNews *arg1[16])
+void sub_80C06BC(struct PokeNews *arg0[POKE_NEWS_COUNT], struct PokeNews *arg1[POKE_NEWS_COUNT])
{
struct PokeNews *str0;
struct PokeNews *str1;
@@ -2757,7 +2757,7 @@ bool8 sub_80C06E8(struct PokeNews *arg0, struct PokeNews *arg1, s8 arg2)
if (arg1->kind == 0)
return FALSE;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (arg0[i].kind == arg1->kind)
return FALSE;
@@ -2779,7 +2779,7 @@ void sub_80C0750(void)
{
u8 i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
{
if (gSaveBlock1.pokeNews[i].kind > 3)
sub_80BEC10(i);
@@ -2793,7 +2793,7 @@ void sub_80C0788(void)
if (FlagGet(FLAG_SYS_GAME_CLEAR) != 1)
{
- for (i = 0; i < 16; i++)
+ for (i = 0; i < POKE_NEWS_COUNT; i++)
gSaveBlock1.pokeNews[i].state = 0;
}
}
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index bdf6f4a44..c8506fbcf 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -141,7 +141,7 @@ void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback)
gUnknown_02039304 = &gUnknown_083DFEC4->unkD164;
gUnknown_02039304->pokeblock = pokeblock;
gUnknown_02039304->callback = callback;
- gUnknown_083DFEC4->unkD162[0] = 2;
+ gUnknown_083DFEC4->unkD162 = 2;
launch_c3_walk_stairs_and_run_once(sub_8136294);
SetMainCallback2(sub_8136244);
}
@@ -152,7 +152,7 @@ static void sub_8136174(void)
gUnknown_02039304->callback = gUnknown_02039308;
gPokeblockMonID = sub_81370E4(gPokeblockMonID);
gUnknown_02039304->unk56 = gPokeblockMonID < 4 ? 0 : 1;
- gUnknown_083DFEC4->unkD162[0] = 2;
+ gUnknown_083DFEC4->unkD162 = 2;
launch_c3_walk_stairs_and_run_once(sub_8136294);
SetMainCallback2(sub_81361E4);
}
@@ -243,7 +243,7 @@ static void sub_8136294(void)
case 6:
gUnknown_083DFEC4->unk76AA = 0;
gUnknown_083DFEC4->unk87E0 = NULL;
- gUnknown_083DFEC4->unk030C.val = 0x20;
+ gUnknown_083DFEC4->unk030C = 0x20;
gUnknown_02039304->unk50++;
break;
case 7:
@@ -285,7 +285,7 @@ static void sub_8136294(void)
break;
case 13:
sub_80F2E18(0);
- gUnknown_083DFEC4->unk8768->unk26 = 0xffd8;
+ gUnknown_083DFEC4->unk8768->pos2.y = 0xffd8;
gUnknown_02039304->unk50++;
break;
case 14:
@@ -317,7 +317,7 @@ static void sub_8136294(void)
}
break;
case 19:
- sub_80F556C(gUnknown_083DFEC4->unk9004);
+ sub_80F556C(gUnknown_083DFEC4->unk9004[0]);
gUnknown_02039304->unk50++;
break;
case 20: