summaryrefslogtreecommitdiff
path: root/engine/menus/intro_menu.asm
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-03-17 15:23:39 -0400
committerentrpntr <entrpntr@gmail.com>2020-03-17 15:23:39 -0400
commitc248b30aa7487b51a9182a833b1db29f14a7267c (patch)
treeea00fee853340ff7a4b2ab2da8cb902105e854f1 /engine/menus/intro_menu.asm
parentd7327a64949c5abb607299184507c89e4c4f1387 (diff)
Cleanup of files for banks $01 and $04 for main.asm.
Diffstat (limited to 'engine/menus/intro_menu.asm')
-rw-r--r--engine/menus/intro_menu.asm1544
1 files changed, 1544 insertions, 0 deletions
diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm
new file mode 100644
index 00000000..2ad9a396
--- /dev/null
+++ b/engine/menus/intro_menu.asm
@@ -0,0 +1,1544 @@
+MainMenu_:
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call DelayFrame
+ ld de, MUSIC_MAIN_MENU
+ ld a, e
+ ld [wMapMusic], a
+ call PlayMusic
+.asm_5a60
+ xor a
+ ld [wDisableTextAcceleration], a
+ call Function5bf7
+ ld b, $8
+ call GetSGBLayout
+ ld hl, wGameTimerPause
+ res 0, [hl]
+ call Function5ae4
+ ld [wWhichIndexSet], a
+ call Function5b27
+ ld hl, .MenuDataHeader
+ call LoadMenuHeader
+ call Function5b0a
+ call CloseWindow
+ jr c, .asm_5a94
+ call ClearTilemap
+ ld a, [wMenuSelection]
+ ld hl, .Jumptable
+ rst JumpTable
+ jr .asm_5a60
+
+.asm_5a94
+ jp StartTitleScreen
+
+.MenuDataHeader:
+ db $40
+ db 00, 00
+ db 07, 14
+ dw .MenuData2
+ db 1
+
+.MenuData2:
+ db $80
+ db 0
+ dw MainMenuItems
+ dw PlaceMenuStrings
+ dw .Strings
+
+.Strings:
+ db "CONTINUE@"
+ db "NEW GAME@"
+ db "OPTION@"
+ db "MYSTERY GIFT@"
+
+.Jumptable:
+ dw MainMenu_Continue ; 5dd9
+ dw MainMenu_NewGame ; 5c1e
+ dw MainMenu_Options ; 5c17
+ dw MainMenu_MysteryGift ; 5c07
+
+CONTINUE EQU 0
+NEW_GAME EQU 1
+OPTION EQU 2
+MYSTERY_GIFT EQU 3
+
+MainMenuItems:
+ db 2
+ db NEW_GAME
+ db OPTION
+ db -1
+
+ db 3
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db -1
+
+ db 4
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db MYSTERY_GIFT
+ db -1
+
+Function5ae4: ; 5ae4 (1:5ae4)
+ nop
+ nop
+ nop
+ ld a, [wSaveFileExists]
+ and a
+ jr nz, .asm_5af0
+ ld a, $0
+ ret
+
+.asm_5af0
+ ldh a, [hCGB]
+ cp $1
+ ld a, $1
+ ret nz
+ ld a, $0
+ call OpenSRAM
+ ld a, [$abe5]
+ cp $ff
+ call CloseSRAM
+ ld a, $1
+ ret z
+ ld a, $2
+ ret
+
+Function5b0a: ; 5b0a (1:5b0a)
+ call SetUpMenu
+.asm_5b0d
+ call Function5b27
+ call GetScrollingMenuJoypad
+ ld a, [wMenuJoypad]
+ cp $2
+ jr z, .asm_5b25
+ cp $1
+ jr z, .asm_5b20
+ jr .asm_5b0d
+
+.asm_5b20
+ call PlayClickSFX
+ and a
+ ret
+
+.asm_5b25
+ scf
+ ret
+
+Function5b27: ; 5b27 (1:5b27)
+ ld a, [wSaveFileExists]
+ and a
+ ret z
+ xor a
+ ldh [hBGMapMode], a
+ call Function5b45
+ ld hl, wOptions
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ call Function5b5b
+ pop af
+ ld [wOptions], a
+ ld a, $1
+ ldh [hBGMapMode], a
+ ret
+
+Function5b45: ; 5b45 (1:5b45)
+ call CheckRTCStatus
+ and $80
+ jr nz, .asm_5b57
+ hlcoord 0, 12
+ ld b, $4
+ ld c, $d
+ call Textbox
+ ret
+
+.asm_5b57
+ call SpeechTextbox
+ ret
+
+Function5b5b: ; 5b5b (1:5b5b)
+ ld a, [wSaveFileExists]
+ and a
+ ret z
+ call CheckRTCStatus
+ and $80
+ jp nz, Function5b9c
+ call UpdateTime
+ hlcoord 1, 13
+ ld bc, IncGradGBPalTable_11 + 1
+ call ClearBox
+ call GetWeekday
+ ld b, a
+ decoord 1, 14
+ call Function5bb8
+ decoord 4, 16
+ ldh a, [hHours]
+ ld c, a
+ farcall PrintHour
+ ld [hl], $9c
+ inc hl
+ ld de, hMinutes
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ret
+
+.min
+ db "min.@"
+
+Function5b9c: ; 5b9c (1:5b9c)
+ hlcoord 1, 14
+ ld de, .TimeNotSet
+ call PlaceString
+ ret
+
+.TimeNotSet
+ db "TIME NOT SET@"
+
+.UnusedText
+ text_far _ClockTimeUnknownText
+ db "@"
+
+Function5bb8: ; 5bb8 (1:5bb8)
+ push de
+ ld hl, .Days
+ ld a, b
+ call GetNthString
+ ld d, h
+ ld e, l
+ pop hl
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, .Day
+ call PlaceString
+ ret
+
+.Days:
+ db "SUN@"
+ db "MON@"
+ db "TUES@"
+ db "WEDNES@"
+ db "THURS@"
+ db "FRI@"
+ db "SATUR@"
+.Day:
+ db "DAY@"
+
+Function5bf7: ; 5bf7 (1:5bf7)
+ xor a
+ ldh [hMapAnims], a
+ call ClearTilemap
+ call LoadFontsExtra
+ call Functiond9e
+ call ClearWindowData
+ ret
+
+MainMenu_MysteryGift:
+ call UpdateTime
+ farcall Function11934
+ farcall Function29dff
+ ret
+
+MainMenu_Options:
+ farcall OptionsMenu
+ ret
+
+MainMenu_NewGame:
+ xor a
+ ld [wDebugFlags], a
+ call Function5c3a
+ call Function5bf7
+ call OakSpeech
+ call InitializeWorld
+ ld a, $0
+ ld [wceec], a
+ ld a, $f1
+ ldh [hMapEntryMethod], a
+ jp FinishContinueFunction
+
+Function5c3a: ; 5c3a (1:5c3a)
+ xor a
+ ldh [hBGMapMode], a
+ call Function5c41
+ ret
+
+Function5c41: ; 5c41 (1:5c41)
+ ld hl, wVirtualOAM
+ ld bc, wOptions - wVirtualOAM
+ xor a
+ call ByteFill
+
+ ld hl, wGameData
+ ld bc, wGameDataEnd - wGameData
+ xor a
+ call ByteFill
+
+ ldh a, [rLY]
+ ldh [hSecondsBackup], a
+ call DelayFrame
+ ldh a, [hRandomSub]
+ ld [wPlayerID], a
+
+ ldh a, [rLY]
+ ldh [hSecondsBackup], a
+ call DelayFrame
+ ldh a, [hRandomAdd]
+ ld [wPlayerID + 1], a
+
+ ld hl, wPartyCount
+ call Function5d15
+
+ xor a
+ ld [wCurBox], a
+ ld [wSavedAtLeastOnce], a
+
+ call Function5d1a
+
+ ld a, BANK(sBoxCount)
+ call OpenSRAM
+ ld hl, sBoxCount
+ call Function5d15
+ call CloseSRAM
+
+ ld hl, wNumItems
+ call Function5d15
+ ld hl, wNumKeyItems
+ call Function5d15
+ ld hl, wNumBalls
+ call Function5d15
+ ld hl, wPCItems
+ call Function5d15
+
+ xor a
+ ld [wRoamMon1Species], a
+ ld [wRoamMon2Species], a
+ ld [wRoamMon3Species], a
+ ld a, $ff
+ ld [wRoamMon1MapGroup], a
+ ld [wRoamMon2MapGroup], a
+ ld [wRoamMon3MapGroup], a
+ ld [wRoamMon1MapNumber], a
+ ld [wRoamMon2MapNumber], a
+ ld [wRoamMon3MapNumber], a
+
+ ld a, BANK(s0_abe2)
+ call OpenSRAM
+ ld hl, s0_abe2
+ xor a
+ ld [hli], a
+ dec a
+ ld [hl], a
+ call CloseSRAM
+
+ call LoadOrRegenerateLuckyIDNumber
+ call InitializeMagikarpHouse
+
+ xor a
+ ld [wMonType], a
+
+ ld [wJohtoBadges], a
+ ld [wKantoBadges], a
+
+ ld [wCoins], a
+ ld [wCoins + 1], a
+
+IF START_MONEY / $10000
+ ld a, START_MONEY / $10000
+ENDC
+ ld [wMoney], a
+ ld a, START_MONEY / $100 % $100
+ ld [wMoney + 1], a
+ ld a, START_MONEY % $100
+ ld [wMoney + 2], a
+
+ xor a
+ ld [wd961], a
+
+ ld hl, wMomItemTriggerBalance
+ ld [hl], 2300 / $10000
+ inc hl
+ ld [hl], 2300 / $100 % $100
+ inc hl
+ ld [hl], 2300 % $100
+
+ call Function5d5d
+
+ farcall InitDecorations
+
+ farcall DeletePartyMonMail
+
+ call ResetGameTime
+ ret
+
+Function5d15: ; 5d15 (1:5d15)
+ xor a
+ ld [hli], a
+ dec a
+ ld [hl], a
+ ret
+
+Function5d1a: ; 5d1a (1:5d1a)
+ ld hl, wBoxNames
+ ld c, $0
+.asm_5d1f
+ push hl
+ ld de, .Box
+ call CopyName2
+ dec hl
+ ld a, c
+ inc a
+ cp 10
+ jr c, .asm_5d32
+ sub 10
+ ld [hl], "1"
+ inc hl
+.asm_5d32
+ add "0"
+ ld [hli], a
+ ld [hl], "@"
+ pop hl
+ ld de, 9
+ add hl, de
+ inc c
+ ld a, c
+ cp NUM_BOXES
+ jr c, .asm_5d1f
+ ret
+
+.Box db "BOX@"
+
+InitializeMagikarpHouse: ; 5d47 (1:5d47)
+ ld hl, wBestMagikarpLengthFeet
+ ld a, 3
+ ld [hli], a
+ ld a, 6
+ ld [hli], a
+ ld de, .Ralph
+ call CopyName2
+ ret
+
+.Ralph db "RALPH@"
+
+Function5d5d: ; 5d5d (1:5d5d)
+ ld hl, .Rival
+ ld de, wRivalName
+ call .CopyName
+ ld hl, .Mom
+ ld de, wMomsName
+ call .CopyName
+ ld hl, .Red
+ ld de, wRedsName
+ call .CopyName
+ ld hl, .Green
+ ld de, wGreensName
+.CopyName:
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
+
+.Rival: db "???@"
+.Red: db "RED@"
+.Green: db "GREEN@"
+.Mom: db "MOM@"
+
+InitializeWorld: ; 5d97 (1:5d97)
+ call ShrinkPlayer
+ farcall SpawnPlayer
+ farcall InitializeStartDay_
+ ret
+
+LoadOrRegenerateLuckyIDNumber: ; 5da7 (1:5da7)
+ ld a, $0
+ call OpenSRAM
+ ld a, [wCurDay]
+ inc a
+ ld b, a
+ ld a, [s0_ac68]
+ cp b
+ ld a, [s0_ac6a]
+ ld c, a
+ ld a, [s0_ac69]
+ jr z, .asm_5dc9
+ ld a, b
+ ld [s0_ac68], a
+ call Random
+ ld c, a
+ call Random
+.asm_5dc9
+ ld [wd9e9], a
+ ld [s0_ac69], a
+ ld a, c
+ ld [wd9ea], a
+ ld [s0_ac6a], a
+ jp CloseSRAM
+
+MainMenu_Continue:
+ farcall TryLoadSaveFile
+ jr c, .asm_5e41
+ call LoadStandardMenuHeader
+ call DisplaySaveInfoOnContinue
+ ld a, $1
+ ldh [hBGMapMode], a
+ ld c, 20
+ call DelayFrames
+ call ConfirmContinue
+ jr nc, .asm_5dfa
+ call CloseWindow
+ jr .asm_5e41
+
+.asm_5dfa
+ call Continue_CheckRTC_RestartClock
+ jr nc, .asm_5e04
+ call CloseWindow
+ jr .asm_5e41
+
+.asm_5e04
+ ld a, $8
+ ld [wMusicFade], a
+ ld a, MUSIC_NONE % $100
+ ld [wMusicFadeID], a
+ ld a, MUSIC_NONE / $100
+ ld [wMusicFadeID + 1], a
+ call ClearBGPalettes
+ call CloseWindow
+ call ClearTilemap
+ ld c, 20
+ call DelayFrames
+ farcall JumpRoamMons
+ farcall MysteryGift_CopyReceivedDecosToPC
+ farcall ClockContinue
+ ld a, [wd1db]
+ cp $1
+ jr z, .asm_5e42
+ ld a, $f2
+ ldh [hMapEntryMethod], a
+ jp FinishContinueFunction
+
+.asm_5e41
+ ret
+
+.asm_5e42
+ ld a, $e
+ ld [wceec], a
+ call PostCreditsSpawn
+ jp FinishContinueFunction
+
+SpawnAfterRed: ; 5e4d (1:5e4d)
+ ld a, $1a
+ ld [wceec], a
+PostCreditsSpawn: ; 5e52 (1:5e52)
+ xor a
+ ld [wd1db], a
+ ld a, $f1
+ ldh [hMapEntryMethod], a
+ ret
+
+ConfirmContinue: ; 5e5b (1:5e5b)
+ call DelayFrame
+ call GetJoypad
+ ld hl, hJoyPressed
+ bit 0, [hl]
+ jr nz, .asm_5e6e
+ bit 1, [hl]
+ jr z, ConfirmContinue
+ scf
+ ret
+
+.asm_5e6e
+ ret
+
+Continue_CheckRTC_RestartClock: ; 5e6f (1:5e6f)
+ call CheckRTCStatus
+ and $80
+ jr z, .asm_5e82
+ ld a, $8
+ ld hl, $4021
+ rst FarCall
+ ld a, c
+ and a
+ jr z, .asm_5e82
+ scf
+ ret
+
+.asm_5e82
+ xor a
+ ret
+
+FinishContinueFunction: ; 5e84 (1:5e84)
+ xor a
+ ld [wDontPlayMapMusicOnReload], a
+ ld hl, wGameTimerPause
+ set 0, [hl]
+ farcall OverworldLoop
+ ld a, [wd1db]
+ cp $2
+ jr z, .asm_5e9d
+ jp Reset
+
+.asm_5e9d
+ call SpawnAfterRed
+ jr FinishContinueFunction
+
+DisplaySaveInfoOnContinue: ; 5ea2 (1:5ea2)
+ call CheckRTCStatus
+ and $80
+ jr z, .asm_5eb0
+ lb de, 4, 8
+ call DisplayContinueDataWithRTCError
+ ret
+
+.asm_5eb0
+ lb de, 4, 8
+ call DisplayNormalContinueData
+ ret
+
+DisplayNormalContinueData: ; 5eb7 (1:5eb7)
+ call Continue_LoadMenuHeader
+ call Continue_DisplayBadgesDex
+ call Continue_PrintGameTime
+ call LoadFontsExtra
+ call UpdateSprites
+ ret
+
+DisplayContinueDataWithRTCError: ; 5ec7 (1:5ec7)
+ call Continue_LoadMenuHeader
+ call Continue_DisplayBadgesDex
+ call Continue_UnknownGameTime
+ call LoadFontsExtra
+ call UpdateSprites
+ ret
+
+Continue_LoadMenuHeader: ; 5ed7 (1:5ed7)
+ xor a
+ ldh [hBGMapMode], a
+ ld hl, .MenuDataHeader_Dex
+ CheckFlag ENGINE_POKEDEX
+ jr nz, .asm_5ee7
+ ld hl, .MenuDataHeader_NoDex
+.asm_5ee7
+ call _OffsetMenuHeader
+ call MenuBox
+ call PlaceVerticalMenuItems
+ ret
+
+.MenuDataHeader_Dex:
+ db $40
+ db 00, 00
+ db 09, 15
+ dw .MenuData2_Dex
+ db 1
+
+.MenuData2_Dex
+ db $00
+ db 4
+ db "PLAYER <PLAYER>@"
+ db "BADGES@"
+ db "#DEX@"
+ db "TIME@"
+
+.MenuDataHeader_NoDex:
+ db $40
+ db 00, 00
+ db 09, 15
+ dw .MenuData2_NoDex
+ db 1
+
+.MenuData2_NoDex
+ db $00
+ db 4
+ db "PLAYER <PLAYER>@"
+ db "BADGES@"
+ db " @"
+ db "TIME@"
+
+Continue_DisplayBadgesDex: ; 5f36 (1:5f36)
+ call MenuBoxCoord2Tile
+ push hl
+ decoord 13, 4, 0
+ add hl, de
+ call Continue_DisplayBadgeCount
+ pop hl
+ push hl
+ decoord 12, 6, 0
+ add hl, de
+ call Continue_DisplayPokedexNumCaught
+ pop hl
+ ret
+
+Continue_PrintGameTime: ; 5f4c (1:5f4c)
+ decoord 9, 8, 0
+ add hl, de
+ call Continue_DisplayGameTime
+ ret
+
+Continue_UnknownGameTime: ; 5f54 (1:5f54)
+ decoord 9, 8, 0
+ add hl, de
+ ld de, .three_question_marks
+ call PlaceString
+ ret
+
+.three_question_marks
+ db " ???@"
+
+Continue_DisplayBadgeCount: ; 5f64 (1:5f64)
+ push hl
+ ld hl, wJohtoBadges
+ ld b, $2
+ call CountSetBits
+ pop hl
+ ld de, wd151
+ lb bc, 1, 2
+ jp PrintNum
+
+Continue_DisplayPokedexNumCaught: ; 5f77 (1:5f77)
+ CheckFlag ENGINE_POKEDEX
+ ret z
+ push hl
+ ld hl, wPokedexCaught
+IF NUM_POKEMON % 8
+ ld b, NUM_POKEMON / 8 + 1
+ELSE
+ ld b, NUM_POKEMON / 8
+ENDC
+ call CountSetBits
+ pop hl
+ ld de, wd151
+ lb bc, 1, 3
+ jp PrintNum
+
+Continue_DisplayGameTime: ; 5f90 (1:5f90)
+ ld de, wGameTimeHours
+ lb bc, 2, 3
+ call PrintNum
+ ld [hl], $6d
+ inc hl
+ ld de, wGameTimeMinutes
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ jp PrintNum
+
+OakSpeech: ; 5fa5 (1:5fa5)
+ farcall InitClock ; What time is it?
+
+ call RotateFourPalettesLeft
+ call ClearTilemap
+
+ ld de, MUSIC_ROUTE_30
+ call PlayMusic
+
+ call RotateFourPalettesRight
+ call RotateThreePalettesRight
+
+ xor a
+ ld [wCurPartySpecies], a
+ ld a, POKEMON_PROF
+ ld [wTrainerClass], a
+ call Intro_PrepTrainerPic
+
+ ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
+ call GetSGBLayout
+
+ call Intro_FadeInFrontpic
+
+ ld hl, OakText1
+ call PrintText
+
+ call RotateThreePalettesRight
+ call ClearTilemap
+
+ ld a, MARILL
+ ld [wCurSpecies], a
+ ld [wCurPartySpecies], a
+ call GetBaseData
+ hlcoord 6, 4
+ hlcoord 6, 4 ; TriHard
+ call PrepMonFrontpic
+
+ xor a
+ ld [wTempMonDVs], a
+ ld [wTempMonDVs + 1], a
+ ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
+ call GetSGBLayout
+
+ call Intro_WipeInFrontpic
+
+ ld hl, OakText2
+ call PrintText
+
+ ld hl, OakText4
+ call PrintText
+
+ call RotateThreePalettesRight
+ call ClearTilemap
+
+ xor a
+ ld [wCurPartySpecies], a
+ ld a, POKEMON_PROF
+ ld [wTrainerClass], a
+ call Intro_PrepTrainerPic
+
+ ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
+ call GetSGBLayout
+
+ call Intro_FadeInFrontpic
+
+ ld hl, OakText5
+ call PrintText
+
+ call RotateThreePalettesRight
+ call ClearTilemap
+
+ xor a
+ ld [wCurPartySpecies], a
+ ld a, CAL
+ ld [wTrainerClass], a
+ call Intro_PrepTrainerPic
+
+ ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
+ call GetSGBLayout
+
+ call Intro_FadeInFrontpic
+
+ ld hl, OakText6
+ call PrintText
+
+ call NamePlayer
+
+ ld hl, OakText7
+ call PrintText
+ ret
+
+OakText1:
+ text_far _OakText1
+ db "@"
+
+OakText2:
+ text_far _OakText2
+ text_asm
+ ld a, MARILL
+ call PlayMonCry
+ call WaitSFX
+ ld hl, OakText3 ; $606c
+ ret
+
+OakText3:
+ text_far _OakText3
+ db "@"
+
+OakText4:
+ text_far _OakText4
+ db "@"
+
+OakText5:
+ text_far _OakText5
+ db "@"
+
+OakText6:
+ text_far _OakText6
+ db "@"
+
+OakText7:
+ text_far _OakText7
+ db "@"
+
+NamePlayer: ; 6085 (1:6085)
+ call MovePlayerPicRight
+ ld hl, .PlayerNamingChoices ; $60d9
+ call SelectPresetName
+ ld a, [wMenuCursorY]
+ dec a
+ jr z, .NewName
+ ld de, wPlayerName
+ call StorePlayerName
+ farcall ApplyMonOrTrainerPals
+ call MovePlayerPicLeft
+ ret
+
+.NewName
+ ld b, $1
+ ld de, wPlayerName
+ farcall NamingScreen
+ call RotateThreePalettesRight
+ call ClearTilemap
+ call LoadFontsExtra
+ call WaitBGMap
+ xor a
+ ld [wCurPartySpecies], a
+ ld a, CAL
+ ld [wTrainerClass], a
+ call Intro_PrepTrainerPic
+ ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
+ call GetSGBLayout
+ call RotateThreePalettesLeft
+ ld hl, wPlayerName
+ ld de, .GoldSilver
+ call InitName
+ ret
+
+.PlayerNamingChoices:
+ db $40
+ db 00, 00
+ db 11, 10
+ dw .MenuData2
+ db 1
+
+.MenuData2:
+ db $91
+ db 5
+ db "NEW NAME@"
+.GoldSilver:
+IF DEF(GOLD)
+ db "GOLD@"
+ db "HIRO@"
+ db "TAYLOR@"
+ db "KARL@"
+ENDC
+IF DEF(SILVER)
+ db "SILVER@"
+ db "KAMON@"
+ db "OSCAR@"
+ db "MAX@"
+ENDC
+ db 2, "NAME@"
+
+SelectPresetName: ; 6108 (1:6108)
+ call LoadMenuHeader
+ call VerticalMenu
+ ld a, [wMenuCursorY]
+ dec a
+ call CopyNameFromMenu
+ call CloseWindow
+ ret
+
+StorePlayerName: ; 6119 (1:6119)
+ ld hl, wStringBuffer2
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
+
+ShrinkPlayer: ; 6123 (1:6123)
+ ldh a, [hROMBank]
+ push af
+
+ ld a, 0 << 7 | 32 ; fade out
+ ld [wMusicFade], a
+ ld de, MUSIC_NONE
+ ld a, e
+ ld [wMusicFadeID], a
+ ld a, d
+ ld [wMusicFadeID + 1], a
+
+ ld de, SFX_ESCAPE_ROPE
+ call PlaySFX
+ pop af
+ rst Bankswitch
+
+ ld c, 8
+ call DelayFrames
+
+ ld hl, Shrink1Pic
+ ld b, BANK(Shrink1Pic)
+ call ShrinkFrame
+
+ ld c, 8
+ call DelayFrames
+
+ ld hl, Shrink2Pic
+ ld b, BANK(Shrink2Pic)
+ call ShrinkFrame
+
+ ld c, 8
+ call DelayFrames
+
+ hlcoord 6, 5
+ ld b, 7
+ ld c, 7
+ call ClearBox
+
+ ld c, 3
+ call DelayFrames
+
+ call Intro_PlacePlayerSprite
+ call LoadFontsExtra
+
+ ld c, 50
+ call DelayFrames
+
+ call RotateThreePalettesRight
+ call ClearTilemap
+ ret
+
+MovePlayerPicRight: ; 617e (1:617e)
+ hlcoord 6, 4
+ ld de, $1
+ jr MovePlayerPic
+
+MovePlayerPicLeft: ; 6186 (1:6186)
+ hlcoord 13, 4
+ ld de, -1
+MovePlayerPic
+ ld c, $8
+.asm_618e
+ push bc
+ push hl
+ push de
+ xor a
+ ldh [hBGMapMode], a
+ lb bc, 7, 7
+ predef PlaceGraphic
+ xor a
+ ldh [hBGMapThird], a
+ call WaitBGMap
+ call DelayFrame
+ pop de
+ pop hl
+ add hl, de
+ pop bc
+ dec c
+ jr nz, .asm_618e
+ ret
+
+Intro_FadeInFrontpic: ; 61ad (1:61ad)
+ ld hl, IntroFadePalettes
+ ld b, $6
+.asm_61b2
+ ld a, [hli]
+ call DmgToCgbBGPals
+ ld c, $a
+ call DelayFrames
+ dec b
+ jr nz, .asm_61b2
+ ret
+
+IntroFadePalettes:
+ db %01010100
+ db %10101000
+ db %11111100
+ db %11111000
+ db %11110100
+ db %11100100
+
+Intro_WipeInFrontpic: ; 61c5 (1:61c5)
+ ld a, $77
+ ldh [hWX], a
+ call DelayFrame
+ ld a, $e4
+ call DmgToCgbBGPals
+.asm_61d1
+ call DelayFrame
+ ldh a, [hWX]
+ sub $8
+ cp $ff
+ ret z
+ ldh [hWX], a
+ jr .asm_61d1
+
+Intro_PrepTrainerPic: ; 61df, 61e0 (1:61df, 1:61e0)
+ ld de, $9000
+ ld a, $14
+ ld hl, $58a0
+ rst FarCall
+ xor a
+ ldh [hGraphicStartTile], a
+ hlcoord 6, 4
+ lb bc, 7, 7
+ predef PlaceGraphic
+ ret
+
+ShrinkFrame: ; 61f7 (1:61f7)
+ ld de, $9000
+ ld c, $31
+ predef DecompressGet2bpp
+ xor a
+ ldh [hGraphicStartTile], a
+ hlcoord 6, 4
+ lb bc, 7, 7
+ predef PlaceGraphic
+ ret
+
+Intro_PlacePlayerSprite: ; 6210 (1:6210)
+ ld de, PlayerSpriteGFX
+ lb bc, BANK(PlayerSpriteGFX), 12
+ ld hl, $8000
+ call Request2bpp
+ ld hl, wVirtualOAM
+ ld de, .OAMData
+ ld a, [de]
+ inc de
+ ld c, a
+.asm_6225
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ xor a
+ ld [hli], a
+ dec c
+ jr nz, .asm_6225
+ ret
+
+.OAMData
+ db 4
+ db 9 * 8 + 4, 9 * 8, 0
+ db 9 * 8 + 4, 10 * 8, 1
+ db 10 * 8 + 4, 9 * 8, 2
+ db 10 * 8 + 4, 10 * 8, 3
+
+IntroSequence: ; 6241 (1:6241)
+ callfar Copyright_GFPresents
+ jr c, StartTitleScreen
+ callfar 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
+ ldh [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
+ ldh [hBGMapMode], a
+ ldh [hMapAnims], a
+ ldh [hSCY], a
+ ldh [hSCX], a
+ ld hl, $8000
+ ld bc, $2000
+ xor a
+ call ByteFill
+ farcall 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 InitSpriteAnimStruct
+ 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
+ ldh [hLCDCPointer], a
+ ld b, $c
+ call GetSGBLayout
+ call Function6341
+ ld de, MUSIC_TITLE
+ call PlayMusic
+ ret
+
+Function6341: ; 6341 (1:6341)
+ ldh a, [hCGB]
+ and a
+ jr nz, .asm_6365
+ ldh a, [hSGB]
+ and a
+ jr nz, .asm_6358
+ ld a, $d8
+ ldh [rBGP], a
+IF DEF(GOLD)
+ ld a, $ff
+ ldh [rOBP0], a
+ ld a, $f8
+ENDC
+IF DEF(SILVER)
+ ld a, $f0
+ ldh [rOBP0], a
+ ld a, $f0
+ENDC
+ ldh [rOBP1], a
+ ret
+
+.asm_6358
+ ld a, $e4
+ ldh [rBGP], a
+IF DEF(GOLD)
+ ld a, $ff
+ ldh [rOBP0], a
+ ld a, $e4
+ENDC
+IF DEF(SILVER)
+ ld a, $f0
+ ldh [rOBP0], a
+ ld a, $e0
+ENDC
+ ldh [rOBP1], a
+ ret
+
+.asm_6365
+ ld a, $e4
+ call DmgToCgbBGPals
+IF DEF(SILVER)
+ ld a, $e0
+ENDC
+ call DmgToCgbObjPal0
+ ret
+
+Function636e: ; 636e (1:636e)
+ ldh a, [hCGB]
+ and a
+ ret z
+ ld a, $1
+ ldh [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
+ ldh [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
+ ldh 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
+ ldh [hOAMUpdate], a
+ farcall AnimatedObjects_PlayFrame
+ xor a
+ ldh [hOAMUpdate], a
+ call Function64b1
+ call DelayFrame
+ and a
+ ret
+
+.asm_63fc
+ scf
+ ret
+
+Function63fe: ; 63fe (1:63fe)
+IF DEF(GOLD)
+ ldh 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 [wMusicFadeID], a
+ ld [wMusicFadeID + 1], 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:
+ farcall DeleteSaveData_
+ jp Init
+
+ResetClock:
+ farcall 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 InitSpriteAnimStruct
+ 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, CopyrightGFX
+ ld hl, vTiles2 tile $60
+ lb bc, BANK(CopyrightGFX), 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