summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/item_menu.s2
-rw-r--r--asm/shop.s3563
-rw-r--r--data/graphics.s16
-rw-r--r--data/shop.s92
-rw-r--r--data/strings.s24
-rw-r--r--graphics/shop_menu/shop_menu.pal35
-rw-r--r--graphics/shop_menu/shop_menu.pngbin0 -> 261 bytes
-rw-r--r--graphics/shop_menu/shop_tilemap.binbin0 -> 316 bytes
-rw-r--r--graphics/shop_menu/shop_tm_hm_tilemap.binbin0 -> 312 bytes
-rw-r--r--include/fieldmap.h1
-rw-r--r--include/graphics.h6
-rw-r--r--include/item.h1
-rw-r--r--include/list_menu.h38
-rw-r--r--include/sea_cottage_special_anim.h12
-rw-r--r--include/shop.h10
-rw-r--r--include/strings.h15
-rw-r--r--ld_script.txt6
-rw-r--r--src/berry_pouch.c2
-rw-r--r--src/buy_menu_helpers.c4
-rw-r--r--src/fieldmap.c2
-rw-r--r--src/sea_cottage_special_anim.c264
-rw-r--r--src/shop.c1161
-rw-r--r--src/tm_case.c2
-rw-r--r--sym_ewram.txt46
24 files changed, 1554 insertions, 3748 deletions
diff --git a/asm/item_menu.s b/asm/item_menu.s
index 3f662656e..06ac697bc 100644
--- a/asm/item_menu.s
+++ b/asm/item_menu.s
@@ -5484,7 +5484,7 @@ sub_810A9D4: @ 810A9D4
mov r2, r8
ldrh r1, [r2, 0x10]
movs r2, 0x2
- bl sub_809C09C
+ bl RecordItemPurchase
mov r3, r8
ldrb r0, [r3]
ldr r4, _0810AAE4 @ =gUnknown_203ACFC
diff --git a/asm/shop.s b/asm/shop.s
deleted file mode 100644
index ca92ff4b7..000000000
--- a/asm/shop.s
+++ /dev/null
@@ -1,3563 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_809AAB0
-sub_809AAB0: @ 809AAB0
- push {r4-r6,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- bl sub_809AB7C
- ldr r4, _0809AAE8 @ =gUnknown_2039934
- movs r1, 0xF
- ands r1, r0
- ldrb r2, [r4, 0x16]
- movs r0, 0x10
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x16]
- movs r0, 0
- strh r0, [r4, 0xC]
- bl ContextNpcGetTextColor
- lsls r0, 24
- cmp r0, 0
- bne _0809AAF0
- ldrh r0, [r4, 0x16]
- ldr r1, _0809AAEC @ =0xfffffe0f
- ands r1, r0
- movs r0, 0x40
- b _0809AAF8
- .align 2, 0
-_0809AAE8: .4byte gUnknown_2039934
-_0809AAEC: .4byte 0xfffffe0f
-_0809AAF0:
- ldrh r0, [r4, 0x16]
- ldr r1, _0809AB68 @ =0xfffffe0f
- ands r1, r0
- movs r0, 0x50
-_0809AAF8:
- orrs r1, r0
- strh r1, [r4, 0x16]
- ldr r4, _0809AB6C @ =gUnknown_2039950
- ldr r0, _0809AB70 @ =gUnknown_83DF0BC
- bl AddWindow
- strb r0, [r4]
- ldrb r0, [r4]
- movs r1, 0
- bl SetStdWindowBorderStyle
- movs r0, 0x2
- movs r1, 0
- bl GetMenuCursorDimensionByFont
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldrb r0, [r4]
- movs r6, 0x10
- str r6, [sp]
- movs r5, 0x3
- str r5, [sp, 0x4]
- ldr r1, _0809AB74 @ =gUnknown_83DF09C
- str r1, [sp, 0x8]
- movs r1, 0x2
- movs r3, 0x2
- bl PrintTextArray
- ldrb r0, [r4]
- str r6, [sp]
- str r5, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x2
- movs r2, 0
- movs r3, 0x2
- bl Menu_InitCursor
- ldrb r0, [r4]
- bl PutWindowTilemap
- ldrb r0, [r4]
- movs r1, 0x1
- bl CopyWindowToVram
- ldr r0, _0809AB78 @ =sub_809AC10
- movs r1, 0x8
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0809AB68: .4byte 0xfffffe0f
-_0809AB6C: .4byte gUnknown_2039950
-_0809AB70: .4byte gUnknown_83DF0BC
-_0809AB74: .4byte gUnknown_83DF09C
-_0809AB78: .4byte sub_809AC10
- thumb_func_end sub_809AAB0
-
- thumb_func_start sub_809AB7C
-sub_809AB7C: @ 809AB7C
- push {r4,r5,lr}
- cmp r0, 0
- beq _0809AB8C
- lsls r0, 24
- lsrs r0, 24
- b _0809ABCE
-_0809AB88:
- movs r0, 0x1
- b _0809ABCE
-_0809AB8C:
- movs r4, 0
- ldr r1, _0809ABD4 @ =gUnknown_2039934
- ldrh r0, [r1, 0x10]
- cmp r4, r0
- bcs _0809ABCC
- ldr r0, [r1, 0x4]
- ldrh r0, [r0]
- cmp r0, 0
- beq _0809ABCC
- adds r5, r1, 0
-_0809ABA0:
- ldr r1, [r5, 0x4]
- lsls r0, r4, 1
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- beq _0809AB88
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldrh r0, [r5, 0x10]
- cmp r4, r0
- bcs _0809ABCC
- ldr r0, [r5, 0x4]
- lsls r1, r4, 1
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, 0
- bne _0809ABA0
-_0809ABCC:
- movs r0, 0
-_0809ABCE:
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0809ABD4: .4byte gUnknown_2039934
- thumb_func_end sub_809AB7C
-
- thumb_func_start sub_809ABD8
-sub_809ABD8: @ 809ABD8
- push {lr}
- adds r1, r0, 0
- ldr r2, _0809AC00 @ =gUnknown_2039934
- str r1, [r2, 0x4]
- movs r0, 0
- strh r0, [r2, 0x10]
- ldrh r0, [r1]
- cmp r0, 0
- beq _0809ABFC
-_0809ABEA:
- ldrh r0, [r2, 0x10]
- adds r0, 0x1
- strh r0, [r2, 0x10]
- ldrh r0, [r2, 0x10]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0
- bne _0809ABEA
-_0809ABFC:
- pop {r0}
- bx r0
- .align 2, 0
-_0809AC00: .4byte gUnknown_2039934
- thumb_func_end sub_809ABD8
-
- thumb_func_start sub_809AC04
-sub_809AC04: @ 809AC04
- ldr r1, _0809AC0C @ =gUnknown_2039934
- str r0, [r1]
- bx lr
- .align 2, 0
-_0809AC0C: .4byte gUnknown_2039934
- thumb_func_end sub_809AC04
-
- thumb_func_start sub_809AC10
-sub_809AC10: @ 809AC10
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl Menu_ProcessInputNoWrapAround
- lsls r0, 24
- asrs r1, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r1, r0
- beq _0809AC52
- adds r0, 0x1
- cmp r1, r0
- bne _0809AC3C
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_809ACF8
- b _0809AC52
-_0809AC3C:
- ldr r4, _0809AC58 @ =gUnknown_83DF09C
- bl Menu_GetCursorPos
- lsls r0, 24
- lsrs r0, 21
- adds r4, 0x4
- adds r0, r4
- ldr r1, [r0]
- adds r0, r5, 0
- bl _call_via_r1
-_0809AC52:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809AC58: .4byte gUnknown_83DF09C
- thumb_func_end sub_809AC10
-
- thumb_func_start sub_809AC5C
-sub_809AC5C: @ 809AC5C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r2, _0809AC8C @ =sub_809AE14
- adds r0, r4, 0
- movs r1, 0xE
- bl SetWordTaskArg
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- ldr r1, _0809AC90 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0809AC94 @ =sub_809AD40
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809AC8C: .4byte sub_809AE14
-_0809AC90: .4byte gTasks
-_0809AC94: .4byte sub_809AD40
- thumb_func_end sub_809AC5C
-
- thumb_func_start sub_809AC98
-sub_809AC98: @ 809AC98
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r2, _0809ACC8 @ =sub_809ACD4
- adds r0, r4, 0
- movs r1, 0xE
- bl SetWordTaskArg
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- ldr r1, _0809ACCC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0809ACD0 @ =sub_809AD40
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809ACC8: .4byte sub_809ACD4
-_0809ACCC: .4byte gTasks
-_0809ACD0: .4byte sub_809AD40
- thumb_func_end sub_809AC98
-
- thumb_func_start sub_809ACD4
-sub_809ACD4: @ 809ACD4
- push {lr}
- ldr r2, _0809ACEC @ =CB2_ReturnToField
- movs r0, 0x2
- movs r1, 0x3
- bl GoToBagMenu
- ldr r1, _0809ACF0 @ =gFieldCallback
- ldr r0, _0809ACF4 @ =sub_809AD74
- str r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0809ACEC: .4byte CB2_ReturnToField
-_0809ACF0: .4byte gFieldCallback
-_0809ACF4: .4byte sub_809AD74
- thumb_func_end sub_809ACD4
-
- thumb_func_start sub_809ACF8
-sub_809ACF8: @ 809ACF8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_809AD24
- bl sub_809C138
- adds r0, r4, 0
- bl DestroyTask
- ldr r0, _0809AD20 @ =gUnknown_2039934
- ldr r0, [r0]
- cmp r0, 0
- beq _0809AD1A
- bl _call_via_r0
-_0809AD1A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809AD20: .4byte gUnknown_2039934
- thumb_func_end sub_809ACF8
-
- thumb_func_start sub_809AD24
-sub_809AD24: @ 809AD24
- push {r4,lr}
- ldr r4, _0809AD3C @ =gUnknown_2039950
- ldrb r0, [r4]
- movs r1, 0x2
- bl ClearStdWindowAndFrameToTransparent
- ldrb r0, [r4]
- bl RemoveWindow
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809AD3C: .4byte gUnknown_2039950
- thumb_func_end sub_809AD24
-
- thumb_func_start sub_809AD40
-sub_809AD40: @ 809AD40
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0809AD70 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0809AD68
- adds r0, r4, 0
- movs r1, 0xE
- bl GetWordTaskArg
- bl SetMainCallback2
- bl FreeAllWindowBuffers
- adds r0, r4, 0
- bl DestroyTask
-_0809AD68:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809AD70: .4byte gPaletteFade
- thumb_func_end sub_809AD40
-
- thumb_func_start sub_809AD74
-sub_809AD74: @ 809AD74
- push {lr}
- bl sub_807DC00
- ldr r0, _0809AD88 @ =sub_809AD8C
- movs r1, 0x8
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_0809AD88: .4byte sub_809AD8C
- thumb_func_end sub_809AD74
-
- thumb_func_start sub_809AD8C
-sub_809AD8C: @ 809AD8C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsWeatherNotFadingIn
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0809ADB2
- bl sub_809B56C
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _0809ADB8 @ =gUnknown_841689E
- ldr r3, _0809ADBC @ =sub_809ADC0
- adds r0, r4, 0
- bl DisplayItemMessageOnField
-_0809ADB2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809ADB8: .4byte gUnknown_841689E
-_0809ADBC: .4byte sub_809ADC0
- thumb_func_end sub_809AD8C
-
- thumb_func_start sub_809ADC0
-sub_809ADC0: @ 809ADC0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0809ADE0 @ =gUnknown_2039934
- ldrb r0, [r0, 0x16]
- lsls r0, 28
- lsrs r0, 28
- bl sub_809AAB0
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809ADE0: .4byte gUnknown_2039934
- thumb_func_end sub_809ADC0
-
- thumb_func_start sub_809ADE4
-sub_809ADE4: @ 809ADE4
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- bl DoScheduledBgTilemapCopiesToVram
- pop {r0}
- bx r0
- thumb_func_end sub_809ADE4
-
- thumb_func_start sub_809AE00
-sub_809AE00: @ 809AE00
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_809AE00
-
- thumb_func_start sub_809AE14
-sub_809AE14: @ 809AE14
- push {r4,r5,lr}
- sub sp, 0xC
- ldr r0, _0809AE90 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r5, r0, r1
- ldrb r4, [r5]
- cmp r4, 0
- beq _0809AEAC
- cmp r4, 0x1
- bne _0809AE2C
- b _0809AF54
-_0809AE2C:
- ldr r0, _0809AE94 @ =gUnknown_2039934
- movs r5, 0
- strh r5, [r0, 0xC]
- strh r5, [r0, 0xE]
- bl sub_809B15C
- bl sub_809B690
- ldr r0, _0809AE98 @ =sub_809BBC0
- movs r1, 0x8
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0809AE9C @ =gMultiuseListMenuTemplate
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- ldr r2, _0809AEA0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x16]
- movs r4, 0x1
- negs r4, r4
- adds r0, r4, 0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- str r5, [sp]
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _0809AEA4 @ =sub_809AE00
- bl SetVBlankCallback
- ldr r0, _0809AEA8 @ =sub_809ADE4
- bl SetMainCallback2
- b _0809AF64
- .align 2, 0
-_0809AE90: .4byte gMain
-_0809AE94: .4byte gUnknown_2039934
-_0809AE98: .4byte sub_809BBC0
-_0809AE9C: .4byte gMultiuseListMenuTemplate
-_0809AEA0: .4byte gTasks
-_0809AEA4: .4byte sub_809AE00
-_0809AEA8: .4byte sub_809ADE4
-_0809AEAC:
- bl SetVBlankHBlankCallbacksToNull
- str r4, [sp, 0x8]
- movs r1, 0xE0
- lsls r1, 19
- ldr r2, _0809AF4C @ =0x01000100
- add r0, sp, 0x8
- bl CpuFastSet
- bl ScanlineEffect_Stop
- bl ResetTempTileDataBuffers
- bl FreeAllSpritePalettes
- bl ResetPaletteFade
- bl ResetSpriteData
- bl ResetTasks
- bl ClearScheduledBgCopiesToVram
- bl ResetItemMenuIconState
- bl sub_809AF6C
- lsls r0, 24
- cmp r0, 0
- beq _0809AF64
- bl sub_809B188
- lsls r0, 24
- cmp r0, 0
- beq _0809AF64
- bl sub_809AFD0
- movs r4, 0x20
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- str r4, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- ldr r0, _0809AF50 @ =gUnknown_2039934
- ldrb r0, [r0, 0x16]
- lsls r0, 28
- lsrs r0, 28
- bl BuyMenuInitWindows
- bl sub_809B080
- b _0809AF5E
- .align 2, 0
-_0809AF4C: .4byte 0x01000100
-_0809AF50: .4byte gUnknown_2039934
-_0809AF54:
- bl FreeTempTileDataBuffersIfPossible
- lsls r0, 24
- cmp r0, 0
- bne _0809AF64
-_0809AF5E:
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
-_0809AF64:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_809AE14
-
- thumb_func_start sub_809AF6C
-sub_809AF6C: @ 809AF6C
- push {r4,r5,lr}
- ldr r4, _0809AFB0 @ =gUnknown_2039954
- movs r5, 0x80
- lsls r5, 4
- adds r0, r5, 0
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _0809AFC0
- ldr r4, _0809AFB4 @ =gUnknown_2039958
- adds r0, r5, 0
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _0809AFC0
- ldr r4, _0809AFB8 @ =gUnknown_203995C
- adds r0, r5, 0
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _0809AFC0
- ldr r4, _0809AFBC @ =gUnknown_2039960
- adds r0, r5, 0
- bl Alloc
- str r0, [r4]
- cmp r0, 0
- beq _0809AFC0
- movs r0, 0x1
- b _0809AFCA
- .align 2, 0
-_0809AFB0: .4byte gUnknown_2039954
-_0809AFB4: .4byte gUnknown_2039958
-_0809AFB8: .4byte gUnknown_203995C
-_0809AFBC: .4byte gUnknown_2039960
-_0809AFC0:
- bl sub_809B604
- bl sub_809B670
- movs r0, 0
-_0809AFCA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_809AF6C
-
- thumb_func_start sub_809AFD0
-sub_809AFD0: @ 809AFD0
- push {lr}
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _0809B070 @ =gUnknown_83DF0C4
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- ldr r0, _0809B074 @ =gUnknown_2039958
- ldr r1, [r0]
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r0, _0809B078 @ =gUnknown_2039960
- ldr r1, [r0]
- movs r0, 0x2
- bl SetBgTilemapBuffer
- ldr r0, _0809B07C @ =gUnknown_203995C
- ldr r1, [r0]
- movs r0, 0x3
- bl SetBgTilemapBuffer
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- pop {r0}
- bx r0
- .align 2, 0
-_0809B070: .4byte gUnknown_83DF0C4
-_0809B074: .4byte gUnknown_2039958
-_0809B078: .4byte gUnknown_2039960
-_0809B07C: .4byte gUnknown_203995C
- thumb_func_end sub_809AFD0
-
- thumb_func_start sub_809B080
-sub_809B080: @ 809B080
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _0809B0B0 @ =gUnknown_8E85DC8
- movs r2, 0x90
- lsls r2, 3
- movs r3, 0xF7
- lsls r3, 2
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- bl DecompressAndCopyTileDataToVram
- ldr r0, _0809B0B4 @ =gUnknown_2039934
- ldrb r1, [r0, 0x16]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- beq _0809B0C0
- ldr r0, _0809B0B8 @ =gUnknown_8E85EFC
- ldr r1, _0809B0BC @ =gUnknown_2039954
- ldr r1, [r1]
- bl LZDecompressWram
- b _0809B0CA
- .align 2, 0
-_0809B0B0: .4byte gUnknown_8E85DC8
-_0809B0B4: .4byte gUnknown_2039934
-_0809B0B8: .4byte gUnknown_8E85EFC
-_0809B0BC: .4byte gUnknown_2039954
-_0809B0C0:
- ldr r0, _0809B100 @ =gUnknown_8E86038
- ldr r1, _0809B104 @ =gUnknown_2039954
- ldr r1, [r1]
- bl LZDecompressWram
-_0809B0CA:
- movs r0, 0x40
- bl Alloc
- adds r4, r0, 0
- ldr r0, _0809B108 @ =gUnknown_8E86170
- adds r1, r4, 0
- bl LZDecompressWram
- adds r0, r4, 0
- movs r1, 0xB0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- adds r0, 0x20
- movs r1, 0x60
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- bl Free
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809B100: .4byte gUnknown_8E86038
-_0809B104: .4byte gUnknown_2039954
-_0809B108: .4byte gUnknown_8E86170
- thumb_func_end sub_809B080
-
- thumb_func_start sub_809B10C
-sub_809B10C: @ 809B10C
- push {lr}
- sub sp, 0x8
- movs r2, 0x6
- cmp r0, 0
- bne _0809B118
- movs r2, 0xB
-_0809B118:
- ldr r0, _0809B138 @ =gUnknown_2039934
- ldrb r1, [r0, 0x16]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- beq _0809B13C
- movs r0, 0x6
- str r0, [sp]
- str r2, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0xE
- movs r3, 0x1E
- bl SetBgTilemapPalette
- b _0809B14E
- .align 2, 0
-_0809B138: .4byte gUnknown_2039934
-_0809B13C:
- movs r0, 0x8
- str r0, [sp]
- str r2, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0xC
- movs r3, 0x1E
- bl SetBgTilemapPalette
-_0809B14E:
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- add sp, 0x8
- pop {r0}
- bx r0
- thumb_func_end sub_809B10C
-
- thumb_func_start sub_809B15C
-sub_809B15C: @ 809B15C
- push {lr}
- bl sub_809B764
- bl sub_809BAFC
- bl BuyMenuDrawMoneyBox
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x1
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x2
- bl ScheduleBgCopyTilemapToVram
- movs r0, 0x3
- bl ScheduleBgCopyTilemapToVram
- pop {r0}
- bx r0
- thumb_func_end sub_809B15C
-
- thumb_func_start sub_809B188
-sub_809B188: @ 809B188
- push {r4-r7,lr}
- ldr r7, _0809B1C0 @ =gUnknown_2039964
- ldr r4, _0809B1C4 @ =gUnknown_2039934
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- lsls r0, 3
- bl Alloc
- str r0, [r7]
- cmp r0, 0
- beq _0809B1B2
- ldr r5, _0809B1C8 @ =gUnknown_2039968
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- movs r1, 0xD
- muls r0, r1
- bl Alloc
- str r0, [r5]
- cmp r0, 0
- bne _0809B1CC
-_0809B1B2:
- bl sub_809B604
- bl sub_809B670
- movs r0, 0
- b _0809B2F0
- .align 2, 0
-_0809B1C0: .4byte gUnknown_2039964
-_0809B1C4: .4byte gUnknown_2039934
-_0809B1C8: .4byte gUnknown_2039968
-_0809B1CC:
- movs r6, 0
- b _0809B1F2
-_0809B1D0:
- lsls r1, r6, 3
- ldr r0, [r7]
- adds r0, r1
- ldr r2, [r4, 0x4]
- lsls r1, r6, 1
- adds r1, r2
- ldrh r1, [r1]
- movs r2, 0xD
- adds r3, r6, 0
- muls r3, r2
- ldr r2, [r5]
- adds r2, r3
- bl sub_809B300
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_0809B1F2:
- ldrh r0, [r4, 0x10]
- cmp r6, r0
- bcc _0809B1D0
- ldr r5, _0809B2C8 @ =gUnknown_2039968
- movs r0, 0xD
- adds r4, r6, 0
- muls r4, r0
- ldr r0, [r5]
- adds r0, r4
- ldr r1, _0809B2CC @ =gFameCheckerText_Cancel
- bl StringCopy
- ldr r0, _0809B2D0 @ =gUnknown_2039964
- ldr r2, [r0]
- lsls r1, r6, 3
- adds r1, r2
- ldr r0, [r5]
- adds r0, r4
- str r0, [r1]
- movs r0, 0x2
- negs r0, r0
- str r0, [r1, 0x4]
- ldr r5, _0809B2D4 @ =gMultiuseListMenuTemplate
- str r2, [r5]
- ldr r6, _0809B2D8 @ =gUnknown_2039934
- ldrh r0, [r6, 0x10]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0xC]
- movs r0, 0x4
- strb r0, [r5, 0x10]
- strb r1, [r5, 0x11]
- movs r0, 0x9
- strb r0, [r5, 0x12]
- movs r0, 0x1
- strb r0, [r5, 0x13]
- ldrb r1, [r5, 0x16]
- subs r0, 0x9
- ands r0, r1
- movs r1, 0x39
- negs r1, r1
- ands r0, r1
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r5, 0x16]
- ldrb r2, [r5, 0x14]
- movs r1, 0x10
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- movs r3, 0x2
- orrs r0, r3
- strb r0, [r5, 0x14]
- ldrb r2, [r5, 0x17]
- movs r0, 0x40
- negs r0, r0
- ands r0, r2
- orrs r0, r3
- strb r0, [r5, 0x17]
- ldrb r0, [r5, 0x15]
- ands r1, r0
- strb r1, [r5, 0x15]
- movs r0, 0x2
- movs r1, 0x5
- bl GetFontAttribute
- lsls r0, 4
- ldrb r2, [r5, 0x14]
- movs r4, 0xF
- adds r1, r4, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x14]
- movs r0, 0x2
- movs r1, 0x7
- bl GetFontAttribute
- lsls r0, 4
- ldrb r2, [r5, 0x15]
- adds r1, r4, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x15]
- ldr r0, _0809B2DC @ =sub_809B320
- str r0, [r5, 0x4]
- ldr r0, _0809B2E0 @ =sub_809B408
- str r0, [r5, 0x8]
- ldrb r2, [r5, 0x16]
- movs r1, 0x3F
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r5, 0x16]
- ldrb r0, [r5, 0x17]
- ands r1, r0
- strb r1, [r5, 0x17]
- ldrb r0, [r6, 0x16]
- ands r4, r0
- movs r1, 0x6
- cmp r4, 0x1
- bne _0809B2BC
- movs r1, 0x5
-_0809B2BC:
- ldrh r0, [r6, 0x10]
- adds r0, 0x1
- cmp r0, r1
- ble _0809B2E4
- strh r1, [r5, 0xE]
- b _0809B2E6
- .align 2, 0
-_0809B2C8: .4byte gUnknown_2039968
-_0809B2CC: .4byte gFameCheckerText_Cancel
-_0809B2D0: .4byte gUnknown_2039964
-_0809B2D4: .4byte gMultiuseListMenuTemplate
-_0809B2D8: .4byte gUnknown_2039934
-_0809B2DC: .4byte sub_809B320
-_0809B2E0: .4byte sub_809B408
-_0809B2E4:
- strh r0, [r5, 0xE]
-_0809B2E6:
- ldr r0, _0809B2F8 @ =gUnknown_2039934
- ldr r1, _0809B2FC @ =gMultiuseListMenuTemplate
- ldrh r1, [r1, 0xE]
- strh r1, [r0, 0x12]
- movs r0, 0x1
-_0809B2F0:
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0809B2F8: .4byte gUnknown_2039934
-_0809B2FC: .4byte gMultiuseListMenuTemplate
- thumb_func_end sub_809B188
-
- thumb_func_start sub_809B300
-sub_809B300: @ 809B300
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r5, 0
- adds r1, r6, 0
- bl CopyItemName
- str r6, [r4]
- str r5, [r4, 0x4]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_809B300
-
- thumb_func_start sub_809B320
-sub_809B320: @ 809B320
- push {r4-r7,lr}
- sub sp, 0x14
- adds r5, r0, 0
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x1
- beq _0809B334
- movs r0, 0x5
- bl PlaySE
-_0809B334:
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- beq _0809B348
- lsls r0, r5, 16
- lsrs r0, 16
- bl ItemId_GetDescription
- adds r7, r0, 0
- b _0809B34A
-_0809B348:
- ldr r7, _0809B384 @ =gUnknown_8416757
-_0809B34A:
- movs r0, 0x5
- movs r1, 0
- bl FillWindowPixelBuffer
- ldr r6, _0809B388 @ =gUnknown_2039934
- ldrb r0, [r6, 0x16]
- movs r4, 0xF
- ands r4, r0
- cmp r4, 0x1
- beq _0809B3D8
- ldrb r1, [r6, 0x17]
- lsls r1, 29
- lsrs r1, 30
- movs r0, 0x1
- eors r0, r1
- bl DestroyItemMenuIcon
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- beq _0809B38C
- lsls r0, r5, 16
- lsrs r0, 16
- ldrb r1, [r6, 0x17]
- lsls r1, 29
- lsrs r1, 30
- bl CreateItemMenuIcon
- b _0809B398
- .align 2, 0
-_0809B384: .4byte gUnknown_8416757
-_0809B388: .4byte gUnknown_2039934
-_0809B38C:
- ldr r0, _0809B3D0 @ =0x00000177
- ldrb r1, [r6, 0x17]
- lsls r1, 29
- lsrs r1, 30
- bl CreateItemMenuIcon
-_0809B398:
- ldr r3, _0809B3D4 @ =gUnknown_2039934
- ldrb r2, [r3, 0x17]
- lsls r0, r2, 29
- lsrs r0, 30
- movs r1, 0x1
- eors r1, r0
- lsls r1, 1
- movs r0, 0x7
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x17]
- movs r0, 0x3
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x5
- movs r1, 0x2
- adds r2, r7, 0
- movs r3, 0
- bl BuyMenuPrint
- b _0809B400
- .align 2, 0
-_0809B3D0: .4byte 0x00000177
-_0809B3D4: .4byte gUnknown_2039934
-_0809B3D8:
- movs r0, 0x6
- movs r1, 0
- bl FillWindowPixelBuffer
- adds r0, r5, 0
- bl sub_809B494
- movs r0, 0x3
- str r0, [sp]
- str r4, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r0, [sp, 0x10]
- movs r0, 0x5
- movs r1, 0x2
- adds r2, r7, 0
- movs r3, 0x2
- bl BuyMenuPrint
-_0809B400:
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_809B320
-
- thumb_func_start sub_809B408
-sub_809B408: @ 809B408
- push {r4-r6,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r2, 24
- lsrs r5, r2, 24
- movs r0, 0x2
- negs r0, r0
- cmp r1, r0
- beq _0809B480
- ldr r4, _0809B488 @ =gStringVar1
- lsls r0, r1, 16
- lsrs r0, 16
- bl itemid_get_market_price
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- adds r0, r4, 0
- bl StringLength
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x4
- subs r1, r0
- ldr r2, _0809B48C @ =gStringVar4
- adds r0, r1, 0
- subs r1, 0x1
- cmp r0, 0
- beq _0809B45C
- movs r3, 0
-_0809B450:
- strb r3, [r2]
- adds r2, 0x1
- adds r0, r1, 0
- subs r1, 0x1
- cmp r0, 0
- bne _0809B450
-_0809B45C:
- ldr r1, _0809B490 @ =gText_PokedollarVar1
- adds r0, r2, 0
- bl StringExpandPlaceholders
- ldr r2, _0809B48C @ =gStringVar4
- str r5, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- movs r0, 0xFF
- str r0, [sp, 0xC]
- movs r0, 0x1
- str r0, [sp, 0x10]
- adds r0, r6, 0
- movs r1, 0
- movs r3, 0x69
- bl BuyMenuPrint
-_0809B480:
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809B488: .4byte gStringVar1
-_0809B48C: .4byte gStringVar4
-_0809B490: .4byte gText_PokedollarVar1
- thumb_func_end sub_809B408
-
- thumb_func_start sub_809B494
-sub_809B494: @ 809B494
- push {r4-r7,lr}
- sub sp, 0x14
- adds r7, r0, 0
- movs r0, 0x2
- negs r0, r0
- cmp r7, r0
- beq _0809B528
- ldr r4, _0809B514 @ =gStringVar1
- ldr r0, _0809B518 @ =0xfffffee0
- adds r1, r7, r0
- adds r0, r4, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r5, _0809B51C @ =gStringVar4
- ldr r1, _0809B520 @ =gOtherText_UnkF9_08_Clear_01
- adds r0, r5, 0
- bl StringCopy
- adds r0, r5, 0
- adds r1, r4, 0
- bl StringAppend
- movs r4, 0
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0xFF
- str r0, [sp, 0xC]
- movs r6, 0x1
- str r6, [sp, 0x10]
- movs r0, 0x6
- movs r1, 0
- adds r2, r5, 0
- movs r3, 0
- bl BuyMenuPrint
- lsls r0, r7, 16
- lsrs r0, 16
- bl ItemIdToBattleMoveId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xD
- muls r1, r0
- ldr r0, _0809B524 @ =gMoveNames
- adds r1, r0
- adds r0, r5, 0
- bl StringCopy
- movs r0, 0x10
- str r0, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- str r4, [sp, 0xC]
- str r6, [sp, 0x10]
- movs r0, 0x6
- movs r1, 0x2
- adds r2, r5, 0
- movs r3, 0
- bl BuyMenuPrint
- b _0809B55C
- .align 2, 0
-_0809B514: .4byte gStringVar1
-_0809B518: .4byte 0xfffffee0
-_0809B51C: .4byte gStringVar4
-_0809B520: .4byte gOtherText_UnkF9_08_Clear_01
-_0809B524: .4byte gMoveNames
-_0809B528:
- ldr r2, _0809B564 @ =gText_ThreeHyphens
- movs r4, 0
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0xFF
- str r0, [sp, 0xC]
- movs r5, 0x1
- str r5, [sp, 0x10]
- movs r0, 0x6
- movs r1, 0
- movs r3, 0
- bl BuyMenuPrint
- ldr r2, _0809B568 @ =gUnknown_8416217
- movs r0, 0x10
- str r0, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- str r4, [sp, 0xC]
- str r5, [sp, 0x10]
- movs r0, 0x6
- movs r1, 0x2
- movs r3, 0
- bl BuyMenuPrint
-_0809B55C:
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809B564: .4byte gText_ThreeHyphens
-_0809B568: .4byte gUnknown_8416217
- thumb_func_end sub_809B494
-
- thumb_func_start sub_809B56C
-sub_809B56C: @ 809B56C
- ldr r0, _0809B578 @ =gUnknown_2039934
- ldrh r0, [r0, 0x16]
- lsls r0, 23
- lsrs r0, 27
- bx lr
- .align 2, 0
-_0809B578: .4byte gUnknown_2039934
- thumb_func_end sub_809B56C
-
- thumb_func_start sub_809B57C
-sub_809B57C: @ 809B57C
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 24
- lsrs r4, 24
- bl ListMenuGetYCoordForPrintingArrowCursor
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl sub_809B59C
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_809B57C
-
- thumb_func_start sub_809B59C
-sub_809B59C: @ 809B59C
- push {r4,r5,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0xFF
- bne _0809B5E0
- movs r0, 0x2
- movs r1, 0
- bl GetFontAttribute
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x2
- movs r1, 0x1
- bl GetFontAttribute
- lsls r0, 24
- lsrs r0, 24
- str r4, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x4
- movs r1, 0
- movs r2, 0x1
- adds r3, r5, 0
- bl FillWindowPixelRect
- movs r0, 0x4
- movs r1, 0x2
- bl CopyWindowToVram
- b _0809B5F8
-_0809B5E0:
- ldr r2, _0809B600 @ =gFameCheckerText_ListMenuCursor
- str r5, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- str r1, [sp, 0x10]
- movs r0, 0x4
- movs r1, 0x2
- movs r3, 0x1
- bl BuyMenuPrint
-_0809B5F8:
- add sp, 0x14
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809B600: .4byte gFameCheckerText_ListMenuCursor
- thumb_func_end sub_809B59C
-
- thumb_func_start sub_809B604
-sub_809B604: @ 809B604
- push {lr}
- ldr r0, _0809B658 @ =gUnknown_2039954
- ldr r0, [r0]
- cmp r0, 0
- beq _0809B612
- bl Free
-_0809B612:
- ldr r0, _0809B65C @ =gUnknown_2039958
- ldr r0, [r0]
- cmp r0, 0
- beq _0809B61E
- bl Free
-_0809B61E:
- ldr r0, _0809B660 @ =gUnknown_203995C
- ldr r0, [r0]
- cmp r0, 0
- beq _0809B62A
- bl Free
-_0809B62A:
- ldr r0, _0809B664 @ =gUnknown_2039960
- ldr r0, [r0]
- cmp r0, 0
- beq _0809B636
- bl Free
-_0809B636:
- ldr r0, _0809B668 @ =gUnknown_2039964
- ldr r0, [r0]
- cmp r0, 0
- beq _0809B642
- bl Free
-_0809B642:
- ldr r0, _0809B66C @ =gUnknown_2039968
- ldr r0, [r0]
- cmp r0, 0
- beq _0809B64E
- bl Free
-_0809B64E:
- bl FreeAllWindowBuffers
- pop {r0}
- bx r0
- .align 2, 0
-_0809B658: .4byte gUnknown_2039954
-_0809B65C: .4byte gUnknown_2039958
-_0809B660: .4byte gUnknown_203995C
-_0809B664: .4byte gUnknown_2039960
-_0809B668: .4byte gUnknown_2039964
-_0809B66C: .4byte gUnknown_2039968
- thumb_func_end sub_809B604
-
- thumb_func_start sub_809B670
-sub_809B670: @ 809B670
- push {lr}
- ldr r0, _0809B684 @ =gFieldCallback
- ldr r1, _0809B688 @ =sub_809AD74
- str r1, [r0]
- ldr r0, _0809B68C @ =CB2_ReturnToField
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0809B684: .4byte gFieldCallback
-_0809B688: .4byte sub_809AD74
-_0809B68C: .4byte CB2_ReturnToField
- thumb_func_end sub_809B670
-
- thumb_func_start sub_809B690
-sub_809B690: @ 809B690
- push {r4,lr}
- sub sp, 0x10
- ldr r4, _0809B6C0 @ =gUnknown_2039934
- ldrb r1, [r4, 0x16]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- beq _0809B6C4
- ldrh r0, [r4, 0x10]
- ldrh r1, [r4, 0x12]
- subs r0, r1
- adds r0, 0x1
- str r0, [sp]
- movs r0, 0x6E
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- adds r0, r4, 0
- adds r0, 0xE
- str r0, [sp, 0xC]
- movs r0, 0x2
- movs r1, 0xA0
- movs r2, 0x8
- movs r3, 0x68
- b _0809B6E2
- .align 2, 0
-_0809B6C0: .4byte gUnknown_2039934
-_0809B6C4:
- ldrh r0, [r4, 0x10]
- ldrh r1, [r4, 0x12]
- subs r0, r1
- adds r0, 0x1
- str r0, [sp]
- movs r0, 0x6E
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- adds r0, r4, 0
- adds r0, 0xE
- str r0, [sp, 0xC]
- movs r0, 0x2
- movs r1, 0xA0
- movs r2, 0x8
- movs r3, 0x58
-_0809B6E2:
- bl AddScrollIndicatorArrowPairParameterized
- lsls r0, 3
- ldrb r2, [r4, 0x17]
- movs r1, 0x7
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x17]
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_809B690
-
- thumb_func_start sub_809B6FC
-sub_809B6FC: @ 809B6FC
- push {r4,lr}
- sub sp, 0x10
- ldr r4, _0809B738 @ =gUnknown_2039934
- movs r0, 0x1
- strh r0, [r4, 0x18]
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0x6E
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- adds r0, r4, 0
- adds r0, 0x18
- str r0, [sp, 0xC]
- movs r0, 0x2
- movs r1, 0x98
- movs r2, 0x48
- movs r3, 0x68
- bl AddScrollIndicatorArrowPairParameterized
- lsls r0, 3
- ldrb r2, [r4, 0x17]
- movs r1, 0x7
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x17]
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809B738: .4byte gUnknown_2039934
- thumb_func_end sub_809B6FC
-
- thumb_func_start sub_809B73C
-sub_809B73C: @ 809B73C
- push {r4,lr}
- ldr r4, _0809B760 @ =gUnknown_2039934
- ldrb r1, [r4, 0x17]
- movs r0, 0xF8
- ands r0, r1
- cmp r0, 0xF8
- beq _0809B758
- lsrs r0, r1, 3
- bl RemoveScrollIndicatorArrowPair
- ldrb r0, [r4, 0x17]
- movs r1, 0xF8
- orrs r0, r1
- strb r0, [r4, 0x17]
-_0809B758:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809B760: .4byte gUnknown_2039934
- thumb_func_end sub_809B73C
-
- thumb_func_start sub_809B764
-sub_809B764: @ 809B764
- push {lr}
- bl sub_809B92C
- bl sub_809BA40
- bl sub_809B778
- pop {r0}
- bx r0
- thumb_func_end sub_809B764
-
- thumb_func_start sub_809B778
-sub_809B778: @ 809B778
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _0809B804 @ =gMapHeader
- ldr r0, [r0]
- mov r9, r0
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- mov r1, sp
- mov r0, sp
- ldrh r0, [r0]
- subs r0, 0x2
- strh r0, [r1]
- ldrh r0, [r4]
- subs r0, 0x3
- strh r0, [r4]
- movs r1, 0
- mov r10, r4
-_0809B7AA:
- movs r4, 0
- lsls r1, 16
- mov r8, r1
- asrs r7, r1, 16
-_0809B7B2:
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- lsls r4, 16
- asrs r6, r4, 16
- adds r0, r6
- mov r2, r10
- movs r3, 0
- ldrsh r1, [r2, r3]
- adds r1, r7
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- lsrs r5, r0, 16
- mov r0, sp
- ldrh r0, [r0]
- adds r0, r6, r0
- lsls r0, 16
- asrs r0, 16
- mov r2, r10
- ldrh r1, [r2]
- adds r1, r7, r1
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileLayerTypeAt
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _0809B808 @ =0x0000027f
- cmp r5, r0
- bhi _0809B80C
- mov r1, r9
- ldr r0, [r1, 0x10]
- lsls r1, r5, 4
- ldr r2, [r0, 0xC]
- adds r2, r1
- adds r0, r6, 0
- adds r1, r7, 0
- bl sub_809B850
- b _0809B822
- .align 2, 0
-_0809B804: .4byte gMapHeader
-_0809B808: .4byte 0x0000027f
-_0809B80C:
- mov r2, r9
- ldr r0, [r2, 0x14]
- ldr r2, _0809B84C @ =0xfffffd80
- adds r1, r5, r2
- lsls r1, 4
- ldr r2, [r0, 0xC]
- adds r2, r1
- adds r0, r6, 0
- adds r1, r7, 0
- bl sub_809B850
-_0809B822:
- movs r3, 0x80
- lsls r3, 9
- adds r0, r4, r3
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _0809B7B2
- adds r0, r3, 0
- add r0, r8
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _0809B7AA
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809B84C: .4byte 0xfffffd80
- thumb_func_end sub_809B778
-
- thumb_func_start sub_809B850
-sub_809B850: @ 809B850
- push {r4-r6,lr}
- adds r6, r2, 0
- lsls r3, 24
- lsrs r3, 24
- adds r2, r3, 0
- lsls r0, 17
- lsrs r5, r0, 16
- lsls r1, 22
- movs r0, 0x80
- lsls r0, 15
- adds r1, r0
- lsrs r1, 16
- cmp r3, 0x1
- beq _0809B8A0
- cmp r3, 0x1
- bgt _0809B876
- cmp r3, 0
- beq _0809B87C
- b _0809B8F6
-_0809B876:
- cmp r2, 0x2
- beq _0809B8D0
- b _0809B8F6
-_0809B87C:
- ldr r0, _0809B898 @ =gUnknown_2039960
- ldr r0, [r0]
- lsls r5, 16
- asrs r5, 16
- lsls r4, r1, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- adds r3, r6, 0
- bl sub_809B904
- ldr r0, _0809B89C @ =gUnknown_2039958
- b _0809B8B8
- .align 2, 0
-_0809B898: .4byte gUnknown_2039960
-_0809B89C: .4byte gUnknown_2039958
-_0809B8A0:
- ldr r0, _0809B8C8 @ =gUnknown_203995C
- ldr r0, [r0]
- lsls r5, 16
- asrs r5, 16
- lsls r4, r1, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- adds r3, r6, 0
- bl sub_809B904
- ldr r0, _0809B8CC @ =gUnknown_2039960
-_0809B8B8:
- ldr r0, [r0]
- adds r3, r6, 0
- adds r3, 0x8
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_809B904
- b _0809B8F6
- .align 2, 0
-_0809B8C8: .4byte gUnknown_203995C
-_0809B8CC: .4byte gUnknown_2039960
-_0809B8D0:
- ldr r0, _0809B8FC @ =gUnknown_203995C
- ldr r0, [r0]
- lsls r5, 16
- asrs r5, 16
- lsls r4, r1, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- adds r3, r6, 0
- bl sub_809B904
- ldr r0, _0809B900 @ =gUnknown_2039958
- ldr r0, [r0]
- adds r3, r6, 0
- adds r3, 0x8
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_809B904
-_0809B8F6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809B8FC: .4byte gUnknown_203995C
-_0809B900: .4byte gUnknown_2039958
- thumb_func_end sub_809B850
-
- thumb_func_start sub_809B904
-sub_809B904: @ 809B904
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- adds r1, r2
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r3]
- strh r0, [r1]
- ldrh r0, [r3, 0x2]
- strh r0, [r1, 0x2]
- adds r2, r1, 0
- adds r2, 0x40
- ldrh r0, [r3, 0x4]
- strh r0, [r2]
- adds r1, 0x42
- ldrh r0, [r3, 0x6]
- strh r0, [r1]
- bx lr
- thumb_func_end sub_809B904
-
- thumb_func_start sub_809B92C
-sub_809B92C: @ 809B92C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- mov r9, r0
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- bl PlayerGetZCoord
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r5, 0
- ldr r2, _0809B9DC @ =gUnknown_20398B4
- movs r1, 0x10
-_0809B958:
- lsls r0, r5, 3
- adds r0, r2
- strh r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xF
- bls _0809B958
- movs r5, 0
- ldr r6, _0809B9E0 @ =gUnknown_20398BA
- subs r1, r6, 0x6
- mov r8, r1
-_0809B970:
- movs r4, 0
- adds r2, r5, 0x1
- mov r10, r2
-_0809B976:
- mov r1, sp
- ldr r3, _0809B9E4 @ =0x0000fffd
- adds r0, r3, 0
- ldrh r1, [r1]
- adds r0, r1
- adds r0, r4
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _0809B9E8 @ =0x0000fffe
- adds r1, r2, 0
- mov r3, sp
- ldrh r3, [r3, 0x2]
- adds r1, r3
- adds r1, r5
- lsls r1, 16
- lsrs r1, 16
- ldr r2, [sp, 0x4]
- bl GetFieldObjectIdByXYZ
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x10
- beq _0809BA1C
- mov r0, r9
- lsls r2, r0, 3
- mov r1, r8
- adds r0, r2, r1
- movs r7, 0
- strh r3, [r0]
- mov r0, r8
- adds r0, 0x2
- adds r0, r2, r0
- strh r4, [r0]
- ldr r1, _0809B9EC @ =gUnknown_20398B8
- adds r0, r2, r1
- strh r5, [r0]
- ldr r1, _0809B9F0 @ =gMapObjects
- lsls r0, r3, 3
- adds r0, r3
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r0, 0x2
- beq _0809BA00
- cmp r0, 0x2
- bgt _0809B9F4
- cmp r0, 0x1
- beq _0809B9FA
- b _0809BA0C
- .align 2, 0
-_0809B9DC: .4byte gUnknown_20398B4
-_0809B9E0: .4byte gUnknown_20398BA
-_0809B9E4: .4byte 0x0000fffd
-_0809B9E8: .4byte 0x0000fffe
-_0809B9EC: .4byte gUnknown_20398B8
-_0809B9F0: .4byte gMapObjects
-_0809B9F4:
- cmp r0, 0x3
- beq _0809BA06
- b _0809BA0C
-_0809B9FA:
- adds r0, r2, r6
- strh r7, [r0]
- b _0809BA12
-_0809BA00:
- adds r1, r2, r6
- movs r0, 0x1
- b _0809BA10
-_0809BA06:
- adds r1, r2, r6
- movs r0, 0x2
- b _0809BA10
-_0809BA0C:
- adds r1, r2, r6
- movs r0, 0x3
-_0809BA10:
- strh r0, [r1]
-_0809BA12:
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
-_0809BA1C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bls _0809B976
- mov r2, r10
- lsls r0, r2, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bls _0809B970
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_809B92C
-
- thumb_func_start sub_809BA40
-sub_809BA40: @ 809BA40
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- movs r6, 0
- ldr r7, _0809BAE8 @ =gUnknown_20398B4
- ldr r0, _0809BAEC @ =gMapObjects
- mov r8, r0
- adds r1, r7, 0x6
- mov r9, r1
-_0809BA56:
- lsls r5, r6, 3
- adds r4, r5, r7
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x10
- beq _0809BACE
- adds r1, r0, 0
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r0, [r0, 0x5]
- bl GetFieldObjectGraphicsInfo
- movs r1, 0
- ldrsh r2, [r4, r1]
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r4, [r1, 0x5]
- adds r1, r7, 0x2
- adds r1, r5, r1
- ldrh r2, [r1]
- lsls r2, 20
- ldr r1, _0809BAF0 @ =0xfff80000
- adds r2, r1
- asrs r2, 16
- adds r1, r7, 0x4
- adds r1, r5, r1
- ldrh r3, [r1]
- lsls r3, 4
- movs r1, 0xA
- ldrsh r0, [r0, r1]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- subs r0, 0x30
- subs r3, r0
- lsls r3, 16
- asrs r3, 16
- movs r0, 0x2
- str r0, [sp]
- adds r0, r4, 0
- ldr r1, _0809BAF4 @ =SpriteCallbackDummy
- bl AddPseudoEventObject
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _0809BAF8 @ =gSprites
- adds r2, r0
- mov r1, r9
- adds r0, r5, r1
- ldrb r1, [r0]
- adds r0, r2, 0
- bl StartSpriteAnim
-_0809BACE:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0xF
- bls _0809BA56
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BAE8: .4byte gUnknown_20398B4
-_0809BAEC: .4byte gMapObjects
-_0809BAF0: .4byte 0xfff80000
-_0809BAF4: .4byte SpriteCallbackDummy
-_0809BAF8: .4byte gSprites
- thumb_func_end sub_809BA40
-
- thumb_func_start sub_809BAFC
-sub_809BAFC: @ 809BAFC
- push {r4-r6,lr}
- ldr r0, _0809BB34 @ =gUnknown_2039958
- ldr r4, [r0]
- ldr r0, _0809BB38 @ =gUnknown_2039954
- ldr r3, [r0]
- movs r1, 0
- ldr r0, _0809BB3C @ =0x0000b3dc
- adds r6, r0, 0
- ldr r5, _0809BB40 @ =0x000003ff
-_0809BB0E:
- lsls r0, r1, 16
- asrs r2, r0, 16
- lsls r1, r2, 1
- adds r0, r1, r3
- ldrh r0, [r0]
- cmp r0, 0
- beq _0809BB22
- adds r1, r4
- adds r0, r6
- strh r0, [r1]
-_0809BB22:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, r5
- ble _0809BB0E
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BB34: .4byte gUnknown_2039958
-_0809BB38: .4byte gUnknown_2039954
-_0809BB3C: .4byte 0x0000b3dc
-_0809BB40: .4byte 0x000003ff
- thumb_func_end sub_809BAFC
-
- thumb_func_start sub_809BB44
-sub_809BB44: @ 809BB44
- push {r4,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, _0809BBAC @ =gTasks+0x8
- adds r4, r0
- movs r0, 0x3
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r0, _0809BBB0 @ =gUnknown_2039934
- ldr r3, [r0, 0x8]
- movs r0, 0xFF
- str r0, [sp]
- movs r0, 0x3
- movs r1, 0x36
- movs r2, 0xA
- bl PrintMoneyAmount
- ldr r0, _0809BBB4 @ =gStringVar1
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r4, _0809BBB8 @ =gStringVar4
- ldr r1, _0809BBBC @ =gText_TimesStrVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0xA
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- movs r0, 0x1
- str r0, [sp, 0x10]
- movs r0, 0x3
- movs r1, 0
- adds r2, r4, 0
- movs r3, 0x2
- bl BuyMenuPrint
- add sp, 0x14
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BBAC: .4byte gTasks+0x8
-_0809BBB0: .4byte gUnknown_2039934
-_0809BBB4: .4byte gStringVar1
-_0809BBB8: .4byte gStringVar4
-_0809BBBC: .4byte gText_TimesStrVar1
- thumb_func_end sub_809BB44
-
- thumb_func_start sub_809BBC0
-sub_809BBC0: @ 809BBC0
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _0809BC00 @ =gTasks+0x8
- adds r5, r0, r1
- ldr r0, _0809BC04 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0809BC8E
- ldrb r0, [r5, 0xE]
- bl ListMenu_ProcessInput
- adds r4, r0, 0
- ldrb r0, [r5, 0xE]
- ldr r7, _0809BC08 @ =gUnknown_2039942
- subs r2, r7, 0x2
- adds r1, r7, 0
- bl ListMenuGetScrollAndRow
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _0809BC0C
- adds r0, 0x1
- cmp r4, r0
- bne _0809BC1A
- b _0809BC8E
- .align 2, 0
-_0809BC00: .4byte gTasks+0x8
-_0809BC04: .4byte gPaletteFade
-_0809BC08: .4byte gUnknown_2039942
-_0809BC0C:
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl sub_809C004
- b _0809BC8E
-_0809BC1A:
- movs r0, 0x5
- bl PlaySE
- strh r4, [r5, 0xA]
- movs r0, 0x5
- bl ClearWindowTilemap
- bl sub_809B73C
- ldrb r0, [r5, 0xE]
- movs r1, 0x2
- bl sub_809B57C
- movs r0, 0x1
- bl sub_809B10C
- lsls r0, r4, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl itemid_get_market_price
- adds r1, r0, 0
- adds r0, r7, 0
- subs r0, 0xE
- lsls r1, 16
- lsrs r1, 16
- str r1, [r0, 0x8]
- ldr r0, _0809BC70 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r2, 0xA4
- lsls r2, 2
- adds r0, r2
- bl IsEnoughMoney
- lsls r0, 24
- cmp r0, 0
- bne _0809BC7C
- ldr r1, _0809BC74 @ =gUnknown_8416842
- ldr r2, _0809BC78 @ =sub_809BF98
- adds r0, r6, 0
- bl BuyMenuDisplayMessage
- b _0809BC8E
- .align 2, 0
-_0809BC70: .4byte gSaveBlock1Ptr
-_0809BC74: .4byte gUnknown_8416842
-_0809BC78: .4byte sub_809BF98
-_0809BC7C:
- ldr r1, _0809BC94 @ =gStringVar1
- adds r0, r4, 0
- bl CopyItemName
- ldr r1, _0809BC98 @ =gUnknown_8416766
- ldr r2, _0809BC9C @ =sub_809BCA0
- adds r0, r6, 0
- bl BuyMenuDisplayMessage
-_0809BC8E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BC94: .4byte gStringVar1
-_0809BC98: .4byte gUnknown_8416766
-_0809BC9C: .4byte sub_809BCA0
- thumb_func_end sub_809BBC0
-
- thumb_func_start sub_809BCA0
-sub_809BCA0: @ 809BCA0
- push {r4-r7,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r5, r7, 2
- adds r5, r7
- lsls r5, 3
- ldr r0, _0809BD40 @ =gTasks+0x8
- adds r5, r0
- ldrh r0, [r5, 0xA]
- bl BagGetQuantityByItemId
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x1
- movs r1, 0
- bl BuyMenuQuantityBoxThinBorder
- ldr r0, _0809BD44 @ =gStringVar1
- adds r1, r4, 0
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r6, _0809BD48 @ =gStringVar4
- ldr r1, _0809BD4C @ =gUnknown_8416749
- adds r0, r6, 0
- bl StringExpandPlaceholders
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- str r0, [sp, 0xC]
- movs r4, 0x1
- str r4, [sp, 0x10]
- movs r0, 0x1
- movs r1, 0x2
- adds r2, r6, 0
- movs r3, 0
- bl BuyMenuPrint
- strh r4, [r5, 0x2]
- movs r0, 0x3
- movs r1, 0
- bl BuyMenuQuantityBoxNormalBorder
- adds r0, r7, 0
- bl sub_809BB44
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- ldr r0, _0809BD50 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0xA4
- lsls r1, 2
- adds r0, r1
- bl GetMoney
- adds r4, r0, 0
- ldrh r0, [r5, 0xA]
- bl itemid_get_market_price
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl __udivsi3
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x63
- bls _0809BD58
- ldr r1, _0809BD54 @ =gUnknown_2039934
- movs r0, 0x63
- b _0809BD5E
- .align 2, 0
-_0809BD40: .4byte gTasks+0x8
-_0809BD44: .4byte gStringVar1
-_0809BD48: .4byte gStringVar4
-_0809BD4C: .4byte gUnknown_8416749
-_0809BD50: .4byte gSaveBlock1Ptr
-_0809BD54: .4byte gUnknown_2039934
-_0809BD58:
- ldr r1, _0809BD80 @ =gUnknown_2039934
- lsls r0, r2, 24
- lsrs r0, 24
-_0809BD5E:
- strh r0, [r1, 0x14]
- cmp r2, 0x1
- beq _0809BD68
- bl sub_809B6FC
-_0809BD68:
- ldr r0, _0809BD84 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, _0809BD88 @ =sub_809BD8C
- str r0, [r1]
- add sp, 0x14
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BD80: .4byte gUnknown_2039934
-_0809BD84: .4byte gTasks
-_0809BD88: .4byte sub_809BD8C
- thumb_func_end sub_809BCA0
-
- thumb_func_start sub_809BD8C
-sub_809BD8C: @ 809BD8C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r7, r5, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0809BDCC @ =gTasks+0x8
- adds r4, r0, r1
- adds r0, r4, 0x2
- ldr r6, _0809BDD0 @ =gUnknown_2039934
- ldrh r1, [r6, 0x14]
- bl AdjustQuantityAccordingToDPadInput
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0809BDD4
- ldrh r0, [r4, 0xA]
- bl itemid_get_market_price
- lsls r0, 16
- lsrs r0, 16
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- muls r0, r1
- str r0, [r6, 0x8]
- adds r0, r5, 0
- bl sub_809BB44
- b _0809BE88
- .align 2, 0
-_0809BDCC: .4byte gTasks+0x8
-_0809BDD0: .4byte gUnknown_2039934
-_0809BDD4:
- ldr r0, _0809BE3C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0809BE54
- movs r0, 0x5
- bl PlaySE
- bl sub_809B73C
- movs r0, 0x3
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x1
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x3
- bl ClearWindowTilemap
- movs r0, 0x1
- bl ClearWindowTilemap
- movs r0, 0x4
- bl PutWindowTilemap
- ldrh r0, [r4, 0xA]
- ldr r1, _0809BE40 @ =gStringVar1
- bl CopyItemName
- ldr r0, _0809BE44 @ =gStringVar2
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- movs r2, 0
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, _0809BE48 @ =gStringVar3
- ldr r1, [r6, 0x8]
- movs r2, 0
- movs r3, 0x8
- bl ConvertIntToDecimalStringN
- ldr r1, _0809BE4C @ =gUnknown_841678E
- ldr r2, _0809BE50 @ =sub_809BE90
- adds r0, r5, 0
- bl BuyMenuDisplayMessage
- b _0809BE88
- .align 2, 0
-_0809BE3C: .4byte gMain
-_0809BE40: .4byte gStringVar1
-_0809BE44: .4byte gStringVar2
-_0809BE48: .4byte gStringVar3
-_0809BE4C: .4byte gUnknown_841678E
-_0809BE50: .4byte sub_809BE90
-_0809BE54:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0809BE88
- movs r0, 0x5
- bl PlaySE
- bl sub_809B73C
- movs r0, 0x3
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x1
- movs r1, 0
- bl ClearStdWindowAndFrameToTransparent
- movs r0, 0x3
- bl ClearWindowTilemap
- movs r0, 0x1
- bl ClearWindowTilemap
- adds r0, r7, 0
- bl sub_809BF98
-_0809BE88:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_809BD8C
-
- thumb_func_start sub_809BE90
-sub_809BE90: @ 809BE90
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0809BEA0 @ =gUnknown_83DF0B4
- bl BuyMenuConfirmPurchase
- pop {r0}
- bx r0
- .align 2, 0
-_0809BEA0: .4byte gUnknown_83DF0B4
- thumb_func_end sub_809BE90
-
- thumb_func_start sub_809BEA4
-sub_809BEA4: @ 809BEA4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0809BEE8 @ =gTasks+0x8
- adds r4, r0, r1
- movs r0, 0x4
- bl PutWindowTilemap
- ldrh r0, [r4, 0xA]
- ldrh r1, [r4, 0x2]
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0809BEF4
- ldr r1, _0809BEEC @ =gUnknown_84167E7
- ldr r2, _0809BEF0 @ =sub_809BF0C
- adds r0, r5, 0
- bl BuyMenuDisplayMessage
- adds r0, r5, 0
- bl nullsub_52
- ldrh r0, [r4, 0xA]
- ldrh r1, [r4, 0x2]
- movs r2, 0x1
- bl sub_809C09C
- b _0809BEFE
- .align 2, 0
-_0809BEE8: .4byte gTasks+0x8
-_0809BEEC: .4byte gUnknown_84167E7
-_0809BEF0: .4byte sub_809BF0C
-_0809BEF4:
- ldr r1, _0809BF04 @ =gUnknown_8416861
- ldr r2, _0809BF08 @ =sub_809BF98
- adds r0, r5, 0
- bl BuyMenuDisplayMessage
-_0809BEFE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BF04: .4byte gUnknown_8416861
-_0809BF08: .4byte sub_809BF98
- thumb_func_end sub_809BEA4
-
- thumb_func_start sub_809BF0C
-sub_809BF0C: @ 809BF0C
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x26
- bl IncrementGameStat
- ldr r6, _0809BF58 @ =gSaveBlock1Ptr
- ldr r0, [r6]
- movs r5, 0xA4
- lsls r5, 2
- adds r0, r5
- ldr r1, _0809BF5C @ =gUnknown_2039934
- ldr r1, [r1, 0x8]
- bl RemoveMoney
- movs r0, 0xF8
- bl PlaySE
- ldr r0, [r6]
- adds r0, r5
- bl GetMoney
- adds r1, r0, 0
- movs r0, 0
- movs r2, 0
- bl PrintMoneyAmountInMoneyBox
- ldr r1, _0809BF60 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0809BF64 @ =sub_809BF68
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BF58: .4byte gSaveBlock1Ptr
-_0809BF5C: .4byte gUnknown_2039934
-_0809BF60: .4byte gTasks
-_0809BF64: .4byte sub_809BF68
- thumb_func_end sub_809BF0C
-
- thumb_func_start sub_809BF68
-sub_809BF68: @ 809BF68
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0809BF94 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0809BF82
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0809BF8E
-_0809BF82:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_809BF98
-_0809BF8E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BF94: .4byte gMain
- thumb_func_end sub_809BF68
-
- thumb_func_start sub_809BF98
-sub_809BF98: @ 809BF98
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r5, r1, 3
- ldr r6, _0809BFF8 @ =gTasks+0x8
- adds r4, r5, r6
- movs r0, 0x2
- movs r1, 0
- bl ClearDialogWindowAndFrameToTransparent
- ldrb r0, [r4, 0xE]
- movs r1, 0x1
- bl sub_809B57C
- movs r0, 0
- bl sub_809B10C
- movs r0, 0x4
- bl PutWindowTilemap
- movs r0, 0x5
- bl PutWindowTilemap
- ldr r0, _0809BFFC @ =gUnknown_2039934
- ldrb r1, [r0, 0x16]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _0809BFDC
- movs r0, 0x6
- bl PutWindowTilemap
-_0809BFDC:
- movs r0, 0
- bl ScheduleBgCopyTilemapToVram
- bl sub_809B690
- adds r0, r6, 0
- subs r0, 0x8
- adds r0, r5, r0
- ldr r1, _0809C000 @ =sub_809BBC0
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809BFF8: .4byte gTasks+0x8
-_0809BFFC: .4byte gUnknown_2039934
-_0809C000: .4byte sub_809BBC0
- thumb_func_end sub_809BF98
-
- thumb_func_start sub_809C004
-sub_809C004: @ 809C004
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _0809C03C @ =gFieldCallback
- ldr r0, _0809C040 @ =sub_809AD74
- str r0, [r1]
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0809C044 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0809C048 @ =sub_809C04C
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C03C: .4byte gFieldCallback
-_0809C040: .4byte sub_809AD74
-_0809C044: .4byte gTasks
-_0809C048: .4byte sub_809C04C
- thumb_func_end sub_809C004
-
- thumb_func_start sub_809C04C
-sub_809C04C: @ 809C04C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _0809C088 @ =gTasks+0x8
- adds r2, r0, r1
- ldr r0, _0809C08C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0809C082
- ldrb r0, [r2, 0xE]
- movs r1, 0
- movs r2, 0
- bl DestroyListMenuTask
- bl sub_809B604
- ldr r0, _0809C090 @ =CB2_ReturnToField
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_0809C082:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C088: .4byte gTasks+0x8
-_0809C08C: .4byte gPaletteFade
-_0809C090: .4byte CB2_ReturnToField
- thumb_func_end sub_809C04C
-
- thumb_func_start nullsub_52
-nullsub_52: @ 809C094
- bx lr
- thumb_func_end nullsub_52
-
- thumb_func_start nullsub_53
-nullsub_53: @ 809C098
- bx lr
- thumb_func_end nullsub_53
-
- thumb_func_start sub_809C09C
-sub_809C09C: @ 809C09C
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 24
- lsrs r5, r2, 24
- ldr r1, _0809C0B8 @ =gUnknown_203996C
- ldrb r2, [r1, 0xA]
- cmp r2, r5
- bne _0809C0BC
- adds r4, r1, 0
- b _0809C0D4
- .align 2, 0
-_0809C0B8: .4byte gUnknown_203996C
-_0809C0BC:
- ldrb r0, [r1, 0x16]
- cmp r0, r5
- bne _0809C0C8
- adds r4, r1, 0
- adds r4, 0xC
- b _0809C0D4
-_0809C0C8:
- adds r4, r1, 0
- adds r4, 0xC
- cmp r2, 0
- bne _0809C0D2
- adds r4, r1, 0
-_0809C0D2:
- strb r5, [r4, 0xA]
-_0809C0D4:
- ldrh r0, [r4, 0x4]
- cmp r0, 0
- beq _0809C0DE
- movs r0, 0x1
- strb r0, [r4, 0x9]
-_0809C0DE:
- strh r3, [r4, 0x4]
- ldrh r1, [r4, 0x6]
- ldr r0, _0809C128 @ =0x000003e6
- cmp r1, r0
- bhi _0809C0F8
- adds r0, r6, r1
- strh r0, [r4, 0x6]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _0809C12C @ =0x000003e7
- cmp r0, r1
- bls _0809C0F8
- strh r1, [r4, 0x6]
-_0809C0F8:
- ldr r1, [r4]
- ldr r0, _0809C130 @ =0x000f423e
- cmp r1, r0
- bhi _0809C120
- adds r0, r3, 0
- bl itemid_get_market_price
- lsls r0, 16
- lsrs r0, 16
- subs r1, r5, 0x1
- asrs r0, r1
- adds r1, r0, 0
- muls r1, r6
- ldr r0, [r4]
- adds r0, r1
- str r0, [r4]
- ldr r1, _0809C134 @ =0x000f423f
- cmp r0, r1
- bls _0809C120
- str r1, [r4]
-_0809C120:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C128: .4byte 0x000003e6
-_0809C12C: .4byte 0x000003e7
-_0809C130: .4byte 0x000f423e
-_0809C134: .4byte 0x000f423f
- thumb_func_end sub_809C09C
-
- thumb_func_start sub_809C138
-sub_809C138: @ 809C138
- push {r4,lr}
- ldr r4, _0809C160 @ =gUnknown_203996C
- ldrb r0, [r4, 0xA]
- cmp r0, 0
- beq _0809C14A
- adds r0, 0x24
- adds r1, r4, 0
- bl sub_8113550
-_0809C14A:
- ldrb r0, [r4, 0x16]
- cmp r0, 0
- beq _0809C15A
- adds r0, 0x24
- adds r1, r4, 0
- adds r1, 0xC
- bl sub_8113550
-_0809C15A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C160: .4byte gUnknown_203996C
- thumb_func_end sub_809C138
-
- thumb_func_start CreatePokemartMenu
-CreatePokemartMenu: @ 809C164
- push {r4,lr}
- bl sub_809ABD8
- movs r0, 0
- bl sub_809AAB0
- ldr r0, _0809C194 @ =EnableBothScriptContexts
- bl sub_809AC04
- bl nullsub_53
- ldr r4, _0809C198 @ =gUnknown_203996C
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x18
- bl memset
- ldr r0, _0809C19C @ =gMapHeader
- ldrb r0, [r0, 0x14]
- strb r0, [r4, 0x8]
- strb r0, [r4, 0x14]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C194: .4byte EnableBothScriptContexts
-_0809C198: .4byte gUnknown_203996C
-_0809C19C: .4byte gMapHeader
- thumb_func_end CreatePokemartMenu
-
- thumb_func_start CreateDecorationShop1Menu
-CreateDecorationShop1Menu: @ 809C1A0
- push {lr}
- bl sub_809ABD8
- movs r0, 0x2
- bl sub_809AAB0
- ldr r0, _0809C1B8 @ =EnableBothScriptContexts
- bl sub_809AC04
- pop {r0}
- bx r0
- .align 2, 0
-_0809C1B8: .4byte EnableBothScriptContexts
- thumb_func_end CreateDecorationShop1Menu
-
- thumb_func_start CreateDecorationShop2Menu
-CreateDecorationShop2Menu: @ 809C1BC
- push {lr}
- bl sub_809ABD8
- movs r0, 0x3
- bl sub_809AAB0
- ldr r0, _0809C1D4 @ =EnableBothScriptContexts
- bl sub_809AC04
- pop {r0}
- bx r0
- .align 2, 0
-_0809C1D4: .4byte EnableBothScriptContexts
- thumb_func_end CreateDecorationShop2Menu
-
- thumb_func_start sub_809C1D8
-sub_809C1D8: @ 809C1D8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- mov r9, r1
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 16
- lsrs r2, 16
- mov r10, r2
- ldr r2, _0809C26C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r0, [r1, 0x10]
- subs r0, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldrh r0, [r1, 0x12]
- subs r0, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- ldrh r4, [r1, 0xA]
- movs r2, 0xC
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0809C29C
- movs r2, 0
- lsls r5, 16
- str r5, [sp, 0xC]
- lsls r0, r3, 16
- lsls r1, r4, 16
- asrs r0, 16
- str r0, [sp]
- asrs r1, 16
- str r1, [sp, 0x4]
- lsls r0, r1, 1
- mov r1, r9
- adds r7, r0, r1
-_0809C22C:
- movs r4, 0
- lsls r2, 16
- mov r8, r2
- asrs r0, r2, 16
- ldr r2, [sp]
- adds r6, r2, r0
-_0809C238:
- ldr r0, [sp, 0xC]
- asrs r1, r0, 16
- lsls r4, 16
- asrs r0, r4, 16
- adds r5, r1, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridGetMetatileIdAt
- movs r2, 0
- ldrsh r1, [r7, r2]
- lsls r0, 16
- asrs r0, 16
- cmp r1, r0
- bne _0809C280
- ldr r0, [sp, 0x4]
- cmp r0, 0x2
- beq _0809C270
- ldrh r0, [r7, 0x2]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
- b _0809C280
- .align 2, 0
-_0809C26C: .4byte gTasks
-_0809C270:
- mov r1, r9
- ldrh r0, [r1]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
-_0809C280:
- movs r2, 0x80
- lsls r2, 9
- adds r0, r4, r2
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _0809C238
- adds r0, r2, 0
- add r0, r8
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _0809C22C
- b _0809C324
-_0809C29C:
- movs r2, 0
- lsls r5, 16
- str r5, [sp, 0xC]
- lsls r0, r3, 16
- lsls r1, r4, 16
- asrs r0, 16
- str r0, [sp, 0x8]
- asrs r7, r1, 16
-_0809C2AC:
- movs r4, 0
- lsls r2, 16
- mov r8, r2
- asrs r0, r2, 16
- ldr r1, [sp, 0x8]
- adds r6, r1, r0
-_0809C2B8:
- ldr r2, [sp, 0xC]
- asrs r1, r2, 16
- lsls r4, 16
- asrs r0, r4, 16
- adds r5, r1, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridGetMetatileIdAt
- movs r1, 0x2
- subs r1, r7
- lsls r1, 1
- add r1, r9
- movs r2, 0
- ldrsh r1, [r1, r2]
- lsls r0, 16
- asrs r0, 16
- cmp r1, r0
- bne _0809C30A
- cmp r7, 0x2
- beq _0809C2FA
- movs r0, 0x1
- subs r0, r7
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
- b _0809C30A
-_0809C2FA:
- mov r1, r9
- ldrh r0, [r1, 0x4]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
-_0809C30A:
- movs r2, 0x80
- lsls r2, 9
- adds r0, r4, r2
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _0809C2B8
- adds r0, r2, 0
- add r0, r8
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _0809C2AC
-_0809C324:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_809C1D8
-
- thumb_func_start sub_809C334
-sub_809C334: @ 809C334
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- ldr r1, _0809C35C @ =gTasks+0x8
- adds r4, r0, r1
- movs r0, 0x1
- strh r0, [r4, 0x6]
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x6
- bhi _0809C3CE
- lsls r0, 2
- ldr r1, _0809C360 @ =_0809C364
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0809C35C: .4byte gTasks+0x8
-_0809C360: .4byte _0809C364
- .align 2, 0
-_0809C364:
- .4byte _0809C380
- .4byte _0809C388
- .4byte _0809C390
- .4byte _0809C398
- .4byte _0809C3A0
- .4byte _0809C3B4
- .4byte _0809C3C4
-_0809C380:
- ldr r1, _0809C384 @ =gUnknown_83DF0D4
- b _0809C3B6
- .align 2, 0
-_0809C384: .4byte gUnknown_83DF0D4
-_0809C388:
- ldr r1, _0809C38C @ =gUnknown_83DF0DA
- b _0809C3B6
- .align 2, 0
-_0809C38C: .4byte gUnknown_83DF0DA
-_0809C390:
- ldr r1, _0809C394 @ =gUnknown_83DF0E0
- b _0809C3A2
- .align 2, 0
-_0809C394: .4byte gUnknown_83DF0E0
-_0809C398:
- ldr r1, _0809C39C @ =gUnknown_83DF0E6
- b _0809C3B6
- .align 2, 0
-_0809C39C: .4byte gUnknown_83DF0E6
-_0809C3A0:
- ldr r1, _0809C3B0 @ =gUnknown_83DF0EC
-_0809C3A2:
- movs r2, 0xC0
- lsls r2, 4
- adds r0, r3, 0
- bl sub_809C1D8
- b _0809C3CE
- .align 2, 0
-_0809C3B0: .4byte gUnknown_83DF0EC
-_0809C3B4:
- ldr r1, _0809C3C0 @ =gUnknown_83DF0F2
-_0809C3B6:
- adds r0, r3, 0
- movs r2, 0
- bl sub_809C1D8
- b _0809C3CE
- .align 2, 0
-_0809C3C0: .4byte gUnknown_83DF0F2
-_0809C3C4:
- ldr r1, _0809C3F8 @ =gUnknown_83DF0F8
- adds r0, r3, 0
- movs r2, 0
- bl sub_809C1D8
-_0809C3CE:
- ldrh r0, [r4]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- strh r0, [r4]
- adds r5, r0, 0
- cmp r5, 0
- bne _0809C3F2
- bl DrawWholeMapView
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- adds r0, 0x1
- movs r1, 0x3
- bl __modsi3
- strh r0, [r4, 0x2]
- strh r5, [r4, 0x6]
-_0809C3F2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C3F8: .4byte gUnknown_83DF0F8
- thumb_func_end sub_809C334
-
- thumb_func_start sub_809C3FC
-sub_809C3FC: @ 809C3FC
- push {r4-r7,lr}
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- ldr r6, _0809C440 @ =sub_809C334
- adds r0, r6, 0
- movs r1, 0
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _0809C444 @ =gTasks+0x8
- adds r7, r0, r1
- adds r0, r7, 0
- adds r0, 0x8
- adds r1, r7, 0
- adds r1, 0xA
- bl PlayerGetDestCoords
- movs r0, 0
- strh r0, [r7]
- strh r0, [r7, 0x2]
- strh r5, [r7, 0x4]
- adds r0, r4, 0
- bl _call_via_r6
- adds r0, r4, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0809C440: .4byte sub_809C334
-_0809C444: .4byte gTasks+0x8
- thumb_func_end sub_809C3FC
-
- thumb_func_start sub_809C448
-sub_809C448: @ 809C448
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_809C3FC
- ldr r1, _0809C45C @ =gUnknown_2039984
- strb r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0809C45C: .4byte gUnknown_2039984
- thumb_func_end sub_809C448
-
- thumb_func_start sub_809C460
-sub_809C460: @ 809C460
- push {lr}
- ldr r0, _0809C470 @ =gUnknown_2039984
- ldrb r0, [r0]
- bl DestroyTask
- pop {r0}
- bx r0
- .align 2, 0
-_0809C470: .4byte gUnknown_2039984
- thumb_func_end sub_809C460
-
- thumb_func_start sub_809C474
-sub_809C474: @ 809C474
- push {lr}
- ldr r2, _0809C498 @ =gTasks
- ldr r0, _0809C49C @ =gUnknown_2039984
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r1, r0, r2
- movs r2, 0xE
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0809C4A0
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- cmp r0, 0x2
- bne _0809C4A0
- movs r0, 0
- b _0809C4A2
- .align 2, 0
-_0809C498: .4byte gTasks
-_0809C49C: .4byte gUnknown_2039984
-_0809C4A0:
- movs r0, 0x1
-_0809C4A2:
- pop {r1}
- bx r1
- thumb_func_end sub_809C474
-
- thumb_func_start sub_809C4A8
-sub_809C4A8: @ 809C4A8
- push {r4,lr}
- ldr r0, _0809C4E0 @ =sub_809C500
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0809C4E4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- movs r0, 0
- strh r0, [r4, 0x8]
- strh r0, [r4, 0xA]
- adds r2, 0x8
- adds r1, r2
- adds r0, r1, 0x4
- adds r1, 0x6
- bl PlayerGetDestCoords
- ldr r0, _0809C4E8 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- bne _0809C4EC
- ldrh r0, [r4, 0xC]
- adds r0, 0x6
- b _0809C4F0
- .align 2, 0
-_0809C4E0: .4byte sub_809C500
-_0809C4E4: .4byte gTasks
-_0809C4E8: .4byte gSpecialVar_0x8004
-_0809C4EC:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
-_0809C4F0:
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0xE]
- subs r0, 0x5
- strh r0, [r4, 0xE]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_809C4A8
-
- thumb_func_start sub_809C500
-sub_809C500: @ 809C500
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0809C544 @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0809C588
- ldrh r1, [r4, 0x2]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0809C550
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- ldr r2, _0809C548 @ =0x00000eb5
- bl MapGridSetMetatileIdAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x2
- ldr r2, _0809C54C @ =0x00000eb7
- bl MapGridSetMetatileIdAt
- b _0809C56E
- .align 2, 0
-_0809C544: .4byte gTasks+0x8
-_0809C548: .4byte 0x00000eb5
-_0809C54C: .4byte 0x00000eb7
-_0809C550:
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- ldr r2, _0809C5EC @ =0x00000eb6
- bl MapGridSetMetatileIdAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x2
- ldr r2, _0809C5F0 @ =0x00000eb8
- bl MapGridSetMetatileIdAt
-_0809C56E:
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl CurrentMapDrawMetatileAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x2
- bl CurrentMapDrawMetatileAt
-_0809C588:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- bne _0809C5E6
- movs r0, 0
- strh r0, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xD
- bne _0809C5E6
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- ldr r2, _0809C5F4 @ =0x00000e8a
- bl MapGridSetMetatileIdAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x2
- ldr r2, _0809C5F8 @ =0x00000e96
- bl MapGridSetMetatileIdAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl CurrentMapDrawMetatileAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x2
- bl CurrentMapDrawMetatileAt
- adds r0, r5, 0
- bl DestroyTask
-_0809C5E6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C5EC: .4byte 0x00000eb6
-_0809C5F0: .4byte 0x00000eb8
-_0809C5F4: .4byte 0x00000e8a
-_0809C5F8: .4byte 0x00000e96
- thumb_func_end sub_809C500
-
- thumb_func_start sub_809C5FC
-sub_809C5FC: @ 809C5FC
- push {r4,lr}
- ldr r0, _0809C638 @ =sub_809C640
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0809C63C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- movs r0, 0
- strh r0, [r4, 0x8]
- strh r0, [r4, 0xA]
- adds r2, 0x8
- adds r1, r2
- adds r0, r1, 0x4
- adds r1, 0x6
- bl PlayerGetDestCoords
- ldrh r0, [r4, 0xC]
- adds r0, 0x4
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0xE]
- subs r0, 0x5
- strh r0, [r4, 0xE]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C638: .4byte sub_809C640
-_0809C63C: .4byte gTasks
- thumb_func_end sub_809C5FC
-
- thumb_func_start sub_809C640
-sub_809C640: @ 809C640
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0809C6A8 @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0809C6F2
- movs r2, 0x2
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0809C6BA
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- ldr r2, _0809C6AC @ =0x00000e85
- bl MapGridSetMetatileIdAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x1
- ldr r2, _0809C6B0 @ =0x00000eb4
- bl MapGridSetMetatileIdAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl CurrentMapDrawMetatileAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x1
- bl CurrentMapDrawMetatileAt
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bne _0809C6B4
- adds r0, r5, 0
- bl DestroyTask
- b _0809C70A
- .align 2, 0
-_0809C6A8: .4byte gTasks+0x8
-_0809C6AC: .4byte 0x00000e85
-_0809C6B0: .4byte 0x00000eb4
-_0809C6B4:
- ldrh r0, [r4, 0x4]
- subs r0, 0x1
- strh r0, [r4, 0x4]
-_0809C6BA:
- movs r2, 0x4
- ldrsh r0, [r4, r2]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- ldr r2, _0809C710 @ =0x00000eb9
- bl MapGridSetMetatileIdAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x1
- ldr r2, _0809C714 @ =0x00000eba
- bl MapGridSetMetatileIdAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl CurrentMapDrawMetatileAt
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- adds r1, 0x1
- bl CurrentMapDrawMetatileAt
-_0809C6F2:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- bne _0809C70A
- movs r0, 0
- strh r0, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
-_0809C70A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0809C710: .4byte 0x00000eb9
-_0809C714: .4byte 0x00000eba
- thumb_func_end sub_809C640
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/graphics.s b/data/graphics.s
index a886e2a56..3b9f6c3a0 100644
--- a/data/graphics.s
+++ b/data/graphics.s
@@ -14008,17 +14008,17 @@ gBerryPouchSpritePalette:: @ 8E85C1C
gBerryPouchBg1Tilemap:: @ 8E85C44
.incbin "graphics/berry_pouch/unk_8E85C44.bin.lz"
-gUnknown_8E85DC8:: @ 8E85DC8
- .incbin "baserom.gba", 0xE85DC8, 0x134
+gBuyMenuFrame_Gfx:: @ 8E85DC8
+ .incbin "graphics/shop_menu/shop_menu.4bpp.lz"
-gUnknown_8E85EFC:: @ 8E85EFC
- .incbin "baserom.gba", 0xE85EFC, 0x13C
+gBuyMenuFrame_Tilemap:: @ 8E85EFC
+ .incbin "graphics/shop_menu/shop_tilemap.bin"
-gUnknown_8E86038:: @ 8E86038
- .incbin "baserom.gba", 0xE86038, 0x138
+gBuyMenuFrame_TmHmTilemap:: @ 8E86038
+ .incbin "graphics/shop_menu/shop_tm_hm_tilemap.bin"
-gUnknown_8E86170:: @ 8E86170
- .incbin "baserom.gba", 0xE86170, 0x38
+gBuyMenuFrame_Pal:: @ 8E86170
+ .incbin "graphics/shop_menu/shop_menu.gbapal.lz"
gUnknown_8E861A8:: @ 8E861A8
.incbin "baserom.gba", 0xE861A8, 0x98
diff --git a/data/shop.s b/data/shop.s
deleted file mode 100644
index a675cfae2..000000000
--- a/data/shop.s
+++ /dev/null
@@ -1,92 +0,0 @@
-#include "constants/maps.h"
-#include "constants/species.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-gUnknown_83DF09C:: @ 83DF09C
- .4byte gUnknown_8416738, sub_809AC5C
- .4byte gUnknown_841673C, sub_809AC98
- .4byte gUnknown_8416741, sub_809ACF8
-
-gUnknown_83DF0B4:: @ 83DF0B4
- .4byte sub_809BEA4
- .4byte sub_809BF98
-
-gUnknown_83DF0BC:: @ 83DF0BC
- .byte 0, 2, 1, 12, 6, 15
- .2byte 0x0008
- @ {
- @ .bg = 0,
- @ .tilemapLeft = 2,
- @ .tilemapTop = 1,
- @ .width = 12,
- @ .height = 6,
- @ .paletteNum = 15,
- @ .baseBlock = 0x0008
- @ }
-
-gUnknown_83DF0C4:: @ 83DF0C4
- .4byte 0x000001f8
- @ {
- @ .bg = 0,
- @ .charBaseIndex = 2,
- @ .mapBaseIndex = 31,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 0,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000011e1
- @ {
- @ .bg = 1,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 30,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 1,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000021d2
- @ {
- @ .bg = 2,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 29,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 2,
- @ .baseTile = 0x0000
- @ }
- .4byte 0x000031c3
- @ {
- @ .bg = 3,
- @ .charBaseIndex = 0,
- @ .mapBaseIndex = 28,
- @ .screenSize = 0,
- @ .paletteMode = 0,
- @ .priority = 3,
- @ .baseTile = 0x0000
- @ }
-
-gUnknown_83DF0D4:: @ 83DF0D4
- .2byte 0x0308, 0x030a, 0x02d0
-
-gUnknown_83DF0DA:: @ 83DF0DA
- .2byte 0x0309, 0x030b, 0x02d1
-
-gUnknown_83DF0E0:: @ 83DF0E0
- .2byte 0x0310, 0x0312, 0x02d8
-
-gUnknown_83DF0E6:: @ 83DF0E6
- .2byte 0x0311, 0x0313, 0x02d9
-
-gUnknown_83DF0EC:: @ 83DF0EC
- .2byte 0x02e3, 0x0316, 0x0314
-
-gUnknown_83DF0F2:: @ 83DF0F2
- .2byte 0x02e4, 0x0317, 0x0315
-
-gUnknown_83DF0F8:: @ 83DF0F8
- .2byte 0x02eb, 0x031e, 0x031c
diff --git a/data/strings.s b/data/strings.s
index ac7241354..2cbcf5503 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -475,7 +475,7 @@ gUnknown_8416210:: @ 8416210
gText_ThreeHyphens:: @ 8416213
.string "---$"
-gUnknown_8416217:: @ 8416217
+gText_SevenHyphens:: @ 8416217
.string "-------$"
gText_MaleSymbol:: @ 841621F
@@ -720,26 +720,26 @@ gText_TheBerryPouchWillBePutAway:: @ 8416716
.string "The BERRY POUCH will be\n"
.string "put away.$"
-gUnknown_8416738:: @ 0x8416738
+gText_ShopBuy:: @ 0x8416738
.string "BUY$"
-gUnknown_841673C:: @ 0x841673C
+gText_ShopSell:: @ 0x841673C
.string "SELL$"
-gUnknown_8416741:: @ 0x8416741
+gText_ShopQuit:: @ 0x8416741
.string "SEE YA!$"
-gUnknown_8416749:: @ 8416749
+gText_InBagVar1:: @ 8416749
.string "IN BAG:{SMALL} {STR_VAR_1}$"
-gUnknown_8416757:: @ 8416757
+gText_QuitShopping:: @ 8416757
.string "Quit shopping.$"
-gUnknown_8416766:: @ 8416766
+gText_Var1CertainlyHowMany:: @ 8416766
.string "{STR_VAR_1}? Certainly.\n"
.string "How many would you like?$"
-gUnknown_841678E:: @ 841678E
+gText_Var1AndYouWantedVar2:: @ 841678E
.string "{STR_VAR_1}, and you want {STR_VAR_2}.\n"
.string "That will be ¥{STR_VAR_3}. Okay?$"
@@ -751,7 +751,7 @@ gUnknown_84167D0:: @ 0x84167D0
.string "{STR_VAR_1} ですね!\n"
.string "{STR_VAR_2}¥ だけど かいますか?$"
-gUnknown_84167E7:: @ 84167E7
+gText_HereYouGoThankYou:: @ 84167E7
.string "Here you are!\n"
.string "Thank you!$"
@@ -763,10 +763,10 @@ gUnknown_8416822:: @ 0x8416822
.string "どうも ありがとう!\n"
.string "じたくの パソコンに おくって おくね!$"
-gUnknown_8416842:: @ 8416842
+gText_YouDontHaveMoney:: @ 8416842
.string "You don't have enough money.{PAUSE_UNTIL_PRESS}$"
-gUnknown_8416861:: @ 8416861
+gText_NoMoreRoomForThis:: @ 8416861
.string "You have no more room for this\n"
.string "item.{PAUSE_UNTIL_PRESS}$"
@@ -774,7 +774,7 @@ gUnknown_8416888:: @ 0x8416888
.string "{STR_VAR_1}を\n"
.string "いれる ばしょが いっぱいです{PAUSE_UNTIL_PRESS}$"
-gUnknown_841689E:: @ 841689E
+gText_CanIHelpWithAnythingElse:: @ 841689E
.string "Is there anything else I can do?$"
gUnknown_84168BF:: @ 0x84168BF
diff --git a/graphics/shop_menu/shop_menu.pal b/graphics/shop_menu/shop_menu.pal
new file mode 100644
index 000000000..b0fec0a30
--- /dev/null
+++ b/graphics/shop_menu/shop_menu.pal
@@ -0,0 +1,35 @@
+JASC-PAL
+0100
+32
+238 230 172
+222 156 106
+255 189 131
+255 222 164
+255 255 213
+238 230 172
+106 106 106
+189 213 213
+238 255 255
+222 246 255
+255 255 255
+164 222 255
+16 172 222
+0 82 115
+0 115 139
+0 123 197
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+189 213 213
+238 255 255
+222 246 255
+255 255 255
+164 222 255
+24 82 180
+0 90 131
+24 82 180
+24 82 180
diff --git a/graphics/shop_menu/shop_menu.png b/graphics/shop_menu/shop_menu.png
new file mode 100644
index 000000000..23af464a2
--- /dev/null
+++ b/graphics/shop_menu/shop_menu.png
Binary files differ
diff --git a/graphics/shop_menu/shop_tilemap.bin b/graphics/shop_menu/shop_tilemap.bin
new file mode 100644
index 000000000..8d5ab35b7
--- /dev/null
+++ b/graphics/shop_menu/shop_tilemap.bin
Binary files differ
diff --git a/graphics/shop_menu/shop_tm_hm_tilemap.bin b/graphics/shop_menu/shop_tm_hm_tilemap.bin
new file mode 100644
index 000000000..92fbb7dad
--- /dev/null
+++ b/graphics/shop_menu/shop_tm_hm_tilemap.bin
Binary files differ
diff --git a/include/fieldmap.h b/include/fieldmap.h
index 4af4342f7..f1107100f 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -16,6 +16,7 @@ extern const struct MapData Route1_Layout;
u32 MapGridGetMetatileIdAt(int, int);
u32 MapGridGetMetatileBehaviorAt(int, int);
+u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y);
void MapGridSetMetatileIdAt(int, int, u16);
void MapGridSetMetatileEntryAt(int, int, u16);
void GetCameraCoords(u16*, u16*);
diff --git a/include/graphics.h b/include/graphics.h
index 93efbd135..9b74ba2d0 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4249,6 +4249,12 @@ extern const u16 gUnknown_8E97DDC[];
extern const u32 gUnknown_8E97DFC[];
extern const u32 gUnknown_8E97EC4[];
+// shop menu
+extern const u32 gBuyMenuFrame_Gfx[];
+extern const u32 gBuyMenuFrame_Tilemap[];
+extern const u32 gBuyMenuFrame_TmHmTilemap[];
+extern const u32 gBuyMenuFrame_Pal[];
+
// battle_message
extern const u16 gUnknown_8D2FBB4[];
diff --git a/include/item.h b/include/item.h
index 01d2a55e5..7a4279976 100644
--- a/include/item.h
+++ b/include/item.h
@@ -68,6 +68,7 @@ bool8 AddBagItem(u16 itemId, u16 amount);
void SortPocketAndPlaceHMsFirst(struct BagPocket * pocket);
u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 itemId);
u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 itemId);
+u16 BagGetQuantityByItemId(u16 item);
bool8 itemid_is_unique(u16 itemId);
void BagPocketCompaction(struct ItemSlot * slots, u8 capacity);
u16 GetPcItemQuantity(u16 *);
diff --git a/include/list_menu.h b/include/list_menu.h
index e688c474f..94a49d2c2 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -30,25 +30,25 @@ struct ListMenu;
struct ListMenuTemplate
{
- const struct ListMenuItem *items;
- void (* moveCursorFunc)(s32 itemIndex, bool8 onInit, struct ListMenu *list);
- void (* itemPrintFunc)(u8 windowId, s32 itemId, u8 y);
- u16 totalItems;
- u16 maxShowed;
- u8 windowId;
- u8 header_X;
- u8 item_X;
- u8 cursor_X;
- u8 upText_Y:4; // x1, x2, x4, x8 = xF
- u8 cursorPal:4; // x10, x20, x40, x80 = xF0
- u8 fillValue:4; // x1, x2, x4, x8 = xF
- u8 cursorShadowPal:4; // x10, x20, x40, x80 = xF0
- u8 lettersSpacing:3;
- u8 itemVerticalPadding:3;
- u8 scrollMultiple:2; // x40, x80 = xC0
- u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F
- u8 cursorKind:2; // x40, x80
-};
+ /*0x00*/ const struct ListMenuItem *items;
+ /*0x04*/ void (* moveCursorFunc)(s32 itemIndex, bool8 onInit, struct ListMenu *list);
+ /*0x08*/ void (* itemPrintFunc)(u8 windowId, s32 itemId, u8 y);
+ /*0x0C*/ u16 totalItems;
+ /*0x0E*/ u16 maxShowed;
+ /*0x10*/ u8 windowId;
+ /*0x11*/ u8 header_X;
+ /*0x12*/ u8 item_X;
+ /*0x13*/ u8 cursor_X;
+ /*0x14*/ u8 upText_Y:4; // x1, x2, x4, x8 = xF
+ u8 cursorPal:4; // x10, x20, x40, x80 = xF0
+ /*0x15*/ u8 fillValue:4; // x1, x2, x4, x8 = xF
+ u8 cursorShadowPal:4; // x10, x20, x40, x80 = xF0
+ /*0x16*/ u8 lettersSpacing:3;
+ u8 itemVerticalPadding:3;
+ u8 scrollMultiple:2; // x40, x80 = xC0
+ /*0x17*/ u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F
+ u8 cursorKind:2; // x40, x80
+}; /* size = 0x18 */
struct ListMenu
{
diff --git a/include/sea_cottage_special_anim.h b/include/sea_cottage_special_anim.h
new file mode 100644
index 000000000..5c939df12
--- /dev/null
+++ b/include/sea_cottage_special_anim.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_SEA_COTTAGE_SPECIAL_ANIM_H
+#define GUARD_SEA_COTTAGE_SPECIAL_ANIM_H
+
+#include "global.h"
+
+void sub_809C448(u8 a0);
+void sub_809C460(void);
+bool8 sub_809C474(void);
+void sub_809C4A8(void);
+void sub_809C5FC(void);
+
+#endif // GUARD_SEA_COTTAGE_SPECIAL_ANIM_H
diff --git a/include/shop.h b/include/shop.h
index 481fd6c76..482c3ddaa 100644
--- a/include/shop.h
+++ b/include/shop.h
@@ -4,18 +4,20 @@
#include "global.h"
#include "menu_helpers.h"
+#define INDEX_CANCEL -2
+
extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3];
-void CreatePokemartMenu(const u16 *);
+void CreatePokemartMenu(const u16 *itemsForSale);
void CreateDecorationShop1Menu(const u16 *);
void CreateDecorationShop2Menu(const u16 *);
-void sub_809C09C(u16, u16, u8);
-u8 sub_809B56C(void);
+u8 GetMartUnk16_4(void);
+void RecordItemPurchase(u16 a0, u16 a1, u8 a2);
// buy_menu_helper
void BuyMenuInitWindows(bool32 isSellingTM);
void BuyMenuDrawMoneyBox(void);
-void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 color);
+void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 color);
void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback);
void BuyMenuQuantityBoxNormalBorder(u8 windowId, bool8 copyToVram);
void BuyMenuQuantityBoxThinBorder(u8 windowId, bool8 copyToVram);
diff --git a/include/strings.h b/include/strings.h
index e55cb02f5..d71d94d48 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -97,6 +97,7 @@ extern const u8 gOtherText_Toss[];
extern const u8 gOtherText_Give[];
extern const u8 gOtherText_Exit[];
extern const u8 gText_ThreeHyphens[];
+extern const u8 gText_SevenHyphens[];
extern const u8 gOtherText_UnkF9_08_Clear_01[];
extern const u8 gText_TimesStrVar1[];
extern const u8 gText_IsSelected[];
@@ -928,4 +929,18 @@ extern const u8 gText_CongratsPkmnEvolved[];
extern const u8 gText_EllipsisQuestionMark[];
extern const u8 gText_PkmnStoppedEvolving[];
+// shop
+extern const u8 gText_ShopBuy[];
+extern const u8 gText_ShopSell[];
+extern const u8 gText_ShopQuit[];
+extern const u8 gText_CanIHelpWithAnythingElse[];
+extern const u8 gText_QuitShopping[];
+extern const u8 gText_PokedollarVar1[];
+extern const u8 gText_YouDontHaveMoney[];
+extern const u8 gText_Var1CertainlyHowMany[];
+extern const u8 gText_InBagVar1[];
+extern const u8 gText_Var1AndYouWantedVar2[];
+extern const u8 gText_HereYouGoThankYou[];
+extern const u8 gText_NoMoreRoomForThis[];
+
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index cf7005555..7096dde96 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -140,7 +140,8 @@ SECTIONS {
src/item_menu_icons.o(.text);
src/battle_anim_mon_movement.o(.text);
src/item.o(.text);
- asm/shop.o(.text);
+ src/shop.o(.text);
+ src/sea_cottage_special_anim.o(.text);
src/berry.o(.text);
src/script_menu.o(.text);
asm/naming_screen.o(.text);
@@ -441,7 +442,8 @@ SECTIONS {
src/item_menu_icons.o(.rodata);
src/battle_anim_mon_movement.o(.rodata);
src/item.o(.rodata);
- data/shop.o(.rodata);
+ src/shop.o(.rodata);
+ src/sea_cottage_special_anim.o(.rodata);
src/berry.o(.rodata);
src/script_menu.o(.rodata);
data/naming_screen.o(.rodata);
diff --git a/src/berry_pouch.c b/src/berry_pouch.c
index bb1b106af..711a17768 100644
--- a/src/berry_pouch.c
+++ b/src/berry_pouch.c
@@ -1384,7 +1384,7 @@ static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId)
PlaySE(SE_SHOP);
RemoveBagItem(gSpecialVar_ItemId, data[8]);
AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]);
- sub_809C09C(gSpecialVar_ItemId, data[8], 2);
+ RecordItemPurchase(gSpecialVar_ItemId, data[8], 2);
DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow);
SortAndCountBerries();
SanitizeListMenuSelectionParams();
diff --git a/src/buy_menu_helpers.c b/src/buy_menu_helpers.c
index cf8072977..1fd160576 100644
--- a/src/buy_menu_helpers.c
+++ b/src/buy_menu_helpers.c
@@ -177,14 +177,14 @@ void BuyMenuDrawMoneyBox(void)
PrintMoneyAmountInMoneyBoxWithBorder(0, 0xA, 0xF, GetMoney(&gSaveBlock1Ptr->money));
}
-void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 color)
+void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 color)
{
AddTextPrinterParameterized4(windowId, font, x, y, letterSpacing, lineSpacing, sShopBuyMenuTextColors[color], speed, text);
}
void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback)
{
- DisplayMessageAndContinueTask(taskId, 2, 0x13, 0xE, sub_809B56C(), GetTextSpeedSetting(), text, callback);
+ DisplayMessageAndContinueTask(taskId, 2, 0x13, 0xE, GetMartUnk16_4(), GetTextSpeedSetting(), text, callback);
ScheduleBgCopyTilemapToVram(0);
}
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 4244762c0..e5901c149 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -463,7 +463,7 @@ u32 MapGridGetMetatileBehaviorAt(s32 x, s32 y)
return sub_8058F48(x, y, 0);
}
-u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y)
+u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y)
{
return sub_8058F48(x, y, 6);
}
diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c
new file mode 100644
index 000000000..18a8da234
--- /dev/null
+++ b/src/sea_cottage_special_anim.c
@@ -0,0 +1,264 @@
+#include "global.h"
+#include "event_data.h"
+#include "task.h"
+#include "menu.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "field_map_obj.h"
+#include "field_camera.h"
+
+static EWRAM_DATA u8 gUnknown_2039984 = 0;
+
+static void sub_809C1D8(u8 taskId, const s16 *a1, u16 a2);
+static void sub_809C334(u8 taskId);
+static void sub_809C500(u8 taskId);
+static void sub_809C640(u8 taskId);
+
+static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0};
+static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1};
+static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8};
+static const u16 gUnknown_83DF0E6[] = {0x0311, 0x0313, 0x02d9};
+static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314};
+static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315};
+static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c};
+
+// Functions
+static void sub_809C1D8(u8 taskId, const s16 *a1, u16 a2)
+{
+ s16 r5, r3, r4;
+ s16 i, j;
+
+ r5 = gTasks[taskId].data[4] - 1;
+ r3 = gTasks[taskId].data[5] - 1;
+ r4 = gTasks[taskId].data[1];
+
+ if (gTasks[taskId].data[2] == 0)
+ {
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 0; j < 3; j++)
+ {
+ s32 id = MapGridGetMetatileIdAt(r5 + j, r3 + i);
+
+ if (a1[r4] == (s16)id)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[r4 + 1]);
+ else
+ MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[0]);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < 3; i++)
+ {
+ for (j = 0; j < 3; j++)
+ {
+ s32 id = MapGridGetMetatileIdAt(r5 + j, r3 + i);
+
+ if (a1[2 - r4] == (s16)id)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[1 - r4]);
+ else
+ MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[2]);
+ }
+ }
+ }
+ }
+}
+
+static void sub_809C334(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u16 v1;
+
+ data[3] = 1;
+ switch (data[0])
+ {
+ case 0:
+ sub_809C1D8(taskId, gUnknown_83DF0D4, 0);
+ break;
+ case 1:
+ sub_809C1D8(taskId, gUnknown_83DF0DA, 0);
+ break;
+ case 2:
+ sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00);
+ break;
+ case 3:
+ sub_809C1D8(taskId, gUnknown_83DF0E6, 0);
+ break;
+ case 4:
+ sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00);
+ break;
+ case 5:
+ sub_809C1D8(taskId, gUnknown_83DF0F2, 0);
+ break;
+ case 6:
+ sub_809C1D8(taskId, gUnknown_83DF0F8, 0);
+ default:
+ break;
+ }
+
+ data[0] = (data[0] + 1) & 7;
+ v1 = data[0] & 7;
+ if (v1 == 0)
+ {
+ DrawWholeMapView();
+ data[1] = (data[1] + 1) % 3;
+ data[3] = v1;
+ }
+}
+
+static u8 sub_809C3FC(u16 a0)
+{
+ u8 taskId;
+ s16 *data;
+
+ taskId = CreateTask(sub_809C334, 0);
+ data = gTasks[taskId].data;
+ PlayerGetDestCoords(&data[4], &data[5]);
+ data[0] = 0;
+ data[1] = 0;
+ data[2] = a0;
+ sub_809C334(taskId);
+ return taskId;
+}
+
+void sub_809C448(u8 a0)
+{
+ u8 taskId;
+
+ taskId = sub_809C3FC(a0);
+ gUnknown_2039984 = taskId;
+}
+
+void sub_809C460(void)
+{
+ DestroyTask(gUnknown_2039984);
+}
+
+bool8 sub_809C474(void)
+{
+ if (gTasks[gUnknown_2039984].data[3] == 0)
+ {
+ if (gTasks[gUnknown_2039984].data[1] != 2)
+ return TRUE;
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+}
+
+// special 0x1b5 - creates a tile animaiton one block left two-four up the player
+void sub_809C4A8(void)
+{
+ u8 taskId;
+ s16 *data;
+
+ taskId = CreateTask(sub_809C500, 0);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ data = gTasks[taskId].data;
+ PlayerGetDestCoords(&data[2], &data[3]);
+ if (gSpecialVar_0x8004 == 0)
+ {
+ gTasks[taskId].data[2] += 6;
+ gTasks[taskId].data[3] -= 5;
+ }
+ else
+ {
+ gTasks[taskId].data[2]--;
+ gTasks[taskId].data[3] -= 5;
+ }
+}
+
+static void sub_809C500(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[0] == 0)
+ {
+ if ((data[1] & 1) == 0)
+ {
+ MapGridSetMetatileIdAt(data[2], data[3], 0xEB5);
+ MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7);
+ }
+ else
+ {
+ MapGridSetMetatileIdAt(data[2], data[3], 0xEB6);
+ MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8);
+ }
+ CurrentMapDrawMetatileAt(data[2], data[3]);
+ CurrentMapDrawMetatileAt(data[2], data[3] + 2);
+ }
+
+ data[0]++;
+ if (data[0] != 0x10)
+ return;
+
+ data[0] = 0;
+ data[1]++;
+ if (data[1] != 0xD)
+ return;
+
+ MapGridSetMetatileIdAt(data[2], data[3], 0xE8A);
+ MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96);
+ CurrentMapDrawMetatileAt(data[2], data[3]);
+ CurrentMapDrawMetatileAt(data[2], data[3] + 2);
+ DestroyTask(taskId);
+}
+
+// special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen
+void sub_809C5FC(void)
+{
+ u8 taskId;
+ s16 *data;
+
+ taskId = CreateTask(sub_809C640, 0);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ data = gTasks[taskId].data;
+ PlayerGetDestCoords(&data[2], &data[3]);
+ gTasks[taskId].data[2] += 4;
+ gTasks[taskId].data[3] -= 5;
+}
+
+static void sub_809C640(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[0] == 0)
+ {
+ if (data[1] != 0)
+ {
+ MapGridSetMetatileIdAt(data[2], data[3], 0xE85);
+ MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4);
+ CurrentMapDrawMetatileAt(data[2], data[3]);
+ CurrentMapDrawMetatileAt(data[2], data[3] + 1);
+ if (data[1] == 4)
+ {
+ DestroyTask(taskId);
+ return;
+ }
+
+ data[2]--;
+ }
+ MapGridSetMetatileIdAt(data[2], data[3], 0xEB9);
+ MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA);
+ CurrentMapDrawMetatileAt(data[2], data[3]);
+ CurrentMapDrawMetatileAt(data[2], data[3] + 1);
+ }
+
+ data[0]++;
+ if (data[0] == 4)
+ {
+ data[0] = 0;
+ data[1]++;
+ }
+}
+
diff --git a/src/shop.c b/src/shop.c
new file mode 100644
index 000000000..12f3f3263
--- /dev/null
+++ b/src/shop.c
@@ -0,0 +1,1161 @@
+#include "global.h"
+#include "shop.h"
+#include "menu.h"
+#include "data.h"
+#include "graphics.h"
+#include "strings.h"
+#include "list_menu.h"
+#include "new_menu_helpers.h"
+#include "party_menu.h"
+#include "window.h"
+#include "field_specials.h"
+#include "field_weather.h"
+#include "field_camera.h"
+#include "task.h"
+#include "text.h"
+#include "item.h"
+#include "item_menu.h"
+#include "main.h"
+#include "sound.h"
+#include "string_util.h"
+#include "overworld.h"
+#include "window.h"
+#include "palette.h"
+#include "field_fadetransition.h"
+#include "scanline_effect.h"
+#include "item_menu_icons.h"
+#include "bg.h"
+#include "gpu_regs.h"
+#include "malloc.h"
+#include "decompress.h"
+#include "menu_indicators.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "field_map_obj.h"
+#include "money.h"
+#include "quest_log.h"
+#include "script.h"
+#include "constants/songs.h"
+#include "constants/items.h"
+#include "constants/game_stat.h"
+
+#define tItemCount data[1]
+#define tItemId data[5]
+#define tListTaskId data[7]
+
+// mart types
+enum
+{
+ MART_TYPE_REGULAR = 0,
+ MART_TYPE_TMHM,
+ MART_TYPE_DECOR,
+ MART_TYPE_DECOR2,
+};
+
+// shop view window NPC info enum
+enum
+{
+ EVENT_OBJ_ID,
+ X_COORD,
+ Y_COORD,
+ ANIM_NUM
+};
+
+struct ShopData
+{
+ /*0x00*/ void (*callback)(void);
+ /*0x04*/ const u16 *itemList;
+ /*0x08*/ u32 itemPrice;
+ /*0x0C*/ u16 selectedRow;
+ /*0x0E*/ u16 scrollOffset;
+ /*0x10*/ u16 itemCount;
+ /*0x12*/ u16 field12;
+ /*0x14*/ u16 maxQuantity;
+ /*0x16*/ u16 martType:4; // 0x1 if tm list
+ u16 unk16_4:5;
+ u16 itemSlot:2;
+ u16 unk16_11:5;
+ /*0x18*/ u16 unk18;
+};
+
+struct MartHistory
+{
+ /*0x00*/ u32 unk0;
+ /*0x04*/ u16 unk4;
+ /*0x06*/ u16 unk6;
+ /*0x08*/ u8 unk8;
+ /*0x09*/ u8 unk9;
+ /*0x0A*/ u8 unkA;
+ /*0x0B*/ u8 unkB;
+}; /* size = 12 */
+
+static EWRAM_DATA s16 sViewportMapObjects[MAP_OBJECTS_COUNT][4] = {0};
+EWRAM_DATA struct ShopData gShopData = {0};
+static EWRAM_DATA u8 sShopMenuWindowId = 0;
+EWRAM_DATA u16 (*gShopTilemapBuffer1)[0x400] = {0};
+EWRAM_DATA u16 (*gShopTilemapBuffer2)[0x400] = {0};
+EWRAM_DATA u16 (*gShopTilemapBuffer3)[0x400] = {0};
+EWRAM_DATA u16 (*gShopTilemapBuffer4)[0x400] = {0};
+EWRAM_DATA struct ListMenuItem *sShopMenuListMenu = {0};
+static EWRAM_DATA u8 (*sShopMenuItemStrings)[13] = {0};
+EWRAM_DATA struct MartHistory gShopMenuHistory[2] = {0};
+
+//Function Declarations
+static u8 CreateShopMenu(u8 a0);
+static u8 GetMartTypeFromItemList(u32 a0);
+static void SetShopItemsForSale(const u16 *items);
+static void SetShopMenuCallback(MainCallback callback);
+static void Task_ShopMenu(u8 taskId);
+static void Task_HandleShopMenuBuy(u8 taskId);
+static void Task_HandleShopMenuSell(u8 taskId);
+static void CB2_GoToSellMenu(void);
+static void Task_HandleShopMenuQuit(u8 taskId);
+static void ClearShopMenuWindow(void);
+static void Task_GoToBuyOrSellMenu(u8 taskId);
+static void MapPostLoadHook_ReturnToShopMenu(void);
+static void Task_ReturnToShopMenu(u8 taskId);
+static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId);
+static void CB2_BuyMenu(void);
+static void VBlankCB_BuyMenu(void);
+static void CB2_InitBuyMenu(void);
+static bool8 InitShopData(void);
+static void BuyMenuInitBgs(void);
+static void BuyMenuDecompressBgGraphics(void);
+static void sub_809B10C(bool32 a0);
+static void BuyMenuDrawGraphics(void);
+static bool8 BuyMenuBuildListMenuTemplate(void);
+static void PokeMartWriteNameAndIdAt(struct ListMenuItem *list, u16 index, u8* dst);
+static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list);
+static void BuyMenuPrintPriceInList(u8 windowId, s32 itemId, u8 y);
+static void LoadTmHmNameInMart(s32 item);
+static void BuyMenuPrintCursor(u8 listTaskId, u8 a1);
+static void BuyMenuPrintCursorAtYPosition(u8 y, u8 a1);
+static void BuyMenuFreeMemory(void);
+static void SetShopExitCallback(void);
+static void BuyMenuAddScrollIndicatorArrows(void);
+static void BuyQuantityAddScrollIndicatorArrows(void);
+static void BuyMenuRemoveScrollIndicatorArrows(void);
+static void sub_809B764(void);
+static void BuyMenuDrawMapBg(void);
+static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType);
+static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src);
+static void BuyMenuCollectEventObjectData(void);
+static void BuyMenuDrawEventObjects(void);
+static void BuyMenuCopyTilemapData(void);
+static void BuyMenuPrintItemQuantityAndPrice(u8 taskId);
+static void Task_BuyMenu(u8 taskId);
+static void Task_BuyHowManyDialogueInit(u8 taskId);
+static void Task_BuyHowManyDialogueHandleInput(u8 taskId);
+static void CreateBuyMenuConfirmPurchaseWindow(u8 taskId);
+static void BuyMenuTryMakePurchase(u8 taskId);
+static void BuyMenuSubtractMoney(u8 taskId);
+static void Task_ReturnToItemListAfterItemPurchase(u8 taskId);
+static void BuyMenuReturnToItemList(u8 taskId);
+static void ExitBuyMenu(u8 taskId);
+static void Task_ExitBuyMenu(u8 taskId);
+static void nullsub_52(u8 taskId);
+static void nullsub_53(void);
+static void RecordQuestLogItemPurchase(void);
+
+static const struct MenuAction sShopMenuActions_BuySellQuit[] =
+{
+ {gText_ShopBuy, {.void_u8 = Task_HandleShopMenuBuy}},
+ {gText_ShopSell, {.void_u8 = Task_HandleShopMenuSell}},
+ {gText_ShopQuit, {.void_u8 = Task_HandleShopMenuQuit}}
+};
+
+static const struct YesNoFuncTable sShopMenuActions_BuyQuit[] =
+{
+ BuyMenuTryMakePurchase,
+ BuyMenuReturnToItemList
+};
+
+static const struct WindowTemplate sShopMenuWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 1,
+ .width = 12,
+ .height = 6,
+ .paletteNum = 15,
+ .baseBlock = 8
+};
+
+static const struct BgTemplate sShopBuyMenuBgTemplates[4] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ }
+};
+
+// Functions
+static u8 CreateShopMenu(u8 a0)
+{
+ gShopData.martType = GetMartTypeFromItemList(a0);
+ gShopData.selectedRow = 0;
+ if (ContextNpcGetTextColor() == 0)
+ gShopData.unk16_4 = 4;
+ else
+ gShopData.unk16_4 = 5;
+
+ sShopMenuWindowId = AddWindow(&sShopMenuWindowTemplate);
+ SetStdWindowBorderStyle(sShopMenuWindowId, 0);
+ PrintTextArray(sShopMenuWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, sShopMenuActions_BuySellQuit);
+ Menu_InitCursor(sShopMenuWindowId, 2, 0, 2, 16, 3, 0);
+ PutWindowTilemap(sShopMenuWindowId);
+ CopyWindowToVram(sShopMenuWindowId, 1);
+ return CreateTask(Task_ShopMenu, 8);
+}
+
+static u8 GetMartTypeFromItemList(u32 a0)
+{
+ u16 i;
+
+ if (a0)
+ return a0;
+
+ for (i = 0; i < gShopData.itemCount && gShopData.itemList[i] != 0; i++)
+ {
+ if (ItemId_GetPocket(gShopData.itemList[i]) == POCKET_TM_CASE)
+ return 1;
+ }
+ return 0;
+}
+
+static void SetShopItemsForSale(const u16 *items)
+{
+ gShopData.itemList = items;
+ gShopData.itemCount = 0;
+ if (gShopData.itemList[0] == 0)
+ return;
+
+ while (gShopData.itemList[gShopData.itemCount])
+ {
+ ++gShopData.itemCount;
+ }
+}
+
+static void SetShopMenuCallback(void (*callback)(void))
+{
+ gShopData.callback = callback;
+}
+
+static void Task_ShopMenu(u8 taskId)
+{
+ s8 input = Menu_ProcessInputNoWrapAround();
+
+ switch (input)
+ {
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ Task_HandleShopMenuQuit(taskId);
+ break;
+ default:
+ sShopMenuActions_BuySellQuit[Menu_GetCursorPos()].func.void_u8(taskId);
+ break;
+ }
+}
+
+static void Task_HandleShopMenuBuy(u8 taskId)
+{
+ SetWordTaskArg(taskId, 0xE, (u32)CB2_InitBuyMenu);
+ fade_screen(1, 0);
+ gTasks[taskId].func = Task_GoToBuyOrSellMenu;
+}
+
+static void Task_HandleShopMenuSell(u8 taskId)
+{
+ SetWordTaskArg(taskId, 0xE, (u32)CB2_GoToSellMenu);
+ fade_screen(1, 0);
+ gTasks[taskId].func = Task_GoToBuyOrSellMenu;
+}
+
+static void CB2_GoToSellMenu(void)
+{
+ GoToBagMenu(2, POCKET_POKE_BALLS, CB2_ReturnToField);
+ gFieldCallback = MapPostLoadHook_ReturnToShopMenu;
+}
+
+static void Task_HandleShopMenuQuit(u8 taskId)
+{
+ ClearShopMenuWindow();
+ RecordQuestLogItemPurchase();
+ DestroyTask(taskId);
+ if (gShopData.callback != NULL)
+ gShopData.callback();
+}
+
+static void ClearShopMenuWindow(void)
+{
+ ClearStdWindowAndFrameToTransparent(sShopMenuWindowId, 2);
+ RemoveWindow(sShopMenuWindowId);
+}
+
+static void Task_GoToBuyOrSellMenu(u8 taskId)
+{
+ if (gPaletteFade.active)
+ return;
+
+ SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE));
+ FreeAllWindowBuffers();
+ DestroyTask(taskId);
+}
+
+static void MapPostLoadHook_ReturnToShopMenu(void)
+{
+ sub_807DC00();
+ CreateTask(Task_ReturnToShopMenu, 8);
+}
+
+static void Task_ReturnToShopMenu(u8 taskId)
+{
+ if (IsWeatherNotFadingIn() != TRUE)
+ return;
+
+ DisplayItemMessageOnField(taskId, GetMartUnk16_4(), gText_CanIHelpWithAnythingElse, ShowShopMenuAfterExitingBuyOrSellMenu);
+}
+
+static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId)
+{
+ CreateShopMenu(gShopData.martType);
+ DestroyTask(taskId);
+}
+
+static void CB2_BuyMenu(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ DoScheduledBgTilemapCopiesToVram();
+}
+
+static void VBlankCB_BuyMenu(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void CB2_InitBuyMenu(void)
+{
+ u8 taskId;
+
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankHBlankCallbacksToNull();
+ CpuFastFill(0, (void *)OAM, 0x400);
+ ScanlineEffect_Stop();
+ ResetTempTileDataBuffers();
+ FreeAllSpritePalettes();
+ ResetPaletteFade();
+ ResetSpriteData();
+ ResetTasks();
+ ClearScheduledBgCopiesToVram();
+ ResetItemMenuIconState();
+ if (!(InitShopData()) || !(BuyMenuBuildListMenuTemplate()))
+ return;
+ BuyMenuInitBgs();
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
+ FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20);
+ FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20);
+ FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20);
+ BuyMenuInitWindows(gShopData.martType);
+ BuyMenuDecompressBgGraphics();
+ gMain.state++;
+ break;
+ case 1:
+ if (FreeTempTileDataBuffersIfPossible())
+ return;
+ gMain.state++;
+ break;
+ default:
+ gShopData.selectedRow = 0;
+ gShopData.scrollOffset = 0;
+ BuyMenuDrawGraphics();
+ BuyMenuAddScrollIndicatorArrows();
+ taskId = CreateTask(Task_BuyMenu, 8);
+ gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+ BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ SetVBlankCallback(VBlankCB_BuyMenu);
+ SetMainCallback2(CB2_BuyMenu);
+ break;
+ }
+}
+
+static bool8 InitShopData(void)
+{
+ gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1));
+ if (gShopTilemapBuffer1 == NULL)
+ {
+ BuyMenuFreeMemory();
+ SetShopExitCallback();
+ return FALSE;
+ }
+
+ gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2));
+ if (gShopTilemapBuffer2 == NULL)
+ {
+ BuyMenuFreeMemory();
+ SetShopExitCallback();
+ return FALSE;
+ }
+
+ gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3));
+ if (gShopTilemapBuffer3 == NULL)
+ {
+ BuyMenuFreeMemory();
+ SetShopExitCallback();
+ return FALSE;
+ }
+
+ gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4));
+ if (gShopTilemapBuffer4 == NULL)
+ {
+ BuyMenuFreeMemory();
+ SetShopExitCallback();
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void BuyMenuInitBgs(void)
+{
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sShopBuyMenuBgTemplates, NELEMS(sShopBuyMenuBgTemplates));
+ SetBgTilemapBuffer(1, gShopTilemapBuffer2);
+ SetBgTilemapBuffer(2, gShopTilemapBuffer4);
+ SetBgTilemapBuffer(3, gShopTilemapBuffer3);
+ SetGpuReg(REG_OFFSET_BG0HOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_BLDCNT, DISPCNT_MODE_0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+}
+
+static void BuyMenuDecompressBgGraphics(void)
+{
+ void* pal;
+
+ DecompressAndCopyTileDataToVram(1, gBuyMenuFrame_Gfx, 0x480, 0x3DC, 0);
+ if ((gShopData.martType) != MART_TYPE_TMHM)
+ LZDecompressWram(gBuyMenuFrame_Tilemap, gShopTilemapBuffer1);
+ else
+ LZDecompressWram(gBuyMenuFrame_TmHmTilemap, gShopTilemapBuffer1);
+
+ pal = Alloc(0x40);
+ LZDecompressWram(gBuyMenuFrame_Pal, pal);
+ LoadPalette(pal, 0xB0, 0x20);
+ LoadPalette(pal + 0x20, 0x60, 0x20);
+ Free(pal);
+}
+
+static void sub_809B10C(bool32 a0)
+{
+ u8 v;
+
+ if (a0 == FALSE)
+ v = 0xB;
+ else
+ v = 6;
+
+ if ((gShopData.martType) != MART_TYPE_TMHM)
+ SetBgTilemapPalette(1, 0, 0xE, 0x1E, 6, v);
+ else
+ SetBgTilemapPalette(1, 0, 0xC, 0x1E, 8, v);
+
+ ScheduleBgCopyTilemapToVram(1);
+}
+
+static void BuyMenuDrawGraphics(void)
+{
+ sub_809B764();
+ BuyMenuCopyTilemapData();
+ BuyMenuDrawMoneyBox();
+ ScheduleBgCopyTilemapToVram(0);
+ ScheduleBgCopyTilemapToVram(1);
+ ScheduleBgCopyTilemapToVram(2);
+ ScheduleBgCopyTilemapToVram(3);
+}
+
+bool8 BuyMenuBuildListMenuTemplate(void)
+{
+ u16 i, v;
+
+ sShopMenuListMenu = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu));
+ if (sShopMenuListMenu == NULL
+ || (sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings))) == NULL)
+ {
+ BuyMenuFreeMemory();
+ SetShopExitCallback();
+ return FALSE;
+ }
+
+ for (i = 0; i < gShopData.itemCount; i++)
+ {
+ PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], gShopData.itemList[i], sShopMenuItemStrings[i]);
+ }
+ StringCopy(sShopMenuItemStrings[i], gFameCheckerText_Cancel);
+ sShopMenuListMenu[i].label = sShopMenuItemStrings[i];
+ sShopMenuListMenu[i].index = -2;
+ gMultiuseListMenuTemplate.items = sShopMenuListMenu;
+ gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1;
+ gMultiuseListMenuTemplate.windowId = 4;
+ gMultiuseListMenuTemplate.header_X = 0;
+ gMultiuseListMenuTemplate.item_X = 9;
+ gMultiuseListMenuTemplate.cursor_X = 1;
+ gMultiuseListMenuTemplate.lettersSpacing = 0;
+ gMultiuseListMenuTemplate.itemVerticalPadding = 2;
+ gMultiuseListMenuTemplate.upText_Y = 2;
+ gMultiuseListMenuTemplate.fontId = 2;
+ gMultiuseListMenuTemplate.fillValue = 0;
+ gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, FONTATTR_COLOR_FOREGROUND);
+ gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, FONTATTR_COLOR_SHADOW);
+ gMultiuseListMenuTemplate.moveCursorFunc = BuyMenuPrintItemDescriptionAndShowItemIcon;
+ gMultiuseListMenuTemplate.itemPrintFunc = BuyMenuPrintPriceInList;
+ gMultiuseListMenuTemplate.scrollMultiple = 0;
+ gMultiuseListMenuTemplate.cursorKind = 0;
+
+ if (gShopData.martType == MART_TYPE_TMHM)
+ v = 5;
+ else
+ v = 6;
+
+ if ((gShopData.itemCount + 1) > v)
+ gMultiuseListMenuTemplate.maxShowed = v;
+ else
+ gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1;
+
+ gShopData.field12 = gMultiuseListMenuTemplate.maxShowed;
+ return TRUE;
+}
+
+static void PokeMartWriteNameAndIdAt(struct ListMenuItem *list, u16 index, u8* dst)
+{
+ CopyItemName(index, dst);
+ list->label = dst;
+ list->index = index;
+}
+
+static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list)
+{
+ const u8 *description;
+
+ if (onInit != TRUE)
+ PlaySE(SE_SELECT);
+
+ if (item != INDEX_CANCEL)
+ description = ItemId_GetDescription(item);
+ else
+ description = gText_QuitShopping;
+
+ FillWindowPixelBuffer(5, PIXEL_FILL(0));
+ if (gShopData.martType != 1)
+ {
+ DestroyItemMenuIcon(gShopData.itemSlot ^ 1);
+ if (item != INDEX_CANCEL)
+ CreateItemMenuIcon(item, gShopData.itemSlot);
+ else
+ CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot);
+
+ gShopData.itemSlot ^= 1;
+ BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0);
+ }
+ else //TM Mart
+ {
+ FillWindowPixelBuffer(6, PIXEL_FILL(0));
+ LoadTmHmNameInMart(item);
+ BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0);
+ }
+}
+
+static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y)
+{
+ s32 x;
+ u8 *loc;
+
+ if (item != INDEX_CANCEL)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, 4);
+ x = 4 - StringLength(gStringVar1);
+ loc = gStringVar4;
+ while (x-- != 0)
+ *loc++ = 0;
+ StringExpandPlaceholders(loc, gText_PokedollarVar1);
+ BuyMenuPrint(windowId, 0, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1);
+ }
+}
+
+static void LoadTmHmNameInMart(s32 item)
+{
+ if (item != INDEX_CANCEL)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, item - ITEM_DEVON_SCOPE, 2, 2);
+ StringCopy(gStringVar4, gOtherText_UnkF9_08_Clear_01);
+ StringAppend(gStringVar4, gStringVar1);
+ BuyMenuPrint(6, 0, gStringVar4, 0, 0, 0, 0, TEXT_SPEED_FF, 1);
+ StringCopy(gStringVar4, gMoveNames[ItemIdToBattleMoveId(item)]);
+ BuyMenuPrint(6, 2, gStringVar4, 0, 0x10, 0, 0, 0, 1);
+ }
+ else
+ {
+ BuyMenuPrint(6, 0, gText_ThreeHyphens, 0, 0, 0, 0, TEXT_SPEED_FF, 1);
+ BuyMenuPrint(6, 2, gText_SevenHyphens, 0, 0x10, 0, 0, 0, 1);
+ }
+}
+
+u8 GetMartUnk16_4(void)
+{
+ return gShopData.unk16_4;
+}
+
+static void BuyMenuPrintCursor(u8 listTaskId, u8 a1)
+{
+ BuyMenuPrintCursorAtYPosition(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1);
+}
+
+static void BuyMenuPrintCursorAtYPosition(u8 y, u8 a1)
+{
+ if (a1 == 0xFF)
+ {
+ FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT));
+ CopyWindowToVram(4, 2);
+ }
+ else
+ {
+ BuyMenuPrint(4, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, a1);
+ }
+}
+
+static void BuyMenuFreeMemory(void)
+{
+ if (gShopTilemapBuffer1 != NULL)
+ Free(gShopTilemapBuffer1);
+
+ if (gShopTilemapBuffer2 != NULL)
+ Free(gShopTilemapBuffer2);
+
+ if (gShopTilemapBuffer3 != NULL)
+ Free(gShopTilemapBuffer3);
+
+ if (gShopTilemapBuffer4 != NULL)
+ Free(gShopTilemapBuffer4);
+
+ if (sShopMenuListMenu != NULL)
+ Free(sShopMenuListMenu);
+
+ if (sShopMenuItemStrings != NULL)
+ Free(sShopMenuItemStrings);
+
+ FreeAllWindowBuffers();
+}
+
+static void SetShopExitCallback(void)
+{
+ gFieldCallback = MapPostLoadHook_ReturnToShopMenu;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+
+static void BuyMenuAddScrollIndicatorArrows(void)
+{
+ if (gShopData.martType != MART_TYPE_TMHM)
+ {
+ gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104,
+ (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset);
+ }
+ else
+ {
+ gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88,
+ (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset);
+ }
+}
+
+static void BuyQuantityAddScrollIndicatorArrows(void)
+{
+ gShopData.unk18 = 1;
+ gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18);
+}
+
+static void BuyMenuRemoveScrollIndicatorArrows(void)
+{
+ if ((gShopData.unk16_11) == 0x1F)
+ return;
+
+ RemoveScrollIndicatorArrowPair(gShopData.unk16_11);
+ gShopData.unk16_11 = 0x1F;
+}
+
+static void sub_809B764(void)
+{
+ BuyMenuCollectEventObjectData();
+ BuyMenuDrawEventObjects();
+ BuyMenuDrawMapBg();
+}
+
+static void BuyMenuDrawMapBg(void)
+{
+ s16 i, j, x, y;
+ const struct MapData *mapData;
+ u16 metatile;
+ u8 metatileLayerType;
+
+ mapData = gMapHeader.mapData;
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ x -= 2;
+ y -= 3;
+
+ for (j = 0; j < 10; j++)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ metatile = MapGridGetMetatileIdAt(x + i, y + j);
+ metatileLayerType = MapGridGetMetatileLayerTypeAt(x + i, y + j);
+
+ if (metatile < NUM_METATILES_IN_PRIMARY)
+ {
+ BuyMenuDrawMapMetatile(i, j, (u16*)mapData->primaryTileset->metatiles + metatile * 8, metatileLayerType);
+ }
+ else
+ {
+ BuyMenuDrawMapMetatile(i, j, (u16*)mapData->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType);
+ }
+ }
+ }
+}
+
+static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType)
+{
+ u16 offset1 = x * 2;
+ u16 offset2 = y * 64 + 64;
+
+ switch (metatileLayerType)
+ {
+ case 0:
+ BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer4, offset1, offset2, src);
+ BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer2, offset1, offset2, src + 4);
+ break;
+ case 1:
+ BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer3, offset1, offset2, src);
+ BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer4, offset1, offset2, src + 4);
+ break;
+ case 2:
+ BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer3, offset1, offset2, src);
+ BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer2, offset1, offset2, src + 4);
+ break;
+ }
+}
+
+static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src)
+{
+ dest[offset1 + offset2] = src[0]; // top left
+ dest[offset1 + offset2 + 1] = src[1]; // top right
+ dest[offset1 + offset2 + 32] = src[2]; // bottom left
+ dest[offset1 + offset2 + 33] = src[3]; // bottom right
+}
+
+static void BuyMenuCollectEventObjectData(void)
+{
+ s16 facingX, facingY;
+ u8 x, y, z;
+ u8 num = 0;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
+ z = PlayerGetZCoord();
+
+ for (y = 0; y < MAP_OBJECTS_COUNT; y++)
+ sViewportMapObjects[y][EVENT_OBJ_ID] = MAP_OBJECTS_COUNT;
+
+ for (y = 0; y < 5; y++)
+ {
+ for (x = 0; x < 7; x++)
+ {
+ u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 3 + x, facingY - 2 + y, z);
+ if (eventObjId != MAP_OBJECTS_COUNT)
+ {
+ sViewportMapObjects[num][EVENT_OBJ_ID] = eventObjId;
+ sViewportMapObjects[num][X_COORD] = x;
+ sViewportMapObjects[num][Y_COORD] = y;
+
+ switch (gMapObjects[eventObjId].facingDirection)
+ {
+ case DIR_SOUTH:
+ sViewportMapObjects[num][ANIM_NUM] = 0;
+ break;
+ case DIR_NORTH:
+ sViewportMapObjects[num][ANIM_NUM] = 1;
+ break;
+ case DIR_WEST:
+ sViewportMapObjects[num][ANIM_NUM] = 2;
+ break;
+ case DIR_EAST:
+ default:
+ sViewportMapObjects[num][ANIM_NUM] = 3;
+ break;
+ }
+ num++;
+ }
+ }
+ }
+}
+
+static void BuyMenuDrawEventObjects(void)
+{
+ u8 i, spriteId;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ for (i = 0; i < MAP_OBJECTS_COUNT; i++)
+ {
+ if (sViewportMapObjects[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT)
+ continue;
+
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[sViewportMapObjects[i][EVENT_OBJ_ID]].graphicsId);
+ spriteId = AddPseudoEventObject(
+ gMapObjects[sViewportMapObjects[i][EVENT_OBJ_ID]].graphicsId,
+ SpriteCallbackDummy,
+ (u16)sViewportMapObjects[i][X_COORD] * 16 - 8,
+ (u16)sViewportMapObjects[i][Y_COORD] * 16 + 48 - graphicsInfo->height / 2,
+ 2);
+ StartSpriteAnim(&gSprites[spriteId], sViewportMapObjects[i][ANIM_NUM]);
+ }
+}
+
+static void BuyMenuCopyTilemapData(void)
+{
+ s16 i;
+ u16 *dst = *gShopTilemapBuffer2;
+ u16 *src = *gShopTilemapBuffer1;
+
+ for (i = 0; i < 0x400; i++)
+ {
+ if (src[i] == 0)
+ continue;
+ dst[i] = src[i] + 0xb3dc;
+ }
+}
+
+static void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ FillWindowPixelBuffer(3, PIXEL_FILL(1));
+ PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SPEED_FF);
+ ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1);
+ BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1);
+}
+
+static void Task_BuyMenu(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ s32 itemId = ListMenu_ProcessInput(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gShopData.scrollOffset, &gShopData.selectedRow);
+ switch (itemId)
+ {
+ case LIST_NOTHING_CHOSEN:
+ break;
+ case LIST_CANCEL:
+ PlaySE(SE_SELECT);
+ ExitBuyMenu(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ tItemId = itemId;
+ ClearWindowTilemap(5);
+ BuyMenuRemoveScrollIndicatorArrows();
+ BuyMenuPrintCursor(tListTaskId, 2);
+ sub_809B10C(1);
+ gShopData.itemPrice = itemid_get_market_price(itemId);
+ if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice))
+ {
+ BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList);
+ }
+ else
+ {
+ CopyItemName(itemId, gStringVar1);
+ BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, Task_BuyHowManyDialogueInit);
+ }
+ break;
+ }
+ }
+}
+
+static void Task_BuyHowManyDialogueInit(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u16 quantityInBag = BagGetQuantityByItemId(tItemId);
+ u16 maxQuantity;
+
+ BuyMenuQuantityBoxThinBorder(1, 0);
+ ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, gText_InBagVar1);
+ BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1);
+ tItemCount = 1;
+ BuyMenuQuantityBoxNormalBorder(3, 0);
+ BuyMenuPrintItemQuantityAndPrice(taskId);
+ ScheduleBgCopyTilemapToVram(0);
+ maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId);
+ if (maxQuantity > 99)
+ gShopData.maxQuantity = 99;
+ else
+ gShopData.maxQuantity = (u8)maxQuantity;
+
+ if (maxQuantity != 1)
+ BuyQuantityAddScrollIndicatorArrows();
+
+ gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput;
+}
+
+static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopData.maxQuantity) == TRUE)
+ {
+ gShopData.itemPrice = itemid_get_market_price(tItemId) * tItemCount;
+ BuyMenuPrintItemQuantityAndPrice(taskId);
+ }
+ else
+ {
+ if (JOY_NEW(A_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BuyMenuRemoveScrollIndicatorArrows();
+ ClearStdWindowAndFrameToTransparent(3, 0);
+ ClearStdWindowAndFrameToTransparent(1, 0);
+ ClearWindowTilemap(3);
+ ClearWindowTilemap(1);
+ PutWindowTilemap(4);
+ CopyItemName(tItemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar3, gShopData.itemPrice, STR_CONV_MODE_LEFT_ALIGN, 8);
+ BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, CreateBuyMenuConfirmPurchaseWindow);
+ }
+ else if (JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BuyMenuRemoveScrollIndicatorArrows();
+ ClearStdWindowAndFrameToTransparent(3, 0);
+ ClearStdWindowAndFrameToTransparent(1, 0);
+ ClearWindowTilemap(3);
+ ClearWindowTilemap(1);
+ BuyMenuReturnToItemList(taskId);
+ }
+ }
+}
+
+static void CreateBuyMenuConfirmPurchaseWindow(u8 taskId)
+{
+ BuyMenuConfirmPurchase(taskId, sShopMenuActions_BuyQuit);
+}
+
+static void BuyMenuTryMakePurchase(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ PutWindowTilemap(4);
+ if (AddBagItem(tItemId, tItemCount) == TRUE)
+ {
+ BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney);
+ nullsub_52(taskId);
+ RecordItemPurchase(tItemId, tItemCount, 1);
+ }
+ else
+ {
+ BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, BuyMenuReturnToItemList);
+ }
+}
+
+static void BuyMenuSubtractMoney(u8 taskId)
+{
+ IncrementGameStat(GAME_STAT_SHOPPED);
+ RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice);
+ PlaySE(SE_SHOP);
+ PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0);
+ gTasks[taskId].func = Task_ReturnToItemListAfterItemPurchase;
+}
+
+static void Task_ReturnToItemListAfterItemPurchase(u8 taskId)
+{
+ if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BuyMenuReturnToItemList(taskId);
+ }
+}
+
+static void BuyMenuReturnToItemList(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ ClearDialogWindowAndFrameToTransparent(2, 0);
+ BuyMenuPrintCursor(tListTaskId, 1);
+ sub_809B10C(0);
+ PutWindowTilemap(4);
+ PutWindowTilemap(5);
+ if (gShopData.martType == MART_TYPE_TMHM)
+ PutWindowTilemap(6);
+
+ ScheduleBgCopyTilemapToVram(0);
+ BuyMenuAddScrollIndicatorArrows();
+ gTasks[taskId].func = Task_BuyMenu;
+}
+
+static void ExitBuyMenu(u8 taskId)
+{
+ gFieldCallback = MapPostLoadHook_ReturnToShopMenu;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_ExitBuyMenu;
+}
+
+static void Task_ExitBuyMenu(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ DestroyListMenuTask(tListTaskId, NULL, NULL);
+ BuyMenuFreeMemory();
+ SetMainCallback2(CB2_ReturnToField);
+ DestroyTask(taskId);
+ }
+}
+
+static void nullsub_52(u8 taskId)
+{
+}
+
+static void nullsub_53(void)
+{
+}
+
+void RecordItemPurchase(u16 item, u16 quantity, u8 a2)
+{
+ struct MartHistory *history;
+
+ if (gShopMenuHistory[0].unkA == a2)
+ {
+ history = &gShopMenuHistory[0];
+ }
+ else if (gShopMenuHistory[1].unkA == a2)
+ {
+ history = &gShopMenuHistory[1];
+ }
+ else
+ {
+ if (gShopMenuHistory[0].unkA == 0)
+ history = &gShopMenuHistory[0];
+ else
+ history = &gShopMenuHistory[1];
+ history->unkA = a2;
+ }
+
+ if (history->unk4 != 0)
+ {
+ history->unk9 = 1;
+ }
+
+ history->unk4 = item;
+ if (history->unk6 < 999)
+ {
+ history->unk6 += quantity;
+ if (history->unk6 > 999)
+ history->unk6 = 999;
+ }
+
+ if (history->unk0 < 999999)
+ {
+ history->unk0 += (itemid_get_market_price(item) >> (a2 - 1)) * quantity;
+ if (history->unk0 > 999999)
+ history->unk0 = 999999;
+ }
+}
+
+static void RecordQuestLogItemPurchase(void)
+{
+ u16 v;
+
+ v = gShopMenuHistory[0].unkA;
+ if (v != 0)
+ sub_8113550(v + 0x24, (const u16 *)&gShopMenuHistory[0]);
+
+ v = gShopMenuHistory[1].unkA;
+ if (v != 0)
+ sub_8113550(v + 0x24, (const u16 *)&gShopMenuHistory[1]);
+}
+
+void CreatePokemartMenu(const u16 *itemsForSale)
+{
+ SetShopItemsForSale(itemsForSale);
+ CreateShopMenu(MART_TYPE_REGULAR);
+ SetShopMenuCallback(EnableBothScriptContexts);
+ nullsub_53();
+ memset(&gShopMenuHistory, 0, sizeof(gShopMenuHistory));
+ gShopMenuHistory[0].unk8 = gMapHeader.regionMapSectionId;
+ gShopMenuHistory[1].unk8 = gMapHeader.regionMapSectionId;
+}
+
+void CreateDecorationShop1Menu(const u16 *itemsForSale)
+{
+ SetShopItemsForSale(itemsForSale);
+ CreateShopMenu(MART_TYPE_DECOR);
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+void CreateDecorationShop2Menu(const u16 *itemsForSale)
+{
+ SetShopItemsForSale(itemsForSale);
+ CreateShopMenu(MART_TYPE_DECOR2);
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
diff --git a/src/tm_case.c b/src/tm_case.c
index a9af2332e..40509ed1b 100644
--- a/src/tm_case.c
+++ b/src/tm_case.c
@@ -1107,7 +1107,7 @@ static void Task_DoSaleOfTMs(u8 taskId)
PlaySE(SE_SHOP);
RemoveBagItem(gSpecialVar_ItemId, data[8]);
AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]);
- sub_809C09C(gSpecialVar_ItemId, data[8], 2);
+ RecordItemPurchase(gSpecialVar_ItemId, data[8], 2);
DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow);
TMCaseSetup_GetTMCount();
TMCaseSetup_InitListMenuPositions();
diff --git a/sym_ewram.txt b/sym_ewram.txt
index e068902f2..d2c5b4543 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -306,48 +306,10 @@ gUnknown_2039874: @ 2039874
gBagPockets: @ 203988C
.space 0x28
-gUnknown_20398B4: @ 20398B4
- .space 0x4
-
-gUnknown_20398B8: @ 20398B8
- .space 0x2
-
-gUnknown_20398BA: @ 20398BA
- .space 0x7A
-
-gUnknown_2039934: @ 2039934
- .space 0xE
-
-gUnknown_2039942: @ 2039942
- .space 0xE
-
-gUnknown_2039950: @ 2039950
- .space 0x4
-
-gUnknown_2039954: @ 2039954
- .space 0x4
-
-gUnknown_2039958: @ 2039958
- .space 0x4
-
-gUnknown_203995C: @ 203995C
- .space 0x4
-
-gUnknown_2039960: @ 2039960
- .space 0x4
-
-gUnknown_2039964: @ 2039964
- .space 0x4
-
-gUnknown_2039968: @ 2039968
- .space 0x4
-
-gUnknown_203996C: @ 203996C
- .space 0x18
-
-gUnknown_2039984: @ 2039984
- .space 0x4
-
+ .align 2
+ .include "src/shop.o"
+ .align 2
+ .include "src/sea_cottage_special_anim.o"
.align 2
.include "src/script_menu.o"