diff options
Diffstat (limited to 'engine/title.asm')
-rwxr-xr-x | engine/title.asm | 450 |
1 files changed, 450 insertions, 0 deletions
diff --git a/engine/title.asm b/engine/title.asm new file mode 100755 index 00000000..c0c5006c --- /dev/null +++ b/engine/title.asm @@ -0,0 +1,450 @@ +IntroSequence: ; 6241 (1:6241) + callab Copyright_GFPresents + jr c, StartTitleScreen + callab GoldSilverIntro +StartTitleScreen: + call InitTitleScreen + call DelayFrame +.asm_6255 + call TitleScreenFrame + jr nc, .asm_6255 + call ClearSprites + call ClearBGPalettes + ld hl, rLCDC + res 2, [hl] + call ClearTileMap + xor a + ld [hLCDCPointer], a + ld b, $8 + call GetSGBLayout + call UpdateTimePals + ld a, [wce64] + cp $5 + jr c, .asm_627b + xor a +.asm_627b + ld e, a + ld d, $0 + ld hl, .Jumptable + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.Jumptable + dw MainMenu_ + dw DeleteSaveData + dw IntroSequence + dw IntroSequence + dw ResetClock + +InitTitleScreen: ; 6291 (1:6291) + call ClearBGPalettes + xor a + ld [wTimeOfDayPal], a + ld de, MUSIC_NONE + call PlayMusic + call ClearTileMap + call DisableLCD + call ClearSprites + xor a + ld [hBGMapMode], a + ld [hMapAnims], a + ld [hSCY], a + ld [hSCX], a + ld hl, $8000 + ld bc, $2000 + xor a + call ByteFill + callba ClearAnimatedObjectBuffer + + ld hl, TitleScreenGFX1 + ld de, $9000 + ld a, BANK(TitleScreenGFX1) + call FarDecompress + + ld hl, TitleScreenGFX2 + ld de, $8800 + ld a, BANK(TitleScreenGFX2) + call FarDecompress + + ld hl, TitleScreenGFX4 + ld de, $8000 + ld a, BANK(TitleScreenGFX4) + call FarDecompress + + ld hl, TitleScreenGFX3 + ld de, $8f80 + ld bc, $80 + ld a, BANK(TitleScreenGFX3) + call FarCopyBytes + + call Function636e + call Function63b6 + ld hl, wAnimatedObjectDynamicVTileOffsets + xor a + ld [hli], a + ld [hl], a + ld hl, rLCDC + set 2, [hl] + call EnableLCD + xor a + ld hl, wce63 + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld de, $6058 + ld a, $2c ; HO-OH + call InitAnimatedObjectStruct + ld hl, wAnimatedObjectStruct1 + ld de, wAnimatedObjectStruct10 + ld bc, $a + call CopyBytes + ld hl, wAnimatedObjectStruct1 + ld [hl], $0 + ld hl, wc700 + ld bc, $90 + xor a + call ByteFill + ld a, $43 + ld [hLCDCPointer], a + ld b, $c + call GetSGBLayout + call Function6341 + ld de, MUSIC_TITLE + call PlayMusic + ret + +Function6341: ; 6341 (1:6341) + ld a, [hCGB] + and a + jr nz, .asm_6365 + ld a, [hSGB] + and a + jr nz, .asm_6358 + ld a, $d8 + ld [rBGP], a +IF DEF(GOLD) + ld a, $ff + ld [rOBP0], a + ld a, $f8 +ENDC +IF DEF(SILVER) + ld a, $f0 + ld [rOBP0], a + ld a, $f0 +ENDC + ld [rOBP1], a + ret + +.asm_6358 + ld a, $e4 + ld [rBGP], a +IF DEF(GOLD) + ld a, $ff + ld [rOBP0], a + ld a, $e4 +ENDC +IF DEF(SILVER) + ld a, $f0 + ld [rOBP0], a + ld a, $e0 +ENDC + ld [rOBP1], a + ret + +.asm_6365 + ld a, $e4 + call DmgToCgbBGPals +IF DEF(SILVER) + ld a, $e0 +ENDC + call DmgToCgbObjPal0 + ret + +Function636e: ; 636e (1:636e) + ld a, [hCGB] + and a + ret z + ld a, $1 + ld [rVBK], a + ld hl, $9800 + ld bc, $240 + xor a + call ByteFill + ld hl, $9800 + ld bc, $714 + ld a, $1 + call Function63a6 + ld hl, $98c5 + ld bc, $10a + ld a, $3 + call Function63a6 + ld hl, $9980 + ld bc, $a0 + ld a, $4 + call ByteFill + ld a, $0 + ld [rVBK], a + ret + +Function63a6: ; 63a6 (1:63a6) + push bc + push hl +.asm_63a8 + ld [hli], a + dec c + jr nz, .asm_63a8 + pop hl + ld bc, $20 + add hl, bc + pop bc + dec b + jr nz, Function63a6 + ret + +Function63b6: ; 63b6 (1:63b6) + ld hl, GSIntroTilemap ; $4616 + ld de, $9800 +.asm_63bc + ld a, BANK(GSIntroTilemap) ; $26 + call GetFarByte + cp $ff + jr z, .asm_63ca + inc hl + ld [de], a + inc de + jr .asm_63bc + +.asm_63ca + ld a, [hCGB] + and a + ret nz + ld hl, $9960 + ld bc, $20 + ld a, $50 + call ByteFill + ret + +TitleScreenFrame: ; 63da (1:63da) + call Function63fe + ld a, [wce63] + bit 7, a + jr nz, .asm_63fc + call Function640f + ld a, $1 + ld [hOAMUpdate], a + callba AnimatedObjects_PlayFrame + xor a + ld [hOAMUpdate], a + call Function64b1 + call DelayFrame + and a + ret + +.asm_63fc + scf + ret + +Function63fe: ; 63fe (1:63fe) +IF DEF(GOLD) + ld a, [hVBlankCounter] + and $7 + ret nz +ENDC + ld hl, wc75f + ld a, [hl] + dec a + ld bc, $28 + call ByteFill + ret + +Function640f: ; 640f (1:640f) + ld e, a + ld d, $0 + ld hl, .Jumptable ; $641b + add hl, de + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] + +.Jumptable + dw Function6426 + dw Function6434 + dw Function648b + +Function6421: + ld hl, wce63 + inc [hl] + ret + +Function6426: + ld hl, wce63 + inc [hl] + ld hl, wce65 +IF DEF(GOLD) + ld de, $13c0 +ENDC +IF DEF(SILVER) + ld de, $1140 +ENDC + ld [hl], e + inc hl + ld [hl], d + ret + +Function6434: + ld hl, wce65 + ld e, [hl] + inc hl + ld d, [hl] + ld a, e + or d + jr z, .asm_646b + dec de + ld [hl], d + dec hl + ld [hl], e + call GetJoypad + ld hl, hJoyDown + ld a, [hl] + and D_UP + B_BUTTON + SELECT + cp D_UP + B_BUTTON + SELECT + jr z, .asm_6460 + ld a, [hl] + and D_DOWN + B_BUTTON + SELECT + cp D_DOWN + B_BUTTON + SELECT + jr z, .asm_6480 + ld a, [hl] + and START | A_BUTTON + jr nz, .asm_645c + ret + +.asm_645c + ld a, $0 + jr .asm_6462 + +.asm_6460 + ld a, $1 +.asm_6462 + ld [wce64], a + ld hl, wce63 + set 7, [hl] + ret + +.asm_646b + ld hl, wce63 + inc [hl] + xor a + ld [wMusicFadeIDLo], a + ld [wMusicFadeIDHi], a + ld hl, wMusicFade + ld [hl], $8 + ld hl, wce65 + inc [hl] + ret + +.asm_6480 + ld a, $4 + ld [wce64], a + ld hl, wce63 + set 7, [hl] + ret + +Function648b: + ld hl, wce65 + inc [hl] + ld a, [wMusicFade] + and a + ret nz + ld a, $2 + ld [wce64], a + ld hl, wce63 + set 7, [hl] + ret + +DeleteSaveData: + callba DeleteSaveData_ + jp Init + +ResetClock: + callba ResetClock_ + jp Init + +Function64b1: ; 64b1 (1:64b1) + ld a, [wce65] + and $3 + ret nz +IF DEF(GOLD) + ld bc, wAnimatedObjectStruct10Index + ld hl, $a + add hl, bc + ld l, [hl] + ld h, $0 + add hl, hl + add hl, hl + ld de, .Data_64e0 + add hl, de + ld a, [wce65] + and $4 + srl a + srl a + ld e, a + ld d, $0 + add hl, de + add hl, de + ld a, [hli] + and a + ret z + ld e, a + ld d, [hl] +ENDC + +IF DEF(SILVER) + ld de, $7c58 +ENDC + ld a, $f + call InitAnimatedObjectStruct + ret + +IF DEF(GOLD) +.Data_64e0: + db $5c, $50, $00, $00 + db $5c, $68, $5c, $58 + db $5c, $68, $5c, $78 + db $5c, $88, $5c, $78 + db $00, $00, $5c, $78 + db $00, $00, $5c, $58 +ENDC + +Copyright: + call ClearTileMap + call LoadFontsExtra + ld de, TitleScreenGFX5 + ld hl, $9600 + lb bc, BANK(TitleScreenGFX5), 30 + call Request2bpp + hlcoord 2, 7 + ld de, CopyrightString + jp PlaceString + +CopyrightString: + db $60, $61, $62, $63, $7a, $7b, $7c, $7d + db $65, $66, $67, $68, $69, $6a + next $60, $61, $62, $63, $7a, $7b, $7c, $7d + db $6b, $6c, $6d, $6e, $6f, $70, $71, $72 + next $60, $61, $62, $63, $7a, $7b, $7c, $7d + db $73, $74, $75, $76, $77, $78, $79, $71, $72 + db "@" + +GameInit:: ; 6545 (1:6545) + call ClearWindowData + ld a, $5 + ld hl, $4f60 + rst FarCall + jp IntroSequence |