diff options
Diffstat (limited to 'src/pokemon_storage_system.c')
-rw-r--r-- | src/pokemon_storage_system.c | 164 |
1 files changed, 162 insertions, 2 deletions
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 36ed78a54..dc2e80a61 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -463,8 +463,6 @@ EWRAM_DATA static u8 sMovingMonOrigBoxId = 0; EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0; EWRAM_DATA static bool8 sCanOnlyMove = 0; -extern void sub_80C6D80(u8 *arg0, void *arg1, u8 arg2, u8 arg3, s32 arg4); - extern const struct CompressedSpriteSheet gMonFrontPicTable[]; // This file's functions. @@ -1543,6 +1541,168 @@ static const u8 gHandCursorTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cu static const u8 gHandCursorShadowTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp"); // code +void sub_80C6D80(u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4) +{ + s32 i, val, val2; + u16 windowId; + u8 txtColor[3]; + u8 *tileData1, *tileData2; + struct WindowTemplate winTemplate = {0}; + + winTemplate.width = 24; + winTemplate.height = 2; + windowId = AddWindow(&winTemplate); + FillWindowPixelBuffer(windowId, (arg3 << 4) | arg3); + tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA); + tileData2 = (winTemplate.width * 32) + tileData1; + + if (!arg2) + txtColor[0] = 0; + else + txtColor[0] = arg3; + txtColor[1] = 0xF; + txtColor[2] = 0xE; + AddTextPrinterParameterized4(windowId, 1, 0, 1, 0, 0, txtColor, -1, string); + + val = arg4; + if (val > 6u) + val = 6; + val2 = arg4 - 6; + if (val > 0) + { + for (i = val; i != 0; i--) + { + CpuCopy16(tileData1, dst, 0x80); + CpuCopy16(tileData2, dst + 0x80, 0x80); + tileData1 += 0x80; + tileData2 += 0x80; + dst += 0x100; + } + } + + if (val2 > 0) + CpuFill16((arg3 << 4) | arg3, dst, (u32)(val2) * 0x100); + + RemoveWindow(windowId); +} + +NAKED +void sub_80C6EAC() +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x2C\n\ + str r0, [sp, 0x20]\n\ + str r1, [sp, 0x24]\n\ + adds r6, r3, 0\n\ + ldr r0, [sp, 0x4C]\n\ + mov r9, r0\n\ + ldr r1, [sp, 0x50]\n\ + mov r10, r1\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + str r2, [sp, 0x28]\n\ + lsls r6, 24\n\ + lsrs r6, 24\n\ + mov r2, r9\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r9, r2\n\ + mov r0, r10\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + movs r0, 0\n\ + movs r1, 0\n\ + str r0, [sp, 0x18]\n\ + str r1, [sp, 0x1C]\n\ + ldr r0, [sp, 0x20]\n\ + bl StringLength_Multibyte\n\ + lsls r0, 24\n\ + ldr r2, =0x00ffffff\n\ + ldr r1, [sp, 0x18]\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + str r1, [sp, 0x18]\n\ + ldr r1, =0xffffff00\n\ + add r2, sp, 0x18\n\ + mov r8, r2\n\ + ldr r0, [r2, 0x4]\n\ + ands r0, r1\n\ + movs r1, 0x2\n\ + orrs r0, r1\n\ + str r0, [r2, 0x4]\n\ + ldr r5, [sp, 0x18]\n\ + lsrs r5, 24\n\ + lsls r5, 5\n\ + mov r0, r8\n\ + bl AddWindow\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + lsls r1, r6, 4\n\ + orrs r1, r6\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r4, 0\n\ + bl FillWindowPixelBuffer\n\ + adds r0, r4, 0\n\ + movs r1, 0x7\n\ + bl GetWindowAttribute\n\ + adds r7, r0, 0\n\ + mov r0, r8\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 5\n\ + mov r8, r0\n\ + add r8, r7\n\ + add r0, sp, 0x14\n\ + movs r1, 0\n\ + strb r6, [r0]\n\ + mov r2, r9\n\ + strb r2, [r0, 0x1]\n\ + mov r2, r10\n\ + strb r2, [r0, 0x2]\n\ + str r1, [sp]\n\ + str r1, [sp, 0x4]\n\ + str r0, [sp, 0x8]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + str r0, [sp, 0xC]\n\ + ldr r0, [sp, 0x20]\n\ + str r0, [sp, 0x10]\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl AddTextPrinterParameterized4\n\ + lsrs r5, 1\n\ + adds r0, r7, 0\n\ + ldr r1, [sp, 0x24]\n\ + adds r2, r5, 0\n\ + bl CpuSet\n\ + ldr r2, [sp, 0x24]\n\ + ldr r0, [sp, 0x28]\n\ + adds r1, r2, r0\n\ + mov r0, r8\n\ + adds r2, r5, 0\n\ + bl CpuSet\n\ + adds r0, r4, 0\n\ + bl RemoveWindow\n\ + add sp, 0x2C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} + u8 CountMonsInBox(u8 boxId) { u16 i, count; |