diff options
Diffstat (limited to 'engine/overworld/pokemart.asm')
-rwxr-xr-x | engine/overworld/pokemart.asm | 256 |
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 "@" |