diff options
author | camthesaxman <cameronghall@cox.net> | 2017-06-13 00:30:24 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-06-13 00:30:24 -0500 |
commit | 828237e9b46d41860c5d06e8c0cd02296596e179 (patch) | |
tree | 3b64c242ad151009511337737b54568441101064 | |
parent | a6275b4d7fe2f2d115a6336dc8cbc668008456ab (diff) |
decompile sub_8091AF8
-rw-r--r-- | asm/pokedex.s | 420 | ||||
-rw-r--r-- | include/pokemon.h | 3 | ||||
-rw-r--r-- | src/pokedex.c | 128 | ||||
-rw-r--r-- | src/pokemon_3.c | 2 |
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) |