diff options
Diffstat (limited to 'engine/gfx/screen_effects.asm')
-rwxr-xr-x | engine/gfx/screen_effects.asm | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/engine/gfx/screen_effects.asm b/engine/gfx/screen_effects.asm new file mode 100755 index 00000000..95f0ea25 --- /dev/null +++ b/engine/gfx/screen_effects.asm @@ -0,0 +1,71 @@ +; b = new colour for BG colour 0 (usually white) for 4 frames +ChangeBGPalColor0_4Frames: + call GetPredefRegisters + ld a, [rBGP] + or b + ld [rBGP], a + ld c, 4 + call DelayFrames + ld a, [rBGP] + and %11111100 + ld [rBGP], a + ret + +PredefShakeScreenVertically: +; Moves the window down and then back in a sequence of progressively smaller +; numbers of pixels, starting at b. + call GetPredefRegisters + ld a, 1 + ld [wDisableVBlankWYUpdate], a + xor a +.loop + ld [$ff96], a + call .MutateWY + call .MutateWY + dec b + ld a, b + jr nz, .loop + xor a + ld [wDisableVBlankWYUpdate], a + ret + +.MutateWY + ld a, [$ff96] + xor b + ld [$ff96], a + ld [rWY], a + ld c, 3 + jp DelayFrames + +PredefShakeScreenHorizontally: +; Moves the window right and then back in a sequence of progressively smaller +; numbers of pixels, starting at b. + call GetPredefRegisters + xor a +.loop + ld [$ff97], a + call .MutateWX + ld c, 1 + call DelayFrames + call .MutateWX + dec b + ld a, b + jr nz, .loop + +; restore normal WX + ld a, 7 + ld [rWX], a + ret + +.MutateWX + ld a, [$ff97] + xor b + ld [$ff97], a + bit 7, a + jr z, .skipZeroing + xor a ; zero a if it's negative +.skipZeroing + add 7 + ld [rWX], a + ld c, 4 + jp DelayFrames |