diff options
-rw-r--r-- | asm/pokedex.s | 438 | ||||
-rw-r--r-- | include/pokedex.h | 4 | ||||
-rw-r--r-- | src/pokedex.c | 149 |
3 files changed, 151 insertions, 440 deletions
diff --git a/asm/pokedex.s b/asm/pokedex.s index e4457547e..6bfaf3a97 100644 --- a/asm/pokedex.s +++ b/asm/pokedex.s @@ -6,444 +6,6 @@ .text - thumb_func_start sub_8091458 -sub_8091458: @ 8091458 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - lsls r0, 16 - lsrs r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r1, _080914D4 @ =0x00002710 - muls r0, r1 - movs r1, 0xFE - bl __divsi3 - adds r7, r0, 0 - movs r1, 0xA - bl __umodsi3 - cmp r0, 0x4 - bls _0809148A - adds r7, 0xA -_0809148A: - adds r0, r7, 0 - movs r1, 0x78 - bl __udivsi3 - adds r6, r0, 0 - lsls r0, r6, 4 - subs r0, r6 - lsls r0, 3 - subs r0, r7, r0 - movs r1, 0xA - bl __udivsi3 - adds r7, r0, 0 - mov r1, sp - movs r0, 0xFC - strb r0, [r1] - adds r1, 0x1 - movs r0, 0x13 - strb r0, [r1] - adds r0, r6, 0 - movs r1, 0xA - bl __udivsi3 - adds r2, r0, 0 - cmp r2, 0 - bne _080914D8 - mov r1, sp - adds r1, 0x2 - movs r0, 0x12 - strb r0, [r1] - movs r5, 0x4 - adds r1, 0x1 - adds r0, r6, 0 - adds r0, 0xA1 - strb r0, [r1] - b _080914F8 - .align 2, 0 -_080914D4: .4byte 0x00002710 -_080914D8: - mov r1, sp - adds r1, 0x2 - movs r0, 0xC - strb r0, [r1] - adds r1, 0x1 - adds r0, r2, 0 - adds r0, 0xA1 - strb r0, [r1] - movs r5, 0x5 - add r4, sp, 0x4 - adds r0, r6, 0 - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r4] -_080914F8: - adds r1, r5, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r2, r5, 0 - add r1, sp - movs r0, 0xB4 - strb r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - mov r0, sp - adds r4, r0, r2 - adds r0, r7, 0 - movs r1, 0xA - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r4] - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - mov r1, sp - adds r4, r1, r6 - adds r0, r7, 0 - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r4] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r1, sp - adds r2, r1, r5 - movs r1, 0xB2 - strb r1, [r2] - mov r2, sp - adds r1, r2, r0 - movs r0, 0xFF - strb r0, [r1] - mov r0, sp - mov r1, r9 - mov r2, r8 - bl MenuPrint - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8091458 - - thumb_func_start sub_8091564 -sub_8091564: @ 8091564 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - lsls r0, 16 - lsrs r0, 16 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x10] - ldr r7, _080915BC @ =0x000186a0 - muls r0, r7 - ldr r1, _080915C0 @ =0x000011b8 - bl __divsi3 - adds r6, r0, 0 - movs r1, 0xA - bl __umodsi3 - cmp r0, 0x4 - bls _08091598 - adds r6, 0xA -_08091598: - movs r5, 0 - mov r4, sp - adds r0, r6, 0 - adds r1, r7, 0 - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xA1 - bne _080915C4 - mov r0, sp - strb r5, [r0] - movs r7, 0x2 - adds r0, 0x1 - strb r5, [r0] - b _080915C8 - .align 2, 0 -_080915BC: .4byte 0x000186a0 -_080915C0: .4byte 0x000011b8 -_080915C4: - movs r5, 0x1 - movs r7, 0x1 -_080915C8: - ldr r1, _0809160C @ =0x000186a0 - adds r0, r6, 0 - bl __umodsi3 - adds r6, r0, 0 - mov r0, sp - adds r4, r0, r7 - ldr r1, _08091610 @ =0x00002710 - adds r0, r6, 0 - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xA1 - bne _08091614 - cmp r5, 0 - bne _08091614 - adds r1, r7, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r2, r7, 0 - mov r3, sp - adds r0, r3, r1 - strb r5, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r3, r2 - strb r5, [r0] - b _0809161C - .align 2, 0 -_0809160C: .4byte 0x000186a0 -_08091610: .4byte 0x00002710 -_08091614: - movs r5, 0x1 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_0809161C: - ldr r1, _08091660 @ =0x00002710 - adds r0, r6, 0 - bl __umodsi3 - adds r6, r0, 0 - mov r0, sp - adds r4, r0, r7 - movs r1, 0xFA - lsls r1, 2 - adds r0, r6, 0 - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xA1 - bne _08091664 - cmp r5, 0 - bne _08091664 - adds r1, r7, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r2, r7, 0 - mov r3, sp - adds r0, r3, r1 - strb r5, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r3, r2 - strb r5, [r0] - b _0809166A - .align 2, 0 -_08091660: .4byte 0x00002710 -_08091664: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 -_0809166A: - movs r1, 0xFA - lsls r1, 2 - adds r0, r6, 0 - bl __umodsi3 - adds r6, r0, 0 - adds r1, r7, 0 - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r5, r7, 0 - mov r0, sp - adds r4, r0, r1 - adds r0, r6, 0 - movs r1, 0x64 - bl __udivsi3 - adds r0, 0xA1 - movs r1, 0 - mov r9, r1 - strb r0, [r4] - adds r0, r6, 0 - movs r1, 0x64 - bl __umodsi3 - adds r6, r0, 0 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r1, r7, 0 - mov r2, sp - adds r0, r2, r5 - movs r3, 0xAD - mov r8, r3 - mov r2, r8 - strb r2, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r5, r7, 0 - mov r3, sp - adds r4, r3, r1 - adds r0, r6, 0 - movs r1, 0xA - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r4] - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r1, r7, 0 - mov r2, sp - adds r0, r2, r5 - mov r3, r9 - strb r3, [r0] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r2, r7, 0 - add r1, sp - movs r0, 0xE0 - strb r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r3, r7, 0 - mov r0, sp - adds r1, r0, r2 - movs r0, 0xD6 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - adds r2, r7, 0 - mov r0, sp - adds r1, r0, r3 - movs r0, 0xE7 - strb r0, [r1] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r3, sp - adds r1, r3, r2 - mov r2, r8 - strb r2, [r1] - adds r1, r3, r0 - movs r0, 0xFF - strb r0, [r1] - mov r0, sp - mov r1, r10 - ldr r2, [sp, 0x10] - bl MenuPrint - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8091564 - - thumb_func_start sub_8091738 -sub_8091738: @ 8091738 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x80 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r0, 16 - lsrs r0, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldr r6, _080917C8 @ =gMonFootprintTable - bl NationalPokedexNumToSpecies - lsls r0, 16 - lsrs r0, 14 - adds r0, r6 - ldr r0, [r0] - mov r12, r0 - movs r7, 0 - movs r1, 0 - lsls r4, 14 - mov r8, r4 - lsls r5, 5 -_0809176A: - mov r2, r12 - adds r0, r2, r1 - ldrb r3, [r0] - movs r6, 0 - adds r4, r1, 0x1 -_08091774: - lsls r1, r6, 1 - adds r2, r3, 0 - asrs r2, r1 - movs r0, 0x1 - ands r2, r0 - movs r0, 0x2 - lsls r0, r1 - ands r0, r3 - cmp r0, 0 - beq _0809178C - movs r0, 0x10 - orrs r2, r0 -_0809178C: - mov r1, sp - adds r0, r1, r7 - strb r2, [r0] - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x3 - bls _08091774 - lsls r0, r4, 16 - lsrs r1, r0, 16 - cmp r1, 0x1F - bls _0809176A - movs r1, 0xC0 - lsls r1, 19 - adds r1, r5, r1 - add r1, r8 - mov r0, sp - movs r2, 0x40 - bl CpuSet - add sp, 0x80 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080917C8: .4byte gMonFootprintTable - thumb_func_end sub_8091738 - thumb_func_start sub_80917CC sub_80917CC: @ 80917CC push {r4,lr} diff --git a/include/pokedex.h b/include/pokedex.h index d046fbcd4..33e63ad30 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -146,8 +146,8 @@ u8 sub_80911C8(u16 num, u8, u8); u8 sub_8091260(u16 num, u8, u8, u8); void sub_8091304(u8 *name, u8, u8); -void sub_8091458(u16 height, int i, int i1); -void sub_8091564(u16 weight, int i, int i1); +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); u16 sub_8091818(u8, u16, u16, u16); diff --git a/src/pokedex.c b/src/pokedex.c index 538e98ff0..91ae27a3b 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -93,6 +93,7 @@ extern u8 gUnknown_03005E98; extern u8 gUnknown_083B4EC4[]; extern u8 gUnknown_08E96ACC[]; extern u8 gUnknown_08E96B58[]; +extern const u8 *const gMonFootprintTable[]; extern struct PokedexEntry gPokedexEntries[]; @@ -3814,3 +3815,151 @@ void unref_sub_80913A4(u16 a, u8 left, u8 top) str[5] = EOS; MenuPrint(str, left, top); } + +#ifdef UNITS_IMPERIAL +#define CHAR_PRIME (0xB4) +#define CHAR_DOUBLE_PRIME (0xB2) +void sub_8091458(u16 height, u8 left, u8 top) +{ + u8 buffer[16]; + u32 inches, feet; + u8 i = 0; + + inches = (height * 10000) / 254; + if (inches % 10 >= 5) + inches += 10; + feet = inches / 120; + inches = (inches - (feet * 120)) / 10; + + buffer[i++] = EXT_CTRL_CODE_BEGIN; + buffer[i++] = 0x13; + if (feet / 10 == 0) + { + buffer[i++] = 18; + buffer[i++] = feet + CHAR_0; + } + else + { + buffer[i++] = 12; + buffer[i++] = feet / 10 + CHAR_0; + buffer[i++] = (feet % 10) + CHAR_0; + } + buffer[i++] = CHAR_PRIME; + buffer[i++] = (inches / 10) + CHAR_0; + buffer[i++] = (inches % 10) + CHAR_0; + buffer[i++] = CHAR_DOUBLE_PRIME; + buffer[i++] = EOS; + MenuPrint(buffer, left, top); +} +#else +void sub_8091458(u16 height, u8 left, u8 top) +{ + unref_sub_80913A4(height, left, top); +} +#endif + +#ifdef UNITS_IMPERIAL +#define CHAR_b (0xD6) +#define CHAR_l (0xE0) +#define CHAR_s (0xE7) +void sub_8091564(u16 weight, u8 left, u8 top) +{ + u8 buffer[16]; + u32 lbs; + u8 i = 0; + bool8 output; + + lbs = (weight * 100000) / 4536; + if (lbs % 10 >= 5) + lbs += 10; + output = FALSE; + + buffer[i] = (lbs / 100000) + CHAR_0; + if (buffer[i] == CHAR_0 && output == FALSE) + { + buffer[i++] = CHAR_SPACE; + buffer[i++] = CHAR_SPACE; + } + else + { + output = TRUE; + i++; + } + + lbs = (lbs % 100000); + buffer[i] = (lbs / 10000) + CHAR_0; + if (buffer[i] == CHAR_0 && output == FALSE) + { + buffer[i++] = CHAR_SPACE; + buffer[i++] = CHAR_SPACE; + } + else + { + output = TRUE; + i++; + } + + lbs = (lbs % 10000); + buffer[i] = (lbs / 1000) + CHAR_0; + if (buffer[i] == CHAR_0 && output == FALSE) + { + buffer[i++] = CHAR_SPACE; + buffer[i++] = CHAR_SPACE; + } + else + { + output = TRUE; + i++; + } + lbs = (lbs % 1000); + buffer[i++] = (lbs / 100) + CHAR_0; + lbs = (lbs % 100); + buffer[i++] = CHAR_PERIOD; + buffer[i++] = (lbs / 10) + CHAR_0; + buffer[i++] = CHAR_SPACE; + buffer[i++] = CHAR_l; + buffer[i++] = CHAR_b; + buffer[i++] = CHAR_s; + buffer[i++] = CHAR_PERIOD; + buffer[i++] = EOS; + MenuPrint(buffer, left, top); +} +#else +void sub_8091564(u16 arg0, u8 left, u8 top) +{ + unref_sub_80913A4(arg0, left, top); +} +#endif + +void sub_8091738(u16 a, u16 b, u16 c) +{ + u8 arr[0x80]; + u16 i; + u16 j; + const u8 *r12; + u16 r7; + u8 r3; + + r12 = gMonFootprintTable[NationalPokedexNumToSpecies(a)]; + for (r7 = 0, i = 0; i < 32; i++) + { + r3 = r12[i]; + for (j = 0; j < 4; j++) + { + u32 r1 = j * 2; + s32 r2 = (r3 >> r1) & 1; + + if (r3 & (2 << r1)) + r2 |= 0x10; + +// Needed to match +#ifndef NONMATCHING + asm("");asm("");asm("");asm("");asm(""); +#endif + + arr[r7] = r2; + r7++; + } + } + CpuCopy16(arr, (u16 *)(VRAM + b * 0x4000 + c * 0x20), 0x80); +} |