diff options
Diffstat (limited to 'engine/battle/ghost_marowak_anim.asm')
-rw-r--r-- | engine/battle/ghost_marowak_anim.asm | 89 |
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 |