pokecrystal/engine/pokemon/learn.asm

240 lines
3.6 KiB
NASM
Raw Normal View History

2018-06-24 14:09:41 +00:00
LearnMove:
call LoadTileMapToTempTileMap
2018-01-23 22:39:09 +00:00
ld a, [wCurPartyMon]
ld hl, wPartyMonNicknames
call GetNick
2018-01-23 22:39:09 +00:00
ld hl, wStringBuffer1
2015-12-19 01:07:09 +00:00
ld de, wMonOrItemNameBuffer
2018-01-20 17:25:55 +00:00
ld bc, MON_NAME_LENGTH
call CopyBytes
.loop
2018-01-23 22:39:09 +00:00
ld hl, wPartyMon1Moves
ld bc, PARTYMON_STRUCT_LENGTH
2018-01-23 22:39:09 +00:00
ld a, [wCurPartyMon]
call AddNTimes
ld d, h
ld e, l
ld b, NUM_MOVES
; Get the first empty move slot. This routine also serves to
; determine whether the Pokemon learning the moves already has
; all four slots occupied, in which case one would need to be
; deleted.
.next
ld a, [hl]
and a
jr z, .learn
inc hl
dec b
jr nz, .next
; If we're here, we enter the routine for forgetting a move
; to make room for the new move we're trying to learn.
push de
call ForgetMove
pop de
jp c, .cancel
push hl
push de
ld [wNamedObjectIndexBuffer], a
ld b, a
ld a, [wBattleMode]
and a
jr z, .not_disabled
2018-01-23 22:39:09 +00:00
ld a, [wDisabledMove]
cp b
jr nz, .not_disabled
xor a
2018-01-23 22:39:09 +00:00
ld [wDisabledMove], a
ld [wPlayerDisableCount], a
.not_disabled
call GetMoveName
2015-12-29 18:15:58 +00:00
ld hl, Text_1_2_and_Poof ; 1, 2 and…
call PrintText
pop de
pop hl
.learn
ld a, [wPutativeTMHMMove]
ld [hl], a
ld bc, MON_PP - MON_MOVES
add hl, bc
push hl
push de
dec a
ld hl, Moves + MOVE_PP
ld bc, MOVE_LENGTH
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
pop de
pop hl
ld [hl], a
ld a, [wBattleMode]
and a
jp z, .learned
2018-01-23 22:39:09 +00:00
ld a, [wCurPartyMon]
ld b, a
2018-01-23 22:39:09 +00:00
ld a, [wCurBattleMon]
cp b
jp nz, .learned
2018-01-23 22:39:09 +00:00
ld a, [wPlayerSubStatus5]
bit SUBSTATUS_TRANSFORMED, a
jp nz, .learned
ld h, d
ld l, e
2018-01-23 22:39:09 +00:00
ld de, wBattleMonMoves
ld bc, NUM_MOVES
call CopyBytes
2018-01-23 22:39:09 +00:00
ld bc, wPartyMon1PP - (wPartyMon1Moves + NUM_MOVES)
add hl, bc
2018-01-23 22:39:09 +00:00
ld de, wBattleMonPP
ld bc, NUM_MOVES
call CopyBytes
jp .learned
.cancel
ld hl, StopLearningMoveText
call PrintText
call YesNoBox
jp c, .loop
ld hl, DidNotLearnMoveText
call PrintText
ld b, 0
ret
.learned
ld hl, LearnedMoveText
call PrintText
ld b, 1
ret
2018-06-24 14:09:41 +00:00
ForgetMove:
push hl
ld hl, AskForgetMoveText
call PrintText
call YesNoBox
pop hl
ret c
ld bc, -NUM_MOVES
add hl, bc
push hl
ld de, wListMoves_MoveIndicesBuffer
ld bc, NUM_MOVES
call CopyBytes
pop hl
.loop
push hl
ld hl, MoveAskForgetText
call PrintText
hlcoord 5, 2
ld b, NUM_MOVES * 2
ld c, MOVE_NAME_LENGTH
2019-04-08 12:15:10 +00:00
call Textbox
hlcoord 5 + 2, 2 + 2
ld a, SCREEN_WIDTH * 2
2018-01-23 22:39:09 +00:00
ld [wBuffer1], a
predef ListMoves
2018-01-23 21:38:52 +00:00
; w2DMenuData
ld a, $4
ld [w2DMenuCursorInitY], a
ld a, $6
ld [w2DMenuCursorInitX], a
2015-12-04 13:46:11 +00:00
ld a, [wNumMoves]
inc a
ld [w2DMenuNumRows], a
ld a, $1
ld [w2DMenuNumCols], a
2015-12-15 23:59:49 +00:00
ld [wMenuCursorY], a
ld [wMenuCursorX], a
ld a, $3
ld [wMenuJoypadFilter], a
ld a, $20
ld [w2DMenuFlags1], a
xor a
ld [w2DMenuFlags2], a
ld a, $20
2015-12-21 19:10:16 +00:00
ld [w2DMenuCursorOffsets], a
2015-12-15 23:59:49 +00:00
call StaticMenuJoypad
push af
call Call_LoadTempTileMapToTileMap
pop af
pop hl
bit 1, a
jr nz, .cancel
push hl
2015-12-15 23:59:49 +00:00
ld a, [wMenuCursorY]
dec a
ld c, a
ld b, 0
add hl, bc
ld a, [hl]
push af
push bc
call IsHMMove
pop bc
pop de
ld a, d
jr c, .hmmove
pop hl
add hl, bc
and a
ret
.hmmove
ld hl, MoveCantForgetHMText
call PrintText
pop hl
jr .loop
.cancel
scf
ret
LearnedMoveText:
text_far _LearnedMoveText
text_end
MoveAskForgetText:
text_far _MoveAskForgetText
text_end
StopLearningMoveText:
text_far _StopLearningMoveText
text_end
DidNotLearnMoveText:
text_far _DidNotLearnMoveText
text_end
AskForgetMoveText:
text_far _AskForgetMoveText
text_end
2018-06-24 14:09:41 +00:00
Text_1_2_and_Poof:
text_far Text_MoveForgetCount ; 1, 2 and…
text_asm
push de
ld de, SFX_SWITCH_POKEMON
call PlaySFX
pop de
ld hl, .MoveForgotText
ret
.MoveForgotText:
text_far _MoveForgotText
text_end
MoveCantForgetHMText:
text_far _MoveCantForgetHMText
text_end