diff options
author | camthesaxman <cameronghall@cox.net> | 2017-06-12 22:46:33 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-06-12 22:46:33 -0500 |
commit | bd0191d8ca99501214253b2f5165e70a9128a01c (patch) | |
tree | b4a3d65d428d457fa4854473c3b00d9ee7a53d6b | |
parent | af6fd50247ac3a41bc64074f5350f2939e034e20 (diff) |
decompile sub_80917CC - sub_8091A4C
-rw-r--r-- | asm/pokedex.s | 409 | ||||
-rw-r--r-- | include/pokedex.h | 6 | ||||
-rw-r--r-- | src/pokedex.c | 156 |
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; +} |