pokecrystal-board/engine/battle/used_move_text.asm

227 lines
3.3 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
DisplayUsedMoveText:
2015-11-22 21:21:21 -08:00
ld hl, UsedMoveText
2019-04-08 05:15:10 -07:00
call BattleTextbox
2015-11-22 21:21:21 -08:00
jp WaitBGMap
2018-06-24 07:09:41 -07:00
UsedMoveText:
text_far _ActorNameText
text_asm
2020-06-10 13:45:04 -07:00
ldh a, [hBattleTurn]
2015-11-22 21:21:21 -08:00
and a
jr nz, .start
ld a, [wPlayerMoveStruct + MOVE_ANIM]
call UpdateUsedMoves
.start
ld a, BATTLE_VARS_LAST_MOVE
call GetBattleVarAddr
ld d, h
ld e, l
ld a, BATTLE_VARS_LAST_COUNTER_MOVE
call GetBattleVarAddr
ld a, BATTLE_VARS_MOVE_ANIM
call GetBattleVar
ld [wMoveGrammar], a
2015-11-22 21:21:21 -08:00
push hl
2017-12-24 09:47:30 -08:00
farcall CheckUserIsCharging
2015-11-22 21:21:21 -08:00
pop hl
jr nz, .grammar
; update last move
ld a, [wMoveGrammar]
2015-11-22 21:21:21 -08:00
ld [hl], a
ld [de], a
.grammar
call GetMoveGrammar ; convert move id to grammar index
2015-11-22 21:21:21 -08:00
; everything except 'CheckObedience' made redundant in localization
2015-11-22 21:21:21 -08:00
; check obedience
2018-01-23 14:39:09 -08:00
ld a, [wAlreadyDisobeyed]
2015-11-22 21:21:21 -08:00
and a
ld hl, UsedMove2Text
ret nz
; check move grammar
ld a, [wMoveGrammar]
2015-11-22 21:21:21 -08:00
cp $3
ld hl, UsedMove2Text
ret c
ld hl, UsedMove1Text
ret
2018-06-24 07:09:41 -07:00
UsedMove1Text:
text_far _UsedMove1Text
text_asm
2015-12-29 10:15:58 -08:00
jr UsedMoveText_CheckObedience
2015-11-22 21:21:21 -08:00
2018-06-24 07:09:41 -07:00
UsedMove2Text:
text_far _UsedMove2Text
text_asm
2018-06-24 07:09:41 -07:00
UsedMoveText_CheckObedience:
2015-11-22 21:21:21 -08:00
; check obedience
2018-01-23 14:39:09 -08:00
ld a, [wAlreadyDisobeyed]
2015-11-22 21:21:21 -08:00
and a
2015-12-29 10:15:58 -08:00
jr z, .GetMoveNameText
2015-11-22 21:21:21 -08:00
; print "instead,"
2015-12-29 10:15:58 -08:00
ld hl, .UsedInsteadText
2015-11-22 21:21:21 -08:00
ret
.UsedInsteadText:
text_far _UsedInsteadText
text_asm
.GetMoveNameText:
2015-11-22 21:21:21 -08:00
ld hl, MoveNameText
ret
2018-06-24 07:09:41 -07:00
MoveNameText:
text_far _MoveNameText
text_asm
2015-11-22 21:21:21 -08:00
; get start address
ld hl, .endusedmovetexts
; get move id
ld a, [wMoveGrammar]
2015-11-22 21:21:21 -08:00
; 2-byte pointer
add a
; seek
push bc
ld b, 0
2015-11-22 21:21:21 -08:00
ld c, a
add hl, bc
pop bc
; get pointer to usedmovetext ender
ld a, [hli]
ld h, [hl]
ld l, a
ret
2018-06-24 07:09:41 -07:00
.endusedmovetexts
2018-01-25 18:34:42 -08:00
; entries correspond to MoveGrammar sets
2015-11-22 21:21:21 -08:00
dw EndUsedMove1Text
dw EndUsedMove2Text
dw EndUsedMove3Text
dw EndUsedMove4Text
dw EndUsedMove5Text
2018-06-24 07:09:41 -07:00
EndUsedMove1Text:
text_far _EndUsedMove1Text
text_end
2018-06-24 07:09:41 -07:00
EndUsedMove2Text:
text_far _EndUsedMove2Text
text_end
2018-06-24 07:09:41 -07:00
EndUsedMove3Text:
text_far _EndUsedMove3Text
text_end
2018-06-24 07:09:41 -07:00
EndUsedMove4Text:
text_far _EndUsedMove4Text
text_end
2018-06-24 07:09:41 -07:00
EndUsedMove5Text:
text_far _EndUsedMove5Text
text_end
2015-11-22 21:21:21 -08:00
2018-06-24 07:09:41 -07:00
GetMoveGrammar:
; store move grammar type in wMoveGrammar
2015-11-22 21:21:21 -08:00
push bc
; wMoveGrammar contains move id
ld a, [wMoveGrammar]
ld c, a ; move id
ld b, 0 ; grammar index
2015-11-22 21:21:21 -08:00
; read grammar table
ld hl, MoveGrammar
.loop
ld a, [hli]
; end of table?
2018-01-10 19:53:42 -08:00
cp -1
2015-11-22 21:21:21 -08:00
jr z, .end
; match?
cp c
jr z, .end
2018-01-10 19:53:42 -08:00
; advance grammar type at 0
2015-11-22 21:21:21 -08:00
and a
jr nz, .loop
; next grammar type
inc b
jr .loop
.end
; wMoveGrammar now contains move grammar
2015-11-22 21:21:21 -08:00
ld a, b
ld [wMoveGrammar], a
2015-11-22 21:21:21 -08:00
; we're done
pop bc
ret
2018-01-10 19:53:42 -08:00
INCLUDE "data/moves/grammar.asm"
2015-11-22 21:21:21 -08:00
2018-06-24 07:09:41 -07:00
UpdateUsedMoves:
2018-01-23 14:39:09 -08:00
; append move a to wPlayerUsedMoves unless it has already been used
2015-11-22 21:21:21 -08:00
push bc
; start of list
2018-01-23 14:39:09 -08:00
ld hl, wPlayerUsedMoves
2015-11-22 21:21:21 -08:00
; get move id
ld b, a
; next count
ld c, NUM_MOVES
.loop
; get move from the list
ld a, [hli]
; not used yet?
and a
jr z, .add
; already used?
cp b
jr z, .quit
; next byte
dec c
jr nz, .loop
; if the list is full and the move hasn't already been used
; shift the list back one byte, deleting the first move used
; this can occur with struggle or a new learned move
2018-01-23 14:39:09 -08:00
ld hl, wPlayerUsedMoves + 1
2015-11-22 21:21:21 -08:00
; 1 = 2
ld a, [hld]
ld [hli], a
; 2 = 3
inc hl
ld a, [hld]
ld [hli], a
; 3 = 4
inc hl
ld a, [hld]
ld [hl], a
; 4 = new move
ld a, b
2018-01-23 14:39:09 -08:00
ld [wPlayerUsedMoves + 3], a
2015-11-22 21:21:21 -08:00
jr .quit
.add
; go back to the byte we just inced from
dec hl
; add the new move
ld [hl], b
.quit
; list updated
pop bc
ret