diff options
Diffstat (limited to 'engine/battle_anims/bg_effects.asm')
-rw-r--r-- | engine/battle_anims/bg_effects.asm | 2376 |
1 files changed, 2376 insertions, 0 deletions
diff --git a/engine/battle_anims/bg_effects.asm b/engine/battle_anims/bg_effects.asm new file mode 100644 index 0000000..c8e42f2 --- /dev/null +++ b/engine/battle_anims/bg_effects.asm @@ -0,0 +1,2376 @@ +include "constants.asm" + +SECTION "Battle Anims BG Effects", ROMX [$4000], BANK [$32] + + 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. + +ExecuteBGEffects: ; c8000 (32:4000) + ld hl, wActiveBGEffects + ld e, 5 +.loop + ld a, [hl] + and a + jr z, .next + ld c, l + ld b, h + push hl + push de + call DoBattleBGEffectFunction + pop de + pop hl +.next + ld bc, 4 + add hl, bc + dec e + jr nz, .loop + ret + +QueueBGEffect: ; c801a (32:401a) + ld hl, wActiveBGEffects + ld e, 5 +.loop + ld a, [hl] + and a + jr z, .load + ld bc, 4 + add hl, bc + dec e + jr nz, .loop + scf + ret + +.load + ld c, l + ld b, h + ld hl, BG_EFFECT_STRUCT_FUNCTION + add hl, bc + ld a, [wBattleAnimTemp0] + ld [hli], a + ld a, [wBattleAnimTemp1] + ld [hli], a + ld a, [wBattleAnimTemp2] + ld [hli], a + ld a, [wBattleAnimTemp3] + ld [hl], a + ret + +EndBattleBGEffect: ; c8043 (32:4043) + ld hl, BG_EFFECT_STRUCT_FUNCTION + add hl, bc + ld [hl], 0 + ret + +DoBattleBGEffectFunction: ; c804a (32:404a) + ld hl, BG_EFFECT_STRUCT_FUNCTION + add hl, bc + ld e, [hl] + ld d, 0 + ld hl, BattleBGEffects + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +BattleBGEffects: ; c805a (32:405a) +; 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_06 + dw BattleBGEffect_07 + dw BattleBGEffect_08 + 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_FeetFollow + dw BattleBGEffect_HeadFollow + dw BattleBGEffect_DoubleTeam + dw BattleBGEffect_AcidArmor + dw BattleBGEffect_RapidFlash + dw BattleBGEffect_16 + dw BattleBGEffect_17 + dw BattleBGEffect_18 + dw BattleBGEffect_19 + dw BattleBGEffect_1a + dw BattleBGEffect_1b + dw BattleBGEffect_1c + dw BattleBGEffect_1d + dw BattleBGEffect_1e + dw BattleBGEffect_1f + dw BattleBGEffect_20 + dw BattleBGEffect_Withdraw + dw BattleBGEffect_BounceDown + dw BattleBGEffect_Dig + dw BattleBGEffect_Tackle + ;dw BattleBGEffect_25 + dw BattleBGEffect_26 + dw BattleBGEffect_27 + dw BattleBGEffect_28 + dw BattleBGEffect_Psychic + dw BattleBGEffect_2a + dw BattleBGEffect_2b + dw BattleBGEffect_2c + dw BattleBGEffect_2d + dw BattleBGEffect_2e + dw BattleBGEffect_2f + ;dw BattleBGEffect_30 + ;dw BattleBGEffect_31 + ;dw BattleBGEffect_32 + ;dw BattleBGEffect_VibrateMon + ;dw BattleBGEffect_WobbleMon + + +BattleBGEffect_End: ; c80c6 (32:40c6) + call EndBattleBGEffect + ret + +BattleBGEffects_AnonJumptable: ; c80d7 (32:40d7) + ld hl, sp+$0 + ld e, [hl] + inc hl + ld d, [hl] + inc de +BatttleBGEffects_GetNamedJumptablePointer: ; c80ca (32:40ca) + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + ld l, [hl] + ld h, 0 + add hl, hl + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + ret + +BattleBGEffects_IncrementJumptable: ; c80e5 (32:40e5) + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + inc [hl] + ret + +BattleBGEffect_FlashInverted: ; c80eb (32:40eb) + ld de, .inverted + call BattleBGEffect_FlashContinue + ret + +.inverted + db %11100100 ; 3210 + db %00011011 ; 0123 +; c80f3 + +BattleBGEffect_FlashWhite: ; c80f3 (32:40f3) + ld de, .white + call BattleBGEffect_FlashContinue + ret + +.white + db %11100100 ; 3210 + db %00000000 ; 0000 +; c80fb + +BattleBGEffect_FlashContinue: ; c80fb (32:40fb) +; current timer, flash duration, number of flashes + ld a, $1 + ld [wBattleAnimTemp0], a + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + ld a, [hl] + and a + jr z, .init + dec [hl] + ret + +.init + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + ld [hl], a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + and a + jr nz, .apply_pal + call EndBattleBGEffect + ret + +.apply_pal + dec a + ld [hl], a + and 1 + ld l, a + ld h, 0 + add hl, de + ld a, [hl] + ld [wBGP], a + ret + +BattleBGEffect_WhiteHues: ; c812d (32:412d) + ld de, .Pals + call BattleBGEffect_GetNthDMGPal + jr c, .quit + ld [wBGP], a + ret + +.quit + call EndBattleBGEffect + ret + +.Pals: + db %11100100 + db %11100000 + db %11010000 + db -1 +; c8141 + +BattleBGEffect_BlackHues: ; c8141 (32:4141) + ld de, .Pals + call BattleBGEffect_GetNthDMGPal + jr c, .quit + ld [wBGP], a + ret + +.quit + call EndBattleBGEffect + ret + +.Pals: + db %11100100 + db %11110100 + db %11111000 + db -1 +; c8155 + +BattleBGEffect_AlternateHues: ; c8155 (32:4155) + ld de, .Pals + call BattleBGEffect_GetNthDMGPal + jr c, .quit + ld [wBGP], a + ld [wOBP1], a + ret + +.quit + call EndBattleBGEffect + ret + +.Pals: + db %11100100 + db %11111000 + db %11111100 + db %11111000 + db %11100100 + db %10010000 + db %01000000 + db %10010000 + db -2 +; c8171 + +BattleBGEffect_06: ; c8171 (32:4171) + call BattleBGEffects_CheckSGB + jr nz, .sgb + ld de, .PalsCGB + jr .okay + +.sgb + ld de, .PalsSGB +.okay + call BattleBGEffect_GetNthDMGPal + ld [wOBP0], a + ret + +.PalsCGB: + db %11100100 + db %10010000 + db -2 + +.PalsSGB: + db %11110000 + db %11000000 + db -2 +; c818b + +BattleBGEffect_07: ; c818b (32:418b) + call BattleBGEffects_CheckSGB + jr nz, .sgb + ld de, .PalsCGB + jr .okay + +.sgb + ld de, .PalsSGB +.okay + call BattleBGEffect_GetNthDMGPal + ld [wOBP0], a + ret + +.PalsCGB: + db %11100100 + db %11011000 + db -2 + +.PalsSGB: + db %11110000 + db %11001100 + db -2 +; c81a5 + +BattleBGEffect_08: ; c81a5 (32:41a5) + ld de, .Pals + call BattleBGEffect_GetNthDMGPal + ld [wBGP], a + ret + +.Pals: + db %00011011 + db %01100011 + db %10000111 + db -2 +; c81b3 + +BattleBGEffect_HideMon: ; c81b3 (32:41b3) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw .four + + +.zero + call BattleBGEffects_IncrementJumptable + push bc + call BGEffect_CheckBattleTurn + jr nz, .player_side + hlcoord 12, 0 + lb bc, 7, 7 + jr .got_pointer + +.player_side + hlcoord 2, 6 + lb bc, 6, 6 +.got_pointer + call ClearBox + pop bc + ld a, $1 + ldh [hBGMapMode], a + ret + +.four + xor a + ldh [hBGMapMode], a + call EndBattleBGEffect + ret + +BattleBGEffect_ShowMon: ; c81ea (32:41ea) + call BGEffect_CheckFlyDigStatus + jr z, .not_flying + call EndBattleBGEffect + ret + +.not_flying + call BGEffect_CheckBattleTurn + jr nz, .player_side + ld de, .EnemyData + jr .got_pointer + +.player_side + ld de, .PlayerData +.got_pointer + ld a, e + ld [wBattleAnimTemp1], a + ld a, d + ld [wBattleAnimTemp2], a + call BattleBGEffect_RunPicResizeScript + ret + +.PlayerData: + db 0, $31, 0 + db -1 +.EnemyData: + db 3, $00, 3 + db -1 +; c8214 + +BattleBGEffect_FeetFollow: ; c8214 (32:4214) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw .five + + +.zero + call BGEffect_CheckFlyDigStatus + jr z, .not_flying_digging + call EndBattleBGEffect + ret + +.not_flying_digging + call BattleBGEffects_IncrementJumptable + push bc + call BGEffect_CheckBattleTurn + jr nz, .player_turn + ld a, ANIM_OBJ_PLAYERFEETFOLLOW + ld [wBattleAnimTemp0], a + ld a, 16 * 8 + 4 + jr .okay + +.player_turn + ld a, ANIM_OBJ_ENEMYFEETFOLLOW + ld [wBattleAnimTemp0], a + ld a, 6 * 8 +.okay + ld [wBattleAnimTemp1], a + ld a, 8 * 8 + ld [wBattleAnimTemp2], a + xor a + ld [wBattleAnimTemp3], a + call _QueueBattleAnimation + pop bc + ret + +.one + call BattleBGEffects_IncrementJumptable + push bc + call BGEffect_CheckBattleTurn + jr nz, .player_turn_2 + hlcoord 12, 6 + lb bc, 1, 7 + jr .okay2 + +.player_turn_2 + hlcoord 2, 6 + lb bc, 1, 6 +.okay2 + call ClearBox + ld a, $1 + ldh [hBGMapMode], a + pop bc + ret + +.five + xor a + ldh [hBGMapMode], a + call EndBattleBGEffect + ret + +BattleBGEffect_HeadFollow: ; c8281 (32:4281) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw .five + + +.zero + call BGEffect_CheckFlyDigStatus + jr z, .not_flying_digging + call EndBattleBGEffect + ret + +.not_flying_digging + call BattleBGEffects_IncrementJumptable + push bc + call BGEffect_CheckBattleTurn + jr nz, .player_turn + ld a, ANIM_OBJ_PLAYERHEADFOLLOW + ld [wBattleAnimTemp0], a + ld a, 16 * 8 + 4 + jr .okay + +.player_turn + ld a, ANIM_OBJ_ENEMYHEADFOLLOW + ld [wBattleAnimTemp0], a + ld a, 6 * 8 +.okay + ld [wBattleAnimTemp1], a + ld a, 8 * 8 + ld [wBattleAnimTemp2], a + xor a + ld [wBattleAnimTemp3], a + call _QueueBattleAnimation + pop bc + ret + +.one + call BattleBGEffects_IncrementJumptable + push bc + call BGEffect_CheckBattleTurn + jr nz, .player_turn_2 + hlcoord 12, 5 + lb bc, 2, 7 + jr .okay2 + +.player_turn_2 + hlcoord 2, 6 + lb bc, 2, 6 +.okay2 + call ClearBox + ld a, $1 + ldh [hBGMapMode], a + pop bc + ret + +.five + xor a + ldh [hBGMapMode], a + call EndBattleBGEffect + ret + +_QueueBattleAnimation: ; c82ee (32:42ee) + callfar QueueBattleAnimation + ret + +BattleBGEffect_27: ; c82f5 (32:42f5) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw .four + + +.zero + call BattleBGEffects_IncrementJumptable + call BGEffect_CheckBattleTurn + ld [hl], a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $8 + ret + +.one + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + and a + jr z, .user_2 + hlcoord 0, 6 + lb de, 8, 6 +.row1 + push de + push hl +.col1 + inc hl + ld a, [hld] + ld [hli], a + dec d + jr nz, .col1 + pop hl + ld de, SCREEN_WIDTH + add hl, de + pop de + dec e + jr nz, .row1 + jr .okay2 + +.user_2 + hlcoord 19, 0 + lb de, 8, 7 +.row2 + push de + push hl +.col2 + dec hl + ld a, [hli] + ld [hld], a + dec d + jr nz, .col2 + pop hl + ld de, SCREEN_WIDTH + add hl, de + pop de + dec e + jr nz, .row2 +.okay2 + ld a, $1 + ldh [hBGMapMode], a + call BattleBGEffects_IncrementJumptable + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + dec [hl] + ret + +.four + xor a + ldh [hBGMapMode], a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + and a + jr z, .done + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + ld [hl], $1 + ret + +.done + call EndBattleBGEffect + ret + +BattleBGEffect_EnterMon: ; c837b (32:437b) + call BGEffect_CheckBattleTurn + jr nz, .player_turn + ld de, .EnemyData + jr .okay + +.player_turn + ld de, .PlayerData +.okay + ld a, e + ld [wBattleAnimTemp1], a + ld a, d + ld [wBattleAnimTemp2], a + call BattleBGEffect_RunPicResizeScript + ret + +.PlayerData: + db 2, $31, 2 + db 1, $31, 1 + db 0, $31, 0 + db -1 +.EnemyData: + db 5, $00, 5 + db 4, $00, 4 + db 3, $00, 3 + db -1 +; c83a8 + +BattleBGEffect_ReturnMon: ; c83a8 (32:43a8) + call BGEffect_CheckBattleTurn + jr nz, .player_turn + ld de, .EnemyData + jr .okay + +.player_turn + ld de, .PlayerData +.okay + ld a, e + ld [wBattleAnimTemp1], a + ld a, d + ld [wBattleAnimTemp2], a + call BattleBGEffect_RunPicResizeScript + ret + +.PlayerData: + 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: + 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 +; c83ed + +BattleBGEffect_RunPicResizeScript: ; c83ed (32:43ed) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw BattleBGEffects_IncrementJumptable + dw .restart + dw .end + + +.zero + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld e, [hl] + ld d, $0 + inc [hl] + ld a, [wBattleAnimTemp1] + ld l, a + ld a, [wBattleAnimTemp2] + ld h, a + add hl, de + add hl, de + add hl, de + ld a, [hl] + cp -1 + jr z, .end + cp -2 + jr z, .clear + cp -3 + jr z, .skip + call .PlaceGraphic +.skip + call BattleBGEffects_IncrementJumptable + ld a, $1 + ldh [hBGMapMode], a + ret + +.clear + call .ClearBox + jr .zero + +.restart + xor a + ldh [hBGMapMode], a + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + ld [hl], $0 + ret + +.end + xor a + ldh [hBGMapMode], a + call EndBattleBGEffect + ret + +.ClearBox: +; 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 +; get coords + ld e, [hl] + ld d, 0 + ld hl, .Coords + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call ClearBox + pop bc + ret + +.PlaceGraphic: +; get dims + push bc + push hl + ld e, [hl] + ld d, 0 + 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 +; store pointer + ld e, [hl] + inc hl + ld d, [hl] +; get byte + pop hl + inc hl + ld a, [hli] + ld [wBattleAnimTemp0], a +; get coord + push de + ld e, [hl] + ld d, 0 + ld hl, .Coords + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + pop de +; fill box +.row + push bc + push hl + ld a, [wBattleAnimTemp0] + ld b, a +.col + ld a, [de] + add b + ld [hli], a + inc de + dec c + jr nz, .col + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .row + pop bc + ret + +.Coords: + dwcoord 2, 6 + dwcoord 3, 8 + dwcoord 4, 10 + dwcoord 12, 0 + dwcoord 13, 2 + dwcoord 14, 4 + +.BGSquares: +bgsquare: MACRO + dn \1, \2 + dw \3 +ENDM + + 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 +; c8545 + +BattleBGEffect_Surf: ; c8545 (32:4545) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + + +.zero + call BattleBGEffects_IncrementJumptable + lb de, 4, 1 + call InitSurfWaves + +.one + ldh a, [hLCDCPointer] + and a + ret z + push bc + call .RotatewSurfWaveBGEffect + pop bc + ret + +.RotatewSurfWaveBGEffect: + ld hl, wLYOverrides + ld de, wLYOverrides2 + 1 +.asm_c853e: + ld bc, wLYOverrides2 + ld a, [bc] + push af + ld a, $7f +.asm_c8545: + push af + ld a, [de] +.asm_c8547: + ld [bc], a + ldh a, [hLYOverrideStart] + cp l + jr nc, .asm_c8555 + ldh a, [hLYOverrideEnd] + cp l + jr c, .asm_c8555 + ld a, [de] + jr .asm_c8556 + +.asm_c8555: + xor a +.asm_c8556: + ld [hli], a + inc de + inc bc + pop af + dec a + jr nz, .asm_c8545 + pop af + ld [bc], a + ret + +BattleBGEffect_Psychic: ; c8607 (32:4607) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + ldh [hLCDCPointer], a + xor a + ldh [hLYOverrideStart], a + ld a, $5f + ldh [hLYOverrideEnd], a + lb de, 6, 5 + call Functionc8f2e + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $0 + ret + +.one + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + inc [hl] + and $3 + ret nz + call BattleBGEffect_WavyScreenFX + ret + +.two + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_Teleport: ; c863f (32:463f) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + call BattleBGEffect_SetLCDStatCustoms + lb de, 6, 5 + call Functionc8f2e + ret + +.one + call BattleBGEffect_WavyScreenFX + ret + +.two + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_NightShade: ; c8662 (32:4662) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCY) + call BattleBGEffect_SetLCDStatCustoms + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld e, [hl] + ld d, 3 + call Functionc8f2e + ret + +.one + call BattleBGEffect_WavyScreenFX + ret + +.two + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_DoubleTeam: ; c8689 (32:4689) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + dw .three + dw .four + dw .five + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + call BattleBGEffect_SetLCDStatCustoms + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld [hl], $0 + ret + +.one + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + cp $10 + jr nc, .next + inc [hl] + call .UpdateLYOverrides + ret + +.three + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + cp $ff + jr z, .next + dec [hl] + call .UpdateLYOverrides + ret + +.next + call BattleBGEffects_IncrementJumptable + ret + +.two + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + ld d, $2 + call BattleBGEffects_Sine + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + add [hl] + call .UpdateLYOverrides + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + add $4 + ld [hl], a + +.four + ret + +.UpdateLYOverrides: + ld e, a + xor $ff + inc a + ld d, a + ld h, HIGH(wLYOverrides) + ldh a, [hLYOverrideStart] + ld l, a + ldh a, [hLYOverrideEnd] + sub l + srl a +.loop + ld [hl], e + inc hl + ld [hl], d + inc hl + dec a + jr nz, .loop + ld [hl], e + ret + +.five + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_AcidArmor: ; c8709 (32:4709) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCY) + call BattleBGEffect_SetLCDStatCustoms + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld e, [hl] + ld d, 3 + call Functionc8f2e + ret + +.one + ldh a, [hLYOverrideEnd] + ld l, a + ld h, HIGH(wLYOverrides) + ld e, l + ld d, h + dec de +.loop + ld a, [de] + dec de + ld [hld], a + ldh a, [hLYOverrideStart] + cp l + jr nz, .loop + ld [hl], $90 + ret + +.two + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_Withdraw: ; c8761 (32:4761) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCY) + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld [hl], $1 + ret + +.one + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + and $3f + ld d, a + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + cp d + ret nc + call BGEffect_DisplaceLYOverridesBackup + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + rlca + rlca + and $3 + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + add [hl] + ld [hl], a + ret + +.two + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_Dig: ; c87a7 (32:47a7) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + dw .three + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCY) + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld [hl], $2 + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $0 + ret + +.one + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + and a + jr z, .next + dec [hl] + ret + +.next + ld [hl], $10 + call BattleBGEffects_IncrementJumptable +.two + ldh a, [hLYOverrideStart] + ld l, a + ldh a, [hLYOverrideEnd] + sub l + dec a + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + cp [hl] + ret c + ld a, [hl] + push af + and $7 + jr nz, .skip + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + dec [hl] +.skip + pop af + call BGEffect_DisplaceLYOverridesBackup + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + inc [hl] + inc [hl] + ret + +.three + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_Tackle: ; c8805 (32:4805) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw Tackle_BGEffect25_2d_one + dw Tackle_BGEffect25_2d_two + dw .three + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $0 + call BGEffect_CheckBattleTurn + jr nz, .player_side + ld a, 2 + jr .okay + +.player_side + ld a, -2 +.okay + ld [hl], a + ret + +.three + call BattleAnim_ResetLCDStatCustom + ret + +Tackle_BGEffect25_2d_one: + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + cp -8 + jr z, .reached_limit + cp 8 + jr nz, .finish +.reached_limit + call BattleBGEffects_IncrementJumptable +.finish + call Functionc88a5 + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + add [hl] + ld [hl], a + ret + +Tackle_BGEffect25_2d_two: + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + and a + jr nz, .asm_c8893 + call BattleBGEffects_IncrementJumptable +.asm_c8893 + call Functionc88a5 + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + xor $ff + inc a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + add [hl] + ld [hl], a + ret + +Functionc88a5: ; c88a5 (32:48a5) + push af +.asm_c87ab: + ld a, [rLY] + cp $60 + jr c, .asm_c87ab + pop af + call BGEffect_FillLYOverridesBackup + ret + +BattleBGEffect_2d: ; c88e7 (32:48e7) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw BGEffect2d_2f_zero + dw Tackle_BGEffect25_2d_one + dw Tackle_BGEffect25_2d_two + dw .three + + +.three + call BattleAnim_ResetLCDStatCustom + ret + +BGEffect2d_2f_zero: + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $0 + call BGEffect_CheckBattleTurn + jr nz, .player_turn + ld a, -2 + jr .okay + +.player_turn + ld a, 2 +.okay + ld [hl], a + ret + +BattleBGEffect_2f: ; c8919 (32:4919) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw BGEffect2d_2f_zero + dw Tackle_BGEffect25_2d_one + dw .two + dw Tackle_BGEffect25_2d_two + dw .four + +.four + call BattleAnim_ResetLCDStatCustom +.two + ret + +BattleBGEffect_26: ; c892a (32:492a) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $0 + ret + +.one + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + ld d, $8 + call BattleBGEffects_Sine + call .Functionc8836 + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + add $4 + ld [hl], a + ret + +.two + call BattleAnim_ResetLCDStatCustom + ret + +.Functionc8836: + push af +.loop + ld a, [rLY] + cp $60 + jr c, .loop + pop af + call BGEffect_FillLYOverridesBackup + ret + +BattleBGEffect_2c: ; c8964 (32:4964) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + xor a + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld [hli], a + ld [hl], a + ret + +.one + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + ld d, $6 + call BattleBGEffects_Sine + push af + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + ld d, $2 + call BattleBGEffects_Sine + ld e, a + pop af + add e + call .Functionc8894 + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + add $8 + ld [hl], a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + add $2 + ld [hl], a + ret + +.two + call BattleAnim_ResetLCDStatCustom + ret + +.Functionc8894: + push af +.asm_c8895: + ld a, [rLY] + cp $60 + jr c, .asm_c8895 + pop af + call BGEffect_FillLYOverridesBackup + ret + +BattleBGEffect_28: ; c89b5 (32:49b5) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + call BattleBGEffect_SetLCDStatCustoms + ret + +.one + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + cp $20 + ret nc + inc [hl] + ld d, a + ld e, 4 + call Functionc8f2e + ret + +.two + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + and a + jr z, .reset + dec [hl] + ld d, a + ld e, 4 + call Functionc8f2e + ret + +.reset + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_BounceDown: ; c89ee (32:49ee) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCY) + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld [hl], $1 + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $20 + ret + +.one + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + cp $38 + ret nc + push af + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + ld d, $10 + call BattleBGEffects_Cosine + add $10 + ld d, a + pop af + add d + call BGEffect_DisplaceLYOverridesBackup + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + inc [hl] + inc [hl] + ret + +.two + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_2a: ; c8a3a (32:4a3a) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + dw .three + dw .four + dw .five + +.zero + call BattleBGEffects_IncrementJumptable + ld a, $e4 + call BattleBGEffects_SetLYOverrides + ld a, $47 + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + ldh a, [hLYOverrideStart] + ld l, a + ld h, HIGH(wLYOverrides) +.loop + ldh a, [hLYOverrideEnd] + cp l + jr z, .done + xor a + ld [hli], a + jr .loop + +.done + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $0 +.one +.four + ret + +.two + call .GetLYOverride + jr nc, .next + call .SetLYOverridesBackup + ret + +.next + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $0 + ldh a, [hLYOverrideStart] + inc a + ldh [hLYOverrideStart], a + call BattleBGEffects_IncrementJumptable + ret + +.three + call .GetLYOverride + jr nc, .finish + call .SetLYOverridesBackup + ldh a, [hLYOverrideEnd] + dec a + ld l, a + ld [hl], e + ret + +.finish + call BattleBGEffects_IncrementJumptable + ret + +.SetLYOverridesBackup: + ld e, a + ldh a, [hLYOverrideStart] + ld l, a + ldh a, [hLYOverrideEnd] + sub l + srl a + ld h, HIGH(wLYOverrides) +.loop2 + ld [hl], e + inc hl + inc hl + dec a + jr nz, .loop2 + ret + +.five + call BattleBGEffects_ResetVideoHRAM + ret + +.GetLYOverride: + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + inc [hl] + srl a + srl a + srl a + ld e, a + ld d, 0 + ld hl, .data + add hl, de + ld a, [hl] + cp $ff + ret + +.data + db $00, $40, $90, $e4 + db -1 +; c8acc + +BattleBGEffect_2b: ; c8acc (32:4acc) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + + +.zero + call BattleBGEffects_IncrementJumptable + call BattleBGEffects_ClearLYOverrides + ld a, LOW(rSCX) + call BattleBGEffect_SetLCDStatCustoms + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld [hl], $40 + ret + +.one + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + and a + jr z, .done + dec [hl] + srl a + srl a + srl a + and $f + ld d, a + ld e, a + call Functionc8f2e + ret + +.done + call BattleAnim_ResetLCDStatCustom + ret + +BattleBGEffect_1c: ; c8b00 (32:4b00) + call BattleBGEffects_AnonJumptable + jp hl +.anon_dw + dw .zero + dw .one + dw .two + + +.zero + call BattleBGEffects_IncrementJumptable + ld a, $e4 + call BattleBGEffects_SetLYOverrides + ld a, LOW(rBGP) + ldh [hLCDCPointer], a + xor a + ldh [hLYOverrideStart], a + ld a, $60 + ldh [hLYOverrideEnd], a + ret + +.one + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + inc [hl] + and $18 + srl a + srl a + ld e, a + ld d, $0 + push bc + call BGEffect_CheckBattleTurn + jr nz, .player + ld hl, .CGB_DMGEnemyData + add hl, de + ld a, [hli] + ld [wOBP1], a + ld d, a + ld e, [hl] + lb bc, $2f, $30 + jr .okay + +.player + ld hl, .DMG_PlayerData + add hl, de + ld d, [hl] + inc hl + ld a, [hl] + ld [wOBP1], a + ld e, a + lb bc, $37, $28 +.okay + call .DMG_LYOverrideLoads + pop bc + ret + +.two + call BattleBGEffects_ResetVideoHRAM + ld a, $e4 + ld [wBGP], a + ld [wOBP1], a + ret + +.DMG_LYOverrideLoads: + ld hl, wLYOverrides +.loop1 + ld [hl], d + inc hl + dec b + jr nz, .loop1 +.loop2 + ld [hl], e + inc hl + dec c + jr nz, .loop2 + 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 +; c8be8 + +BattleBGEffect_RapidFlash: ; c8be8 (32:4be8) + ld de, .FlashPals + call BGEffect_RapidCyclePals + ret + +.FlashPals: + db $e4, $6c, $fe +; c8bf2 + +BattleBGEffect_16: ; c8bf2 (32:4bf2) + ld de, .Pals + call BGEffect_RapidCyclePals + ret + +.Pals: + db $e4, $90, $40, $ff +; c8bfd + +BattleBGEffect_17: ; c8bfd (32:4bfd) + ld de, .Pals + call BGEffect_RapidCyclePals + ret + +.Pals: + db $e4, $f8, $fc, $ff +; c8c08 + +BattleBGEffect_18: ; c8c08 (32:4c08) + ld de, .Pals + call BGEffect_RapidCyclePals + ret + +.Pals: + db $e4, $90, $40, $90, $fe +; c8c14 + +BattleBGEffect_19: ; c8c14 (32:4c14) + ld de, .Pals + call BGEffect_RapidCyclePals + ret + +.Pals: + db $e4, $f8, $fc, $f8, $fe +; c8c20 + +BattleBGEffect_1a: ; c8c20 (32:4c20) + ld de, .Pals + call BGEffect_RapidCyclePals + ret + +.Pals: + db $e4, $f8, $fc, $f8, $e4, $90, $40, $90, $fe +; c8c30 + +BattleBGEffect_1b: ; c8c30 (32:4c30) + ld de, .Pals + call BGEffect_RapidCyclePals + ret + +.Pals: + db $e4, $fc, $e4, $00, $fe +; c8c3c + +BattleBGEffect_1d: ; c8c3c (32:4c3c) + 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 +; c8c55 + +BattleBGEffect_1e: ; c8c55 (32:4c55) + ld de, .Pals + call BGEffect_RapidCyclePals + ret + +.Pals: + db $00, $40, $90, $e4, $ff +; c8c61 + +BattleBGEffect_2e: ; c8ce1 (32:4ce1) + call Functionc8d0b + jr c, .xor_a + bit 7, a + jr z, .okay +.xor_a + xor a +.okay + ldh [hSCY], a + xor $ff + inc a + ld [$c753], a ; wAnimObject01YOffset + ret + +BattleBGEffect_1f: ; c8cf9 (32:4cf9) + call Functionc8d0b + jr nc, .skip + xor a +.skip + ldh [hSCX], a + ret + +BattleBGEffect_20: ; c8d02 (32:4d02) + call Functionc8d0b + jr nc, .skip + xor a +.skip + ldh [hSCY], a + ret + +Functionc8d0b: ; c8d0b (32:4d0b) + 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] + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + and $f + jr z, .every_16_frames + dec [hl] + 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 + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + xor $ff + inc a + ld [hl], a + and a + ret + +BattleBGEffect_GetNthDMGPal: ; c8d57 (32:4d57) + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + ld a, [hl] + and a + jr z, .zero + dec [hl] + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + call BattleBGEffect_GetNextDMGPal + ret + +.zero + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + ld hl, BG_EFFECT_STRUCT_JT_INDEX + add hl, bc + ld [hl], a + call BattleBGEffect_GetFirstDMGPal + ret + +BGEffect_RapidCyclePals: ; c8d77 (32:4d77) + push de + ld de, .Jumptable_DMG + call BatttleBGEffects_GetNamedJumptablePointer + pop de + jp hl + +.Jumptable_DMG: + dw .zero_dmg + dw .one_dmg + dw .two_dmg + + +.zero_dmg ; c8d8b (32:4d8b) + call BattleBGEffects_IncrementJumptable + ld a, $e4 + call BattleBGEffects_SetLYOverrides + ld a, $47 + call BattleBGEffect_SetLCDStatCustoms + ldh a, [hLYOverrideEnd] + inc a + ldh [hLYOverrideEnd], a + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + ld [hl], $0 + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld [hl], a + ret + +.one_dmg ; c8daa (32:4daa) + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ld a, [hl] + and $f + jr z, .okay_1_dmg + dec [hl] + ret + +.okay_1_dmg + ld a, [hl] + swap a + or [hl] + ld [hl], a + call BattleBGEffect_GetFirstDMGPal + jr c, .okay_2_dmg + call BGEffect_FillLYOverridesBackup + ret + +.okay_2_dmg + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + dec [hl] + ret + +.two_dmg ; c8dc9 (32:4dc9) + call BattleBGEffects_ResetVideoHRAM + ld a, %11100100 + ld [rBGP], a + call EndBattleBGEffect + ret + +BattleBGEffect_GetFirstDMGPal: ; c8eac (32:4eac) + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld a, [hl] + inc [hl] +BattleBGEffect_GetNextDMGPal: ; c8eb2 (32:4eb2) + ld l, a + ld h, $0 + add hl, de + ld a, [hl] + cp -1 + jr z, .quit + cp -2 + jr nz, .repeat + ld a, [de] + ld hl, BG_EFFECT_STRUCT_03 + add hl, bc + ld [hl], $0 +.repeat + and a + ret + +.quit + scf + ret + +BattleBGEffects_ClearLYOverrides: ; c8eca (32:4eca) + xor a +BattleBGEffects_SetLYOverrides: ; c8ecb (32:4ecb) + ld hl, wLYOverrides + ld e, $91 +.loop + ld [hli], a + dec e + jr nz, .loop + ret + +BattleBGEffect_SetLCDStatCustoms: ; c8ede (32:4ede) + ldh [hLCDCPointer], a + call BGEffect_CheckBattleTurn + jr nz, .player_turn + lb de, $00, $36 + jr .okay + +.player_turn + lb de, $2f, $5e +.okay + ld a, d + ldh [hLYOverrideStart], a + ld a, e + ldh [hLYOverrideEnd], a + ret + +BattleAnim_ResetLCDStatCustom: ; c8f0a (32:4f0a) + xor a + ldh [hLYOverrideStart], a + ldh [hLYOverrideEnd], a + call BattleBGEffects_ClearLYOverrides + xor a + ldh [hLCDCPointer], a + call EndBattleBGEffect + ret + +BattleBGEffects_ResetVideoHRAM: ; c8f19 (32:4f19) + xor a + ldh [hLCDCPointer], a + ldh [hLYOverrideStart], a + ldh [hLYOverrideEnd], a + call BattleBGEffects_ClearLYOverrides + ret + +Functionc8f2e: ; c8f2e (32:4f2e) + push bc + xor a + ld [wBattleAnimTemp0], a + ld a, e + ld [wBattleAnimTemp1], a + ld a, d + ld [wBattleAnimTemp2], a + ld a, $80 + ld [wBattleAnimTemp3], a + ld bc, wLYOverrides +.loop + ldh a, [hLYOverrideStart] + cp c + jr nc, .next + ldh a, [hLYOverrideEnd] + cp c + jr c, .next + ld a, [wBattleAnimTemp2] + ld d, a + ld a, [wBattleAnimTemp0] + call BattleBGEffects_Sine + ld [bc], a +.next + inc bc + ld a, [wBattleAnimTemp1] + ld hl, wBattleAnimTemp0 + add [hl] + ld [hl], a + ld hl, wBattleAnimTemp3 + dec [hl] + jr nz, .loop + pop bc + ret + +InitSurfWaves: ; c8f69 (32:4f69) + push bc + xor a + ld [wBattleAnimTemp0], a + ld a, e + ld [wBattleAnimTemp1], a + ld a, d + ld [wBattleAnimTemp2], a + ld a, $80 + ld [wBattleAnimTemp3], a + ld bc, wLYOverrides2 +.loop + ld a, [wBattleAnimTemp2] + ld d, a + ld a, [wBattleAnimTemp0] + call BattleBGEffects_Sine + ld [bc], a + inc bc + ld a, [wBattleAnimTemp1] + ld hl, wBattleAnimTemp0 + add [hl] + ld [hl], a + ld hl, wBattleAnimTemp3 + dec [hl] + jr nz, .loop + pop bc + ret + +BattleBGEffect_WavyScreenFX: ; c8fef (32:4fef) + push bc + ldh a, [hLYOverrideStart] + ld l, a + inc a + ld e, a + ld h, HIGH(wLYOverrides) + ld d, h + ldh a, [hLYOverrideEnd] + sub l + and a + jr z, .done + ld c, a + ld a, [hl] + push af +.loop + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .loop + pop af + ld [hl], a +.done + pop bc + ret + +BGEffect_FillLYOverridesBackup: ; c900b (32:500b) + push af + ld h, HIGH(wLYOverrides) + ldh a, [hLYOverrideStart] + ld l, a + ldh a, [hLYOverrideEnd] + sub l + ld d, a + pop af +.loop + ld [hli], a + dec d + jr nz, .loop + ret + +BGEffect_DisplaceLYOverridesBackup: ; c901b (32:501b) + ; 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 + ld h, HIGH(wLYOverrides) + ldh a, [hLYOverrideStart] + ld l, a + ld a, $90 +.loop + ld [hli], a + dec e + jr nz, .loop + pop af + xor $ff + inc a +.loop2 + ld [hli], a + dec d + jr nz, .loop2 + ret + +BGEffect_CheckBattleTurn: ; c9038 (32:5038) + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ldh a, [hBattleTurn] + and $1 + xor [hl] + ret + +BGEffect_CheckFlyDigStatus: ; c9042 (32:5042) + ld hl, BG_EFFECT_STRUCT_BATTLE_TURN + add hl, bc + ldh a, [hBattleTurn] + and $1 + xor [hl] + jr nz, .player + ld a, [wEnemySubStatus3] ; EnemySubStatus3 + bit 6, a + ret + +.player + ld a, [wPlayerSubStatus3] ; PlayerSubStatus3 + bit 6, a + ret + +BattleBGEffects_CheckSGB: ; c9059 (32:5059) + ld a, [wcccf] + and a + ret + +BattleBGEffects_Sine: ; c905d (32:505d) + ld e, a + callfar BattleAnim_Sine_e + ld a, e + ret + +BattleBGEffects_Cosine: ; c9066 (32:5066) + ld e, a + callfar BattleAnim_Cosine_e + ld a, e + ret + +; c906f (32:506f) |