pokecrystal-board/engine/battle_anims/bg_effects.asm

2760 lines
43 KiB
NASM
Raw Normal View History

2015-12-24 10:33:54 -08:00
const_def
const BGSQUARE_SIX
const BGSQUARE_FOUR
const BGSQUARE_TWO
const BGSQUARE_SEVEN
const BGSQUARE_FIVE
const BGSQUARE_THREE
; BG effects for use in battle animations.
2018-06-24 07:09:41 -07:00
ExecuteBGEffects:
2018-01-23 14:39:09 -08:00
ld hl, wActiveBGEffects
ld e, NUM_BG_EFFECTS
.loop
ld a, [hl]
and a
jr z, .next
ld c, l
ld b, h
push hl
push de
2015-12-23 17:46:23 -08:00
call DoBattleBGEffectFunction
pop de
pop hl
.next
ld bc, BG_EFFECT_STRUCT_LENGTH
add hl, bc
dec e
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
QueueBGEffect:
2018-01-23 14:39:09 -08:00
ld hl, wActiveBGEffects
ld e, NUM_BG_EFFECTS
.loop
ld a, [hl]
and a
jr z, .load
ld bc, BG_EFFECT_STRUCT_LENGTH
add hl, bc
dec e
jr nz, .loop
scf
ret
.load
ld c, l
ld b, h
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_FUNCTION
add hl, bc
2020-11-09 12:05:14 -08:00
ld a, [wBattleBGEffectTempID]
ld [hli], a
2020-11-09 12:05:14 -08:00
ld a, [wBattleBGEffectTempJumptableIndex]
ld [hli], a
2020-11-09 12:05:14 -08:00
ld a, [wBattleBGEffectTempTurn]
ld [hli], a
2020-11-09 12:05:14 -08:00
ld a, [wBattleBGEffectTempParam]
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
EndBattleBGEffect:
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_FUNCTION
add hl, bc
ld [hl], 0
ret
2018-06-24 07:09:41 -07:00
DoBattleBGEffectFunction:
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_FUNCTION
add hl, bc
ld e, [hl]
ld d, 0
ld hl, BattleBGEffects
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2018-06-24 07:09:41 -07:00
BattleBGEffects:
; entries correspond to ANIM_BG_* constants
dw BattleBGEffect_End
dw BattleBGEffect_FlashInverted
dw BattleBGEffect_FlashWhite
dw BattleBGEffect_WhiteHues
dw BattleBGEffect_BlackHues
dw BattleBGEffect_AlternateHues
dw BattleBGEffect_CycleOBPalsGrayAndYellow
dw BattleBGEffect_CycleMidOBPalsGrayAndYellow
dw BattleBGEffect_CycleBGPals_Inverted
dw BattleBGEffect_HideMon
dw BattleBGEffect_ShowMon
dw BattleBGEffect_EnterMon
dw BattleBGEffect_ReturnMon
dw BattleBGEffect_Surf
dw BattleBGEffect_Whirlpool
dw BattleBGEffect_Teleport
dw BattleBGEffect_NightShade
dw BattleBGEffect_BattlerObj_1Row
dw BattleBGEffect_BattlerObj_2Row
dw BattleBGEffect_DoubleTeam
dw BattleBGEffect_AcidArmor
dw BattleBGEffect_RapidFlash
dw BattleBGEffect_FadeMonToLight
dw BattleBGEffect_FadeMonToBlack
dw BattleBGEffect_FadeMonToLightRepeating
dw BattleBGEffect_FadeMonToBlackRepeating
dw BattleBGEffect_CycleMonLightDarkRepeating
dw BattleBGEffect_FlashMonRepeating
dw BattleBGEffect_FadeMonsToBlackRepeating
dw BattleBGEffect_FadeMonToWhiteWaitFadeBack
dw BattleBGEffect_FadeMonFromWhite
dw BattleBGEffect_ShakeScreenX
dw BattleBGEffect_ShakeScreenY
2016-05-05 12:07:37 -07:00
dw BattleBGEffect_Withdraw
2015-12-24 10:33:54 -08:00
dw BattleBGEffect_BounceDown
dw BattleBGEffect_Dig
dw BattleBGEffect_Tackle
dw BattleBGEffect_BodySlam
dw BattleBGEffect_WobbleMon
dw BattleBGEffect_RemoveMon
dw BattleBGEffect_WaveDeformMon
dw BattleBGEffect_Psychic
dw BattleBGEffect_BetaSendOutMon1
dw BattleBGEffect_BetaSendOutMon2
dw BattleBGEffect_Flail
dw BattleBGEffect_BetaPursuit
dw BattleBGEffect_Rollout
dw BattleBGEffect_VitalThrow
dw BattleBGEffect_StartWater
dw BattleBGEffect_Water
dw BattleBGEffect_EndWater
dw BattleBGEffect_VibrateMon
dw BattleBGEffect_WobblePlayer
dw BattleBGEffect_WobbleScreen
2018-06-24 07:09:41 -07:00
BattleBGEffect_End:
call EndBattleBGEffect
ret
2018-06-24 07:09:41 -07:00
BatttleBGEffects_GetNamedJumptablePointer:
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld l, [hl]
2015-12-23 17:46:23 -08:00
ld h, 0
add hl, hl
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
ret
2018-06-24 07:09:41 -07:00
BattleBGEffects_AnonJumptable:
pop de
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld l, [hl]
2015-12-23 17:46:23 -08:00
ld h, 0
add hl, hl
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
BattleBGEffects_IncAnonJumptableIndex:
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
inc [hl]
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_FlashInverted:
ld de, .inverted
2015-12-23 17:46:23 -08:00
jp BattleBGEffect_FlashContinue
.inverted
dc 3, 2, 1, 0
dc 0, 1, 2, 3
2018-06-24 07:09:41 -07:00
BattleBGEffect_FlashWhite:
ld de, .white
2015-12-23 17:46:23 -08:00
jp BattleBGEffect_FlashContinue
.white
dc 3, 2, 1, 0
dc 0, 0, 0, 0
2018-06-24 07:09:41 -07:00
BattleBGEffect_FlashContinue:
2015-12-23 17:46:23 -08:00
; current timer, flash duration, number of flashes
ld a, $1
2020-11-09 12:05:14 -08:00
ld [wBattleBGEffectTempID], a ; unused?
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld a, [hl]
and a
2015-12-23 17:46:23 -08:00
jr z, .init
dec [hl]
ret
2015-12-23 17:46:23 -08:00
.init
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld [hl], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
and a
2015-12-23 17:46:23 -08:00
jr nz, .apply_pal
call EndBattleBGEffect
ret
2015-12-23 17:46:23 -08:00
.apply_pal
dec a
ld [hl], a
and 1
ld l, a
ld h, 0
add hl, de
ld a, [hl]
2015-12-23 11:00:29 -08:00
ld [wBGP], a
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_WhiteHues:
2015-12-26 18:59:03 -08:00
ld de, .Pals
call BattleBGEffect_GetNthDMGPal
jr c, .quit
2015-12-23 11:00:29 -08:00
ld [wBGP], a
ret
2015-12-26 18:59:03 -08:00
.quit
call EndBattleBGEffect
ret
.Pals:
dc 3, 2, 1, 0
dc 3, 2, 0, 0
dc 3, 1, 0, 0
2015-12-26 18:59:03 -08:00
db -1
2018-06-24 07:09:41 -07:00
BattleBGEffect_BlackHues:
2015-12-26 18:59:03 -08:00
ld de, .Pals
call BattleBGEffect_GetNthDMGPal
jr c, .quit
2015-12-23 11:00:29 -08:00
ld [wBGP], a
ret
2015-12-26 18:59:03 -08:00
.quit
call EndBattleBGEffect
ret
.Pals:
dc 3, 2, 1, 0
dc 3, 3, 1, 0
dc 3, 3, 2, 0
2015-12-26 18:59:03 -08:00
db -1
2018-06-24 07:09:41 -07:00
BattleBGEffect_AlternateHues:
2015-12-26 18:59:03 -08:00
ld de, .Pals
call BattleBGEffect_GetNthDMGPal
jr c, .quit
2015-12-23 11:00:29 -08:00
ld [wBGP], a
ld [wOBP1], a
ret
2015-12-26 18:59:03 -08:00
.quit
call EndBattleBGEffect
ret
.Pals:
dc 3, 2, 1, 0
dc 3, 3, 2, 0
dc 3, 3, 3, 0
dc 3, 3, 2, 0
dc 3, 2, 1, 0
dc 2, 1, 0, 0
dc 1, 0, 0, 0
dc 2, 1, 0, 0
2015-12-26 18:59:03 -08:00
db -2
BattleBGEffect_CycleOBPalsGrayAndYellow:
2015-12-23 17:46:23 -08:00
ld de, .PalsCGB
2015-12-26 18:59:03 -08:00
call BattleBGEffect_GetNthDMGPal
2015-12-23 11:00:29 -08:00
ld [wOBP0], a
ret
.PalsCGB:
dc 3, 2, 1, 0
dc 2, 1, 0, 0
2015-12-26 18:59:03 -08:00
db -2
BattleBGEffect_CycleMidOBPalsGrayAndYellow:
2015-12-23 17:46:23 -08:00
ld de, .PalsCGB
2015-12-26 18:59:03 -08:00
call BattleBGEffect_GetNthDMGPal
2015-12-23 11:00:29 -08:00
ld [wOBP0], a
ret
.PalsCGB:
dc 3, 2, 1, 0
dc 3, 1, 2, 0
2015-12-26 18:59:03 -08:00
db -2
BattleBGEffect_CycleBGPals_Inverted:
2015-12-23 17:46:23 -08:00
ld de, .Pals
2015-12-26 18:59:03 -08:00
call BattleBGEffect_GetNthDMGPal
2015-12-23 11:00:29 -08:00
ld [wBGP], a
ret
.Pals:
dc 0, 1, 2, 3
dc 1, 2, 0, 3
dc 2, 0, 1, 3
2015-12-26 18:59:03 -08:00
db -2
2018-06-24 07:09:41 -07:00
BattleBGEffect_HideMon:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw BattleBGEffects_IncAnonJumptableIndex
dw BattleBGEffects_IncAnonJumptableIndex
dw BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
dw .four
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
push bc
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_side
hlcoord 12, 0
lb bc, 7, 7
2015-12-24 10:33:54 -08:00
jr .got_pointer
2015-12-23 17:46:23 -08:00
2015-12-24 10:33:54 -08:00
.player_side
hlcoord 2, 6
lb bc, 6, 6
2015-12-24 10:33:54 -08:00
.got_pointer
call ClearBox
pop bc
xor a
ldh [hBGMapThird], a
ld a, $1
ldh [hBGMapMode], a
ret
2015-12-24 10:33:54 -08:00
.four
xor a
ldh [hBGMapMode], a
call EndBattleBGEffect
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_ShowMon:
2015-12-24 10:33:54 -08:00
call BGEffect_CheckFlyDigStatus
jr z, .not_flying
call EndBattleBGEffect
ret
2015-12-24 10:33:54 -08:00
.not_flying
call BGEffect_CheckBattleTurn
jr nz, .player_side
ld de, .EnemyData
jr .got_pointer
2015-12-23 17:46:23 -08:00
2015-12-24 10:33:54 -08:00
.player_side
ld de, .PlayerData
.got_pointer
ld a, e
2020-11-09 12:05:14 -08:00
ld [wBattlePicResizeTempPointer], a
ld a, d
2020-11-09 12:05:14 -08:00
ld [wBattlePicResizeTempPointer + 1], a
2015-12-24 10:33:54 -08:00
call BattleBGEffect_RunPicResizeScript
ret
.PlayerData:
2015-12-24 10:33:54 -08:00
db 0, $31, 0
db -1
.EnemyData:
2015-12-24 10:33:54 -08:00
db 3, $00, 3
db -1
BattleBGEffect_BattlerObj_1Row:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw BattleBGEffects_IncAnonJumptableIndex
dw BattleBGEffects_IncAnonJumptableIndex
dw BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
dw .five
2015-12-24 10:33:54 -08:00
.zero
call BGEffect_CheckFlyDigStatus
jr z, .not_flying_digging
ld hl, wLastAnimObjectIndex
inc [hl]
call EndBattleBGEffect
ret
2015-12-24 10:33:54 -08:00
.not_flying_digging
call BattleBGEffects_IncAnonJumptableIndex
push bc
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_side
ld a, ANIM_OBJ_ENEMYFEET_1ROW
ld [wBattleObjectTempID], a
ld a, 16 * TILE_WIDTH + 4
2015-12-24 10:33:54 -08:00
jr .okay
2015-12-23 17:46:23 -08:00
.player_side
ld a, ANIM_OBJ_PLAYERHEAD_1ROW
ld [wBattleObjectTempID], a
ld a, 6 * TILE_WIDTH
2015-12-24 10:33:54 -08:00
.okay
ld [wBattleObjectTempXCoord], a
ld a, 8 * TILE_WIDTH
ld [wBattleObjectTempYCoord], a
xor a
ld [wBattleObjectTempParam], a
call _QueueBattleAnimation
pop bc
ret
2015-12-24 10:33:54 -08:00
.one
call BattleBGEffects_IncAnonJumptableIndex
push bc
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_side_2
hlcoord 12, 6
2015-12-24 10:33:54 -08:00
lb bc, 1, 7
jr .okay2
2015-12-23 17:46:23 -08:00
.player_side_2
hlcoord 2, 6
lb bc, 1, 6
2015-12-24 10:33:54 -08:00
.okay2
call ClearBox
ld a, $1
ldh [hBGMapMode], a
pop bc
ret
2015-12-24 10:33:54 -08:00
.five
xor a
ldh [hBGMapMode], a
call EndBattleBGEffect
ret
BattleBGEffect_BattlerObj_2Row:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw BattleBGEffects_IncAnonJumptableIndex
dw BattleBGEffects_IncAnonJumptableIndex
dw BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
dw .five
2015-12-24 10:33:54 -08:00
.zero
call BGEffect_CheckFlyDigStatus
jr z, .not_flying_digging
ld hl, wLastAnimObjectIndex
inc [hl]
call EndBattleBGEffect
ret
2015-12-24 10:33:54 -08:00
.not_flying_digging
call BattleBGEffects_IncAnonJumptableIndex
push bc
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_side
ld a, ANIM_OBJ_ENEMYFEET_2ROW
ld [wBattleObjectTempID], a
ld a, 16 * TILE_WIDTH + 4
2015-12-24 10:33:54 -08:00
jr .okay
2015-12-23 17:46:23 -08:00
.player_side
ld a, ANIM_OBJ_PLAYERHEAD_2ROW
ld [wBattleObjectTempID], a
ld a, 6 * TILE_WIDTH
2015-12-24 10:33:54 -08:00
.okay
ld [wBattleObjectTempXCoord], a
ld a, 8 * TILE_WIDTH
ld [wBattleObjectTempYCoord], a
xor a
ld [wBattleObjectTempParam], a
call _QueueBattleAnimation
pop bc
ret
2015-12-24 10:33:54 -08:00
.one
call BattleBGEffects_IncAnonJumptableIndex
push bc
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_side_2
hlcoord 12, 5
2015-12-24 10:33:54 -08:00
lb bc, 2, 7
jr .okay2
2015-12-23 17:46:23 -08:00
.player_side_2
hlcoord 2, 6
lb bc, 2, 6
2015-12-24 10:33:54 -08:00
.okay2
call ClearBox
ld a, $1
ldh [hBGMapMode], a
pop bc
ret
2015-12-24 10:33:54 -08:00
.five
xor a
ldh [hBGMapMode], a
call EndBattleBGEffect
ret
2018-06-24 07:09:41 -07:00
_QueueBattleAnimation:
2017-12-24 09:47:30 -08:00
callfar QueueBattleAnimation
ret
BattleBGEffect_RemoveMon:
; Slides mon out of screen
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw BattleBGEffects_IncAnonJumptableIndex
dw BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
dw .four
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
ld [hl], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
and a
2015-12-24 10:33:54 -08:00
jr z, .user
ld a, $9
2015-12-24 10:33:54 -08:00
jr .okay
2015-12-23 17:46:23 -08:00
2015-12-24 10:33:54 -08:00
.user
ld a, $8
2015-12-24 10:33:54 -08:00
.okay
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], a
ret
2015-12-24 10:33:54 -08:00
.one
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
and a
2015-12-24 10:33:54 -08:00
jr z, .user_2
hlcoord 0, 6
2015-12-24 10:33:54 -08:00
lb de, 8, 6
.row1
push de
push hl
2015-12-24 10:33:54 -08:00
.col1
inc hl
ld a, [hld]
ld [hli], a
dec d
2015-12-24 10:33:54 -08:00
jr nz, .col1
pop hl
2015-12-24 10:33:54 -08:00
ld de, SCREEN_WIDTH
add hl, de
pop de
dec e
2015-12-24 10:33:54 -08:00
jr nz, .row1
jr .okay2
2015-12-23 17:46:23 -08:00
2015-12-24 10:33:54 -08:00
.user_2
hlcoord 19, 0
2015-12-24 10:33:54 -08:00
lb de, 8, 7
.row2
push de
push hl
2015-12-24 10:33:54 -08:00
.col2
dec hl
ld a, [hli]
ld [hld], a
dec d
2015-12-24 10:33:54 -08:00
jr nz, .col2
pop hl
2015-12-24 10:33:54 -08:00
ld de, SCREEN_WIDTH
add hl, de
pop de
dec e
2015-12-24 10:33:54 -08:00
jr nz, .row2
.okay2
xor a
ldh [hBGMapThird], a
ld a, $1
ldh [hBGMapMode], a
call BattleBGEffects_IncAnonJumptableIndex
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
dec [hl]
ret
2015-12-24 10:33:54 -08:00
.four
xor a
ldh [hBGMapMode], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
and a
2015-12-24 10:33:54 -08:00
jr z, .done
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld [hl], $1
ret
2015-12-24 10:33:54 -08:00
.done
call EndBattleBGEffect
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_EnterMon:
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_turn
ld de, .EnemyData
jr .okay
.player_turn
ld de, .PlayerData
.okay
ld a, e
2020-11-09 12:05:14 -08:00
ld [wBattlePicResizeTempPointer], a
ld a, d
2020-11-09 12:05:14 -08:00
ld [wBattlePicResizeTempPointer + 1], a
2015-12-24 10:33:54 -08:00
call BattleBGEffect_RunPicResizeScript
ret
.PlayerData:
2015-12-24 10:33:54 -08:00
db 2, $31, 2
db 1, $31, 1
db 0, $31, 0
db -1
.EnemyData:
2015-12-24 10:33:54 -08:00
db 5, $00, 5
db 4, $00, 4
db 3, $00, 3
db -1
2018-06-24 07:09:41 -07:00
BattleBGEffect_ReturnMon:
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_turn
ld de, .EnemyData
jr .okay
.player_turn
ld de, .PlayerData
.okay
ld a, e
2020-11-09 12:05:14 -08:00
ld [wBattlePicResizeTempPointer], a
ld a, d
2020-11-09 12:05:14 -08:00
ld [wBattlePicResizeTempPointer + 1], a
2015-12-24 10:33:54 -08:00
call BattleBGEffect_RunPicResizeScript
ret
.PlayerData:
2015-12-24 10:33:54 -08:00
db 0, $31, 0
db -2, $66, 0
db 1, $31, 1
db -2, $44, 1
db 2, $31, 2
db -2, $22, 2
db -3, $00, 0
db -1
.EnemyData:
2015-12-24 10:33:54 -08:00
db 3, $00, 3
db -2, $77, 3
db 4, $00, 4
db -2, $55, 4
db 5, $00, 5
db -2, $33, 5
db -3, $00, 0
db -1
2018-06-24 07:09:41 -07:00
BattleBGEffect_RunPicResizeScript:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw BattleBGEffects_IncAnonJumptableIndex
dw BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
dw .restart
dw .end
2015-12-24 10:33:54 -08:00
.zero
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld e, [hl]
ld d, $0
inc [hl]
2020-11-09 12:05:14 -08:00
ld a, [wBattlePicResizeTempPointer]
ld l, a
2020-11-09 12:05:14 -08:00
ld a, [wBattlePicResizeTempPointer + 1]
ld h, a
add hl, de
add hl, de
add hl, de
ld a, [hl]
2015-12-24 10:33:54 -08:00
cp -1
jr z, .end
cp -2
jr z, .clear
cp -3
jr z, .skip
2016-01-12 09:46:18 -08:00
call .PlaceGraphic
2015-12-24 10:33:54 -08:00
.skip
call BattleBGEffects_IncAnonJumptableIndex
ld a, $1
ldh [hBGMapMode], a
ret
2015-12-24 10:33:54 -08:00
.clear
call .ClearBox
jr .zero
2015-12-24 10:33:54 -08:00
.restart
xor a
ldh [hBGMapMode], a
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld [hl], $0
ret
2015-12-24 10:33:54 -08:00
.end
xor a
ldh [hBGMapMode], a
call EndBattleBGEffect
ret
.ClearBox:
2015-12-24 10:33:54 -08:00
; get dims
push bc
inc hl
ld a, [hli]
ld b, a
and $f
ld c, a
ld a, b
swap a
and $f
ld b, a
2015-12-24 10:33:54 -08:00
; get coords
ld e, [hl]
ld d, 0
2015-12-24 10:33:54 -08:00
ld hl, .Coords
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
call ClearBox
pop bc
ret
.PlaceGraphic:
2015-12-24 10:33:54 -08:00
; get dims
push bc
push hl
ld e, [hl]
ld d, 0
2015-12-24 10:33:54 -08:00
ld hl, .BGSquares
add hl, de
add hl, de
add hl, de
ld a, [hli]
ld b, a
and $f
ld c, a
ld a, b
swap a
and $f
ld b, a
2015-12-24 10:33:54 -08:00
; store pointer
ld e, [hl]
inc hl
ld d, [hl]
2015-12-24 10:33:54 -08:00
; get byte
pop hl
inc hl
ld a, [hli]
2020-11-09 12:05:14 -08:00
ld [wBattlePicResizeTempBaseTileID], a
2015-12-24 10:33:54 -08:00
; get coord
push de
ld e, [hl]
ld d, 0
2015-12-24 10:33:54 -08:00
ld hl, .Coords
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
pop de
2015-12-24 10:33:54 -08:00
; fill box
.row
push bc
push hl
2020-11-09 12:05:14 -08:00
ld a, [wBattlePicResizeTempBaseTileID]
ld b, a
2015-12-24 10:33:54 -08:00
.col
ld a, [de]
add b
ld [hli], a
inc de
dec c
2015-12-24 10:33:54 -08:00
jr nz, .col
pop hl
2015-12-24 10:33:54 -08:00
ld bc, SCREEN_WIDTH
add hl, bc
pop bc
dec b
2015-12-24 10:33:54 -08:00
jr nz, .row
pop bc
ret
.Coords:
2015-02-07 23:06:52 -08:00
dwcoord 2, 6
dwcoord 3, 8
dwcoord 4, 10
dwcoord 12, 0
dwcoord 13, 2
dwcoord 14, 4
2015-12-24 10:33:54 -08:00
.BGSquares:
MACRO bgsquare
dn \1, \2
2015-12-24 10:33:54 -08:00
dw \3
2017-12-28 13:31:16 -08:00
ENDM
2015-12-24 10:33:54 -08:00
bgsquare 6, 6, .SixBySix
bgsquare 4, 4, .FourByFour
bgsquare 2, 2, .TwoByTwo
bgsquare 7, 7, .SevenBySeven
bgsquare 5, 5, .FiveByFive
bgsquare 3, 3, .ThreeByThree
.SixBySix:
db $00, $06, $0c, $12, $18, $1e
db $01, $07, $0d, $13, $19, $1f
db $02, $08, $0e, $14, $1a, $20
db $03, $09, $0f, $15, $1b, $21
db $04, $0a, $10, $16, $1c, $22
db $05, $0b, $11, $17, $1d, $23
.FourByFour:
db $00, $0c, $12, $1e
db $02, $0e, $14, $20
db $03, $0f, $15, $21
db $05, $11, $17, $23
.TwoByTwo:
db $00, $1e
db $05, $23
.SevenBySeven:
db $00, $07, $0e, $15, $1c, $23, $2a
db $01, $08, $0f, $16, $1d, $24, $2b
db $02, $09, $10, $17, $1e, $25, $2c
db $03, $0a, $11, $18, $1f, $26, $2d
db $04, $0b, $12, $19, $20, $27, $2e
db $05, $0c, $13, $1a, $21, $28, $2f
db $06, $0d, $14, $1b, $22, $29, $30
.FiveByFive:
db $00, $07, $15, $23, $2a
db $01, $08, $16, $24, $2b
db $03, $0a, $18, $26, $2d
db $05, $0c, $1a, $28, $2f
db $06, $0d, $1b, $29, $30
.ThreeByThree:
db $00, $15, $2a
db $03, $18, $2d
db $06, $1b, $30
2018-06-24 07:09:41 -07:00
BattleBGEffect_Surf:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-23 19:51:50 -08:00
dw .zero
dw .one
dw .two
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-23 19:51:50 -08:00
lb de, 2, 2
call InitSurfWaves
2015-12-24 10:33:54 -08:00
.one
ldh a, [hLCDCPointer]
and a
ret z
push bc
2015-12-23 19:51:50 -08:00
call .RotatewSurfWaveBGEffect
pop bc
ret
2015-12-24 10:33:54 -08:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
.RotatewSurfWaveBGEffect:
2015-12-23 19:51:50 -08:00
ld hl, wSurfWaveBGEffect
ld de, wSurfWaveBGEffect + 1
ld c, wSurfWaveBGEffectEnd - wSurfWaveBGEffect - 1
ld a, [hl]
push af
2015-12-23 19:51:50 -08:00
.loop
ld a, [de]
inc de
ld [hli], a
dec c
2015-12-23 19:51:50 -08:00
jr nz, .loop
pop af
ld [hl], a
2018-01-23 14:39:09 -08:00
ld de, wLYOverridesBackup
2015-12-23 19:51:50 -08:00
ld hl, wSurfWaveBGEffect
ld bc, $0
2015-12-23 19:51:50 -08:00
.loop2
ldh a, [hLYOverrideStart]
cp e
2015-12-23 19:51:50 -08:00
jr nc, .load_zero
push hl
add hl, bc
ld a, [hl]
pop hl
2015-12-23 19:51:50 -08:00
jr .okay
2015-12-23 17:46:23 -08:00
2015-12-23 19:51:50 -08:00
.load_zero
xor a
2015-12-23 19:51:50 -08:00
.okay
ld [de], a
ld a, c
inc a
and $3f
ld c, a
inc de
ld a, e
cp $5f
2015-12-23 19:51:50 -08:00
jr c, .loop2
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_Whirlpool:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCY)
ldh [hLCDCPointer], a
xor a
ldh [hLYOverrideStart], a
ld a, $5e
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
lb de, 2, 2
call DeformScreen
ret
2015-12-24 10:33:54 -08:00
.one
call BattleBGEffect_WavyScreenFX
ret
2015-12-24 10:33:54 -08:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
BattleBGEffect_StartWater:
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCY)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
call EndBattleBGEffect
ret
BattleBGEffect_Water:
; BG_EFFECT_STRUCT_JT_INDEX: defines Y position of deformation
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
ld e, a
add $4
ld [hl], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
and $f0
swap a
xor $ff
add $4
ld d, a
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld a, [hl]
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempProgress], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
cp $20
2015-12-24 10:33:54 -08:00
jr nc, .done
inc [hl]
2015-12-26 18:59:03 -08:00
inc [hl]
call DeformWater
ret
2015-12-24 10:33:54 -08:00
.done
call BattleBGEffects_ClearLYOverrides
call EndBattleBGEffect
ret
BattleBGEffect_EndWater:
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_Psychic:
; Hardcoded to always affect opponent
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
ldh [hLCDCPointer], a
xor a
ldh [hLYOverrideStart], a
ld a, $5f
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
lb de, 6, 5
call DeformScreen
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
ret
2015-12-24 10:33:54 -08:00
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
inc [hl]
and $3
ret nz
2015-12-24 10:33:54 -08:00
call BattleBGEffect_WavyScreenFX
ret
2015-12-24 10:33:54 -08:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_Teleport:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
2015-12-24 10:33:54 -08:00
lb de, 6, 5
call DeformScreen
ret
2015-12-24 10:33:54 -08:00
.one
call BattleBGEffect_WavyScreenFX
ret
2015-12-24 10:33:54 -08:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_NightShade:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCY)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld e, [hl]
2015-12-24 10:33:54 -08:00
ld d, 2
call DeformScreen
ret
2015-12-24 10:33:54 -08:00
.one
call BattleBGEffect_WavyScreenFX
ret
2015-12-24 10:33:54 -08:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_DoubleTeam:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
dw .three
dw .four
dw .five
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld [hl], $0
ret
2015-12-24 10:33:54 -08:00
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
cp $10
2015-12-24 10:33:54 -08:00
jr nc, .next
inc [hl]
2015-12-24 10:33:54 -08:00
call .UpdateLYOverrides
ret
2015-12-24 10:33:54 -08:00
.three
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
cp $ff
2015-12-24 10:33:54 -08:00
jr z, .next
dec [hl]
2015-12-24 10:33:54 -08:00
call .UpdateLYOverrides
ret
2015-12-24 10:33:54 -08:00
.next
call BattleBGEffects_IncAnonJumptableIndex
ret
2015-12-24 10:33:54 -08:00
.two
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
ld d, $2
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
add [hl]
2015-12-24 10:33:54 -08:00
call .UpdateLYOverrides
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
add $4
ld [hl], a
2015-12-24 10:33:54 -08:00
.four
ret
.UpdateLYOverrides:
ld e, a
xor $ff
inc a
ld d, a
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
ldh a, [hLYOverrideStart]
ld l, a
ldh a, [hLYOverrideEnd]
sub l
srl a
push af
2015-12-24 10:33:54 -08:00
.loop
ld [hl], e
inc hl
ld [hl], d
inc hl
dec a
2015-12-24 10:33:54 -08:00
jr nz, .loop
pop af
ret nc
ld [hl], e
ret
2015-12-24 10:33:54 -08:00
.five
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_AcidArmor:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCY)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld e, [hl]
2015-12-24 10:33:54 -08:00
ld d, 2
call DeformScreen
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
ldh a, [hLYOverrideEnd]
ld l, a
ld [hl], $0
dec l
ld [hl], $0
ret
2015-12-24 10:33:54 -08:00
.one
ldh a, [hLYOverrideEnd]
ld l, a
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
ld e, l
ld d, h
dec de
2015-12-24 10:33:54 -08:00
.loop
ld a, [de]
dec de
ld [hld], a
ldh a, [hLYOverrideStart]
cp l
2015-12-24 10:33:54 -08:00
jr nz, .loop
ld [hl], $90
ldh a, [hLYOverrideEnd]
ld l, a
ld a, [hl]
cp $1
2015-12-24 10:33:54 -08:00
jr c, .okay
cp $90
2015-12-24 10:33:54 -08:00
jr z, .okay
ld [hl], $0
2015-12-24 10:33:54 -08:00
.okay
dec l
ld a, [hl]
cp $2
ret c
cp $90
ret z
ld [hl], $0
ret
2015-12-24 10:33:54 -08:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_Withdraw:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCY)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld [hl], $1
ret
2015-12-24 10:33:54 -08:00
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
and $3f
ld d, a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
cp d
ret nc
2016-05-05 12:07:37 -07:00
call BGEffect_DisplaceLYOverridesBackup
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
rlca
rlca
and $3
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
add [hl]
ld [hl], a
ret
2015-12-24 10:33:54 -08:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_Dig:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
dw .three
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCY)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld [hl], $2
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
ret
2015-12-24 10:33:54 -08:00
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
and a
2015-12-24 10:33:54 -08:00
jr z, .next
dec [hl]
ret
2015-12-24 10:33:54 -08:00
.next
ld [hl], $10
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
.two
ldh a, [hLYOverrideStart]
ld l, a
ldh a, [hLYOverrideEnd]
sub l
dec a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
cp [hl]
ret c
ld a, [hl]
push af
and $7
2015-12-24 10:33:54 -08:00
jr nz, .skip
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
dec [hl]
2015-12-24 10:33:54 -08:00
.skip
pop af
2016-05-05 12:07:37 -07:00
call BGEffect_DisplaceLYOverridesBackup
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
inc [hl]
2015-12-26 18:59:03 -08:00
inc [hl]
ret
2015-12-24 10:33:54 -08:00
.three
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_Tackle:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw Tackle_MoveForward
dw Tackle_ReturnMove
2015-12-24 10:33:54 -08:00
dw .three
2015-12-24 10:33:54 -08:00
.zero
; Prepares mon to move forward (player moves right, enemy moves left)
2020-11-09 12:05:14 -08:00
; BG_EFFECT_STRUCT_PARAM will keep track of distance moved, so it's reset to 0 here
; BG_EFFECT_STRUCT_BATTLE_TURN is set to 2 or -2 depending on target
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
2019-04-08 05:15:10 -07:00
ld [hl], 0
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_side
ld a, 2
jr .okay
.player_side
ld a, -2
.okay
ld [hl], a
ret
2015-12-24 10:33:54 -08:00
.three
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
BattleBGEffect_BodySlam:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw Tackle_MoveForward
dw Tackle_ReturnMove
2015-12-24 10:33:54 -08:00
dw .three
2015-12-24 10:33:54 -08:00
.zero
; Prepares mon to move forward (player moves right, enemy moves left)
2020-11-09 12:05:14 -08:00
; BG_EFFECT_STRUCT_PARAM will keep track of distance moved, so it's reset to 0 here
; BG_EFFECT_STRUCT_BATTLE_TURN is set to 2 or -2 depending on target
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms2
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
2019-04-08 05:15:10 -07:00
ld [hl], 0
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_side
2019-04-08 05:15:10 -07:00
ld a, 2
2015-12-24 10:33:54 -08:00
jr .okay
.player_side
ld a, -2
.okay
ld [hl], a
ret
2015-12-24 10:33:54 -08:00
.three
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
Tackle_MoveForward:
; Moves user horizontally in a direction that can be positive or negative. When the limit is reached (8 pixels) we move to the next function in the jumptable (Tackle_ReturnMove)
; BG_EFFECT_STRUCT_BATTLE_TURN: speed and direction
2020-11-09 12:05:14 -08:00
; BG_EFFECT_STRUCT_PARAM: keeps track of distance moved
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
2015-12-24 10:33:54 -08:00
cp -8
jr z, .reached_limit
2019-04-08 05:15:10 -07:00
cp 8
2015-12-24 10:33:54 -08:00
jr nz, .finish
.reached_limit
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
.finish
call Rollout_FillLYOverridesBackup
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
add [hl]
ld [hl], a
ret
Tackle_ReturnMove:
; Move user horizontally back to initial position. When we back to position 0, we move to the next function in the jumptable
; BG_EFFECT_STRUCT_BATTLE_TURN: is turned into a negative number (this number is not saved to preserve the initial number)
2020-11-09 12:05:14 -08:00
; BG_EFFECT_STRUCT_PARAM: keeps track of distance moved
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
and a
jr nz, .move_back
call BattleBGEffects_IncAnonJumptableIndex
.move_back
call Rollout_FillLYOverridesBackup
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
xor $ff
inc a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
add [hl]
ld [hl], a
ret
Rollout_FillLYOverridesBackup:
push af
ld a, [wFXAnimID + 1]
or a
2015-12-24 10:33:54 -08:00
jr nz, .not_rollout
ld a, [wFXAnimID]
cp ROLLOUT
2015-12-24 10:33:54 -08:00
jr z, .rollout
.not_rollout
pop af
2016-05-05 12:07:37 -07:00
jp BGEffect_FillLYOverridesBackup
2015-12-24 10:33:54 -08:00
.rollout
ldh a, [hLYOverrideStart]
ld d, a
ldh a, [hLYOverrideEnd]
sub d
ld d, a
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
ldh a, [hSCY]
or a
2015-12-24 10:33:54 -08:00
jr nz, .skip1
ldh a, [hLYOverrideStart]
or a
2015-12-24 10:33:54 -08:00
jr z, .skip2
dec a
ld l, a
ld [hl], $0
2015-12-24 10:33:54 -08:00
jr .skip2
2015-12-23 17:46:23 -08:00
2015-12-24 10:33:54 -08:00
.skip1
ldh a, [hLYOverrideEnd]
dec a
ld l, a
ld [hl], $0
2015-12-24 10:33:54 -08:00
.skip2
ldh a, [hSCY]
ld l, a
ldh a, [hLYOverrideStart]
sub l
2015-12-24 10:33:54 -08:00
jr nc, .skip3
xor a
dec d
2015-12-24 10:33:54 -08:00
.skip3
ld l, a
pop af
2015-12-24 10:33:54 -08:00
.loop
ld [hli], a
dec d
2015-12-24 10:33:54 -08:00
jr nz, .loop
ret
BattleBGEffect_BetaPursuit: ; unused
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
dw VitalThrow_MoveBackwards
dw Tackle_MoveForward
dw Tackle_ReturnMove
2015-12-24 10:33:54 -08:00
dw .three
2015-12-24 10:33:54 -08:00
.three
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
VitalThrow_MoveBackwards:
; Prepares mon to move back back (player moves left, enemy moves right)
2020-11-09 12:05:14 -08:00
; BG_EFFECT_STRUCT_PARAM: keeps track of distance moved, so it's reset to 0 here
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_turn
ld a, -2
jr .okay
.player_turn
ld a, 2
.okay
ld [hl], a
ret
BattleBGEffect_VitalThrow:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
dw VitalThrow_MoveBackwards
dw Tackle_MoveForward
2015-12-24 10:33:54 -08:00
dw .two
dw Tackle_ReturnMove
2015-12-24 10:33:54 -08:00
dw .four
2015-12-24 10:33:54 -08:00
.four
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
2015-12-24 10:33:54 -08:00
.two
ret
BattleBGEffect_WobbleMon:
; Similar to BattleBGEffect_WobblePlayer, except it can affect either side and the sine movement has a radius of 8 instead of 6 and it moves at twice the rate
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
dw .zero
dw .one
dw .two
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
ret
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
ld d, $8
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
2016-05-05 12:07:37 -07:00
call BGEffect_FillLYOverridesBackup
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
add $4
ld [hl], a
ret
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
BattleBGEffect_Flail:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
dw .zero
dw .one
dw .two
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
xor a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld [hli], a
ld [hl], a
ret
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
ld d, $6
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
push af
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
ld d, $2
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
ld e, a
pop af
add e
2016-05-05 12:07:37 -07:00
call BGEffect_FillLYOverridesBackup
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
add $8
ld [hl], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
add $2
ld [hl], a
ret
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
BattleBGEffect_WaveDeformMon:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
dw .zero
dw .one
dw .two
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ret
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
cp $20
ret nc
inc [hl]
ld d, a
2015-12-24 10:33:54 -08:00
ld e, 4
call DeformScreen
ret
.two
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
and a
jr z, .reset
dec [hl]
ld d, a
2015-12-24 10:33:54 -08:00
ld e, 4
call DeformScreen
ret
.reset
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_BounceDown:
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCY)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms2
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld [hl], $1
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $20
ret
2015-12-24 10:33:54 -08:00
.one
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
cp $38
ret nc
push af
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
ld d, $10
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Cosine
add $10
ld d, a
pop af
add d
2016-05-05 12:07:37 -07:00
call BGEffect_DisplaceLYOverridesBackup
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
inc [hl]
2015-12-26 18:59:03 -08:00
inc [hl]
ret
2015-12-24 10:33:54 -08:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
BattleBGEffect_BetaSendOutMon1: ; unused
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
2015-12-24 10:33:54 -08:00
dw .zero
dw .one
dw .two
dw .three
dw .four
dw .five
2015-12-24 10:33:54 -08:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
ld a, $e4
2015-12-24 10:33:54 -08:00
call BattleBGEffects_SetLYOverrides
ld a, $47
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
ldh a, [hLYOverrideStart]
ld l, a
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
2015-12-24 10:33:54 -08:00
.loop
ldh a, [hLYOverrideEnd]
cp l
2015-12-24 10:33:54 -08:00
jr z, .done
xor a
ld [hli], a
2015-12-24 10:33:54 -08:00
jr .loop
2015-12-23 17:46:23 -08:00
2015-12-24 10:33:54 -08:00
.done
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
2015-12-24 10:33:54 -08:00
.one
.four
ret
2015-12-24 10:33:54 -08:00
.two
call .GetLYOverride
jr nc, .next
call .SetLYOverridesBackup
ret
2015-12-24 10:33:54 -08:00
.next
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
ldh a, [hLYOverrideStart]
inc a
ldh [hLYOverrideStart], a
call BattleBGEffects_IncAnonJumptableIndex
ret
2015-12-24 10:33:54 -08:00
.three
call .GetLYOverride
jr nc, .finish
call .SetLYOverridesBackup
ldh a, [hLYOverrideEnd]
dec a
ld l, a
ld [hl], e
ret
2015-12-24 10:33:54 -08:00
.finish
call BattleBGEffects_IncAnonJumptableIndex
ret
.SetLYOverridesBackup:
ld e, a
ldh a, [hLYOverrideStart]
ld l, a
ldh a, [hLYOverrideEnd]
sub l
srl a
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
2015-12-24 10:33:54 -08:00
.loop2
ld [hl], e
inc hl
2015-12-26 18:59:03 -08:00
inc hl
dec a
2015-12-24 10:33:54 -08:00
jr nz, .loop2
ret
2015-12-24 10:33:54 -08:00
.five
2015-12-26 18:59:03 -08:00
call BattleBGEffects_ResetVideoHRAM
ret
.GetLYOverride:
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
inc [hl]
srl a
srl a
srl a
ld e, a
ld d, 0
2015-12-24 10:33:54 -08:00
ld hl, .data
add hl, de
ld a, [hl]
cp $ff
ret
2015-12-24 10:33:54 -08:00
.data
db $00, $40, $90, $e4
db -1
BattleBGEffect_BetaSendOutMon2: ; unused
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
dw .zero
dw .one
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld [hl], $40
ret
.one
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
and a
2015-12-26 18:59:03 -08:00
jr z, .done
dec [hl]
srl a
srl a
srl a
and $f
ld d, a
ld e, a
call DeformScreen
ret
2015-12-26 18:59:03 -08:00
.done
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
BattleBGEffect_FadeMonsToBlackRepeating:
ld de, .Jumptable
2015-12-23 17:46:23 -08:00
call BatttleBGEffects_GetNamedJumptablePointer
jp hl
.Jumptable:
dw .cgb_zero
dw .cgb_one
dw .cgb_two
2017-12-29 04:52:42 -08:00
.cgb_zero
call BattleBGEffects_IncAnonJumptableIndex
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
ret
.cgb_one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
inc [hl]
ld e, a
and $7
ret nz
ld a, e
and $18
sla a
swap a
sla a
ld e, a
ld d, 0
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_2
ld hl, .CGB_DMGEnemyData
add hl, de
ld a, [hli]
push hl
call BGEffects_LoadBGPal1_OBPal0
pop hl
ld a, [hl]
call BGEffects_LoadBGPal0_OBPal1
ret
.player_2
ld hl, .CGB_DMGEnemyData
add hl, de
ld a, [hli]
push hl
call BGEffects_LoadBGPal0_OBPal1
pop hl
ld a, [hl]
call BGEffects_LoadBGPal1_OBPal0
ret
.cgb_two
ld a, $e4
call BGEffects_LoadBGPal0_OBPal1
ld a, $e4
call BGEffects_LoadBGPal1_OBPal0
call EndBattleBGEffect
ret
.CGB_DMGEnemyData:
db $e4, $e4
db $f8, $90
db $fc, $40
db $f8, $90
.DMG_PlayerData:
db $e4, $e4
db $90, $f8
db $40, $fc
db $90, $f8
BattleBGEffect_RapidFlash: ; unused
ld de, .FlashPals
call BGEffect_RapidCyclePals
ret
.FlashPals:
db $e4, $6c, $fe
BattleBGEffect_FadeMonToLight:
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
ld de, .Pals
call BGEffect_RapidCyclePals
ret
.Pals:
db $e4, $90, $40, $ff
BattleBGEffect_FadeMonToBlack:
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
ld de, .Pals
call BGEffect_RapidCyclePals
ret
.Pals:
db $e4, $f8, $fc, $ff
BattleBGEffect_FadeMonToLightRepeating:
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
ld de, .Pals
call BGEffect_RapidCyclePals
ret
.Pals:
db $e4, $90, $40, $90, $fe
BattleBGEffect_FadeMonToBlackRepeating:
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
ld de, .Pals
call BGEffect_RapidCyclePals
ret
.Pals:
db $e4, $f8, $fc, $f8, $fe
BattleBGEffect_CycleMonLightDarkRepeating:
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
ld de, .Pals
call BGEffect_RapidCyclePals
ret
.Pals:
db $e4, $f8, $fc, $f8, $e4, $90, $40, $90, $fe
BattleBGEffect_FlashMonRepeating: ; unused
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
ld de, .Pals
call BGEffect_RapidCyclePals
ret
.Pals:
db $e4, $fc, $e4, $00, $fe
BattleBGEffect_FadeMonToWhiteWaitFadeBack:
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
ld de, .Pals
call BGEffect_RapidCyclePals
ret
.Pals:
db $e4, $90, $40, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $40, $90, $e4, $ff
BattleBGEffect_FadeMonFromWhite: ; unused
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
ld de, .Pals
call BGEffect_RapidCyclePals
ret
.Pals:
db $00, $40, $90, $e4, $ff
2018-06-24 07:09:41 -07:00
BattleBGEffect_VibrateMon:
; Moves mon back and forth sideways for $20 frames
; BG_EFFECT_STRUCT_BATTLE_TURN = BG_EFFECT_TARGET or BG_EFFECT_USER
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
dw .zero
dw .one
2018-06-24 07:09:41 -07:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
2015-12-26 18:59:03 -08:00
call BattleBGEffect_SetLCDStatCustoms1
ldh a, [hLYOverrideEnd]
inc a
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld [hl], $1
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $20
ret
2018-06-24 07:09:41 -07:00
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
and a
jr z, .finish
dec [hl]
and $1
ret nz
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
xor $ff
inc a
ld [hl], a
2016-05-05 12:07:37 -07:00
call BGEffect_FillLYOverridesBackup
ret
.finish
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
BattleBGEffect_WobblePlayer:
; Always affects the player
call BattleBGEffects_AnonJumptable
2015-12-26 18:59:03 -08:00
.anon_dw
dw .zero
dw .one
dw .two
2018-06-24 07:09:41 -07:00
.zero
call BattleBGEffects_IncAnonJumptableIndex
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
2018-08-25 11:34:25 -07:00
ld a, LOW(rSCX)
ldh [hLCDCPointer], a
xor a
ldh [hLYOverrideStart], a
ld a, $37
ldh [hLYOverrideEnd], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
ret
2018-06-24 07:09:41 -07:00
.one
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
cp $40
jr nc, .two
ld d, $6
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
2016-05-05 12:07:37 -07:00
call BGEffect_FillLYOverridesBackup
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
add $2
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
.two
2015-12-23 19:51:50 -08:00
call BattleAnim_ResetLCDStatCustom
ret
BattleBGEffect_Rollout:
call BattleBGEffects_GetShakeAmount
jr c, .xor_a
bit 7, a
jr z, .okay
.xor_a
xor a
.okay
push af
call DelayFrame
pop af
ldh [hSCY], a
xor $ff
inc a
ld [wAnimObject1YOffset], a
ret
BattleBGEffect_ShakeScreenX:
call BattleBGEffects_GetShakeAmount
jr nc, .skip
xor a
.skip
ldh [hSCX], a
ret
BattleBGEffect_ShakeScreenY:
call BattleBGEffects_GetShakeAmount
jr nc, .skip
xor a
.skip
ldh [hSCY], a
ret
BattleBGEffects_GetShakeAmount:
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld a, [hl]
and a
jr nz, .okay
call EndBattleBGEffect
scf
ret
.okay
dec [hl]
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
and $f
jr z, .every_16_frames
dec [hl]
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
and a
ret
.every_16_frames
ld a, [hl]
swap a
or [hl]
ld [hl], a
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
xor $ff
inc a
ld [hl], a
and a
ret
BattleBGEffect_WobbleScreen:
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
cp $40
jr nc, .finish
ld d, $6
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
ldh [hSCX], a
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
add $2
ld [hl], a
ret
.finish
xor a
ldh [hSCX], a
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_GetNthDMGPal:
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld a, [hl]
and a
jr z, .zero
dec [hl]
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
2015-12-26 18:59:03 -08:00
call BattleBGEffect_GetNextDMGPal
ret
.zero
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
2015-12-23 17:46:23 -08:00
ld hl, BG_EFFECT_STRUCT_JT_INDEX
add hl, bc
ld [hl], a
2015-12-26 18:59:03 -08:00
call BattleBGEffect_GetFirstDMGPal
ret
2018-06-24 07:09:41 -07:00
BGEffect_RapidCyclePals:
; Last index in DE: $fe signals a loop, $ff signals end
push de
ld de, .Jumptable_CGB
2015-12-23 17:46:23 -08:00
call BatttleBGEffects_GetNamedJumptablePointer
pop de
jp hl
2018-06-24 07:09:41 -07:00
.Jumptable_CGB:
dw .zero_cgb
dw .one_cgb
dw .two_cgb
dw .three_cgb
dw .four_cgb
2018-06-24 07:09:41 -07:00
.zero_cgb
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
jr nz, .player_turn_cgb
call BattleBGEffects_IncAnonJumptableIndex
call BattleBGEffects_IncAnonJumptableIndex
.player_turn_cgb
call BattleBGEffects_IncAnonJumptableIndex
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
ld [hl], $0
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
.one_cgb
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
and $f
jr z, .okay_1_cgb
dec [hl]
ret
.okay_1_cgb
ld a, [hl]
swap a
or [hl]
ld [hl], a
2015-12-26 18:59:03 -08:00
call BattleBGEffect_GetFirstDMGPal
jr c, .okay_2_cgb
call BGEffects_LoadBGPal0_OBPal1
ret
.okay_2_cgb
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
dec [hl]
ret
2018-06-24 07:09:41 -07:00
.two_cgb
ld a, $e4
call BGEffects_LoadBGPal0_OBPal1
call EndBattleBGEffect
ret
2018-06-24 07:09:41 -07:00
.three_cgb
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ld a, [hl]
and $f
jr z, .okay_3_cgb
dec [hl]
ret
.okay_3_cgb
ld a, [hl]
swap a
or [hl]
ld [hl], a
2015-12-26 18:59:03 -08:00
call BattleBGEffect_GetFirstDMGPal
jr c, .okay_4_cgb
call BGEffects_LoadBGPal1_OBPal0
ret
.okay_4_cgb
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
dec [hl]
ret
2018-06-24 07:09:41 -07:00
.four_cgb
ld a, $e4
call BGEffects_LoadBGPal1_OBPal0
call EndBattleBGEffect
ret
2018-06-24 07:09:41 -07:00
BGEffects_LoadBGPal0_OBPal1:
ld h, a
ldh a, [rSVBK]
push af
ld a, BANK(wBGPals1)
ldh [rSVBK], a
ld a, h
push bc
push af
2018-01-01 06:08:21 -08:00
ld hl, wBGPals2
ld de, wBGPals1
ld b, a
ld c, $1
call CopyPals
2018-01-01 06:08:21 -08:00
ld hl, wOBPals2 palette 1
ld de, wOBPals1 palette 1
pop af
ld b, a
ld c, $1
call CopyPals
pop bc
pop af
ldh [rSVBK], a
2020-08-03 14:41:01 -07:00
ld a, TRUE
ldh [hCGBPalUpdate], a
ret
2018-06-24 07:09:41 -07:00
BGEffects_LoadBGPal1_OBPal0:
ld h, a
ldh a, [rSVBK]
push af
ld a, BANK(wBGPals1)
ldh [rSVBK], a
ld a, h
push bc
push af
2018-01-01 06:08:21 -08:00
ld hl, wBGPals2 palette 1
ld de, wBGPals1 palette 1
ld b, a
ld c, $1
call CopyPals
2018-01-01 06:08:21 -08:00
ld hl, wOBPals2
ld de, wOBPals1
pop af
ld b, a
ld c, $1
call CopyPals
pop bc
pop af
ldh [rSVBK], a
2020-08-03 14:41:01 -07:00
ld a, TRUE
ldh [hCGBPalUpdate], a
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_GetFirstDMGPal:
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld a, [hl]
inc [hl]
2018-06-24 07:09:41 -07:00
BattleBGEffect_GetNextDMGPal:
ld l, a
ld h, 0
add hl, de
ld a, [hl]
2015-12-26 18:59:03 -08:00
cp -1
jr z, .quit
cp -2
jr nz, .repeat
ld a, [de]
2020-11-09 12:05:14 -08:00
ld hl, BG_EFFECT_STRUCT_PARAM
add hl, bc
ld [hl], $0
2015-12-26 18:59:03 -08:00
.repeat
and a
ret
2015-12-26 18:59:03 -08:00
.quit
scf
ret
2018-06-24 07:09:41 -07:00
BattleBGEffects_ClearLYOverrides:
xor a
2018-06-24 07:09:41 -07:00
BattleBGEffects_SetLYOverrides:
2020-05-09 17:07:01 -07:00
ld hl, wLYOverrides
ld e, $99
2015-12-24 10:33:54 -08:00
.loop1
ld [hli], a
dec e
2015-12-24 10:33:54 -08:00
jr nz, .loop1
2018-01-23 14:39:09 -08:00
ld hl, wLYOverridesBackup
ld e, $91
2015-12-24 10:33:54 -08:00
.loop2
ld [hli], a
dec e
2015-12-24 10:33:54 -08:00
jr nz, .loop2
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_SetLCDStatCustoms1:
ldh [hLCDCPointer], a
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
2015-12-26 18:59:03 -08:00
jr nz, .player_turn
lb de, $00, $36
2015-12-24 10:33:54 -08:00
jr .okay
2015-12-23 17:46:23 -08:00
2015-12-26 18:59:03 -08:00
.player_turn
lb de, $2f, $5e
2015-12-24 10:33:54 -08:00
.okay
ld a, d
ldh [hLYOverrideStart], a
ld a, e
ldh [hLYOverrideEnd], a
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_SetLCDStatCustoms2:
ldh [hLCDCPointer], a
2015-12-24 10:33:54 -08:00
call BGEffect_CheckBattleTurn
2015-12-26 18:59:03 -08:00
jr nz, .player_turn
lb de, $00, $36
jr .okay
2015-12-23 17:46:23 -08:00
2015-12-26 18:59:03 -08:00
.player_turn
lb de, $2d, $5e
.okay
ld a, d
ldh [hLYOverrideStart], a
ld a, e
ldh [hLYOverrideEnd], a
ret
2018-06-24 07:09:41 -07:00
BattleAnim_ResetLCDStatCustom:
xor a
ldh [hLYOverrideStart], a
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
xor a
ldh [hLCDCPointer], a
call EndBattleBGEffect
ret
2018-06-24 07:09:41 -07:00
BattleBGEffects_ResetVideoHRAM:
xor a
ldh [hLCDCPointer], a
2015-12-26 18:59:03 -08:00
ld a, %11100100
ldh [rBGP], a
2015-12-23 11:00:29 -08:00
ld [wBGP], a
ld [wOBP1], a
ldh [hLYOverrideStart], a
ldh [hLYOverrideEnd], a
2015-12-24 10:33:54 -08:00
call BattleBGEffects_ClearLYOverrides
ret
DeformScreen:
push bc
xor a
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempProgress], a
ld a, e
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempOffset], a
ld a, d
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempAmplitude], a
ld a, $80
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempTimer], a
2018-01-23 14:39:09 -08:00
ld bc, wLYOverridesBackup
2015-12-24 10:33:54 -08:00
.loop
ldh a, [hLYOverrideStart]
cp c
2015-12-24 10:33:54 -08:00
jr nc, .next
ldh a, [hLYOverrideEnd]
cp c
2015-12-24 10:33:54 -08:00
jr c, .next
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempAmplitude]
ld d, a
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempProgress]
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
ld [bc], a
2015-12-24 10:33:54 -08:00
.next
inc bc
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempOffset]
ld hl, wBattleSineWaveTempProgress
add [hl]
ld [hl], a
2020-11-09 12:05:14 -08:00
ld hl, wBattleSineWaveTempTimer
dec [hl]
2015-12-24 10:33:54 -08:00
jr nz, .loop
pop bc
ret
2018-06-24 07:09:41 -07:00
InitSurfWaves:
push bc
xor a
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempProgress], a
ld a, e
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempOffset], a
ld a, d
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempAmplitude], a
ld a, $40
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempTimer], a
2015-12-23 19:51:50 -08:00
ld bc, wSurfWaveBGEffect
.loop
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempAmplitude]
ld d, a
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempProgress]
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
ld [bc], a
inc bc
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempOffset]
ld hl, wBattleSineWaveTempProgress
add [hl]
ld [hl], a
2020-11-09 12:05:14 -08:00
ld hl, wBattleSineWaveTempTimer
dec [hl]
2015-12-23 19:51:50 -08:00
jr nz, .loop
pop bc
ret
DeformWater:
push bc
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempTimer], a
ld a, e
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempOffset], a
ld a, d
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempAmplitude], a
2015-12-24 10:33:54 -08:00
call .GetLYOverrideBackupAddrOffset
2018-01-23 14:39:09 -08:00
ld hl, wLYOverridesBackup
add hl, de
ld c, l
ld b, h
2015-12-24 10:33:54 -08:00
.loop
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempTimer]
and a
2015-12-24 10:33:54 -08:00
jr z, .done
dec a
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempTimer], a
push af
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempAmplitude]
ld d, a
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempOffset]
push hl
2015-12-23 19:51:50 -08:00
call BattleBGEffects_Sine
ld e, a
pop hl
ldh a, [hLYOverrideEnd]
cp c
2015-12-24 10:33:54 -08:00
jr c, .skip1
ld a, e
ld [bc], a
inc bc
2015-12-24 10:33:54 -08:00
.skip1
ldh a, [hLYOverrideStart]
cp l
2015-12-24 10:33:54 -08:00
jr nc, .skip2
ld [hl], e
dec hl
2015-12-24 10:33:54 -08:00
.skip2
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempOffset]
add $4
2020-11-09 12:05:14 -08:00
ld [wBattleSineWaveTempOffset], a
pop af
2015-12-24 10:33:54 -08:00
jr .loop
2015-12-23 17:46:23 -08:00
2015-12-24 10:33:54 -08:00
.done
pop bc
and a
ret
.GetLYOverrideBackupAddrOffset:
ldh a, [hLYOverrideStart]
ld e, a
2020-11-09 12:05:14 -08:00
ld a, [wBattleSineWaveTempProgress]
add e
ld e, a
ld d, 0
ret
2018-06-24 07:09:41 -07:00
BattleBGEffect_WavyScreenFX:
push bc
ldh a, [hLYOverrideStart]
ld l, a
inc a
ld e, a
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
ld d, h
ldh a, [hLYOverrideEnd]
sub l
and a
2015-12-24 10:33:54 -08:00
jr z, .done
ld c, a
ld a, [hl]
push af
2015-12-24 10:33:54 -08:00
.loop
ld a, [de]
inc de
ld [hli], a
dec c
2015-12-24 10:33:54 -08:00
jr nz, .loop
pop af
ld [hl], a
2015-12-24 10:33:54 -08:00
.done
pop bc
ret
2018-06-24 07:09:41 -07:00
BGEffect_FillLYOverridesBackup:
push af
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
ldh a, [hLYOverrideStart]
ld l, a
ldh a, [hLYOverrideEnd]
sub l
ld d, a
pop af
2016-05-05 12:07:37 -07:00
.loop
ld [hli], a
dec d
2016-05-05 12:07:37 -07:00
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
BGEffect_DisplaceLYOverridesBackup:
; e = a
; d = [hLYOverrideEnd] - [hLYOverrideStart] - a
push af
ld e, a
ldh a, [hLYOverrideStart]
ld l, a
ldh a, [hLYOverrideEnd]
sub l
sub e
ld d, a
2018-01-23 14:39:09 -08:00
ld h, HIGH(wLYOverridesBackup)
ldh a, [hLYOverrideStart]
ld l, a
ld a, $90
2016-05-05 12:07:37 -07:00
.loop
ld [hli], a
dec e
2016-05-05 12:07:37 -07:00
jr nz, .loop
pop af
xor $ff
2016-05-05 12:07:37 -07:00
.loop2
ld [hli], a
dec d
2016-05-05 12:07:37 -07:00
jr nz, .loop2
ret
2018-06-24 07:09:41 -07:00
BGEffect_CheckBattleTurn:
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ldh a, [hBattleTurn]
and $1
xor [hl]
ret
2018-06-24 07:09:41 -07:00
BGEffect_CheckFlyDigStatus:
2015-12-24 10:33:54 -08:00
ld hl, BG_EFFECT_STRUCT_BATTLE_TURN
add hl, bc
ldh a, [hBattleTurn]
and $1
xor [hl]
2015-12-24 10:33:54 -08:00
jr nz, .player
2018-01-23 14:39:09 -08:00
ld a, [wEnemySubStatus3] ; EnemySubStatus3
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
ret
2015-12-24 10:33:54 -08:00
.player
2018-01-23 14:39:09 -08:00
ld a, [wPlayerSubStatus3] ; PlayerSubStatus3
and 1 << SUBSTATUS_FLYING | 1 << SUBSTATUS_UNDERGROUND
ret
2018-06-24 07:09:41 -07:00
BattleBGEffects_Sine:
ld e, a
2017-12-24 09:47:30 -08:00
callfar BattleAnim_Sine_e
ld a, e
ret
2018-06-24 07:09:41 -07:00
BattleBGEffects_Cosine:
ld e, a
2017-12-24 09:47:30 -08:00
callfar BattleAnim_Cosine_e
ld a, e
ret