diff options
author | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-12-16 17:48:14 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-16 17:48:14 -0800 |
commit | 1d5641f054a69f24ad0ea22232a20d4e70d5cb31 (patch) | |
tree | 0ddd50dc6e9b3cdeeddc19dcd5be334b7f7ce4ef /src | |
parent | bf434629af83d7193db0d6c7f0e690ac9301e841 (diff) | |
parent | 2b99f7bcec8a658c502e104f735cb638047f0de7 (diff) |
Merge pull request #129 from marijnvdwerf/decompile/money
Decompile money
Diffstat (limited to 'src')
-rw-r--r-- | src/money.c | 291 | ||||
-rw-r--r-- | src/scrcmd.c | 1 | ||||
-rw-r--r-- | src/trainer_card.c | 1 |
3 files changed, 293 insertions, 0 deletions
diff --git a/src/money.c b/src/money.c new file mode 100644 index 000000000..38ca5f817 --- /dev/null +++ b/src/money.c @@ -0,0 +1,291 @@ +#include "global.h" +#include "money.h" +#include "decompress.h" +#include "menu.h" +#include "sprite.h" +#include "string_util.h" + +#define SPRITE_TAG_MONEY (0x2722) + +extern u16 gSpecialVar_0x8005; +extern u8 gUnknown_02038734; + +extern const struct SpriteSheet gUnknown_083CF584; +extern const struct SpritePalette gUnknown_083CF58C; +extern const struct SpriteTemplate gSpriteTemplate_83CF56C; + +bool8 IsEnoughMoney(u32 budget, u32 cost) { + if (budget >= cost) { + return TRUE; + } + + return FALSE; +} + +void sub_80B79B8(u32 *arg0, u32 arg1) { + if (*arg0 > *arg0 + arg1) { + *arg0 = 999999; + return; + } + + *arg0 = *arg0 + arg1; + if (*arg0 > 999999) { + *arg0 = 999999; + } +} + +void sub_80B79E0(u32 *arg0, u32 arg1) { + if (*arg0 < arg1) { + *arg0 = 0; + } else { + *arg0 = *arg0 - arg1; + } +} + +void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2) { + u8 width; + u8 i; + + if (arg1 > 999999) { + width = 7; + } else if (arg1 > 99999) { + width = 6; + } else if (arg1 > 10000) { + width = 5; + } else if (arg1 > 999) { + width = 4; + } else if (arg1 > 99) { + width = 3; + } else if (arg1 > 9) { + width = 2; + } else { + width = 1; + } + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x14; + buffer[2] = 0x06; + buffer += 3; + + for (i = 0; i < arg2 - width; i++) { + buffer[0] = CHAR_SPACE; + buffer += 1; + } + + buffer[0] = CHAR_CURRENCY; + buffer += 1; + + buffer = ConvertIntToDecimalString(buffer, arg1); + + buffer[0] = EXT_CTRL_CODE_BEGIN; + buffer[1] = 0x14; + buffer[2] = 0x00; + buffer[3] = EOS; +} + +#ifdef NONMATCHING +void sub_80B7A94(u32 arg0, u8 size, u8 x, u8 y) { + u8 buffer[16]; + u8 stringWidth; + + sub_80B79F8(buffer, arg0, size); + stringWidth = sub_8072CA4(buffer); + + if (stringWidth >= (size + 1) * 8) { + MenuPrint(buffer, x, y); + } else { + u8 pixelX = (size + 1) * 8 - stringWidth; + MenuPrint_PixelCoords(buffer, pixelX, y * 8, 1); + } +} +#else + +__attribute__((naked)) +void sub_80B7A94(u32 arg0, u8 arg1, u8 x, u8 y) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + sub sp, 0x10\n\ + adds r4, r0, 0\n\ + lsls r1, 24\n\ + lsrs r5, r1, 24\n\ + lsls r2, 24\n\ + lsrs r6, r2, 24\n\ + lsls r3, 24\n\ + lsrs r7, r3, 24\n\ + mov r0, sp\n\ + adds r1, r4, 0\n\ + adds r2, r5, 0\n\ + bl sub_80B79F8\n\ + mov r0, sp\n\ + bl sub_8072CA4\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + adds r0, r5, 0x1\n\ + lsls r0, 3\n\ + cmp r2, r0\n\ + blt _080B7ACE\n\ + mov r0, sp\n\ + adds r1, r6, 0\n\ + adds r2, r7, 0\n\ + bl MenuPrint\n\ + b _080B7AE4\n\ +_080B7ACE:\n\ + adds r1, r6, 0x1\n\ + adds r1, r5\n\ + lsls r1, 3\n\ + subs r1, r2\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + lsls r2, r7, 3\n\ + mov r0, sp\n\ + movs r3, 0x1\n\ + bl MenuPrint_PixelCoords\n\ +_080B7AE4:\n\ + add sp, 0x10\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +#endif + +void sub_80B7AEC(u32 arg0, u8 left, u8 top) { + u8 buffer[32]; + u8 *ptr; + + ptr = &buffer[0]; + + ptr[0] = CHAR_CURRENCY; + ptr++; + + ptr = ConvertIntToDecimalString(ptr, arg0); + + MenuPrint_RightAligned(buffer, left, top); + + ptr[0] = 0xFC; + ptr[1] = 0x14; + ptr[2] = 0x00; + ptr[3] = 0xFF; +} + +__attribute__((naked)) +void sub_80B7B34(void) { + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x4\n\ + mov r8, r0\n\ + adds r5, r1, 0\n\ + mov r9, r2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + mov r1, r9\n\ + lsls r1, 8\n\ + mov r9, r1\n\ + ldr r4, _080B7BD8 @ =gDecoration10000_Gfx\n\ + adds r0, r1, r4\n\ + lsls r6, r5, 4\n\ + subs r6, r5\n\ + lsls r1, r6, 6\n\ + mov r3, r8\n\ + adds r3, 0x1\n\ + lsls r3, 5\n\ + ldr r2, _080B7BDC @ =0x06008000\n\ + adds r3, r2\n\ + adds r1, r3\n\ + movs r2, 0x20\n\ + str r3, [sp]\n\ + bl CpuFastSet\n\ + adds r4, 0x80\n\ + add r9, r4\n\ + adds r0, r5, 0x1\n\ + lsls r4, r0, 4\n\ + subs r4, r0\n\ + lsls r1, r4, 6\n\ + ldr r3, [sp]\n\ + adds r1, r3\n\ + mov r0, r9\n\ + movs r2, 0x20\n\ + bl CpuFastSet\n\ + movs r3, 0\n\ + lsls r5, 5\n\ + mov r0, r8\n\ + adds r7, r5, r0\n\ + lsls r6, 1\n\ + adds r6, 0x1\n\ + add r6, r8\n\ + ldr r1, _080B7BE0 @ =0xfffff000\n\ + adds r5, r1, 0\n\ + ldr r0, _080B7BE4 @ =0x0600f800\n\ + mov r12, r0\n\ + ldr r1, _080B7BE8 @ =0x0600f840\n\ + mov r9, r1\n\ + lsls r4, 1\n\ + adds r4, 0x1\n\ + add r4, r8\n\ +_080B7BAA:\n\ + adds r1, r7, r3\n\ + lsls r1, 1\n\ + mov r0, r12\n\ + adds r2, r1, r0\n\ + adds r0, r3, r6\n\ + adds r0, r5\n\ + strh r0, [r2]\n\ + add r1, r9\n\ + adds r0, r3, r4\n\ + adds r0, r5\n\ + strh r0, [r1]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0x3\n\ + bls _080B7BAA\n\ + add sp, 0x4\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080B7BD8: .4byte gDecoration10000_Gfx\n\ +_080B7BDC: .4byte 0x06008000\n\ +_080B7BE0: .4byte 0xfffff000\n\ +_080B7BE4: .4byte 0x0600f800\n\ +_080B7BE8: .4byte 0x0600f840\n\ + .syntax divided\n"); +} + +void sub_80B7BEC(u32 arg0, u8 x, u8 y) { + sub_80B7A94(arg0, 6, x + 6, y + 1); +} + +void sub_80B7C14(u32 arg0, u8 x, u8 y) { + MenuDrawTextWindow(x, y, x + 13, y + 3); + sub_80B7BEC(arg0, x, y); + + LoadCompressedObjectPic(&gUnknown_083CF584); + LoadCompressedObjectPalette(&gUnknown_083CF58C); + + gUnknown_02038734 = CreateSprite(&gSpriteTemplate_83CF56C, x * 8 + 19, y * 8 + 11, 0); +} + +void RemoveMoneyLabelObject(u8 x, u8 y) { + DestroySpriteAndFreeResources(&gSprites[gUnknown_02038734]); + FreeSpritePaletteByTag(SPRITE_TAG_MONEY); + MenuZeroFillWindowRect(x, y, x + 13, y + 3); +} + +bool8 sub_80B7CE8(void) { + return IsEnoughMoney(gSaveBlock1.money, gSpecialVar_0x8005); +} + +void sub_80B7D0C(void) { + sub_80B79E0(&gSaveBlock1.money, gSpecialVar_0x8005); +} diff --git a/src/scrcmd.c b/src/scrcmd.c index ef77966c6..a8567a2bb 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -12,6 +12,7 @@ #include "asm_fieldmap.h" #include "main.h" #include "menu.h" +#include "money.h" #include "decoration.h" #include "field_message_box.h" #include "sound.h" diff --git a/src/trainer_card.c b/src/trainer_card.c index 560e8ece3..041245bdc 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -6,6 +6,7 @@ #include "link.h" #include "main.h" #include "menu.h" +#include "money.h" #include "palette.h" #include "pokedex.h" #include "rom4.h" |