-
Notifications
You must be signed in to change notification settings - Fork 1k
Restoring Japanese Title Screen from Red and Green
SombrAbsol edited this page Apr 6, 2023
·
6 revisions
The japanese Title Screen from Red and Green is displayed a bit different to japanese Blue and international releases. With this code, we'll restore that.
Code from pokered-jp (luckytyphlosion).
; copy text of fixed length NAME_LENGTH (like player name, rival name, mon names, ...)
CopyFixedLengthText:
ld bc, NAME_LENGTH
jp CopyData
SetDefaultNamesBeforeTitlescreen::
ld hl, NintenText
ld de, wPlayerName
call CopyFixedLengthText
ld hl, SonyText
ld de, wRivalName
call CopyFixedLengthText
xor a
ldh [hWY], a
ld [wLetterPrintingDelayFlags], a
ld hl, wd732
ld [hli], a
ld [hli], a
ld [hl], a
ld a, BANK(Music_TitleScreen)
ld [wAudioROMBank], a
ld [wAudioSavedROMBank], a
DisplayTitleScreen:
call GBPalWhiteOut
ld a, $1
ldh [hAutoBGTransferEnabled], a
xor a
ldh [hTileAnimations], a
- ldh [hSCX], a
- ld a, $40
+ ld a, $90
- ldh [hSCY], a
+ ldh [hSCX], a
ld a, $90
ldh [hWY], a
call ClearScreen
call DisableLCD
call LoadFontTilePatterns
ld hl, NintendoCopyrightLogoGraphics
ld de, vTitleLogo2 tile 16
- ld bc, 5 tiles
+ ld bc, 13 tiles
ld a, BANK(NintendoCopyrightLogoGraphics)
call FarCopyData2
- ld hl, GamefreakLogoGraphics
- ld de, vTitleLogo2 tile (16 + 5)
- ld bc, 9 tiles
- ld a, BANK(GamefreakLogoGraphics)
- call FarCopyData2
ld hl, PokemonLogoGraphics
ld de, vTitleLogo
ld bc, $60 tiles
ld a, BANK(PokemonLogoGraphics)
call FarCopyData2 ; first chunk
ld hl, PokemonLogoGraphics tile $60
ld de, vTitleLogo2
ld bc, $10 tiles
ld a, BANK(PokemonLogoGraphics)
call FarCopyData2 ; second chunk
ld hl, Version_GFX
ld de, vChars2 tile $60 + (10 tiles - (Version_GFXEnd - Version_GFX) * 2) / 2
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)
hlcoord 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
hlcoord 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, wShadowOAMSprite10
- ld a, $74
- ld [hl], a
; place tiles for title screen copyright
- hlcoord 2, 17
- ld de, .tileScreenCopyrightTiles
- ld b, $10
+ hlcoord 3, 17
+ ld a, $41
+ ld b, 13 tiles
.tileScreenCopyrightTilesLoop
- ld a, [de]
ld [hli], a
- inc de
+ inc a
dec b
jr nz, .tileScreenCopyrightTilesLoop
- jr .next
-.tileScreenCopyrightTiles
- 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 PrintGameVersionOnTitleScreen
+ call SaveScreenTilesToBuffer1
call LoadScreenTilesFromBuffer2
call EnableLCD
IF DEF(_RED)
ld a, STARTER1 ; which Pokemon to show first on the title screen
ENDC
IF DEF(_BLUE)
ld a, STARTER2 ; which Pokemon to show first on the title screen
ENDC
ld [wTitleMonSpecies], a
call LoadTitleMonSprite
ld a, HIGH(vBGMap0 + $300)
call TitleScreenCopyTileMapToVRAM
- call SaveScreenTilesToBuffer1
ld a, $40
ldh [hWY], a
- call LoadScreenTilesFromBuffer2
ld a, HIGH(vBGMap0)
call TitleScreenCopyTileMapToVRAM
ld b, SET_PAL_TITLE_SCREEN
call RunPaletteCommand
call GBPalNormal
ld a, %11100100
ldh [rOBP0], a
+ ld a, SFX_INTRO_WHOOSH
+ call PlaySound
+.scrollInLogoLoop
+ call DelayFrame
+ ld a, [hSCX]
+ add 4
+ ld [hSCX], a
+ jr nz, .scrollInLogoLoop
+ ld a, $90
+ ldh [hWY], a
+ ld c, $14
+ call DelayFrames
+ call PrintGameVersionOnTitleScreen
+ call Delay3
+ ld a, HIGH(vBGMap1)
+ call TitleScreenCopyTileMapToVRAM
+ call LoadScreenTilesFromBuffer1
+ call Delay3
+ ld a, MUSIC_TITLE_SCREEN
+ ld [wNewSoundID], a
+ call PlaySound
-; make pokemon logo bounce up and down
- ld bc, hSCY ; background scroll Y
- ld hl, .TitleScreenPokemonLogoYScrolls
-.bouncePokemonLogoLoop
- ld a, [hli]
- and a
- jr z, .finishedBouncingPokemonLogo
- ld d, a
- cp -3
- jr nz, .skipPlayingSound
- ld a, SFX_INTRO_CRASH
- call PlaySound
-.skipPlayingSound
- ld a, [hli]
- ld e, a
- call .ScrollTitleScreenPokemonLogo
- jr .bouncePokemonLogoLoop
-.TitleScreenPokemonLogoYScrolls:
-; 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
- db -3,4
- db 2,2
- db -2,2
- db 1,2
- db -1,2
- db 0 ; terminate list with 0
-.ScrollTitleScreenPokemonLogo:
-; Scrolls the Pokemon logo on the title screen to create the bouncing effect
-; Scrolls d pixels e times
- call DelayFrame
- ld a, [bc] ; background scroll Y
- add d
- ld [bc], a
- dec e
- jr nz, .ScrollTitleScreenPokemonLogo
- ret
-.finishedBouncingPokemonLogo
- call LoadScreenTilesFromBuffer1
- ld c, 36
- call DelayFrames
- ld a, SFX_INTRO_WHOOSH
- call PlaySound
-; scroll game version in from the right
- call PrintGameVersionOnTitleScreen
- ld a, SCREEN_HEIGHT_PX
- ldh [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, HIGH(vBGMap1)
- call TitleScreenCopyTileMapToVRAM
- call LoadScreenTilesFromBuffer2
- call PrintGameVersionOnTitleScreen
- call Delay3
- call WaitForSoundToFinish
- ld a, MUSIC_TITLE_SCREEN
- ld [wNewSoundID], a
- call PlaySound
- xor a
- ld [wUnusedCC5B], a
; Keep scrolling in new mons indefinitely until the user performs input.
.awaitUserInterruptionLoop
- ld c, 200
+ ld c, 255
call CheckForUserInterruption
jr c, .finishedWaiting
call TitleScreenScrollInMon
- ld c, 1
- call CheckForUserInterruption
- jr c, .finishedWaiting
- farcall TitleScreenAnimateBallIfStarterOut
call TitleScreenPickNewMon
jr .awaitUserInterruptionLoop
.finishedWaiting
ld a, [wTitleMonSpecies]
call PlayCry
call WaitForSoundToFinish
call GBPalWhiteOutWithDelay3
call ClearSprites
xor a
ldh [hWY], a
- inc a
+ ld a, 1
ldh [hAutoBGTransferEnabled], a
call ClearScreen
ld a, HIGH(vBGMap0)
call TitleScreenCopyTileMapToVRAM
ld a, HIGH(vBGMap1)
call TitleScreenCopyTileMapToVRAM
call Delay3
call LoadGBPal
ldh a, [hJoyHeld]
ld b, a
and D_UP | SELECT | B_BUTTON
cp D_UP | SELECT | B_BUTTON
jp z, .doClearSaveDialogue
IF DEF(_DEBUG)
ld a, b
bit BIT_SELECT, a
jp nz, DebugMenu
ENDC
jp MainMenu
.doClearSaveDialogue
farjp DoClearSaveDialogue
TitleScreenPickNewMon:
ld a, HIGH(vBGMap0)
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
ldh [hWY], a
- ld d, 1 ; scroll out
- farcall TitleScroll
- ret
+ ld d, $A0
+ ld c, $C
+ jp TitleScroll
TitleScreenScrollInMon:
ld d, 0 ; scroll in
- farcall TitleScroll
+ ld c, $14
+ call TitleScroll
xor a
ldh [hWY], a
ret
+TitleScroll:
+ ld h, d
+ ld l, $48
+ call .Scroll
+ ld h, 0
+ ld l, $88
+ call .Scroll
+ ld a, d
+ add 8
+ ld d, a
+ dec c
+ jr nz, TitleScroll
+ ret
+.Scroll
.wait
ldh a, [rLY]
cp l
jr nz, .wait
ld a, h
ldh [rSCX], a
.wait2
ldh a, [rLY]
cp h
jr z, .wait2
ret
DrawPlayerCharacter:
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, wShadowOAM
- lb de, $60, $5a
+ lb de, $60, $30
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:
ld hl, vBGMap0
ld bc, $400 * 2
ld a, " "
jp FillMemory
LoadTitleMonSprite:
ld [wcf91], a
ld [wd0b5], a
- hlcoord 5, 10
+ hlcoord 9, 10
call GetMonHeader
jp LoadFrontSpriteByMonIndex
TitleScreenCopyTileMapToVRAM:
ldh [hAutoBGTransferDest + 1], a
jp Delay3
LoadCopyrightAndTextBoxTiles:
xor a
ldh [hWY], a
call ClearScreen
call LoadTextBoxTilePatterns
LoadCopyrightTiles:
ld de, NintendoCopyrightLogoGraphics
ld hl, vChars2 tile $60
- lb bc, BANK(NintendoCopyrightLogoGraphics), (GamefreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10
+ lb bc, BANK(NintendoCopyrightLogoGraphics), (NintendoCopyrightLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10
call CopyVideoData
- hlcoord 2, 7
+ hlcoord 5, 7
ld de, CopyrightTextString
jp PlaceString
CopyrightTextString:
- 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 $60,$61,$62,$63,$6D,$6E,$6F,$70,$71,$72 ; ©1995 Nintendo
+ next $60,$61,$62,$63,$73,$74,$75,$76,$77,$78,$6B,$6C ; ©1995 Creatures inc.
+ next $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6A,$6B,$6C ; ©1995 GAME FREAK inc.
db "@"
INCLUDE "data/pokemon/title_mons.asm"
; prints version text (red, blue)
PrintGameVersionOnTitleScreen:
hlcoord 7, 8
ld de, VersionOnTitleScreenText
jp PlaceString
; these point to special tiles specifically loaded for that purpose and are not usual text
VersionOnTitleScreenText:
IF DEF(_RED)
db $60,$61,$7F,$65,$66,$67,$68,$69,"@" ; "Red Version"
ENDC
IF DEF(_BLUE)
db $61,$62,$63,$64,$65,$66,$67,$68,"@" ; "Blue Version"
ENDC
NintenText: db "NINTEN@"
SonyText: db "SONY@"
PokemonLogoGraphics: INCBIN "gfx/title/pokemon_logo.2bpp"
FontGraphics:: INCBIN "gfx/font/font.1bpp"
FontGraphicsEnd::
ABTiles: INCBIN "gfx/font/AB.2bpp"
HpBarAndStatusGraphics:: INCBIN "gfx/font/font_battle_extra.2bpp"
HpBarAndStatusGraphicsEnd::
BattleHudTiles1: INCBIN "gfx/battle/battle_hud_1.1bpp"
BattleHudTiles1End:
BattleHudTiles2: INCBIN "gfx/battle/battle_hud_2.1bpp"
BattleHudTiles3: INCBIN "gfx/battle/battle_hud_3.1bpp"
BattleHudTiles3End:
NintendoCopyrightLogoGraphics: INCBIN "gfx/splash/copyright.2bpp"
+NintendoCopyrightLogoGraphicsEnd:
-GamefreakLogoGraphics: INCBIN "gfx/title/gamefreak_inc.2bpp"
-GamefreakLogoGraphicsEnd:
TextBoxGraphics:: INCBIN "gfx/font/font_extra.2bpp"
TextBoxGraphicsEnd::
...
Now you can delete gfx/title/gamefreak_inc.png
...
SECTION "Battle Engine 6", ROMX
INCLUDE "engine/battle/move_effects/mist.asm"
INCLUDE "engine/battle/move_effects/one_hit_ko.asm"
SECTION "Slot Machines", ROMX
-INCLUDE "engine/movie/title2.asm"
INCLUDE "engine/battle/link_battle_versus_text.asm"
INCLUDE "engine/slots/slot_machine.asm"
INCLUDE "engine/events/pewter_guys.asm"
INCLUDE "engine/math/multiply_divide.asm"
INCLUDE "engine/slots/game_corner_slots.asm"
SECTION "Battle Engine 7", ROMX
...
Now you can delete engine/movie/title2.asm
SFX_Shooting_Star_Ch5:
- duty_cycle_pattern 3, 2, 1, 0
- pitch_sweep 2, -7
+ duty_cycle 2
+ pitch_sweep 5, -7
square_note 4, 4, 0, 2016
square_note 4, 6, 0, 2016
square_note 4, 8, 0, 2016
square_note 8, 10, 0, 2016
square_note 8, 10, 0, 2016
square_note 8, 8, 0, 2016
square_note 8, 6, 0, 2016
square_note 8, 3, 0, 2016
square_note 15, 1, 2, 2016
pitch_sweep 0, 8
sound_ret