123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- PrintBeginningBattleText:
- ld a, [wIsInBattle]
- dec a
- jr nz, .trainerBattle
- ld a, [wCurMap]
- cp POKEMONTOWER_3
- jr c, .notPokemonTower
- cp LAVENDER_HOUSE_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
- callab DrawAllPokeballs
- pop hl
- call PrintText
- jr .done
- .pokemonTower
- ld b, SILPH_SCOPE
- call IsItemInBag
- ld a, [wEnemyMonSpecies2]
- ld [wcf91], a
- cp MAROWAK
- jr z, .isMarowak
- ld a, b
- and a
- jr z, .noSilphScope
- callab 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
- callab LoadEnemyMonData
- callab 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:
- TX_FAR _WildMonAppearedText
- db "@"
- HookedMonAttackedText:
- TX_FAR _HookedMonAttackedText
- db "@"
- EnemyAppearedText:
- TX_FAR _EnemyAppearedText
- db "@"
- TrainerWantsToFightText:
- TX_FAR _TrainerWantsToFightText
- db "@"
- UnveiledGhostText:
- TX_FAR _UnveiledGhostText
- db "@"
- GhostCantBeIDdText:
- TX_FAR _GhostCantBeIDdText
- db "@"
- PrintSendOutMonMessage:
- ld hl, wEnemyMonHP
- ld a, [hli]
- or [hl]
- ld hl, GoText
- jr z, .printText
- xor a
- ld [H_MULTIPLICAND], a
- ld hl, wEnemyMonHP
- ld a, [hli]
- ld [wLastSwitchInEnemyMonHP], a
- ld [H_MULTIPLICAND + 1], a
- ld a, [hl]
- ld [wLastSwitchInEnemyMonHP + 1], a
- ld [H_MULTIPLICAND + 2], a
- ld a, 25
- ld [H_MULTIPLIER], 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
- ld [H_DIVISOR], a ; enemy mon max HP divided by 4
- call Divide
- ld a, [H_QUOTIENT + 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:
- TX_FAR _GoText
- TX_ASM
- jr PrintPlayerMon1Text
- DoItText:
- TX_FAR _DoItText
- TX_ASM
- jr PrintPlayerMon1Text
- GetmText:
- TX_FAR _GetmText
- TX_ASM
- jr PrintPlayerMon1Text
- EnemysWeakText:
- TX_FAR _EnemysWeakText
- TX_ASM
- PrintPlayerMon1Text:
- ld hl, PlayerMon1Text
- ret
- PlayerMon1Text:
- TX_FAR _PlayerMon1Text
- db "@"
- RetreatMon:
- ld hl, PlayerMon2Text
- jp PrintText
- PlayerMon2Text:
- TX_FAR _PlayerMon2Text
- TX_ASM
- push de
- push bc
- ld hl, wEnemyMonHP + 1
- ld de, wLastSwitchInEnemyMonHP + 1
- ld b, [hl]
- dec hl
- ld a, [de]
- sub b
- ld [H_MULTIPLICAND + 2], a
- dec de
- ld b, [hl]
- ld a, [de]
- sbc b
- ld [H_MULTIPLICAND + 1], a
- ld a, 25
- ld [H_MULTIPLIER], 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
- ld [H_DIVISOR], a
- call Divide
- pop bc
- pop de
- ld a, [H_QUOTIENT + 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:
- TX_FAR _EnoughText
- TX_ASM
- jr PrintComeBackText
- OKExclamationText:
- TX_FAR _OKExclamationText
- TX_ASM
- jr PrintComeBackText
- GoodText:
- TX_FAR _GoodText
- TX_ASM
- jr PrintComeBackText
- PrintComeBackText:
- ld hl, ComeBackText
- ret
- ComeBackText:
- TX_FAR _ComeBackText
- db "@"
|