summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokedex.s409
-rw-r--r--include/pokedex.h6
-rw-r--r--src/pokedex.c156
3 files changed, 141 insertions, 430 deletions
diff --git a/asm/pokedex.s b/asm/pokedex.s
index 6bfaf3a97..875aaa091 100644
--- a/asm/pokedex.s
+++ b/asm/pokedex.s
@@ -6,415 +6,6 @@
.text
- thumb_func_start sub_80917CC
-sub_80917CC: @ 80917CC
- push {r4,lr}
- lsls r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsrs r0, 5
- ldr r2, _08091808 @ =0x06000232
- adds r3, r0, r2
- movs r4, 0xF0
- lsls r4, 8
- adds r2, r1, r4
- strh r2, [r3]
- ldr r2, _0809180C @ =0x06000234
- adds r3, r0, r2
- adds r4, 0x1
- adds r2, r1, r4
- strh r2, [r3]
- ldr r2, _08091810 @ =0x06000272
- adds r3, r0, r2
- adds r4, 0x1
- adds r2, r1, r4
- strh r2, [r3]
- ldr r2, _08091814 @ =0x06000274
- adds r0, r2
- adds r4, 0x1
- adds r1, r4
- strh r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08091808: .4byte 0x06000232
-_0809180C: .4byte 0x06000234
-_08091810: .4byte 0x06000272
-_08091814: .4byte 0x06000274
- thumb_func_end sub_80917CC
-
- thumb_func_start sub_8091818
-sub_8091818: @ 8091818
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- lsls r1, 16
- lsrs r0, r1, 16
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r3, 16
- cmp r4, 0x1
- beq _08091844
- cmp r4, 0x1
- bgt _0809183A
- cmp r4, 0
- beq _0809184C
- b _0809186C
-_0809183A:
- cmp r5, 0x2
- beq _0809185E
- cmp r5, 0x3
- beq _08091852
- b _0809186C
-_08091844:
- cmp r0, r2
- bls _0809186C
- subs r0, 0x1
- b _08091864
-_0809184C:
- cmp r0, r3
- bcs _0809186C
- b _08091862
-_08091852:
- cmp r0, r2
- bls _0809185A
- subs r0, 0x1
- b _08091864
-_0809185A:
- adds r0, r3, 0
- b _0809186C
-_0809185E:
- cmp r0, r3
- bcs _0809186A
-_08091862:
- adds r0, 0x1
-_08091864:
- lsls r0, 16
- lsrs r0, 16
- b _0809186C
-_0809186A:
- adds r0, r2, 0
-_0809186C:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8091818
-
- thumb_func_start nullsub_59
-nullsub_59: @ 8091874
- bx lr
- thumb_func_end nullsub_59
-
- thumb_func_start sub_8091878
-sub_8091878: @ 8091878
- push {r4-r7,lr}
- lsls r1, 24
- ldr r4, _080918A0 @ =gUnknown_02024E8C
- adds r3, r4, 0
- ldr r2, _080918A4 @ =gUnknown_083B57A4
- ldm r2!, {r5-r7}
- stm r3!, {r5-r7}
- ldm r2!, {r5-r7}
- stm r3!, {r5-r7}
- strh r0, [r4, 0x2]
- ldr r0, _080918A8 @ =gUnknown_083B5794
- lsrs r1, 22
- adds r1, r0
- ldr r0, [r1]
- str r0, [r4, 0xC]
- ldr r0, _080918AC @ =gSpriteAnimTable_81E7C64
- str r0, [r4, 0x8]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080918A0: .4byte gUnknown_02024E8C
-_080918A4: .4byte gUnknown_083B57A4
-_080918A8: .4byte gUnknown_083B5794
-_080918AC: .4byte gSpriteAnimTable_81E7C64
- thumb_func_end sub_8091878
-
- thumb_func_start sub_80918B0
-sub_80918B0: @ 80918B0
- push {r4-r7,lr}
- lsls r1, 24
- ldr r4, _080918DC @ =gUnknown_02024E8C
- adds r3, r4, 0
- ldr r2, _080918E0 @ =gUnknown_083B57A4
- ldm r2!, {r5-r7}
- stm r3!, {r5-r7}
- ldm r2!, {r5-r7}
- stm r3!, {r5-r7}
- strh r0, [r4, 0x2]
- ldr r0, _080918E4 @ =gUnknown_083B5794
- lsrs r1, 22
- adds r1, r0
- ldr r0, [r1]
- str r0, [r4, 0xC]
- ldr r0, _080918E8 @ =gUnknown_081EC2A4
- ldr r0, [r0]
- str r0, [r4, 0x8]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080918DC: .4byte gUnknown_02024E8C
-_080918E0: .4byte gUnknown_083B57A4
-_080918E4: .4byte gUnknown_083B5794
-_080918E8: .4byte gUnknown_081EC2A4
- thumb_func_end sub_80918B0
-
- thumb_func_start sub_80918EC
-sub_80918EC: @ 80918EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r2, 16
- lsrs r2, 16
- mov r10, r2
- lsls r3, 16
- lsrs r3, 16
- mov r8, r3
- adds r0, r7, 0
- bl NationalPokedexNumToSpecies
- adds r7, r0, 0
- cmp r7, SPECIES_UNOWN
- beq _0809199C
- movs r0, 0x9A
- lsls r0, 1
- cmp r7, r0
- beq _08091958
- lsls r6, r7, 3
- ldr r0, _0809194C @ =gMonFrontPicTable
- adds r0, r6, r0
- ldr r1, _08091950 @ =gMonFrontPicCoords
- lsls r2, r7, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08091954 @ =gUnknown_083B5584
- mov r12, r4
- mov r5, r8
- lsls r4, r5, 2
- add r4, r12
- ldr r4, [r4]
- str r4, [sp]
- str r7, [sp, 0x4]
- bl DecompressPicFromTable_2
- b _080919CE
- .align 2, 0
-_0809194C: .4byte gMonFrontPicTable
-_08091950: .4byte gMonFrontPicCoords
-_08091954: .4byte gUnknown_083B5584
-_08091958:
- lsls r6, r7, 3
- ldr r0, _0809198C @ =gMonFrontPicTable
- adds r0, r6
- ldr r2, _08091990 @ =gMonFrontPicCoords
- lsls r1, r7, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08091994 @ =gUnknown_083B5584
- mov r12, r4
- mov r5, r8
- lsls r4, r5, 2
- add r4, r12
- ldr r4, [r4]
- str r4, [sp]
- str r7, [sp, 0x4]
- ldr r4, _08091998 @ =gSaveBlock2
- ldr r4, [r4, 0x20]
- str r4, [sp, 0x8]
- movs r4, 0x1
- str r4, [sp, 0xC]
- bl LoadSpecialPokePic
- b _080919CE
- .align 2, 0
-_0809198C: .4byte gMonFrontPicTable
-_08091990: .4byte gMonFrontPicCoords
-_08091994: .4byte gUnknown_083B5584
-_08091998: .4byte gSaveBlock2
-_0809199C:
- lsls r6, r7, 3
- ldr r0, _08091A30 @ =gMonFrontPicTable
- adds r0, r6
- ldr r2, _08091A34 @ =gMonFrontPicCoords
- lsls r1, r7, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08091A38 @ =gUnknown_083B5584
- mov r12, r4
- mov r5, r8
- lsls r4, r5, 2
- add r4, r12
- ldr r4, [r4]
- str r4, [sp]
- str r7, [sp, 0x4]
- ldr r4, _08091A3C @ =gSaveBlock2
- ldr r4, [r4, 0x1C]
- str r4, [sp, 0x8]
- movs r4, 0x1
- str r4, [sp, 0xC]
- bl LoadSpecialPokePic
-_080919CE:
- ldr r0, _08091A40 @ =gMonPaletteTable
- adds r0, r6, r0
- ldr r0, [r0]
- mov r1, r8
- lsls r4, r1, 4
- movs r2, 0x80
- lsls r2, 1
- adds r1, r4, r2
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0x20
- bl LoadCompressedPalette
- mov r3, r8
- lsls r1, r3, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_8091878
- ldr r0, _08091A44 @ =gUnknown_02024E8C
- mov r5, r9
- lsls r1, r5, 16
- asrs r1, 16
- mov r3, r10
- lsls r2, r3, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08091A48 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- orrs r1, r4
- strb r1, [r2, 0x5]
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08091A30: .4byte gMonFrontPicTable
-_08091A34: .4byte gMonFrontPicCoords
-_08091A38: .4byte gUnknown_083B5584
-_08091A3C: .4byte gSaveBlock2
-_08091A40: .4byte gMonPaletteTable
-_08091A44: .4byte gUnknown_02024E8C
-_08091A48: .4byte gSprites
- thumb_func_end sub_80918EC
-
- thumb_func_start sub_8091A4C
-sub_8091A4C: @ 8091A4C
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x8
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- mov r9, r3
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- mov r1, r9
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r0, r5, 3
- ldr r1, _08091AE4 @ =gTrainerFrontPicTable
- adds r0, r1
- ldr r1, _08091AE8 @ =gTrainerFrontPicCoords
- lsls r2, r5, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08091AEC @ =gUnknown_083B5584
- ldr r4, [r4]
- str r4, [sp]
- str r5, [sp, 0x4]
- bl DecompressPicFromTable_2
- adds r0, r5, 0
- movs r1, 0
- bl sub_80918B0
- ldr r0, _08091AF0 @ =gUnknown_02024E8C
- lsls r6, 16
- asrs r6, 16
- mov r3, r8
- lsls r3, 16
- asrs r3, 16
- mov r8, r3
- adds r1, r6, 0
- mov r2, r8
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08091AF4 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- mov r1, r9
- lsls r1, 4
- mov r9, r1
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- mov r3, r9
- orrs r1, r3
- strb r1, [r2, 0x5]
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08091AE4: .4byte gTrainerFrontPicTable
-_08091AE8: .4byte gTrainerFrontPicCoords
-_08091AEC: .4byte gUnknown_083B5584
-_08091AF0: .4byte gUnknown_02024E8C
-_08091AF4: .4byte gSprites
- thumb_func_end sub_8091A4C
-
thumb_func_start sub_8091AF8
sub_8091AF8: @ 8091AF8
push {r4-r7,lr}
diff --git a/include/pokedex.h b/include/pokedex.h
index 33e63ad30..622e278fe 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -144,15 +144,15 @@ void sub_8091060(u16);
void sub_8091154(u16 order, u8, u8);
u8 sub_80911C8(u16 num, u8, u8);
u8 sub_8091260(u16 num, u8, u8, u8);
-void sub_8091304(u8 *name, u8, u8);
+void sub_8091304(const u8 *name, u8, u8);
void sub_8091458(u16 height, u8 i, u8 i1);
void sub_8091564(u16 weight, u8 i, u8 i1);
void sub_8091738(u16, u16, u16);
-void sub_80917CC(int i, int i1);
+void sub_80917CC(u16 i, u16 i1);
u16 sub_8091818(u8, u16, u16, u16);
u16 sub_80918EC(u16 a, s16 b, s16 c, u16 d); //Not sure of return type
-u8 sub_8091A4C(u8 gender, int i, int i1, int i2);
+u8 sub_8091A4C(u16 gender, u16, u16, u16);
#endif // GUARD_POKEDEX_H
diff --git a/src/pokedex.c b/src/pokedex.c
index 91ae27a3b..4cd52b2e5 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -12,6 +12,7 @@
#include "rng.h"
#include "songs.h"
#include "sound.h"
+#include "species.h"
#include "string_util.h"
#include "strings.h"
#include "task.h"
@@ -57,45 +58,50 @@ struct PokedexEntry
extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 gReservedSpritePaletteCount;
extern struct PokedexView *gPokedexView;
+extern struct SpriteTemplate gUnknown_02024E8C;
extern u16 gUnknown_0202FFB8;
extern u8 gUnknown_0202FFBA;
extern struct PokedexListItem *gUnknown_0202FFBC;
extern u8 gUnknown_03005CE8;
extern IntrCallback gUnknown_03005CEC;
+extern u8 gUnknown_03005E98;
extern u8 gPokedexMenu_Gfx[];
extern u8 gUnknown_08E96738[];
extern u8 gUnknown_08E9C6DC[];
extern u8 gUnknown_08E96888[];
extern u8 gUnknown_08E96994[];
-extern struct SpriteSheet gUnknown_083A05CC;
-extern struct SpritePalette gUnknown_083A05DC[];
extern u8 gUnknown_0839FA7C[];
extern u8 gUnknown_0839F67C[];
extern u16 gPokedexMenu_Pal[];
extern u16 gPokedexMenu2_Pal[];
extern u8 gUnknown_0839F73C[];
-extern u8 gUnknown_083A05EC[];
-extern u8 gUnknown_083A05F1[];
-extern struct SpriteTemplate gSpriteTemplate_83A053C;
+extern u8 gUnknown_0839F8A0[];
+extern u8 gUnknown_0839F988[];
extern struct SpriteTemplate gSpriteTemplate_83A0524;
+extern struct SpriteTemplate gSpriteTemplate_83A053C;
extern struct SpriteTemplate gSpriteTemplate_83A0554;
extern struct SpriteTemplate gSpriteTemplate_83A056C;
extern struct SpriteTemplate gSpriteTemplate_83A0584;
extern struct SpriteTemplate gSpriteTemplate_83A059C;
extern struct SpriteTemplate gSpriteTemplate_83A05B4;
+extern struct SpriteSheet gUnknown_083A05CC;
+extern struct SpritePalette gUnknown_083A05DC[];
+extern u8 gUnknown_083A05EC[];
+extern u8 gUnknown_083A05F1[];
+extern u8 gUnknown_083A05F8[];
+extern u8 gUnknown_083B4EC4[];
extern u8 gUnknown_083B5558[];
+extern void *const gUnknown_083B5584[];
extern u8 gUnknown_08D00524[];
extern u8 gUnknown_08E96BD4[];
-extern u8 gUnknown_083A05F8[];
-extern u8 gUnknown_0839F8A0[];
-extern u8 gUnknown_0839F988[];
-extern u8 gUnknown_03005E98;
-extern u8 gUnknown_083B4EC4[];
+extern const struct SpriteTemplate gUnknown_083B57A4;
+extern struct SpriteFrameImage *const gUnknown_083B5794[];
extern u8 gUnknown_08E96ACC[];
extern u8 gUnknown_08E96B58[];
extern const u8 *const gMonFootprintTable[];
-
-extern struct PokedexEntry gPokedexEntries[];
+extern const struct SpriteSheet gTrainerFrontPicTable[];
+extern const struct MonCoords gTrainerFrontPicCoords[];
+extern const struct PokedexEntry gPokedexEntries[];
extern void sub_800D74C();
extern const u16 *species_and_otid_get_pal(u16, u32, u32);
@@ -2153,7 +2159,6 @@ void Task_InitPageScreenMultistep(u8 taskId)
sub_8091154(NationalToHoennOrder(gUnknown_0202FFBC->dexNum), 0xD, 3);
else
sub_8091154(gUnknown_0202FFBC->dexNum, 0xD, 3);
- //_0808F45A
sub_80911C8(gUnknown_0202FFBC->dexNum, 0x10, 3);
MenuPrint(gDexText_UnknownPoke, 11, 5);
MenuPrint(gDexText_UnknownHeight, 16, 7);
@@ -2166,7 +2171,6 @@ void Task_InitPageScreenMultistep(u8 taskId)
MenuPrint(gPokedexEntries[gUnknown_0202FFBC->dexNum].descriptionPage1, 2, 13);
sub_80917CC(14, 0x3FC);
}
- //_0808F50C
else
{
MenuPrint(gUnknown_083A05F8, 2, 13);
@@ -2177,7 +2181,6 @@ void Task_InitPageScreenMultistep(u8 taskId)
case 5:
if (gTasks[taskId].data[1] == 0)
{
- //_0808F540
gTasks[taskId].data[4] = (u16)sub_80918EC(gUnknown_0202FFBC->dexNum, 0x30, 0x38, 0);
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
}
@@ -2190,9 +2193,7 @@ void Task_InitPageScreenMultistep(u8 taskId)
if (gTasks[taskId].data[2] != 0)
r3 = 0x14;
if (gTasks[taskId].data[1] != 0)
- {
r3 |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 0x10));
- }
BeginNormalPaletteFade(~r3, 0, 0x10, 0, 0);
SetVBlankCallback(gUnknown_03005CEC);
gMain.state++;
@@ -3758,7 +3759,7 @@ u8 sub_8091260(u16 num, u8 b, u8 c, u8 d)
return i;
}
-void sub_8091304(u8 *name, u8 left, u8 top)
+void sub_8091304(const u8 *name, u8 left, u8 top)
{
u8 str[32]; // Not exactly sure how long this needs to be
u8 i;
@@ -3963,3 +3964,122 @@ void sub_8091738(u16 a, u16 b, u16 c)
}
CpuCopy16(arr, (u16 *)(VRAM + b * 0x4000 + c * 0x20), 0x80);
}
+
+void sub_80917CC(u16 a, u16 b)
+{
+ *(u16 *)(VRAM + a * 0x800 + 0x232) = 0xF000 + b + 0;
+ *(u16 *)(VRAM + a * 0x800 + 0x234) = 0xF000 + b + 1;
+ *(u16 *)(VRAM + a * 0x800 + 0x272) = 0xF000 + b + 2;
+ *(u16 *)(VRAM + a * 0x800 + 0x274) = 0xF000 + b + 3;
+}
+
+u16 sub_8091818(u8 a, u16 b, u16 c, u16 d)
+{
+ switch (a)
+ {
+ case 1:
+ if (b > c)
+ b--;
+ break;
+ case 0:
+ if (b < d)
+ b++;
+ break;
+ case 3:
+ if (b > c)
+ b--;
+ else
+ b = d;
+ break;
+ case 2:
+ if (b < d)
+ b++;
+ else
+ b = c;
+ break;
+ }
+ return b;
+}
+
+void nullsub_59(void)
+{
+}
+
+void sub_8091878(u16 a, u8 b)
+{
+ gUnknown_02024E8C = gUnknown_083B57A4;
+ gUnknown_02024E8C.paletteTag = a;
+ gUnknown_02024E8C.images = gUnknown_083B5794[b];
+ gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64;
+}
+
+void sub_80918B0(u16 a, u8 b)
+{
+ gUnknown_02024E8C = gUnknown_083B57A4;
+ gUnknown_02024E8C.paletteTag = a;
+ gUnknown_02024E8C.images = gUnknown_083B5794[b];
+ gUnknown_02024E8C.anims = gUnknown_081EC2A4[0];
+}
+
+u16 sub_80918EC(u16 num, s16 b, s16 c, u16 d)
+{
+ u8 spriteId;
+
+ num = NationalPokedexNumToSpecies(num);
+ switch (num)
+ {
+ default:
+ DecompressPicFromTable_2(
+ &gMonFrontPicTable[num],
+ gMonFrontPicCoords[num].coords,
+ gMonFrontPicCoords[num].y_offset,
+ (void *)0x02000000,
+ gUnknown_083B5584[d],
+ num);
+ break;
+ case 0x134:
+ LoadSpecialPokePic(
+ &gMonFrontPicTable[num],
+ gMonFrontPicCoords[num].coords,
+ gMonFrontPicCoords[num].y_offset,
+ 0x02000000,
+ gUnknown_083B5584[d],
+ num,
+ gSaveBlock2.pokedex.spindaPersonality,
+ 1);
+ break;
+ case SPECIES_UNOWN:
+ LoadSpecialPokePic(
+ &gMonFrontPicTable[num],
+ gMonFrontPicCoords[num].coords,
+ gMonFrontPicCoords[num].y_offset,
+ 0x02000000,
+ gUnknown_083B5584[d],
+ num,
+ gSaveBlock2.pokedex.unownPersonality,
+ 1);
+ break;
+ }
+ LoadCompressedPalette(gMonPaletteTable[num].data, 0x100 + d * 16, 32);
+ sub_8091878(d, d);
+ spriteId = CreateSprite(&gUnknown_02024E8C, b, c, 0);
+ gSprites[spriteId].oam.paletteNum = d;
+ return spriteId;
+}
+
+u8 sub_8091A4C(u16 gender, u16 b, u16 c, u16 d)
+{
+ u8 spriteId;
+
+ DecompressPicFromTable_2(
+ &gTrainerFrontPicTable[gender],
+ gTrainerFrontPicCoords[gender].coords,
+ gTrainerFrontPicCoords[gender].y_offset,
+ (void *)0x02000000,
+ gUnknown_083B5584[0],
+ gender);
+ sub_80918B0(gender, 0);
+ spriteId = CreateSprite(&gUnknown_02024E8C, b, c, 0);
+ gSprites[spriteId].oam.paletteNum = d;
+ return spriteId;
+}