ref: 92a0acca73fcb9c71b01757da9ceadc7e862355e
parent: 722120503405b6f3f707d26dd2317938cb8d7ff7
author: Sawakita <[email protected]>
date: Wed Jan 11 11:30:43 EST 2012
Add complete Text-special command $F7, used in CeladonPrizeRoom's menus. Add also some unused data. hg-commit-id: 1aa76dd5de95
--- a/pokered.asm
+++ b/pokered.asm
@@ -17323,9 +17323,375 @@
INCBIN "baserom.gbc",$524DD,$5271B - $524DD
CeladonPrizeMenu: ; 14:671B
-INCBIN "baserom.gbc",$5271B,$54000 - $5271B
-;INCBIN "baserom.gbc",$52996,$54000 - $52996
+ 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 $2429
+ ld hl,WhichPrizeTextPtr
+ call PrintText
+ call $3ABE ; 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: ; 14:677E
+ TX_FAR _RequireCoinCaseText ; 22:628E
+ db $0D
+ db "@"
+
+ExchangeCoinsForPrizesTextPtr: ; 14:6784
+ TX_FAR _ExchangeCoinsForPrizesText ; 22:62A9
+ db "@"
+
+WhichPrizeTextPtr: ; 14:6789
+ TX_FAR _WhichPrizeText ; 22:62CD
+ db "@"
+
+GetPrizeMenuId: ; 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 ar $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 $3829 ; 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 GetMonsterName
+ FuncCoord 2,4
+ ld hl,Coord
+ call PlaceString
+ ld a,[W_PRIZE2]
+ ld [$D11E],a
+ call GetMonsterName
+ FuncCoord 2,6
+ ld hl,Coord
+ call PlaceString
+ ld a,[W_PRIZE3]
+ ld [$D11E],a
+ call GetMonsterName
+ 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 $15CD ; Print_BCD
+ ld de,$D143
+ FuncCoord 13,7
+ ld hl,Coord
+ ld c,(%1 << 7 | 2)
+ call $15CD
+ ld de,$D145
+ FuncCoord 13,9
+ ld hl,Coord
+ ld c,(1 << 7 | 2)
+ jp $15CD
+
+PrizeDifferentMenuPtrs: ; 14:6843
+ dw PrizeMenuMon1Entries
+ dw PrizeMenuMon1Cost
+
+ dw PrizeMenuMon2Entries
+ dw PrizeMenuMon2Cost
+
+ dw PrizeMenuTMsEntries
+ dw PrizeMenuTMsCost
+
+NoThanksText: ; 14:684F
+ db "NO THANKS@"
+
+PrizeMenuMon1Entries: ; 14:6859
+ db ABRA
+ db CLEFAIRY
+ db NIDORINA
+ db "@"
+PrizeMenuMon1Cost: ; 14:685D
+ db $01,$80
+ db $05,$00
+ db $12,$00
+ db "@"
+
+PrizeMenuMon2Entries: ; 14:6864
+ db DRATINI
+ db SCYTHER
+ db PORYGON
+ db "@"
+PrizeMenuMon2Cost: ; 14:6868
+ db $28,$00 ; 2800 Coins
+ db $55,$00 ; 5500 Coins
+ db $99,$99 ; 9999 Coins
+ db "@"
+
+PrizeMenuTMsEntries: ; 14:686F
+ db TM_23
+ db TM_15
+ db TM_50
+ db "@"
+PrizeMenuTMsCost: ; 14:6873
+ db $33,$00 ; 3300 Coins
+ db $55,$00 ; 5500 Coins
+ db $77,$00 ; 7700 Coins
+ db "@"
+
+PrintPrizePrice: ; 14:687A
+ FuncCoord 11,0
+ ld hl,Coord
+ ld b,$01
+ ld c,$07
+ call TextBoxBorder
+ call $2429 ; 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,W_PLAYERCOINS1
+ ld c,%10000010
+ call $15CD
+ ret
+
+.CoinText\@ ; 14:68A5
+ db "COIN@"
+
+.SixSpacesText\@ ; 14:68AA
+ db " @"
+
+LoadCoinsToSubtract: ; 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: ; 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 GetMonsterName
+.GivePrize\@ ; 14:68E6
+ ld hl,SoYouWantPrizeTextPtr
+ call PrintText
+ call $35EC ; yes/no textbox
+ ld a,[$CC26] ; yes/no answer (Y=0, N=1)
+ and a
+ jr nz,.PrintOhFineThen\@
+ call LoadCoinsToSubtract
+ call $35B1 ; subtract COINs from COIN_CASE
+ jr c,.NotEnoughCoins\@
+ ld a,[$D12F]
+ cp a,$02
+ jr nz,.GiveMon\@
+ ld a,[$D11E]
+ ld b,a
+ ld a,$01
+ ld c,a
+ call $3E2E ; GiveItem
+ jr nc,.BagIsFull\@
+ 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 $3E48 ; GivePokemon
+ push af
+ ld a,[$CCD3] ; XXX is there room?
+ and a
+ call z,$3865
+ pop af
+ ret nc
+.SubtractCoins\@ ; 14:692C
+ call LoadCoinsToSubtract
+ ld hl,$FFA1
+ ld de,W_PLAYERCOINS2
+ ld c,$02 ; how many bytes
+ ld a,$0C
+ call Predef ; subtract coins (BCD daa operations)
+ jp PrintPrizePrice
+.BagIsFull\@ ; 14:693F
+ ld hl,PrizeRoomBagIsFullTextPtr
+ jp PrintText
+.NotEnoughCoins\@ ; 14:6945
+ ld hl,SorryNeedMoreCoinsTextPtr
+ jp PrintText
+.PrintOhFineThen\@ ; 14:694B
+ ld hl,OhFineThenTextPtr
+ jp PrintText
+
+UnknownData52951: ; 14:6951
+; XXX what's this?
+ db $00,$01,$00,$01,$00,$01,$00,$00,$01
+
+HereYouGoTextPtr:
+ TX_FAR _HereYouGoText ; 22:62E7
+ db $0D
+ db "@"
+
+SoYouWantPrizeTextPtr: ; 14:6960
+ TX_FAR _SoYouWantPrizeText ; 22:62F6
+ db "@"
+
+SorryNeedMoreCoinsTextPtr: ; 14:6965
+ TX_FAR _SorryNeedMoreCoins ; 22:630B
+ db $0D
+ db "@"
+
+PrizeRoomBagIsFullTextPtr: ; 14:696B
+ TX_FAR _OopsYouDontHaveEnoughRoomText ; 22:6329
+ db $0D
+ db "@"
+
+OhFineThenTextPtr: ; 14:6971
+ TX_FAR _OhFineThenText; 22:634C
+ db $0D ; wait keypress (A/B) without blink
+ db "@"
+
+GetPrizeMonLevel: ; 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
+
+PrizeMonLevelDictionary: ; 14:698A
+ db ABRA,9
+ db CLEFAIRY,8
+ db NIDORINA,17
+
+ db DRATINI,18
+ db SCYTHER,25
+ db PORYGON,26
+
+INCBIN "baserom.gbc",$52996,$54000 - $52996
+
SECTION "bank15",DATA,BANK[$15]
INCBIN "baserom.gbc",$54000,$54022 - $54000
@@ -23459,7 +23825,7 @@
db 0,"Which prize do",$4F
db "you want?",$57
-_HereYouGoText: ; 22:62E6
+_HereYouGoText: ; 22:62E7
db 0,"Here you go!@@"
_SoYouWantPrizeText: ; 22:62F6