summaryrefslogtreecommitdiff
path: root/engine/menu/prize_menu.asm
diff options
context:
space:
mode:
authorU-Fish-PC\Daniel <corrnondacqb@yahoo.com>2014-05-22 18:13:20 -0400
committerU-Fish-PC\Daniel <corrnondacqb@yahoo.com>2014-05-22 18:13:20 -0400
commit15427f532085846ab6b51719be687951a094cb6c (patch)
treeedea9b189e91641a12dd521756894df84aeeace7 /engine/menu/prize_menu.asm
parentea3ba4cde3706b7c77efb705555ec0c86321cbe2 (diff)
Pull a lot of engine out of main.asm
Diffstat (limited to 'engine/menu/prize_menu.asm')
-rwxr-xr-xengine/menu/prize_menu.asm316
1 files changed, 316 insertions, 0 deletions
diff --git a/engine/menu/prize_menu.asm b/engine/menu/prize_menu.asm
new file mode 100755
index 00000000..79de7029
--- /dev/null
+++ b/engine/menu/prize_menu.asm
@@ -0,0 +1,316 @@
+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"