diff options
author | U-Fish-PC\Daniel <corrnondacqb@yahoo.com> | 2014-05-22 18:13:20 -0400 |
---|---|---|
committer | U-Fish-PC\Daniel <corrnondacqb@yahoo.com> | 2014-05-22 18:13:20 -0400 |
commit | 15427f532085846ab6b51719be687951a094cb6c (patch) | |
tree | edea9b189e91641a12dd521756894df84aeeace7 /engine/menu/prize_menu.asm | |
parent | ea3ba4cde3706b7c77efb705555ec0c86321cbe2 (diff) |
Pull a lot of engine out of main.asm
Diffstat (limited to 'engine/menu/prize_menu.asm')
-rwxr-xr-x | engine/menu/prize_menu.asm | 316 |
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" |