pokered/engine/events/prize_menu.asm

302 lines
5.6 KiB
NASM
Raw Permalink Normal View History

CeladonPrizeMenu::
ld b, COIN_CASE
2014-05-22 22:13:20 +00:00
call IsItemInBag
jr nz, .havingCoinCase
ld hl, RequireCoinCaseTextPtr
2014-05-22 22:13:20 +00:00
jp PrintText
.havingCoinCase
ld hl, wStatusFlags5
set BIT_NO_TEXT_DELAY, [hl]
ld hl, ExchangeCoinsForPrizesTextPtr
2014-05-22 22:13:20 +00:00
call PrintText
; the following are the menu settings
xor a
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
ld a, A_BUTTON | B_BUTTON
ld [wMenuWatchedKeys], a
ld a, $03
ld [wMaxMenuItem], a
ld a, $04
ld [wTopMenuItemY], a
ld a, $01
ld [wTopMenuItemX], a
call PrintPrizePrice
hlcoord 0, 2
2016-06-12 04:30:05 +00:00
ld b, 8
ld c, 16
2014-05-22 22:13:20 +00:00
call TextBoxBorder
call GetPrizeMenuId
2014-05-22 22:13:20 +00:00
call UpdateSprites
ld hl, WhichPrizeTextPtr
2014-05-22 22:13:20 +00:00
call PrintText
call HandleMenuInput ; menu choice handler
bit BIT_B_BUTTON, a
2016-06-12 04:30:05 +00:00
jr nz, .noChoice
ld a, [wCurrentMenuItem]
2016-06-12 04:30:05 +00:00
cp 3 ; "NO,THANKS" choice
jr z, .noChoice
call HandlePrizeChoice
2016-06-12 04:30:05 +00:00
.noChoice
ld hl, wStatusFlags5
res BIT_NO_TEXT_DELAY, [hl]
2014-05-22 22:13:20 +00:00
ret
2016-06-12 00:24:04 +00:00
RequireCoinCaseTextPtr:
text_far _RequireCoinCaseText
text_waitbutton
text_end
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
ExchangeCoinsForPrizesTextPtr:
text_far _ExchangeCoinsForPrizesText
text_end
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
WhichPrizeTextPtr:
text_far _WhichPrizeText
text_end
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
GetPrizeMenuId:
; determine which one among the three prize texts has been selected using the text ID (stored in [hTextID])
; prize texts' IDs are TEXT_GAMECORNERPRIZEROOM_PRIZE_VENDOR_1-TEXT_GAMECORNERPRIZEROOM_PRIZE_VENDOR_3
; load the three prizes at wPrize1-wPrice3
; load the three prices at wPrize1Price-wPrize3Price
; display the three prizes' names, distinguishing between Pokemon names and item names (specifically TMs)
ldh a, [hTextID]
sub TEXT_GAMECORNERPRIZEROOM_PRIZE_VENDOR_1
ld [wWhichPrizeWindow], a ; prize texts' relative ID (i.e. 0-2)
2014-05-22 22:13:20 +00:00
add a
add a
ld d, 0
ld e, a
ld hl, PrizeDifferentMenuPtrs
add hl, de
ld a, [hli]
ld d, [hl]
ld e, a
2014-05-22 22:13:20 +00:00
inc hl
push hl
ld hl, wPrize1
call CopyString
2014-05-22 22:13:20 +00:00
pop hl
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wPrize1Price
ld bc, 6
2014-05-22 22:13:20 +00:00
call CopyData
ld a, [wWhichPrizeWindow]
cp 2 ; is TM_menu?
jr nz, .putMonName
ld a, [wPrize1]
ld [wNamedObjectIndex], a
2014-05-22 22:13:20 +00:00
call GetItemName
hlcoord 2, 4
2014-05-22 22:13:20 +00:00
call PlaceString
ld a, [wPrize2]
ld [wNamedObjectIndex], a
2014-05-22 22:13:20 +00:00
call GetItemName
hlcoord 2, 6
2014-05-22 22:13:20 +00:00
call PlaceString
ld a, [wPrize3]
ld [wNamedObjectIndex], a
2014-05-22 22:13:20 +00:00
call GetItemName
hlcoord 2, 8
2014-05-22 22:13:20 +00:00
call PlaceString
jr .putNoThanksText
.putMonName
ld a, [wPrize1]
ld [wNamedObjectIndex], a
2014-05-22 22:13:20 +00:00
call GetMonName
hlcoord 2, 4
2014-05-22 22:13:20 +00:00
call PlaceString
ld a, [wPrize2]
ld [wNamedObjectIndex], a
2014-05-22 22:13:20 +00:00
call GetMonName
hlcoord 2, 6
2014-05-22 22:13:20 +00:00
call PlaceString
ld a, [wPrize3]
ld [wNamedObjectIndex], a
2014-05-22 22:13:20 +00:00
call GetMonName
hlcoord 2, 8
2014-05-22 22:13:20 +00:00
call PlaceString
.putNoThanksText
hlcoord 2, 10
ld de, NoThanksText
2014-05-22 22:13:20 +00:00
call PlaceString
; put prices on the right side of the textbox
ld de, wPrize1Price
hlcoord 13, 5
2014-05-22 22:13:20 +00:00
; reg. c:
; [low nybble] number of bytes
; [bits 765 = %100] space-padding (not zero-padding)
ld c, (1 << 7 | 2)
call PrintBCDNumber
ld de, wPrize2Price
hlcoord 13, 7
ld c, (1 << 7 | 2)
2014-05-22 22:13:20 +00:00
call PrintBCDNumber
ld de, wPrize3Price
hlcoord 13, 9
ld c, (1 << 7 | 2)
2014-05-22 22:13:20 +00:00
jp PrintBCDNumber
INCLUDE "data/events/prizes.asm"
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
PrintPrizePrice:
hlcoord 11, 0
2016-06-12 04:30:05 +00:00
ld b, 1
ld c, 7
2014-05-22 22:13:20 +00:00
call TextBoxBorder
call UpdateSprites
hlcoord 12, 0
2016-06-12 04:30:05 +00:00
ld de, .CoinString
2014-05-22 22:13:20 +00:00
call PlaceString
hlcoord 13, 1
2016-06-12 04:30:05 +00:00
ld de, .SixSpacesString
2014-05-22 22:13:20 +00:00
call PlaceString
hlcoord 13, 1
ld de, wPlayerCoins
ld c, %10000010
2014-05-22 22:13:20 +00:00
call PrintBCDNumber
ret
2016-06-12 04:30:05 +00:00
.CoinString:
2014-05-22 22:13:20 +00:00
db "COIN@"
2016-06-12 04:30:05 +00:00
.SixSpacesString:
2014-05-22 22:13:20 +00:00
db " @"
2016-06-12 00:24:04 +00:00
LoadCoinsToSubtract:
ld a, [wWhichPrize]
2014-05-22 22:13:20 +00:00
add a
ld d, 0
ld e, a
ld hl, wPrize1Price
add hl, de ; get selected prize's price
2014-05-22 22:13:20 +00:00
xor a
ldh [hUnusedCoinsByte], a
ld a, [hli]
ldh [hCoins], a
ld a, [hl]
ldh [hCoins + 1], a
2014-05-22 22:13:20 +00:00
ret
2016-06-12 00:24:04 +00:00
HandlePrizeChoice:
ld a, [wCurrentMenuItem]
ld [wWhichPrize], a
ld d, 0
ld e, a
ld hl, wPrize1
add hl, de
ld a, [hl]
ld [wNamedObjectIndex], a
ld a, [wWhichPrizeWindow]
2016-06-12 04:30:05 +00:00
cp 2 ; is prize a TM?
jr nz, .getMonName
2014-05-22 22:13:20 +00:00
call GetItemName
2016-06-12 04:30:05 +00:00
jr .givePrize
.getMonName
2014-05-22 22:13:20 +00:00
call GetMonName
2016-06-12 04:30:05 +00:00
.givePrize
ld hl, SoYouWantPrizeTextPtr
2014-05-22 22:13:20 +00:00
call PrintText
2015-07-26 02:26:54 +00:00
call YesNoChoice
ld a, [wCurrentMenuItem] ; yes/no answer (Y=0, N=1)
2014-05-22 22:13:20 +00:00
and a
2016-06-12 04:30:05 +00:00
jr nz, .printOhFineThen
2014-05-22 22:13:20 +00:00
call LoadCoinsToSubtract
call HasEnoughCoins
2016-06-12 04:30:05 +00:00
jr c, .notEnoughCoins
ld a, [wWhichPrizeWindow]
cp 2 ; is prize a TM?
2016-06-12 04:30:05 +00:00
jr nz, .giveMon
ld a, [wNamedObjectIndex]
ld b, a
ld a, 1
ld c, a
call GiveItem
2016-06-12 04:30:05 +00:00
jr nc, .bagFull
jr .subtractCoins
.giveMon
ld a, [wNamedObjectIndex]
ld [wCurPartySpecies], a
2014-05-22 22:13:20 +00:00
push af
call GetPrizeMonLevel
ld c, a
2014-05-22 22:13:20 +00:00
pop af
ld b, a
2014-05-22 22:13:20 +00:00
call GivePokemon
2015-07-19 03:49:52 +00:00
; If either the party or box was full, wait after displaying message.
2014-05-22 22:13:20 +00:00
push af
ld a, [wAddedToParty]
2014-05-22 22:13:20 +00:00
and a
call z, WaitForTextScrollButtonPress
2014-05-22 22:13:20 +00:00
pop af
2015-07-19 03:49:52 +00:00
; If the mon couldn't be given to the player (because both the party and box
; were full), return without subtracting coins.
2014-05-22 22:13:20 +00:00
ret nc
2015-07-19 03:49:52 +00:00
2016-06-12 04:30:05 +00:00
.subtractCoins
2014-05-22 22:13:20 +00:00
call LoadCoinsToSubtract
ld hl, hCoins + 1
ld de, wPlayerCoins + 1
ld c, $02 ; how many bytes
2015-07-19 03:49:52 +00:00
predef SubBCDPredef
2014-05-22 22:13:20 +00:00
jp PrintPrizePrice
2016-06-12 04:30:05 +00:00
.bagFull
ld hl, PrizeRoomBagIsFullTextPtr
2014-05-22 22:13:20 +00:00
jp PrintText
2016-06-12 04:30:05 +00:00
.notEnoughCoins
ld hl, SorryNeedMoreCoinsText
2014-05-22 22:13:20 +00:00
jp PrintText
2016-06-12 04:30:05 +00:00
.printOhFineThen
ld hl, OhFineThenTextPtr
2014-05-22 22:13:20 +00:00
jp PrintText
2016-06-12 04:30:05 +00:00
UnknownPrizeData:
2014-05-22 22:13:20 +00:00
; XXX what's this?
db $00,$01,$00,$01,$00,$01,$00,$00,$01
2016-06-12 00:24:04 +00:00
HereYouGoTextPtr:
text_far _HereYouGoText
text_waitbutton
text_end
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
SoYouWantPrizeTextPtr:
text_far _SoYouWantPrizeText
text_end
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
SorryNeedMoreCoinsText:
text_far _SorryNeedMoreCoinsText
text_waitbutton
text_end
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
PrizeRoomBagIsFullTextPtr:
text_far _OopsYouDontHaveEnoughRoomText
text_waitbutton
text_end
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
OhFineThenTextPtr:
text_far _OhFineThenText
text_waitbutton
text_end
2014-05-22 22:13:20 +00:00
2016-06-12 00:24:04 +00:00
GetPrizeMonLevel:
ld a, [wCurPartySpecies]
ld b, a
ld hl, PrizeMonLevelDictionary
.loop
ld a, [hli]
2014-05-22 22:13:20 +00:00
cp b
jr z, .matchFound
2014-05-22 22:13:20 +00:00
inc hl
jr .loop
.matchFound
ld a, [hl]
ld [wCurEnemyLevel], a
2014-05-22 22:13:20 +00:00
ret
INCLUDE "data/events/prize_mon_levels.asm"