diff options
-rw-r--r-- | engine/opening_cutscene.asm | 1228 | ||||
-rw-r--r-- | layout.link | 2 | ||||
-rw-r--r-- | ram/hram.asm | 1 | ||||
-rw-r--r-- | ram/wram.asm | 27 | ||||
-rwxr-xr-x | shim.sym | 1 |
5 files changed, 1257 insertions, 2 deletions
diff --git a/engine/opening_cutscene.asm b/engine/opening_cutscene.asm new file mode 100644 index 0000000..d049661 --- /dev/null +++ b/engine/opening_cutscene.asm @@ -0,0 +1,1228 @@ +INCLUDE "constants.asm" + +SECTION "engine/opening_cutscene.asm", ROMX + +OpeningCutscene:: + call .Init +.loop + call .PlayFrame + jr nc, .loop + ret + +.Init: + callba InitEffectObject + xor a + ld [wIntroJumptableIndex], a + ldh [hBGMapMode], a + ret + +.PlayFrame: + ld hl, hJoypadDown + ld a, [hl] + and %00001111 + jr nz, .Finish + +; check done flag + ld a, [wIntroJumptableIndex] + bit 7, a + jr nz, .Finish + + callba EffectObjectJumpNoDelay + call IntroSceneJumper + call DelayFrame + and a + ret + +.Finish: + callab InitEffectObject + call ClearSprites + call DelayFrame + xor a + ldh [hSCX], a + ldh [hSCY], a + ldh [hLCDCPointer], a + ldh [hLYOverrideStart], a + ldh [hLYOverrideEnd], a + ld a, %11100100 + ldh [rBGP], a + ldh [rOBP0], a + scf + ret + +IntroSceneJumper: + jumptable .scenes, wIntroJumptableIndex +.scenes + dw IntroScene1 + dw IntroScene2 + dw IntroScene3 + dw IntroScene4 + dw IntroScene5 + dw IntroScene6 + dw IntroScene7 + dw IntroScene8 + dw IntroScene9 + dw IntroScene10 + dw IntroScene11 + dw IntroScene12 + dw IntroScene13 + dw IntroScene14 + dw IntroScene15 + dw IntroScene16 + dw IntroScene17 + +IntroScene1: ; 43b8 +; Set up water cutscene + ld hl, wIntroJumptableIndex + inc [hl] + call DisableLCD + + ld b, SGB_GS_INTRO + ld c, 0 + call GetSGBLayout + + callab InitEffectObject + + call Intro_ResetLYOverrides + + ld hl, vChars2 + ld de, IntroUnderwaterGFX + call Intro_Copy128Tiles + +; Load water metatiles + ld a, $df + ld [wIntroTilesPointer + 0], a + ld a, $54 + ld [wIntroTilesPointer + 1], a + +; Set destination BG map pointer + ld hl, vBGMap0 + ld a, l + ld [wIntroBGMapPointer + 0], a + ld a, h + ld [wIntroBGMapPointer + 1], a + +; Set destination tilemap pointer + ld de, $53cf + ld a, e + ld [wIntroTilemapPointer + 0], a + ld a, d + ld [wIntroTilemapPointer + 1], a + call Intro_DrawBackground + +; draw GFX + ld hl, IntroWaterPokemonGFX + ld de, vChars0 + ld bc, $0800 +.draw_gfx + ld a, [hli] + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .draw_gfx + + ld hl, wSpriteAnimDict + ld a, $21 + ld [hli], a + ld a, $00 + ld [hli], a + + xor a + ldh [hSCY], a + ld [wGlobalAnimYOffset], a + ld [wGlobalAnimXOffset], a + + ld a, $58 + ldh [hSCX], a + +; setup counter for the first scene + xor a + ld [wIntroFrameCounter2], a + ld a, $80 + ld [wIntroFrameCounter1], a + + ld a, $42 + ldh [hLCDCPointer], a + call Intro_InitSineLYOverrides + + xor a ; FALSE + ld [wIntroSpriteStateFlag], a + + call EnableLCD + call DelayFrame + + ld a, %11100100 + ldh [rBGP], a + ld a, %11100000 + ldh [rOBP0], a + call Intro_InitOmanyte + ret + +IntroScene2: ; 444a + call Intro_UpdateLYOverrides + ld hl, wIntroFrameCounter1 + ld a, [hl] + and a + jr z, .skip_intro + dec [hl] + call Intro_InitBubble + ret + +.skip_intro + ld [hl], $10 + ld hl, wIntroJumptableIndex + inc [hl] + +IntroScene3: +; rise towards the surface + call IntroScene3_Jumper + call IntroScene3_ScrollToSurface + ret nc +; next scene if carry flag is set + call Intro_ResetLYOverrides + ld hl, hSCY + inc [hl] + ld hl, wIntroJumptableIndex + inc [hl] + +IntroScene4: +; at surface; Lapras surfs to left of screen + ld a, [wIntroSpriteStateFlag] + and a + jr nz, .next + ld hl, wIntroFrameCounter2 + inc [hl] + ld a, [hl] + and $07 + jr nz, .skip_move_left + ld hl, hSCX + dec [hl] + +.skip_move_left + call Intro_AnimateOceanWaves + ret + +.next + ld hl, wIntroJumptableIndex + inc [hl] + xor a + ld [wIntroFrameCounter1], a + +IntroScene5: +; fade out + ld hl, wIntroFrameCounter1 + ld a, [hl] + inc [hl] + swap a + and $f + ld e, a + ld d, 0 + ld hl, .palettes + add hl, de + ld a, [hl] + cp -1 + jr z, .next + ldh [rBGP], a + call Intro_AnimateOceanWaves + ld hl, hSCX + dec [hl] + dec [hl] + ret +.next + ld hl, wIntroJumptableIndex + inc [hl] + ret + +.palettes: + db %11100100 + db %11100100 + db %10010000 + db %01000000 + db %00000000 + db -1 + +IntroScene17: +; delay a bit before leading into the title screen + ld c, 64 +.loop + call DelayFrame + dec c + jr nz, .loop +; set done flag + ld hl, wIntroJumptableIndex + set 7, [hl] + ret + +IntroScene3_ScrollToSurface: + ld hl, wIntroFrameCounter2 + inc [hl] + ld a, [hl] + and %00000011 + jr nz, .skip_move_left + ld hl, hSCX + dec [hl] + +.skip_move_left + and 1 + jr nz, .no_carry + ld hl, wGlobalAnimYOffset + inc [hl] + ld hl, hSCY + ld a, [hl] + dec [hl] + and $f + call z, Intro_UpdateTilemapAndBGMap + ld a, [wIntroFrameCounter1] + and a + jr z, .carry + +.no_carry + and a + ret + +.carry + scf + ret + +IntroScene3_Jumper: + jumptable .subroutines, wIntroFrameCounter1 +.subroutines + dw .scene3_2 + dw .scene3_2 + dw .scene3_2 + dw .scene3_1 + dw .scene3_2 + dw .scene3_2 + dw .scene3_3 + dw .scene3_3 + dw .scene3_3 + dw .scene3_4 + dw .scene3_5 + dw .scene3_6 + dw .scene3_6 + dw .scene3_6 + dw .scene3_6 + dw .scene3_6 + dw .scene3_6 + +.scene3_1: + call Intro_InitLapras + ld a, %11100100 + ldh [rOBP0], a + +.scene3_2: ; fallthrough + call Intro_AnimateOceanWaves + ret + +.scene3_3: + call Intro_InitMagikarps + call Intro_AnimateOceanWaves + ret + +.scene3_4: + ld hl, wIntroFrameCounter2 + ld a, [hl] + and %00011111 + jr z, .load_palettes + call Intro_InitMagikarps + ret +.load_palettes + callab Function962d ; load magikarp palettes + ret + +.scene3_5: + xor a + ldh [hLCDCPointer], a + ret + +.scene3_6: + call Intro_UpdateLYOverrides + ret + +Intro_InitBubble: + ld hl, wIntroFrameCounter1 + ld a, [hl] + and $0f + ret nz + + ld a, [hl] + and $70 + swap a + ld e, a + ld d, $00 + ld hl, .pixel_table + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld a, $21 ; SPRITE_ANIM_INDEX_GS_INTRO_BUBBLE + call InitSpriteAnimStruct + ret + +.pixel_table + db $30, $74 + db $70, $94 + db $50, $84 + db $60, $78 + db $20, $68 + db $40, $88 + +Intro_InitMagikarps: + ld de, $403f + ld a, [wSGB] + and a + jr z, .ok + + ld de, $201f + +.ok + ld hl, wIntroFrameCounter2 + ld a, [hl] + and e + ret nz + ld a, [hl] + and d + jr nz, .alternate_frame + ld de, $e8e0 + call .PlaceMagikarp + ld de, wObject8SpriteXOffset + call .PlaceMagikarp + ld de, $00c0 + call .PlaceMagikarp + ret + +.alternate_frame + ld de, $e0f0 + call .PlaceMagikarp + ld de, $f8c0 + call .PlaceMagikarp + ld de, $10e0 + call .PlaceMagikarp + ret + +.PlaceMagikarp: + ld a, $23 ; SPRITE_ANIM_INDEX_GS_INTRO_MAGIKARP + call InitSpriteAnimStruct + ret + +Intro_InitOmanyte: + ld de, $9038 + call .PlaceOmanyte + ld de, $7050 + call .PlaceOmanyte + ld de, $8078 + +.PlaceOmanyte: + ld a, $22 ; SPRITE_ANIM_INDEX_GS_INTRO_SHELLDER + call InitSpriteAnimStruct + ret + +Intro_InitLapras: + ld a, [wIntroFrameCounter2] + and %00011111 + ret nz + ld de, $80c0 + ld a, $25 ; SPRITE_ANIM_INDEX_GS_INTRO_LAPRAS + call InitSpriteAnimStruct + ret + +Intro_UnusedInitAerodactyl: ; unreferenced + ld de, $1000 + ld a, $24 ; SPRITE_ANIM_INDEX_UNUSED_INTRO_AERODACTYL + call InitSpriteAnimStruct + ret + +Intro_UpdateTilemapAndBGMap: +; add new tiles to top as water scene scrolls up to surface + push hl + push de + + ld a, [wIntroTilemapPointer + 0] + ld e, a + ld a, [wIntroTilemapPointer + 1] + ld d, a + ld hl, -$10 + add hl, de + ld a, l + ld e, l + ld [wIntroTilemapPointer + 0], a + ld a, h + ld d, h + ld [wIntroTilemapPointer + 1], a + + hlcoord 0, 0 + ld c, BG_MAP_WIDTH / 2 +.loop + call Intro_Draw2x2Tiles + dec c + jr nz, .loop + + ld a, [wIntroBGMapPointer + 0] + ld e, a + ld a, [wIntroBGMapPointer + 1] + ld d, a + ld hl, hCurSpriteYCoord + add hl, de + ld a, l + ld [wIntroBGMapPointer + 0], a + ld [wVBCopyDst], a + ld a, h + and %11111011 + or %00001000 + ld [wIntroBGMapPointer + 1], a + ld [wVBCopyDst + 1], a + ld a, LOW(wTileMap) + ld [wVBCopySrc], a + ld a, HIGH(wTileMap) + ld [wVBCopySrc + 1], a + ld a, 4 + ld [wVBCopySize], a + ld hl, wIntroFrameCounter1 + dec [hl] + pop de + pop hl + ret + + +Intro_AnimateOceanWaves: +; uses a 2bpp request to copy tile IDs to the BG map + ld hl, wIntroFrameCounter2 + ld a, [hl] + and 3 + cp 3 + ret z + + ld a, [hl] + and $30 + swap a + ld l, a + ld h, 0 +rept 5 + add hl, hl +endr + ld de, .wave_tiles + add hl, de + ld a, l + ld [wVBCopySrc], a + ld a, h + ld [wVBCopySrc + 1], a + ld a, $e0 + ld [wVBCopyDst], a + ld a, $99 + ld [wVBCopyDst + 1], a + ld a, 2 + ld [wVBCopySize], a + ret +.wave_tiles: +rept 8 + db $70, $71, $72, $73 +endr +rept 8 + db $74, $75, $76, $77 +endr +rept 8 + db $78, $79, $7a, $7b +endr +rept 8 + db $7c, $7d, $7e, $7f +endr + +Intro_InitSineLYOverrides: + ld bc, wLYOverrides2 + ld a, SCREEN_HEIGHT_PX + ld de, BG_MAP_WIDTH * BG_MAP_HEIGHT +.loop + push af + push de + callba BattleAnim_Sine_e + ld a, e + ld [bc], a + inc bc + pop de + inc e + pop af + dec a + jr nz, .loop + ret + +Intro_UpdateLYOverrides: + ld bc, wLYOverrides + ld e, $10 + +.loop1 + ldh a, [hSCY] + ld [bc], a + inc bc + dec e + jr nz, .loop1 + + ld hl, wLYOverrides2 + ld de, wLYOverrides2 + 1 + ld a, [hl] + push af + ld a, $80 + +.loop2 + push af + ld a, [de] + inc de + ld [hli], a + push hl + ld hl, hSCY + add [hl] + ld [bc], a + inc bc + pop hl + pop af + dec a + jr nz, .loop2 + + pop af + ld [hl], a + ret + +IntroScene6: +; Set up grass cutscene (Pikachu/Jigglypuff) + ld hl, wIntroJumptableIndex + inc [hl] + call DisableLCD + ld b, SGB_GS_INTRO + ld c, 1 + call GetSGBLayout + callab InitEffectObject + call Intro_ResetLYOverrides + ld hl, vChars2 + ld de, IntroForestGFX + call Intro_Copy128Tiles + ld a, $0f + ld [wIntroTilesPointer + 0], a + ld a, $62 + ld [wIntroTilesPointer + 1], a + ld hl, vBGMap0 + ld a, l + ld [wIntroBGMapPointer + 0], a + ld a, h + ld [wIntroBGMapPointer + 1], a + ld de, $610f + ld a, e + ld [wIntroTilemapPointer + 0], a + ld a, d + ld [wIntroTilemapPointer + 1], a + call Intro_DrawBackground + ld hl, IntroJigglypuffPikachuGFX + ld de, vChars0 + ld bc, $0a00 + +.load + ld a, [hli] + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .load + + ld hl, wSpriteAnimDict + ld a, $22 + ld [hli], a + ld a, $00 + ld [hli], a + xor a + ldh [hSCY], a + ld [wGlobalAnimYOffset], a + ld a, $60 + ldh [hSCX], a + ld a, $a0 + ld [wGlobalAnimXOffset], a + xor a + ld [wIntroFrameCounter2], a + call EnableLCD + ld a, $e4 + ldh [rBGP], a + ldh [rOBP0], a + call Intro_InitJigglypuff + xor a + ld [wIntroSpriteStateFlag], a + ret + +IntroScene7: + call Intro_InitNote + ld hl, wIntroFrameCounter2 + ld a, [hl] + inc [hl] + and $03 + ret z + + ld hl, hSCX + ld a, [hl] + and a + jr z, .next + + dec [hl] + ld hl, wGlobalAnimXOffset + inc [hl] + ret + +.next + ld a, $ff + ld [wIntroFrameCounter1], a + call Intro_InitPikachu + ld hl, wIntroJumptableIndex + inc [hl] + ret + +IntroScene8: + ld hl, wIntroFrameCounter1 + ld a, [hl] + and a + jr z, .next + dec [hl] + call Intro_InitNote + ld hl, wIntroFrameCounter2 + inc [hl] + ret + +.next + xor a + ld [wIntroFrameCounter1], a + ld hl, wIntroJumptableIndex + inc [hl] + callab Function9633 + ret + +IntroScene9: + ld hl, wIntroFrameCounter1 + ld a, [hl] + inc [hl] + swap a + and $0f + ld e, a + ld d, $00 + ld hl, .palettes + add hl, de + ld a, [hl] + and a + jr z, .next + + ldh [rBGP], a + ld hl, hSCY + inc [hl] + ld hl, wGlobalAnimYOffset + dec [hl] + ret + +.next: + ld hl, wIntroJumptableIndex + inc [hl] + ret + +.palettes: +; fade out to black + db %11100100 + db %11100100 + db %11100100 + db %11100100 + db %11100100 + db %11111001 + db %11111110 + db %11111111 + db 0 + +Intro_DummyFunction: + ret + + +Intro_InitNote: + ld a, [wIntroSpriteStateFlag] + and a + ret nz + + ld hl, wIntroFrameCounter2 + ld a, [hl] + and $3f + ret nz + + ld a, [hl] + and $7f + jr z, .SmallerNote + + ld de, $5c30 + ld a, $26 ; SPRITE_ANIM_INDEX_GS_INTRO_NOTE + call InitSpriteAnimStruct + ret + +.SmallerNote: + ld de, $5430 + ld a, $27 ; SPRITE_ANIM_INDEX_GS_INTRO_SMALLER_NOTE + call InitSpriteAnimStruct + ret + + +Intro_InitJigglypuff: + ld de, $7030 + ld a, $28 ; SPRITE_ANIM_INDEX_GS_INTRO_JIGGLYPUFF + call InitSpriteAnimStruct + ret + + +Intro_InitPikachu: + ld de, $70c0 + ld a, $29 ; SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU + call InitSpriteAnimStruct + ld de, $70c0 + ld a, $2a ; SPRITE_ANIM_INDEX_GS_INTRO_PIKACHU_TAIL + call InitSpriteAnimStruct + ret + +IntroScene10: +; Set up fireball cutscene (evolved Kanto starters) + ld hl, wIntroJumptableIndex + inc [hl] + ld b, SGB_GS_INTRO + ld c, 2 + call GetSGBLayout + callab InitEffectObject + call Intro_ResetLYOverrides + call Intro_BlankTilemapAndBGMap + + ld hl, vChars2 + ld de, IntroCharizard1GFX + ld bc, $3980 + call Request2bpp + + ld hl, vFont + ld de, $735f + ld bc, $3980 + call Request2bpp + + ld hl, vChars0 + ld de, IntroCharizardFlamesGFX + ld bc, $3980 + call Request2bpp + + ld hl, wSpriteAnimDict + ld a, $22 ; SPRITE_ANIM_DICT_GS_INTRO + ld [hli], a + ld a, $00 + ld [hli], a + + ld a, 0 + call DrawIntroCharizardGraphic + + ld a, $80 + ldh [hSCY], a + + xor a + ldh [hSCX], a + ld [wGlobalAnimYOffset], a + ld [wGlobalAnimXOffset], a + + xor a + ld [wIntroFrameCounter2], a + ld a, %00111111 + ldh [rBGP], a + ld a, %11111111 + ldh [rOBP0], a + ret + +IntroScene11: +; scroll up to Charizard silhoutte, flash Blastoise and Venusaur + ld hl, wIntroFrameCounter2 + ld a, [hl] + inc [hl] + and 1 + ret z + call Intro_CheckSCYEvent + ld hl, hSCY + ld a, [hl] + and a + jr z, .next + inc [hl] + ret + +.next + ld hl, wIntroJumptableIndex + inc [hl] + xor a + ld [wIntroFrameCounter1], a + +IntroScene12: +; load Charizard palettes + ld hl, wIntroFrameCounter1 + ld a, [hl] + inc [hl] + srl a + srl a + and 3 + ld e, a + ld d, 0 + ld hl, .palettes + add hl, de + ld a, [hl] + and a + jr z, .next + ldh [rBGP], a + ldh [rOBP0], a + ret + +.next + ld hl, wIntroJumptableIndex + inc [hl] + ld a, $80 + ld [wIntroFrameCounter1], a + ret + +.palettes: + db %01101010 + db %10100101 + db %11100100 + db %00000000 + +IntroScene13: +; Charizard mouth open + ld hl, wIntroFrameCounter1 + ld a, [hl] + and a + jr z, .next + + dec [hl] + ret + +.next + ld hl, wIntroJumptableIndex + inc [hl] + ld a, 1 + call DrawIntroCharizardGraphic + ld a, 4 + ld [wIntroFrameCounter1], a + ret + +IntroScene14: +; Charizard breathing fire + ld hl, wIntroFrameCounter1 + ld a, [hl] + and a + jr z, .next + dec [hl] + ret + +.next + ld hl, wIntroJumptableIndex + inc [hl] + ld a, 2 + call DrawIntroCharizardGraphic + ld a, 64 + ld [wIntroFrameCounter1], a + xor a + ld [wIntroFrameCounter2], a +; fallthrough + +IntroScene15: +; Charizard mouth wide open / fireball starts + call Intro_AnimateFireball + ld hl, wIntroFrameCounter1 + ld a, [hl] + and a + jr z, .next + dec [hl] + ret +.next + ld hl, wIntroJumptableIndex + inc [hl] + xor a + ld [wIntroFrameCounter1], a + ret + +IntroScene16: +; continue fireball / fade out palettes + call Intro_AnimateFireball + ld hl, wIntroFrameCounter1 + ld a, [hl] + inc [hl] + swap a + and $07 + ld e, a + ld d, $00 + ld hl, .palettes + add hl, de + ld a, [hl] + cp $ff + jr z, .next + ldh [rBGP], a + ldh [rOBP0], a + ret +.next + ld hl, wIntroJumptableIndex + inc [hl] + ret +.palettes: + db %11100100 + db %10010000 + db %01000000 + db %00000000 + db -1 + +Intro_BlankTilemapAndBGMap: + ld hl, $c2a0 + ld bc, $0168 +.blank_tilemap + ld [hl], 0 + inc hl + dec bc + ld a, b + or c + jr nz, .blank_tilemap + + ld hl, $c600 + ld bc, $0400 +.blank_bgmap + ld [hl], 0 + inc hl + dec bc + ld a, b + or c + jr nz, .blank_bgmap + + ld hl, vBGMap0 + ld de, $c600 + ld bc, $3940 + call Request2bpp + ret + + +Intro_CheckSCYEvent: + ldh a, [hSCY] + ld c, a + ld hl, .Cuelist + +.loop + ld a, [hli] + cp -1 + ret z + cp c + jr z, .value_found + inc hl + inc hl + jr .loop + +.value_found + ld a, [hli] + ld h, [hl] + ld l, a + jp hl + +.Cuelist: + dbw $87, Intro_BlastoiseAppears + dbw $88, Intro_FlashMonPalette + dbw $98, Intro_FlashSilhouette + dbw $99, Intro_LoadVenusaurPalette + dbw $bf, Intro_VenusaurAppears + dbw $c0, Intro_FlashMonPalette + dbw $d0, Intro_FlashSilhouette + dbw $d1, Intro_LoadCharizardPalette + db -1 + +Intro_BlastoiseAppears: + call Intro_LoadBlastoiseObject + ret + +Intro_VenusaurAppears: + call Intro_LoadVenusaurObject + ret + +Intro_FlashMonPalette: + ld a, %11100100 + ldh [rOBP0], a + xor a + ldh [rBGP], a + ret + +Intro_FlashSilhouette: + ld a, %11111111 + ldh [rOBP0], a + ld a, %00111111 + ldh [rBGP], a + ret + +Intro_LoadVenusaurPalette: + callab Function9639 + ret + +Intro_LoadCharizardPalette: + callab Function963f + ret + + +DrawIntroCharizardGraphic: + push af + hlcoord 0, 6 + ld c, SCREEN_WIDTH * 8 + xor a +.loop1 + ld [hli], a + dec c + jr nz, .loop1 + + pop af + ld e, a + ld d, $00 + ld hl, .charizard_data +rept 5 + add hl, de +endr + ld e, [hl] + inc hl + ld c, [hl] + inc hl + ld b, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + ld a, e + +.loop2_outer + push bc + push hl +.loop2_inner + ld [hli], a + inc a + dec c + jr nz, .loop2_inner + + pop hl + ld bc, SCREEN_WIDTH + add hl, bc + pop bc + dec b + jr nz, .loop2_outer + + ld a, 1 + ldh [hBGMapMode], a + call DelayFrame + call DelayFrame + call DelayFrame + xor a + ldh [hBGMapMode], a + ret + +.charizard_data + db $00, $08, $08, $22, $c3 + db $40, $09, $08, $21, $c3 + db $88, $09, $08, $20, $c3 + +Intro_AnimateFireball: + ld hl, wIntroFrameCounter2 + ld a, [hl] + inc [hl] + and 3 + ret nz + ld de, $6454 + ld a, $2b ; SPRITE_ANIM_INDEX_GS_INTRO_FIREBALL + call InitSpriteAnimStruct + ld hl, hSCX + dec [hl] + ld hl, wGlobalAnimXOffset + inc [hl] + ret + +Intro_LoadBlastoiseObject: + ld de, $b008 + ld a, $2c ; SPRITE_ANIM_INDEX_GS_INTRO_BLASTOISE + call InitSpriteAnimStruct + ret + +Intro_LoadVenusaurObject: + ld de, $b0a0 + ld a, $2d ; SPRITE_ANIM_INDEX_GS_INTRO_VENUSAUR + call InitSpriteAnimStruct + ret + +Intro_Copy128Tiles: + ld bc, 128 tiles +.loop + ld a, [de] + inc de + ld [hli], a + dec bc + ld a, c + or b + jr nz, .loop + ret + + +Intro_DrawBackground: + ld b, BG_MAP_WIDTH / 2 +.outer_loop + push hl + ld c, BG_MAP_HEIGHT / 2 +.inner_loop + call Intro_Draw2x2Tiles + dec c + jr nz, .inner_loop + pop hl + push bc + ld bc, 2 * BG_MAP_WIDTH + add hl, bc + pop bc + dec b + jr nz, .outer_loop + ret + + +Intro_Draw2x2Tiles: + push bc + push de + push hl + push hl + push hl + ld a, [de] + ld l, a + ld h, 0 + ld a, [wIntroTilesPointer + 0] + ld e, a + ld a, [wIntroTilesPointer + 1] + ld d, a + add hl, hl + add hl, hl + add hl, de + ld e, l + ld d, h + pop hl + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + pop hl + ld bc, BG_MAP_WIDTH + add hl, bc + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + pop hl + inc hl + inc hl + pop de + inc de + pop bc + ret + + +Intro_ResetLYOverrides: + ld hl, wLYOverrides + xor a + ld c, wLYOverrides2 - wLYOverrides +.loop + ld [hli], a + dec c + jr nz, .loop + ret + +;;;;;; GFX goes here ;;;;;;;;;;;;;;;;;; diff --git a/layout.link b/layout.link index e03d166..b33af85 100644 --- a/layout.link +++ b/layout.link @@ -897,6 +897,8 @@ ROMX $39 org $4000 org $41ff "gfx.asm@Gamefreak Logo GFX" + org $432F + "engine/opening_cutscene.asm" org $4adf "gfx.asm@Intro Underwater GFX" org $55ef diff --git a/ram/hram.asm b/ram/hram.asm index 4acfbfa..8f86a2a 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -124,6 +124,7 @@ ENDU ds 3 ; TODO +hCurSpriteYCoord:: hFFC0:: ds 1 ds 6 diff --git a/ram/wram.asm b/ram/wram.asm index da6d364..f579aa6 100644 --- a/ram/wram.asm +++ b/ram/wram.asm @@ -91,6 +91,10 @@ wTileMapBackup:: NEXTU +wSpriteAnimDict:: ds 10 * 2 ; NUM_SPRITEANIMDICT_ENTRIES * 2 + +NEXTU + ds 1 wc409:: ds 1 @@ -115,7 +119,10 @@ wSpriteAnimIDBuffer:: db ds 6 +wGlobalAnimYOffset:: wc4c7:: db + +wGlobalAnimXOffset:: wc4c8:: db ds 7 @@ -229,13 +236,31 @@ wca0a:: ds 1 ds 5 ; TODO +wIntroJumptableIndex:: wca10:: ds 1 + +UNION +wIntroBGMapPointer:: ds 2 ; ca11 +NEXTU wca11:: ds 1 wca12:: ds 1 +ENDU + +UNION +wIntroTilemapPointer:: ds 2 ; ca13 +NEXTU wca13:: ds 1 wca14:: ds 1 +ENDU + +wIntroTilesPointer:: ds 2 ; ca15 + +wIntroFrameCounter1:: ds 1 ; ca17 +wIntroFrameCounter2:: ds 1 ; ca18 + +wIntroSpriteStateFlag:: ds 1 ; ca19 - ds $22 ; TODO + ds $1d ; TODO wca37:: ds 1 wca38:: ds 1 @@ -153,7 +153,6 @@ 38:4000 PikachuMiniGame 39:4000 GameFreakIntro -39:432F OpeningCutscene 3A:441D Functione841d 3A:45D8 Functione85d8 3A:47F9 Functione87f9 |