diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-09-30 19:47:38 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-09-30 19:47:38 -0400 |
commit | 8eea5b6d750a629c14a152c240f84b02b5e4f0c6 (patch) | |
tree | 6ef1cc098696ebe5d00f14e05fa6e4a6c98945f9 | |
parent | 89be71dcb846b1d1eded569db6dd6709cc42201f (diff) |
Finish berry_pouch code decomp
-rw-r--r-- | asm/berry_pouch.s | 466 | ||||
-rw-r--r-- | include/berry_pouch.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/berry_pouch.c | 131 |
4 files changed, 128 insertions, 472 deletions
diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s deleted file mode 100644 index 82ce14f9d..000000000 --- a/asm/berry_pouch.s +++ /dev/null @@ -1,466 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_813E910 -sub_813E910: @ 813E910 - push {r4,lr} - ldr r0, _0813E994 @ =gUnknown_84643B8 - bl InitWindows - bl DeactivateAllTextPrinters - movs r0, 0 - movs r1, 0x1 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0 - movs r1, 0x13 - movs r2, 0xD0 - bl TextWindow_LoadResourcesStdFrame0 - movs r0, 0 - movs r1, 0xA - movs r2, 0xC0 - bl TextWindow_SetStdFrame0_WithPal - ldr r0, _0813E998 @ =gTMCaseMainWindowPalette - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - movs r4, 0 -_0813E946: - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _0813E946 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - movs r4, 0 - ldr r3, _0813E99C @ =gUnknown_203F38C - movs r2, 0xFF -_0813E97C: - adds r0, r4, r3 - ldrb r1, [r0] - orrs r1, r2 - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xD - bls _0813E97C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813E994: .4byte gUnknown_84643B8 -_0813E998: .4byte gTMCaseMainWindowPalette -_0813E99C: .4byte gUnknown_203F38C - thumb_func_end sub_813E910 - - thumb_func_start sub_813E9A0 -sub_813E9A0: @ 813E9A0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - mov r9, r3 - ldr r3, [sp, 0x30] - ldr r4, [sp, 0x34] - ldr r6, [sp, 0x38] - ldr r5, [sp, 0x3C] - mov r8, r5 - ldr r5, [sp, 0x40] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r7, r9 - lsls r7, 24 - lsrs r7, 24 - mov r9, r7 - lsls r3, 24 - lsrs r3, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r6, 24 - lsrs r6, 24 - lsls r5, 24 - lsrs r5, 24 - str r4, [sp] - str r6, [sp, 0x4] - lsls r4, r5, 1 - adds r4, r5 - ldr r5, _0813EA04 @ =gUnknown_8464448 - adds r4, r5 - str r4, [sp, 0x8] - mov r4, r8 - lsls r4, 24 - asrs r4, 24 - str r4, [sp, 0xC] - str r2, [sp, 0x10] - mov r2, r9 - bl AddTextPrinterParameterized4 - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813EA04: .4byte gUnknown_8464448 - thumb_func_end sub_813E9A0 - - thumb_func_start sub_813EA08 -sub_813EA08: @ 813EA08 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813EA4C @ =gUnknown_203F38C - adds r5, r4, r0 - ldrb r0, [r5] - cmp r0, 0xFF - bne _0813EA6C - lsls r0, r4, 3 - ldr r1, _0813EA50 @ =gUnknown_84643D8 - adds r0, r1 - bl AddWindow - strb r0, [r5] - cmp r4, 0x2 - beq _0813EA38 - cmp r4, 0x6 - beq _0813EA38 - cmp r4, 0x7 - beq _0813EA38 - cmp r4, 0x8 - beq _0813EA38 - cmp r4, 0x9 - bne _0813EA54 -_0813EA38: - ldr r0, _0813EA4C @ =gUnknown_203F38C - adds r0, r4, r0 - ldrb r0, [r0] - movs r1, 0 - movs r2, 0xA - movs r3, 0xC - bl DrawStdFrameWithCustomTileAndPalette - b _0813EA60 - .align 2, 0 -_0813EA4C: .4byte gUnknown_203F38C -_0813EA50: .4byte gUnknown_84643D8 -_0813EA54: - ldrb r0, [r5] - movs r1, 0 - movs r2, 0x1 - movs r3, 0xE - bl DrawStdFrameWithCustomTileAndPalette -_0813EA60: - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r0, _0813EA74 @ =gUnknown_203F38C - adds r0, r4, r0 - ldrb r0, [r0] -_0813EA6C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0813EA74: .4byte gUnknown_203F38C - thumb_func_end sub_813EA08 - - thumb_func_start sub_813EA78 -sub_813EA78: @ 813EA78 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EA94 @ =gUnknown_203F38C - adds r0, r1 - ldrb r0, [r0] - movs r1, 0 - movs r2, 0x1 - movs r3, 0xE - bl DrawStdFrameWithCustomTileAndPalette - pop {r0} - bx r0 - .align 2, 0 -_0813EA94: .4byte gUnknown_203F38C - thumb_func_end sub_813EA78 - - thumb_func_start sub_813EA98 -sub_813EA98: @ 813EA98 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813EAC8 @ =gUnknown_203F38C - adds r4, r0 - ldrb r0, [r4] - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldrb r0, [r4] - bl ClearWindowTilemap - ldrb r0, [r4] - bl RemoveWindow - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - movs r0, 0xFF - strb r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EAC8: .4byte gUnknown_203F38C - thumb_func_end sub_813EA98 - - thumb_func_start sub_813EACC -sub_813EACC: @ 813EACC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EB0C @ =gUnknown_203F38C - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0xFF - beq _0813EB04 - movs r1, 0 - bl ClearDialogWindowAndFrameToTransparent - ldrb r0, [r4] - bl ClearWindowTilemap - ldrb r0, [r4] - bl RemoveWindow - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - movs r0, 0xFF - strb r0, [r4] -_0813EB04: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EB0C: .4byte gUnknown_203F38C - thumb_func_end sub_813EACC - - thumb_func_start sub_813EB10 -sub_813EB10: @ 813EB10 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EB1C @ =gUnknown_203F38C - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_0813EB1C: .4byte gUnknown_203F38C - thumb_func_end sub_813EB10 - - thumb_func_start DisplayItemMessageInBerryPouch -DisplayItemMessageInBerryPouch: @ 813EB20 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r2, 0 - mov r8, r3 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, _0813EB74 @ =gUnknown_203F38C - ldrb r0, [r4, 0x5] - cmp r0, 0xFF - bne _0813EB44 - ldr r0, _0813EB78 @ =gUnknown_84643D8 + 0x28 - bl AddWindow - strb r0, [r4, 0x5] -_0813EB44: - bl GetTextSpeedSetting - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4, 0x5] - str r5, [sp] - str r0, [sp, 0x4] - str r7, [sp, 0x8] - mov r0, r8 - str r0, [sp, 0xC] - adds r0, r6, 0 - movs r2, 0x13 - movs r3, 0xD - bl DisplayMessageAndContinueTask - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813EB74: .4byte gUnknown_203F38C -_0813EB78: .4byte gUnknown_84643D8 + 0x28 - thumb_func_end DisplayItemMessageInBerryPouch - - thumb_func_start sub_813EB7C -sub_813EB7C: @ 813EB7C - push {lr} - sub sp, 0x10 - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EBA4 @ =gUnknown_84643D8 + 0x18 - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0xE - str r2, [sp, 0x8] - str r3, [sp, 0xC] - movs r2, 0x2 - movs r3, 0 - bl CreateYesNoMenuWithCallbacks - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_0813EBA4: .4byte gUnknown_84643D8 + 0x18 - thumb_func_end sub_813EB7C - - thumb_func_start sub_813EBA8 -sub_813EBA8: @ 813EBA8 - push {lr} - sub sp, 0x10 - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EBD0 @ =gUnknown_84643D8 + 0x20 - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0xE - str r2, [sp, 0x8] - str r3, [sp, 0xC] - movs r2, 0x2 - movs r3, 0 - bl CreateYesNoMenuWithCallbacks - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_0813EBD0: .4byte gUnknown_84643D8 + 0x20 - thumb_func_end sub_813EBA8 - - thumb_func_start sub_813EBD4 -sub_813EBD4: @ 813EBD4 - push {r4,lr} - movs r0, 0x2 - bl sub_813EA08 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813EC04 @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0xA4 - lsls r1, 2 - adds r0, r1 - bl GetMoney - adds r3, r0, 0 - adds r0, r4, 0 - movs r1, 0xA - movs r2, 0xC - bl PrintMoneyAmountInMoneyBoxWithBorder - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EC04: .4byte gSaveBlock1Ptr - thumb_func_end sub_813EBD4 - - thumb_func_start sub_813EC08 -sub_813EC08: @ 813EC08 - push {lr} - ldr r0, _0813EC20 @ =gUnknown_84644B8 - movs r1, 0x28 - movs r2, 0x4C - movs r3, 0 - bl CreateSprite - ldr r1, _0813EC24 @ =gUnknown_203F39C - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0813EC20: .4byte gUnknown_84644B8 -_0813EC24: .4byte gUnknown_203F39C - thumb_func_end sub_813EC08 - - thumb_func_start sub_813EC28 -sub_813EC28: @ 813EC28 - push {r4,lr} - ldr r0, _0813EC58 @ =gUnknown_203F39C - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0813EC5C @ =gSprites - adds r4, r0, r1 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0813EC52 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, _0813EC60 @ =sub_813EC64 - str r0, [r4, 0x1C] -_0813EC52: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EC58: .4byte gUnknown_203F39C -_0813EC5C: .4byte gSprites -_0813EC60: .4byte sub_813EC64 - thumb_func_end sub_813EC28 - - thumb_func_start sub_813EC64 -sub_813EC64: @ 813EC64 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0813EC80 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAffineAnim - ldr r0, _0813EC88 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_0813EC80: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EC88: .4byte SpriteCallbackDummy - thumb_func_end sub_813EC64 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/berry_pouch.h b/include/berry_pouch.h index 8e652225b..58f58fd99 100644 --- a/include/berry_pouch.h +++ b/include/berry_pouch.h @@ -6,7 +6,7 @@ void BerryPouch_StartFadeToExitCallback(u8 taskId); void BerryPouch_SetExitCallback(void (*)(void)); void InitBerryPouch(u8, void (*)(void), u8); -void DisplayItemMessageInBerryPouch(u8 taskId, u8 bgId, const u8 * str, TaskFunc followUpFunc); +void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFunc followUpFunc); void sub_813E2B8(u8 taskId); #endif //GUARD_BERRY_POUCH_H diff --git a/ld_script.txt b/ld_script.txt index a7ab32150..fa7f1302b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -252,7 +252,6 @@ SECTIONS { asm/wild_pokemon_area.o(.text); src/dynamic_placeholder_text_util.o(.text); src/berry_pouch.o(.text); - asm/berry_pouch.o(.text); asm/itemfinder.o(.text); src/buy_menu_helpers.o(.text); src/slot_machine.o(.text); diff --git a/src/berry_pouch.c b/src/berry_pouch.c index e6746d4ca..abfa4aacf 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -17,6 +17,7 @@ #include "item.h" #include "item_use.h" #include "party_menu.h" +#include "text_window.h" #include "strings.h" #include "string_util.h" #include "sound.h" @@ -118,15 +119,16 @@ void sub_813E7F0(u8 taskId); void sub_813E8D4(u8 taskId); void sub_813E910(void); void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); -u8 sub_813EA08(u8); -void sub_813EA98(u8); -void sub_813EACC(u8); -u8 sub_813EB10(u8); +u8 sub_813EA08(u8 winIdx); +void sub_813EA98(u8 winIdx); +void sub_813EACC(u8 winIdx); +u8 sub_813EB10(u8 winIdx); void sub_813EB7C(u8 taskId, const struct YesNoFuncTable * ptrs); void sub_813EBA8(u8 taskId, const struct YesNoFuncTable * ptrs); void sub_813EBD4(void); void sub_813EC08(void); void sub_813EC28(void); +void sub_813EC64(struct Sprite * sprite); static const struct BgTemplate gUnknown_846434C[] = { { @@ -1404,3 +1406,124 @@ void sub_813E8D4(u8 taskId) sub_813E2B8(taskId); } } + +void sub_813E910(void) +{ + u8 i; + InitWindows(gUnknown_84643B8); + DeactivateAllTextPrinters(); + TextWindow_SetUserSelectedFrame(0, 0x001, 0xE0); + TextWindow_LoadResourcesStdFrame0(0, 0x013, 0xD0); + TextWindow_SetStdFrame0_WithPal(0, 0x00A, 0xC0); + LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x20); + for (i = 0; i < 3; i++) + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + PutWindowTilemap(0); + PutWindowTilemap(1); + PutWindowTilemap(2); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + for (i = 0; i < 14; i++) + gUnknown_203F38C[i] = 0xFF; +} + +void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) +{ + AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_8464448[colorIdx], speed, str); +} + +u8 sub_813EA08(u8 winIdx) +{ + u8 retval = gUnknown_203F38C[winIdx]; + if (retval == 0xFF) + { + gUnknown_203F38C[winIdx] = AddWindow(&gUnknown_84643D8[winIdx]); + if (winIdx == 2 || winIdx == 6 || winIdx == 7 || winIdx == 8 || winIdx == 9) + DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x00A, 0xC); + else + DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x001, 0xE); + ScheduleBgCopyTilemapToVram(2); + retval = gUnknown_203F38C[winIdx]; + } + return retval; +} + +void sub_813EA78(u8 winIdx) +{ + DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x001, 0xE); +} + +void sub_813EA98(u8 winIdx) +{ + ClearStdWindowAndFrameToTransparent(gUnknown_203F38C[winIdx], FALSE); + ClearWindowTilemap(gUnknown_203F38C[winIdx]); + RemoveWindow(gUnknown_203F38C[winIdx]); + ScheduleBgCopyTilemapToVram(2); + gUnknown_203F38C[winIdx] = 0xFF; +} + +void sub_813EACC(u8 winIdx) +{ + if (gUnknown_203F38C[winIdx] != 0xFF) + { + ClearDialogWindowAndFrameToTransparent(gUnknown_203F38C[winIdx], FALSE); + ClearWindowTilemap(gUnknown_203F38C[winIdx]); + RemoveWindow(gUnknown_203F38C[winIdx]); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + gUnknown_203F38C[winIdx] = 0xFF; + } +} + +u8 sub_813EB10(u8 winIdx) +{ + return gUnknown_203F38C[winIdx]; +} + +void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFunc followUpFunc) +{ + if (gUnknown_203F38C[5] == 0xFF) + gUnknown_203F38C[5] = AddWindow(&gUnknown_84643D8[5]); + DisplayMessageAndContinueTask(taskId, gUnknown_203F38C[5], 0x013, 0xD, fontId, GetTextSpeedSetting(), str, followUpFunc); + ScheduleBgCopyTilemapToVram(2); +} + +void sub_813EB7C(u8 taskId, const struct YesNoFuncTable * ptrs) +{ + CreateYesNoMenuWithCallbacks(taskId, &gUnknown_84643D8[3], 2, 0, 2, 0x001, 0xE, ptrs); +} + +void sub_813EBA8(u8 taskId, const struct YesNoFuncTable * ptrs) +{ + CreateYesNoMenuWithCallbacks(taskId, &gUnknown_84643D8[4], 2, 0, 2, 0x001, 0xE, ptrs); +} + +void sub_813EBD4(void) +{ + PrintMoneyAmountInMoneyBoxWithBorder(sub_813EA08(2), 0x00A, 0xC, GetMoney(&gSaveBlock1Ptr->money)); +} + +void sub_813EC08(void) +{ + gUnknown_203F39C = CreateSprite(&gUnknown_84644B8, 40, 76, 0); +} + +void sub_813EC28(void) +{ + struct Sprite * sprite = &gSprites[gUnknown_203F39C]; + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_813EC64; + } +} + +void sub_813EC64(struct Sprite * sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 0); + sprite->callback = SpriteCallbackDummy; + } +} |