summaryrefslogtreecommitdiff
path: root/src/pokemon_storage_system_4.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pokemon_storage_system_4.c')
-rw-r--r--src/pokemon_storage_system_4.c1366
1 files changed, 309 insertions, 1057 deletions
diff --git a/src/pokemon_storage_system_4.c b/src/pokemon_storage_system_4.c
index db35d60ea..6a1b78192 100644
--- a/src/pokemon_storage_system_4.c
+++ b/src/pokemon_storage_system_4.c
@@ -46,8 +46,8 @@ EWRAM_DATA struct UnkStruct_2000020 *gUnknown_020384EC = NULL;
void sub_809900C(u8 boxId, s8 a1);
s8 sub_8099D90(u8 boxId);
void sub_8099EB0(u8 boxId, s8 a1);
-void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3);
-void sub_809A14C(u16 *vdest);
+void CopyWallpaperTilemap(u16 *buffer, const u16 *tilemap, s8 direction, u8 offset);
+void ClearLowestWallpaperTiles(u16 *buffer);
void sub_809A23C(u8 boxId);
void sub_809A3D0(u8 boxId, s8 a1);
void sub_809A598(void);
@@ -444,448 +444,169 @@ void sub_8099EB0(u8 boxId, s8 a1)
if (a1)
{
gPokemonStorageSystemPtr->unk_08ba = gPokemonStorageSystemPtr->unk_08ba ? FALSE : TRUE;
- sub_809A14C(BG_SCREEN_ADDR(26));
+ ClearLowestWallpaperTiles(BG_SCREEN_ADDR(26));
}
wallpaperTable = gWallpaperTable +gPokemonStorage.wallpaper[boxId];
LoadPalette(wallpaperTable->palettes, gPokemonStorageSystemPtr->unk_08ba * 0x30 + 0x40, 0x60);
LZ77UnCompWram(wallpaperTable->tileMap, gPokemonStorageSystemPtr->unk_0d62);
- sub_8099F58(BG_SCREEN_ADDR(26), gPokemonStorageSystemPtr->unk_0d62, a1, gPokemonStorageSystemPtr->unk_08ba);
+ CopyWallpaperTilemap(BG_SCREEN_ADDR(26), gPokemonStorageSystemPtr->unk_0d62, a1, gPokemonStorageSystemPtr->unk_08ba);
LZ77UnCompVram(wallpaperTable->tiles, BG_CHAR_ADDR(2) + (gPokemonStorageSystemPtr->unk_08ba << 13));
}
-#ifdef NONMATCHING
-void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3)
+/*
+ Copies the wallpaper rectangle tilemap to a buffer,
+ depending on the wallpaper type.
+
+ - buffer : Where to copy the wallpaper to.
+ - tilemap : The wallpaper tilemap to copy.
+ - direction : The direction of the wallpaper.
+ - offset : The offset of the wallpaper tilemap.
+
+ Also depends on stored BG2 X variable in PSS.
+*/
+void CopyWallpaperTilemap(u16 *buffer, const u16 *tilemap, s8 direction, u8 offset)
{
- s16 r6;
- s16 r3;
- u16 sp0 = a3 << 8;
- u16 sp4 = (a3 * 3 + 4) << 12;
- u16 *r4;
- u16 *r7;
- u16 i;
- u16 j;
- s16 sp8 = ((gPokemonStorageSystemPtr->unk_08b4 >> 3) + 10 + a2 * 24) & 0x3f;
- if (sp8 < 13)
+ u16 *dest; // For either all of the wallpaper tilemap, or the first half of it.
+ u16 *dest2; // The second half of wallpaper tilemap; used in case of two halves.
+ u16 *fillDest; // For blanking; used when direction is set.
+
+ u16 x, y; // Temps for copying the tilemap.
+
+ // Temps for copying the tile and palette metadata of the wallpaper.
+ u16 tileMeta;
+ u16 tileOffset = offset * 256;
+ u16 paletteMeta;
+ u16 paletteOffset = (offset * 3 + 4) << 12;
+
+ s16 rectWidth; // The width of the wallpaper, or it's first half.
+ s16 rectWidth2; // Used in case of two halves.
+ s16 rectX = ((gPokemonStorageSystemPtr->unk_08b4 / 8 + 10) + (direction * 24)) & 0x3F;
+
+ s16 fillX; // For blanking; used when direction is set.
+
+ /*
+ Bull**** agbcc behavior discovered here
+ while attempting to match this function:
+ x + (y + z) is NOT the same as x + y + z.
+ Even though it SHOULDN'T make a difference.
+
+ Rather, it's the same as x + z + y. That's
+ old codegen for you.
+ */
+ if (rectX < 13)
{
- r6 = 20;
- r3 = 0;
- r4 = vdest + sp8 + 0x40;
- r7 = NULL;
+ // Copy the wallpaper in full.
+ rectWidth = 20;
+ rectWidth2 = 0;
+ dest = buffer + (rectX + 64);
+ dest2 = NULL;
}
- else if (sp8 < 32)
+ else if (rectX < 32)
{
- r6 = 32 - sp8;
- r3 = 20 - r6;
- r4 = vdest + sp8 + 0x40;
- r7 = vdest + 0x440;
+ // Split copying the wallpaper into two operations.
+ rectWidth = 32 - rectX;
+ rectWidth2 = 20 - rectWidth;
+ dest = buffer + (rectX + 64);
+ dest2 = buffer + 0x440;
}
- else if (sp8 < 45)
+ else if (rectX < 45)
{
- r6 = 20;
- r3 = 0;
- r4 = vdest + sp8 + 0x420;
- r7 = NULL;
+ // Copy the wallpaper in full.
+ rectWidth = 20;
+ rectWidth2 = 0;
+ dest = buffer + (rectX + 0x420);
+ dest2 = NULL;
}
else
{
- r6 = 64 - sp8;
- r3 = 20 - r6;
- r4 = vdest + sp8 + 0x420;
- r7 = vdest + 0x40;
+ // Split copying the wallpaper into two operations.
+ rectWidth = 64 - rectX;
+ rectWidth2 = 20 - rectWidth;
+ dest = buffer + (rectX + 0x420);
+ dest2 = buffer + 0x40;
}
- for (i = 0; i < 18; i++)
+
+ for (y = 0; y < 18; y++)
{
- for (j = 0; j < r6; j++)
+ for(x = 0; x < rectWidth; x++)
{
- u16 tile = ((*src & 0xfff) + sp0) | ((*src & 0xf000) + sp4);
- r4[j] = tile;
- src++;
+ // Get the tile and palette metadata for each
+ // 2 bytes, and copy over into the buffer.
+ tileMeta = (*tilemap & 0xfff) + tileOffset;
+ paletteMeta = (*tilemap & 0xf000) + paletteOffset;
+ dest[x] = paletteMeta | tileMeta;
+ tilemap++;
}
- for (j = 0; j < r3; j++)
+ for(x = 0; x < rectWidth2; x++)
{
- u16 tile = ((*src & 0xfff) + sp0) | ((*src & 0xf000) + sp4);
- r7[j] = tile;
- src++;
+ // Repeat the same process again in case we need
+ // to copy halves.
+ tileMeta = (*tilemap & 0xfff) + tileOffset;
+ paletteMeta = (*tilemap & 0xf000) + paletteOffset;
+ dest2[x] = paletteMeta | tileMeta;
+ tilemap++;
}
- r4 += 0x20;
- r7 += 0x20;
+ dest += 0x20;
+ dest2 += 0x20;
}
- if (a2)
+
+ if (direction != 0)
{
- s16 r4_2;
- u16 *r2;
- if (a2 > 0)
- r4_2 = (sp8 + 20) & 0x3f;
+ fillX = (direction > 0 ? rectX + 20 : rectX - 4) & 0x3F;
+
+ if(fillX < 32)
+ fillDest = buffer + (fillX + 0x40);
else
- r4_2 = (sp8 - 4) & 0x3f;
- r2 = r4_2 < 0x20 ? vdest + r4_2 + 0x40 : vdest + r4_2 + 0x420;
- for (i = 0; i < 4; i++)
+ fillDest = buffer + (fillX + 0x420);
+
+ for(x = 0; x < 4; x++)
{
- for (j = 0; j < 18; j++)
+ for(y = 0; y < 18; y++)
{
- *r2 = 0;
- r2 += 0x20;
+ *fillDest = 0; // Blank the buffer.
+ fillDest += 0x20;
}
- r4_2++;
- r4_2 &= 0x3f;
- r2 = r4_2 < 0x20 ? vdest + r4_2 + 0x40 : vdest + r4_2 + 0x420;
+ // Needs to be one statement, or else it won't match.
+ // fillX = ++fillX & 0x3F; matches, but to have consistency
+ // with ClearLowestWallpaperTiles, which requires var + 1
+ // instead for a similar operation, we'll use that.
+ fillX = (fillX + 1) & 0x3F;
+
+ if (fillX < 32)
+ fillDest = buffer + (fillX + 0x40);
+ else
+ fillDest = buffer + (fillX + 0x420);
}
}
}
-#else
-NAKED void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x20\n"
- "\tmov r9, r0\n"
- "\tadds r5, r1, 0\n"
- "\tlsls r2, 24\n"
- "\tlsls r3, 24\n"
- "\tlsrs r3, 24\n"
- "\tlsls r0, r3, 8\n"
- "\tstr r0, [sp]\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r3\n"
- "\tadds r0, 0x4\n"
- "\tlsls r0, 28\n"
- "\tlsrs r0, 16\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tldr r0, _08099FB8 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldr r1, _08099FBC @ =0x000008b4\n"
- "\tadds r0, r1\n"
- "\tldrh r1, [r0]\n"
- "\tlsrs r1, 3\n"
- "\tadds r1, 0xA\n"
- "\tlsrs r0, r2, 24\n"
- "\tmov r8, r0\n"
- "\tasrs r2, 24\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, r2\n"
- "\tlsls r0, 3\n"
- "\tadds r1, r0\n"
- "\tmovs r0, 0x3F\n"
- "\tands r1, r0\n"
- "\tstr r1, [sp, 0x8]\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r2, 0xC\n"
- "\tbgt _08099FC0\n"
- "\tmovs r6, 0x14\n"
- "\tmovs r3, 0\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, 0x80\n"
- "\tmov r1, r9\n"
- "\tadds r4, r1, r0\n"
- "\tmovs r7, 0\n"
- "\tb _0809A020\n"
- "\t.align 2, 0\n"
- "_08099FB8: .4byte gPokemonStorageSystemPtr\n"
- "_08099FBC: .4byte 0x000008b4\n"
- "_08099FC0:\n"
- "\tcmp r2, 0x1F\n"
- "\tbgt _08099FE6\n"
- "\tmovs r0, 0x20\n"
- "\tsubs r0, r2\n"
- "\tlsls r0, 16\n"
- "\tmovs r1, 0x14\n"
- "\tlsrs r6, r0, 16\n"
- "\tasrs r0, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tlsls r0, r2, 1\n"
- "\tadds r0, 0x80\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmovs r7, 0x88\n"
- "\tlsls r7, 4\n"
- "\tadd r7, r9\n"
- "\tb _0809A020\n"
- "_08099FE6:\n"
- "\tcmp r2, 0x2C\n"
- "\tbgt _08099FFE\n"
- "\tmovs r6, 0x14\n"
- "\tmovs r3, 0\n"
- "\tlsls r0, r2, 1\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmovs r7, 0\n"
- "\tb _0809A020\n"
- "_08099FFE:\n"
- "\tmovs r0, 0x40\n"
- "\tsubs r0, r2\n"
- "\tlsls r0, 16\n"
- "\tmovs r1, 0x14\n"
- "\tlsrs r6, r0, 16\n"
- "\tasrs r0, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tlsls r0, r2, 1\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "\tmov r2, r9\n"
- "\tadds r4, r2, r0\n"
- "\tmov r7, r9\n"
- "\tadds r7, 0x80\n"
- "_0809A020:\n"
- "\tmovs r1, 0\n"
- "\tmov r0, r8\n"
- "\tlsls r0, 24\n"
- "\tstr r0, [sp, 0x14]\n"
- "\tlsls r0, r6, 16\n"
- "\tasrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tlsls r3, 16\n"
- "\tstr r3, [sp, 0xC]\n"
- "\tasrs r2, r3, 16\n"
- "\tstr r2, [sp, 0x10]\n"
- "_0809A036:\n"
- "\tmovs r3, 0\n"
- "\tadds r0, r4, 0\n"
- "\tadds r0, 0x40\n"
- "\tstr r0, [sp, 0x18]\n"
- "\tadds r2, r7, 0\n"
- "\tadds r2, 0x40\n"
- "\tstr r2, [sp, 0x1C]\n"
- "\tadds r1, 0x1\n"
- "\tmov r10, r1\n"
- "\tcmp r3, r8\n"
- "\tbge _0809A07A\n"
- "\tldr r0, _0809A0D4 @ =0x00000fff\n"
- "\tmov r12, r0\n"
- "\tmovs r6, 0xF0\n"
- "\tlsls r6, 8\n"
- "_0809A054:\n"
- "\tldrh r2, [r5]\n"
- "\tmov r0, r12\n"
- "\tands r0, r2\n"
- "\tldr r1, [sp]\n"
- "\tadds r0, r1, r0\n"
- "\tadds r1, r6, 0\n"
- "\tands r1, r2\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tadds r1, r2, r1\n"
- "\torrs r1, r0\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r4\n"
- "\tstrh r1, [r0]\n"
- "\tadds r5, 0x2\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, r8\n"
- "\tblt _0809A054\n"
- "_0809A07A:\n"
- "\tmovs r3, 0\n"
- "\tldr r0, [sp, 0x10]\n"
- "\tcmp r3, r0\n"
- "\tbge _0809A0B4\n"
- "\tldr r1, _0809A0D4 @ =0x00000fff\n"
- "\tmov r12, r1\n"
- "\tmovs r6, 0xF0\n"
- "\tlsls r6, 8\n"
- "\tldr r2, [sp, 0xC]\n"
- "\tasrs r4, r2, 16\n"
- "_0809A08E:\n"
- "\tldrh r2, [r5]\n"
- "\tmov r0, r12\n"
- "\tands r0, r2\n"
- "\tldr r1, [sp]\n"
- "\tadds r0, r1, r0\n"
- "\tadds r1, r6, 0\n"
- "\tands r1, r2\n"
- "\tldr r2, [sp, 0x4]\n"
- "\tadds r1, r2, r1\n"
- "\torrs r1, r0\n"
- "\tlsls r0, r3, 1\n"
- "\tadds r0, r7\n"
- "\tstrh r1, [r0]\n"
- "\tadds r5, 0x2\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, r4\n"
- "\tblt _0809A08E\n"
- "_0809A0B4:\n"
- "\tldr r4, [sp, 0x18]\n"
- "\tldr r7, [sp, 0x1C]\n"
- "\tmov r1, r10\n"
- "\tlsls r0, r1, 16\n"
- "\tlsrs r1, r0, 16\n"
- "\tcmp r1, 0x11\n"
- "\tbls _0809A036\n"
- "\tldr r0, [sp, 0x14]\n"
- "\tasrs r2, r0, 24\n"
- "\tcmp r2, 0\n"
- "\tbeq _0809A13A\n"
- "\tcmp r2, 0\n"
- "\tble _0809A0D8\n"
- "\tldr r1, [sp, 0x8]\n"
- "\tadds r1, 0x14\n"
- "\tb _0809A0DC\n"
- "\t.align 2, 0\n"
- "_0809A0D4: .4byte 0x00000fff\n"
- "_0809A0D8:\n"
- "\tldr r1, [sp, 0x8]\n"
- "\tsubs r1, 0x4\n"
- "_0809A0DC:\n"
- "\tmovs r0, 0x3F\n"
- "\tands r1, r0\n"
- "\tadds r4, r1, 0\n"
- "\tadds r0, r4, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A0EE\n"
- "\tlsls r0, 1\n"
- "\tadds r0, 0x80\n"
- "\tb _0809A0F6\n"
- "_0809A0EE:\n"
- "\tlsls r0, 1\n"
- "\tmovs r2, 0x84\n"
- "\tlsls r2, 4\n"
- "\tadds r0, r2\n"
- "_0809A0F6:\n"
- "\tmov r1, r9\n"
- "\tadds r2, r1, r0\n"
- "\tmovs r3, 0\n"
- "\tmovs r6, 0\n"
- "_0809A0FE:\n"
- "\tmovs r1, 0\n"
- "\tadds r5, r3, 0x1\n"
- "\tlsls r3, r4, 16\n"
- "_0809A104:\n"
- "\tstrh r6, [r2]\n"
- "\tadds r2, 0x40\n"
- "\tadds r0, r1, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r1, r0, 16\n"
- "\tcmp r1, 0x11\n"
- "\tbls _0809A104\n"
- "\tasrs r0, r3, 16\n"
- "\tadds r4, r0, 0x1\n"
- "\tmovs r0, 0x3F\n"
- "\tands r4, r0\n"
- "\tadds r0, r4, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A126\n"
- "\tlsls r0, 1\n"
- "\tadds r0, 0x80\n"
- "\tb _0809A12E\n"
- "_0809A126:\n"
- "\tlsls r0, 1\n"
- "\tmovs r2, 0x84\n"
- "\tlsls r2, 4\n"
- "\tadds r0, r2\n"
- "_0809A12E:\n"
- "\tmov r1, r9\n"
- "\tadds r2, r1, r0\n"
- "\tlsls r0, r5, 16\n"
- "\tlsrs r3, r0, 16\n"
- "\tcmp r3, 0x3\n"
- "\tbls _0809A0FE\n"
- "_0809A13A:\n"
- "\tadd sp, 0x20\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0");
-}
-#endif
-#ifdef NONMATCHING
-void sub_809A14C(u16 *vdest)
+/*
+ Clears the lowest line of a wallpaper buffer.
+ Depends on stored BG2 X variable in PSS.
+
+ - buffer : Wallpaper buffer.
+*/
+void ClearLowestWallpaperTiles(u16 *buffer)
{
- u16 *r2;
- u16 i;
- int r3 = ((gPokemonStorageSystemPtr->unk_08b4 >> 3) + 30) & 0x3f;
- r2 = vdest + (r3 < 0x20 ? r3 + 0x260 : r3 + 0x640);
- for (i = 0; i < 0x2b; i++)
- {
- *r2++ = 0;
- r3++;
- r3 &= 0x3f;
- if (r3 == 0)
- r2 -= 0x420;
- if (r3 == 0x20)
- r2 += 0x3e0;
- }
-}
-#else
-NAKED void sub_809A14C(u16 *vdest)
-{
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tadds r2, r0, 0\n"
- "\tldr r0, _0809A174 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldr r1, _0809A178 @ =0x000008b4\n"
- "\tadds r0, r1\n"
- "\tldrh r0, [r0]\n"
- "\tlsrs r0, 3\n"
- "\tadds r3, r0, 0\n"
- "\tadds r3, 0x1E\n"
- "\tmovs r0, 0x3F\n"
- "\tands r3, r0\n"
- "\tadds r0, r3, 0\n"
- "\tcmp r0, 0x1F\n"
- "\tbgt _0809A17C\n"
- "\tlsls r0, 1\n"
- "\tmovs r6, 0x98\n"
- "\tlsls r6, 3\n"
- "\tadds r0, r6\n"
- "\tb _0809A184\n"
- "\t.align 2, 0\n"
- "_0809A174: .4byte gPokemonStorageSystemPtr\n"
- "_0809A178: .4byte 0x000008b4\n"
- "_0809A17C:\n"
- "\tlsls r0, 1\n"
- "\tmovs r1, 0xC8\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r1\n"
- "_0809A184:\n"
- "\tadds r2, r0\n"
- "\tmovs r0, 0\n"
- "\tmovs r5, 0\n"
- "\tmovs r4, 0x3F\n"
- "_0809A18C:\n"
- "\tstrh r5, [r2]\n"
- "\tadds r2, 0x2\n"
- "\tadds r3, 0x1\n"
- "\tands r3, r4\n"
- "\tadds r1, r3, 0\n"
- "\tcmp r1, 0\n"
- "\tbne _0809A19E\n"
- "\tldr r6, _0809A1B8 @ =0xfffff7c0\n"
- "\tadds r2, r6\n"
- "_0809A19E:\n"
- "\tcmp r1, 0x20\n"
- "\tbne _0809A1A8\n"
- "\tmovs r1, 0xF8\n"
- "\tlsls r1, 3\n"
- "\tadds r2, r1\n"
- "_0809A1A8:\n"
- "\tadds r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x2B\n"
- "\tbls _0809A18C\n"
- "\tpop {r4-r6}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_0809A1B8: .4byte 0xfffff7c0");
+ u16 x;
+ s16 rectX = ((gPokemonStorageSystemPtr->unk_08b4 / 8) + 30) & 0x3F;
+
+ if (rectX < 32)
+ buffer += rectX + 0x260;
+ else
+ buffer += rectX + 0x640;
+
+ for (x = 0; x < 44; x++)
+ {
+ *buffer++ = 0;
+ // Needs to be one statement in order to match.
+ rectX = (rectX + 1) & 0x3F;
+ if (rectX == 0)
+ buffer -= 0x420;
+ if (rectX == 32)
+ buffer += 0x3e0;
+ }
}
-#endif
void sub_809A1BC(const u8 *a0, const u8 *text)
{
@@ -2234,73 +1955,79 @@ u8 sub_809C464(void)
return r9;
}
-#ifdef NONMATCHING
u8 sub_809C664(void)
{
- s8 r10 = sBoxCursorArea;
- s8 r4 = sBoxCursorPosition;
- u8 r8;
- u8 r9;
+ u8 retVal;
+ bool8 gotoBox;
+ s8 cursorArea;
+ s8 cursorPosition;
do
{
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
gPokemonStorageSystemPtr->unk_11df = 0;
gPokemonStorageSystemPtr->unk_11de = 0;
gPokemonStorageSystemPtr->unk_11e3 = 0;
- r9 = FALSE;
- r8 = 0;
+ gotoBox = FALSE;
+ retVal = 0;
+
if (JOY_REPT(DPAD_UP))
{
- r4--;
- if (r4 < 0)
- r4 = 6;
- if (r4 != sBoxCursorPosition)
- r8 = 1;
+ if (--cursorPosition < 0)
+ cursorPosition = 6;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
break;
}
+
if (JOY_REPT(DPAD_DOWN))
{
- r4++;
- if (r4 > 6)
- r4 = 0;
- if (r4 != sBoxCursorPosition)
- r8 = 1;
+ if (++cursorPosition > 6)
+ cursorPosition = 0;
+ if (cursorPosition != sBoxCursorPosition)
+ retVal = 1;
break;
}
- if ((JOY_REPT(DPAD_LEFT)) && sBoxCursorPosition != 0)
+
+ if (JOY_REPT(DPAD_LEFT) && sBoxCursorPosition != 0)
{
- r8 = 1;
+ retVal = 1;
gPokemonStorageSystemPtr->unk_11e2 = sBoxCursorPosition;
- r4 = 0;
+ cursorPosition = 0;
break;
}
+
if (JOY_REPT(DPAD_RIGHT))
{
if (sBoxCursorPosition == 0)
{
- r8 = 1;
- r4 = gPokemonStorageSystemPtr->unk_11e2;
+ retVal = 1;
+ cursorPosition = gPokemonStorageSystemPtr->unk_11e2;
}
else
{
- r8 = 6;
- r10 = 0;
- r4 = 0;
+ retVal = 6;
+ cursorArea = 0;
+ cursorPosition = 0;
}
break;
}
+
if (JOY_NEW(A_BUTTON))
{
if (sBoxCursorPosition == 6)
{
if (gPokemonStorageSystemPtr->unk_0005 == 1)
return 4;
- r9 = TRUE;
+
+ gotoBox = TRUE;
}
else if (sub_809CAB0())
{
- if (gUnknown_020384E9 == 0)
+ if (!gUnknown_020384E9)
return 8;
+
switch (sub_809CE4C(0))
{
case 1:
@@ -2316,575 +2043,187 @@ u8 sub_809C664(void)
}
}
}
+
if (JOY_NEW(B_BUTTON))
{
if (gPokemonStorageSystemPtr->unk_0005 == 1)
return 16;
- r9 = TRUE;
+
+ gotoBox = TRUE;
}
- if (r9)
+
+ if (gotoBox)
{
- r8 = 6;
- r10 = 0;
- r4 = 0;
+ retVal = 6;
+ cursorArea = 0;
+ cursorPosition = 0;
break;
}
+
if (JOY_NEW(SELECT_BUTTON))
{
sub_809CD88();
return 0;
}
} while (0);
- if (r8)
- sub_809AF18(r10, r4);
- return r8;
-}
-#else
-NAKED u8 sub_809C664(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tldr r0, _0809C6D8 @ =sBoxCursorArea\n"
- "\tldrb r0, [r0]\n"
- "\tmov r10, r0\n"
- "\tldr r7, _0809C6DC @ =sBoxCursorPosition\n"
- "\tldrb r4, [r7]\n"
- "\tldr r2, _0809C6E0 @ =gPokemonStorageSystemPtr\n"
- "\tldr r5, [r2]\n"
- "\tldr r1, _0809C6E4 @ =0x000011df\n"
- "\tadds r0, r5, r1\n"
- "\tmovs r1, 0\n"
- "\tstrb r1, [r0]\n"
- "\tldr r3, _0809C6E8 @ =0x000011de\n"
- "\tadds r0, r5, r3\n"
- "\tstrb r1, [r0]\n"
- "\tadds r3, 0x5\n"
- "\tadds r0, r5, r3\n"
- "\tstrb r1, [r0]\n"
- "\tmov r9, r1\n"
- "\tmov r8, r1\n"
- "\tldr r1, _0809C6EC @ =gMain\n"
- "\tldrh r3, [r1, 0x30]\n"
- "\tmovs r0, 0x40\n"
- "\tands r0, r3\n"
- "\tadds r6, r7, 0\n"
- "\tmov r12, r2\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C6A8\n"
- "\tb _0809C81C\n"
- "_0809C6A8:\n"
- "\tmovs r0, 0x80\n"
- "\tands r0, r3\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C6F0\n"
- "\tlsls r0, r4, 24\n"
- "\tmovs r1, 0x80\n"
- "\tlsls r1, 17\n"
- "\tadds r0, r1\n"
- "\tlsrs r4, r0, 24\n"
- "\tasrs r0, 24\n"
- "\tcmp r0, 0x6\n"
- "\tble _0809C6C2\n"
- "\tmovs r4, 0\n"
- "_0809C6C2:\n"
- "\tlsls r0, r4, 24\n"
- "\tasrs r0, 24\n"
- "\tmovs r1, 0\n"
- "\tldrsb r1, [r6, r1]\n"
- "\tcmp r0, r1\n"
- "\tbne _0809C6D0\n"
- "\tb _0809C83C\n"
- "_0809C6D0:\n"
- "\tmovs r2, 0x1\n"
- "\tmov r8, r2\n"
- "\tb _0809C842\n"
- "\t.align 2, 0\n"
- "_0809C6D8: .4byte sBoxCursorArea\n"
- "_0809C6DC: .4byte sBoxCursorPosition\n"
- "_0809C6E0: .4byte gPokemonStorageSystemPtr\n"
- "_0809C6E4: .4byte 0x000011df\n"
- "_0809C6E8: .4byte 0x000011de\n"
- "_0809C6EC: .4byte gMain\n"
- "_0809C6F0:\n"
- "\tmovs r0, 0x20\n"
- "\tands r0, r3\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C714\n"
- "\tldrb r1, [r6]\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C714\n"
- "\tmovs r3, 0x1\n"
- "\tmov r8, r3\n"
- "\tldr r2, _0809C710 @ =0x000011e2\n"
- "\tadds r0, r5, r2\n"
- "\tstrb r1, [r0]\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "\t.align 2, 0\n"
- "_0809C710: .4byte 0x000011e2\n"
- "_0809C714:\n"
- "\tldrh r1, [r2, 0x30]\n"
- "\tmovs r0, 0x10\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C748\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _0809C73C\n"
- "\tmovs r3, 0x1\n"
- "\tmov r8, r3\n"
- "\tmov r1, r12\n"
- "\tldr r0, [r1]\n"
- "\tldr r2, _0809C738 @ =0x000011e2\n"
- "\tadds r0, r2\n"
- "\tldrb r4, [r0]\n"
- "\tb _0809C83C\n"
- "\t.align 2, 0\n"
- "_0809C738: .4byte 0x000011e2\n"
- "_0809C73C:\n"
- "\tmovs r3, 0x6\n"
- "\tmov r8, r3\n"
- "\tmovs r0, 0\n"
- "\tmov r10, r0\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "_0809C748:\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7D0\n"
- "\tmovs r0, 0\n"
- "\tldrsb r0, [r6, r0]\n"
- "\tcmp r0, 0x6\n"
- "\tbne _0809C76E\n"
- "\tmov r1, r12\n"
- "\tldr r0, [r1]\n"
- "\tldrb r0, [r0, 0x5]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0809C768\n"
- "\tmovs r0, 0x4\n"
- "\tb _0809C84C\n"
- "_0809C768:\n"
- "\tmovs r2, 0x1\n"
- "\tmov r9, r2\n"
- "\tb _0809C7D0\n"
- "_0809C76E:\n"
- "\tbl sub_809CAB0\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7D0\n"
- "\tldr r0, _0809C784 @ =gUnknown_020384E9\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _0809C788\n"
- "\tmovs r0, 0x8\n"
- "\tb _0809C84C\n"
- "\t.align 2, 0\n"
- "_0809C784: .4byte gUnknown_020384E9\n"
- "_0809C788:\n"
- "\tmovs r0, 0\n"
- "\tbl sub_809CE4C\n"
- "\tsubs r0, 0x1\n"
- "\tlsls r0, 24\n"
- "\tasrs r0, 24\n"
- "\tcmp r0, 0x4\n"
- "\tbhi _0809C7D0\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _0809C7A4 @ =_0809C7A8\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
- "_0809C7A4: .4byte _0809C7A8\n"
- "\t.align 2, 0\n"
- "_0809C7A8:\n"
- "\t.4byte _0809C7BC\n"
- "\t.4byte _0809C7C0\n"
- "\t.4byte _0809C7C4\n"
- "\t.4byte _0809C7C8\n"
- "\t.4byte _0809C7CC\n"
- "_0809C7BC:\n"
- "\tmovs r0, 0xB\n"
- "\tb _0809C84C\n"
- "_0809C7C0:\n"
- "\tmovs r0, 0xC\n"
- "\tb _0809C84C\n"
- "_0809C7C4:\n"
- "\tmovs r0, 0xD\n"
- "\tb _0809C84C\n"
- "_0809C7C8:\n"
- "\tmovs r0, 0xE\n"
- "\tb _0809C84C\n"
- "_0809C7CC:\n"
- "\tmovs r0, 0xF\n"
- "\tb _0809C84C\n"
- "_0809C7D0:\n"
- "\tldr r2, _0809C7EC @ =gMain\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C7F8\n"
- "\tldr r0, _0809C7F0 @ =gPokemonStorageSystemPtr\n"
- "\tldr r0, [r0]\n"
- "\tldrb r0, [r0, 0x5]\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0809C7F4\n"
- "\tmovs r0, 0x10\n"
- "\tb _0809C84C\n"
- "\t.align 2, 0\n"
- "_0809C7EC: .4byte gMain\n"
- "_0809C7F0: .4byte gPokemonStorageSystemPtr\n"
- "_0809C7F4:\n"
- "\tmovs r3, 0x1\n"
- "\tmov r9, r3\n"
- "_0809C7F8:\n"
- "\tmov r0, r9\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C80A\n"
- "\tmovs r1, 0x6\n"
- "\tmov r8, r1\n"
- "\tmovs r2, 0\n"
- "\tmov r10, r2\n"
- "\tmovs r4, 0\n"
- "\tb _0809C83C\n"
- "_0809C80A:\n"
- "\tldrh r1, [r2, 0x2E]\n"
- "\tmovs r0, 0x4\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _0809C83C\n"
- "\tbl sub_809CD88\n"
- "\tmovs r0, 0\n"
- "\tb _0809C84C\n"
- "_0809C81C:\n"
- "\tlsls r0, r4, 24\n"
- "\tmovs r3, 0xFF\n"
- "\tlsls r3, 24\n"
- "\tadds r0, r3\n"
- "\tlsrs r4, r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbge _0809C82C\n"
- "\tmovs r4, 0x6\n"
- "_0809C82C:\n"
- "\tlsls r0, r4, 24\n"
- "\tasrs r0, 24\n"
- "\tmovs r1, 0\n"
- "\tldrsb r1, [r7, r1]\n"
- "\tcmp r0, r1\n"
- "\tbeq _0809C83C\n"
- "\tmovs r0, 0x1\n"
- "\tmov r8, r0\n"
- "_0809C83C:\n"
- "\tmov r1, r8\n"
- "\tcmp r1, 0\n"
- "\tbeq _0809C84A\n"
- "_0809C842:\n"
- "\tmov r0, r10\n"
- "\tadds r1, r4, 0\n"
- "\tbl sub_809AF18\n"
- "_0809C84A:\n"
- "\tmov r0, r8\n"
- "_0809C84C:\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1");
+
+ if (retVal != 0)
+ {
+ sub_809AF18(cursorArea, cursorPosition);
+ }
+
+ return retVal;
}
-#endif
u8 sub_809C85C(void)
{
u8 retVal;
- s8 var0;
- register s8 var1 asm("r5"); // FAKEMATCHING: r5 and r6 become swapped without this register hack
-
- gPokemonStorageSystemPtr->unk_11df = 0;
- gPokemonStorageSystemPtr->unk_11de = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 0;
+ s8 cursorArea;
+ s8 cursorPosition;
- if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ do
{
- if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ gPokemonStorageSystemPtr->unk_11df = 0;
+ gPokemonStorageSystemPtr->unk_11de = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 0;
+
+ if (JOY_REPT(DPAD_UP))
{
retVal = 1;
- var0 = 0;
- var1 = 2;
+ cursorArea = 3;
+ cursorPosition = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
}
- else
+ else if (JOY_REPT(DPAD_DOWN))
{
- if (gMain.heldKeys & DPAD_LEFT)
+ retVal = 1;
+ cursorArea = 0;
+ cursorPosition = 2;
+ break;
+ }
+
+ if (gMain.heldKeys & DPAD_LEFT)
+ return 10;
+ if (gMain.heldKeys & DPAD_RIGHT)
+ return 9;
+
+ if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (gMain.heldKeys & L_BUTTON)
return 10;
- if (gMain.heldKeys & DPAD_RIGHT)
+ if (gMain.heldKeys & R_BUTTON)
return 9;
- if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
- {
- if (gMain.heldKeys & L_BUTTON)
- return 10;
- if (gMain.heldKeys & R_BUTTON)
- return 9;
- }
-
- if (gMain.newKeys & A_BUTTON)
- {
- sub_809A860(0);
- sub_809CA8C();
- return 7;
- }
+ }
- if (gMain.newKeys & B_BUTTON)
- return 16;
+ if (JOY_NEW(A_BUTTON))
+ {
+ sub_809A860(FALSE);
+ sub_809CA8C();
+ return 7;
+ }
- if (gMain.newKeys & SELECT_BUTTON)
- {
- sub_809CD88();
- return 0;
- }
+ if (JOY_NEW(B_BUTTON))
+ return 16;
- retVal = 0;
+ if (JOY_NEW(SELECT_BUTTON))
+ {
+ sub_809CD88();
+ return 0;
}
- }
- else
- {
- retVal = 1;
- var0 = 3;
- var1 = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 1;
- }
- if (retVal)
+ retVal = 0;
+ } while (0);
+
+ if (retVal != 0)
{
- if (var0 != 2)
- sub_809A860(0);
- sub_809AF18(var0, var1);
- return retVal;
+ if (cursorArea != 2)
+ sub_809A860(FALSE);
+ sub_809AF18(cursorArea, cursorPosition);
}
return retVal;
}
-#ifdef NONMATCHING
u8 sub_809C944(void)
{
- u8 r6;
- s8 var0 = sBoxCursorArea;
- s8 var1 = sBoxCursorPosition;
-
- gPokemonStorageSystemPtr->unk_11df = 0;
- gPokemonStorageSystemPtr->unk_11de = 0;
- gPokemonStorageSystemPtr->unk_11e3 = 0;
+ u8 retVal;
+ s8 cursorArea;
+ s8 cursorPosition;
- if (!(gMain.newAndRepeatedKeys & DPAD_UP))
+ do
{
- if (gMain.newAndRepeatedKeys & (DPAD_DOWN | START_BUTTON))
+ cursorArea = sBoxCursorArea;
+ cursorPosition = sBoxCursorPosition;
+ gPokemonStorageSystemPtr->unk_11df = 0;
+ gPokemonStorageSystemPtr->unk_11de = 0;
+ gPokemonStorageSystemPtr->unk_11e3 = 0;
+
+ if (JOY_REPT(DPAD_UP))
{
- r6 = 1;
- var0 = 2;
- var1 = 0;
+ retVal = 1;
+ cursorArea = 0;
+ gPokemonStorageSystemPtr->unk_11de = -1;
+ if (sBoxCursorPosition == 0)
+ cursorPosition = 24;
+ else
+ cursorPosition = 29;
+ gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
+ }
+
+ if (JOY_REPT(DPAD_DOWN | START_BUTTON))
+ {
+ retVal = 1;
+ cursorArea = 2;
+ cursorPosition = 0;
gPokemonStorageSystemPtr->unk_11e3 = 1;
+ break;
}
- else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
+
+ if (JOY_REPT(DPAD_LEFT))
{
- r6 = 1;
- var1 -= 1;
- if (var1 < 0)
+ retVal = 1;
+ if (--cursorPosition < 0)
{
gPokemonStorageSystemPtr->unk_11df = -1;
- var1 = 1;
+ cursorPosition = 1;
}
+ break;
}
- else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
+
+ if (JOY_REPT(DPAD_RIGHT))
{
- r6 = 1;
- var1 += 1;
- if (var1 > 1)
+ retVal = 1;
+ if (++cursorPosition > 1)
{
gPokemonStorageSystemPtr->unk_11df = 1;
- var1 = 0;
+ cursorPosition = 0;
}
+ break;
}
- else if (gMain.newKeys & A_BUTTON)
- {
- return var1 == 0 ? 5 : 4;
- }
- else if (gMain.newKeys & B_BUTTON)
- {
+
+ if (JOY_NEW(A_BUTTON))
+ return (cursorPosition == 0) ? 5 : 4;
+ if (JOY_NEW(B_BUTTON))
return 16;
- }
- else if (gMain.newKeys & SELECT_BUTTON)
+
+ if (JOY_NEW(SELECT_BUTTON))
{
sub_809CD88();
return 0;
}
- else
- {
- r6 = 0;
- }
- }
- else
- {
- r6 = 1;
- var0 = 0;
- gPokemonStorageSystemPtr->unk_11de = -1;
- var1 = !sBoxCursorPosition ? 24 : 29;
- gPokemonStorageSystemPtr->unk_11e3 = 1;
- }
- if (r6)
+ retVal = 0;
+ } while (0);
+
+ if (retVal != 0)
{
- sub_809AF18(var0, var1);
+ sub_809AF18(cursorArea, cursorPosition);
}
- return r6;
+ return retVal;
}
-#else
-NAKED
-u8 sub_809C944(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- ldr r0, _0809C988 @ =sBoxCursorArea\n\
- ldrb r0, [r0]\n\
- mov r12, r0\n\
- ldr r7, _0809C98C @ =sBoxCursorPosition\n\
- ldrb r3, [r7]\n\
- ldr r0, _0809C990 @ =gPokemonStorageSystemPtr\n\
- ldr r1, [r0]\n\
- ldr r0, _0809C994 @ =0x000011df\n\
- adds r5, r1, r0\n\
- movs r0, 0\n\
- strb r0, [r5]\n\
- ldr r2, _0809C998 @ =0x000011de\n\
- adds r4, r1, r2\n\
- strb r0, [r4]\n\
- adds r2, 0x5\n\
- adds r1, r2\n\
- strb r0, [r1]\n\
- ldr r6, _0809C99C @ =gMain\n\
- ldrh r2, [r6, 0x30]\n\
- movs r0, 0x40\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _0809CA14\n\
- movs r0, 0x88\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9A0\n\
- movs r6, 0x1\n\
- movs r0, 0x2\n\
- mov r12, r0\n\
- movs r3, 0\n\
- b _0809CA2A\n\
- .align 2, 0\n\
-_0809C988: .4byte sBoxCursorArea\n\
-_0809C98C: .4byte sBoxCursorPosition\n\
-_0809C990: .4byte gPokemonStorageSystemPtr\n\
-_0809C994: .4byte 0x000011df\n\
-_0809C998: .4byte 0x000011de\n\
-_0809C99C: .4byte gMain\n\
-_0809C9A0:\n\
- movs r0, 0x20\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9C0\n\
- movs r6, 0x1\n\
- lsls r0, r3, 24\n\
- movs r1, 0xFF\n\
- lsls r1, 24\n\
- adds r0, r1\n\
- lsrs r3, r0, 24\n\
- cmp r0, 0\n\
- bge _0809CA2C\n\
- movs r0, 0xFF\n\
- strb r0, [r5]\n\
- movs r3, 0x1\n\
- b _0809CA2C\n\
-_0809C9C0:\n\
- movs r0, 0x10\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0809C9E0\n\
- movs r6, 0x1\n\
- lsls r0, r3, 24\n\
- movs r2, 0x80\n\
- lsls r2, 17\n\
- adds r0, r2\n\
- lsrs r3, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x1\n\
- ble _0809CA2C\n\
- strb r6, [r5]\n\
- movs r3, 0\n\
- b _0809CA2C\n\
-_0809C9E0:\n\
- ldrh r1, [r6, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809C9F4\n\
- movs r0, 0x4\n\
- cmp r3, 0\n\
- bne _0809CA3A\n\
- movs r0, 0x5\n\
- b _0809CA3A\n\
-_0809C9F4:\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CA00\n\
- movs r0, 0x10\n\
- b _0809CA3A\n\
-_0809CA00:\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CA10\n\
- bl sub_809CD88\n\
- movs r0, 0\n\
- b _0809CA3A\n\
-_0809CA10:\n\
- movs r6, 0\n\
- b _0809CA38\n\
-_0809CA14:\n\
- movs r6, 0x1\n\
- movs r0, 0\n\
- mov r12, r0\n\
- movs r0, 0xFF\n\
- strb r0, [r4]\n\
- movs r0, 0\n\
- ldrsb r0, [r7, r0]\n\
- movs r3, 0x1D\n\
- cmp r0, 0\n\
- bne _0809CA2A\n\
- movs r3, 0x18\n\
-_0809CA2A:\n\
- strb r6, [r1]\n\
-_0809CA2C:\n\
- cmp r6, 0\n\
- beq _0809CA38\n\
- mov r0, r12\n\
- adds r1, r3, 0\n\
- bl sub_809AF18\n\
-_0809CA38:\n\
- adds r0, r6, 0\n\
-_0809CA3A:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
u8 sub_809CA40(void)
{
@@ -3113,44 +2452,46 @@ void sub_809CE84(void)
gPokemonStorageSystemPtr->unk_11b9);
}
-#ifdef NONMATCHING // r4 and r5 are swapped throughout the entire function.
s16 sub_809CF30(void)
{
int textId = -2;
- if (!(gMain.newKeys & A_BUTTON))
+ do
{
- if (gMain.newKeys & B_BUTTON)
+ if (!(JOY_NEW(A_BUTTON)))
{
- PlaySE(SE_SELECT);
- textId++;
- }
+ if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ textId++;
+ }
- if (gMain.newKeys & DPAD_UP)
- {
- PlaySE(SE_SELECT);
- Menu_MoveCursor(-1);
+ if (JOY_NEW(DPAD_UP))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(-1);
+ }
+ else if (JOY_NEW(DPAD_DOWN))
+ {
+ PlaySE(SE_SELECT);
+ Menu_MoveCursor(1);
+ }
}
- else if (gMain.newKeys & DPAD_DOWN)
+ else
{
- PlaySE(SE_SELECT);
- Menu_MoveCursor(1);
+ textId = Menu_GetCursorPos();
}
- }
- else
- {
- textId = Menu_GetCursorPos();
- }
- if (textId != -2)
- {
- Menu_DestroyCursor();
- Menu_EraseWindowRect(
- gPokemonStorageSystemPtr->unk_11ba,
- gPokemonStorageSystemPtr->unk_11bc,
- 29,
- 15);
- }
+ if (textId != -2)
+ {
+ Menu_DestroyCursor();
+ Menu_EraseWindowRect(
+ gPokemonStorageSystemPtr->unk_11ba,
+ gPokemonStorageSystemPtr->unk_11bc,
+ 29,
+ 15);
+ }
+ } while (0);
if (textId >= 0)
{
@@ -3159,95 +2500,6 @@ s16 sub_809CF30(void)
return textId;
}
-#else
-NAKED
-s16 sub_809CF30(void)
-{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- movs r5, 0x2\n\
- negs r5, r5\n\
- ldr r4, _0809CF6C @ =gMain\n\
- ldrh r1, [r4, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0809CF86\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF52\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- adds r5, 0x1\n\
-_0809CF52:\n\
- ldrh r1, [r4, 0x2E]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF70\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- bl Menu_MoveCursor\n\
- b _0809CF8E\n\
- .align 2, 0\n\
-_0809CF6C: .4byte gMain\n\
-_0809CF70:\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0809CF8E\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x1\n\
- bl Menu_MoveCursor\n\
- b _0809CF8E\n\
-_0809CF86:\n\
- bl Menu_GetCursorPos\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
-_0809CF8E:\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- cmp r5, r0\n\
- beq _0809CFB2\n\
- bl Menu_DestroyCursor\n\
- ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr\n\
- ldr r1, [r0]\n\
- ldr r2, _0809CFD4 @ =0x000011ba\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- adds r2, 0x2\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- movs r2, 0x1D\n\
- movs r3, 0xF\n\
- bl Menu_EraseWindowRect\n\
-_0809CFB2:\n\
- cmp r5, 0\n\
- blt _0809CFC4\n\
- ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr\n\
- ldr r0, [r0]\n\
- lsls r1, r5, 3\n\
- ldr r2, _0809CFD8 @ =0x00001184\n\
- adds r0, r2\n\
- adds r0, r1\n\
- ldr r5, [r0]\n\
-_0809CFC4:\n\
- lsls r0, r5, 16\n\
- asrs r0, 16\n\
- pop {r4,r5}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_0809CFD0: .4byte gPokemonStorageSystemPtr\n\
-_0809CFD4: .4byte 0x000011ba\n\
-_0809CFD8: .4byte 0x00001184\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
void sub_809CFDC(struct UnkStruct_2000020 *arg0, struct UnkStruct_2000028 *arg1, u8 arg2)
{