mirror of
https://github.com/thornAvery/kep-hack.git
synced 2026-02-22 07:02:17 +13:00
Pull a lot of engine out of main.asm
This commit is contained in:
parent
ea3ba4cde3
commit
15427f5320
110 changed files with 39093 additions and 38990 deletions
256
engine/overworld/pokemart.asm
Executable file
256
engine/overworld/pokemart.asm
Executable file
|
|
@ -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 "@"
|
||||
Loading…
Add table
Add a link
Reference in a new issue