diff options
Diffstat (limited to 'engine/titlescreen.asm')
-rwxr-xr-x | engine/titlescreen.asm | 461 |
1 files changed, 245 insertions, 216 deletions
diff --git a/engine/titlescreen.asm b/engine/titlescreen.asm index 244d9ff7..8d605c49 100755 --- a/engine/titlescreen.asm +++ b/engine/titlescreen.asm @@ -1,4 +1,9 @@ -SetDefaultNamesBeforeTitlescreen: ; 414b (1:414b) +; copy text of fixed length NAME_LENGTH (like player name, rival name, mon names, ...) +CopyFixedLengthText: ; 42b1 (1:42b1) + ld bc, NAME_LENGTH + jp CopyData + +SetDefaultNamesBeforeTitlescreen: ; 42b7 (1:42b7) ld hl, NintenText ld de, wPlayerName call CopyFixedLengthText @@ -16,7 +21,7 @@ SetDefaultNamesBeforeTitlescreen: ; 414b (1:414b) ld [wAudioROMBank], a ld [wAudioSavedROMBank], a -DisplayTitleScreen: ; 4171 (1:4171) +DisplayTitleScreen: ; 42dd (1:42dd) call GBPalWhiteOut ld a, $1 ld [H_AUTOBGTRANSFERENABLED], a @@ -30,35 +35,93 @@ DisplayTitleScreen: ; 4171 (1:4171) call ClearScreen call DisableLCD call LoadFontTilePatterns -; todo: fix hl pointers - ld hl, NintendoCopyrightLogoGraphics ; 4:4c48 - ld de, vTitleLogo + $600 + ld hl, NintendoCopyrightLogoGraphics + ld de, vTitleLogo2 + $100 ld bc, $50 ld a, BANK(NintendoCopyrightLogoGraphics) - call FarCopyData - ld hl, NineTile ; 4:4e08 - ld de, vTitleLogo + $6e0 - ld bc, $10 - ld a, BANK(NineTile) - call FarCopyData - ld hl, GamefreakLogoGraphics ; 4:4d78 - ld de, vTitleLogo + $650 + call FarCopyData2 + ld hl, GamefreakLogoGraphics + ld de, vTitleLogo2 + $100 + $50 ld bc, $90 ld a, BANK(GamefreakLogoGraphics) - call FarCopyData - callab Func_f453f - ld hl, vBGMap0 - ld bc, (vBGMap1 + $400) - vBGMap0 - ld a, " " - call FillMemory - callab Func_f4578 - call Func_4418 - call .WriteCopyrightTiles + call FarCopyData2 + ld hl, PokemonLogoGraphics + ld de, vTitleLogo + ld bc, $600 + ld a, BANK(PokemonLogoGraphics) + call FarCopyData2 ; first chunk + ld hl, PokemonLogoGraphics+$600 + ld de, vTitleLogo2 + ld bc, $100 + ld a, BANK(PokemonLogoGraphics) + call FarCopyData2 ; second chunk + ld hl, Version_GFX ; $402f + ld de,vChars2 + $600 + ld bc, Version_GFXEnd - Version_GFX + ld a, BANK(Version_GFX) + call FarCopyDataDouble + call ClearBothBGMaps + +; place tiles for pokemon logo (except for the last row) + coord hl, 2, 1 + ld a, $80 + ld de, SCREEN_WIDTH + ld c, 6 +.pokemonLogoTileLoop + ld b, $10 + push hl +.pokemonLogoTileRowLoop ; place tiles for one row + ld [hli], a + inc a + dec b + jr nz, .pokemonLogoTileRowLoop + pop hl + add hl, de + dec c + jr nz, .pokemonLogoTileLoop + +; place tiles for the last row of the pokemon logo + coord hl, 2, 7 + ld a, $31 + ld b, $10 +.pokemonLogoLastTileRowLoop + ld [hli], a + inc a + dec b + jr nz, .pokemonLogoLastTileRowLoop + + call DrawPlayerCharacter + +; put a pokeball in the player's hand + ld hl, wOAMBuffer + $28 + ld a, $74 + ld [hl], a + +; place tiles for title screen copyright + coord hl, 2, 17 + ld de, .tileScreenCopyrightTiles + ld b, $10 +.tileScreenCopyrightTilesLoop + ld a, [de] + ld [hli], a + inc de + dec b + jr nz, .tileScreenCopyrightTilesLoop + + jr .next + +.tileScreenCopyrightTiles ; 437f (1:437f) + db $41,$42,$43,$42,$44,$42,$45,$46,$47,$48,$49,$4A,$4B,$4C,$4D,$4E ; ©'95.'96.'98 GAME FREAK inc. + +.next call SaveScreenTilesToBuffer2 call LoadScreenTilesFromBuffer2 call EnableLCD - callab Func_f459a - ld a, $9b + ld a,CHARMANDER ; which Pokemon to show first on the title screen + + ld [wTitleMonSpecies], a + call LoadTitleMonSprite + ld a, (vBGMap0 + $300) / $100 call TitleScreenCopyTileMapToVRAM call SaveScreenTilesToBuffer1 ld a, $40 @@ -69,9 +132,8 @@ DisplayTitleScreen: ; 4171 (1:4171) ld b, SET_PAL_TITLE_SCREEN call RunPaletteCommand call GBPalNormal - ld a, %11100000 + ld a, %11100100 ld [rOBP0], a - call UpdateGBCPal_OBP0 ; make pokemon logo bounce up and down ld bc, hSCY ; background scroll Y @@ -91,7 +153,7 @@ DisplayTitleScreen: ; 4171 (1:4171) call .ScrollTitleScreenPokemonLogo jr .bouncePokemonLogoLoop -.TitleScreenPokemonLogoYScrolls ; 4228 (1:4228) +.TitleScreenPokemonLogoYScrolls: ; 43db (1:43db) ; Controls the bouncing effect of the Pokemon logo on the title screen db -4,16 ; y scroll amount, number of times to scroll db 3,4 @@ -102,7 +164,7 @@ DisplayTitleScreen: ; 4171 (1:4171) db -1,2 db 0 ; terminate list with 0 -.ScrollTitleScreenPokemonLogo ; 4237 (1:4237) +.ScrollTitleScreenPokemonLogo ; Scrolls the Pokemon logo on the title screen to create the bouncing effect ; Scrolls d pixels e times call DelayFrame @@ -113,22 +175,7 @@ DisplayTitleScreen: ; 4171 (1:4171) jr nz, .ScrollTitleScreenPokemonLogo ret -; place tiles for title screen copyright -.WriteCopyrightTiles ; 4241 (1:4241) - coord hl, 2, 17 - ld de, .tileScreenCopyrightTiles -.titleScreenCopyrightTilesLoop - ld a, [de] - inc de - cp $ff - ret z - ld [hli], a - jr .titleScreenCopyrightTilesLoop - -.tileScreenCopyrightTiles ; 424f (1:424f) - db $e0,$e1,$e2,$e3,$e1,$e2,$ee,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ff ; ©1995-1999 GAME FREAK inc. - -.finishedBouncingPokemonLogo ; 4260 (1:4260) +.finishedBouncingPokemonLogo call LoadScreenTilesFromBuffer1 ld c, 36 call DelayFrames @@ -136,41 +183,52 @@ DisplayTitleScreen: ; 4171 (1:4171) call PlaySound ; scroll game version in from the right - callab Func_f4585 + call PrintGameVersionOnTitleScreen ld a, SCREEN_HEIGHT_PIXELS ld [hWY], a + ld d, 144 +.scrollTitleScreenGameVersionLoop + ld h, d + ld l, 64 + call ScrollTitleScreenGameVersion + ld h, 0 + ld l, 80 + call ScrollTitleScreenGameVersion + ld a, d + add 4 + ld d, a + and a + jr nz, .scrollTitleScreenGameVersionLoop + + ld a, vBGMap1 / $100 + call TitleScreenCopyTileMapToVRAM + call LoadScreenTilesFromBuffer2 + call PrintGameVersionOnTitleScreen call Delay3 - ld e, 0 - call TitleScreen_PlayPikachuPCM call WaitForSoundToFinish - call StopAllMusic ld a, MUSIC_TITLE_SCREEN ld [wNewSoundID], a call PlaySound -.asm_428f xor a ld [wUnusedCC5B], a - ld [wTitleMonSpecies], a - ld [wTitleMonSpecies+1], a - ld [wTitleMonSpecies+2], a - ld [wTitleMonSpecies+3], a - ld a, $f - ld [wTitleMonSpecies+4], a -.titleScreenLoop - call IncrementResetCounter - jp c, .doTitlescreenReset - call DelayFrame - call JoypadLowSensitivity - ld a, [hJoyHeld] - cp D_UP | SELECT | B_BUTTON - jr z, .asm_42bf - and A_BUTTON | START - jr nz, .asm_42bf - call Func_4390 - jr .titleScreenLoop -.asm_42bf - ld e, $a - call TitleScreen_PlayPikachuPCM + +; Keep scrolling in new mons indefinitely until the user performs input. +.awaitUserInterruptionLoop + ld c, 200 + call CheckForUserInterruption + jr c, .finishedWaiting + call TitleScreenScrollInMon + ld c, 1 + call CheckForUserInterruption + jr c, .finishedWaiting + callba TitleScreenAnimateBallIfStarterOut + call TitleScreenPickNewMon + jr .awaitUserInterruptionLoop + +.finishedWaiting + ld a, [wTitleMonSpecies] + call PlayCry + call WaitForSoundToFinish call GBPalWhiteOutWithDelay3 call ClearSprites xor a @@ -190,172 +248,143 @@ DisplayTitleScreen: ; 4171 (1:4171) cp D_UP | SELECT | B_BUTTON jp z, .doClearSaveDialogue jp MainMenu -.asm_42f0 ; 42f0 (1:42f0) - callab Func_e8e79 - jp .asm_428f -.asm_42fb ; 42fb (1:42fb) - ld a, [wTitleMonSpecies+4] - inc a - cp $2a - jr c, .asm_4305 - ld a, $f -.asm_4305 - ld [wTitleMonSpecies+4], a - ld e, a - callab PlayPikachuSoundClip - xor a - ld [wTitleMonSpecies+2], a - ld [wTitleMonSpecies+3], a - jp .titleScreenLoop -.doTitlescreenReset ; 431b (1:431b) - ld [wAudioFadeOutControl], a - call StopAllMusic -.audioFadeLoop - ld a, [wAudioFadeOutControl] - and a - jr nz, .audioFadeLoop - jp Init - -.doClearSaveDialogue ; 432a (1:432a) +.doClearSaveDialogue jpba DoClearSaveDialogue +TitleScreenPickNewMon: ; 4496 (1:4496) + ld a, vBGMap0 / $100 + call TitleScreenCopyTileMapToVRAM + +.loop +; Keep looping until a mon different from the current one is picked. + call Random + and $f + ld c, a + ld b, 0 + ld hl, TitleMons + add hl, bc + ld a, [hl] + ld hl, wTitleMonSpecies + +; Can't be the same as before. + cp [hl] + jr z, .loop + + ld [hl], a + call LoadTitleMonSprite + + ld a, $90 + ld [hWY], a + ld d, 1 ; scroll out + callba TitleScroll + ret + +TitleScreenScrollInMon: ; 44c1 (1:44c1) + ld d, 0 ; scroll in + callba TitleScroll + xor a + ld [hWY], a + ret -TitleScreenCopyTileMapToVRAM: ; 4332 (1:4332) +ScrollTitleScreenGameVersion: ; 44cf (1:44cf) +.wait + ld a, [rLY] + cp l + jr nz, .wait + + ld a, h + ld [rSCX], a + +.wait2 + ld a, [rLY] + cp h + jr z, .wait2 + ret + +DrawPlayerCharacter: ; 44dd (1:44dd) + ld hl, PlayerCharacterTitleGraphics + ld de, vSprites + ld bc, PlayerCharacterTitleGraphicsEnd - PlayerCharacterTitleGraphics + ld a, BANK(PlayerCharacterTitleGraphics) + call FarCopyData2 + call ClearSprites + xor a + ld [wPlayerCharacterOAMTile], a + ld hl, wOAMBuffer + ld de, $605a + ld b, 7 +.loop + push de + ld c, 5 +.innerLoop + ld a, d + ld [hli], a ; Y + ld a, e + ld [hli], a ; X + add 8 + ld e, a + ld a, [wPlayerCharacterOAMTile] + ld [hli], a ; tile + inc a + ld [wPlayerCharacterOAMTile], a + inc hl + dec c + jr nz, .innerLoop + pop de + ld a, 8 + add d + ld d, a + dec b + jr nz, .loop + ret + +ClearBothBGMaps: ; 4519 (1:4519) + ld hl, vBGMap0 + ld bc, $400 * 2 + ld a, " " + jp FillMemory + +LoadTitleMonSprite: ; 4524 (1:4524) + ld [wcf91], a + ld [wd0b5], a + coord hl, 5, 10 + call GetMonHeader + jp LoadFrontSpriteByMonIndex + +TitleScreenCopyTileMapToVRAM: ; 4533 (1:4533) ld [H_AUTOBGTRANSFERDEST + 1], a jp Delay3 -LoadCopyrightAndTextBoxTiles: ; 4337 (1:4337) +LoadCopyrightAndTextBoxTiles: ; 4538 (1:4538) xor a ld [hWY], a call ClearScreen call LoadTextBoxTilePatterns -LoadCopyrightTiles: ; 4340 (1:4340) +LoadCopyrightTiles: ; 4541 (1:4541) ld de, NintendoCopyrightLogoGraphics ld hl, vChars2 + $600 - lb bc, BANK(NintendoCopyrightLogoGraphics), (TextBoxGraphics + $10 - NintendoCopyrightLogoGraphics) / $10 ; bug: overflows into text box graphics and copies the "A" tile + lb bc, BANK(NintendoCopyrightLogoGraphics), (GamefreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10 call CopyVideoData coord hl, 2, 7 ld de, CopyrightTextString jp PlaceString -CopyrightTextString: ; 4355 (1:4355) - db $60,$61,$62,$63,$61,$62,$7c,$7f,$65,$66,$67,$68,$69,$6a ; ©1995-1999 Nintendo - next $60,$61,$62,$63,$61,$62,$7c,$7f,$6b,$6c,$6d,$6e,$6f,$70,$71,$72 ; ©1995-1999 Creatures inc. - next $60,$61,$62,$63,$61,$62,$7c,$7f,$73,$74,$75,$76,$77,$78,$79,$7a,$7b ; ©1995-1999 GAME FREAK inc. +CopyrightTextString: ; 4556 (1:4556) + db $60,$61,$62,$61,$63,$61,$64,$7F,$65,$66,$67,$68,$69,$6A ; ©'95.'96.'98 Nintendo + next $60,$61,$62,$61,$63,$61,$64,$7F,$6B,$6C,$6D,$6E,$6F,$70,$71,$72 ; ©'95.'96.'98 Creatures inc. + next $60,$61,$62,$61,$63,$61,$64,$7F,$73,$74,$75,$76,$77,$78,$79,$7A,$7B ; ©'95.'96.'98 GAME FREAK inc. db "@" -TitleScreen_PlayPikachuPCM: ; 4387 (1:4387) - callab PlayPikachuSoundClip - ret - -Func_4390: ; 4390 (1:4390) - call Func_43de - ld a, [wTitleMonSpecies] - ld e, a - ld d, 0 - ld hl, PointerTable_43a2 - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl - -PointerTable_43a2: ; 43a2 (1:43a2) - dw Func_43be - dw Func_43c3 - dw Func_43d9 - dw Func_43d9 - dw Func_43c7 - dw Func_43d9 - dw Func_43d9 - dw Func_43c3 - dw Func_43d9 - dw Func_43d9 - dw Func_43bf - dw Func_43ba - -Func_43ba: ; 43ba (1:43ba) - xor a - ld [wTitleMonSpecies], a -Func_43be - ret - -Func_43bf: ; 43bf (1:43bf) - ld e, 0 - jr asm_43c9 -Func_43c3: ; 43c3 (1:43c3) - ld e, 4 - jr asm_43c9 -Func_43c7: ; 43c7 (1:43c7) - ld e, 8 -asm_43c9: ; 43c9 (1:43c9) - ld hl, wOAMBuffer + 2 - ld c, 8 -.loop - ld a, [hl] - and $f3 - or e - ld [hli], a - inc hl - inc hl - inc hl - dec c - jr nz, .loop -Func_43d9: ; 43d9 (1:43d9) - ld hl, wTitleMonSpecies - inc [hl] - ret - -Func_43de: ; 43de (1:43de) - ld hl, wTitleMonSpecies + 1 - ld a, [hl] - inc [hl] - and a - jr z, .asm_43ed - cp $80 - jr z, .asm_43ed - cp $90 - ret nz -.asm_43ed - ld a, $1 - ld [wTitleMonSpecies], a - ret +INCLUDE "data/title_mons.asm" -; copy text of fixed length NAME_LENGTH (like player name, rival name, mon names, ...) -CopyFixedLengthText: ; 43f3 (1:43f3) - ld bc, NAME_LENGTH - jp CopyData - -NintenText: db "NINTEN@" -SonyText: db "SONY@" +; prints version text (red, blue) +PrintGameVersionOnTitleScreen: ; 4598 (1:4598) + coord hl, 7, 8 + ld de, VersionOnTitleScreenText + jp PlaceString -IncrementResetCounter: ; 4405 (1:4405) - ld hl, wTitleMonSpecies + 2 - ld e, [hl] - inc hl - ld d, [hl] - inc de - ld a, d - cp $c - jr z, .doReset - ld [hl], d - dec hl - ld [hl], e - and a - ret -.doReset - scf - ret - -Func_4418: ; 4418 (1:4418) - xor a - call SwitchSRAMBankAndLatchClockData - ld hl, $a000 - ld bc, $20 - ld a, $aa - call FillMemory - call PrepareRTCDataAndDisableSRAM - ret
\ No newline at end of file +; these point to special tiles specifically loaded for that purpose and are not usual text +VersionOnTitleScreenText: ; 45a1 (1:45a1) + db $60,$61,$7F,$65,$66,$67,$68,$69,"@" ; "Red Version" |