diff options
author | entrpntr <entrpntr@gmail.com> | 2020-05-11 16:06:49 -0400 |
---|---|---|
committer | entrpntr <entrpntr@gmail.com> | 2020-05-11 16:06:49 -0400 |
commit | f2d087165f870dbf55794064dedff4116596258d (patch) | |
tree | bec8f8649a4d4e0e1ee420fba569d2dfa7c27958 | |
parent | 6de1f826f638e5eb4f0177334c9682e1246fa9f5 (diff) |
Clean up engine/menus/intro_menu.asm.
-rw-r--r-- | constants/sprite_anim_constants.asm | 1 | ||||
-rw-r--r-- | data/player_names.asm | 24 | ||||
-rw-r--r-- | data/text/common_2.asm | 2 | ||||
-rw-r--r-- | engine/menus/intro_menu.asm | 1077 | ||||
-rw-r--r-- | engine/menus/main_menu.asm | 251 | ||||
-rw-r--r-- | engine/movie/title.asm | 189 | ||||
-rwxr-xr-x | engine/overworld/map_objects.asm | 8 | ||||
-rw-r--r-- | main.asm | 10 | ||||
-rw-r--r-- | wram.asm | 7 |
9 files changed, 808 insertions, 761 deletions
diff --git a/constants/sprite_anim_constants.asm b/constants/sprite_anim_constants.asm index e11f5079..72042b7d 100644 --- a/constants/sprite_anim_constants.asm +++ b/constants/sprite_anim_constants.asm @@ -21,6 +21,7 @@ NUM_SPRITE_ANIM_STRUCTS EQU 10 ; see wSpriteAnimationStructs ; SpriteAnimSeqData indexes (see data/sprite_anims/sequences.asm) SPRITE_ANIM_INDEX_PARTY_MON EQU $00 +SPRITE_ANIM_INDEX_GS_TITLE_TRAIL EQU $0f SPRITE_ANIM_INDEX_SLOTS_GOLEM EQU $18 SPRITE_ANIM_INDEX_SLOTS_CHANSEY EQU $19 SPRITE_ANIM_INDEX_SLOTS_EGG EQU $1a diff --git a/data/player_names.asm b/data/player_names.asm new file mode 100644 index 00000000..69108f0c --- /dev/null +++ b/data/player_names.asm @@ -0,0 +1,24 @@ +NameMenuHeader: + db STATICMENU_NO_TOP_SPACING + menu_coords 0, 0, 10, TEXTBOX_Y - 1 + dw .Names + db 1 + +.Names: + db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B ; flags + db 5 ; items + db "NEW NAME@" +PlayerNameArray: +IF DEF(_GOLD) + db "GOLD@" + db "HIRO@" + db "TAYLOR@" + db "KARL@" +ELIF DEF(_SILVER) + db "SILVER@" + db "KAMON@" + db "OSCAR@" + db "MAX@" +ENDC + db 2 + db "NAME@" ; title diff --git a/data/text/common_2.asm b/data/text/common_2.asm index 6b7804e6..931605fd 100644 --- a/data/text/common_2.asm +++ b/data/text/common_2.asm @@ -1138,7 +1138,7 @@ _MayRegisterItemText:: line "on SELECT Button." done -_ClockTimeUnknownText:: +_MainMenuTimeUnknownText:: text "Clock time unknown" done diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm index c690590e..414c733f 100644 --- a/engine/menus/intro_menu.asm +++ b/engine/menus/intro_menu.asm @@ -1,271 +1,25 @@ -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 LoadStandardFont - call ClearWindowData - ret - -MainMenu_MysteryGift: - call UpdateTime - farcall DoMysteryGiftIfDayHasPassed - farcall DoMysteryGift - ret - -MainMenu_Options: - farcall OptionsMenu - ret - MainMenu_NewGame: xor a ld [wDebugFlags], a - call Function5c3a - call Function5bf7 + call ResetWRAM + call ClearTilemapEtc call OakSpeech call InitializeWorld - ld a, $0 + + ld a, SPAWN_HOME ld [wDefaultSpawnpoint], a - ld a, $f1 + + ld a, MAPSETUP_WARP ldh [hMapEntryMethod], a jp FinishContinueFunction -Function5c3a: ; 5c3a (1:5c3a) +ResetWRAM: xor a ldh [hBGMapMode], a - call Function5c41 + call _ResetWRAM ret -Function5c41: ; 5c41 (1:5c41) +_ResetWRAM: ld hl, wVirtualOAM ld bc, wOptions - wVirtualOAM xor a @@ -295,7 +49,7 @@ Function5c41: ; 5c41 (1:5c41) ld [wCurBox], a ld [wSavedAtLeastOnce], a - call Function5d1a + call SetDefaultBoxNames ld a, BANK(sBoxCount) call OpenSRAM @@ -305,10 +59,13 @@ Function5c41: ; 5c41 (1:5c41) ld hl, wNumItems call .InitList + ld hl, wNumKeyItems call .InitList + ld hl, wNumBalls call .InitList + ld hl, wNumPCItems call .InitList @@ -316,7 +73,7 @@ Function5c41: ; 5c41 (1:5c41) ld [wRoamMon1Species], a ld [wRoamMon2Species], a ld [wRoamMon3Species], a - ld a, $ff + ld a, -1 ld [wRoamMon1MapGroup], a ld [wRoamMon2MapGroup], a ld [wRoamMon3MapGroup], a @@ -345,26 +102,26 @@ Function5c41: ; 5c41 (1:5c41) ld [wCoins], a ld [wCoins + 1], a -IF START_MONEY / $10000 - ld a, START_MONEY / $10000 -ENDC +if START_MONEY >= $10000 + ld a, HIGH(START_MONEY >> 8) +endc ld [wMoney], a - ld a, START_MONEY / $100 % $100 + ld a, HIGH(START_MONEY) ; mid ld [wMoney + 1], a - ld a, START_MONEY % $100 + ld a, LOW(START_MONEY) ld [wMoney + 2], a xor a - ld [wd961], a + ld [wWhichMomItem], a ld hl, wMomItemTriggerBalance - ld [hl], 2300 / $10000 + ld [hl], HIGH(MOM_MONEY >> 8) inc hl - ld [hl], 2300 / $100 % $100 + ld [hl], HIGH(MOM_MONEY) ; mid inc hl - ld [hl], 2300 % $100 + ld [hl], LOW(MOM_MONEY) - call Function5d5d + call InitializeNPCNames farcall InitDecorations @@ -374,16 +131,17 @@ ENDC 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 -Function5d1a: ; 5d1a (1:5d1a) +SetDefaultBoxNames: ld hl, wBoxNames - ld c, $0 -.asm_5d1f + ld c, 0 +.loop push hl ld de, .Box call CopyName2 @@ -391,11 +149,12 @@ Function5d1a: ; 5d1a (1:5d1a) ld a, c inc a cp 10 - jr c, .asm_5d32 + jr c, .less sub 10 ld [hl], "1" inc hl -.asm_5d32 + +.less add "0" ld [hli], a ld [hl], "@" @@ -405,36 +164,42 @@ Function5d1a: ; 5d1a (1:5d1a) inc c ld a, c cp NUM_BOXES - jr c, .asm_5d1f + jr c, .loop ret -.Box db "BOX@" +.Box: + db "BOX@" -InitializeMagikarpHouse: ; 5d47 (1:5d47) +InitializeMagikarpHouse: ld hl, wBestMagikarpLengthFeet - ld a, 3 + ld a, $3 ld [hli], a - ld a, 6 + ld a, $6 ld [hli], a ld de, .Ralph call CopyName2 ret -.Ralph db "RALPH@" +.Ralph: + db "RALPH@" -Function5d5d: ; 5d5d (1:5d5d) +InitializeNPCNames: ld hl, .Rival ld de, wRivalName - call .CopyName + call .Copy + ld hl, .Mom ld de, wMomsName - call .CopyName + call .Copy + ld hl, .Red ld de, wRedsName - call .CopyName + call .Copy + ld hl, .Green ld de, wGreensName -.CopyName: + +.Copy: ld bc, NAME_LENGTH call CopyBytes ret @@ -444,14 +209,14 @@ Function5d5d: ; 5d5d (1:5d5d) .Green: db "GREEN@" .Mom: db "MOM@" -InitializeWorld: ; 5d97 (1:5d97) +InitializeWorld: call ShrinkPlayer farcall SpawnPlayer farcall _InitializeStartDay ret -LoadOrRegenerateLuckyIDNumber: ; 5da7 (1:5da7) - ld a, 0 +LoadOrRegenerateLuckyIDNumber: + ld a, BANK(sLuckyIDNumber) call OpenSRAM ld a, [wCurDay] inc a @@ -461,13 +226,14 @@ LoadOrRegenerateLuckyIDNumber: ; 5da7 (1:5da7) ld a, [sLuckyIDNumber + 1] ld c, a ld a, [sLuckyIDNumber] - jr z, .asm_5dc9 + jr z, .skip ld a, b ld [sLuckyNumberDay], a call Random ld c, a call Random -.asm_5dc9 + +.skip ld [wLuckyIDNumber], a ld [sLuckyIDNumber], a ld a, c @@ -477,7 +243,7 @@ LoadOrRegenerateLuckyIDNumber: ; 5da7 (1:5da7) MainMenu_Continue: farcall TryLoadSaveFile - jr c, .asm_5e41 + jr c, .FailToLoad call LoadStandardMenuHeader call DisplaySaveInfoOnContinue ld a, $1 @@ -485,22 +251,22 @@ MainMenu_Continue: ld c, 20 call DelayFrames call ConfirmContinue - jr nc, .asm_5dfa + jr nc, .Check1Pass call CloseWindow - jr .asm_5e41 + jr .FailToLoad -.asm_5dfa +.Check1Pass: call Continue_CheckRTC_RestartClock - jr nc, .asm_5e04 + jr nc, .Check2Pass call CloseWindow - jr .asm_5e41 + jr .FailToLoad -.asm_5e04 +.Check2Pass: ld a, $8 ld [wMusicFade], a - ld a, MUSIC_NONE % $100 + ld a, LOW(MUSIC_NONE) ld [wMusicFadeID], a - ld a, MUSIC_NONE / $100 + ld a, HIGH(MUSIC_NONE) ld [wMusicFadeID + 1], a call ClearBGPalettes call CloseWindow @@ -508,94 +274,95 @@ MainMenu_Continue: ld c, 20 call DelayFrames farcall JumpRoamMons - farcall MysteryGift_CopyReceivedDecosToPC + farcall MysteryGift_CopyReceivedDecosToPC ; Mystery Gift farcall ClockContinue - ld a, [wd1db] - cp $1 - jr z, .asm_5e42 - ld a, $f2 + ld a, [wSpawnAfterChampion] + cp SPAWN_LANCE + jr z, .SpawnAfterE4 + ld a, MAPSETUP_CONTINUE ldh [hMapEntryMethod], a jp FinishContinueFunction -.asm_5e41 +.FailToLoad: ret -.asm_5e42 - ld a, $e +.SpawnAfterE4: + ld a, SPAWN_NEW_BARK ld [wDefaultSpawnpoint], a call PostCreditsSpawn jp FinishContinueFunction -SpawnAfterRed: ; 5e4d (1:5e4d) - ld a, $1a +SpawnAfterRed: + ld a, SPAWN_MT_SILVER ld [wDefaultSpawnpoint], a -PostCreditsSpawn: ; 5e52 (1:5e52) + +PostCreditsSpawn: xor a - ld [wd1db], a - ld a, $f1 + ld [wSpawnAfterChampion], a + ld a, MAPSETUP_WARP ldh [hMapEntryMethod], a ret -ConfirmContinue: ; 5e5b (1:5e5b) +ConfirmContinue: +.loop call DelayFrame call GetJoypad ld hl, hJoyPressed - bit 0, [hl] - jr nz, .asm_5e6e - bit 1, [hl] - jr z, ConfirmContinue + bit A_BUTTON_F, [hl] + jr nz, .PressA + bit B_BUTTON_F, [hl] + jr z, .loop scf ret -.asm_5e6e +.PressA: ret -Continue_CheckRTC_RestartClock: ; 5e6f (1:5e6f) +Continue_CheckRTC_RestartClock: call CheckRTCStatus - and $80 - jr z, .asm_5e82 - ld a, $8 - ld hl, $4021 - rst FarCall + and %10000000 ; Day count exceeded 16383 + jr z, .pass + farcall RestartClock ld a, c and a - jr z, .asm_5e82 + jr z, .pass scf ret -.asm_5e82 +.pass xor a ret -FinishContinueFunction: ; 5e84 (1:5e84) +FinishContinueFunction: +.loop xor a ld [wDontPlayMapMusicOnReload], a ld hl, wGameTimerPause - set 0, [hl] + set GAMETIMERPAUSE_TIMER_PAUSED_F, [hl] farcall OverworldLoop - ld a, [wd1db] - cp $2 - jr z, .asm_5e9d + ld a, [wSpawnAfterChampion] + cp SPAWN_RED + jr z, .AfterRed jp Reset -.asm_5e9d +.AfterRed: call SpawnAfterRed - jr FinishContinueFunction + jr .loop -DisplaySaveInfoOnContinue: ; 5ea2 (1:5ea2) +DisplaySaveInfoOnContinue: call CheckRTCStatus - and $80 - jr z, .asm_5eb0 + and %10000000 + jr z, .clock_ok lb de, 4, 8 call DisplayContinueDataWithRTCError ret -.asm_5eb0 +.clock_ok lb de, 4, 8 call DisplayNormalContinueData ret -DisplayNormalContinueData: ; 5eb7 (1:5eb7) +DisplayNormalContinueData: call Continue_LoadMenuHeader call Continue_DisplayBadgesDex call Continue_PrintGameTime @@ -603,7 +370,7 @@ DisplayNormalContinueData: ; 5eb7 (1:5eb7) call UpdateSprites ret -DisplayContinueDataWithRTCError: ; 5ec7 (1:5ec7) +DisplayContinueDataWithRTCError: call Continue_LoadMenuHeader call Continue_DisplayBadgesDex call Continue_UnknownGameTime @@ -611,51 +378,50 @@ DisplayContinueDataWithRTCError: ; 5ec7 (1:5ec7) call UpdateSprites ret -Continue_LoadMenuHeader: ; 5ed7 (1:5ed7) +Continue_LoadMenuHeader: xor a ldh [hBGMapMode], a - ld hl, .MenuDataHeader_Dex + ld hl, .MenuHeader_Dex ld a, [wStatusFlags] bit STATUSFLAGS_POKEDEX_F, a - jr nz, .asm_5ee7 - ld hl, .MenuDataHeader_NoDex -.asm_5ee7 + jr nz, .show_menu + ld hl, .MenuHeader_NoDex + +.show_menu call _OffsetMenuHeader call MenuBox call PlaceVerticalMenuItems ret -.MenuDataHeader_Dex: - db $40 - db 00, 00 - db 09, 15 - dw .MenuData2_Dex - db 1 +.MenuHeader_Dex: + db MENU_BACKUP_TILES ; flags + menu_coords 0, 0, 15, 9 + dw .MenuData_Dex + db 1 ; default option -.MenuData2_Dex - db $00 - db 4 +.MenuData_Dex: + db 0 ; flags + db 4 ; items db "PLAYER <PLAYER>@" db "BADGES@" db "#DEX@" db "TIME@" -.MenuDataHeader_NoDex: - db $40 - db 00, 00 - db 09, 15 - dw .MenuData2_NoDex - db 1 +.MenuHeader_NoDex: + db MENU_BACKUP_TILES ; flags + menu_coords 0, 0, 15, 9 + dw .MenuData_NoDex + db 1 ; default option -.MenuData2_NoDex - db $00 - db 4 +.MenuData_NoDex: + db 0 ; flags + db 4 ; items db "PLAYER <PLAYER>@" db "BADGES@" db " @" db "TIME@" -Continue_DisplayBadgesDex: ; 5f36 (1:5f36) +Continue_DisplayBadgesDex: call MenuBoxCoord2Tile push hl decoord 13, 4, 0 @@ -669,13 +435,13 @@ Continue_DisplayBadgesDex: ; 5f36 (1:5f36) pop hl ret -Continue_PrintGameTime: ; 5f4c (1:5f4c) +Continue_PrintGameTime: decoord 9, 8, 0 add hl, de call Continue_DisplayGameTime ret -Continue_UnknownGameTime: ; 5f54 (1:5f54) +Continue_UnknownGameTime: decoord 9, 8, 0 add hl, de ld de, .three_question_marks @@ -685,46 +451,45 @@ Continue_UnknownGameTime: ; 5f54 (1:5f54) .three_question_marks db " ???@" -Continue_DisplayBadgeCount: ; 5f64 (1:5f64) +Continue_DisplayBadgeCount: push hl ld hl, wJohtoBadges - ld b, $2 + ld b, 2 call CountSetBits pop hl - ld de, wd151 + ld de, wNumSetBits lb bc, 1, 2 jp PrintNum -Continue_DisplayPokedexNumCaught: ; 5f77 (1:5f77) +Continue_DisplayPokedexNumCaught: ld a, [wStatusFlags] bit STATUSFLAGS_POKEDEX_F, a ret z push hl ld hl, wPokedexCaught -IF NUM_POKEMON % 8 +if NUM_POKEMON % 8 ld b, NUM_POKEMON / 8 + 1 -ELSE +else ld b, NUM_POKEMON / 8 -ENDC +endc call CountSetBits pop hl - ld de, wd151 + ld de, wNumSetBits lb bc, 1, 3 jp PrintNum -Continue_DisplayGameTime: ; 5f90 (1:5f90) +Continue_DisplayGameTime: ld de, wGameTimeHours lb bc, 2, 3 call PrintNum - ld [hl], $6d + ld [hl], "<COLON>" inc hl ld de, wGameTimeMinutes lb bc, PRINTNUM_LEADINGZEROS | 1, 2 jp PrintNum -OakSpeech: ; 5fa5 (1:5fa5) - farcall InitClock ; What time is it? - +OakSpeech: + farcall InitClock call RotateFourPalettesLeft call ClearTilemap @@ -733,7 +498,6 @@ OakSpeech: ; 5fa5 (1:5fa5) call RotateFourPalettesRight call RotateThreePalettesRight - xor a ld [wCurPartySpecies], a ld a, POKEMON_PROF @@ -742,12 +506,10 @@ OakSpeech: ; 5fa5 (1:5fa5) ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS call GetSGBLayout - - call Intro_FadeInFrontpic + call Intro_RotatePalettesLeftFrontpic ld hl, OakText1 call PrintText - call RotateThreePalettesRight call ClearTilemap @@ -755,6 +517,7 @@ OakSpeech: ; 5fa5 (1:5fa5) ld [wCurSpecies], a ld [wCurPartySpecies], a call GetBaseData + hlcoord 6, 4 hlcoord 6, 4 ; TriHard call PrepMonFrontpic @@ -762,17 +525,15 @@ OakSpeech: ; 5fa5 (1:5fa5) 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 @@ -784,12 +545,10 @@ OakSpeech: ; 5fa5 (1:5fa5) ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS call GetSGBLayout - - call Intro_FadeInFrontpic + call Intro_RotatePalettesLeftFrontpic ld hl, OakText5 call PrintText - call RotateThreePalettesRight call ClearTilemap @@ -801,21 +560,18 @@ OakSpeech: ; 5fa5 (1:5fa5) ld b, SCGB_TRAINER_OR_MON_FRONTPIC_PALS call GetSGBLayout - - call Intro_FadeInFrontpic + call Intro_RotatePalettesLeftFrontpic ld hl, OakText6 call PrintText - call NamePlayer - ld hl, OakText7 call PrintText ret OakText1: text_far _OakText1 - db "@" + text_end OakText2: text_far _OakText2 @@ -823,33 +579,33 @@ OakText2: ld a, MARILL call PlayMonCry call WaitSFX - ld hl, OakText3 ; $606c + ld hl, OakText3 ret OakText3: text_far _OakText3 - db "@" + text_end OakText4: text_far _OakText4 - db "@" + text_end OakText5: text_far _OakText5 - db "@" + text_end OakText6: text_far _OakText6 - db "@" + text_end OakText7: text_far _OakText7 - db "@" + text_end -NamePlayer: ; 6085 (1:6085) +NamePlayer: call MovePlayerPicRight - ld hl, .PlayerNamingChoices ; $60d9 - call SelectPresetName + ld hl, NameMenuHeader + call ShowPlayerNamingChoices ld a, [wMenuCursorY] dec a jr z, .NewName @@ -859,54 +615,35 @@ NamePlayer: ; 6085 (1:6085) call MovePlayerPicLeft ret -.NewName - ld b, $1 +.NewName: + ld b, NAME_PLAYER 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 + ld de, PlayerNameArray 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@" +INCLUDE "data/player_names.asm" -SelectPresetName: ; 6108 (1:6108) +ShowPlayerNamingChoices: call LoadMenuHeader call VerticalMenu ld a, [wMenuCursorY] @@ -915,17 +652,17 @@ SelectPresetName: ; 6108 (1:6108) call CloseWindow ret -StorePlayerName: ; 6119 (1:6119) +StorePlayerName: ld hl, wStringBuffer2 ld bc, NAME_LENGTH call CopyBytes ret -ShrinkPlayer: ; 6123 (1:6123) +ShrinkPlayer: ldh a, [hROMBank] push af - ld a, 0 << 7 | 32 ; fade out + ld a, 32 ; fade time ld [wMusicFade], a ld de, MUSIC_NONE ld a, e @@ -973,17 +710,17 @@ ShrinkPlayer: ; 6123 (1:6123) call ClearTilemap ret -MovePlayerPicRight: ; 617e (1:617e) +MovePlayerPicRight: hlcoord 6, 4 ld de, $1 jr MovePlayerPic -MovePlayerPicLeft: ; 6186 (1:6186) +MovePlayerPicLeft: hlcoord 13, 4 ld de, -1 MovePlayerPic: ld c, $8 -.asm_618e +.loop push bc push hl push de @@ -1000,49 +737,48 @@ MovePlayerPic: add hl, de pop bc dec c - jr nz, .asm_618e + jr nz, .loop ret -Intro_FadeInFrontpic: ; 61ad (1:61ad) +Intro_RotatePalettesLeftFrontpic: ld hl, IntroFadePalettes - ld b, $6 -.asm_61b2 + ld b, IntroFadePalettes.End - IntroFadePalettes +.loop ld a, [hli] call DmgToCgbBGPals - ld c, $a + ld c, 10 call DelayFrames dec b - jr nz, .asm_61b2 + jr nz, .loop ret IntroFadePalettes: - db %01010100 - db %10101000 - db %11111100 - db %11111000 - db %11110100 - db %11100100 - -Intro_WipeInFrontpic: ; 61c5 (1:61c5) + 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, $e4 + ld a, %11100100 call DmgToCgbBGPals -.asm_61d1 +.loop call DelayFrame ldh a, [hWX] sub $8 - cp $ff + cp -1 ret z ldh [hWX], a - jr .asm_61d1 + jr .loop -Intro_PrepTrainerPic: ; 61df, 61e0 (1:61df, 1:61e0) - ld de, $9000 - ld a, $14 - ld hl, $58a0 - rst FarCall +Intro_PrepTrainerPic: + ld de, vTiles2 + farcall GetTrainerPic xor a ldh [hGraphicStartTile], a hlcoord 6, 4 @@ -1050,9 +786,9 @@ Intro_PrepTrainerPic: ; 61df, 61e0 (1:61df, 1:61e0) predef PlaceGraphic ret -ShrinkFrame: ; 61f7 (1:61f7) - ld de, $9000 - ld c, $31 +ShrinkFrame: + ld de, vTiles2 + ld c, 7 * 7 predef DecompressGet2bpp xor a ldh [hGraphicStartTile], a @@ -1061,67 +797,75 @@ ShrinkFrame: ; 61f7 (1:61f7) predef PlaceGraphic ret -Intro_PlaceChrisSprite: ; 6210 (1:6210) +Intro_PlaceChrisSprite: ld de, ChrisSpriteGFX lb bc, BANK(ChrisSpriteGFX), 12 - ld hl, $8000 + ld hl, vTiles0 call Request2bpp - ld hl, wVirtualOAM - ld de, .OAMData + + ld hl, wVirtualOAMSprite00 + ld de, .sprites ld a, [de] inc de + ld c, a -.asm_6225 +.loop ld a, [de] inc de - ld [hli], a + ld [hli], a ; y ld a, [de] inc de - ld [hli], a + ld [hli], a ; x ld a, [de] inc de - ld [hli], a - xor a + ld [hli], a ; tile id + xor a ; PAL_OW_RED ld [hli], a dec c - jr nz, .asm_6225 + jr nz, .loop ret -.OAMData +.sprites db 4 + ; y pxl, x pxl, tile offset 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) +IntroSequence: callfar Copyright_GFPresents jr c, StartTitleScreen callfar GoldSilverIntro + + ; fallthrough + StartTitleScreen: - call InitTitleScreen + call TitleScreen call DelayFrame -.asm_6255 - call TitleScreenFrame - jr nc, .asm_6255 +.loop + call RunTitleScreen + jr nc, .loop + call ClearSprites call ClearBGPalettes + ld hl, rLCDC - res 2, [hl] + res rLCDC_SPRITE_SIZE, [hl] ; 8x8 call ClearTilemap xor a ldh [hLCDCPointer], a - ld b, $8 + ld b, SCGB_DIPLOMA call GetSGBLayout call UpdateTimePals - ld a, [wce64] + ld a, [wIntroSceneFrameCounter] cp $5 - jr c, .asm_627b + jr c, .ok xor a -.asm_627b +.ok ld e, a - ld d, $0 - ld hl, .Jumptable + ld d, 0 + ld hl, .dw add hl, de add hl, de ld a, [hli] @@ -1129,208 +873,21 @@ StartTitleScreen: ld l, a jp hl -.Jumptable - dw MainMenu_ +.dw + 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 ClearSpriteAnims - - 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, wSpriteAnimDict - 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, wSpriteAnim1 - ld de, wSpriteAnim10 - ld bc, $a - call CopyBytes - ld hl, wSpriteAnim1 - ld [hl], $0 - ld hl, wLYOverrides - 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 +INCLUDE "engine/movie/title.asm" -.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) +RunTitleScreen: call Function63fe - ld a, [wce63] + ld a, [wJumptableIndex] bit 7, a - jr nz, .asm_63fc - call Function640f + jr nz, .done_title + call TitleScreenScene ld a, $1 ldh [hOAMUpdate], a farcall PlaySpriteAnimations @@ -1341,11 +898,11 @@ TitleScreenFrame: ; 63da (1:63da) and a ret -.asm_63fc +.done_title scf ret -Function63fe: ; 63fe (1:63fe) +Function63fe: IF DEF(_GOLD) ldh a, [hVBlankCounter] and $7 @@ -1354,14 +911,14 @@ ENDC ld hl, wLYOverrides + $5f ld a, [hl] dec a - ld bc, $28 + ld bc, 2 * SCREEN_WIDTH call ByteFill ret -Function640f: ; 640f (1:640f) +TitleScreenScene: ld e, a - ld d, $0 - ld hl, .Jumptable ; $641b + ld d, 0 + ld hl, .scenes add hl, de add hl, de ld a, [hli] @@ -1369,129 +926,154 @@ Function640f: ; 640f (1:640f) ld l, a jp hl -.Jumptable - dw Function6426 - dw Function6434 - dw Function648b +.scenes + dw TitleScreenTimer + dw TitleScreenMain + dw TitleScreenEnd -Function6421: - ld hl, wce63 +.Unreferenced_NextScene: + ld hl, wJumptableIndex inc [hl] ret -Function6426: - ld hl, wce63 +TitleScreenTimer: +; Next scene + ld hl, wJumptableIndex inc [hl] - ld hl, wce65 + +; Start a timer + ld hl, wTitleScreenTimer IF DEF(_GOLD) - ld de, $13c0 -ENDC -IF DEF(_SILVER) - ld de, $1140 + ld de, 84 * 60 + 16 +ELIF DEF(_SILVER) + ld de, 73 * 60 + 36 ENDC ld [hl], e inc hl ld [hl], d ret -Function6434: - ld hl, wce65 +TitleScreenMain: +; Run the timer down. + ld hl, wTitleScreenTimer ld e, [hl] inc hl ld d, [hl] ld a, e or d - jr z, .asm_646b + 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, .asm_6460 + jr z, .delete_save_data + +; Clock can be reset by pressing Down + B + Select. ld a, [hl] and D_DOWN + B_BUTTON + SELECT cp D_DOWN + B_BUTTON + SELECT - jr z, .asm_6480 + jr z, .clock_reset ld a, [hl] and START | A_BUTTON - jr nz, .asm_645c + jr nz, .incave ret -.asm_645c - ld a, $0 - jr .asm_6462 +.incave + ld a, 0 + jr .done -.asm_6460 - ld a, $1 -.asm_6462 - ld [wce64], a - ld hl, wce63 +.delete_save_data + ld a, 1 + +.done + ld [wIntroSceneFrameCounter], a + +; Return to the intro sequence. + ld hl, wJumptableIndex set 7, [hl] ret -.asm_646b - ld hl, wce63 +.end +; Next scene + ld hl, wJumptableIndex inc [hl] + +; Fade out the title screen music xor a ; MUSIC_NONE ld [wMusicFadeID], a ld [wMusicFadeID + 1], a ld hl, wMusicFade - ld [hl], $8 - ld hl, wce65 + ld [hl], 8 ; 1 second + + ld hl, wTitleScreenTimer inc [hl] ret -.asm_6480 - ld a, $4 - ld [wce64], a - ld hl, wce63 +.clock_reset + ld a, 4 + ld [wIntroSceneFrameCounter], a + +; Return to the intro sequence. + ld hl, wJumptableIndex set 7, [hl] ret -Function648b: - ld hl, wce65 +TitleScreenEnd: +; Wait until the music is done fading. + + ld hl, wTitleScreenTimer inc [hl] + ld a, [wMusicFade] and a ret nz - ld a, $2 - ld [wce64], a - ld hl, wce63 + + ld a, 2 + ld [wIntroSceneFrameCounter], a + +; Back to the intro. + ld hl, wJumptableIndex set 7, [hl] ret DeleteSaveData: - farcall DeleteSaveData_ + farcall _DeleteSaveData jp Init ResetClock: - farcall ResetClock_ + farcall _ResetClock jp Init -Function64b1: ; 64b1 (1:64b1) - ld a, [wce65] - and $3 +Function64b1: + ; If bit 0 or 1 of [wTitleScreenTimer] is set, we don't need to be here. + ld a, [wTitleScreenTimer] + and %00000011 ret nz IF DEF(_GOLD) - ld bc, wSpriteAnim10Index - ld hl, $a + ld bc, wSpriteAnim10 + ld hl, SPRITEANIMSTRUCT_FRAME add hl, bc ld l, [hl] - ld h, $0 + ld h, 0 add hl, hl add hl, hl ld de, .Data_64e0 add hl, de - ld a, [wce65] - and $4 + ; If bit 2 of [wTitleScreenTimer] is set, get the second dw; else, get the first dw + ld a, [wTitleScreenTimer] + and %00000100 srl a srl a ld e, a - ld d, $0 + ld d, 0 add hl, de add hl, de ld a, [hli] @@ -1499,23 +1081,22 @@ IF DEF(_GOLD) ret z ld e, a ld d, [hl] -ENDC - -IF DEF(_SILVER) +ELIF DEF(_SILVER) ld de, $7c58 ENDC - ld a, $f + ld a, SPRITE_ANIM_INDEX_GS_TITLE_TRAIL 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 +; 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 ENDC Copyright: @@ -1538,9 +1119,7 @@ CopyrightString: db $73, $74, $75, $76, $77, $78, $79, $71, $72 db "@" -GameInit:: ; 6545 (1:6545) +GameInit:: call ClearWindowData - ld a, $5 - ld hl, $4f60 - rst FarCall + farcall TryLoadSaveData jp IntroSequence diff --git a/engine/menus/main_menu.asm b/engine/menus/main_menu.asm new file mode 100644 index 00000000..97ac8ed6 --- /dev/null +++ b/engine/menus/main_menu.asm @@ -0,0 +1,251 @@ +MainMenu: + ld de, MUSIC_NONE + call PlayMusic + call DelayFrame + ld de, MUSIC_MAIN_MENU + ld a, e + ld [wMapMusic], a + call PlayMusic +.loop + xor a + ld [wDisableTextAcceleration], a + call ClearTilemapEtc + ld b, SCGB_DIPLOMA + call GetSGBLayout + ld hl, wGameTimerPause + res GAMETIMERPAUSE_TIMER_PAUSED_F, [hl] + call MainMenu_GetWhichMenu + ld [wWhichIndexSet], a + call MainMenu_PrintCurrentTimeAndDay + ld hl, .MenuHeader + call LoadMenuHeader + call MainMenuJoypadLoop + call CloseWindow + jr c, .quit + call ClearTilemap + ld a, [wMenuSelection] + ld hl, .Jumptable + rst JumpTable + jr .loop + +.quit + jp StartTitleScreen + +.MenuHeader: + db MENU_BACKUP_TILES ; flags + menu_coords 0, 0, 14, 7 + dw .MenuData + db 1 ; default option + +.MenuData: + db STATICMENU_CURSOR ; flags + db 0 ; items + dw MainMenuItems + dw PlaceMenuStrings + dw .Strings + +.Strings: + db "CONTINUE@" + db "NEW GAME@" + db "OPTION@" + db "MYSTERY GIFT@" + +.Jumptable: + dw MainMenu_Continue + dw MainMenu_NewGame + dw MainMenu_Options + dw MainMenu_MysteryGift + +CONTINUE EQU 0 +NEW_GAME EQU 1 +OPTION EQU 2 +MYSTERY_GIFT EQU 3 + +MainMenuItems: + +NewGameMenu: + db 2 + db NEW_GAME + db OPTION + db -1 + +ContinueMenu: + db 3 + db CONTINUE + db NEW_GAME + db OPTION + db -1 + +MysteryMenu: + db 4 + db CONTINUE + db NEW_GAME + db OPTION + db MYSTERY_GIFT + db -1 + +MainMenu_GetWhichMenu: + nop + nop + nop + ld a, [wSaveFileExists] + and a + jr nz, .next + ld a, $0 ; New Game + ret + +.next + ldh a, [hCGB] + cp $1 + ld a, $1 + ret nz + ld a, BANK(sNumDailyMysteryGiftPartnerIDs) + call OpenSRAM + ld a, [sNumDailyMysteryGiftPartnerIDs] + cp -1 + call CloseSRAM + ld a, $1 ; Continue + ret z + ld a, $2 ; New Game + ret + +MainMenuJoypadLoop: + call SetUpMenu +.loop + call MainMenu_PrintCurrentTimeAndDay + call GetScrollingMenuJoypad + ld a, [wMenuJoypad] + cp B_BUTTON + jr z, .b_button + cp A_BUTTON + jr z, .a_button + jr .loop + +.a_button + call PlayClickSFX + and a + ret + +.b_button + scf + ret + +MainMenu_PrintCurrentTimeAndDay: + ld a, [wSaveFileExists] + and a + ret z + xor a + ldh [hBGMapMode], a + call .PlaceBox + ld hl, wOptions + ld a, [hl] + push af + set NO_TEXT_SCROLL, [hl] + call .PlaceTime + pop af + ld [wOptions], a + ld a, $1 + ldh [hBGMapMode], a + ret + +.PlaceBox: + call CheckRTCStatus + and $80 + jr nz, .TimeFail + hlcoord 0, 12 + ld b, 4 + ld c, 13 + call Textbox + ret + +.TimeFail: + call SpeechTextbox + ret + +.PlaceTime: + ld a, [wSaveFileExists] + and a + ret z + call CheckRTCStatus + and %10000000 ; Day count exceeded 16383 + jp nz, .PrintTimeNotSet + call UpdateTime + hlcoord 1, 13 + ld bc, IncGradGBPalTable_11 + 1 + call ClearBox + call GetWeekday + ld b, a + decoord 1, 14 + call .PlaceCurrentDay + decoord 4, 16 + ldh a, [hHours] + ld c, a + farcall PrintHour + ld [hl], ":" + inc hl + ld de, hMinutes + lb bc, PRINTNUM_LEADINGZEROS | 1, 2 + call PrintNum + ret + +.min +; unused + db "min.@" + +.PrintTimeNotSet: + hlcoord 1, 14 + ld de, .TimeNotSet + call PlaceString + ret + +.TimeNotSet: + db "TIME NOT SET@" + +.MainMenuTimeUnknownText: + text_far _MainMenuTimeUnknownText + text_end + +.PlaceCurrentDay: + 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@" + +ClearTilemapEtc: + xor a + ldh [hMapAnims], a + call ClearTilemap + call LoadFontsExtra + call LoadStandardFont + call ClearWindowData + ret + +MainMenu_MysteryGift: + call UpdateTime + farcall DoMysteryGiftIfDayHasPassed + farcall DoMysteryGift + ret + +MainMenu_Options: + farcall OptionsMenu + ret diff --git a/engine/movie/title.asm b/engine/movie/title.asm new file mode 100644 index 00000000..d35cb703 --- /dev/null +++ b/engine/movie/title.asm @@ -0,0 +1,189 @@ +TitleScreen: + 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 ClearSpriteAnims + + ld hl, TitleScreenGFX1 + ld de, vTiles2 + ld a, BANK(TitleScreenGFX1) + call FarDecompress + + ld hl, TitleScreenGFX2 + ld de, vTiles1 + ld a, BANK(TitleScreenGFX2) + call FarDecompress + + ld hl, TitleScreenGFX4 + ld de, vTiles0 + ld a, BANK(TitleScreenGFX4) + call FarDecompress + + ld hl, TitleScreenGFX3 + ld de, vTiles1 tile $78 + ld bc, 8 tiles + ld a, BANK(TitleScreenGFX3) + call FarCopyBytes + + call Function636e + call Function63b6 + ld hl, wSpriteAnimDict + 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, wSpriteAnim1 + ld de, wSpriteAnim10 + ld bc, $a + call CopyBytes + ld hl, wSpriteAnim1 + ld [hl], $0 + ld hl, wLYOverrides + ld bc, $90 + xor a + call ByteFill + +; Let LCD Stat know we're messing around with SCX + ld a, LOW(rSCX) + ldh [hLCDCPointer], a + ld b, $c + call GetSGBLayout + call Function6341 + ld de, MUSIC_TITLE + call PlayMusic + ret + +Function6341: + 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 +ELIF 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 +ELIF 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: + 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: + 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: + 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 diff --git a/engine/overworld/map_objects.asm b/engine/overworld/map_objects.asm index a03a0171..62b1df41 100755 --- a/engine/overworld/map_objects.asm +++ b/engine/overworld/map_objects.asm @@ -402,7 +402,7 @@ UpdatePlayerStep: set PLAYERSTEP_CONTINUE_F, [hl] ret -Function4732: +Unreferenced_Function4732: push bc ld e, a ld d, 0 @@ -1518,14 +1518,14 @@ StepType05: ld [hl], a call IncrementObjectStructField1c StepType04: - call Stubbed_Function4fb2 + call Stubbed_Function4f5a ld hl, OBJECT_DIRECTION_WALKING add hl, bc ld [hl], STANDING ret NPCStep: - call Stubbed_Function4fb2 + call Stubbed_Function4f5a call AddStepVector ld hl, OBJECT_STEP_DURATION add hl, bc @@ -1747,7 +1747,7 @@ StepType17: dw .null .null -Stubbed_Function4fb2: +Stubbed_Function4f5a: ret ld hl, OBJECT_1D add hl, bc @@ -6,6 +6,7 @@ SECTION "bank1", ROMX INCLUDE "engine/link/place_waiting_text.asm" INCLUDE "engine/gfx/load_push_oam.asm" INCLUDE "engine/overworld/map_objects.asm" +INCLUDE "engine/menus/main_menu.asm" INCLUDE "engine/menus/intro_menu.asm" INCLUDE "engine/overworld/init_map.asm" INCLUDE "engine/pokemon/learn.asm" @@ -180,7 +181,10 @@ TilesetDarkCaveColl:: SECTION "bank8", ROMX - dr $20000, $20181 +RestartClock_GetWraparoundTime:: + dr $20000, $20021 +RestartClock:: + dr $20021, $20181 TilesetTowerGFX:: dr $20181, $205b1 TilesetTowerMeta:: @@ -498,9 +502,9 @@ SaveMenu_CopyTilemapAtOnce:: dr $8c000, $8c0b9 PhoneRing_CopyTilemapAtOnce:: dr $8c0b9, $8c17a -ResetClock_:: +_ResetClock:: dr $8c17a, $8c310 -DeleteSaveData_:: +_DeleteSaveData:: dr $8c310, $8c355 DummyPredef35:: DummyPredef36:: @@ -1892,7 +1892,7 @@ wd13f:: ds 1 ; d13f wCurBaseDataEnd:: wd140:: ds 1 ; d140 -wCurDamage:: ds 2 ; d141 +wCurDamage:: dw ; d141 wd143:: ds 1 ; d143 wd144:: ds 1 ; d144 wMornEncounterRate:: db ; d145 @@ -2050,7 +2050,7 @@ wRedsName:: ds NAME_LENGTH ; d1c4 wGreensName:: ds NAME_LENGTH ; d1cf wSavedAtLeastOnce:: ds 1 ; d1da -wd1db:: ds 1 ; d1db +wSpawnAfterChampion:: ds 1 ; d1db wStartDay:: db ; d1dc wStartHour:: db ; d1dd wStartMinute:: db ; d1de @@ -2098,7 +2098,6 @@ UNION ds 18 wPlayerData1End:: wPlayerData2:: - ds 1 NEXTU wObject11Struct:: object_struct wObject11 wObject12Struct:: object_struct wObject12 @@ -2579,7 +2578,7 @@ wDecoLeftOrnament:: db ; d95e wDecoRightOrnament:: db ; d95f wDecoBigDoll:: db ; d960 -wd961:: ds 1 ; d961 +wWhichMomItem:: ds 1 ; d961 wd962:: ds 1 ; d962 wMomItemTriggerBalance:: ds 3 ; d963 |