summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/shop.s1821
-rw-r--r--data/shop.s80
-rw-r--r--include/graphics.h4
-rw-r--r--include/item_menu.h1
-rw-r--r--include/party_menu.h1
-rw-r--r--include/shop.h37
-rw-r--r--include/strings.h16
-rw-r--r--ld_script.txt5
-rw-r--r--src/fldeff_escalator.c132
-rwxr-xr-xsrc/shop.c1039
-rw-r--r--src/strings.c6
-rw-r--r--src/tv.c22
-rw-r--r--sym_ewram.txt23
13 files changed, 990 insertions, 2197 deletions
diff --git a/asm/shop.s b/asm/shop.s
deleted file mode 100644
index 56658c4ff..000000000
--- a/asm/shop.s
+++ /dev/null
@@ -1,1821 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start BuyMenuDrawMapMetatile
-@ void BuyMenuDrawMapMetatile(u16 x, u16 y, u16 *src, u8 metatileLayerType)
-BuyMenuDrawMapMetatile: @ 80E0670
- push {r4-r7,lr}
- adds r7, r2, 0
- lsls r3, 24
- lsrs r3, 24
- adds r2, r3, 0
- lsls r0, 17
- lsrs r5, r0, 16
- lsls r1, 22
- lsrs r1, 16
- cmp r3, 0x1
- beq _080E06C0
- cmp r3, 0x1
- bgt _080E0690
- cmp r3, 0
- beq _080E0696
- b _080E0728
-_080E0690:
- cmp r2, 0x2
- beq _080E06F8
- b _080E0728
-_080E0696:
- ldr r6, =gShopDataPtr
- ldr r0, [r6]
- movs r2, 0xC0
- lsls r2, 5
- adds r0, r2
- lsls r5, 16
- asrs r5, 16
- lsls r4, r1, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- adds r3, r7, 0
- bl BuyMenuDrawMapMetatileLayer
- ldr r0, [r6]
- movs r1, 0x80
- lsls r1, 4
- b _080E06E2
- .pool
-_080E06C0:
- ldr r6, =gShopDataPtr
- ldr r0, [r6]
- movs r2, 0x80
- lsls r2, 5
- adds r0, r2
- lsls r5, 16
- asrs r5, 16
- lsls r4, r1, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- adds r3, r7, 0
- bl BuyMenuDrawMapMetatileLayer
- ldr r0, [r6]
- movs r1, 0xC0
- lsls r1, 5
-_080E06E2:
- adds r0, r1
- adds r3, r7, 0
- adds r3, 0x8
- adds r1, r5, 0
- adds r2, r4, 0
- bl BuyMenuDrawMapMetatileLayer
- b _080E0728
- .pool
-_080E06F8:
- ldr r6, =gShopDataPtr
- ldr r0, [r6]
- movs r2, 0x80
- lsls r2, 5
- adds r0, r2
- lsls r5, 16
- asrs r5, 16
- lsls r4, r1, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- adds r3, r7, 0
- bl BuyMenuDrawMapMetatileLayer
- ldr r0, [r6]
- movs r1, 0x80
- lsls r1, 4
- adds r0, r1
- adds r3, r7, 0
- adds r3, 0x8
- adds r1, r5, 0
- adds r2, r4, 0
- bl BuyMenuDrawMapMetatileLayer
-_080E0728:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuDrawMapMetatile
-
- thumb_func_start BuyMenuDrawMapMetatileLayer
-@ int BuyMenuDrawMapMetatileLayer(void *tilemapBuffer, s16 xOffset, s16 yOffset, u16 *src)
-BuyMenuDrawMapMetatileLayer: @ 80E0734
- 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 BuyMenuDrawMapMetatileLayer
-
- thumb_func_start BuyMenuCollectEventObjectData
-@ void BuyMenuCollectEventObjectData()
-BuyMenuCollectEventObjectData: @ 80E075C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- movs r0, 0
- mov r8, r0
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- movs r7, 0
- ldr r5, =gShopDataPtr
- ldr r3, =0x00002010
- movs r2, 0x10
-_080E0780:
- ldr r1, [r5]
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 1
- adds r1, r3
- adds r1, r0
- strh r2, [r1]
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0xF
- bls _080E0780
- movs r7, 0
- str r4, [sp, 0x8]
- ldr r1, =gShopDataPtr
- mov r9, r1
- mov r2, sp
- str r2, [sp, 0x4]
-_080E07A4:
- movs r3, 0
- adds r4, r7, 0x1
- str r4, [sp, 0xC]
-_080E07AA:
- ldr r1, =0x0000fffc
- adds r0, r3, r1
- ldr r2, [sp, 0x4]
- ldrh r2, [r2]
- adds r0, r2
- lsls r0, 16
- asrs r0, 16
- ldr r4, =0x0000fffe
- adds r1, r7, r4
- ldr r2, [sp, 0x8]
- ldrh r2, [r2]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- str r3, [sp, 0x10]
- bl GetEventObjectIdByXY
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, [sp, 0x10]
- cmp r6, 0x10
- beq _080E08C2
- mov r4, r9
- ldr r1, [r4]
- mov r0, r8
- lsls r4, r0, 2
- adds r0, r4, r0
- lsls r5, r0, 1
- ldr r2, =0x00002010
- adds r0, r1, r2
- adds r0, r5
- movs r2, 0
- mov r10, r2
- strh r6, [r0]
- ldr r2, =0x00002012
- adds r0, r1, r2
- adds r0, r5
- strh r3, [r0]
- ldr r0, =0x00002014
- adds r1, r0
- adds r1, r5
- strh r7, [r1]
- ldr r1, [sp, 0x4]
- movs r2, 0
- ldrsh r0, [r1, r2]
- subs r1, r3, 0x4
- adds r0, r1
- ldr r1, [sp, 0x8]
- movs r2, 0
- ldrsh r1, [r1, r2]
- mov r12, r1
- subs r1, r7, 0x2
- add r1, r12
- str r3, [sp, 0x10]
- bl MapGridGetMetatileLayerTypeAt
- mov r1, r9
- ldr r2, [r1]
- ldr r1, =0x00002018
- adds r1, r2
- mov r12, r1
- add r12, r5
- lsls r0, 24
- lsrs r0, 24
- mov r1, r12
- strh r0, [r1]
- ldr r1, =gEventObjects
- lsls r0, r6, 3
- adds r0, r6
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x18]
- lsls r0, 28
- lsrs r0, 28
- ldr r3, [sp, 0x10]
- cmp r0, 0x2
- beq _080E0884
- cmp r0, 0x2
- bgt _080E0870
- cmp r0, 0x1
- beq _080E0876
- b _080E08A4
- .pool
-_080E0870:
- cmp r0, 0x3
- beq _080E0894
- b _080E08A4
-_080E0876:
- ldr r4, =0x00002016
- adds r0, r2, r4
- adds r0, r5
- mov r1, r10
- b _080E08B6
- .pool
-_080E0884:
- ldr r4, =0x00002016
- adds r0, r2, r4
- adds r0, r5
- movs r1, 0x1
- b _080E08B6
- .pool
-_080E0894:
- ldr r1, =0x00002016
- adds r0, r2, r1
- adds r0, r5
- movs r1, 0x2
- b _080E08B6
- .pool
-_080E08A4:
- mov r2, r9
- ldr r0, [r2]
- mov r2, r8
- adds r1, r4, r2
- lsls r1, 1
- ldr r4, =0x00002016
- adds r0, r4
- adds r0, r1
- movs r1, 0x3
-_080E08B6:
- strh r1, [r0]
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
-_080E08C2:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x6
- bhi _080E08CE
- b _080E07AA
-_080E08CE:
- ldr r1, [sp, 0xC]
- lsls r0, r1, 24
- lsrs r7, r0, 24
- cmp r7, 0x4
- bhi _080E08DA
- b _080E07A4
-_080E08DA:
- add sp, 0x18
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuCollectEventObjectData
-
- thumb_func_start BuyMenuDrawEventObjects
-@ void BuyMenuDrawEventObjects()
-BuyMenuDrawEventObjects: @ 80E08F0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r7, 0
- ldr r0, =gShopDataPtr
- mov r8, r0
- ldr r1, =gEventObjects
- mov r10, r1
- ldr r2, =gSprites
- mov r9, r2
-_080E090A:
- mov r3, r8
- ldr r0, [r3]
- lsls r1, r7, 2
- adds r1, r7
- lsls r5, r1, 1
- ldr r4, =0x00002010
- adds r0, r4
- adds r1, r0, r5
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0x10
- beq _080E09D8
- adds r1, r0, 0
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- add r0, r10
- ldrb r0, [r0, 0x5]
- bl GetEventObjectGraphicsInfo
- mov r4, r8
- ldr r3, [r4]
- ldr r2, =0x00002010
- adds r1, r3, r2
- adds r1, r5
- movs r4, 0
- ldrsh r2, [r1, r4]
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- add r1, r10
- ldrb r4, [r1, 0x5]
- ldr r2, =0x00002012
- adds r1, r3, r2
- adds r1, r5
- ldrh r2, [r1]
- lsls r2, 4
- adds r2, 0x8
- lsls r2, 16
- asrs r2, 16
- ldr r1, =0x00002014
- adds r3, r1
- adds r3, r5
- ldrh r3, [r3]
- 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, =SpriteCallbackDummy
- bl AddPseudoEventObject
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- ldr r2, =0x00002010
- adds r1, r5, r2
- mov r3, r8
- ldr r0, [r3]
- adds r0, r1
- bl BuyMenuCheckIfEventObjectOverlapsMenuBg
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080E09C0
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- add r2, r9
- adds r2, 0x42
- ldrb r0, [r2]
- movs r4, 0x40
- negs r4, r4
- adds r1, r4, 0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- movs r1, 0x3F
- ands r0, r1
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
-_080E09C0:
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- add r0, r9
- mov r2, r8
- ldr r1, [r2]
- ldr r3, =0x00002016
- adds r1, r3
- adds r1, r5
- ldrb r1, [r1]
- bl StartSpriteAnim
-_080E09D8:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0xF
- bls _080E090A
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuDrawEventObjects
-
- thumb_func_start BuyMenuCheckIfEventObjectOverlapsMenuBg
-BuyMenuCheckIfEventObjectOverlapsMenuBg: @ 80E0A14
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- movs r2, 0x4
- ldrsh r1, [r4, r2]
- adds r1, 0x2
- bl BuyMenuCheckForOverlapWithMenuBg
- lsls r0, 24
- cmp r0, 0
- bne _080E0A38
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _080E0A38
- movs r0, 0x1
- b _080E0A3A
-_080E0A38:
- movs r0, 0
-_080E0A3A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end BuyMenuCheckIfEventObjectOverlapsMenuBg
-
- thumb_func_start BuyMenuCopyMenuBgToBg1TilemapBuffer
-@ void BuyMenuCopyMenuBgToBg1TilemapBuffer()
-BuyMenuCopyMenuBgToBg1TilemapBuffer: @ 80E0A40
- push {r4-r6,lr}
- ldr r0, =gShopDataPtr
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 4
- adds r4, r0, r1
- adds r3, r0, 0
- movs r1, 0
- ldr r0, =0x0000c3e3
- adds r6, r0, 0
- ldr r5, =0x000003ff
-_080E0A56:
- lsls r0, r1, 16
- asrs r2, r0, 16
- lsls r1, r2, 1
- adds r0, r1, r3
- ldrh r0, [r0]
- cmp r0, 0
- beq _080E0A6A
- adds r1, r4
- adds r0, r6
- strh r0, [r1]
-_080E0A6A:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, r5
- ble _080E0A56
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuCopyMenuBgToBg1TilemapBuffer
-
- thumb_func_start BuyMenuCheckForOverlapWithMenuBg
-@ bool8 BuyMenuCheckForOverlapWithMenuBg(u16 x, u16 y)
-BuyMenuCheckForOverlapWithMenuBg: @ 80E0A88
- push {lr}
- ldr r2, =gShopDataPtr
- ldr r2, [r2]
- lsls r0, 1
- lsls r1, 6
- adds r1, r0
- lsls r1, 1
- adds r1, r2
- ldrh r0, [r1]
- cmp r0, 0
- bne _080E0AC0
- adds r0, r1, 0
- adds r0, 0x40
- ldrh r0, [r0]
- cmp r0, 0
- bne _080E0AC0
- ldrh r0, [r1, 0x2]
- cmp r0, 0
- bne _080E0AC0
- adds r0, r1, 0
- adds r0, 0x42
- ldrh r0, [r0]
- cmp r0, 0
- bne _080E0AC0
- movs r0, 0x1
- b _080E0AC2
- .pool
-_080E0AC0:
- movs r0, 0
-_080E0AC2:
- pop {r1}
- bx r1
- thumb_func_end BuyMenuCheckForOverlapWithMenuBg
-
- thumb_func_start Task_BuyMenu
-@ void Task_BuyMenu(u8 taskId)
-Task_BuyMenu: @ 80E0AC8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080E0AEA
- b _080E0C8E
-_080E0AEA:
- ldrb r0, [r4, 0xE]
- bl ListMenuHandleInputGetItemId
- adds r5, r0, 0
- ldrb r0, [r4, 0xE]
- ldr r7, =gShopDataPtr
- ldr r2, [r7]
- ldr r3, =0x00002008
- adds r1, r2, r3
- subs r3, 0x2
- adds r2, r3
- bl ListMenuGetScrollAndRow
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- beq _080E0B24
- adds r0, 0x1
- cmp r5, r0
- bne _080E0B32
- b _080E0C8E
- .pool
-_080E0B24:
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl ExitBuyMenu
- b _080E0C8E
-_080E0B32:
- movs r0, 0x5
- bl PlaySE
- strh r5, [r4, 0xA]
- movs r0, 0x2
- bl ClearWindowTilemap
- bl BuyMenuRemoveScrollIndicatorArrows
- ldrb r0, [r4, 0xE]
- movs r1, 0x2
- bl BuyMenuPrintCursor
- ldr r0, =gMartInfo
- ldrb r0, [r0, 0xF]
- cmp r0, 0
- bne _080E0B80
- lsls r0, r5, 16
- lsrs r0, 16
- bl ItemId_GetPrice
- adds r4, r0, 0
- movs r0, 0x1
- bl GetPriceReduction
- ldr r1, [r7]
- movs r2, 0x80
- lsls r2, 6
- adds r1, r2
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 24
- lsrs r0, 24
- asrs r4, r0
- str r4, [r1]
- b _080E0B92
- .pool
-_080E0B80:
- ldr r1, [r7]
- movs r3, 0x80
- lsls r3, 6
- adds r1, r3
- ldr r2, =gDecorations
- lsls r0, r5, 5
- adds r0, r2
- ldrh r0, [r0, 0x14]
- str r0, [r1]
-_080E0B92:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- ldr r2, =gShopDataPtr
- mov r8, r2
- ldr r1, [r2]
- movs r7, 0x80
- lsls r7, 6
- adds r1, r7
- ldr r1, [r1]
- bl IsEnoughMoney
- lsls r0, 24
- cmp r0, 0
- bne _080E0BD0
- ldr r1, =gText_YouDontHaveMoney
- ldr r2, =BuyMenuReturnToItemList
- b _080E0C28
- .pool
-_080E0BD0:
- ldr r4, =gMartInfo
- ldrb r0, [r4, 0xF]
- cmp r0, 0
- bne _080E0C38
- lsls r0, r5, 16
- lsrs r5, r0, 16
- ldr r1, =gStringVar1
- adds r0, r5, 0
- bl CopyItemName
- adds r0, r5, 0
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _080E0C24
- ldr r4, =gStringVar2
- adds r0, r5, 0
- bl ItemIdToBattleMoveId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xD
- muls r1, r0
- ldr r0, =gMoveNames
- adds r1, r0
- adds r0, r4, 0
- bl StringCopy
- ldr r1, =gText_Var1CertainlyHowMany2
- b _080E0C26
- .pool
-_080E0C24:
- ldr r1, =gText_Var1CertainlyHowMany
-_080E0C26:
- ldr r2, =Task_BuyHowManyDialogueInit
-_080E0C28:
- adds r0, r6, 0
- bl BuyMenuDisplayMessage
- b _080E0C8E
- .pool
-_080E0C38:
- ldr r0, =gStringVar1
- lsls r1, r5, 5
- ldr r2, =gDecorations + 1
- adds r1, r2
- bl StringCopy
- ldr r0, =gStringVar2
- mov r3, r8
- ldr r1, [r3]
- adds r1, r7
- ldr r1, [r1]
- movs r2, 0
- movs r3, 0x6
- bl ConvertIntToDecimalStringN
- ldrb r0, [r4, 0xF]
- cmp r0, 0x1
- bne _080E0C7C
- ldr r0, =gStringVar4
- ldr r1, =gText_Var1IsItThatllBeVar2
- bl StringExpandPlaceholders
- b _080E0C84
- .pool
-_080E0C7C:
- ldr r0, =gStringVar4
- ldr r1, =gText_YouWantedVar1ThatllBeVar2
- bl StringExpandPlaceholders
-_080E0C84:
- ldr r1, =gStringVar4
- ldr r2, =BuyMenuConfirmPurchase
- adds r0, r6, 0
- bl BuyMenuDisplayMessage
-_080E0C8E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_BuyMenu
-
- thumb_func_start Task_BuyHowManyDialogueInit
-@ void Task_BuyHowManyDialogueInit(u8 taskId)
-Task_BuyHowManyDialogueInit: @ 80E0CA4
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r5, r6, 2
- adds r5, r6
- lsls r5, 3
- ldr r0, =gTasks + 0x8
- adds r5, r0
- ldrh r0, [r5, 0xA]
- bl CountTotalItemQuantityInBag
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x3
- movs r1, 0
- movs r2, 0x1
- movs r3, 0xD
- bl SetWindowBorderStyle
- ldr r0, =gStringVar1
- adds r1, r4, 0
- movs r2, 0x1
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_InBagVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x3
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x1
- bl BuyMenuPrint
- movs r0, 0x1
- strh r0, [r5, 0x2]
- movs r0, 0x4
- movs r1, 0
- movs r2, 0x1
- movs r3, 0xD
- bl SetWindowBorderStyle
- adds r0, r6, 0
- bl BuyMenuPrintItemQuantityAndPrice
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- bl GetMoney
- ldr r1, =gShopDataPtr
- ldr r4, [r1]
- movs r2, 0x80
- lsls r2, 6
- adds r1, r4, r2
- ldr r1, [r1]
- bl __udivsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x63
- bls _080E0D60
- ldr r0, =0x0000200a
- adds r1, r4, r0
- movs r0, 0x63
- strb r0, [r1]
- b _080E0D66
- .pool
-_080E0D60:
- ldr r2, =0x0000200a
- adds r0, r4, r2
- strb r1, [r0]
-_080E0D66:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, =Task_BuyHowManyDialogueHandleInput
- str r0, [r1]
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_BuyHowManyDialogueInit
-
- thumb_func_start Task_BuyHowManyDialogueHandleInput
-@ void Task_BuyHowManyDialogueHandleInput(u8 taskId)
-Task_BuyHowManyDialogueHandleInput: @ 80E0D88
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- adds r4, r6, 0
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r5, r0, r1
- adds r0, r5, 0x2
- ldr r7, =gShopDataPtr
- ldr r1, [r7]
- ldr r2, =0x0000200a
- adds r1, r2
- ldrb r1, [r1]
- bl AdjustQuantityAccordingToDPadInput
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080E0DF0
- ldrh r0, [r5, 0xA]
- bl ItemId_GetPrice
- adds r4, r0, 0
- movs r0, 0x1
- bl GetPriceReduction
- ldr r1, [r7]
- movs r2, 0x80
- lsls r2, 6
- adds r1, r2
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 24
- lsrs r0, 24
- asrs r4, r0
- movs r2, 0x2
- ldrsh r0, [r5, r2]
- muls r0, r4
- str r0, [r1]
- adds r0, r6, 0
- bl BuyMenuPrintItemQuantityAndPrice
- b _080E0EA4
- .pool
-_080E0DF0:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080E0E74
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x4
- movs r1, 0
- bl sub_8198070
- movs r0, 0x3
- movs r1, 0
- bl sub_8198070
- movs r0, 0x4
- bl ClearWindowTilemap
- movs r0, 0x3
- bl ClearWindowTilemap
- movs r0, 0x1
- bl PutWindowTilemap
- ldrh r0, [r5, 0xA]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =gStringVar2
- movs r2, 0x2
- ldrsh r1, [r5, r2]
- movs r2, 0
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, =gStringVar3
- ldr r1, [r7]
- movs r2, 0x80
- lsls r2, 6
- adds r1, r2
- ldr r1, [r1]
- movs r2, 0
- movs r3, 0x6
- bl ConvertIntToDecimalStringN
- ldr r1, =gText_Var1AndYouWantedVar2
- ldr r2, =BuyMenuConfirmPurchase
- adds r0, r6, 0
- bl BuyMenuDisplayMessage
- b _080E0EA4
- .pool
-_080E0E74:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080E0EA4
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x4
- movs r1, 0
- bl sub_8198070
- movs r0, 0x3
- movs r1, 0
- bl sub_8198070
- movs r0, 0x4
- bl ClearWindowTilemap
- movs r0, 0x3
- bl ClearWindowTilemap
- adds r0, r4, 0
- bl BuyMenuReturnToItemList
-_080E0EA4:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end Task_BuyHowManyDialogueHandleInput
-
- thumb_func_start BuyMenuConfirmPurchase
-@ void BuyMenuConfirmPurchase(u8 taskId)
-BuyMenuConfirmPurchase: @ 80E0EAC
- push {lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_08589AA8
- movs r2, 0
- str r2, [sp]
- movs r2, 0x1
- str r2, [sp, 0x4]
- movs r2, 0xD
- str r2, [sp, 0x8]
- ldr r2, =gUnknown_08589A08
- str r2, [sp, 0xC]
- movs r2, 0x1
- movs r3, 0
- bl CreateYesNoMenuWithCallbacks
- add sp, 0x10
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuConfirmPurchase
-
- thumb_func_start BuyMenuTryMakePurchase
-@ void BuyMenuTryMakePurchase(u8 taskId)
-BuyMenuTryMakePurchase: @ 80E0EDC
- 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, =gTasks + 0x8
- adds r4, r0, r1
- movs r0, 0x1
- bl PutWindowTilemap
- ldr r6, =gMartInfo
- ldrb r0, [r6, 0xF]
- cmp r0, 0
- bne _080E0F40
- ldrh r0, [r4, 0xA]
- ldrh r1, [r4, 0x2]
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080E0F30
- ldr r1, =gText_HereYouGoThankYou
- ldr r2, =BuyMenuSubtractMoney
- adds r0, r5, 0
- bl BuyMenuDisplayMessage
- adds r0, r5, 0
- bl RecordItemPurchase
- b _080E0F7A
- .pool
-_080E0F30:
- ldr r1, =gText_NoMoreRoomForThis
- ldr r2, =BuyMenuReturnToItemList
- b _080E0F60
- .pool
-_080E0F40:
- ldrb r0, [r4, 0xA]
- bl DecorationAdd
- lsls r0, 24
- cmp r0, 0
- beq _080E0F70
- ldrb r0, [r6, 0xF]
- cmp r0, 0x1
- bne _080E0F5C
- ldr r1, =gText_ThankYouIllSendItHome
- b _080E0F5E
- .pool
-_080E0F5C:
- ldr r1, =gText_ThanksIllSendItHome
-_080E0F5E:
- ldr r2, =BuyMenuSubtractMoney
-_080E0F60:
- adds r0, r5, 0
- bl BuyMenuDisplayMessage
- b _080E0F7A
- .pool
-_080E0F70:
- ldr r1, =gText_SpaceForVar1Full
- ldr r2, =BuyMenuReturnToItemList
- adds r0, r7, 0
- bl BuyMenuDisplayMessage
-_080E0F7A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuTryMakePurchase
-
- thumb_func_start BuyMenuSubtractMoney
-@ void BuyMenuSubtractMoney(u8 taskId)
-BuyMenuSubtractMoney: @ 80E0F88
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r0, 0x26
- bl IncrementGameStat
- ldr r5, =gSaveBlock1Ptr
- ldr r0, [r5]
- movs r4, 0x92
- lsls r4, 3
- adds r0, r4
- ldr r1, =gShopDataPtr
- ldr r1, [r1]
- movs r2, 0x80
- lsls r2, 6
- adds r1, r2
- ldr r1, [r1]
- bl RemoveMoney
- movs r0, 0x5F
- bl PlaySE
- ldr r0, [r5]
- adds r0, r4
- bl GetMoney
- adds r1, r0, 0
- movs r0, 0
- movs r2, 0
- bl PrintMoneyAmountInMoneyBox
- ldr r0, =gMartInfo
- ldrb r0, [r0, 0xF]
- cmp r0, 0
- bne _080E0FF0
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, =Task_ReturnToItemListAfterItemPurchase
- b _080E0FFC
- .pool
-_080E0FF0:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, =Task_ReturnToItemListAfterDecorationPurchase
-_080E0FFC:
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuSubtractMoney
-
- thumb_func_start Task_ReturnToItemListAfterItemPurchase
-@ void Task_ReturnToItemListAfterItemPurchase(u8 taskId)
-Task_ReturnToItemListAfterItemPurchase: @ 80E100C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r5, r0, r1
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _080E1072
- movs r0, 0x5
- bl PlaySE
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0x4
- bne _080E106C
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- cmp r0, 0x9
- ble _080E106C
- movs r0, 0xC
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080E106C
- ldr r1, =gText_ThrowInPremierBall
- ldr r2, =BuyMenuReturnToItemList
- adds r0, r4, 0
- bl BuyMenuDisplayMessage
- b _080E1072
- .pool
-_080E106C:
- adds r0, r4, 0
- bl BuyMenuReturnToItemList
-_080E1072:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end Task_ReturnToItemListAfterItemPurchase
-
- thumb_func_start Task_ReturnToItemListAfterDecorationPurchase
-@ void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId)
-Task_ReturnToItemListAfterDecorationPurchase: @ 80E1078
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _080E1096
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl BuyMenuReturnToItemList
-_080E1096:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_ReturnToItemListAfterDecorationPurchase
-
- thumb_func_start BuyMenuReturnToItemList
-@ void BuyMenuReturnToItemList(u8 taskId)
-BuyMenuReturnToItemList: @ 80E10A0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r5, =gTasks + 0x8
- adds r6, r4, r5
- movs r0, 0x5
- movs r1, 0
- bl sub_8197DF8
- ldrb r0, [r6, 0xE]
- movs r1, 0x1
- bl BuyMenuPrintCursor
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- bl BuyMenuAddScrollIndicatorArrows
- subs r5, 0x8
- adds r4, r5
- ldr r0, =Task_BuyMenu
- str r0, [r4]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuReturnToItemList
-
- thumb_func_start BuyMenuPrintItemQuantityAndPrice
-@ void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
-BuyMenuPrintItemQuantityAndPrice: @ 80E10EC
- push {r4,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- movs r0, 0x4
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r0, =gShopDataPtr
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 6
- adds r0, r1
- ldr r3, [r0]
- movs r0, 0xFF
- str r0, [sp]
- movs r0, 0x4
- movs r1, 0x26
- movs r2, 0x1
- bl PrintMoneyAmount
- ldr r0, =gStringVar1
- movs r2, 0x2
- ldrsh r1, [r4, r2]
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_xVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- movs r0, 0x4
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x1
- bl BuyMenuPrint
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end BuyMenuPrintItemQuantityAndPrice
-
- thumb_func_start ExitBuyMenu
-@ void ExitBuyMenu(u8 taskId)
-ExitBuyMenu: @ 80E1168
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =gFieldCallback
- ldr r0, =MapPostLoadHook_ExitBuyOrSellMenu
- 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, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =Task_ExitBuyMenu
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ExitBuyMenu
-
- thumb_func_start Task_ExitBuyMenu
-@ void Task_ExitBuyMenu(u8 taskId)
-Task_ExitBuyMenu: @ 80E11B0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080E11D6
- bl RemoveMoneyLabelObject
- bl BuyMenuFreeMemory
- ldr r0, =CB2_ReturnToField
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_080E11D6:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_ExitBuyMenu
-
- thumb_func_start ClearItemPurchases
-@ void ClearItemPurchases()
-ClearItemPurchases: @ 80E11E4
- push {lr}
- ldr r0, =gUnknown_02039F7C
- movs r1, 0
- strb r1, [r0]
- ldr r0, =gUnknown_02039F80
- movs r1, 0
- movs r2, 0xC
- bl memset
- pop {r0}
- bx r0
- .pool
- thumb_func_end ClearItemPurchases
-
- thumb_func_start RecordItemPurchase
-@ void RecordItemPurchase(u8 taskId)
-RecordItemPurchase: @ 80E1204
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r4, r1, r0
- movs r3, 0
- ldr r5, =gUnknown_02039F80
- adds r6, r5, 0
-_080E121A:
- lsls r0, r3, 2
- adds r2, r0, r6
- ldrh r1, [r2]
- movs r7, 0xA
- ldrsh r0, [r4, r7]
- cmp r1, r0
- bne _080E1250
- ldrh r0, [r2, 0x2]
- cmp r0, 0
- beq _080E1250
- adds r1, r0, 0
- movs r3, 0x2
- ldrsh r0, [r4, r3]
- adds r0, r1, r0
- cmp r0, 0xFF
- ble _080E1248
- movs r0, 0xFF
- strh r0, [r2, 0x2]
- b _080E127A
- .pool
-_080E1248:
- ldrh r0, [r4, 0x2]
- adds r0, r1, r0
- strh r0, [r2, 0x2]
- b _080E127A
-_080E1250:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x2
- bls _080E121A
- ldr r2, =gUnknown_02039F7C
- ldrb r0, [r2]
- cmp r0, 0x2
- bhi _080E127A
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r4, 0xA]
- strh r1, [r0]
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r4, 0x2]
- strh r1, [r0, 0x2]
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
-_080E127A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RecordItemPurchase
-
- thumb_func_start CreatePokemartMenu
-@ void CreatePokemartMenu(u16 *itemsForSale)
-CreatePokemartMenu: @ 80E1284
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0
- bl CreateShopMenu
- adds r0, r4, 0
- bl SetShopItemsForSale
- bl ClearItemPurchases
- ldr r0, =EnableBothScriptContexts
- bl SetShopMenuCallback
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CreatePokemartMenu
-
- thumb_func_start CreateDecorationShop1Menu
-@ void CreateDecorationShop1Menu(u16 *itemsForSale)
-CreateDecorationShop1Menu: @ 80E12A8
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x1
- bl CreateShopMenu
- adds r0, r4, 0
- bl SetShopItemsForSale
- ldr r0, =EnableBothScriptContexts
- bl SetShopMenuCallback
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CreateDecorationShop1Menu
-
- thumb_func_start CreateDecorationShop2Menu
-@ void CreateDecorationShop2Menu(u16 *itemsForSale)
-CreateDecorationShop2Menu: @ 80E12C8
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2
- bl CreateShopMenu
- adds r0, r4, 0
- bl SetShopItemsForSale
- ldr r0, =EnableBothScriptContexts
- bl SetShopMenuCallback
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CreateDecorationShop2Menu
-
- thumb_func_start sub_80E12E8
-sub_80E12E8: @ 80E12E8
- 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, =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 _080E13AC
- 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
-_080E133C:
- movs r4, 0
- lsls r2, 16
- mov r8, r2
- asrs r0, r2, 16
- ldr r2, [sp]
- adds r6, r2, r0
-_080E1348:
- 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 _080E1390
- ldr r0, [sp, 0x4]
- cmp r0, 0x2
- beq _080E1380
- ldrh r0, [r7, 0x2]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
- b _080E1390
- .pool
-_080E1380:
- mov r1, r9
- ldrh r0, [r1]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
-_080E1390:
- movs r2, 0x80
- lsls r2, 9
- adds r0, r4, r2
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080E1348
- adds r0, r2, 0
- add r0, r8
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080E133C
- b _080E1434
-_080E13AC:
- 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
-_080E13BC:
- movs r4, 0
- lsls r2, 16
- mov r8, r2
- asrs r0, r2, 16
- ldr r1, [sp, 0x8]
- adds r6, r1, r0
-_080E13C8:
- 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 _080E141A
- cmp r7, 0x2
- beq _080E140A
- 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 _080E141A
-_080E140A:
- mov r1, r9
- ldrh r0, [r1, 0x4]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
-_080E141A:
- movs r2, 0x80
- lsls r2, 9
- adds r0, r4, r2
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080E13C8
- adds r0, r2, 0
- add r0, r8
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080E13BC
-_080E1434:
- 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_80E12E8
-
- thumb_func_start sub_80E1444
-sub_80E1444: @ 80E1444
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- movs r0, 0x1
- strh r0, [r4, 0x6]
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x6
- bhi _080E14DE
- lsls r0, 2
- ldr r1, =_080E1474
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080E1474:
- .4byte _080E1490
- .4byte _080E1498
- .4byte _080E14A0
- .4byte _080E14A8
- .4byte _080E14B0
- .4byte _080E14C4
- .4byte _080E14D4
-_080E1490:
- ldr r1, =gUnknown_08589ABA
- b _080E14C6
- .pool
-_080E1498:
- ldr r1, =gUnknown_08589AC0
- b _080E14C6
- .pool
-_080E14A0:
- ldr r1, =gUnknown_08589AC6
- b _080E14B2
- .pool
-_080E14A8:
- ldr r1, =gUnknown_08589ACC
- b _080E14C6
- .pool
-_080E14B0:
- ldr r1, =gUnknown_08589AD2
-_080E14B2:
- movs r2, 0xC0
- lsls r2, 4
- adds r0, r3, 0
- bl sub_80E12E8
- b _080E14DE
- .pool
-_080E14C4:
- ldr r1, =gUnknown_08589AD8
-_080E14C6:
- adds r0, r3, 0
- movs r2, 0
- bl sub_80E12E8
- b _080E14DE
- .pool
-_080E14D4:
- ldr r1, =gUnknown_08589ADE
- adds r0, r3, 0
- movs r2, 0
- bl sub_80E12E8
-_080E14DE:
- ldrh r0, [r4]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- strh r0, [r4]
- adds r5, r0, 0
- cmp r5, 0
- bne _080E1502
- 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]
-_080E1502:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80E1444
-
- thumb_func_start sub_80E150C
-sub_80E150C: @ 80E150C
- push {r4-r7,lr}
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- ldr r6, =sub_80E1444
- 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, =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
- .pool
- thumb_func_end sub_80E150C
-
- thumb_func_start sub_80E1558
-sub_80E1558: @ 80E1558
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_80E150C
- ldr r1, =gUnknown_02039F8C
- strb r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80E1558
-
- thumb_func_start sub_80E1570
-sub_80E1570: @ 80E1570
- push {lr}
- ldr r0, =gUnknown_02039F8C
- ldrb r0, [r0]
- bl DestroyTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80E1570
-
- thumb_func_start sub_80E1584
-sub_80E1584: @ 80E1584
- push {lr}
- ldr r2, =gTasks
- ldr r0, =gUnknown_02039F8C
- 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 _080E15B0
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- cmp r0, 0x2
- bne _080E15B0
- movs r0, 0
- b _080E15B2
- .pool
-_080E15B0:
- movs r0, 0x1
-_080E15B2:
- pop {r1}
- bx r1
- thumb_func_end sub_80E1584
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/data/shop.s b/data/shop.s
deleted file mode 100644
index 45ecbb585..000000000
--- a/data/shop.s
+++ /dev/null
@@ -1,80 +0,0 @@
-@ the third big chunk of data
-
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_08589A08:: @ 8589A08
- .4byte BuyMenuTryMakePurchase
- .4byte BuyMenuReturnToItemList
-
-gUnknown_08589A10:: @ 8589A10
- .4byte gUnknown_085E93C7
- .4byte HandleShopMenuBuy
- .4byte gUnknown_085E93CB
- .4byte HandleShopMenuSell
- .4byte gUnknown_085E93D0
- .4byte HandleShopMenuQuit
-
-gUnknown_08589A28:: @ 8589A28
- .4byte gUnknown_085E93C7
- .4byte HandleShopMenuBuy
- .4byte gUnknown_085E93D0
- .4byte HandleShopMenuQuit
-
-gUnknown_08589A38:: @ 8589A38
- window_template 0, 2, 1, 9, 6, 15, 8
- window_template 0, 2, 1, 9, 4, 15, 8
-
-gUnknown_08589A48:: @ 8589A48
- .byte 0, 0, 0, 0
- .4byte BuyMenuPrintItemDescriptionAndShowItemIcon
- .4byte BuyMenuPrintPriceInList
- .byte 0, 0, 0, 0, 1, 0, 8, 0, 33, 48, 0, 7
-
-gUnknown_08589A60:: @ 8589A60
- .4byte 0x1F8
- .4byte 0x11E1
- .4byte 0x21D2
- .4byte 0x31C3
-
-gUnknown_08589A70:: @ 8589A70
- window_template 0, 1, 1, 10, 2, 15, 30
- window_template 0, 14, 2, 15, 16, 15, 50
- window_template 0, 0, 13, 14, 6, 15, 0x122
- window_template 0, 1, 11, 12, 2, 15, 0x176
- window_template 0, 18, 11, 10, 2, 15, 0x18E
- window_template 0, 2, 15, 27, 4, 15, 0x1A2
- null_window_template
-
-gUnknown_08589AA8:: @ 8589AA8
- window_template 0, 21, 9, 5, 4, 15, 0x20E
-
-gUnknown_08589AB0:: @ 8589AB0
- .byte 1, 2, 3
- .byte 0, 2, 3
- .byte 0, 3, 2
-
- .align 1
-
-gUnknown_08589ABA:: @ 8589ABA
- .2byte 0x284, 0x282, 0x280
-
-gUnknown_08589AC0:: @ 8589AC0
- .2byte 0x285, 0x283, 0x281
-
-gUnknown_08589AC6:: @ 8589AC6
- .2byte 0x28C, 0x28A, 0x288
-
-gUnknown_08589ACC:: @ 8589ACC
- .2byte 0x28D, 0x28B, 0x289
-
-gUnknown_08589AD2:: @ 8589AD2
- .2byte 0x2A0, 0x2A2, 0x2A4
-
-gUnknown_08589AD8:: @ 8589AD8
- .2byte 0x2A1, 0x2A3, 0x2A5
-
-gUnknown_08589ADE:: @ 8589ADE
- .2byte 0x2A8, 0x2AA, 0x2AC
diff --git a/include/graphics.h b/include/graphics.h
index 4cbee1c34..07900977d 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -4029,4 +4029,8 @@ extern const u8 gUnknown_08D97CF4[];
extern const u8 gStatusGfx_Icons[];
extern const u8 gStatusPal_Icons[];
+extern const u8 gBuyMenuFrame_Gfx[];
+extern const u16 gBuyMenuFrame_Tilemap[];
+extern const u16 gMenuMoneyPal[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/item_menu.h b/include/item_menu.h
index b80d0628e..649eb934c 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -59,5 +59,6 @@ void bag_menu_mail_related(void);
void CB2_BagMenuFromStartMenu(void);
u8 sub_81ABB2C(u8 pocketId);
bool8 UseRegisteredKeyItemOnField(void);
+void CB2_GoToSellMenu(void);
#endif //GUARD_item_menu_H
diff --git a/include/party_menu.h b/include/party_menu.h
index 170fcafc1..cb82eb82c 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -70,6 +70,5 @@ extern void sub_81B67C8(u8, u16, TaskFunc);
extern void sub_81B79E8(u8, u16, TaskFunc);
extern void sub_81B6DC4(u8, u16, TaskFunc);
extern void sub_81B7C74(u8, u16, TaskFunc);
-extern u16 ItemIdToBattleMoveId(u16);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/shop.h b/include/shop.h
index 067b8fee4..7f2d877dc 100644
--- a/include/shop.h
+++ b/include/shop.h
@@ -1,7 +1,7 @@
#ifndef GUARD_SHOP_H
#define GUARD_SHOP_H
-extern EWRAM_DATA struct ItemSlot gUnknown_02039F80[3];
+extern EWRAM_DATA struct ItemSlot gMartPurchaseHistory[3];
enum
{
@@ -10,9 +10,19 @@ enum
MART_TYPE_2,
};
+// shop view window NPC info enum
+enum
+{
+ EVENT_OBJ_ID,
+ X_COORD,
+ Y_COORD,
+ ANIM_NUM,
+ LAYER_TYPE
+};
+
struct MartInfo
{
- /*0x0*/ void (* callback) (void);
+ /*0x0*/ void (*callback)(void);
/*0x4*/ const struct MenuAction *menuActions;
/*0x8*/ const u16 *itemList;
/*0xC*/ u16 itemCount;
@@ -20,23 +30,18 @@ struct MartInfo
/*0xF*/ u8 martType;
};
-struct BuyMenuLabel
-{
- u8 label[16];
-};
-
struct ShopData
{
- /*0x0000*/ u8 tilemapBuffers[4][0x800];
- /*0x2000*/ u8 filler2000[0x4];
- /*0x2004*/ u16 unk2004;
- /*0x2006*/ u8 filler2006[0x2];
- /*0x2008*/ u16 unk2008;
- /*0x200A*/ u8 filler200A;
+ /*0x0000*/ u16 tilemapBuffers[4][0x400];
+ /*0x2000*/ u32 totalCost;
+ /*0x2004*/ u16 itemsShowed;
+ /*0x2006*/ u16 selectedRow;
+ /*0x2008*/ u16 scrollOffset;
+ /*0x200A*/ u8 maxQuantity;
/*0x200B*/ u8 scrollIndicatorsTaskId;
- /*0x200C*/ u8 unk200C;
- /*0x200D*/ u8 unk200D[2];
- /*0x200F*/ u8 filler200F[0xA1];
+ /*0x200C*/ u8 iconSlot;
+ /*0x200D*/ u8 itemSpriteIds[2];
+ /*0x2010*/ s16 viewportObjects[16][5];
};
void CreatePokemartMenu(const u16 *);
diff --git a/include/strings.h b/include/strings.h
index 4ea33635b..0b037287a 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -855,5 +855,21 @@ extern const u8 gText_CanIHelpWithAnythingElse[];
extern const u8 gText_AnythingElseICanHelp[];
extern const u8 gText_QuitShopping[];
extern const u8 gText_PokedollarVar1[];
+extern const u8 gText_YouDontHaveMoney[];
+extern const u8 gText_Var1CertainlyHowMany2[];
+extern const u8 gText_Var1CertainlyHowMany[];
+extern const u8 gText_Var1IsItThatllBeVar2[];
+extern const u8 gText_YouWantedVar1ThatllBeVar2[];
+extern const u8 gText_InBagVar1[];
+extern const u8 gText_Var1AndYouWantedVar2[];
+extern const u8 gText_HereYouGoThankYou[];
+extern const u8 gText_NoMoreRoomForThis[];
+extern const u8 gText_ThankYouIllSendItHome[];
+extern const u8 gText_ThanksIllSendItHome[];
+extern const u8 gText_SpaceForVar1Full[];
+extern const u8 gText_ThrowInPremierBall[];
+extern const u8 gText_ShopBuy[];
+extern const u8 gText_ShopSell[];
+extern const u8 gText_ShopQuit[];
#endif //GUARD_STRINGS_H
diff --git a/ld_script.txt b/ld_script.txt
index 9592d5cf6..41a8d95c7 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -138,7 +138,7 @@ SECTIONS {
src/contest.o(.text);
asm/contest.o(.text);
src/shop.o(.text);
- asm/shop.o(.text);
+ src/fldeff_escalator.o(.text);
src/berry.o(.text);
asm/script_menu.o(.text);
src/naming_screen.o(.text);
@@ -443,7 +443,8 @@ SECTIONS {
src/map_name_popup.o(.rodata);
src/item_menu_icons.o(.rodata);
data/contest.o(.rodata);
- data/shop.o(.rodata);
+ src/shop.o(.rodata);
+ src/fldeff_escalator.o(.rodata);
src/berry.o(.rodata);
data/script_menu.o(.rodata);
src/naming_screen.o(.rodata);
diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c
new file mode 100644
index 000000000..b906225da
--- /dev/null
+++ b/src/fldeff_escalator.c
@@ -0,0 +1,132 @@
+#include "global.h"
+#include "task.h"
+#include "fieldmap.h"
+#include "field_camera.h"
+#include "field_player_avatar.h"
+
+static EWRAM_DATA u8 sEscalatorAnim_TaskId = 0;
+
+void sub_80E12E8(u8 taskId, const s16 *list, u16 c)
+{
+ s16 r5 = gTasks[taskId].data[4] - 1;
+ s16 r3 = gTasks[taskId].data[5] - 1;
+ s16 r4 = gTasks[taskId].data[1];
+ s16 y;
+ s16 x;
+
+ if (gTasks[taskId].data[2] == 0)
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[2 - r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]);
+ }
+ }
+ }
+ }
+}
+
+static const u16 gUnknown_08589ABA[] = {0x284, 0x282, 0x280};
+static const u16 gUnknown_08589AC0[] = {0x285, 0x283, 0x281};
+static const u16 gUnknown_08589AC6[] = {0x28C, 0x28A, 0x288};
+static const u16 gUnknown_08589ACC[] = {0x28D, 0x28B, 0x289};
+static const u16 gUnknown_08589AD2[] = {0x2A0, 0x2A2, 0x2A4};
+static const u16 gUnknown_08589AD8[] = {0x2A1, 0x2A3, 0x2A5};
+static const u16 gUnknown_08589ADE[] = {0x2A8, 0x2AA, 0x2AC};
+
+void sub_80E1444(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[3] = 1;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_80E12E8(taskId, gUnknown_08589ABA, 0);
+ break;
+ case 1:
+ sub_80E12E8(taskId, gUnknown_08589AC0, 0);
+ break;
+ case 2:
+ sub_80E12E8(taskId, gUnknown_08589AC6, 0xC00);
+ break;
+ case 3:
+ sub_80E12E8(taskId, gUnknown_08589ACC, 0);
+ break;
+ case 4:
+ sub_80E12E8(taskId, gUnknown_08589AD2, 0xC00);
+ break;
+ case 5:
+ sub_80E12E8(taskId, gUnknown_08589AD8, 0);
+ break;
+ case 6:
+ sub_80E12E8(taskId, gUnknown_08589ADE, 0);
+ break;
+ }
+
+ data[0] = (data[0] + 1) & 7;
+ if (!data[0])
+ {
+ DrawWholeMapView();
+ data[1] = (data[1] + 1) % 3;
+ data[3] = 0;
+ }
+}
+
+u8 sub_80E150C(u16 var)
+{
+ u8 taskId = CreateTask(sub_80E1444, 0);
+ s16 *data = gTasks[taskId].data;
+
+ PlayerGetDestCoords(&data[4], &data[5]);
+ data[0] = 0;
+ data[1] = 0;
+ data[2] = var;
+ sub_80E1444(taskId);
+ return taskId;
+}
+
+void sub_80E1558(u8 var)
+{
+ sEscalatorAnim_TaskId = sub_80E150C(var);
+}
+
+void sub_80E1570(void)
+{
+ DestroyTask(sEscalatorAnim_TaskId);
+}
+
+bool8 sub_80E1584(void)
+{
+ if (gTasks[sEscalatorAnim_TaskId].data[3] == 0 && gTasks[sEscalatorAnim_TaskId].data[1] == 2)
+ return FALSE;
+ else
+ return TRUE;
+}
diff --git a/src/shop.c b/src/shop.c
index 26151171a..510c9f4f7 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -1,15 +1,20 @@
#include "global.h"
#include "bg.h"
+#include "data2.h"
#include "decompress.h"
#include "decoration.h"
+#include "decoration_inventory.h"
+#include "event_object_movement.h"
#include "field_player_avatar.h"
#include "field_screen.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "gpu_regs.h"
+#include "graphics.h"
#include "international_string_util.h"
#include "item.h"
#include "item_icon.h"
+#include "item_menu.h"
#include "list_menu.h"
#include "main.h"
#include "malloc.h"
@@ -18,6 +23,7 @@
#include "money.h"
#include "overworld.h"
#include "palette.h"
+#include "party_menu.h"
#include "scanline_effect.h"
#include "script.h"
#include "shop.h"
@@ -27,54 +33,243 @@
#include "strings.h"
#include "text_window.h"
#include "tv.h"
+#include "constants/items.h"
+#include "constants/metatile_behaviors.h"
#include "constants/rgb.h"
#include "constants/songs.h"
-extern struct ShopData *gShopDataPtr;
-extern struct ListMenuItem *gUnknown_02039F74;
-extern u8 (*gUnknown_02039F78)[16];
-extern struct MartInfo gMartInfo;
-
-extern const struct WindowTemplate gUnknown_08589A38[2];
-extern const struct MenuAction gUnknown_08589A10[3];
-extern const struct MenuAction gUnknown_08589A28[2];
-extern const struct ListMenuTemplate gUnknown_08589A48;
-extern const struct BgTemplate gUnknown_08589A60[4];
-extern const u8 gBuyMenuFrame_Gfx[];
-extern const u8 gBuyMenuFrame_Tilemap[];
-extern const u16 gMenuMoneyPal[];
-extern const struct WindowTemplate gUnknown_08589A70[];
-extern u8 gUnknown_08589AB0[][3];
+EWRAM_DATA struct MartInfo gMartInfo = {0};
+EWRAM_DATA struct ShopData *gShopDataPtr = NULL;
+EWRAM_DATA struct ListMenuItem *gUnknown_02039F74 = NULL;
+EWRAM_DATA u8 (*gUnknown_02039F78)[16] = {0};
+EWRAM_DATA u8 gMartPurchaseHistoryId = 0;
+EWRAM_DATA struct ItemSlot gMartPurchaseHistory[3] = {0};
static void Task_ShopMenu(u8 taskId);
-void HandleShopMenuQuit(u8 taskId);
-void CB2_InitBuyMenu(void);
+static void Task_HandleShopMenuQuit(u8 taskId);
+static void CB2_InitBuyMenu(void);
static void Task_GoToBuyOrSellMenu(u8 taskId);
-void CB2_GoToSellMenu(void);
-void MapPostLoadHook_ExitBuyOrSellMenu(void);
-void Task_ExitSellMenu(u8 taskId);
-void ReturnToShopMenuAfterExitingSellMenu(u8 taskId);
-void BuyMenuDrawGraphics(void);
-void BuyMenuAddScrollIndicatorArrows(void);
-void Task_BuyMenu(u8 taskId);
-void BuyMenuBuildListMenuTemplate(void);
-void BuyMenuInitBgs(void);
-void BuyMenuInitWindows(void);
-void BuyMenuDecompressBgGraphics(void);
-void BuyMenuSetListEntry(struct ListMenuItem*, u16, u8*);
-void BuyMenuAddItemIcon(u16, u8);
-void BuyMenuRemoveItemIcon(u16, u8);
-void BuyMenuPrint(u8 windowId, const u8 *text, u8 x, u8 y, s8 speed, u8 colorSet);
-void BuyMenuDrawMapGraphics(void);
-void BuyMenuCopyMenuBgToBg1TilemapBuffer(void);
-void BuyMenuCollectEventObjectData(void);
-void BuyMenuDrawEventObjects(void);
-void BuyMenuDrawMapBg(void);
-bool8 BuyMenuCheckForOverlapWithMenuBg(u16, u16);
-void BuyMenuDrawMapMetatile(s16, s16, u16*, u8);
-
-
-/*static*/ u8 CreateShopMenu(u8 martType)
+static void MapPostLoadHook_ReturnToShopMenu(void);
+static void Task_ReturnToShopMenu(u8 taskId);
+static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId);
+static void BuyMenuDrawGraphics(void);
+static void BuyMenuAddScrollIndicatorArrows(void);
+static void Task_BuyMenu(u8 taskId);
+static void BuyMenuBuildListMenuTemplate(void);
+static void BuyMenuInitBgs(void);
+static void BuyMenuInitWindows(void);
+static void BuyMenuDecompressBgGraphics(void);
+static void BuyMenuSetListEntry(struct ListMenuItem*, u16, u8*);
+static void BuyMenuAddItemIcon(u16, u8);
+static void BuyMenuRemoveItemIcon(u16, u8);
+static void BuyMenuPrint(u8 windowId, const u8 *text, u8 x, u8 y, s8 speed, u8 colorSet);
+static void BuyMenuDrawMapGraphics(void);
+static void BuyMenuCopyMenuBgToBg1TilemapBuffer(void);
+static void BuyMenuCollectEventObjectData(void);
+static void BuyMenuDrawEventObjects(void);
+static void BuyMenuDrawMapBg(void);
+static bool8 BuyMenuCheckForOverlapWithMenuBg(int, int);
+static void BuyMenuDrawMapMetatile(s16, s16, const u16*, u8);
+static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src);
+static bool8 BuyMenuCheckIfEventObjectOverlapsMenuBg(s16 *);
+static void ExitBuyMenu(u8 taskId);
+static void Task_ExitBuyMenu(u8 taskId);
+static void BuyMenuTryMakePurchase(u8 taskId);
+static void BuyMenuReturnToItemList(u8 taskId);
+static void Task_BuyHowManyDialogueInit(u8 taskId);
+static void BuyMenuConfirmPurchase(u8 taskId);
+static void BuyMenuPrintItemQuantityAndPrice(u8 taskId);
+static void Task_BuyHowManyDialogueHandleInput(u8 taskId);
+static void BuyMenuSubtractMoney(u8 taskId);
+static void RecordItemPurchase(u8 taskId);
+static void Task_ReturnToItemListAfterItemPurchase(u8 taskId);
+static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId);
+static void Task_HandleShopMenuBuy(u8 taskId);
+static void Task_HandleShopMenuSell(u8 taskId);
+static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list);
+static void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y);
+
+static const struct YesNoFuncTable sShopPurchaseYesNoFuncs =
+{
+ BuyMenuTryMakePurchase,
+ BuyMenuReturnToItemList
+};
+
+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 MenuAction sShopMenuActions_BuyQuit[] =
+{
+ { gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} },
+ { gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} }
+};
+
+static const struct WindowTemplate sShopMenuWindowTemplates[] =
+{
+ {
+ .priority = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 1,
+ .width = 9,
+ .height = 6,
+ .paletteNum = 15,
+ .baseBlock = 0x0008,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 1,
+ .width = 9,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x0008,
+ }
+};
+
+static const struct ListMenuTemplate sShopBuyMenuListTemplate =
+{
+ .items = NULL,
+ .moveCursorFunc = BuyMenuPrintItemDescriptionAndShowItemIcon,
+ .itemPrintFunc = BuyMenuPrintPriceInList,
+ .totalItems = 0,
+ .maxShowed = 0,
+ .windowId = 1,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 0,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
+ .fontId = 7,
+ .cursorKind = 0
+};
+
+static const struct BgTemplate sShopBuyMenuBgTemplates[] =
+{
+ {
+ .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
+ }
+};
+
+static const struct WindowTemplate sShopBuyMenuWindowTemplates[] =
+{
+ {
+ .priority = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x001E,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 14,
+ .tilemapTop = 2,
+ .width = 15,
+ .height = 16,
+ .paletteNum = 15,
+ .baseBlock = 0x0032,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 13,
+ .width = 14,
+ .height = 6,
+ .paletteNum = 15,
+ .baseBlock = 0x0122,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 11,
+ .width = 12,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x0176,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 18,
+ .tilemapTop = 11,
+ .width = 10,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x018E,
+ },
+ {
+ .priority = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 27,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x01A2,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sShopBuyMenuYesNoWindowTemplates =
+{
+ .priority = 0,
+ .tilemapLeft = 21,
+ .tilemapTop = 9,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x020E,
+};
+
+static const u8 sShopBuyMenuTextColors[][3] =
+{
+ {1, 2, 3},
+ {0, 2, 3},
+ {0, 3, 2}
+};
+
+static u8 CreateShopMenu(u8 martType)
{
int numMenuItems;
@@ -84,20 +279,20 @@ void BuyMenuDrawMapMetatile(s16, s16, u16*, u8);
if (martType == MART_TYPE_0)
{
struct WindowTemplate winTemplate;
- winTemplate = gUnknown_08589A38[0];
- winTemplate.width = GetMaxWidthInMenuTable(gUnknown_08589A10, ARRAY_COUNT(gUnknown_08589A10));
+ winTemplate = sShopMenuWindowTemplates[0];
+ winTemplate.width = GetMaxWidthInMenuTable(sShopMenuActions_BuySellQuit, ARRAY_COUNT(sShopMenuActions_BuySellQuit));
gMartInfo.windowId = AddWindow(&winTemplate);
- gMartInfo.menuActions = gUnknown_08589A10;
- numMenuItems = ARRAY_COUNT(gUnknown_08589A10);
+ gMartInfo.menuActions = sShopMenuActions_BuySellQuit;
+ numMenuItems = ARRAY_COUNT(sShopMenuActions_BuySellQuit);
}
else
{
struct WindowTemplate winTemplate;
- winTemplate = gUnknown_08589A38[1];
- winTemplate.width = GetMaxWidthInMenuTable(gUnknown_08589A28, ARRAY_COUNT(gUnknown_08589A28));
+ winTemplate = sShopMenuWindowTemplates[1];
+ winTemplate.width = GetMaxWidthInMenuTable(sShopMenuActions_BuyQuit, ARRAY_COUNT(sShopMenuActions_BuyQuit));
gMartInfo.windowId = AddWindow(&winTemplate);
- gMartInfo.menuActions = gUnknown_08589A28;
- numMenuItems = ARRAY_COUNT(gUnknown_08589A28);
+ gMartInfo.menuActions = sShopMenuActions_BuyQuit;
+ numMenuItems = ARRAY_COUNT(sShopMenuActions_BuyQuit);
}
SetStandardWindowBorderStyle(gMartInfo.windowId, 0);
@@ -109,12 +304,12 @@ void BuyMenuDrawMapMetatile(s16, s16, u16*, u8);
return CreateTask(Task_ShopMenu, 8);
}
-/*static*/ void SetShopMenuCallback(void (* callback)(void))
+static void SetShopMenuCallback(void (* callback)(void))
{
gMartInfo.callback = callback;
}
-/*static*/ void SetShopItemsForSale(const u16 *items)
+static void SetShopItemsForSale(const u16 *items)
{
u16 i = 0;
@@ -133,11 +328,11 @@ static void Task_ShopMenu(u8 taskId)
s8 inputCode = Menu_ProcessInputNoWrapAround();
switch (inputCode)
{
- case -2:
+ case LIST_B_PRESSED:
break;
- case -1:
+ case LIST_NOTHING_CHOSEN:
PlaySE(SE_SELECT);
- HandleShopMenuQuit(taskId);
+ Task_HandleShopMenuQuit(taskId);
break;
default:
gMartInfo.menuActions[inputCode].func.void_u8(taskId);
@@ -145,31 +340,31 @@ static void Task_ShopMenu(u8 taskId)
}
}
-void HandleShopMenuBuy(u8 taskId)
+static void Task_HandleShopMenuBuy(u8 taskId)
{
- s16 *taskData = gTasks[taskId].data;
- taskData[8] = (u32)CB2_InitBuyMenu >> 16;
- taskData[9] = (u32)CB2_InitBuyMenu;
+ s16 *data = gTasks[taskId].data;
+ data[8] = (u32)CB2_InitBuyMenu >> 16;
+ data[9] = (u32)CB2_InitBuyMenu;
gTasks[taskId].func = Task_GoToBuyOrSellMenu;
FadeScreen(1, 0);
}
-void HandleShopMenuSell(u8 taskId)
+static void Task_HandleShopMenuSell(u8 taskId)
{
- s16 *taskData = gTasks[taskId].data;
- taskData[8] = (u32)CB2_GoToSellMenu >> 16;
- taskData[9] = (u32)CB2_GoToSellMenu;
+ s16 *data = gTasks[taskId].data;
+ data[8] = (u32)CB2_GoToSellMenu >> 16;
+ data[9] = (u32)CB2_GoToSellMenu;
gTasks[taskId].func = Task_GoToBuyOrSellMenu;
FadeScreen(1, 0);
}
void CB2_ExitSellMenu(void)
{
- gFieldCallback = MapPostLoadHook_ExitBuyOrSellMenu;
+ gFieldCallback = MapPostLoadHook_ReturnToShopMenu;
SetMainCallback2(CB2_ReturnToField);
}
-/*static*/ void HandleShopMenuQuit(u8 taskId)
+static void Task_HandleShopMenuQuit(u8 taskId)
{
sub_8198070(gMartInfo.windowId, 2);
RemoveWindow(gMartInfo.windowId);
@@ -183,38 +378,38 @@ void CB2_ExitSellMenu(void)
static void Task_GoToBuyOrSellMenu(u8 taskId)
{
- s16 *taskData = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
if (!gPaletteFade.active)
{
DestroyTask(taskId);
- SetMainCallback2((void *)((u16)taskData[8] << 16 | (u16)taskData[9]));
+ SetMainCallback2((void *)((u16)data[8] << 16 | (u16)data[9]));
}
}
-void MapPostLoadHook_ExitBuyOrSellMenu(void)
+static void MapPostLoadHook_ReturnToShopMenu(void)
{
pal_fill_black();
- CreateTask(Task_ExitSellMenu, 8);
+ CreateTask(Task_ReturnToShopMenu, 8);
}
-void Task_ExitSellMenu(u8 taskId)
+static void Task_ReturnToShopMenu(u8 taskId)
{
if (IsWeatherNotFadingIn() == TRUE)
{
if (gMartInfo.martType == MART_TYPE_2)
- DisplayItemMessageOnField(taskId, gText_CanIHelpWithAnythingElse, ReturnToShopMenuAfterExitingSellMenu);
+ DisplayItemMessageOnField(taskId, gText_CanIHelpWithAnythingElse, ShowShopMenuAfterExitingBuyOrSellMenu);
else
- DisplayItemMessageOnField(taskId, gText_AnythingElseICanHelp, ReturnToShopMenuAfterExitingSellMenu);
+ DisplayItemMessageOnField(taskId, gText_AnythingElseICanHelp, ShowShopMenuAfterExitingBuyOrSellMenu);
}
}
-void ReturnToShopMenuAfterExitingSellMenu(u8 taskId)
+static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId)
{
CreateShopMenu(gMartInfo.martType);
DestroyTask(taskId);
}
-void CB2_BuyMenu(void)
+static void CB2_BuyMenu(void)
{
RunTasks();
AnimateSprites();
@@ -223,14 +418,18 @@ void CB2_BuyMenu(void)
UpdatePaletteFade();
}
-void VBlankCB_BuyMenu(void)
+static void VBlankCB_BuyMenu(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-void CB2_InitBuyMenu(void)
+#define tItemCount data[1]
+#define tItemId data[5]
+#define tListTaskId data[7]
+
+static void CB2_InitBuyMenu(void)
{
u8 taskId;
@@ -248,8 +447,8 @@ void CB2_InitBuyMenu(void)
clear_scheduled_bg_copies_to_vram();
gShopDataPtr = AllocZeroed(sizeof(struct ShopData));
gShopDataPtr->scrollIndicatorsTaskId = 0xFF;
- gShopDataPtr->unk200D[0] = -1;
- gShopDataPtr->unk200D[1] = -1;
+ gShopDataPtr->itemSpriteIds[0] = -1;
+ gShopDataPtr->itemSpriteIds[1] = -1;
BuyMenuBuildListMenuTemplate();
BuyMenuInitBgs();
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20);
@@ -268,7 +467,7 @@ void CB2_InitBuyMenu(void)
BuyMenuDrawGraphics();
BuyMenuAddScrollIndicatorArrows();
taskId = CreateTask(Task_BuyMenu, 8);
- gTasks[taskId].data[7] = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+ gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
SetVBlankCallback(VBlankCB_BuyMenu);
@@ -277,7 +476,7 @@ void CB2_InitBuyMenu(void)
}
}
-void BuyMenuFreeMemory(void)
+static void BuyMenuFreeMemory(void)
{
Free(gShopDataPtr);
Free(gUnknown_02039F74);
@@ -285,7 +484,7 @@ void BuyMenuFreeMemory(void)
FreeAllWindowBuffers();
}
-void BuyMenuBuildListMenuTemplate(void)
+static void BuyMenuBuildListMenuTemplate(void)
{
u16 i;
u16 itemCount;
@@ -299,7 +498,7 @@ void BuyMenuBuildListMenuTemplate(void)
gUnknown_02039F74[i].name = gUnknown_02039F78[i];
gUnknown_02039F74[i].id = -2;
- gMultiuseListMenuTemplate = gUnknown_08589A48;
+ gMultiuseListMenuTemplate = sShopBuyMenuListTemplate;
gMultiuseListMenuTemplate.items = gUnknown_02039F74;
gMultiuseListMenuTemplate.totalItems = gMartInfo.itemCount + 1;
if (gMultiuseListMenuTemplate.totalItems > 8)
@@ -307,10 +506,10 @@ void BuyMenuBuildListMenuTemplate(void)
else
gMultiuseListMenuTemplate.maxShowed = gMultiuseListMenuTemplate.totalItems;
- gShopDataPtr->unk2004 = gMultiuseListMenuTemplate.maxShowed;
+ gShopDataPtr->itemsShowed = gMultiuseListMenuTemplate.maxShowed;
}
-void BuyMenuSetListEntry(struct ListMenuItem *menuItem, u16 item, u8 *name)
+static void BuyMenuSetListEntry(struct ListMenuItem *menuItem, u16 item, u8 *name)
{
if (gMartInfo.martType == MART_TYPE_0)
CopyItemName(item, name);
@@ -321,19 +520,19 @@ void BuyMenuSetListEntry(struct ListMenuItem *menuItem, u16 item, u8 *name)
menuItem->id = item;
}
-void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list)
+static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list)
{
const u8 *description;
if (onInit != TRUE)
PlaySE(SE_SELECT);
if (item != -2)
- BuyMenuAddItemIcon(item, gShopDataPtr->unk200C);
+ BuyMenuAddItemIcon(item, gShopDataPtr->iconSlot);
else
- BuyMenuAddItemIcon(-1, gShopDataPtr->unk200C);
+ BuyMenuAddItemIcon(-1, gShopDataPtr->iconSlot);
- BuyMenuRemoveItemIcon(item, gShopDataPtr->unk200C ^ 1);
- gShopDataPtr->unk200C ^= 1;
+ BuyMenuRemoveItemIcon(item, gShopDataPtr->iconSlot ^ 1);
+ gShopDataPtr->iconSlot ^= 1;
if (item != -2)
{
if (gMartInfo.martType == MART_TYPE_0)
@@ -350,7 +549,7 @@ void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct L
BuyMenuPrint(2, description, 3, 1, 0, 0);
}
-void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y)
+static void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y)
{
u8 x;
@@ -375,11 +574,11 @@ void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y)
StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1);
x = GetStringRightAlignXOffset(7, gStringVar4, 0x78);
- AddTextPrinterParameterized4(windowId, 7, x, y, 0, 0, gUnknown_08589AB0[1], -1, gStringVar4);
+ AddTextPrinterParameterized4(windowId, 7, x, y, 0, 0, sShopBuyMenuTextColors[1], -1, gStringVar4);
}
}
-void BuyMenuAddScrollIndicatorArrows(void)
+static void BuyMenuAddScrollIndicatorArrows(void)
{
if (gShopDataPtr->scrollIndicatorsTaskId == 0xFF && gMartInfo.itemCount + 1 > 8)
{
@@ -389,13 +588,13 @@ void BuyMenuAddScrollIndicatorArrows(void)
0xC,
0x94,
gMartInfo.itemCount - 7,
- 0x834,
- 0x834,
- &gShopDataPtr->unk2008);
+ 2100,
+ 2100,
+ &gShopDataPtr->scrollOffset);
}
}
-void BuyMenuRemoveScrollIndicatorArrows(void)
+static void BuyMenuRemoveScrollIndicatorArrows(void)
{
if (gShopDataPtr->scrollIndicatorsTaskId != 0xFF)
{
@@ -404,22 +603,22 @@ void BuyMenuRemoveScrollIndicatorArrows(void)
}
}
-void BuyMenuPrintCursor(u8 scrollIndicatorsTaskId, u8 colorSet)
+static void BuyMenuPrintCursor(u8 scrollIndicatorsTaskId, u8 colorSet)
{
u8 y = ListMenuGetYCoordForPrintingArrowCursor(scrollIndicatorsTaskId);
BuyMenuPrint(1, gText_SelectorArrow2, 0, y, 0, colorSet);
}
-void BuyMenuAddItemIcon(u16 item, u8 iconSlot)
+static void BuyMenuAddItemIcon(u16 item, u8 iconSlot)
{
u8 spriteId;
- u8 *spriteIdPtr = &gShopDataPtr->unk200D[iconSlot];
+ u8 *spriteIdPtr = &gShopDataPtr->itemSpriteIds[iconSlot];
if (*spriteIdPtr != 0xFF)
return;
if (gMartInfo.martType == MART_TYPE_0 || item == 0xFFFF)
{
- spriteId = AddItemIconSprite(iconSlot + 0x83E, iconSlot + 0x83E, item);
+ spriteId = AddItemIconSprite(iconSlot + 2110, iconSlot + 2110, item);
if (spriteId != MAX_SPRITES)
{
*spriteIdPtr = spriteId;
@@ -429,28 +628,28 @@ void BuyMenuAddItemIcon(u16 item, u8 iconSlot)
}
else
{
- spriteId = AddDecorationIconObject(item, 20, 84, 1, iconSlot + 0x83E, iconSlot + 0x83E);
+ spriteId = AddDecorationIconObject(item, 20, 84, 1, iconSlot + 2110, iconSlot + 2110);
if (spriteId != MAX_SPRITES)
*spriteIdPtr = spriteId;
}
}
-void BuyMenuRemoveItemIcon(u16 item, u8 iconSlot)
+static void BuyMenuRemoveItemIcon(u16 item, u8 iconSlot)
{
- u8 *spriteIdPtr = &gShopDataPtr->unk200D[iconSlot];
+ u8 *spriteIdPtr = &gShopDataPtr->itemSpriteIds[iconSlot];
if (*spriteIdPtr == 0xFF)
return;
- FreeSpriteTilesByTag(iconSlot + 0x83E);
- FreeSpritePaletteByTag(iconSlot + 0x83E);
+ FreeSpriteTilesByTag(iconSlot + 2110);
+ FreeSpritePaletteByTag(iconSlot + 2110);
DestroySprite(&gSprites[*spriteIdPtr]);
*spriteIdPtr = 0xFF;
}
-void BuyMenuInitBgs(void)
+static void BuyMenuInitBgs(void)
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_08589A60, ARRAY_COUNT(gUnknown_08589A60));
+ InitBgsFromTemplates(0, sShopBuyMenuBgTemplates, ARRAY_COUNT(sShopBuyMenuBgTemplates));
SetBgTilemapBuffer(1, gShopDataPtr->tilemapBuffers[1]);
SetBgTilemapBuffer(2, gShopDataPtr->tilemapBuffers[3]);
SetBgTilemapBuffer(3, gShopDataPtr->tilemapBuffers[2]);
@@ -470,16 +669,16 @@ void BuyMenuInitBgs(void)
ShowBg(3);
}
-void BuyMenuDecompressBgGraphics(void)
+static void BuyMenuDecompressBgGraphics(void)
{
decompress_and_copy_tile_data_to_vram(1, gBuyMenuFrame_Gfx, 0x3A0, 0x3E3, 0);
LZDecompressWram(gBuyMenuFrame_Tilemap, gShopDataPtr->tilemapBuffers[0]);
LoadCompressedPalette(gMenuMoneyPal, 0xC0, 0x20);
}
-void BuyMenuInitWindows(void)
+static void BuyMenuInitWindows(void)
{
- InitWindows(gUnknown_08589A70);
+ InitWindows(sShopBuyMenuWindowTemplates);
DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 1, 0xD0);
LoadMessageBoxGfx(0, 0xA, 0xE0);
@@ -488,18 +687,18 @@ void BuyMenuInitWindows(void)
PutWindowTilemap(2);
}
-void BuyMenuPrint(u8 windowId, const u8 *text, u8 x, u8 y, s8 speed, u8 colorSet)
+static void BuyMenuPrint(u8 windowId, const u8 *text, u8 x, u8 y, s8 speed, u8 colorSet)
{
- AddTextPrinterParameterized4(windowId, 1, x, y, 0, 0, gUnknown_08589AB0[colorSet], speed, text);
+ AddTextPrinterParameterized4(windowId, 1, x, y, 0, 0, sShopBuyMenuTextColors[colorSet], speed, text);
}
-void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback)
+static void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback)
{
DisplayMessageAndContinueTask(taskId, 5, 10, 14, 1, GetPlayerTextSpeed(), text, callback);
schedule_bg_copy_tilemap_to_vram(0);
}
-void BuyMenuDrawGraphics(void)
+static void BuyMenuDrawGraphics(void)
{
BuyMenuDrawMapGraphics();
BuyMenuCopyMenuBgToBg1TilemapBuffer();
@@ -511,24 +710,22 @@ void BuyMenuDrawGraphics(void)
schedule_bg_copy_tilemap_to_vram(3);
}
-void BuyMenuDrawMapGraphics(void)
+static void BuyMenuDrawMapGraphics(void)
{
BuyMenuCollectEventObjectData();
BuyMenuDrawEventObjects();
BuyMenuDrawMapBg();
}
-#ifdef NONMATCHING
-// functionally equivalent, but couldn't get the loop variables using the
-// stack correctly. Might be related to the tileset metatiles type.
-void BuyMenuDrawMapBg(void)
+static void BuyMenuDrawMapBg(void)
{
s16 i;
s16 j;
s16 x;
s16 y;
const struct MapLayout *mapLayout;
- u16 metatile, metatileLayerType;
+ u16 metatile;
+ u8 metatileLayerType;
mapLayout = gMapHeader.mapLayout;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
@@ -545,135 +742,491 @@ void BuyMenuDrawMapBg(void)
else
metatileLayerType = 1;
- if (metatile < 0x200)
+ if (metatile < NUM_METATILES_IN_PRIMARY)
{
BuyMenuDrawMapMetatile(i, j, (u16*)mapLayout->primaryTileset->metatiles + metatile * 8, metatileLayerType);
}
else
{
- BuyMenuDrawMapMetatile(i, j, (u16*)mapLayout->secondaryTileset->metatiles + ((metatile - 0x200) * 8), metatileLayerType);
+ BuyMenuDrawMapMetatile(i, j, (u16*)mapLayout->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;
+
+ switch (metatileLayerType)
+ {
+ case 0:
+ BuyMenuDrawMapMetatileLayer(gShopDataPtr->tilemapBuffers[3], offset1, offset2, src);
+ BuyMenuDrawMapMetatileLayer(gShopDataPtr->tilemapBuffers[1], offset1, offset2, src + 4);
+ break;
+ case 1:
+ BuyMenuDrawMapMetatileLayer(gShopDataPtr->tilemapBuffers[2], offset1, offset2, src);
+ BuyMenuDrawMapMetatileLayer(gShopDataPtr->tilemapBuffers[3], offset1, offset2, src + 4);
+ break;
+ case 2:
+ BuyMenuDrawMapMetatileLayer(gShopDataPtr->tilemapBuffers[2], offset1, offset2, src);
+ BuyMenuDrawMapMetatileLayer(gShopDataPtr->tilemapBuffers[1], offset1, offset2, src + 4);
+ break;
+ }
+}
+
+static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src)
+{
+ // This function draws a whole 2x2 metatile.
+ 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;
+ s16 facingY;
+ u8 y;
+ u8 x;
+ u8 r8 = 0;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
+ for (y = 0; y < 16; y++)
+ gShopDataPtr->viewportObjects[y][EVENT_OBJ_ID] = 16;
+ for (y = 0; y < 5; y++)
+ {
+ for (x = 0; x < 7; x++)
+ {
+ u8 eventObjId = GetEventObjectIdByXY(facingX - 4 + x, facingY - 2 + y);
+
+ if (eventObjId != 16)
+ {
+ gShopDataPtr->viewportObjects[r8][EVENT_OBJ_ID] = eventObjId;
+ gShopDataPtr->viewportObjects[r8][X_COORD] = x;
+ gShopDataPtr->viewportObjects[r8][Y_COORD] = y;
+ gShopDataPtr->viewportObjects[r8][LAYER_TYPE] = MapGridGetMetatileLayerTypeAt(facingX - 4 + x, facingY - 2 + y);
+
+ switch (gEventObjects[eventObjId].facingDirection)
+ {
+ case DIR_SOUTH:
+ gShopDataPtr->viewportObjects[r8][ANIM_NUM] = 0;
+ break;
+ case DIR_NORTH:
+ gShopDataPtr->viewportObjects[r8][ANIM_NUM] = 1;
+ break;
+ case DIR_WEST:
+ gShopDataPtr->viewportObjects[r8][ANIM_NUM] = 2;
+ break;
+ case DIR_EAST:
+ default:
+ gShopDataPtr->viewportObjects[r8][ANIM_NUM] = 3;
+ break;
+ }
+ r8++;
+ }
+ }
+ }
+}
+
+static void BuyMenuDrawEventObjects(void)
+{
+ u8 i;
+ u8 spriteId;
+ const struct EventObjectGraphicsInfo *graphicsInfo;
+
+ for (i = 0; i < 16; i++) // max objects?
+ {
+ if (gShopDataPtr->viewportObjects[i][EVENT_OBJ_ID] == 16)
+ continue;
+
+ graphicsInfo = GetEventObjectGraphicsInfo(gEventObjects[gShopDataPtr->viewportObjects[i][EVENT_OBJ_ID]].graphicsId);
+
+ spriteId = AddPseudoEventObject(
+ gEventObjects[gShopDataPtr->viewportObjects[i][EVENT_OBJ_ID]].graphicsId,
+ SpriteCallbackDummy,
+ (u16)gShopDataPtr->viewportObjects[i][X_COORD] * 16 + 8,
+ (u16)gShopDataPtr->viewportObjects[i][Y_COORD] * 16 + 48 - graphicsInfo->height / 2,
+ 2);
+
+ if (BuyMenuCheckIfEventObjectOverlapsMenuBg(gShopDataPtr->viewportObjects[i]) == TRUE)
+ {
+ gSprites[spriteId].subspriteTableNum = 4;
+ gSprites[spriteId].subspriteMode = 1;
+ }
+
+ StartSpriteAnim(&gSprites[spriteId], gShopDataPtr->viewportObjects[i][ANIM_NUM]);
+ }
+}
+
+static bool8 BuyMenuCheckIfEventObjectOverlapsMenuBg(s16 *object)
+{
+ if (!BuyMenuCheckForOverlapWithMenuBg(object[X_COORD], object[Y_COORD] + 2) && object[LAYER_TYPE] != MB_SECRET_BASE_WALL)
+ {
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void BuyMenuCopyMenuBgToBg1TilemapBuffer(void)
+{
+ s16 i;
+ u16 *dest = gShopDataPtr->tilemapBuffers[1];
+ const u16 *src = gShopDataPtr->tilemapBuffers[0];
+
+ for (i = 0; i < 1024; i++)
+ {
+ if (src[i] != 0)
+ {
+ dest[i] = src[i] + 0xC3E3;
+ }
+ }
+}
+
+static bool8 BuyMenuCheckForOverlapWithMenuBg(int x, int y)
+{
+ const u16 *metatile = gShopDataPtr->tilemapBuffers[0];
+ int offset1 = x * 2;
+ int offset2 = y * 64;
+
+ if (metatile[offset2 + offset1] == 0 &&
+ metatile[offset2 + offset1 + 32] == 0 &&
+ metatile[offset2 + offset1 + 1] == 0 &&
+ metatile[offset2 + offset1 + 33] == 0)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void Task_BuyMenu(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ s32 itemId = ListMenuHandleInputGetItemId(tListTaskId);
+ ListMenuGetScrollAndRow(tListTaskId, &gShopDataPtr->scrollOffset, &gShopDataPtr->selectedRow);
+
+ switch (itemId)
+ {
+ case LIST_NOTHING_CHOSEN:
+ break;
+ case LIST_B_PRESSED:
+ PlaySE(SE_SELECT);
+ ExitBuyMenu(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ tItemId = itemId;
+ ClearWindowTilemap(2);
+ BuyMenuRemoveScrollIndicatorArrows();
+ BuyMenuPrintCursor(tListTaskId, 2);
+
+ if (gMartInfo.martType == MART_TYPE_0)
+ {
+ gShopDataPtr->totalCost = (ItemId_GetPrice(itemId) >> GetPriceReduction(1));
+ }
+ else
+ {
+ gShopDataPtr->totalCost = gDecorations[itemId].price;
+ }
+
+ if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopDataPtr->totalCost))
+ {
+ BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList);
+ }
+ else
+ {
+ if (gMartInfo.martType == MART_TYPE_0)
+ {
+ CopyItemName(itemId, gStringVar1);
+ if (ItemId_GetPocket(itemId) == POCKET_TM_HM)
+ {
+ StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]);
+ BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany2, Task_BuyHowManyDialogueInit);
+ }
+ else
+ {
+ BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, Task_BuyHowManyDialogueInit);
+ }
+ }
+ else
+ {
+ StringCopy(gStringVar1, gDecorations[itemId].name);
+ ConvertIntToDecimalStringN(gStringVar2, gShopDataPtr->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6);
+
+ if (gMartInfo.martType == MART_TYPE_1)
+ StringExpandPlaceholders(gStringVar4, gText_Var1IsItThatllBeVar2);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_YouWantedVar1ThatllBeVar2);
+ BuyMenuDisplayMessage(taskId, gStringVar4, BuyMenuConfirmPurchase);
+ }
+ }
+ break;
+ }
+ }
+}
+
+static void Task_BuyHowManyDialogueInit(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ u16 quantityInBag = CountTotalItemQuantityInBag(tItemId);
+ u16 maxQuantity;
+
+ SetWindowBorderStyle(3, FALSE, 1, 13);
+ ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gText_InBagVar1);
+ BuyMenuPrint(3, gStringVar4, 0, 1, 0, 0);
+ tItemCount = 1;
+ SetWindowBorderStyle(4, FALSE, 1, 13);
+ BuyMenuPrintItemQuantityAndPrice(taskId);
+ schedule_bg_copy_tilemap_to_vram(0);
+
+ maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / gShopDataPtr->totalCost;
+
+ if (maxQuantity > 99)
+ {
+ gShopDataPtr->maxQuantity = 99;
+ }
+ else
+ {
+ gShopDataPtr->maxQuantity = maxQuantity;
+ }
+
+ gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput;
+}
+
+static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopDataPtr->maxQuantity) == TRUE)
+ {
+ gShopDataPtr->totalCost = (ItemId_GetPrice(tItemId) >> GetPriceReduction(1)) * tItemCount;
+ BuyMenuPrintItemQuantityAndPrice(taskId);
+ }
+ else
+ {
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_8198070(4, 0);
+ sub_8198070(3, 0);
+ ClearWindowTilemap(4);
+ ClearWindowTilemap(3);
+ PutWindowTilemap(1);
+ CopyItemName(tItemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar3, gShopDataPtr->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6);
+ BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, BuyMenuConfirmPurchase);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_8198070(4, 0);
+ sub_8198070(3, 0);
+ ClearWindowTilemap(4);
+ ClearWindowTilemap(3);
+ BuyMenuReturnToItemList(taskId);
+ }
+ }
+}
+
+static void BuyMenuConfirmPurchase(u8 taskId)
+{
+ CreateYesNoMenuWithCallbacks(taskId, &sShopBuyMenuYesNoWindowTemplates, 1, 0, 0, 1, 13, &sShopPurchaseYesNoFuncs);
+}
+
+static void BuyMenuTryMakePurchase(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ PutWindowTilemap(1);
+
+ if (gMartInfo.martType == MART_TYPE_0)
+ {
+ if (AddBagItem(tItemId, tItemCount) == TRUE)
+ {
+ BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney);
+ RecordItemPurchase(taskId);
+ }
+ else
+ {
+ BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, BuyMenuReturnToItemList);
+ }
+ }
+ else
+ {
+ if (DecorationAdd(tItemId))
+ {
+ if (gMartInfo.martType == MART_TYPE_1)
+ {
+ BuyMenuDisplayMessage(taskId, gText_ThankYouIllSendItHome, BuyMenuSubtractMoney);
+ }
+ else
+ {
+ BuyMenuDisplayMessage(taskId, gText_ThanksIllSendItHome, BuyMenuSubtractMoney);
}
}
+ else
+ {
+ BuyMenuDisplayMessage(taskId, gText_SpaceForVar1Full, BuyMenuReturnToItemList);
+ }
+ }
+}
+
+static void BuyMenuSubtractMoney(u8 taskId)
+{
+ IncrementGameStat(GAME_STAT_SHOPPED);
+ RemoveMoney(&gSaveBlock1Ptr->money, gShopDataPtr->totalCost);
+ PlaySE(SE_REGI);
+ PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0);
+
+ if (gMartInfo.martType == MART_TYPE_0)
+ {
+ gTasks[taskId].func = Task_ReturnToItemListAfterItemPurchase;
+ }
+ else
+ {
+ gTasks[taskId].func = Task_ReturnToItemListAfterDecorationPurchase;
}
}
-#else
-NAKED
-void BuyMenuDrawMapBg(void)
-{
- asm_unified("\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- ldr r0, =gMapHeader\n\
- ldr r0, [r0]\n\
- mov r9, r0\n\
- mov r4, sp\n\
- adds r4, 0x2\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- bl GetXYCoordsOneStepInFrontOfPlayer\n\
- mov r1, sp\n\
- mov r0, sp\n\
- ldrh r0, [r0]\n\
- subs r0, 0x4\n\
- strh r0, [r1]\n\
- ldrh r0, [r4]\n\
- subs r0, 0x4\n\
- strh r0, [r4]\n\
- movs r1, 0\n\
- mov r10, r4\n\
-_080E05B6:\n\
- movs r4, 0\n\
- lsls r7, r1, 16\n\
- asrs r0, r7, 16\n\
- mov r8, r0\n\
-_080E05BE:\n\
- mov r0, sp\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- lsls r4, 16\n\
- asrs r5, r4, 16\n\
- adds r0, r5\n\
- mov r2, r10\n\
- movs r3, 0\n\
- ldrsh r1, [r2, r3]\n\
- add r1, r8\n\
- bl MapGridGetMetatileIdAt\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
- adds r0, r5, 0\n\
- mov r1, r8\n\
- bl BuyMenuCheckForOverlapWithMenuBg\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _080E0608\n\
- mov r0, sp\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- adds r0, r5\n\
- mov r2, r10\n\
- movs r3, 0\n\
- ldrsh r1, [r2, r3]\n\
- add r1, r8\n\
- bl MapGridGetMetatileLayerTypeAt\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- b _080E060A\n\
- .pool\n\
-_080E0608:\n\
- movs r5, 0x1\n\
-_080E060A:\n\
- ldr r0, =0x000001ff\n\
- cmp r6, r0\n\
- bhi _080E062C\n\
- asrs r0, r4, 16\n\
- mov r2, r9\n\
- ldr r1, [r2, 0x10]\n\
- lsls r3, r6, 4\n\
- ldr r2, [r1, 0xC]\n\
- adds r2, r3\n\
- asrs r1, r7, 16\n\
- adds r3, r5, 0\n\
- bl BuyMenuDrawMapMetatile\n\
- b _080E0644\n\
- .pool\n\
-_080E062C:\n\
- asrs r0, r4, 16\n\
- mov r3, r9\n\
- ldr r2, [r3, 0x14]\n\
- ldr r3, =0xfffffe00\n\
- adds r1, r6, r3\n\
- lsls r1, 4\n\
- ldr r2, [r2, 0xC]\n\
- adds r2, r1\n\
- asrs r1, r7, 16\n\
- adds r3, r5, 0\n\
- bl BuyMenuDrawMapMetatile\n\
-_080E0644:\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- adds r0, r4, r1\n\
- lsrs r4, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0xE\n\
- ble _080E05BE\n\
- adds r0, r7, r1\n\
- lsrs r1, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x9\n\
- ble _080E05B6\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool");
-}
-#endif // NONMATCHING
+
+static void Task_ReturnToItemListAfterItemPurchase(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ if (tItemId == ITEM_POKE_BALL && tItemCount > 9 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE)
+ {
+ BuyMenuDisplayMessage(taskId, gText_ThrowInPremierBall, BuyMenuReturnToItemList);
+ }
+ else
+ {
+ BuyMenuReturnToItemList(taskId);
+ }
+ }
+}
+
+static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId)
+{
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BuyMenuReturnToItemList(taskId);
+ }
+}
+
+static void BuyMenuReturnToItemList(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ sub_8197DF8(5, 0);
+ BuyMenuPrintCursor(tListTaskId, 1);
+ PutWindowTilemap(1);
+ PutWindowTilemap(2);
+ schedule_bg_copy_tilemap_to_vram(0);
+ BuyMenuAddScrollIndicatorArrows();
+ gTasks[taskId].func = Task_BuyMenu;
+}
+
+static void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ FillWindowPixelBuffer(4, 0x11);
+ PrintMoneyAmount(4, 38, 1, gShopDataPtr->totalCost, TEXT_SPEED_FF);
+ ConvertIntToDecimalStringN(gStringVar1, tItemCount, 2, 2);
+ StringExpandPlaceholders(gStringVar4, gText_xVar1);
+ BuyMenuPrint(4, gStringVar4, 0, 1, 0, 0);
+}
+
+static void ExitBuyMenu(u8 taskId)
+{
+ gFieldCallback = MapPostLoadHook_ReturnToShopMenu;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gTasks[taskId].func = Task_ExitBuyMenu;
+}
+
+static void Task_ExitBuyMenu(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ RemoveMoneyLabelObject();
+ BuyMenuFreeMemory();
+ SetMainCallback2(CB2_ReturnToField);
+ DestroyTask(taskId);
+ }
+}
+
+static void ClearItemPurchases(void)
+{
+ gMartPurchaseHistoryId = 0;
+ memset(gMartPurchaseHistory, 0, sizeof(gMartPurchaseHistory));
+}
+
+static void RecordItemPurchase(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ u16 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gMartPurchaseHistory[i].itemId == tItemId && gMartPurchaseHistory[i].quantity != 0)
+ {
+ if (gMartPurchaseHistory[i].quantity + tItemCount > 255)
+ {
+ gMartPurchaseHistory[i].quantity = 255;
+ }
+ else
+ {
+ gMartPurchaseHistory[i].quantity += tItemCount;
+ }
+ return;
+ }
+ }
+
+ if (gMartPurchaseHistoryId < 3)
+ {
+ gMartPurchaseHistory[gMartPurchaseHistoryId].itemId = tItemId;
+ gMartPurchaseHistory[gMartPurchaseHistoryId].quantity = tItemCount;
+ gMartPurchaseHistoryId++;
+ }
+}
+
+#undef tItemCount
+#undef tItemId
+#undef tListTaskId
+
+void CreatePokemartMenu(const u16 *itemsForSale)
+{
+ CreateShopMenu(MART_TYPE_0);
+ SetShopItemsForSale(itemsForSale);
+ ClearItemPurchases();
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+void CreateDecorationShop1Menu(const u16 *itemsForSale)
+{
+ CreateShopMenu(MART_TYPE_1);
+ SetShopItemsForSale(itemsForSale);
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+void CreateDecorationShop2Menu(const u16 *itemsForSale)
+{
+ CreateShopMenu(MART_TYPE_2);
+ SetShopItemsForSale(itemsForSale);
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
diff --git a/src/strings.c b/src/strings.c
index cdbbb4468..15c247744 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -349,9 +349,9 @@ const u8 gText_Var1ThrownAway[] = _("The {STR_VAR_1}\nwas thrown away.");
const u8 gText_Var1AteTheVar2[] = _("{STR_VAR_1} ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
const u8 gText_Var1HappilyAteVar2[] = _("{STR_VAR_1} happily ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
const u8 gText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}");
-const u8 gUnknown_085E93C7[] = _("BUY");
-const u8 gUnknown_085E93CB[] = _("SELL");
-const u8 gUnknown_085E93D0[] = _("QUIT");
+const u8 gText_ShopBuy[] = _("BUY");
+const u8 gText_ShopSell[] = _("SELL");
+const u8 gText_ShopQuit[] = _("QUIT");
const u8 gText_InBagVar1[] = _("IN BAG: {STR_VAR_1}");
const u8 gText_QuitShopping[] = _("Quit shopping.");
const u8 gText_Var1CertainlyHowMany[] = _("{STR_VAR_1}? Certainly.\nHow many would you like?");
diff --git a/src/tv.c b/src/tv.c
index af1102c2d..fb309f6e3 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1580,7 +1580,7 @@ void SaveRecordedItemPurchasesForTVShow(void)
if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_SMART_SHOPPER, FALSE) != TRUE)
{
TV_SortPurchasesByQuantity();
- if (gUnknown_02039F80[0].quantity >= 20)
+ if (gMartPurchaseHistory[0].quantity >= 20)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
show->smartshopperShow.kind = TVSHOW_SMART_SHOPPER;
@@ -1588,8 +1588,8 @@ void SaveRecordedItemPurchasesForTVShow(void)
show->smartshopperShow.shopLocation = gMapHeader.regionMapSectionId;
for (i = 0; i < 3; i ++)
{
- show->smartshopperShow.itemIds[i] = gUnknown_02039F80[i].itemId;
- show->smartshopperShow.itemAmounts[i] = gUnknown_02039F80[i].quantity;
+ show->smartshopperShow.itemIds[i] = gMartPurchaseHistory[i].itemId;
+ show->smartshopperShow.itemAmounts[i] = gMartPurchaseHistory[i].quantity;
}
show->smartshopperShow.priceReduced = GetPriceReduction(1);
StringCopy(show->smartshopperShow.playerName, gSaveBlock2Ptr->playerName);
@@ -2992,14 +2992,14 @@ void TV_SortPurchasesByQuantity(void)
{
for (j = i + 1; j < 3; j ++)
{
- if (gUnknown_02039F80[i].quantity < gUnknown_02039F80[j].quantity)
- {
- tmpId = gUnknown_02039F80[i].itemId;
- tmpQn = gUnknown_02039F80[i].quantity;
- gUnknown_02039F80[i].itemId = gUnknown_02039F80[j].itemId;
- gUnknown_02039F80[i].quantity = gUnknown_02039F80[j].quantity;
- gUnknown_02039F80[j].itemId = tmpId;
- gUnknown_02039F80[j].quantity = tmpQn;
+ if (gMartPurchaseHistory[i].quantity < gMartPurchaseHistory[j].quantity)
+ {
+ tmpId = gMartPurchaseHistory[i].itemId;
+ tmpQn = gMartPurchaseHistory[i].quantity;
+ gMartPurchaseHistory[i].itemId = gMartPurchaseHistory[j].itemId;
+ gMartPurchaseHistory[i].quantity = gMartPurchaseHistory[j].quantity;
+ gMartPurchaseHistory[j].itemId = tmpId;
+ gMartPurchaseHistory[j].quantity = tmpQn;
}
}
}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 7219e38c1..db4f7935f 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -373,27 +373,10 @@ gUnknown_02039F5C: @ 2039F5C
gUnknown_02039F5D: @ 2039F5D
.space 0x3
-gMartInfo: @ 2039F60
- .space 0x10
-
-gShopDataPtr: @ 2039F70
- .space 0x4
-
-gUnknown_02039F74: @ 2039F74
- .space 0x4
-
-gUnknown_02039F78: @ 2039F78
- .space 0x4
-
-gUnknown_02039F7C: @ 2039F7C
- .space 0x4
-
-gUnknown_02039F80: @ 2039F80
- .space 0xC
-
-gUnknown_02039F8C: @ 2039F8C
- .space 0x4
+ .include "src/shop.o"
+ .include "src/fldeff_escalator.o"
+ .align 2
gUnknown_02039F90: @ 2039F90
.space 0x4