PrintDayOfWeek: 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@" Option: farcall _Option ret NewGame: xor a ld [wDebugFlags], a call ResetWRAM xor a ldh [hMapAnims], a call ClearTilemap call LoadFrame call LoadStandardFont call ClearMenuAndWindowData call InitTime ; set wStartDay through wStartSecond to $00 farcall InitGender call .SetPlayerName farcall AutoSaveGameOutsideOverworld jp GameMenu .SetPlayerName ld hl, wPlayerName ld a, "D" ld [hli], a ld a, "E" ld [hli], a ld a, "B" ld [hli], a ld a, "U" ld [hli], a ld a, "G" ld [hli], a ld a, "@" ld [hl], a ret ResetWRAM: xor a ldh [hBGMapMode], a call _ResetWRAM ret _ResetWRAM: ld hl, wShadowOAM ld bc, wOptions - wShadowOAM xor a call ByteFill ld hl, WRAM1_Begin ld bc, wGameData - WRAM1_Begin xor a call ByteFill ld hl, wGameData ld bc, wGameDataEnd - wGameData xor a call ByteFill call DelayFrame ldh a, [hRandomSub] ld [wPlayerID], a call DelayFrame ldh a, [hRandomAdd] ld [wPlayerID + 1], a call Random ld [wSecretID], a call DelayFrame call Random ld [wSecretID + 1], a ld hl, wPartyCount call .InitList xor a ld [wCurBox], a ld [wSavedAtLeastOnce], a call SetDefaultBoxNames ld a, BANK(sBoxCount) call OpenSRAM ld hl, sBoxCount call .InitList call CloseSRAM ld hl, wNumItems call .InitList ld hl, wNumKeyItems call .InitList ld hl, wNumBalls call .InitList ld hl, wNumPCItems call .InitList 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 call LoadOrRegenerateLuckyIDNumber call InitializeMagikarpHouse xor a ld [wMonType], a ld [wJohtoBadges], a ld [wKantoBadges], a ld [wChips], a ld [wChips + 1], a if START_COINS >= $10000 ld a, HIGH(START_COINS >> 8) endc ld [wCoins], a ld a, HIGH(START_COINS) ; mid ld [wCoins + 1], a ld a, LOW(START_COINS) ld [wCoins + 2], a xor a ld [wWhichMomItem], a ld hl, wMomItemTriggerBalance ld [hl], HIGH(MOM_COINS >> 8) inc hl ld [hl], HIGH(MOM_COINS) ; mid inc hl ld [hl], LOW(MOM_COINS) call InitializeNPCNames farcall InitDecorations farcall DeletePartyMonMail call ResetGameTime ret .InitList: ; 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 SetDefaultBoxNames: 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: db "BOX@" InitializeMagikarpHouse: ld hl, wBestMagikarpLengthFeet ld a, $3 ld [hli], a ld a, $6 ld [hli], a ld de, .Ralph call CopyName2 ret .Ralph: db "RALPH@" InitializeNPCNames: ld hl, .Rival ld de, wRivalName call .Copy ld hl, .Mom ld de, wMomsName call .Copy ld hl, .Red ld de, wRedsName call .Copy ld hl, .Green ld de, wGreensName .Copy: ld bc, NAME_LENGTH call CopyBytes ret .Rival: db "???@" .Red: db "RED@" .Green: db "GREEN@" .Mom: db "MOM@" LoadOrRegenerateLuckyIDNumber: ld a, BANK(sLuckyIDNumber) call OpenSRAM ld a, [wCurDay] 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 Continue: farcall TryLoadSaveFile jr c, .FailToLoad jp GameMenu_KeepMusic .FailToLoad: ret DisplaySaveInfoOnContinue: lb de, 4, 8 call DisplayNormalContinueData ret DisplaySaveInfoOnSave: lb de, 4, 0 jr DisplayNormalContinueData DisplayNormalContinueData: call Continue_LoadMenuHeader call Continue_DisplayBadgesDexPlayerName call Continue_PrintGameTime call LoadFrame call UpdateSprites ret Continue_LoadMenuHeader: xor a ldh [hBGMapMode], a ld hl, .MenuHeader_Dex ld a, [wStatusFlags] bit STATUSFLAGS_POKEDEX_F, a jr nz, .show_menu ld hl, .MenuHeader_NoDex .show_menu call _OffsetMenuHeader call MenuBox call PlaceVerticalMenuItems ret .MenuHeader_Dex: db MENU_BACKUP_TILES ; flags menu_coords 0, 0, 15, 9 dw .MenuData_Dex db 1 ; default option .MenuData_Dex: db 0 ; flags db 4 ; items db "PLAYER@" db "BADGES@" db "#DEX@" db "TIME@" .MenuHeader_NoDex: db MENU_BACKUP_TILES ; flags menu_coords 0, 0, 15, 9 dw .MenuData_NoDex db 1 ; default option .MenuData_NoDex: db 0 ; flags db 4 ; items db "PLAYER @" db "BADGES@" db " @" db "TIME@" Continue_DisplayBadgesDexPlayerName: 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: db "@" Continue_PrintGameTime: decoord 9, 8, 0 add hl, de call Continue_DisplayGameTime ret Continue_DisplayBadgeCount: push hl ld hl, wJohtoBadges ld b, 2 call CountSetBits pop hl ld de, wNumSetBits lb bc, 1, 2 jp PrintNum Continue_DisplayPokedexNumCaught: ld a, [wStatusFlags] bit STATUSFLAGS_POKEDEX_F, a 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, wNumSetBits lb bc, 1, 3 jp PrintNum Continue_DisplayGameTime: ld de, wGameTimeHours lb bc, 2, 3 call PrintNum ld [hl], ":" inc hl ld de, wGameTimeMinutes lb bc, PRINTNUM_LEADINGZEROS | 1, 2 jp PrintNum OakSpeech: 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, CGB_TRAINER_OR_MON_FRONTPIC_PALS call GetCGBLayout call Intro_RotatePalettesLeftFrontpic ld hl, OakText1 call PrintText1bpp call RotateThreePalettesRight call ClearTilemap ld a, WOOPER ld [wCurSpecies], a ld [wCurPartySpecies], a call GetBaseData hlcoord 6, 4 call PrepMonFrontpic xor a ld [wTempMonDVs], a ld [wTempMonDVs + 1], a ld b, CGB_TRAINER_OR_MON_FRONTPIC_PALS call GetCGBLayout call Intro_WipeInFrontpic ld hl, OakText2 call PrintText1bpp ld hl, OakText4 call PrintText1bpp call RotateThreePalettesRight call ClearTilemap xor a ld [wCurPartySpecies], a ld a, POKEMON_PROF ld [wTrainerClass], a call Intro_PrepTrainerPic ld b, CGB_TRAINER_OR_MON_FRONTPIC_PALS call GetCGBLayout call Intro_RotatePalettesLeftFrontpic ld hl, OakText5 call PrintText1bpp call RotateThreePalettesRight call ClearTilemap xor a ld [wCurPartySpecies], a farcall DrawIntroPlayerPic ld b, CGB_TRAINER_OR_MON_FRONTPIC_PALS call GetCGBLayout call Intro_RotatePalettesLeftFrontpic ld hl, OakText6 call PrintText1bpp call NamePlayer ld hl, OakText7 call PrintText1bpp ret OakText1: text_far _OakText1 text_end OakText2: text_far _OakText2 text_asm ld a, WOOPER call PlayMonCry call WaitSFX ld hl, OakText3 ret OakText3: text_far _OakText3 text_end OakText4: text_far _OakText4 text_end OakText5: text_far _OakText5 text_end OakText6: text_far _OakText6 text_end OakText7: text_far _OakText7 text_end NamePlayer: farcall MovePlayerPicRight farcall ShowPlayerNamingChoices ld a, [wMenuCursorY] dec a jr z, .NewName call StorePlayerName farcall ApplyMonOrTrainerPals farcall MovePlayerPicLeft ret .NewName: ld b, NAME_PLAYER ld de, wPlayerName farcall NamingScreen call RotateThreePalettesRight call ClearTilemap call LoadFrame call WaitBGMap xor a ld [wCurPartySpecies], a farcall DrawIntroPlayerPic ld b, CGB_TRAINER_OR_MON_FRONTPIC_PALS call GetCGBLayout call RotateThreePalettesLeft ld hl, wPlayerName ld de, .Chris ld a, [wPlayerGender] bit PLAYERGENDER_FEMALE_F, a jr z, .Male ld de, .Kris .Male: call InitName ret .Chris: db "CHRIS@@@@@@" .Kris: db "KRIS@@@@@@@" StorePlayerName: ld a, "@" ld bc, NAME_LENGTH ld hl, wPlayerName call ByteFill ld hl, wPlayerName ld de, wStringBuffer2 call CopyName2 ret ShrinkPlayer: ldh a, [hROMBank] push af ld a, 32 ; fade time 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 LoadFrame ld c, 50 call DelayFrames call RotateThreePalettesRight call ClearTilemap ret Intro_RotatePalettesLeftFrontpic: ld hl, IntroFadePalettes ld b, IntroFadePalettes.End - IntroFadePalettes .loop ld a, [hli] call DmgToCgbBGPals ld c, 10 call DelayFrames dec b jr nz, .loop ret IntroFadePalettes: dc 1, 1, 1, 0 dc 2, 2, 2, 0 dc 3, 3, 3, 0 dc 3, 3, 2, 0 dc 3, 3, 1, 0 dc 3, 2, 1, 0 .End Intro_WipeInFrontpic: ld a, $77 ldh [hWX], a call DelayFrame ld a, %11100100 call DmgToCgbBGPals .loop call DelayFrame ldh a, [hWX] sub $8 cp -1 ret z ldh [hWX], a jr .loop Intro_PrepTrainerPic: ld de, vTiles2 farcall GetTrainerPic xor a ldh [hGraphicStartTile], a hlcoord 6, 4 lb bc, 7, 7 predef PlaceGraphic ret ShrinkFrame: ld de, vTiles2 ld c, 7 * 7 predef DecompressGet2bpp xor a ldh [hGraphicStartTile], a hlcoord 6, 4 lb bc, 7, 7 predef PlaceGraphic ret Intro_PlacePlayerSprite: farcall GetPlayerIcon ld c, 12 ld hl, vTiles0 call Request2bpp ld hl, wShadowOAMSprite00 ld de, .sprites ld a, [de] inc de ld c, a .loop ld a, [de] inc de ld [hli], a ; y ld a, [de] inc de ld [hli], a ; x ld a, [de] inc de ld [hli], a ; tile id ld b, PAL_OW_RED ld a, [wPlayerGender] bit PLAYERGENDER_FEMALE_F, a jr z, .male ld b, PAL_OW_BLUE .male ld a, b ld [hli], a ; attributes dec c jr nz, .loop ret .sprites db 4 ; y pxl, x pxl, tile offset db 9 * TILE_WIDTH + 4, 9 * TILE_WIDTH, 0 db 9 * TILE_WIDTH + 4, 10 * TILE_WIDTH, 1 db 10 * TILE_WIDTH + 4, 9 * TILE_WIDTH, 2 db 10 * TILE_WIDTH + 4, 10 * TILE_WIDTH, 3