summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-06-13 00:30:24 -0500
committercamthesaxman <cameronghall@cox.net>2017-06-13 00:30:24 -0500
commit828237e9b46d41860c5d06e8c0cd02296596e179 (patch)
tree3b64c242ad151009511337737b54568441101064
parenta6275b4d7fe2f2d115a6336dc8cbc668008456ab (diff)
decompile sub_8091AF8
-rw-r--r--asm/pokedex.s420
-rw-r--r--include/pokemon.h3
-rw-r--r--src/pokedex.c128
-rw-r--r--src/pokemon_3.c2
4 files changed, 126 insertions, 427 deletions
diff --git a/asm/pokedex.s b/asm/pokedex.s
index 875aaa091..99f080c63 100644
--- a/asm/pokedex.s
+++ b/asm/pokedex.s
@@ -6,426 +6,6 @@
.text
- thumb_func_start sub_8091AF8
-sub_8091AF8: @ 8091AF8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r4, [sp, 0x34]
- ldr r5, [sp, 0x38]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x4]
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp, 0x8]
- lsls r5, 24
- lsrs r5, 24
- mov r10, r5
- bl SortPokedex
- movs r5, 0
- movs r6, 0
- ldr r4, _08091D08 @ =0x00000181
- ldr r3, _08091D0C @ =gPokedexView
-_08091B32:
- ldr r2, [r3]
- lsls r0, r5, 2
- adds r1, r2, r0
- ldrb r0, [r1, 0x2]
- lsls r0, 31
- cmp r0, 0
- beq _08091B4E
- lsls r0, r6, 2
- adds r0, r2, r0
- ldr r1, [r1]
- str r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_08091B4E:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r4
- bls _08091B32
- ldr r1, _08091D0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091D10 @ =0x0000060c
- adds r0, r2
- adds r1, r6, 0
- strh r6, [r0]
- cmp r7, 0xFF
- beq _08091C04
- movs r5, 0
- lsls r0, r1, 16
- movs r6, 0
- cmp r0, 0
- beq _08091BFA
- lsls r7, 2
- ldr r0, _08091D14 @ =gUnknown_083B57BC
- adds r0, 0x3
- adds r0, r7, r0
- str r0, [sp, 0xC]
- ldr r0, _08091D14 @ =gUnknown_083B57BC
- adds r0, r7
- mov r9, r0
-_08091B82:
- ldr r1, _08091D0C @ =gPokedexView
- ldr r0, [r1]
- lsls r4, r5, 2
- adds r0, r4
- ldrh r0, [r0]
- bl NationalPokedexNumToSpecies
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, _08091D18 @ =gSpeciesNames
- movs r0, 0xB
- muls r0, r2
- adds r0, r1
- ldrb r2, [r0]
- adds r3, r2, 0
- mov r0, r9
- ldrb r0, [r0]
- cmp r2, r0
- bcc _08091BBA
- mov r1, r9
- ldrb r0, [r1]
- ldr r1, _08091D14 @ =gUnknown_083B57BC
- adds r1, 0x1
- adds r1, r7, r1
- ldrb r1, [r1]
- adds r0, r1
- cmp r2, r0
- blt _08091BD2
-_08091BBA:
- ldr r0, _08091D14 @ =gUnknown_083B57BC
- adds r0, 0x2
- adds r0, r7, r0
- ldrb r2, [r0]
- cmp r3, r2
- bcc _08091BE6
- ldrb r1, [r0]
- ldr r2, [sp, 0xC]
- ldrb r0, [r2]
- adds r1, r0
- cmp r3, r1
- bge _08091BE6
-_08091BD2:
- ldr r2, _08091D0C @ =gPokedexView
- ldr r0, [r2]
- lsls r1, r6, 2
- adds r1, r0, r1
- adds r0, r4
- ldr r0, [r0]
- str r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_08091BE6:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r1, _08091D0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091D10 @ =0x0000060c
- adds r0, r2
- ldrh r0, [r0]
- cmp r5, r0
- bcc _08091B82
-_08091BFA:
- ldr r1, _08091D0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091D10 @ =0x0000060c
- adds r0, r2
- strh r6, [r0]
-_08091C04:
- ldr r0, [sp, 0x4]
- cmp r0, 0xFF
- beq _08091C74
- movs r5, 0
- movs r6, 0
- ldr r1, _08091D0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091D10 @ =0x0000060c
- adds r0, r2
- ldrh r0, [r0]
- cmp r6, r0
- bcs _08091C6A
- adds r7, r1, 0
- ldr r0, _08091D1C @ =gBaseStats
- mov r8, r0
-_08091C22:
- ldr r0, [r7]
- lsls r4, r5, 2
- adds r0, r4
- ldrh r0, [r0]
- bl NationalPokedexNumToSpecies
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x19]
- lsls r0, 25
- lsrs r0, 25
- ldr r1, [sp, 0x4]
- cmp r1, r0
- bne _08091C58
- ldr r0, [r7]
- lsls r1, r6, 2
- adds r1, r0, r1
- adds r0, r4
- ldr r0, [r0]
- str r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_08091C58:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, [r7]
- ldr r2, _08091D10 @ =0x0000060c
- adds r0, r2
- ldrh r0, [r0]
- cmp r5, r0
- bcc _08091C22
-_08091C6A:
- ldr r1, _08091D0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091D10 @ =0x0000060c
- adds r0, r2
- strh r6, [r0]
-_08091C74:
- ldr r0, [sp, 0x8]
- cmp r0, 0xFF
- bne _08091C8A
- mov r1, r10
- cmp r1, 0xFF
- bne _08091C82
- b _08091DA6
-_08091C82:
- mov r2, r10
- str r2, [sp, 0x8]
- movs r0, 0xFF
- mov r10, r0
-_08091C8A:
- mov r1, r10
- cmp r1, 0xFF
- bne _08091D20
- movs r5, 0
- movs r6, 0
- ldr r2, _08091D0C @ =gPokedexView
- ldr r0, [r2]
- ldr r1, _08091D10 @ =0x0000060c
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- bcs _08091D9C
- adds r3, r2, 0
- mov r7, sp
- mov r8, r2
-_08091CA8:
- ldr r0, [r3]
- lsls r4, r5, 2
- adds r1, r0, r4
- ldrb r0, [r1, 0x2]
- lsls r0, 30
- cmp r0, 0
- bge _08091CF2
- ldrh r0, [r1]
- str r3, [sp, 0x10]
- bl NationalPokedexNumToSpecies
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, _08091D1C @ =gBaseStats
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x6]
- strb r1, [r7]
- ldrb r0, [r0, 0x7]
- strb r0, [r7, 0x1]
- ldr r3, [sp, 0x10]
- ldr r2, [sp, 0x8]
- cmp r1, r2
- beq _08091CE0
- cmp r0, r2
- bne _08091CF2
-_08091CE0:
- ldr r0, [r3]
- lsls r1, r6, 2
- adds r1, r0, r1
- adds r0, r4
- ldr r0, [r0]
- str r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_08091CF2:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- mov r1, r8
- ldr r0, [r1]
- ldr r2, _08091D10 @ =0x0000060c
- adds r0, r2
- ldrh r0, [r0]
- cmp r5, r0
- bcc _08091CA8
- b _08091D9C
- .align 2, 0
-_08091D08: .4byte 0x00000181
-_08091D0C: .4byte gPokedexView
-_08091D10: .4byte 0x0000060c
-_08091D14: .4byte gUnknown_083B57BC
-_08091D18: .4byte gSpeciesNames
-_08091D1C: .4byte gBaseStats
-_08091D20:
- movs r5, 0
- movs r6, 0
- ldr r1, _08091E0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091E10 @ =0x0000060c
- adds r0, r2
- ldrh r0, [r0]
- cmp r6, r0
- bcs _08091D9C
- mov r7, sp
-_08091D34:
- ldr r0, [r1]
- lsls r1, r5, 2
- adds r2, r0, r1
- ldrb r0, [r2, 0x2]
- lsls r0, 30
- adds r4, r1, 0
- cmp r0, 0
- bge _08091D88
- ldrh r0, [r2]
- bl NationalPokedexNumToSpecies
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, _08091E14 @ =gBaseStats
- lsls r0, r2, 3
- subs r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r1, [r0, 0x6]
- strb r1, [r7]
- ldrb r0, [r0, 0x7]
- strb r0, [r7, 0x1]
- ldr r2, [sp, 0x8]
- cmp r1, r2
- bne _08091D6A
- cmp r0, r10
- beq _08091D74
-_08091D6A:
- cmp r1, r10
- bne _08091D88
- ldr r1, [sp, 0x8]
- cmp r0, r1
- bne _08091D88
-_08091D74:
- ldr r2, _08091E0C @ =gPokedexView
- ldr r0, [r2]
- lsls r1, r6, 2
- adds r1, r0, r1
- adds r0, r4
- ldr r0, [r0]
- str r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_08091D88:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r1, _08091E0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091E10 @ =0x0000060c
- adds r0, r2
- ldrh r0, [r0]
- cmp r5, r0
- bcc _08091D34
-_08091D9C:
- ldr r1, _08091E0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091E10 @ =0x0000060c
- adds r0, r2
- strh r6, [r0]
-_08091DA6:
- ldr r1, _08091E0C @ =gPokedexView
- ldr r0, [r1]
- ldr r2, _08091E10 @ =0x0000060c
- adds r1, r0, r2
- ldrh r0, [r1]
- cmp r0, 0
- beq _08091DFA
- adds r5, r0, 0
- ldr r0, _08091E18 @ =0x00000181
- cmp r5, r0
- bhi _08091DFA
- ldr r4, _08091E0C @ =gPokedexView
- movs r1, 0x2
- negs r1, r1
- mov r10, r1
- movs r2, 0x3
- negs r2, r2
- mov r9, r2
- mov r8, r0
- ldr r0, _08091E1C @ =0x0000ffff
- adds r7, r0, 0
-_08091DD0:
- ldr r1, [r4]
- lsls r3, r5, 2
- adds r1, r3
- ldrh r0, [r1]
- orrs r0, r7
- strh r0, [r1]
- ldrb r2, [r1, 0x2]
- mov r0, r10
- ands r0, r2
- strb r0, [r1, 0x2]
- ldr r1, [r4]
- adds r1, r3
- ldrb r2, [r1, 0x2]
- mov r0, r9
- ands r0, r2
- strb r0, [r1, 0x2]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r8
- bls _08091DD0
-_08091DFA:
- adds r0, r6, 0
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08091E0C: .4byte gPokedexView
-_08091E10: .4byte 0x0000060c
-_08091E14: .4byte gBaseStats
-_08091E18: .4byte 0x00000181
-_08091E1C: .4byte 0x0000ffff
- thumb_func_end sub_8091AF8
-
thumb_func_start sub_8091E20
sub_8091E20: @ 8091E20
push {lr}
diff --git a/include/pokemon.h b/include/pokemon.h
index 15a028d6e..a9c780dbb 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -357,7 +357,8 @@ struct BaseStats
/* 0x16 */ u8 ability1;
/* 0x17 */ u8 ability2;
/* 0x18 */ u8 safariZoneFleeRate;
- /* 0x19 */ u8 bodyColor;
+ /* 0x19 */ u8 bodyColor:7;
+ u8 unk19_7:1;
};
struct BattleMove
diff --git a/src/pokedex.c b/src/pokedex.c
index 3f1bcf14f..bf383275b 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -67,13 +67,11 @@ 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 u8 gUnknown_08E9C6DC[];
extern u8 gUnknown_0839FA7C[];
extern u8 gUnknown_0839F67C[];
-extern u16 gPokedexMenu_Pal[];
-extern u16 gPokedexMenu2_Pal[];
extern u8 gUnknown_0839F73C[];
extern u8 gUnknown_0839F8A0[];
extern u8 gUnknown_0839F988[];
@@ -92,16 +90,20 @@ extern u8 gUnknown_083A05F8[];
extern u8 gUnknown_083B4EC4[];
extern u8 gUnknown_083B5558[];
extern void *const gUnknown_083B5584[];
+extern struct SpriteFrameImage *const gUnknown_083B5794[];
+extern const struct SpriteTemplate gUnknown_083B57A4;
+extern const u8 gUnknown_083B57BC[][4];
extern u8 gUnknown_08D00524[];
extern u8 gUnknown_08E96BD4[];
-extern const struct SpriteTemplate gUnknown_083B57A4;
-extern struct SpriteFrameImage *const gUnknown_083B5794[];
extern u8 gUnknown_08E96ACC[];
extern u8 gUnknown_08E96B58[];
+extern u16 gPokedexMenu_Pal[];
+extern u16 gPokedexMenu2_Pal[];
extern const u8 *const gMonFootprintTable[];
extern const struct SpriteSheet gTrainerFrontPicTable[];
extern const struct MonCoords gTrainerFrontPicCoords[];
extern const struct PokedexEntry gPokedexEntries[];
+extern const struct BaseStats gBaseStats[];
extern void sub_800D74C();
extern const u16 *species_and_otid_get_pal(u16, u32, u32);
@@ -4083,3 +4085,119 @@ u8 sub_8091A4C(u16 gender, u16 b, u16 c, u16 d)
gSprites[spriteId].oam.paletteNum = d;
return spriteId;
}
+
+int sub_8091AF8(u8 a, u8 b, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2)
+{
+ u16 species;
+ u16 i;
+ u16 resultsCount;
+ u8 types[2];
+
+ SortPokedex(a, b);
+
+ for (i = 0, resultsCount = 0; i < 386; i++)
+ {
+ if (gPokedexView->unk0[i].seen)
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ gPokedexView->unk60C = resultsCount;
+
+ // Search by name
+ if (abcGroup != 0xFF)
+ {
+ for (i = 0, resultsCount = 0; i < gPokedexView->unk60C; i++)
+ {
+ u8 r3;
+
+ species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
+ r3 = gSpeciesNames[species][0];
+ if ((r3 >= gUnknown_083B57BC[abcGroup][0] && r3 < gUnknown_083B57BC[abcGroup][0] + gUnknown_083B57BC[abcGroup][1])
+ || (r3 >= gUnknown_083B57BC[abcGroup][2] && r3 < gUnknown_083B57BC[abcGroup][2] + gUnknown_083B57BC[abcGroup][3]))
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ gPokedexView->unk60C = resultsCount;
+ }
+
+ // Search by body color
+ if (bodyColor != 0xFF)
+ {
+ for (i = 0, resultsCount = 0; i < gPokedexView->unk60C; i++)
+ {
+ species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
+
+ if (bodyColor == gBaseStats[species].bodyColor)
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ gPokedexView->unk60C = resultsCount;
+ }
+
+ // Search by type
+ if (type1 != 0xFF || type2 != 0xFF)
+ {
+ if (type1 == 0xFF)
+ {
+ type1 = type2;
+ type2 = 0xFF;
+ }
+
+ if (type2 == 0xFF)
+ {
+ for (i = 0, resultsCount = 0; i < gPokedexView->unk60C; i++)
+ {
+ if (gPokedexView->unk0[i].owned)
+ {
+ species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
+
+ types[0] = gBaseStats[species].type1;
+ types[1] = gBaseStats[species].type2;
+ if (types[0] == type1 || types[1] == type1)
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i = 0, resultsCount = 0; i < gPokedexView->unk60C; i++)
+ {
+ if (gPokedexView->unk0[i].owned)
+ {
+ species = NationalPokedexNumToSpecies(gPokedexView->unk0[i].dexNum);
+
+ types[0] = gBaseStats[species].type1;
+ types[1] = gBaseStats[species].type2;
+ if ((types[0] == type1 && types[1] == type2) || (types[0] == type2 && types[1] == type1))
+ {
+ gPokedexView->unk0[resultsCount] = gPokedexView->unk0[i];
+ resultsCount++;
+ }
+ }
+ }
+ }
+ gPokedexView->unk60C = resultsCount;
+ }
+
+ if (gPokedexView->unk60C != 0)
+ {
+ for (i = gPokedexView->unk60C; i < 386; i++)
+ {
+ gPokedexView->unk0[i].dexNum = 0xFFFF;
+ gPokedexView->unk0[i].seen = FALSE;
+ gPokedexView->unk0[i].owned = FALSE;
+
+ }
+ }
+
+ return resultsCount;
+}
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index f9eb3a7e9..f4eac79a7 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -1255,7 +1255,7 @@ bool8 IsHMMove2(u16 move)
bool8 sub_8040A3C(u16 species)
{
- return gBaseStats[species].bodyColor >> 7; // XXX: should this be a bitfield instead?
+ return gBaseStats[species].unk19_7;
}
s8 sub_8040A54(struct Pokemon *mon, u8 a2)