mirror of
https://github.com/thornAvery/kep-hack.git
synced 2026-04-19 00:23:20 +12:00
Pull a lot of engine out of main.asm
This commit is contained in:
parent
ea3ba4cde3
commit
15427f5320
110 changed files with 39093 additions and 38990 deletions
316
engine/menu/prize_menu.asm
Executable file
316
engine/menu/prize_menu.asm
Executable file
|
|
@ -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"
|
||||
Loading…
Add table
Add a link
Reference in a new issue