pokecrystal-board/engine/menus/intro_menu.asm

1335 lines
20 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
_MainMenu:
2015-11-20 08:47:52 -08:00
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
2018-01-02 07:04:21 -08:00
; unused
2015-11-20 08:47:52 -08:00
ret
2018-06-24 07:09:41 -07:00
PrintDayOfWeek:
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
.Days:
2015-11-20 08:47:52 -08:00
db "SUN@"
db "MON@"
db "TUES@"
db "WEDNES@"
db "THURS@"
db "FRI@"
db "SATUR@"
2018-06-24 07:09:41 -07:00
.Day:
2015-11-20 08:47:52 -08:00
db "DAY@"
2018-06-24 07:09:41 -07:00
NewGame_ClearTileMapEtc:
2015-11-20 08:47:52 -08:00
xor a
ld [hMapAnims], a
call ClearTileMap
call LoadFontsExtra
call LoadStandardFont
call ClearWindowData
2015-11-20 08:47:52 -08:00
ret
2018-06-24 07:09:41 -07:00
MysteryGift:
2015-11-20 08:47:52 -08:00
call UpdateTime
2017-12-24 09:47:30 -08:00
farcall DoMysteryGiftIfDayHasPassed
farcall DoMysteryGift
2015-11-20 08:47:52 -08:00
ret
2018-06-24 07:09:41 -07:00
OptionsMenu:
2017-12-24 09:47:30 -08:00
farcall _OptionsMenu
2015-11-20 08:47:52 -08:00
ret
2018-06-24 07:09:41 -07:00
NewGame:
2015-11-20 08:47:52 -08:00
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
2018-01-23 14:39:09 -08:00
ld [wDefaultSpawnpoint], a
2015-11-20 08:47:52 -08:00
ld a, MAPSETUP_WARP
ld [hMapEntryMethod], a
jp FinishContinueFunction
2018-06-24 07:09:41 -07:00
AreYouABoyOrAreYouAGirl:
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
2018-06-24 07:09:41 -07:00
ResetWRAM:
2015-11-20 08:47:52 -08:00
xor a
ld [hBGMapMode], a
call _ResetWRAM
ret
2018-06-24 07:09:41 -07:00
_ResetWRAM:
ld hl, wVirtualOAM
2018-01-23 14:39:09 -08:00
ld bc, wOptions - wVirtualOAM
2015-11-20 08:47:52 -08:00
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]
2018-01-23 14:39:09 -08:00
ld [wPlayerID], a
2015-11-20 08:47:52 -08:00
ld a, [rLY]
ld [hSecondsBackup], a
call DelayFrame
ld a, [hRandomAdd]
2018-01-23 14:39:09 -08:00
ld [wPlayerID + 1], a
2015-11-20 08:47:52 -08:00
call Random
ld [wSecretID], a
call DelayFrame
call Random
ld [wSecretID + 1], a
2018-01-23 14:39:09 -08:00
ld hl, wPartyCount
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
2018-01-23 14:39:09 -08:00
ld hl, wNumItems
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
2018-01-23 14:39:09 -08:00
ld hl, wNumKeyItems
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
2018-01-23 14:39:09 -08:00
ld hl, wNumBalls
2016-06-13 19:53:33 -07:00
call .InitList
2015-11-20 08:47:52 -08:00
2018-01-23 14:39:09 -08:00
ld hl, wPCItems
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
2018-01-23 14:39:09 -08:00
ld [wMonType], a
2015-11-20 08:47:52 -08:00
ld [wJohtoBadges], a
ld [wKantoBadges], a
2015-11-20 08:47:52 -08:00
ld [wCoins], a
ld [wCoins + 1], a
2015-11-20 08:47:52 -08:00
if START_MONEY >= $10000
ld a, HIGH(START_MONEY >> 8)
endc
2018-01-23 14:39:09 -08:00
ld [wMoney], a
ld a, HIGH(START_MONEY) ; mid
2018-01-23 14:39:09 -08:00
ld [wMoney + 1], a
ld a, LOW(START_MONEY)
2018-01-23 14:39:09 -08:00
ld [wMoney + 2], a
2015-11-20 08:47:52 -08:00
xor a
ld [wWhichMomItem], a
2015-11-20 08:47:52 -08:00
2018-01-23 14:39:09 -08:00
ld hl, wMomItemTriggerBalance
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
2018-06-24 07:09:41 -07:00
.InitList:
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
2018-06-24 07:09:41 -07:00
SetDefaultBoxNames:
2015-11-20 08:47:52 -08:00
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@"
2018-06-24 07:09:41 -07:00
InitializeMagikarpHouse:
2015-11-20 08:47:52 -08:00
ld hl, wBestMagikarpLengthFeet
ld a, $3
ld [hli], a
ld a, $6
ld [hli], a
ld de, .Ralph
call CopyName2
ret
2018-06-24 07:09:41 -07:00
.Ralph:
2015-11-20 08:47:52 -08:00
db "RALPH@"
2018-06-24 07:09:41 -07:00
InitializeNPCNames:
2015-11-20 08:47:52 -08:00
ld hl, .Rival
2018-01-23 14:39:09 -08:00
ld de, wRivalName
2015-11-20 08:47:52 -08:00
call .Copy
ld hl, .Mom
2018-01-23 14:39:09 -08:00
ld de, wMomsName
2015-11-20 08:47:52 -08:00
call .Copy
ld hl, .Red
2018-01-23 14:39:09 -08:00
ld de, wRedsName
2015-11-20 08:47:52 -08:00
call .Copy
ld hl, .Green
2018-01-23 14:39:09 -08:00
ld de, wGreensName
2015-11-20 08:47:52 -08:00
.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
2018-06-24 07:09:41 -07:00
InitializeWorld:
2015-11-20 08:47:52 -08:00
call ShrinkPlayer
2017-12-24 09:47:30 -08:00
farcall SpawnPlayer
farcall _InitializeStartDay
2015-11-20 08:47:52 -08:00
ret
2018-06-24 07:09:41 -07:00
LoadOrRegenerateLuckyIDNumber:
2015-11-20 08:47:52 -08:00
ld a, BANK(sLuckyIDNumber)
call GetSRAMBank
2018-01-23 14:39:09 -08:00
ld a, [wCurDay]
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
Continue:
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
call LoadStandardMenuHeader
2015-11-20 08:47:52 -08:00
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
2018-01-23 14:39:09 -08:00
ld [wMusicFade], a
ld a, LOW(MUSIC_NONE)
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID], a
ld a, HIGH(MUSIC_NONE)
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID + 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
2018-01-23 14:39:09 -08:00
ld [wDefaultSpawnpoint], a
2015-11-20 08:47:52 -08:00
call PostCreditsSpawn
jp FinishContinueFunction
2018-06-24 07:09:41 -07:00
SpawnAfterRed:
2015-11-20 08:47:52 -08:00
ld a, SPAWN_MT_SILVER
2018-01-23 14:39:09 -08:00
ld [wDefaultSpawnpoint], a
2015-11-20 08:47:52 -08:00
2018-06-24 07:09:41 -07:00
PostCreditsSpawn:
2015-11-20 08:47:52 -08:00
xor a
ld [wSpawnAfterChampion], a
ld a, MAPSETUP_WARP
ld [hMapEntryMethod], a
ret
2018-06-24 07:09:41 -07:00
Continue_MobileAdapterMenu:
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
2018-01-23 14:39:09 -08:00
ld [wMusicFade], a
ld a, LOW(MUSIC_MOBILE_ADAPTER_MENU)
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID], a
ld a, HIGH(MUSIC_MOBILE_ADAPTER_MENU)
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID + 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
2018-01-23 14:39:09 -08:00
ld [wMusicFade], a
ld a, LOW(MUSIC_NONE)
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID], a
ld a, HIGH(MUSIC_NONE)
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID + 1], a
2015-11-20 08:47:52 -08:00
ld c, 35
call DelayFrames
ret
2018-06-24 07:09:41 -07:00
ConfirmContinue:
2015-11-20 08:47:52 -08:00
.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
2018-06-24 07:09:41 -07:00
Continue_CheckRTC_RestartClock:
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
FinishContinueFunction:
2015-11-20 08:47:52 -08:00
.loop
xor a
ld [wDontPlayMapMusicOnReload], a
2015-11-20 08:47:52 -08:00
ld [wLinkMode], a
ld hl, wGameTimerPause
2018-01-23 09:40:29 -08:00
set GAMETIMERPAUSE_TIMER_PAUSED_F, [hl]
res GAMETIMERPAUSE_MOBILE_7_F, [hl]
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
DisplaySaveInfoOnContinue:
2015-11-20 08:47:52 -08:00
call CheckRTCStatus
and %10000000
jr z, .clock_ok
lb de, 4, 8
call DisplayContinueDataWithRTCError
ret
.clock_ok
lb de, 4, 8
call DisplayNormalContinueData
ret
2018-06-24 07:09:41 -07:00
DisplaySaveInfoOnSave:
2015-11-20 08:47:52 -08:00
lb de, 4, 0
jr DisplayNormalContinueData
2018-06-24 07:09:41 -07:00
DisplayNormalContinueData:
2015-11-20 08:47:52 -08:00
call Continue_LoadMenuHeader
call Continue_DisplayBadgesDexPlayerName
call Continue_PrintGameTime
call LoadFontsExtra
call UpdateSprites
ret
2018-06-24 07:09:41 -07:00
DisplayContinueDataWithRTCError:
2015-11-20 08:47:52 -08:00
call Continue_LoadMenuHeader
call Continue_DisplayBadgesDexPlayerName
call Continue_UnknownGameTime
call LoadFontsExtra
call UpdateSprites
ret
2018-06-24 07:09:41 -07:00
Continue_LoadMenuHeader:
2015-11-20 08:47:52 -08:00
xor a
ld [hBGMapMode], a
ld hl, .MenuHeader_Dex
ld a, [wStatusFlags]
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS_POKEDEX_F, a
jr nz, .show_menu
ld hl, .MenuHeader_NoDex
2015-11-20 08:47:52 -08:00
.show_menu
call _OffsetMenuHeader
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
2018-06-24 07:09:41 -07:00
.MenuHeader_Dex:
db MENU_BACKUP_TILES ; flags
menu_coords 0, 0, 15, 9
dw .MenuData_Dex
2015-11-20 08:47:52 -08:00
db 1 ; default option
2018-06-24 07:09:41 -07:00
.MenuData_Dex:
db 0 ; flags
2015-11-20 08:47:52 -08:00
db 4 ; items
db "PLAYER@"
db "BADGES@"
db "#DEX@"
db "TIME@"
2018-06-24 07:09:41 -07:00
.MenuHeader_NoDex:
db MENU_BACKUP_TILES ; flags
menu_coords 0, 0, 15, 9
dw .MenuData_NoDex
2015-11-20 08:47:52 -08:00
db 1 ; default option
2018-06-24 07:09:41 -07:00
.MenuData_NoDex:
db 0 ; flags
2015-11-20 08:47:52 -08:00
db 4 ; items
db "PLAYER <PLAYER>@"
db "BADGES@"
db " @"
db "TIME@"
2018-06-24 07:09:41 -07:00
Continue_DisplayBadgesDexPlayerName:
2015-11-20 08:47:52 -08:00
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>@"
2018-06-24 07:09:41 -07:00
Continue_PrintGameTime:
2015-11-20 08:47:52 -08:00
decoord 9, 8, 0
add hl, de
call Continue_DisplayGameTime
ret
2018-06-24 07:09:41 -07:00
Continue_UnknownGameTime:
2015-11-20 08:47:52 -08:00
decoord 9, 8, 0
add hl, de
ld de, .three_question_marks
call PlaceString
ret
.three_question_marks
db " ???@"
2018-06-24 07:09:41 -07:00
Continue_DisplayBadgeCount:
2015-11-20 08:47:52 -08:00
push hl
ld hl, wJohtoBadges
2015-11-20 08:47:52 -08:00
ld b, 2
call CountSetBits
pop hl
ld de, wNumSetBits
2015-11-20 08:47:52 -08:00
lb bc, 1, 2
jp PrintNum
2018-06-24 07:09:41 -07:00
Continue_DisplayPokedexNumCaught:
ld a, [wStatusFlags]
2018-01-22 12:40:43 -08:00
bit STATUSFLAGS_POKEDEX_F, a
2015-11-20 08:47:52 -08:00
ret z
push hl
2018-01-23 14:39:09 -08:00
ld hl, wPokedexCaught
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, wNumSetBits
2015-11-20 08:47:52 -08:00
lb bc, 1, 3
jp PrintNum
2018-06-24 07:09:41 -07:00
Continue_DisplayGameTime:
2018-01-23 14:39:09 -08:00
ld de, wGameTimeHours
2015-11-20 08:47:52 -08:00
lb bc, 2, 3
call PrintNum
ld [hl], "<COLON>"
inc hl
2018-01-23 14:39:09 -08:00
ld de, wGameTimeMinutes
2015-11-20 08:47:52 -08:00
lb bc, PRINTNUM_LEADINGZEROS | 1, 2
jp PrintNum
OakSpeech:
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
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
2015-11-20 08:47:52 -08:00
ld a, POKEMON_PROF
2018-01-23 14:39:09 -08:00
ld [wTrainerClass], a
2015-11-20 08:47:52 -08:00
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
2018-01-23 14:39:09 -08:00
ld [wCurSpecies], a
ld [wCurPartySpecies], a
2015-11-20 08:47:52 -08:00
call GetBaseData
hlcoord 6, 4
call PrepMonFrontpic
xor a
2018-01-23 14:39:09 -08:00
ld [wTempMonDVs], a
ld [wTempMonDVs + 1], a
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_WipeInFrontpic
ld hl, OakText2
call PrintText
ld hl, OakText4
call PrintText
call RotateThreePalettesRight
call ClearTileMap
xor a
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], a
2015-11-20 08:47:52 -08:00
ld a, POKEMON_PROF
2018-01-23 14:39:09 -08:00
ld [wTrainerClass], a
2015-11-20 08:47:52 -08:00
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
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], 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:
2015-11-20 08:47:52 -08:00
text_jump _OakText1
db "@"
OakText2:
2015-11-20 08:47:52 -08:00
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:
2015-11-20 08:47:52 -08:00
text_jump _OakText3
db "@"
OakText4:
2015-11-20 08:47:52 -08:00
text_jump _OakText4
db "@"
OakText5:
2015-11-20 08:47:52 -08:00
text_jump _OakText5
db "@"
OakText6:
2015-11-20 08:47:52 -08:00
text_jump _OakText6
db "@"
OakText7:
2015-11-20 08:47:52 -08:00
text_jump _OakText7
db "@"
NamePlayer:
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
2018-01-23 14:39:09 -08:00
ld de, wPlayerName
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
2018-01-23 14:39:09 -08:00
ld [wCurPartySpecies], 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
2018-01-23 14:39:09 -08:00
ld hl, wPlayerName
2015-11-20 08:47:52 -08:00
ld de, .Chris
ld a, [wPlayerGender]
2018-01-22 11:34:55 -08:00
bit PLAYERGENDER_FEMALE_F, a
2015-11-20 08:47:52 -08:00
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@@@@@@@"
2018-01-02 07:04:21 -08:00
Unreferenced_Function60e9:
call LoadMenuHeader
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
2018-06-24 07:09:41 -07:00
StorePlayerName:
2015-11-20 08:47:52 -08:00
ld a, "@"
ld bc, NAME_LENGTH
2018-01-23 14:39:09 -08:00
ld hl, wPlayerName
2015-11-20 08:47:52 -08:00
call ByteFill
2018-01-23 14:39:09 -08:00
ld hl, wPlayerName
ld de, wStringBuffer2
2015-11-20 08:47:52 -08:00
call CopyName2
ret
2018-06-24 07:09:41 -07:00
ShrinkPlayer:
2015-11-20 08:47:52 -08:00
ld a, [hROMBank]
push af
2018-01-09 14:20:47 -08:00
ld a, 32 ; fade time
2018-01-23 14:39:09 -08:00
ld [wMusicFade], a
2015-11-20 08:47:52 -08:00
ld de, MUSIC_NONE
ld a, e
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID], a
2015-11-20 08:47:52 -08:00
ld a, d
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID + 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
2018-06-24 07:09:41 -07:00
Intro_RotatePalettesLeftFrontpic:
2015-11-20 08:47:52 -08:00
ld hl, IntroFadePalettes
ld b, IntroFadePalettes.End - IntroFadePalettes
2015-11-20 08:47:52 -08:00
.loop
ld a, [hli]
call DmgToCgbBGPals
ld c, 10
call DelayFrames
dec b
jr nz, .loop
ret
IntroFadePalettes:
2015-11-20 08:47:52 -08:00
db %01010100
db %10101000
db %11111100
db %11111000
db %11110100
db %11100100
.End
2015-11-20 08:47:52 -08:00
2018-06-24 07:09:41 -07:00
Intro_WipeInFrontpic:
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
Intro_PrepTrainerPic:
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
2018-06-24 07:09:41 -07:00
ShrinkFrame:
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
2018-06-24 07:09:41 -07:00
Intro_PlacePlayerSprite:
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-30 11:52:46 -08:00
ld hl, wVirtualOAMSprite00
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]
2018-01-22 11:34:55 -08:00
bit PLAYERGENDER_FEMALE_F, a
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
.sprites
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
CrystalIntroSequence:
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
2018-06-24 07:09:41 -07:00
StartTitleScreen:
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
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
2018-06-24 07:09:41 -07:00
.TitleScreen:
2017-12-24 09:47:30 -08:00
farcall _TitleScreen
2015-11-20 08:47:52 -08:00
ret
2018-06-24 07:09:41 -07:00
RunTitleScreen:
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
2018-06-24 07:09:41 -07:00
Unreferenced_Function6292:
2015-11-20 08:47:52 -08:00
ld a, [hVBlankCounter]
and $7
ret nz
2018-01-23 14:39:09 -08:00
ld hl, wLYOverrides + $5f
2015-11-20 08:47:52 -08:00
ld a, [hl]
dec a
ld bc, 2 * SCREEN_WIDTH
call ByteFill
ret
2018-06-24 07:09:41 -07:00
TitleScreenScene:
2015-11-20 08:47:52 -08:00
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
.scenes
dw TitleScreenEntrance
dw TitleScreenTimer
dw TitleScreenMain
dw TitleScreenEnd
2018-01-02 07:04:21 -08:00
.Unreferenced_NextScene:
2015-11-20 08:47:52 -08:00
ld hl, wJumptableIndex
inc [hl]
ret
2018-06-24 07:09:41 -07:00
TitleScreenEntrance:
2015-11-20 08:47:52 -08:00
; 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
2018-01-23 14:39:09 -08:00
ld hl, wLYOverrides
2015-11-20 08:47:52 -08:00
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
2018-01-23 14:39:09 -08:00
ld hl, wLYOverrides + 1
2015-11-20 08:47:52 -08:00
.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
2018-06-24 07:09:41 -07:00
TitleScreenTimer:
2015-11-20 08:47:52 -08:00
; 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
2018-06-24 07:09:41 -07:00
TitleScreenMain:
2015-11-20 08:47:52 -08:00
; 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
2018-01-23 14:39:09 -08:00
ld [wMusicFadeID], a
ld [wMusicFadeID + 1], a
ld hl, wMusicFade
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
TitleScreenEnd:
2015-11-20 08:47:52 -08:00
; Wait until the music is done fading.
ld hl, wTitleScreenTimer
2015-11-20 08:47:52 -08:00
inc [hl]
2018-01-23 14:39:09 -08:00
ld a, [wMusicFade]
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
DeleteSaveData:
2017-12-24 09:47:30 -08:00
farcall _DeleteSaveData
2015-11-20 08:47:52 -08:00
jp Init
2018-06-24 07:09:41 -07:00
ResetClock:
2017-12-24 09:47:30 -08:00
farcall _ResetClock
2015-11-20 08:47:52 -08:00
jp Init
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
2018-01-23 14:39:09 -08:00
ld bc, wSpriteAnim10
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
2018-06-24 07:09:41 -07:00
.Data63ca:
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
2018-06-24 07:09:41 -07:00
Copyright:
2015-11-20 08:47:52 -08:00
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
2018-06-24 07:09:41 -07:00
CopyrightString:
2015-11-20 08:47:52 -08:00
; ©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 "@"
2018-06-24 07:09:41 -07:00
GameInit::
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