summaryrefslogtreecommitdiff
path: root/engine/battle/ghost_marowak_anim.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/battle/ghost_marowak_anim.asm')
-rw-r--r--engine/battle/ghost_marowak_anim.asm89
1 files changed, 89 insertions, 0 deletions
diff --git a/engine/battle/ghost_marowak_anim.asm b/engine/battle/ghost_marowak_anim.asm
new file mode 100644
index 00000000..73d3bcc2
--- /dev/null
+++ b/engine/battle/ghost_marowak_anim.asm
@@ -0,0 +1,89 @@
+MarowakAnim: ; 708ca (1c:48ca)
+; animate the ghost being unveiled as a Marowak
+ ld a, $e4
+ ld [rOBP1], a
+ call CopyMonPicFromBGToSpriteVRAM ; cover the BG ghost pic with a sprite ghost pic that looks the same
+; now that the ghost pic is being displayed using sprites, clear the ghost pic from the BG tilemap
+ hlCoord 12, 0
+ ld bc, $707
+ call ClearScreenArea
+ call Delay3
+ xor a
+ ld [H_AUTOBGTRANSFERENABLED], a ; disable BG transfer so we don't see the Marowak too soon
+; replace ghost pic with Marowak in BG
+ ld a, MAROWAK
+ ld [wHPBarMaxHP], a
+ ld a, $1
+ ld [H_WHOSETURN], a
+ callab Func_79793
+ ; alternate between black and light grey 8 times.
+ ; this makes the ghost's body appear to flash
+ ld d, $80
+ call FlashSprite8Times
+.fadeOutGhostLoop
+ ld c, 10
+ call DelayFrames
+ ld a, [rOBP1]
+ sla a
+ sla a
+ ld [rOBP1], a
+ jr nz, .fadeOutGhostLoop
+ call ClearSprites
+ call CopyMonPicFromBGToSpriteVRAM ; copy Marowak pic from BG to sprite VRAM
+ ld b, $e4
+.fadeInMarowakLoop
+ ld c, 10
+ call DelayFrames
+ ld a, [rOBP1]
+ srl b
+ rra
+ srl b
+ rra
+ ld [rOBP1], a
+ ld a, b
+ and a
+ jr nz, .fadeInMarowakLoop
+ ld a, $1
+ ld [H_AUTOBGTRANSFERENABLED], a ; enable BG transfer so the BG Marowak pic will be visible after the sprite one is cleared
+ call Delay3
+ jp ClearSprites
+
+; copies a mon pic's from background VRAM to sprite VRAM and sets up OAM
+CopyMonPicFromBGToSpriteVRAM: ; 7092a (1c:492a)
+ ld de, vFrontPic
+ ld hl, vSprites
+ ld bc, 7 * 7
+ call CopyVideoData
+ ld a, $10
+ ld [W_BASECOORDY], a
+ ld a, $70
+ ld [W_BASECOORDX], a
+ ld hl, wOAMBuffer
+ ld bc, $606
+ ld d, $8
+.oamLoop
+ push bc
+ ld a, [W_BASECOORDY]
+ ld e, a
+.oamInnerLoop
+ ld a, e
+ add $8
+ ld e, a
+ ld [hli], a
+ ld a, [W_BASECOORDX]
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ ld a, $10 ; use OBP1
+ ld [hli], a
+ inc d
+ dec c
+ jr nz, .oamInnerLoop
+ inc d
+ ld a, [W_BASECOORDX]
+ add $8
+ ld [W_BASECOORDX], a
+ pop bc
+ dec b
+ jr nz, .oamLoop
+ ret