pokecrystal/engine/battle/misc.asm

225 lines
2.7 KiB
NASM

_DisappearUser:
xor a
ld [hBGMapMode], a
ld a, [hBattleTurn]
and a
jr z, .player
call GetEnemyFrontpicCoords
jr .okay
.player
call GetPlayerBackpicCoords
.okay
call ClearBox
jr FinishAppearDisappearUser
_AppearUserRaiseSub:
farcall BattleCommand_RaiseSubNoAnim
jr AppearUser
_AppearUserLowerSub:
farcall BattleCommand_LowerSubNoAnim
AppearUser:
xor a
ld [hBGMapMode], a
ld a, [hBattleTurn]
and a
jr z, .player
call GetEnemyFrontpicCoords
xor a
jr .okay
.player
call GetPlayerBackpicCoords
ld a, $31
.okay
ld [hGraphicStartTile], a
predef PlaceGraphic
FinishAppearDisappearUser:
ld a, $1
ld [hBGMapMode], a
ret
GetEnemyFrontpicCoords:
hlcoord 12, 0
lb bc, 7, 7
ret
GetPlayerBackpicCoords:
hlcoord 2, 6
lb bc, 6, 6
ret
DoWeatherModifiers:
ld de, WeatherTypeModifiers
ld a, [wBattleWeather]
ld b, a
ld a, [wd265] ; move type
ld c, a
.CheckWeatherType:
ld a, [de]
inc de
cp $ff
jr z, .done_weather_types
cp b
jr nz, .NextWeatherType
ld a, [de]
cp c
jr z, .ApplyModifier
.NextWeatherType:
inc de
inc de
jr .CheckWeatherType
.done_weather_types
ld de, WeatherMoveModifiers
ld a, BATTLE_VARS_MOVE_EFFECT
call GetBattleVar
ld c, a
.CheckWeatherMove:
ld a, [de]
inc de
cp $ff
jr z, .done
cp b
jr nz, .NextWeatherMove
ld a, [de]
cp c
jr z, .ApplyModifier
.NextWeatherMove:
inc de
inc de
jr .CheckWeatherMove
.ApplyModifier:
xor a
ld [hMultiplicand + 0], a
ld hl, wCurDamage
ld a, [hli]
ld [hMultiplicand + 1], a
ld a, [hl]
ld [hMultiplicand + 2], a
inc de
ld a, [de]
ld [hMultiplier], a
call Multiply
ld a, 10
ld [hDivisor], a
ld b, $4
call Divide
ld a, [hQuotient + 0]
and a
ld bc, -1
jr nz, .Update
ld a, [hQuotient + 1]
ld b, a
ld a, [hQuotient + 2]
ld c, a
or b
jr nz, .Update
ld bc, 1
.Update:
ld a, b
ld [wCurDamage], a
ld a, c
ld [wCurDamage + 1], a
.done
ret
INCLUDE "data/battle/weather_modifiers.asm"
DoBadgeTypeBoosts:
ld a, [wLinkMode]
and a
ret nz
ld a, [wInBattleTowerBattle]
and a
ret nz
ld a, [hBattleTurn]
and a
ret nz
push de
push bc
ld hl, BadgeTypeBoosts
ld a, [wKantoBadges]
ld b, a
ld a, [wJohtoBadges]
ld c, a
.CheckBadge:
ld a, [hl]
cp -1
jr z, .done
srl b
rr c
jr nc, .NextBadge
ld a, [wd265] ; move type
cp [hl]
jr z, .ApplyBoost
.NextBadge:
inc hl
jr .CheckBadge
.ApplyBoost:
ld a, [wCurDamage]
ld h, a
ld d, a
ld a, [wCurDamage + 1]
ld l, a
ld e, a
srl d
rr e
srl d
rr e
srl d
rr e
ld a, e
or d
jr nz, .done_min
ld e, 1
.done_min
add hl, de
jr nc, .Update
ld hl, $ffff
.Update:
ld a, h
ld [wCurDamage], a
ld a, l
ld [wCurDamage + 1], a
.done
pop bc
pop de
ret
INCLUDE "data/types/badge_type_boosts.asm"