pokecrystal-board/engine/intro_menu.asm

1419 lines
21 KiB
NASM
Raw Normal View History

2015-11-20 08:47:52 -08:00
_MainMenu: ; 5ae8
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
ld de, MUSIC_MAIN_MENU
ld a, e
ld [wMapMusic], a
call PlayMusic
2017-12-24 09:47:30 -08:00
farcall MainMenu
2015-12-02 14:59:05 -08:00
jp StartTitleScreen
2015-11-20 08:47:52 -08:00
; 5b04
2018-01-02 07:04:21 -08:00
; unused
2015-11-20 08:47:52 -08:00
ret
; 5b05
PrintDayOfWeek: ; 5b05
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
; 5b1c
.Days: ; 5b1c
2015-11-20 08:47:52 -08:00
db "SUN@"
db "MON@"
db "TUES@"
db "WEDNES@"
db "THURS@"
db "FRI@"
db "SATUR@"
; 5b40
.Day: ; 5b40
2015-11-20 08:47:52 -08:00
db "DAY@"
; 5b44
NewGame_ClearTileMapEtc: ; 5b44
xor a
ld [hMapAnims], a
call ClearTileMap
call LoadFontsExtra
call LoadStandardFont
call ClearWindowData
2015-11-20 08:47:52 -08:00
ret
; 5b54
MysteryGift: ; 5b54
call UpdateTime
2017-12-24 09:47:30 -08:00
farcall DoMysteryGiftIfDayHasPassed
farcall DoMysteryGift
2015-11-20 08:47:52 -08:00
ret
; 5b64
OptionsMenu: ; 5b64
2017-12-24 09:47:30 -08:00
farcall _OptionsMenu
2015-11-20 08:47:52 -08:00
ret
; 5b6b
NewGame: ; 5b6b
xor a
ld [wMonStatusFlags], a
2015-11-20 08:47:52 -08:00
call ResetWRAM
call NewGame_ClearTileMapEtc
call AreYouABoyOrAreYouAGirl
call OakSpeech
call InitializeWorld
ld a, 1
ld [wPreviousLandmark], a
ld a, SPAWN_HOME
ld [DefaultSpawnpoint], a
ld a, MAPSETUP_WARP
ld [hMapEntryMethod], a
jp FinishContinueFunction
; 5b8f
AreYouABoyOrAreYouAGirl: ; 5b8f
2017-12-24 09:47:30 -08:00
farcall Mobile_AlwaysReturnNotCarry ; some mobile stuff
2015-11-20 08:47:52 -08:00
jr c, .ok
2017-12-24 09:47:30 -08:00
farcall InitGender
2015-11-20 08:47:52 -08:00
ret
.ok
ld c, 0
2017-12-24 09:47:30 -08:00
farcall InitMobileProfile ; mobile
2015-11-20 08:47:52 -08:00
ret
; 5ba7
ResetWRAM: ; 5ba7
xor a
ld [hBGMapMode], a
call _ResetWRAM
ret
; 5bae
_ResetWRAM: ; 5bae
ld hl, Sprites
ld bc, Options - Sprites
xor a
call ByteFill
ld hl, WRAM1_Begin
ld bc, wGameData - WRAM1_Begin
2015-11-20 08:47:52 -08:00
xor a
call ByteFill
ld hl, wGameData
ld bc, wGameDataEnd - wGameData
xor a
call ByteFill
ld a, [rLY]
ld [hSecondsBackup], a
call DelayFrame
ld a, [hRandomSub]
ld [PlayerID], a
ld a, [rLY]
ld [hSecondsBackup], a
call DelayFrame
ld a, [hRandomAdd]
ld [PlayerID + 1], a
call Random
ld [wSecretID], a
call DelayFrame
call Random
ld [wSecretID + 1], a
ld hl, PartyCount
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
xor a
ld [wCurBox], a
ld [wSavedAtLeastOnce], a
call SetDefaultBoxNames
ld a, BANK(sBoxCount)
call GetSRAMBank
ld hl, sBoxCount
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
call CloseSRAM
ld hl, NumItems
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
ld hl, NumKeyItems
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
ld hl, NumBalls
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
ld hl, PCItems
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
xor a
ld [wRoamMon1Species], a
ld [wRoamMon2Species], a
ld [wRoamMon3Species], a
ld a, -1
ld [wRoamMon1MapGroup], a
ld [wRoamMon2MapGroup], a
ld [wRoamMon3MapGroup], a
ld [wRoamMon1MapNumber], a
ld [wRoamMon2MapNumber], a
ld [wRoamMon3MapNumber], a
ld a, BANK(sMysteryGiftItem)
call GetSRAMBank
ld hl, sMysteryGiftItem
xor a
ld [hli], a
dec a
ld [hl], a
call CloseSRAM
call LoadOrRegenerateLuckyIDNumber
call InitializeMagikarpHouse
xor a
ld [MonType], a
ld [wJohtoBadges], a
ld [wKantoBadges], a
2015-11-20 08:47:52 -08:00
ld [Coins], a
ld [Coins + 1], a
if START_MONEY >= $10000
ld a, HIGH(START_MONEY >> 8)
endc
2015-11-20 08:47:52 -08:00
ld [Money], a
ld a, HIGH(START_MONEY) ; mid
2015-11-20 08:47:52 -08:00
ld [Money + 1], a
ld a, LOW(START_MONEY)
2015-11-20 08:47:52 -08:00
ld [Money + 2], a
xor a
ld [wWhichMomItem], a
2015-11-20 08:47:52 -08:00
ld hl, MomItemTriggerBalance
ld [hl], HIGH(MOM_MONEY >> 8)
2015-11-20 08:47:52 -08:00
inc hl
ld [hl], HIGH(MOM_MONEY) ; mid
2015-11-20 08:47:52 -08:00
inc hl
ld [hl], LOW(MOM_MONEY)
2015-11-20 08:47:52 -08:00
call InitializeNPCNames
2017-12-24 09:47:30 -08:00
farcall InitDecorations
2015-11-20 08:47:52 -08:00
2017-12-24 09:47:30 -08:00
farcall DeletePartyMonMail
2015-11-20 08:47:52 -08:00
2017-12-24 09:47:30 -08:00
farcall DeleteMobileEventIndex
2015-11-20 08:47:52 -08:00
call ResetGameTime
ret
; 5ca1
2016-06-13 19:53:33 -07:00
.InitList: ; 5ca1
2015-11-20 08:47:52 -08:00
; Loads 0 in the count and -1 in the first item or mon slot.
xor a
ld [hli], a
dec a
ld [hl], a
ret
; 5ca6
SetDefaultBoxNames: ; 5ca6
ld hl, wBoxNames
ld c, 0
.loop
push hl
ld de, .Box
call CopyName2
dec hl
ld a, c
inc a
cp 10
jr c, .less
sub 10
ld [hl], "1"
inc hl
.less
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, .loop
ret
.Box:
2015-11-20 08:47:52 -08:00
db "BOX@"
; 5cd3
InitializeMagikarpHouse: ; 5cd3
ld hl, wBestMagikarpLengthFeet
ld a, $3
ld [hli], a
ld a, $6
ld [hli], a
ld de, .Ralph
call CopyName2
ret
; 5ce3
.Ralph: ; 5ce3
2015-11-20 08:47:52 -08:00
db "RALPH@"
; 5ce9
InitializeNPCNames: ; 5ce9
ld hl, .Rival
ld de, RivalName
call .Copy
ld hl, .Mom
ld de, MomsName
call .Copy
ld hl, .Red
ld de, RedsName
call .Copy
ld hl, .Green
ld de, GreensName
.Copy:
2015-11-20 08:47:52 -08:00
ld bc, NAME_LENGTH
call CopyBytes
ret
.Rival: db "???@"
.Red: db "RED@"
.Green: db "GREEN@"
.Mom: db "MOM@"
2015-11-20 08:47:52 -08:00
; 5d23
InitializeWorld: ; 5d23
call ShrinkPlayer
2017-12-24 09:47:30 -08:00
farcall SpawnPlayer
farcall _InitializeStartDay
2015-11-20 08:47:52 -08:00
ret
; 5d33
LoadOrRegenerateLuckyIDNumber: ; 5d33
ld a, BANK(sLuckyIDNumber)
call GetSRAMBank
ld a, [CurDay]
inc a
ld b, a
ld a, [sLuckyNumberDay]
cp b
ld a, [sLuckyIDNumber + 1]
ld c, a
ld a, [sLuckyIDNumber]
jr z, .skip
ld a, b
ld [sLuckyNumberDay], a
call Random
ld c, a
call Random
.skip
ld [wLuckyIDNumber], a
ld [sLuckyIDNumber], a
ld a, c
ld [wLuckyIDNumber + 1], a
ld [sLuckyIDNumber + 1], a
jp CloseSRAM
; 5d65
Continue: ; 5d65
2017-12-24 09:47:30 -08:00
farcall TryLoadSaveFile
2015-11-20 08:47:52 -08:00
jr c, .FailToLoad
2017-12-24 09:47:30 -08:00
farcall _LoadData
2015-11-20 08:47:52 -08:00
call LoadStandardMenuDataHeader
call DisplaySaveInfoOnContinue
ld a, $1
ld [hBGMapMode], a
ld c, 20
call DelayFrames
call ConfirmContinue
jr nc, .Check1Pass
call CloseWindow
2015-11-20 08:47:52 -08:00
jr .FailToLoad
.Check1Pass:
2015-11-20 08:47:52 -08:00
call Continue_CheckRTC_RestartClock
jr nc, .Check2Pass
call CloseWindow
2015-11-20 08:47:52 -08:00
jr .FailToLoad
.Check2Pass:
2015-11-20 08:47:52 -08:00
ld a, $8
ld [MusicFade], a
ld a, LOW(MUSIC_NONE)
ld [MusicFadeID], a
ld a, HIGH(MUSIC_NONE)
ld [MusicFadeID + 1], a
2015-11-20 08:47:52 -08:00
call ClearBGPalettes
call Continue_MobileAdapterMenu
call CloseWindow
2015-11-20 08:47:52 -08:00
call ClearTileMap
ld c, 20
call DelayFrames
2017-12-24 09:47:30 -08:00
farcall JumpRoamMons
farcall MysteryGift_CopyReceivedDecosToPC ; Mystery Gift
farcall Function140ae ; time-related
2015-11-20 08:47:52 -08:00
ld a, [wSpawnAfterChampion]
cp SPAWN_LANCE
jr z, .SpawnAfterE4
ld a, MAPSETUP_CONTINUE
ld [hMapEntryMethod], a
jp FinishContinueFunction
.FailToLoad:
2015-11-20 08:47:52 -08:00
ret
.SpawnAfterE4:
2015-11-20 08:47:52 -08:00
ld a, SPAWN_NEW_BARK
ld [DefaultSpawnpoint], a
2015-11-20 08:47:52 -08:00
call PostCreditsSpawn
jp FinishContinueFunction
; 5de2
SpawnAfterRed: ; 5de2
ld a, SPAWN_MT_SILVER
ld [DefaultSpawnpoint], a
2015-11-20 08:47:52 -08:00
; 5de7
PostCreditsSpawn: ; 5de7
xor a
ld [wSpawnAfterChampion], a
ld a, MAPSETUP_WARP
ld [hMapEntryMethod], a
ret
; 5df0
Continue_MobileAdapterMenu: ; 5df0
2017-12-24 09:47:30 -08:00
farcall Mobile_AlwaysReturnNotCarry ; mobile check
2015-11-20 08:47:52 -08:00
ret nc
; the rest of this stuff is never reached because
; the previous function returns with carry not set
2015-11-20 08:47:52 -08:00
ld hl, wd479
bit 1, [hl]
ret nz
ld a, 5
ld [MusicFade], a
ld a, LOW(MUSIC_MOBILE_ADAPTER_MENU)
ld [MusicFadeID], a
ld a, HIGH(MUSIC_MOBILE_ADAPTER_MENU)
ld [MusicFadeID + 1], a
2015-11-20 08:47:52 -08:00
ld c, 20
call DelayFrames
ld c, $1
2017-12-24 09:47:30 -08:00
farcall InitMobileProfile ; mobile
farcall _SaveData
2015-11-20 08:47:52 -08:00
ld a, 8
ld [MusicFade], a
ld a, LOW(MUSIC_NONE)
ld [MusicFadeID], a
ld a, HIGH(MUSIC_NONE)
ld [MusicFadeID + 1], a
2015-11-20 08:47:52 -08:00
ld c, 35
call DelayFrames
ret
; 5e34
ConfirmContinue: ; 5e34
.loop
call DelayFrame
call GetJoypad
ld hl, hJoyPressed
2015-12-04 05:46:11 -08:00
bit A_BUTTON_F, [hl]
2015-11-20 08:47:52 -08:00
jr nz, .PressA
2015-12-04 05:46:11 -08:00
bit B_BUTTON_F, [hl]
2015-11-20 08:47:52 -08:00
jr z, .loop
scf
ret
.PressA:
2015-11-20 08:47:52 -08:00
ret
; 5e48
Continue_CheckRTC_RestartClock: ; 5e48
call CheckRTCStatus
and %10000000 ; Day count exceeded 16383
jr z, .pass
2017-12-24 09:47:30 -08:00
farcall RestartClock
2015-11-20 08:47:52 -08:00
ld a, c
and a
jr z, .pass
scf
ret
.pass
xor a
ret
; 5e5d
FinishContinueFunction: ; 5e5d
.loop
xor a
ld [wDontPlayMapMusicOnReload], a
2015-11-20 08:47:52 -08:00
ld [wLinkMode], a
ld hl, wGameTimerPause
2015-11-20 08:47:52 -08:00
set 0, [hl]
res 7, [hl]
ld hl, wEnteredMapFromContinue
set 1, [hl]
2017-12-24 09:47:30 -08:00
farcall OverworldLoop
2015-11-20 08:47:52 -08:00
ld a, [wSpawnAfterChampion]
cp SPAWN_RED
jr z, .AfterRed
jp Reset
.AfterRed:
2015-11-20 08:47:52 -08:00
call SpawnAfterRed
jr .loop
; 5e85
DisplaySaveInfoOnContinue: ; 5e85
call CheckRTCStatus
and %10000000
jr z, .clock_ok
lb de, 4, 8
call DisplayContinueDataWithRTCError
ret
.clock_ok
lb de, 4, 8
call DisplayNormalContinueData
ret
; 5e9a
DisplaySaveInfoOnSave: ; 5e9a
lb de, 4, 0
jr DisplayNormalContinueData
; 5e9f
DisplayNormalContinueData: ; 5e9f
call Continue_LoadMenuHeader
call Continue_DisplayBadgesDexPlayerName
call Continue_PrintGameTime
call LoadFontsExtra
call UpdateSprites
ret
; 5eaf
DisplayContinueDataWithRTCError: ; 5eaf
call Continue_LoadMenuHeader
call Continue_DisplayBadgesDexPlayerName
call Continue_UnknownGameTime
call LoadFontsExtra
call UpdateSprites
ret
; 5ebf
Continue_LoadMenuHeader: ; 5ebf
xor a
ld [hBGMapMode], a
ld hl, .MenuDataHeader_Dex
ld a, [wStatusFlags]
2015-11-20 08:47:52 -08:00
bit 0, a ; pokedex
jr nz, .show_menu
2015-11-20 08:47:52 -08:00
ld hl, .MenuDataHeader_NoDex
.show_menu
2015-12-17 19:31:16 -08:00
call _OffsetMenuDataHeader
2015-11-20 08:47:52 -08:00
call MenuBox
2015-12-15 15:59:49 -08:00
call PlaceVerticalMenuItems
2015-11-20 08:47:52 -08:00
ret
; 5ed9
.MenuDataHeader_Dex: ; 5ed9
db MENU_BACKUP_TILES ; flags
menu_coords 0, 0, 15, 9
2015-11-20 08:47:52 -08:00
dw .MenuData2_Dex
db 1 ; default option
; 5ee1
.MenuData2_Dex: ; 5ee1
db 0 ; flags
2015-11-20 08:47:52 -08:00
db 4 ; items
db "PLAYER@"
db "BADGES@"
db "#DEX@"
db "TIME@"
; 5efb
.MenuDataHeader_NoDex: ; 5efb
db MENU_BACKUP_TILES ; flags
menu_coords 0, 0, 15, 9
2015-11-20 08:47:52 -08:00
dw .MenuData2_NoDex
db 1 ; default option
; 5f03
.MenuData2_NoDex: ; 5f03
db 0 ; flags
2015-11-20 08:47:52 -08:00
db 4 ; items
db "PLAYER <PLAYER>@"
db "BADGES@"
db " @"
db "TIME@"
; 5f1c
Continue_DisplayBadgesDexPlayerName: ; 5f1c
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
push hl
decoord 8, 2, 0
add hl, de
ld de, .Player
call PlaceString
pop hl
ret
.Player:
2015-11-20 08:47:52 -08:00
db "<PLAYER>@"
; 5f40
Continue_PrintGameTime: ; 5f40
decoord 9, 8, 0
add hl, de
call Continue_DisplayGameTime
ret
; 5f48
Continue_UnknownGameTime: ; 5f48
decoord 9, 8, 0
add hl, de
ld de, .three_question_marks
call PlaceString
ret
.three_question_marks
db " ???@"
; 5f58
Continue_DisplayBadgeCount: ; 5f58
push hl
ld hl, wJohtoBadges
2015-11-20 08:47:52 -08:00
ld b, 2
call CountSetBits
pop hl
ld de, wd265
lb bc, 1, 2
jp PrintNum
; 5f6b
Continue_DisplayPokedexNumCaught: ; 5f6b
ld a, [wStatusFlags]
bit 0, a ; Pokedex
2015-11-20 08:47:52 -08:00
ret z
push hl
ld hl, PokedexCaught
if NUM_POKEMON % 8
2015-11-20 08:47:52 -08:00
ld b, NUM_POKEMON / 8 + 1
else
2015-11-20 08:47:52 -08:00
ld b, NUM_POKEMON / 8
endc
2015-11-20 08:47:52 -08:00
call CountSetBits
pop hl
ld de, wd265
lb bc, 1, 3
jp PrintNum
; 5f84
Continue_DisplayGameTime: ; 5f84
ld de, GameTimeHours
lb bc, 2, 3
call PrintNum
ld [hl], "<COLON>"
inc hl
ld de, GameTimeMinutes
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
jp PrintNum
; 5f99
OakSpeech: ; 0x5f99
2017-12-24 09:47:30 -08:00
farcall InitClock
2015-11-20 08:47:52 -08:00
call RotateFourPalettesLeft
call ClearTileMap
ld de, MUSIC_ROUTE_30
call PlayMusic
call RotateFourPalettesRight
call RotateThreePalettesRight
xor a
ld [CurPartySpecies], a
ld a, POKEMON_PROF
ld [TrainerClass], a
call Intro_PrepTrainerPic
ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
2015-11-20 08:47:52 -08:00
call GetSGBLayout
call Intro_RotatePalettesLeftFrontpic
ld hl, OakText1
call PrintText
call RotateThreePalettesRight
call ClearTileMap
ld a, WOOPER
ld [CurSpecies], a
ld [CurPartySpecies], a
call GetBaseData
hlcoord 6, 4
call PrepMonFrontpic
xor a
ld [TempMonDVs], a
ld [TempMonDVs + 1], a
ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
2015-11-20 08:47:52 -08:00
call GetSGBLayout
call Intro_WipeInFrontpic
ld hl, OakText2
call PrintText
ld hl, OakText4
call PrintText
call RotateThreePalettesRight
call ClearTileMap
xor a
ld [CurPartySpecies], a
ld a, POKEMON_PROF
ld [TrainerClass], a
call Intro_PrepTrainerPic
ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
2015-11-20 08:47:52 -08:00
call GetSGBLayout
call Intro_RotatePalettesLeftFrontpic
ld hl, OakText5
call PrintText
call RotateThreePalettesRight
call ClearTileMap
xor a
ld [CurPartySpecies], a
2017-12-24 09:47:30 -08:00
farcall DrawIntroPlayerPic
2015-11-20 08:47:52 -08:00
ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
2015-11-20 08:47:52 -08:00
call GetSGBLayout
call Intro_RotatePalettesLeftFrontpic
ld hl, OakText6
call PrintText
call NamePlayer
ld hl, OakText7
call PrintText
ret
OakText1: ; 0x6045
text_jump _OakText1
db "@"
OakText2: ; 0x604a
text_jump _OakText2
start_asm
ld a, WOOPER
call PlayMonCry
2015-11-20 08:47:52 -08:00
call WaitSFX
ld hl, OakText3
ret
OakText3: ; 0x605b
text_jump _OakText3
db "@"
OakText4: ; 0x6060
text_jump _OakText4
db "@"
OakText5: ; 0x6065
text_jump _OakText5
db "@"
OakText6: ; 0x606a
text_jump _OakText6
db "@"
OakText7: ; 0x606f
text_jump _OakText7
db "@"
NamePlayer: ; 0x6074
2017-12-24 09:47:30 -08:00
farcall MovePlayerPicRight
farcall ShowPlayerNamingChoices
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-11-20 08:47:52 -08:00
dec a
jr z, .NewName
call StorePlayerName
2017-12-24 09:47:30 -08:00
farcall ApplyMonOrTrainerPals
farcall MovePlayerPicLeft
2015-11-20 08:47:52 -08:00
ret
.NewName:
2015-11-20 08:47:52 -08:00
ld b, 1
ld de, PlayerName
2017-12-24 09:47:30 -08:00
farcall NamingScreen
2015-11-20 08:47:52 -08:00
call RotateThreePalettesRight
call ClearTileMap
call LoadFontsExtra
call WaitBGMap
xor a
ld [CurPartySpecies], a
2017-12-24 09:47:30 -08:00
farcall DrawIntroPlayerPic
2015-11-20 08:47:52 -08:00
ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS
2015-11-20 08:47:52 -08:00
call GetSGBLayout
call RotateThreePalettesLeft
ld hl, PlayerName
ld de, .Chris
ld a, [wPlayerGender]
2015-11-20 08:47:52 -08:00
bit 0, a
jr z, .Male
ld de, .Kris
.Male:
2015-11-20 08:47:52 -08:00
call InitName
ret
.Chris:
2015-11-20 08:47:52 -08:00
db "CHRIS@@@@@@"
.Kris:
2015-11-20 08:47:52 -08:00
db "KRIS@@@@@@@"
; 60e9
2018-01-02 07:04:21 -08:00
Unreferenced_Function60e9:
2015-11-20 08:47:52 -08:00
call LoadMenuDataHeader
2015-12-15 15:59:49 -08:00
call VerticalMenu
ld a, [wMenuCursorY]
2015-11-20 08:47:52 -08:00
dec a
call CopyNameFromMenu
call CloseWindow
2015-11-20 08:47:52 -08:00
ret
; 60fa
StorePlayerName: ; 60fa
ld a, "@"
ld bc, NAME_LENGTH
ld hl, PlayerName
call ByteFill
ld hl, PlayerName
ld de, StringBuffer2
call CopyName2
ret
; 610f
ShrinkPlayer: ; 610f
ld a, [hROMBank]
push af
2018-01-09 14:20:47 -08:00
ld a, 32 ; fade time
2015-11-20 08:47:52 -08:00
ld [MusicFade], a
ld de, MUSIC_NONE
ld a, e
ld [MusicFadeID], a
2015-11-20 08:47:52 -08:00
ld a, d
ld [MusicFadeID + 1], a
2015-11-20 08:47:52 -08:00
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
; 616a
Intro_RotatePalettesLeftFrontpic: ; 616a
ld hl, IntroFadePalettes
ld b, IntroFadePalettesEnd - IntroFadePalettes
.loop
ld a, [hli]
call DmgToCgbBGPals
ld c, 10
call DelayFrames
dec b
jr nz, .loop
ret
; 617c
IntroFadePalettes: ; 0x617c
db %01010100
db %10101000
db %11111100
db %11111000
db %11110100
db %11100100
IntroFadePalettesEnd
; 6182
Intro_WipeInFrontpic: ; 6182
ld a, $77
ld [hWX], a
call DelayFrame
ld a, %11100100
call DmgToCgbBGPals
.loop
call DelayFrame
ld a, [hWX]
sub $8
cp -1
ret z
ld [hWX], a
jr .loop
; 619c
Intro_PrepTrainerPic: ; 619c
2017-12-28 04:32:33 -08:00
ld de, vTiles2
farcall GetTrainerPic
2015-11-20 08:47:52 -08:00
xor a
2016-01-12 09:46:18 -08:00
ld [hGraphicStartTile], a
2015-11-20 08:47:52 -08:00
hlcoord 6, 4
lb bc, 7, 7
predef PlaceGraphic
2015-11-20 08:47:52 -08:00
ret
; 61b4
ShrinkFrame: ; 61b4
2017-12-28 04:32:33 -08:00
ld de, vTiles2
ld c, 7 * 7
predef DecompressGet2bpp
2015-11-20 08:47:52 -08:00
xor a
2016-01-12 09:46:18 -08:00
ld [hGraphicStartTile], a
2015-11-20 08:47:52 -08:00
hlcoord 6, 4
lb bc, 7, 7
predef PlaceGraphic
2015-11-20 08:47:52 -08:00
ret
; 61cd
Intro_PlacePlayerSprite: ; 61cd
2017-12-24 09:47:30 -08:00
farcall GetPlayerIcon
2015-11-20 08:47:52 -08:00
ld c, $c
2017-12-28 04:32:33 -08:00
ld hl, vTiles0
2015-11-20 08:47:52 -08:00
call Request2bpp
2018-01-10 10:47:57 -08:00
ld hl, Sprite01
2015-11-20 08:47:52 -08:00
ld de, .sprites
ld a, [de]
inc de
ld c, a
.loop
ld a, [de]
inc de
2018-01-10 10:47:57 -08:00
ld [hli], a ; y
2015-11-20 08:47:52 -08:00
ld a, [de]
inc de
2018-01-10 10:47:57 -08:00
ld [hli], a ; x
2015-11-20 08:47:52 -08:00
ld a, [de]
inc de
2018-01-10 10:47:57 -08:00
ld [hli], a ; tile id
2015-11-20 08:47:52 -08:00
2018-01-10 10:47:57 -08:00
ld b, PAL_OW_RED
ld a, [wPlayerGender]
2015-11-20 08:47:52 -08:00
bit 0, a
jr z, .male
2018-01-10 10:47:57 -08:00
ld b, PAL_OW_BLUE
2015-11-20 08:47:52 -08:00
.male
ld a, b
ld [hli], a
dec c
jr nz, .loop
ret
; 61fe
.sprites ; 61fe
db 4
2018-01-10 10:47:57 -08:00
; y pxl, x pxl, tile offset
2015-12-02 14:59:05 -08:00
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
2015-11-20 08:47:52 -08:00
; 620b
CrystalIntroSequence: ; 620b
2017-12-24 09:47:30 -08:00
callfar Copyright_GFPresents
2015-12-02 14:59:05 -08:00
jr c, StartTitleScreen
2017-12-24 09:47:30 -08:00
farcall CrystalIntro
2015-11-20 08:47:52 -08:00
2015-12-02 14:59:05 -08:00
StartTitleScreen: ; 6219
2015-11-20 08:47:52 -08:00
ld a, [rSVBK]
push af
ld a, BANK(wBGPals1)
2015-11-20 08:47:52 -08:00
ld [rSVBK], a
call .TitleScreen
call DelayFrame
.loop
call RunTitleScreen
2015-11-20 08:47:52 -08:00
jr nc, .loop
call ClearSprites
call ClearBGPalettes
pop af
ld [rSVBK], a
ld hl, rLCDC
2017-12-29 09:53:21 -08:00
res rLCDC_SPRITE_SIZE, [hl] ; 8x8
2015-11-20 08:47:52 -08:00
call ClearScreen
2015-12-11 13:59:40 -08:00
call WaitBGMap2
2015-11-20 08:47:52 -08:00
xor a
2016-06-13 19:53:33 -07:00
ld [hLCDCPointer], a
2015-11-20 08:47:52 -08:00
ld [hSCX], a
ld [hSCY], a
ld a, $7
ld [hWX], a
ld a, $90
ld [hWY], a
2016-06-06 15:23:00 -07:00
ld b, SCGB_DIPLOMA
2015-11-20 08:47:52 -08:00
call GetSGBLayout
call UpdateTimePals
ld a, [wIntroSceneFrameCounter]
2015-11-20 08:47:52 -08:00
cp $5
jr c, .ok
xor a
.ok
ld e, a
ld d, 0
2015-12-26 18:59:03 -08:00
ld hl, .dw
add hl, de
2015-11-20 08:47:52 -08:00
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-20 08:47:52 -08:00
; 626a
2015-12-26 18:59:03 -08:00
.dw
2015-11-20 08:47:52 -08:00
dw _MainMenu
dw DeleteSaveData
dw CrystalIntroSequence
dw CrystalIntroSequence
2015-11-20 08:47:52 -08:00
dw ResetClock
; 6274
.TitleScreen: ; 6274
2017-12-24 09:47:30 -08:00
farcall _TitleScreen
2015-11-20 08:47:52 -08:00
ret
; 627b
RunTitleScreen: ; 627b
2015-11-20 08:47:52 -08:00
ld a, [wJumptableIndex]
bit 7, a
jr nz, .done_title
call TitleScreenScene
2017-12-24 09:47:30 -08:00
farcall SuicuneFrameIterator
2015-11-20 08:47:52 -08:00
call DelayFrame
and a
ret
.done_title
scf
ret
; 6292
2018-01-02 07:04:21 -08:00
Unreferenced_Function6292: ; 6292
2015-11-20 08:47:52 -08:00
ld a, [hVBlankCounter]
and $7
ret nz
ld hl, LYOverrides + $5f
ld a, [hl]
dec a
ld bc, 2 * SCREEN_WIDTH
call ByteFill
ret
; 62a3
TitleScreenScene: ; 62a3
ld e, a
ld d, 0
ld hl, .scenes
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
2015-11-20 08:47:52 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-11-20 08:47:52 -08:00
; 62af
.scenes
dw TitleScreenEntrance
dw TitleScreenTimer
dw TitleScreenMain
dw TitleScreenEnd
; 62b7
2018-01-02 07:04:21 -08:00
.Unreferenced_NextScene:
2015-11-20 08:47:52 -08:00
ld hl, wJumptableIndex
inc [hl]
ret
; 62bc
TitleScreenEntrance: ; 62bc
; Animate the logo:
; Move each line by 4 pixels until our count hits 0.
ld a, [hSCX]
and a
jr z, .done
sub 4
ld [hSCX], a
; Lay out a base (all lines scrolling together).
ld e, a
ld hl, LYOverrides
ld bc, 8 * 10 ; logo height
call ByteFill
; Reversed signage for every other line's position.
; This is responsible for the interlaced effect.
ld a, e
xor $ff
2015-11-20 08:47:52 -08:00
inc a
ld b, 8 * 10 / 2 ; logo height / 2
ld hl, LYOverrides + 1
.loop
ld [hli], a
inc hl
dec b
jr nz, .loop
2017-12-24 09:47:30 -08:00
farcall AnimateTitleCrystal
2015-11-20 08:47:52 -08:00
ret
.done
; Next scene
ld hl, wJumptableIndex
inc [hl]
xor a
2016-06-13 19:53:33 -07:00
ld [hLCDCPointer], a
2015-11-20 08:47:52 -08:00
; Play the title screen music.
ld de, MUSIC_TITLE
call PlayMusic
ld a, $88
ld [hWY], a
ret
; 62f6
TitleScreenTimer: ; 62f6
; Next scene
ld hl, wJumptableIndex
inc [hl]
; Start a timer
ld hl, wTitleScreenTimer
ld de, 73 * 60 + 36
2015-11-20 08:47:52 -08:00
ld [hl], e
inc hl
ld [hl], d
ret
; 6304
TitleScreenMain: ; 6304
; Run the timer down.
ld hl, wTitleScreenTimer
2015-11-20 08:47:52 -08:00
ld e, [hl]
inc hl
ld d, [hl]
ld a, e
or d
jr z, .end
dec de
ld [hl], d
dec hl
ld [hl], e
; Save data can be deleted by pressing Up + B + Select.
call GetJoypad
ld hl, hJoyDown
ld a, [hl]
and D_UP + B_BUTTON + SELECT
cp D_UP + B_BUTTON + SELECT
jr z, .delete_save_data
; To bring up the clock reset dialog:
; Hold Down + B + Select to initiate the sequence.
ld a, [hClockResetTrigger]
2015-11-20 08:47:52 -08:00
cp $34
jr z, .check_clock_reset
ld a, [hl]
and D_DOWN + B_BUTTON + SELECT
cp D_DOWN + B_BUTTON + SELECT
jr nz, .check_start
ld a, $34
ld [hClockResetTrigger], a
2015-11-20 08:47:52 -08:00
jr .check_start
; Keep Select pressed, and hold Left + Up.
; Then let go of Select.
.check_clock_reset
bit SELECT_F, [hl]
2015-11-20 08:47:52 -08:00
jr nz, .check_start
xor a
ld [hClockResetTrigger], a
2015-11-20 08:47:52 -08:00
ld a, [hl]
and D_LEFT + D_UP
cp D_LEFT + D_UP
jr z, .clock_reset
; Press Start or A to start the game.
.check_start
ld a, [hl]
and START | A_BUTTON
jr nz, .incave
ret
.incave
ld a, 0
jr .done
.delete_save_data
ld a, 1
.done
ld [wIntroSceneFrameCounter], a
2015-11-20 08:47:52 -08:00
; Return to the intro sequence.
ld hl, wJumptableIndex
set 7, [hl]
ret
.end
; Next scene
ld hl, wJumptableIndex
inc [hl]
; Fade out the title screen music
xor a
ld [MusicFadeID], a
ld [MusicFadeID + 1], a
2015-11-20 08:47:52 -08:00
ld hl, MusicFade
ld [hl], 8 ; 1 second
ld hl, wTitleScreenTimer
2015-11-20 08:47:52 -08:00
inc [hl]
ret
.clock_reset
ld a, 4
ld [wIntroSceneFrameCounter], a
2015-11-20 08:47:52 -08:00
; Return to the intro sequence.
ld hl, wJumptableIndex
set 7, [hl]
ret
; 6375
TitleScreenEnd: ; 6375
; Wait until the music is done fading.
ld hl, wTitleScreenTimer
2015-11-20 08:47:52 -08:00
inc [hl]
ld a, [MusicFade]
and a
ret nz
ld a, 2
ld [wIntroSceneFrameCounter], a
2015-11-20 08:47:52 -08:00
; Back to the intro.
ld hl, wJumptableIndex
set 7, [hl]
ret
; 6389
DeleteSaveData: ; 6389
2017-12-24 09:47:30 -08:00
farcall _DeleteSaveData
2015-11-20 08:47:52 -08:00
jp Init
; 6392
ResetClock: ; 6392
2017-12-24 09:47:30 -08:00
farcall _ResetClock
2015-11-20 08:47:52 -08:00
jp Init
; 639b
2018-01-02 07:04:21 -08:00
Unreferenced_Function639b:
; If bit 0 or 1 of [wTitleScreenTimer] is set, we don't need to be here.
ld a, [wTitleScreenTimer]
2018-01-11 09:00:01 -08:00
and %00000011
2015-11-20 08:47:52 -08:00
ret nz
ld bc, SpriteAnim10
2015-12-04 05:46:11 -08:00
ld hl, SPRITEANIMSTRUCT_FRAME
2015-11-20 08:47:52 -08:00
add hl, bc ; over-the-top compicated way to load wc3ae into hl
ld l, [hl]
ld h, 0
add hl, hl
2015-12-26 18:59:03 -08:00
add hl, hl
ld de, .Data63ca
2015-11-20 08:47:52 -08:00
add hl, de
; If bit 2 of [wTitleScreenTimer] is set, get the second dw; else, get the first dw
ld a, [wTitleScreenTimer]
2015-11-20 08:47:52 -08:00
and %00000100
srl a
2015-12-26 18:59:03 -08:00
srl a
2015-11-20 08:47:52 -08:00
ld e, a
ld d, 0
add hl, de
2015-12-26 18:59:03 -08:00
add hl, de
2015-11-20 08:47:52 -08:00
ld a, [hli]
and a
ret z
ld e, a
ld d, [hl]
ld a, SPRITE_ANIM_INDEX_GS_TITLE_TRAIL
2015-11-20 08:47:52 -08:00
call _InitSpriteAnimStruct
ret
; 63ca
.Data63ca: ; 63ca
2015-11-20 08:47:52 -08:00
; frame 0 y, x; frame 1 y, x
db 11 * 8 + 4, 10 * 8, 0 * 8, 0 * 8
db 11 * 8 + 4, 13 * 8, 11 * 8 + 4, 11 * 8
db 11 * 8 + 4, 13 * 8, 11 * 8 + 4, 15 * 8
db 11 * 8 + 4, 17 * 8, 11 * 8 + 4, 15 * 8
db 0 * 8, 0 * 8, 11 * 8 + 4, 15 * 8
db 0 * 8, 0 * 8, 11 * 8 + 4, 11 * 8
2015-11-20 08:47:52 -08:00
; 63e2
Copyright: ; 63e2
call ClearTileMap
call LoadFontsExtra
ld de, CopyrightGFX
2017-12-28 04:32:33 -08:00
ld hl, vTiles2 tile $60
2018-01-14 16:43:35 -08:00
lb bc, BANK(CopyrightGFX), 29
2015-11-20 08:47:52 -08:00
call Request2bpp
hlcoord 2, 7
ld de, CopyrightString
jp PlaceString
; 63fd
CopyrightString: ; 63fd
; ©1995-2001 Nintendo
db $60, $61, $62, $63, $64, $65, $66
db $67, $68, $69, $6a, $6b, $6c
2015-11-20 08:47:52 -08:00
; ©1995-2001 Creatures inc.
next $60, $61, $62, $63, $64, $65, $66
db $6d, $6e, $6f, $70, $71, $72, $7a, $7b, $7c
2015-11-20 08:47:52 -08:00
; ©1995-2001 GAME FREAK inc.
next $60, $61, $62, $63, $64, $65, $66
db $73, $74, $75, $76, $77, $78, $79, $7a, $7b, $7c
2015-11-20 08:47:52 -08:00
db "@"
; 642e
GameInit:: ; 642e
2017-12-24 09:47:30 -08:00
farcall TryLoadSaveData
call ClearWindowData
2015-11-20 08:47:52 -08:00
call ClearBGPalettes
call ClearTileMap
2017-12-28 04:32:33 -08:00
ld a, HIGH(vBGMap0)
2015-11-20 08:47:52 -08:00
ld [hBGMapAddress + 1], a
2017-12-28 04:32:33 -08:00
xor a ; LOW(vBGMap0)
2015-11-20 08:47:52 -08:00
ld [hBGMapAddress], a
ld [hJoyDown], a
ld [hSCX], a
ld [hSCY], a
ld a, $90
ld [hWY], a
call WaitBGMap
jp CrystalIntroSequence
2015-11-20 08:47:52 -08:00
; 6454