pokered/engine/battle/common_text.asm

243 lines
4.2 KiB
NASM

PrintBeginningBattleText:
ld a, [wIsInBattle]
dec a
jr nz, .trainerBattle
ld a, [wCurMap]
cp POKEMON_TOWER_3F
jr c, .notPokemonTower
cp POKEMON_TOWER_7F + 1
jr c, .pokemonTower
.notPokemonTower
ld a, [wEnemyMonSpecies2]
call PlayCry
ld hl, WildMonAppearedText
ld a, [wMoveMissed]
and a
jr z, .notFishing
ld hl, HookedMonAttackedText
.notFishing
jr .wildBattle
.trainerBattle
call .playSFX
ld c, 20
call DelayFrames
ld hl, TrainerWantsToFightText
.wildBattle
push hl
callfar DrawAllPokeballs
pop hl
call PrintText
jr .done
.pokemonTower
ld b, SILPH_SCOPE
call IsItemInBag
ld a, [wEnemyMonSpecies2]
ld [wcf91], a
cp GHOST_MON
jr z, .isMarowak
ld a, b
and a
jr z, .noSilphScope
callfar LoadEnemyMonData
jr .notPokemonTower
.noSilphScope
ld hl, EnemyAppearedText
call PrintText
ld hl, GhostCantBeIDdText
call PrintText
jr .done
.isMarowak
ld a, b
and a
jr z, .noSilphScope
ld hl, EnemyAppearedText
call PrintText
ld hl, UnveiledGhostText
call PrintText
callfar LoadEnemyMonData
callfar MarowakAnim
ld hl, WildMonAppearedText
call PrintText
.playSFX
xor a
ld [wFrequencyModifier], a
ld a, $80
ld [wTempoModifier], a
ld a, SFX_SILPH_SCOPE
call PlaySound
jp WaitForSoundToFinish
.done
ret
WildMonAppearedText:
text_far _WildMonAppearedText
text_end
HookedMonAttackedText:
text_far _HookedMonAttackedText
text_end
EnemyAppearedText:
text_far _EnemyAppearedText
text_end
TrainerWantsToFightText:
text_far _TrainerWantsToFightText
text_end
UnveiledGhostText:
text_far _UnveiledGhostText
text_end
GhostCantBeIDdText:
text_far _GhostCantBeIDdText
text_end
PrintSendOutMonMessage:
ld hl, wEnemyMonHP
ld a, [hli]
or [hl]
ld hl, GoText
jr z, .printText
xor a
ldh [hMultiplicand], a
ld hl, wEnemyMonHP
ld a, [hli]
ld [wLastSwitchInEnemyMonHP], a
ldh [hMultiplicand + 1], a
ld a, [hl]
ld [wLastSwitchInEnemyMonHP + 1], a
ldh [hMultiplicand + 2], a
ld a, 25
ldh [hMultiplier], a
call Multiply
ld hl, wEnemyMonMaxHP
ld a, [hli]
ld b, [hl]
srl a
rr b
srl a
rr b
ld a, b
ld b, 4
ldh [hDivisor], a ; enemy mon max HP divided by 4
call Divide
ldh a, [hQuotient + 3] ; a = (enemy mon current HP * 25) / (enemy max HP / 4); this approximates the current percentage of max HP
ld hl, GoText ; 70% or greater
cp 70
jr nc, .printText
ld hl, DoItText ; 40% - 69%
cp 40
jr nc, .printText
ld hl, GetmText ; 10% - 39%
cp 10
jr nc, .printText
ld hl, EnemysWeakText ; 0% - 9%
.printText
jp PrintText
GoText:
text_far _GoText
text_asm
jr PrintPlayerMon1Text
DoItText:
text_far _DoItText
text_asm
jr PrintPlayerMon1Text
GetmText:
text_far _GetmText
text_asm
jr PrintPlayerMon1Text
EnemysWeakText:
text_far _EnemysWeakText
text_asm
PrintPlayerMon1Text:
ld hl, PlayerMon1Text
ret
PlayerMon1Text:
text_far _PlayerMon1Text
text_end
RetreatMon:
ld hl, PlayerMon2Text
jp PrintText
PlayerMon2Text:
text_far _PlayerMon2Text
text_asm
push de
push bc
ld hl, wEnemyMonHP + 1
ld de, wLastSwitchInEnemyMonHP + 1
ld b, [hl]
dec hl
ld a, [de]
sub b
ldh [hMultiplicand + 2], a
dec de
ld b, [hl]
ld a, [de]
sbc b
ldh [hMultiplicand + 1], a
ld a, 25
ldh [hMultiplier], a
call Multiply
ld hl, wEnemyMonMaxHP
ld a, [hli]
ld b, [hl]
srl a
rr b
srl a
rr b
ld a, b
ld b, 4
ldh [hDivisor], a
call Divide
pop bc
pop de
ldh a, [hQuotient + 3] ; a = ((LastSwitchInEnemyMonHP - CurrentEnemyMonHP) / 25) / (EnemyMonMaxHP / 4)
; Assuming that the enemy mon hasn't gained HP since the last switch in,
; a approximates the percentage that the enemy mon's total HP has decreased
; since the last switch in.
; If the enemy mon has gained HP, then a is garbage due to wrap-around and
; can fall in any of the ranges below.
ld hl, EnoughText ; HP stayed the same
and a
ret z
ld hl, ComeBackText ; HP went down 1% - 29%
cp 30
ret c
ld hl, OKExclamationText ; HP went down 30% - 69%
cp 70
ret c
ld hl, GoodText ; HP went down 70% or more
ret
EnoughText:
text_far _EnoughText
text_asm
jr PrintComeBackText
OKExclamationText:
text_far _OKExclamationText
text_asm
jr PrintComeBackText
GoodText:
text_far _GoodText
text_asm
jr PrintComeBackText
PrintComeBackText:
ld hl, ComeBackText
ret
ComeBackText:
text_far _ComeBackText
text_end