ref: 7911bc130943392a9aa901139c924aa9658e015f
dir: /engine/menu/prize_menu.asm/
CeladonPrizeMenu: ; 5271b (14:671b) ld b,COIN_CASE call IsItemInBag jr nz,.havingCoinCase ld hl,RequireCoinCaseTextPtr jp PrintText .havingCoinCase ld hl,$D730 set 6,[hl] ld hl,ExchangeCoinsForPrizesTextPtr call PrintText ; the following are the menu settings xor a ld [$CC26],a ld [$CC2A],a ld a,$03 ld [$CC29],a ld a,$03 ld [$CC28],a ld a,$04 ld [$CC24],a ld a,$01 ld [$CC25],a call PrintPrizePrice ; 687A FuncCoord 0,2 ld hl,Coord ld b,$08 ld c,$10 call TextBoxBorder call GetPrizeMenuId ;678E call UpdateSprites ld hl,WhichPrizeTextPtr call PrintText call HandleMenuInput ; menu choice handler bit 1,a ; keypress = B (Cancel) jr nz,.NoChoice ld a,[$CC26] cp a,$03 ; "NO,THANKS" choice jr z,.NoChoice call HandlePrizeChoice ; 14:68C6 .NoChoice ld hl,$D730 res 6,[hl] ret RequireCoinCaseTextPtr: ; 5277e (14:677e) TX_FAR _RequireCoinCaseText db $0D db "@" ExchangeCoinsForPrizesTextPtr: ; 52784 (14:6784) TX_FAR _ExchangeCoinsForPrizesText db "@" WhichPrizeTextPtr: ; 52789 (14:6789) TX_FAR _WhichPrizeText db "@" GetPrizeMenuId: ; 5278e (14:678e) ; determine which one among the three ; prize-texts has been selected ; using the text ID (stored in [$FF8C]) ; load the three prizes at $D13D-$D13F ; load the three prices at $D141-$D146 ; display the three prizes' names ; (distinguishing between Pokemon names ; and Items (specifically TMs) names) ld a,[$FF8C] sub a,$03 ; prize-texts' id are 3, 4 and 5 ld [$D12F],a ; prize-texts' id (relative, i.e. 0, 1 or 2) add a add a ld d,$00 ld e,a ld hl,PrizeDifferentMenuPtrs add hl,de ld a,[hli] ld d,[hl] ld e,a inc hl push hl ld hl,W_PRIZE1 call CopyString ; XXX what does this do pop hl ld a,[hli] ld h,[hl] ld l,a ld de,$D141 ld bc,$0006 call CopyData ld a,[$D12F] cp a,$02 ;is TM_menu? jr nz,.putMonName ld a,[W_PRIZE1] ld [$D11E],a call GetItemName FuncCoord 2,4 ld hl,Coord call PlaceString ld a,[W_PRIZE2] ld [$D11E],a call GetItemName FuncCoord 2,6 ld hl,Coord call PlaceString ld a,[W_PRIZE3] ld [$D11E],a call GetItemName FuncCoord 2,8 ld hl,Coord call PlaceString jr .putNoThanksText .putMonName ; 14:67EC ld a,[W_PRIZE1] ld [$D11E],a call GetMonName FuncCoord 2,4 ld hl,Coord call PlaceString ld a,[W_PRIZE2] ld [$D11E],a call GetMonName FuncCoord 2,6 ld hl,Coord call PlaceString ld a,[W_PRIZE3] ld [$D11E],a call GetMonName FuncCoord 2,8 ld hl,Coord call PlaceString .putNoThanksText ; 14:6819 FuncCoord 2,10 ld hl,Coord ld de,NoThanksText call PlaceString ; put prices on the right side of the textbox ld de,$D141 FuncCoord 13,5 ld hl,Coord ; reg. c: ; [low nybble] number of bytes ; [bit 765 = %100] space-padding (not zero-padding) ld c,(1 << 7 | 2) ; Function $15CD displays BCD value (same routine ; used by text-command $02) call PrintBCDNumber ; Print_BCD ld de,$D143 FuncCoord 13,7 ld hl,Coord ld c,(%1 << 7 | 2) call PrintBCDNumber ld de,$D145 FuncCoord 13,9 ld hl,Coord ld c,(1 << 7 | 2) jp PrintBCDNumber INCLUDE "data/prizes.asm" PrintPrizePrice: ; 5287a (14:687a) FuncCoord 11,0 ld hl,Coord ld b,$01 ld c,$07 call TextBoxBorder call UpdateSprites ; XXX save OAM? FuncCoord 12,0 ld hl,Coord ld de,.CoinText call PlaceString FuncCoord 13,1 ld hl,Coord ld de,.SixSpacesText call PlaceString FuncCoord 13,1 ld hl,Coord ld de,wPlayerCoins ld c,%10000010 call PrintBCDNumber ret .CoinText ; 14:68A5 db "COIN@" .SixSpacesText ; 14:68AA db " @" LoadCoinsToSubtract: ; 528b1 (14:68b1) ld a,[$D139] ; backup of selected menu_entry add a ld d,$00 ld e,a ld hl,$D141 ; first prize's price add hl,de ; get selected prize's price xor a ld [$FF9F],a ld a,[hli] ld [$FFA0],a ld a,[hl] ld [$FFA1],a ret HandlePrizeChoice: ; 528c6 (14:68c6) ld a,[$CC26] ; selected menu_entry ld [$D139],a ld d,$00 ld e,a ld hl,W_PRIZE1 add hl,de ld a,[hl] ld [$D11E],a ld a,[$D12F] cp a,$02 ; is prize a TM? jr nz,.GetMonName call GetItemName jr .GivePrize .GetMonName ; 14:68E3 call GetMonName .GivePrize ; 14:68E6 ld hl,SoYouWantPrizeTextPtr call PrintText call YesNoChoice ; yes/no textbox ld a,[$CC26] ; yes/no answer (Y=0, N=1) and a jr nz,.PrintOhFineThen call LoadCoinsToSubtract call HasEnoughCoins jr c,.NotEnoughCoins ld a,[$D12F] cp a,$02 jr nz,.GiveMon ld a,[$D11E] ld b,a ld a,1 ld c,a call GiveItem ; GiveItem jr nc,.BagFull jr .SubtractCoins .GiveMon ; 14:6912 ld a,[$D11E] ld [$CF91],a push af call GetPrizeMonLevel ; 14:6977 ld c,a pop af ld b,a call GivePokemon push af ld a,[$CCD3] ; XXX is there room? and a call z,WaitForTextScrollButtonPress pop af ret nc .SubtractCoins ; 14:692C call LoadCoinsToSubtract ld hl,$FFA1 ld de,wPlayerCoins + 1 ld c,$02 ; how many bytes ld a,$0C call Predef ; subtract coins (BCD daa operations) jp PrintPrizePrice .BagFull ld hl,PrizeRoomBagIsFullTextPtr jp PrintText .NotEnoughCoins ; 14:6945 ld hl,SorryNeedMoreCoinsText jp PrintText .PrintOhFineThen ; 14:694B ld hl,OhFineThenTextPtr jp PrintText UnknownData52951: ; 52951 (14:6951) ; XXX what's this? db $00,$01,$00,$01,$00,$01,$00,$00,$01 HereYouGoTextPtr: ; 5295a (14:695a) TX_FAR _HereYouGoText db $0D db "@" SoYouWantPrizeTextPtr: ; 52960 (14:6960) TX_FAR _SoYouWantPrizeText db "@" SorryNeedMoreCoinsText: ; 52965 (14:6965) TX_FAR _SorryNeedMoreCoinsText db $0D db "@" PrizeRoomBagIsFullTextPtr: ; 5296b (14:696b) TX_FAR _OopsYouDontHaveEnoughRoomText db $0D db "@" OhFineThenTextPtr: ; 52971 (14:6971) TX_FAR _OhFineThenText db $0D ; wait keypress (A/B) without blink db "@" GetPrizeMonLevel: ; 52977 (14:6977) ld a,[$CF91] ld b,a ld hl,PrizeMonLevelDictionary .loop ; 14:697E ld a,[hli] cp b jr z,.matchFound inc hl jr .loop .matchFound ; 14:6985 ld a,[hl] ld [$D127],a ret INCLUDE "data/prize_mon_levels.asm"