diff options
-rw-r--r-- | asm/pokedex_screen.s | 322 | ||||
-rw-r--r-- | include/strings.h | 1 | ||||
-rw-r--r-- | src/pokedex_screen.c | 80 |
3 files changed, 78 insertions, 325 deletions
diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index 0ff220fc4..6da8a3a49 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -5,328 +5,6 @@ .text - thumb_func_start sub_8104C64 -sub_8104C64: @ 8104C64 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x20 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - movs r0, 0xFF - lsls r0, 24 - adds r2, r0 - lsrs r2, 24 - mov r9, r2 - ldr r1, _08104D50 @ =gUnknown_845228C - ldr r2, _08104D54 @ =gUnknown_8452334 - mov r3, r9 - lsls r0, r3, 2 - adds r6, r0, r2 - ldr r0, [r6] - lsls r4, r5, 2 - adds r0, r4, r0 - ldrb r2, [r0] - ldrb r3, [r0, 0x1] - movs r0, 0x8 - str r0, [sp] - str r0, [sp, 0x4] - adds r0, r5, 0x5 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x8] - movs r0, 0x3 - bl CopyToBgTilemapBufferRect_ChangePalette - ldr r7, _08104D58 @ =gUnknown_203ACF0 - ldr r0, [r7] - adds r0, 0x20 - adds r1, r0, r5 - ldrb r0, [r1] - cmp r0, 0xFF - bne _08104D6C - ldr r0, _08104D5C @ =gUnknown_84521C4 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - ldr r0, [r6] - adds r0, r4, r0 - ldrb r0, [r0] - lsls r0, 8 - ldr r3, _08104D60 @ =0xffff00ff - ldr r2, [sp, 0x18] - ands r2, r3 - orrs r2, r0 - str r2, [sp, 0x18] - ldr r0, [r6] - adds r0, r4, r0 - ldrb r1, [r0, 0x1] - lsls r1, 16 - ldr r0, _08104D64 @ =0xff00ffff - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x18] - adds r1, r5, 0x1 - lsls r1, 24 - lsrs r1, 16 - ldr r0, [sp, 0x1C] - ands r0, r3 - orrs r0, r1 - lsls r1, r5, 6 - adds r1, 0x8 - lsls r1, 16 - ldr r2, _08104D68 @ =0x0000ffff - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x1C] - add r0, sp, 0x18 - bl AddWindow - ldr r1, [r7] - adds r1, 0x20 - adds r1, r5 - strb r0, [r1] - ldr r0, [r7] - adds r0, 0x20 - adds r0, r5 - ldrb r0, [r0] - movs r1, 0 - bl FillWindowPixelBuffer - ldr r0, [r7] - adds r0, 0x20 - adds r0, r5 - ldrb r0, [r0] - lsls r2, r5, 20 - movs r1, 0x80 - lsls r1, 13 - adds r2, r1 - lsrs r2, 16 - mov r1, r8 - bl sub_81049FC - ldr r0, [r7] - adds r0, 0x20 - adds r0, r5 - ldrb r0, [r0] - bl PutWindowTilemap - ldr r0, [r7] - adds r0, 0x20 - adds r0, r5 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - b _08104D72 - .align 2, 0 -_08104D50: .4byte gUnknown_845228C -_08104D54: .4byte gUnknown_8452334 -_08104D58: .4byte gUnknown_203ACF0 -_08104D5C: .4byte gUnknown_84521C4 -_08104D60: .4byte 0xffff00ff -_08104D64: .4byte 0xff00ffff -_08104D68: .4byte 0x0000ffff -_08104D6C: - ldrb r0, [r1] - bl PutWindowTilemap -_08104D72: - ldr r6, _08104E60 @ =gUnknown_203ACF0 - ldr r0, [r6] - adds r0, 0x24 - adds r1, r0, r5 - ldrb r0, [r1] - cmp r0, 0xFF - bne _08104E78 - mov r3, r8 - cmp r3, 0 - beq _08104E7E - ldr r0, _08104E64 @ =gUnknown_84521CC - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - ldr r0, _08104E68 @ =gUnknown_8452334 - mov r1, r9 - lsls r2, r1, 2 - adds r2, r0 - ldr r0, [r2] - lsls r1, r5, 2 - adds r0, r1, r0 - ldrb r0, [r0, 0x2] - add r3, sp, 0x18 - movs r4, 0 - strb r0, [r3, 0x1] - ldr r0, [r2] - adds r0, r1, r0 - ldrb r0, [r0, 0x3] - strb r0, [r3, 0x2] - adds r1, r5 - lsls r1, 3 - movs r0, 0x84 - lsls r0, 1 - adds r1, r0 - strh r1, [r3, 0x6] - adds r0, r3, 0 - bl AddWindow - ldr r1, [r6] - adds r1, 0x24 - adds r1, r5 - strb r0, [r1] - ldr r0, [r6] - adds r0, 0x24 - adds r0, r5 - ldrb r0, [r0] - ldr r1, _08104E6C @ =gUnknown_8440124 - movs r2, 0 - movs r3, 0 - bl CopyToWindowPixelBuffer - ldr r0, [r6] - adds r0, 0x24 - adds r0, r5 - ldrb r0, [r0] - str r4, [sp] - movs r1, 0 - mov r2, r8 - movs r3, 0xC - bl sub_8104A34 - ldr r0, [r6] - adds r0, 0x24 - adds r0, r5 - ldrb r0, [r0] - movs r1, 0xB - mov r2, r8 - muls r2, r1 - ldr r1, _08104E70 @ =gSpeciesNames - adds r2, r1 - movs r1, 0xD - str r1, [sp] - str r4, [sp, 0x4] - movs r1, 0x2 - movs r3, 0x2 - bl sub_81047C8 - mov r0, r8 - movs r1, 0x1 - movs r2, 0x1 - bl sub_8104AB0 - lsls r0, 24 - cmp r0, 0 - beq _08104E42 - ldr r0, [r6] - adds r0, 0x24 - adds r0, r5 - ldrb r0, [r0] - ldr r1, _08104E74 @ =gUnknown_8443600 - movs r3, 0x8 - str r3, [sp] - str r3, [sp, 0x4] - movs r2, 0x2 - str r2, [sp, 0x8] - movs r2, 0x3 - str r2, [sp, 0xC] - str r3, [sp, 0x10] - str r3, [sp, 0x14] - movs r2, 0 - movs r3, 0 - bl BlitBitmapRectToWindow -_08104E42: - ldr r0, [r6] - adds r0, 0x24 - adds r0, r5 - ldrb r0, [r0] - bl PutWindowTilemap - ldr r0, [r6] - adds r0, 0x24 - adds r0, r5 - ldrb r0, [r0] - movs r1, 0x2 - bl CopyWindowToVram - b _08104E7E - .align 2, 0 -_08104E60: .4byte gUnknown_203ACF0 -_08104E64: .4byte gUnknown_84521CC -_08104E68: .4byte gUnknown_8452334 -_08104E6C: .4byte gUnknown_8440124 -_08104E70: .4byte gSpeciesNames -_08104E74: .4byte gUnknown_8443600 -_08104E78: - ldrb r0, [r1] - bl PutWindowTilemap -_08104E7E: - movs r0, 0x1 - add sp, 0x20 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_8104C64 - - thumb_func_start sub_8104E90 -sub_8104E90: @ 8104E90 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _08104EBC @ =gUnknown_203ACF0 -_08104E96: - adds r1, r4, 0 - adds r1, 0x20 - ldr r0, [r5] - adds r0, r1 - bl sub_81047B0 - adds r1, r4, 0 - adds r1, 0x24 - ldr r0, [r5] - adds r0, r1 - bl sub_81047B0 - adds r4, 0x1 - cmp r4, 0x3 - ble _08104E96 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08104EBC: .4byte gUnknown_203ACF0 - thumb_func_end sub_8104E90 - - thumb_func_start sub_8104EC0 -sub_8104EC0: @ 8104EC0 - push {r4,r5,lr} - sub sp, 0x20 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r1, _08104F08 @ =gUnknown_8416002 - mov r0, sp - bl StringCopy - adds r1, r0, 0 - adds r1, r4, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r1, r0, 0 - movs r0, 0xBA - strb r0, [r1] - adds r1, 0x1 - adds r0, r1, 0 - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - mov r0, sp - movs r1, 0x2 - bl sub_8106E78 - add sp, 0x20 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08104F08: .4byte gUnknown_8416002 - thumb_func_end sub_8104EC0 - thumb_func_start sub_8104F0C sub_8104F0C: @ 8104F0C push {r4-r6,lr} diff --git a/include/strings.h b/include/strings.h index 0288dc05f..c3ab3552a 100644 --- a/include/strings.h +++ b/include/strings.h @@ -976,6 +976,7 @@ extern const u8 gUnknown_8415F3D[]; extern const u8 gUnknown_8415F4A[]; extern const u8 gUnknown_8415F66[]; extern const u8 gUnknown_8415FFF[]; +extern const u8 gUnknown_8416002[]; // trainer card extern const u8 gText_WaitingTrainerFinishReading[]; diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 4859ec306..d739d8f88 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -21,6 +21,7 @@ #include "pokedex_screen.h" #include "data.h" #include "pokedex.h" +#include "string_util.h" #include "trainer_pokemon_sprites.h" #include "constants/songs.h" #include "constants/species.h" @@ -40,7 +41,9 @@ struct PokedexScreenData u8 field_15; u8 field_16; u8 field_17; - u16 field_18[0x8]; + u16 field_18[0x4]; + u8 field_20[0x4]; + u8 field_24[0x4]; u8 field_28; u8 field_29; u8 field_2A; @@ -120,12 +123,14 @@ void sub_81067C0(void); void sub_8106B34(void); void sub_8106E78(const u8 *a0, s32 a1); +extern const u16 gUnknown_8440124[]; extern const u32 gUnknown_8440274[]; extern const u32 gUnknown_84403AC[]; extern const u16 gUnknown_84404C8[]; extern const u16 gUnknown_84406E0[]; extern const u16 gUnknown_8440EF0[]; extern const u16 gUnknown_8443460[]; +extern const u8 gUnknown_8443600[]; extern const u16 gUnknown_8443FC0[]; extern const u16 gUnknown_84442F6[]; extern const u16 gUnknown_84448FE[]; @@ -136,15 +141,19 @@ extern const struct PokedexScreenData gUnknown_8451EE4; extern const struct WindowTemplate gUnknown_8451F54; extern const struct WindowTemplate gUnknown_8451F5C; extern const struct WindowTemplate gUnknown_8451F64; -extern const struct WindowTemplate gUnknown_845216C; -extern const struct ListMenuTemplate gUnknown_8452174; extern const struct ListMenuTemplate gUnknown_8452004; extern const struct ListMenuTemplate gUnknown_84520BC; extern const struct ScrollArrowsTemplate gUnknown_84520D4; extern const struct ScrollArrowsTemplate gUnknown_84520E4; extern const struct PokedexScreenWindowGfx gUnknown_84520F4[]; +extern const struct WindowTemplate gUnknown_845216C; +extern const struct ListMenuTemplate gUnknown_8452174; extern const struct ListMenuWindowRect gUnknown_845218C; extern const struct ScrollArrowsTemplate gUnknown_84521B4; +extern const struct WindowTemplate gUnknown_84521C4; +extern const struct WindowTemplate gUnknown_84521CC; +extern const u16 gUnknown_845228C[]; +extern const u8 (*const gUnknown_8452334[])[4]; extern const struct ScrollArrowsTemplate gUnknown_84524B4; extern const struct CursorStruct gUnknown_84524C4; @@ -1767,3 +1776,68 @@ void sub_8104C2C(const u8 *src) { sub_81047C8(1, 0, src, 236 - GetStringWidth(0, src, 0), 2, 4); } + +bool8 sub_8104C64(u16 a0, u8 a1, u8 a2) +{ + struct WindowTemplate template; + a2--; + CopyToBgTilemapBufferRect_ChangePalette(3, gUnknown_845228C, gUnknown_8452334[a2][a1][0], gUnknown_8452334[a2][a1][1], 8, 8, a1 + 5); + if (gUnknown_203ACF0->field_20[a1] == 0xFF) + { + template = gUnknown_84521C4; + template.tilemapLeft = gUnknown_8452334[a2][a1][0]; + template.tilemapTop = gUnknown_8452334[a2][a1][1]; + template.paletteNum = a1 + 1; + template.baseBlock = a1 * 64 + 8; + gUnknown_203ACF0->field_20[a1] = AddWindow(&template); + FillWindowPixelBuffer(gUnknown_203ACF0->field_20[a1], PIXEL_FILL(0)); + sub_81049FC(gUnknown_203ACF0->field_20[a1], a0, a1 * 16 + 16); + PutWindowTilemap(gUnknown_203ACF0->field_20[a1]); + CopyWindowToVram(gUnknown_203ACF0->field_20[a1], 2); + } + else + PutWindowTilemap(gUnknown_203ACF0->field_20[a1]); + + if (gUnknown_203ACF0->field_24[a1] == 0xFF) + { + if (a0 != SPECIES_NONE) + { + template = gUnknown_84521CC; + template.tilemapLeft = gUnknown_8452334[a2][a1][2]; + template.tilemapTop = gUnknown_8452334[a2][a1][3]; + template.baseBlock = a1 * 40 + 0x108; + gUnknown_203ACF0->field_24[a1] = AddWindow(&template); + CopyToWindowPixelBuffer(gUnknown_203ACF0->field_24[a1], gUnknown_8440124, 0, 0); + sub_8104A34(gUnknown_203ACF0->field_24[a1], 0, a0, 12, 0); + sub_81047C8(gUnknown_203ACF0->field_24[a1], 2, gSpeciesNames[a0], 2, 13, 0); + if (sub_8104AB0(a0, FLAG_GET_CAUGHT, TRUE)) + BlitBitmapRectToWindow(gUnknown_203ACF0->field_24[a1], gUnknown_8443600, 0, 0, 8, 8, 2, 3, 8, 8); + PutWindowTilemap(gUnknown_203ACF0->field_24[a1]); + CopyWindowToVram(gUnknown_203ACF0->field_24[a1], 2); + } + } + else + PutWindowTilemap(gUnknown_203ACF0->field_24[a1]); + + return TRUE; +} + +void sub_8104E90(void) +{ + int i; + for (i = 0; i < 4; i++) + { + sub_81047B0(&gUnknown_203ACF0->field_20[i]); + sub_81047B0(&gUnknown_203ACF0->field_24[i]); + } +} + +void sub_8104EC0(u8 unused, u16 a1, u16 a2) +{ + u8 buffer[30]; + u8 *ptr = StringCopy(buffer, gUnknown_8416002); + ptr = ConvertIntToDecimalStringN(ptr, a1, STR_CONV_MODE_RIGHT_ALIGN, 2); + *ptr++ = CHAR_SLASH; + ptr = ConvertIntToDecimalStringN(ptr, a2, STR_CONV_MODE_RIGHT_ALIGN, 2); + sub_8106E78(buffer, 2); +} |