kep-hack/scripts/tradeback_move_tutor.asm
Llinos Evans 2f01628cd9 Groundwork for Tradeback Move Tutor
Currently the move tutor is a little bit broken - the IDs are 1 above how they should be. Shell speculates that it's searching at the table starting from Kangaskhan due to the way the decrements shake up but it may just be making things more complicated than they are.

Big cheese code is `PrepareTradebackMoveList`, it's where things are mucking up.

Also, the code can be significantly optimised, as it's currently being adapted from the function above, `PrepareRelearnableMoveList`; It doesn't need to check levels, for example.

Note that the relearner functions properly, so use it as a reference. I may have removed something important.

Technically, we could have NO_MON as an entry which may make things shake out properly. But I'd rather have a proper fix.
2023-04-23 06:11:05 +01:00

132 lines
2.5 KiB
NASM

TradebackTutorText1:
text_asm
; Display the list of moves to the player.
ld hl, TradebackTutorGreetingText
call PrintText
call YesNoChoice
ld a, [wCurrentMenuItem]
and a
jp nz, .exit
xor a
;charge 1000 money
ld [hMoney], a
ld [hMoney + 2], a
ld a, $0A
ld [hMoney + 1], a
call HasEnoughMoney
jr nc, .enoughMoney
; not enough money
ld hl, TradebackTutorNotEnoughMoneyText
call PrintText
jp TextScriptEnd
.enoughMoney
ld hl, TradebackTutorSaidYesText
call PrintText
; Select pokemon from party.
call SaveScreenTilesToBuffer2
xor a
ld [wListScrollOffset], a
ld [wPartyMenuTypeOrMessageID], a
ld [wUpdateSpritesEnabled], a
ld [wMenuItemToSwap], a
call DisplayPartyMenu
push af
call GBPalWhiteOutWithDelay3
call RestoreScreenTilesAndReloadTilePatterns
call LoadGBPal
pop af
jp c, .exit
ld a, [wWhichPokemon]
ld b, a
push bc
ld hl, PrepareTradebackMoveList
ld b, Bank(PrepareTradebackMoveList)
call Bankswitch
ld a, [wMoveBuffer]
and a
jr nz, .chooseMove
pop bc
ld hl, TradebackTutorNoMovesText
call PrintText
jp TextScriptEnd
.chooseMove
ld hl, TradebackTutorWhichMoveText
call PrintText
xor a
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
ld a, MOVESLISTMENU
ld [wListMenuID], a
ld de, wMoveBuffer
ld hl, wListPointer
ld [hl], e
inc hl
ld [hl], d
xor a
ld [wPrintItemPrices], a ; don't print prices
call DisplayListMenuID
pop bc
jr c, .exit ; exit if player chose cancel
push bc
; Save the selected move id.
ld a, [wcf91]
ld [wMoveNum], a
ld [wd11e],a
call GetMoveName
call CopyToStringBuffer ; copy name to wcf4b
pop bc
ld a, b
ld [wWhichPokemon], a
ld a, [wLetterPrintingDelayFlags]
push af
xor a
ld [wLetterPrintingDelayFlags], a
predef LearnMove
pop af
ld [wLetterPrintingDelayFlags], a
ld a, b
and a
jr z, .exit
; Charge 1000 money
xor a
ld [wPriceTemp], a
ld [wPriceTemp + 2], a
ld a, $0A
ld [wPriceTemp + 1], a
ld hl, wPriceTemp + 2
ld de, wPlayerMoney + 2
ld c, $3
predef SubBCDPredef
ld hl, TradebackTutorByeText
call PrintText
jp TextScriptEnd
.exit
ld hl, TradebackTutorByeText
call PrintText
jp TextScriptEnd
TradebackTutorGreetingText:
text_far _TradebackTutorGreetingText
text_end
TradebackTutorSaidYesText:
text_far _TradebackTutorSaidYesText
text_end
TradebackTutorNotEnoughMoneyText:
text_far _TradebackTutorNotEnoughMoneyText
text_end
TradebackTutorWhichMoveText:
text_far _TradebackTutorWhichMoveText
text_end
TradebackTutorByeText:
text_far _TradebackTutorByeText
text_end
TradebackTutorNoMovesText:
text_far _TradebackTutorNoMovesText
text_end