summaryrefslogtreecommitdiff
path: root/engine/overworld/pokemart.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/overworld/pokemart.asm')
-rwxr-xr-xengine/overworld/pokemart.asm256
1 files changed, 256 insertions, 0 deletions
diff --git a/engine/overworld/pokemart.asm b/engine/overworld/pokemart.asm
new file mode 100755
index 00000000..6e6f5ee2
--- /dev/null
+++ b/engine/overworld/pokemart.asm
@@ -0,0 +1,256 @@
+DisplayPokemartDialogue_: ; 6c20 (1:6c20)
+ ld a,[wListScrollOffset]
+ ld [$d07e],a
+ call UpdateSprites ; move sprites
+ xor a
+ ld [$cf0a],a ; flag that is set if something is sold or bought
+.loop
+ xor a
+ ld [wListScrollOffset],a
+ ld [wCurrentMenuItem],a
+ ld [$cc2f],a
+ inc a
+ ld [$cf93],a
+ ld a,$13
+ ld [$d125],a
+ call DisplayTextBoxID ; draw money text box
+ ld a,$15
+ ld [$d125],a
+ call DisplayTextBoxID ; do buy/sell/quit menu
+ ld hl,$d128 ; pointer to this pokemart's inventory
+ ld a,[hli]
+ ld l,[hl]
+ ld h,a ; hl = address of inventory
+ ld a,[$d12e]
+ cp a,$02
+ jp z,.done
+ ld a,[$d12d] ; ID of the chosen menu item
+ and a ; buying?
+ jp z,.buyMenu
+ dec a ; selling?
+ jp z,.sellMenu
+ dec a ; quitting?
+ jp z,.done
+.sellMenu
+ xor a
+ ld [$cf93],a
+ ld a,$02
+ ld [$d11b],a
+ callab Func_39bd5
+ ld a,[wNumBagItems]
+ and a
+ jp z,.bagEmpty
+ ld hl,PokemonSellingGreetingText
+ call PrintText
+ call SaveScreenTilesToBuffer1 ; save screen
+.sellMenuLoop
+ call LoadScreenTilesFromBuffer1 ; restore saved screen
+ ld a,$13
+ ld [$d125],a
+ call DisplayTextBoxID ; draw money text box
+ ld hl,wNumBagItems
+ ld a,l
+ ld [$cf8b],a
+ ld a,h
+ ld [$cf8c],a
+ xor a
+ ld [$cf93],a
+ ld [wCurrentMenuItem],a
+ ld a,ITEMLISTMENU
+ ld [wListMenuID],a
+ call DisplayListMenuID
+ jp c,.returnToMainPokemartMenu ; if the player closed the menu
+.confirmItemSale ; if the player is trying to sell a specific item
+ call IsKeyItem ; check if item is unsellable
+ ld a,[$d124]
+ and a
+ jr nz,.unsellableItem
+ ld a,[$cf91]
+ call IsItemHM
+ jr c,.unsellableItem
+ ld a,PRICEDITEMLISTMENU
+ ld [wListMenuID],a
+ ld [$ff8e],a ; halve prices when selling
+ call DisplayChooseQuantityMenu
+ inc a
+ jr z,.sellMenuLoop ; if the player closed the choose quantity menu with the B button
+ ld hl,PokemartTellSellPriceText
+ ld bc,$0e01
+ call PrintText
+ FuncCoord 14,7
+ ld hl,Coord
+ ld bc,$080f
+ ld a,$14
+ ld [$d125],a
+ call DisplayTextBoxID ; yes/no menu
+ ld a,[$d12e]
+ cp a,$02
+ jr z,.sellMenuLoop ; if the player pressed the B button
+ ld a,[$d12d] ; ID of the chosen menu item
+ dec a
+ jr z,.sellMenuLoop ; if the player chose No
+.sellItem
+ ld a,[$cf0a] ; flag that is set if something is sold or bought
+ and a
+ jr nz,.skipSettingFlag1
+ inc a
+ ld [$cf0a],a
+.skipSettingFlag1
+ call AddAmountSoldToMoney
+ ld hl,wNumBagItems
+ call RemoveItemFromInventory
+ jp .sellMenuLoop
+.unsellableItem
+ ld hl,PokemartUnsellableItemText
+ call PrintText
+ jp .returnToMainPokemartMenu
+.bagEmpty
+ ld hl,PokemartItemBagEmptyText
+ call PrintText
+ call SaveScreenTilesToBuffer1 ; save screen
+ jp .returnToMainPokemartMenu
+.buyMenu
+ ld a,$01
+ ld [$cf93],a
+ ld a,$03
+ ld [$d11b],a
+ callab Func_39bd5
+ ld hl,PokemartBuyingGreetingText
+ call PrintText
+ call SaveScreenTilesToBuffer1 ; save screen
+.buyMenuLoop
+ call LoadScreenTilesFromBuffer1 ; restore saved screen
+ ld a,$13
+ ld [$d125],a
+ call DisplayTextBoxID ; draw money text box
+ ld hl,$cf7b
+ ld a,l
+ ld [$cf8b],a
+ ld a,h
+ ld [$cf8c],a
+ xor a
+ ld [wCurrentMenuItem],a
+ inc a
+ ld [$cf93],a
+ inc a ; a = 2 (PRICEDITEMLISTMENU)
+ ld [wListMenuID],a
+ call DisplayListMenuID
+ jr c,.returnToMainPokemartMenu ; if the player closed the menu
+ ld a,$63
+ ld [$cf97],a
+ xor a
+ ld [$ff8e],a
+ call DisplayChooseQuantityMenu
+ inc a
+ jr z,.buyMenuLoop ; if the player closed the choose quantity menu with the B button
+ ld a,[$cf91] ; item ID
+ ld [$d11e],a ; store item ID for GetItemName
+ call GetItemName
+ call CopyStringToCF4B ; copy name to $cf4b
+ ld hl,PokemartTellBuyPriceText
+ call PrintText
+ FuncCoord 14,7
+ ld hl,Coord
+ ld bc,$080f
+ ld a,$14
+ ld [$d125],a
+ call DisplayTextBoxID ; yes/no menu
+ ld a,[$d12e]
+ cp a,$02
+ jp z,.buyMenuLoop ; if the player pressed the B button
+ ld a,[$d12d] ; ID of the chosen menu item
+ dec a
+ jr z,.buyMenuLoop ; if the player chose No
+.buyItem
+ call .isThereEnoughMoney
+ jr c,.notEnoughMoney
+ ld hl,wNumBagItems
+ call AddItemToInventory
+ jr nc,.bagFull
+ call SubtractAmountPaidFromMoney
+ ld a,[$cf0a] ; flag that is set if something is sold or bought
+ and a
+ jr nz,.skipSettingFlag2
+ ld a,$01
+ ld [$cf0a],a
+.skipSettingFlag2
+ ld a,(SFX_02_5a - SFX_Headers_02) / 3
+ call PlaySoundWaitForCurrent ; play sound
+ call WaitForSoundToFinish ; wait until sound is done playing
+ ld hl,PokemartBoughtItemText
+ call PrintText
+ jp .buyMenuLoop
+.returnToMainPokemartMenu
+ call LoadScreenTilesFromBuffer1 ; restore save screen
+ ld a,$13
+ ld [$d125],a
+ call DisplayTextBoxID ; draw money text box
+ ld hl,PokemartAnythingElseText
+ call PrintText
+ jp .loop
+.isThereEnoughMoney
+ ld de,wPlayerMoney
+ ld hl,$ff9f ; item price
+ ld c,3 ; length of money in bytes
+ jp StringCmp
+.notEnoughMoney
+ ld hl,PokemartNotEnoughMoneyText
+ call PrintText
+ jr .returnToMainPokemartMenu
+.bagFull
+ ld hl,PokemartItemBagFullText
+ call PrintText
+ jr .returnToMainPokemartMenu
+.done
+ ld hl,PokemartThankYouText
+ call PrintText
+ ld a,$01
+ ld [$cfcb],a
+ call UpdateSprites ; move sprites
+ ld a,[$d07e]
+ ld [wListScrollOffset],a
+ ret
+
+PokemartBuyingGreetingText: ; 6e0c (1:6e0c)
+ TX_FAR _PokemartBuyingGreetingText
+ db "@"
+
+PokemartTellBuyPriceText: ; 6e11 (1:6e11)
+ TX_FAR _PokemartTellBuyPriceText
+ db "@"
+
+PokemartBoughtItemText: ; 6e16 (1:6e16)
+ TX_FAR _PokemartBoughtItemText
+ db "@"
+
+PokemartNotEnoughMoneyText: ; 6e1b (1:6e1b)
+ TX_FAR _PokemartNotEnoughMoneyText
+ db "@"
+
+PokemartItemBagFullText: ; 6e20 (1:6e20)
+ TX_FAR _PokemartItemBagFullText
+ db "@"
+
+PokemonSellingGreetingText: ; 6e25 (1:6e25)
+ TX_FAR _PokemonSellingGreetingText
+ db "@"
+
+PokemartTellSellPriceText: ; 6e2a (1:6e2a)
+ TX_FAR _PokemartTellSellPriceText
+ db "@"
+
+PokemartItemBagEmptyText: ; 6e2f (1:6e2f)
+ TX_FAR _PokemartItemBagEmptyText
+ db "@"
+
+PokemartUnsellableItemText: ; 6e34 (1:6e34)
+ TX_FAR _PokemartUnsellableItemText
+ db "@"
+
+PokemartThankYouText: ; 6e39 (1:6e39)
+ TX_FAR _PokemartThankYouText
+ db "@"
+
+PokemartAnythingElseText: ; 6e3e (1:6e3e)
+ TX_FAR _PokemartAnythingElseText
+ db "@"