summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/Intro.asm800
-rw-r--r--engine/menu/debug_menu.asm109
-rw-r--r--engine/menu/main_menu.asm339
3 files changed, 1047 insertions, 201 deletions
diff --git a/engine/Intro.asm b/engine/Intro.asm
new file mode 100644
index 0000000..57295e9
--- /dev/null
+++ b/engine/Intro.asm
@@ -0,0 +1,800 @@
+include "constants.asm"
+
+SECTION "Oak Intro and Game Setup", ROMX[$558D], BANK[$01]
+
+DemoStart:: ; 558D
+ ld de, OakPic
+ lb bc, BANK(OakPic), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ call FadeInIntroPic
+ ld hl, OakSpeechDemo
+ call PrintText
+ call RotateThreePalettesRight
+ call ClearTileMap
+ ld de, ProtagonistPic
+ lb bc, BANK(ProtagonistPic), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ call MovePicLeft
+ ld a, %11010000
+ ldh [rOBP0], a
+ call DemoSetUpPlayer
+ jp IntroCleanup
+
+GameStart:: ; 55BB
+ ld de, OakPic
+ lb bc, BANK(OakPic), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ call FadeInIntroPic
+ ld hl, OakSpeech1
+ call PrintText
+ call RotateThreePalettesRight
+ call ClearTileMap
+ ld a, DEX_YADOKING
+ ld [wCurSpecies], a
+ ld [wMonDexIndex], a
+ call GetMonHeader
+ hlcoord 6, 4
+ hlcoord 6, 4
+ call PrepMonFrontpic
+ call MovePicLeft
+ ld hl, OakSpeech2
+ call PrintText
+ ld a, DEX_YADOKING
+ call PlayCry
+ ld hl, OakSpeech3
+ call PrintText
+ call RotateThreePalettesRight
+ call ClearTileMap
+ ld de, ProtagonistPic
+ lb bc, BANK(ProtagonistPic), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ call MovePicLeft
+ ld hl, OakSpeech4
+ call PrintText
+ call ChoosePlayerName
+ call RotateThreePalettesRight
+ call ClearTileMap
+ ld de, RivalPic
+ lb bc, BANK(RivalPic), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ call FadeInIntroPic
+ ld hl, OakSpeech5
+ call PrintText
+ call ChooseRivalName
+ call RotateThreePalettesRight
+ call ClearTileMap
+ ld de, OakPic
+ lb bc, BANK(OakPic), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ call FadeInIntroPic
+ ld hl, OakSpeech6
+ call PrintText
+ callba SetClockDialog
+ call Function04ac
+ call RotateThreePalettesRight
+ call ClearTileMap
+ ld de, ProtagonistPic
+ lb bc, BANK(ProtagonistPic), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ call RotateThreePalettesLeft
+ ld hl, OakSpeech7
+ call PrintText
+ ldh a, [hROMBank]
+ push af
+ ld a, $20
+ ld [wMusicFade], a
+ ld de, MUSIC_NONE
+ ld a, e
+ ld [wMusicFadeIDLow], a
+ ld a, d
+ ld [wMusicFadeIDHigh], a
+ ld de, $000B ; should be a constant - shrink noise?
+ call PlaySFX
+ pop af
+ call Bankswitch
+ ld c, $04
+ call DelayFrames
+
+IntroCleanup:: ; 568E
+ ld de, ShrinkPic1
+ lb bc, BANK(ShrinkPic1), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ ld c, $04
+ call DelayFrames
+ ld de, ShrinkPic2
+ lb bc, BANK(ShrinkPic2), $00
+ call IntroDisplayPicCenteredOrUpperRight
+ ld c, $14
+ call DelayFrames
+ hlcoord 6, 5
+ ld b, $07
+ ld c, $07
+ call ClearBox
+ ld c, $14
+ call DelayFrames
+ call LoadStartingSprites
+ call LoadFontExtra
+ ld c, $32
+ call DelayFrames
+ call RotateThreePalettesRight
+ call ClearTileMap
+ call Function0502
+ ld a, $00
+ ld [wd638], a
+ ld [wd637], a
+
+OverworldStart::
+ call SetUpGameEntry
+ ld hl, wDebugFlags
+ bit CONTINUED_F, [hl]
+ call z, Function15b5
+ ld hl, wd4a9
+ set 0, [hl]
+ jp Function2a85
+
+SetUpGameEntry:: ; 56E8
+ ld a, $04
+ ld [wd65e], a
+ ld a, $F2
+ ldh [hMapEntryMethod], a
+ ld hl, wDebugFlags
+ bit CONTINUED_F, [hl] ; if we loaded a game
+ ret nz
+ ld a, $F1
+ ldh [hMapEntryMethod], a
+ ld a, $00
+ ld [wDefaultSpawnPoint], a
+ ld hl, GameStartPlacement
+ ld de, wMapGroup
+ ld bc, wd65e - wMapGroup
+ call CopyBytes
+ ret
+
+GameStartPlacement:: ; 570D
+ db $01 ; map group
+ db PLAYER_HOUSE_2F+1 ; map
+ dwcoord 15, 45 ; screen anchor
+ db $04 ; metatile x
+ db $04 ; metatile y
+ db $00 ; in-metatile x
+ db $01 ; in-metatile y
+
+DebugSetUpPlayer:: ; 5715
+ call SetPlayerNamesDebug
+ ld a, $0F
+ ld [wd15d], a
+ ld a, $42
+ ld [wd15e], a
+ ld a, $3F
+ ld [wd15f], a
+ ld a, $FF
+ ld [wd163], a
+ ld [wd164], a
+ call GiveRandomJohto
+ ld a, $03
+ call AddRandomPokemonToBox
+ call FillTMs
+ ld de, DebugBagItems
+ call FillBagWithList
+ ld hl, wPokedexOwned
+ call DebugFillPokedex
+ ld hl, wPokedexSeen
+ call DebugFillPokedex
+ ld hl, wAnnonDex
+ ld [hl], $01
+ call Function40fd
+ ret
+
+DebugFillPokedex:: ; 5755
+ ld b, $1F
+ ld a, $FF
+.loop
+ ld [hl+], a
+ dec b
+ jr nz, .loop
+ ld [hl], $07
+ ret
+
+FillBagWithList:: ; 5760
+ ld hl, wNumBagItems
+.loop
+ ld a, [de]
+ cp $FF
+ jr z, .yump
+ ld [wCurItem], a
+ inc de
+ ld a, [de]
+ inc de
+ ld [wItemQuantity], a
+ call ReceiveItem
+ jr .loop
+.yump
+ ret
+
+DebugBagItems:: ; 5777
+ db ITEM_IMPORTANT_BAG, $01
+ db ITEM_BAG, $01
+ db ITEM_TM_HOLDER, $01
+ db ITEM_BALL_HOLDER, $01
+ db ITEM_BICYCLE, $01
+ db ITEM_MAIL, $06
+ db ITEM_ULTRA_BALL, $1E
+ db ITEM_POKE_BALL, $63
+ db ITEM_POTION, $1E
+ db ITEM_RARE_CANDY, $14
+ db ITEM_MOON_STONE, $63
+ db ITEM_FULL_HEAL, $63
+ db ITEM_PROTEIN, $63
+ db ITEM_QUICK_NEEDLE, $63
+ db ITEM_SNAKESKIN, $63
+ db ITEM_KINGS_ROCK, $63
+ db ITEM_FLEE_FEATHER, $63
+ db ITEM_FOCUS_ORB, $63
+ db ITEM_SHARP_SCYTHE, $63
+ db ITEM_DETECT_ORB, $63
+ db $FF
+
+GiveRandomPokemon:: ; 57A0
+ and a
+ ret z
+.loop
+ push af
+ call RandomUnder246
+ ld b, $0A
+ call GivePokemon
+ pop af
+ dec a
+ jr nz, .loop
+ ret
+
+GiveRandomJohto:: ; 57B0
+.loop
+ call Random
+ and $03
+ jr z, .loop
+ dec a
+ ld b, a
+ add a, a
+ add a, b
+ add a, $98 ; maybe should be a constant - 152, aka the number of kanto pokes
+ ld b, $08
+ call GivePokemon
+ ld a, $8D
+ ld [wPartyMon1 + 1], a
+ ret
+
+GiveKantoStarters:: ; 57C8
+ ld a, $03
+ ld b, $20
+ call GivePokemon
+ ld a, $06
+ ld b, $24
+ call GivePokemon
+ ld a, $09
+ ld b, $24
+ call GivePokemon
+ ret
+
+GivePokemon:: ; 57DE
+ ld [wMonDexIndex], a
+ ld a, b
+ ld [wCurPartyLevel], a
+ ld a, $10
+ call Predef
+ ret
+
+AddRandomPokemonToBox: ; 57EB
+ and a
+ ret z
+.loop
+ push af
+ xor a
+ ld [wca44], a
+ call RandomUnder246
+ ld [wcdd7], a
+ ld a, $05
+ ld [wCurPartyLevel], a
+ callab AddPokemonToBox
+ ld a, [wcdd7]
+ ld [wMonDexIndex], a
+ callab Functiondd5c
+ pop af
+ dec a
+ jr nz, .loop
+ ret
+
+RandomUnder246:: ; 5818
+.loop
+ call Random
+ and a
+ jr z, .loop
+ cp $F6
+ jr nc, .loop
+ ret
+
+FillTMs:: ; 5823
+ ld b, $39
+ ld a, $01
+ ld hl, wTMsHMs
+.loop
+ ld [hl+], a
+ dec b
+ jr nz, .loop
+ ret
+
+DebugGiveKeyItems:: ; 582F
+ ld hl, DebugKeyItemsList
+ ld de, wKeyItems
+ ld c, $FF
+.loop
+ inc c
+ ld a, [hl+]
+ ld [de], a
+ inc de
+ cp $FF
+ jr nz, .loop
+ ld a, c
+ ld [wNumKeyItems], a
+ ret
+
+DebugKeyItemsList:: ; 5844
+ db ITEM_TM_HOLDER
+ db ITEM_BALL_HOLDER
+ db ITEM_BAG
+ db ITEM_BICYCLE
+ db $FF
+
+DemoSetUpPlayer:: ; 5849
+ ld hl, wPlayerName
+ ld de, DemoPlayerName
+ call CopyString
+ ld hl, wRivalName
+ ld de, DemoRivalName
+ call CopyString
+ call Function40fd
+ ld de, DemoItemList
+ call FillBagWithList
+ call GiveRandomJohto
+ ret
+
+DemoItemList:: ; 5868
+ db ITEM_POKE_BALL, $05
+ db ITEM_POTION, $0A
+ db ITEM_FULL_HEAL, $0A
+ db ITEM_STIMULUS_ORB, $01
+ db ITEM_FOCUS_ORB, $01
+ db $FF
+
+DemoPlayerName:: ; 5873
+ db "サトシ@"
+
+DemoRivalName:: ; 5877
+ db "シゲル@"
+
+OakSpeechDemo:: ; 587B
+ text "ようこそ"
+ line "ポケット モンスターの せかいへ!"
+ cont "ごぞんじ わしが オーキドじゃ!"
+
+ para "きょう きみに きてもらったのは"
+ line "ほかでもない"
+ cont "あたらしい ずかんづくりを"
+ cont "てつだって ほしいのじゃ!"
+
+ para "もちろん"
+ line "きみの パートナーとなる ポケモンと"
+ cont "りュックは ようい しておる"
+
+ para "りュックの なかには"
+ line "キズぐすりと"
+ cont "モンスターボールが"
+ cont "はいっておるから あんしんじゃ!"
+
+ para "すでに きみの ライバルは"
+ line "しゅっぱつ しとる"
+
+ para "まけないよう がんばって くれい!"
+ prompt
+
+OakSpeech1:: ; 5956
+ text "いやあ またせた!"
+
+ para "ポケット モンスターの せかいへ"
+ line "ようこそ!"
+
+ para "わたしの なまえは オーキド"
+
+ para "みんなからは # はかせと"
+ line "したわれて おるよ"
+ prompt
+
+OakSpeech2:: ; 599F
+ text "きみも もちろん"
+ line "しっているとは おもうが"
+
+ para "この せかいには"
+ line "ポケット モンスターと よばれる"
+ cont "いきもの たちが"
+ cont "いたるところに すんでいる!"
+ prompt
+
+OakSpeech3:: ; 59E8
+ text "その # という いきものを"
+ line "ひとは ぺットに したり"
+ cont "しょうぶに つかったり"
+ cont "そして・・・"
+
+ para "わたしは この #の"
+ line "けんきゅうを してる というわけだ"
+ prompt
+
+OakSpeech4:: ; 5A35
+ text "では はじめに きみの なまえを"
+ line "おしえて もらおう!"
+ prompt
+
+OakSpeech5:: ; 5A52
+ text "そして この しょうねんは"
+ line "きみの おさななじみであり"
+ cont"ライバルである"
+
+ para "・・・えーと?"
+ line "なまえは なんて いったかな?"
+ prompt
+
+OakSpeech6:: ; 5A8F
+ text "さて きみの きねんすべき"
+ line "たびだちのひを"
+ cont "きろくしておこう!"
+
+ para "じかんも なるべく せいかくにな!"
+ prompt
+
+OakSpeech7:: ; 5AC2
+ text "<PLAYER>!"
+
+ para "いよいよ これから"
+ line "きみの ものがたりの はじまりだ!"
+
+ para "ゆめと ぼうけんと!"
+ line "ポケット モンスターの せかいへ!"
+
+ para "レッツ ゴー!"
+ done
+
+SetPlayerNamesDebug:: ; 5B07
+ ld hl, DebugPlayerName
+ ld de, wPlayerName
+ call CopyNameDebug
+ ld hl, DebugRivalName
+ ld de, wRivalName
+
+CopyNameDebug:
+ ld bc, PLAYER_NAME_LENGTH
+ call CopyBytes
+ ret
+
+DebugPlayerName: ; 5B1D
+ db "コージ@"
+
+DebugRivalName: ; 5B21
+ db "レッド@"
+
+ChoosePlayerName:: ; 5B25
+ call PanPortraitRight
+ ld hl, PlayerNameMenuHeader
+ call NamingWindow
+ ld a, [wMenuCursorY]
+ dec a
+ jr z, .loop
+ ld de, wPlayerName
+ call SaveCustomName
+ jr .farjump
+
+.loop
+ ld b, $01
+ ld de, wPlayerName
+ callba Function113f4
+ ld a, [wPlayerName]
+ cp "@"
+ jr z, .loop
+
+ call RotateThreePalettesRight
+ call ClearTileMap
+ call LoadFontExtra
+ call WaitBGMap
+ ld de, $4D10
+ ld bc, $1200
+ call IntroDisplayPicCenteredOrUpperRight
+ call RotateThreePalettesLeft
+.farjump
+ ld hl, ChoosePlayerNameEndText
+ call PrintText
+ ret
+
+ChoosePlayerNameEndText: ; 5B6F
+ text "ふむ・・・"
+ line "<PLAYER> と いうんだな!"
+ prompt
+
+PlayerNameMenuHeader: ; 5B81
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 00, 00, 10, 11
+ dw PlayerNameMenuData
+ db 01 ; initial selection
+
+PlayerNameMenuData; 5B89
+ db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B
+ db 04 ; items
+ db "じぶんできめる@"
+ db "ゴールド@"
+ db "サトシ@"
+ db "ジャック@"
+ db 3 ; x offset for the title string
+ db "なまえこうほ@"
+
+ChooseRivalName:: ; 5BA9
+ call PanPortraitRight
+ ld hl, RivalNameMenuHeader
+ call NamingWindow
+ ld a, [wMenuCursorY]
+ dec a
+ jr z, .loop
+ ld de, wRivalName
+ call SaveCustomName
+ jr .farjump
+
+.loop
+ ld b, $02
+ ld de, wRivalName
+ callba Function113f4 ; manual text entry box?
+ ld a, [wRivalName]
+ cp "@"
+ jr z, .loop
+
+ call RotateThreePalettesRight
+ call ClearTileMap
+ call LoadFontExtra
+ call WaitBGMap
+ ld de, $4BD4
+ ld bc, $1200
+ call IntroDisplayPicCenteredOrUpperRight
+ call RotateThreePalettesLeft
+.farjump
+ ld hl, ChooseRivalNameEndText
+ call PrintText
+ ret
+
+ChooseRivalNameEndText: ; 5BF3
+ text "そうか そうだったな"
+ line "<RIVAL> という なまえだ"
+ prompt
+
+RivalNameMenuHeader: ; 5C0A
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 00, 00, 10, 11
+ dw RivalNameMenuData
+ db 01 ; initial selection
+
+RivalNameMenuData: ; 5C12
+ db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B
+ db 04 ; items
+ db "じぶんできめる@"
+ db "シルバー@"
+ db "シゲル@"
+ db "ジョン@"
+ db 3
+ db "なまえこうほ@"
+
+MomNamePrompt:: ; 5C31
+ ld hl, MomNameMenuHeader
+ call NamingWindow
+ ld a, [wMenuCursorY]
+ dec a
+ jr z, .loop
+ ld de, wMomsName
+ call SaveCustomName
+ jr .escape
+
+.loop
+ ld b, $03
+ ld de, wMomsName
+ callba Function113f4
+ ld a, [wMomsName]
+ cp "@"
+ jr z, .loop
+
+ call ClearPalettes
+ call ClearTileMap
+ callab Function140d9
+ call LoadFontExtra
+ call GetMemSGBLayout
+ call WaitBGMap
+.escape
+ ret
+
+MomNameMenuHeader: ; 5C71
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 00, 00, 10, 11
+ dw .MomNameMenuData
+ db 01 ; initial selection
+
+.MomNameMenuData: ; 5C79
+ db STATICMENU_CURSOR | STATICMENU_PLACE_TITLE | STATICMENU_DISABLE_B
+ db 04 ; items
+ db "じぶんで きめる@"
+ db "おかあさん@"
+ db "ママ@"
+ db "かあちゃん@"
+ db 3
+ db "なまえこうほ@"
+
+NamingWindow:: ; 5C9B
+ ; loads the menu header put into hl
+ call LoadMenuHeader
+ call VerticalMenu
+ ld a, [wMenuCursorY]
+ dec a
+ call CopyNameFromMenu
+ call CloseWindow
+ ret
+
+SaveCustomName:: ; 5CAC
+ ld hl, wStringBuffer2
+ ld bc, PLAYER_NAME_LENGTH
+ call CopyBytes
+ ret
+
+PanPortraitRight:: ; 5CB6
+ hlcoord 5, 4
+ ld d, $06
+ ld e, $7E
+ ld b, d
+ ld c, e
+ ld d, $00
+ add hl, de
+.loop
+ xor a
+ ldh [hBGMapMode], a
+ push hl
+ push bc
+.innerLoop
+ ;pans all the tiles onscreen to the right one
+ ld a, [hl+]
+ ld [hl-], a
+ dec hl
+ dec c
+ jr nz, .innerLoop
+
+ call WaitBGMap
+ pop bc
+ pop hl
+ inc hl
+ dec b ; passed c - how many tiles right to pan?
+ jr nz, .loop
+ ret
+
+PanPortraitLeft:: ; 5CD7
+ hlcoord 12, 4
+ ld b, $06
+ ld c, $7E
+.loop
+ xor a
+ ldh [hBGMapMode], a
+ push hl
+ push bc
+.innerloop
+ ld a, [hl-]
+ ld [hl+], a
+ inc hl
+ dec c
+ jr nz, .innerloop
+
+ call WaitBGMap
+ pop bc
+ pop hl
+ inc hl
+ dec b
+ jr nz, .loop
+ ret
+
+MenuCallSettings:: ; 5CF3
+ call SettingsScreen
+ ret
+
+FadeInIntroPic: ; 5CF7
+ ld hl, IntroFadePalettes
+ ld b, 6
+.next
+ ld a, [hl+]
+ ldh [rBGP], a
+ ld c, 10
+ call DelayFrames
+ dec b
+ jr nz, .next
+ ret
+
+IntroFadePalettes:
+ db %01010100
+ db %10101000
+ db %11111100
+ db %11111000
+ db %11110100
+ db %11100100
+
+MovePicLeft: ; 5D0E
+ ld a, 119
+ ldh [hWX], a
+ call DelayFrame
+
+ ld a, %11100100
+ ldh [rBGP], a
+.next
+ call DelayFrame
+ ldh a, [hWX]
+ sub 8
+ cp $FF
+ ret z
+ ldh [hWX], a
+ jr .next
+
+IntroDisplayPicCenteredOrUpperRight:: ; 5D27
+; b = bank
+; de = address of compressed pic
+; c: 0 = centred, non-zero = upper-right
+ ld a, c
+ and a
+ hlcoord 13, 4
+ jr nz, .skip
+ hlcoord 6, 4
+.skip
+ push hl
+ ld a, b
+ call UncompressSpriteFromDE
+ ld a, $00
+ call OpenSRAM
+ ld hl, sSpriteBuffer1
+ ld de, sSpriteBuffer0
+ ld bc, DOUBLESPRITEBUFFERSIZE
+ call CopyBytes
+ call CloseSRAM
+ ld de, VRAM_Begin + $1000
+ call InterlaceMergeSpriteBuffers
+ pop hl
+ xor a
+ ldh [hGraphicStartTile], a
+ ld bc, $0707
+ predef PlaceGraphic
+ ret
+
+LoadStartingSprites: ; 5D5D
+ ld de, GoldSpriteGFX
+ lb bc, BANK(GoldSpriteGFX), $0C
+ ld hl, VRAM_Begin
+ call Request2bpp
+ ld hl, wVirtualOAM
+ ld de, GameStartSprites
+ ld c, $04
+.loop
+ ld a, [de]
+ inc de
+ ld [hl+], a
+ ld a, [de]
+ inc de
+ ld [hl+], a
+ ld a, [de]
+ inc de
+ ld [hl+], a
+ xor a
+ ld [hl+], a
+ dec c
+ jr nz, .loop
+ ret
+
+GameStartSprites: ; 5D80
+ db $50, $48, $00
+ db $50, $50, $01
+ db $58, $48, $02
+ db $58, $50, $03
+
+; 5D8C \ No newline at end of file
diff --git a/engine/menu/debug_menu.asm b/engine/menu/debug_menu.asm
new file mode 100644
index 0000000..be46a00
--- /dev/null
+++ b/engine/menu/debug_menu.asm
@@ -0,0 +1,109 @@
+INCLUDE "constants.asm"
+
+SECTION "Debug Menu", ROMX[$4031], BANK[$01]
+
+DebugMenu:: ; $4031
+ call ClearTileMap
+ call ClearWindowData
+ call LoadFont
+ call LoadFontsBattleExtra
+ call ClearSprites
+ call GetMemSGBLayout
+ xor a
+ ld [wWhichIndexSet], a
+ ld hl, DebugMenuHeader
+ call LoadMenuHeader
+ call OpenMenu
+ call CloseWindow
+ jp c, TitleSequenceStart
+ ld a, $41
+ ld [wce5f], a
+ ld a, [wMenuSelection]
+ ld hl, DebugJumpTable
+ jp CallJumptable
+
+DebugJumpTable:: ; 4064
+ dw DebugMenuOptionFight
+ dw DebugMenuOptionField
+ dw Function094c ; sound test
+ dw DebugMenuOptionSubGames
+ dw DebugMenuOptionMonsterTest
+ dw DebugMenuOptionName
+
+DebugMenuHeader: ; 4070
+ db MENU_BACKUP_TILES ; flags
+ menu_coords 05, 02, SCREEN_WIDTH - 7, SCREEN_HEIGHT - 1
+ dw .MenuData
+ db 01 ; default option
+
+.MenuData: ; 4078
+ db $A0
+ db 0 ; items
+ dw DebugMenuItems
+ db $8A, $1F
+ dw .Strings
+
+.Strings
+ db "ファイト@"
+ db "フィールド@"
+ db "サウンド@"
+ db "サブゲーム@"
+ db "モンスター@"
+ db "なまえ@"
+
+DebugMenuItems:
+ db 06
+ db 00
+ db 01
+ db 02
+ db 03
+ db 04
+ db 05
+ db -1
+
+DebugMenuOptionField:: ; 40A8
+ ld hl, wDebugFlags
+ set DEBUG_FIELD_F, [hl] ; set debug mode
+ jp StartNewGame
+
+DebugMenuOptionFight:: ; 40B0
+ ld hl, wDebugFlags
+ set DEBUG_BATTLE_F, [hl]
+ ld a, $54
+ call Predef
+ ld hl, wDebugFlags
+ res DEBUG_BATTLE_F, [hl]
+ ret
+
+DebugMenuOptionSubGames:: ; 40C0
+ callab CallSubGameMenu
+ jp DebugMenu
+
+DebugMenuOptionMonsterTest:: ; 40CB
+ ld hl, wPokedexOwned
+ ld de, wPokedexSeen
+ ld b, $1F
+ ld a, $FF
+.loop
+ ld [hl+], a
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop
+ ld a, $03
+ ld [hl], a
+ ld [de], a
+ callab MonsterTest
+ ld a, $e4
+ ldh [rBGP], a
+
+Function40eb::
+ jp DebugMenu
+
+DebugMenuOptionName:: ; 40EE
+ callab OpenPokegear
+ ld a, $e4
+ ldh [rBGP], a
+ jp DebugMenu
+
+; 40FD \ No newline at end of file
diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm
index 27e8f1d..432570a 100644
--- a/engine/menu/main_menu.asm
+++ b/engine/menu/main_menu.asm
@@ -1,45 +1,45 @@
INCLUDE "constants.asm"
-SECTION "Main Menu Definition", ROMX[$53cc], BANK[$01]
+SECTION "Main Menu", ROMX[$53CC], BANK[$01]
-MainMenu:
- ld hl, wd4a9
+MainMenu:: ; 01:53CC
+ ld hl, wd4a9
res 0, [hl]
call ClearTileMap
call GetMemSGBLayout
call LoadFontExtra
call LoadFont
call ClearWindowData
- call $5388
- ld hl, $ce60
+ call Function5388
+ ld hl, wce60
bit 0, [hl]
- jr nz, .skip1
- xor a ; new game
- jr .next1
-.skip1
- ld a, 1 ; continue
-.next1
- ld a, [$ffa3]
- and $83
- cp $83
- jr nz, .skip2
- ld a, 3 ; play pokemon, set time
- jr .next2
-.skip2
- ld a, 2 ; play pokemon
-.next2
- ld [$cbf7],a
+ jr nz, .setMenuContinue
+ xor a
+ jr .skip
+.setMenuContinue
+ ld a, M_CONTINUE
+.skip
+ ldh a, [hJoyState]
+ and D_DOWN | B_BUTTON | A_BUTTON
+ cp D_DOWN | B_BUTTON | A_BUTTON
+ jr nz, .setMenuPlay
+ ld a, M_SET_TIME
+ jr .triggerMenu
+.setMenuPlay
+ ld a, M_PLAY_GAME
+.triggerMenu
+ ld [wWhichIndexSet], a
ld hl, MainMenuHeader
call LoadMenuHeader
call OpenMenu
call CloseWindow
- jp c, $5dae
+ jp c, TitleSequenceStart
ld hl, MainMenuJumptable
- ld a, [$cbf5]
+ ld a, [wMenuSelection]
jp CallJumptable
-MainMenuHeader:
- db $40
+MainMenuHeader: ; 01:5418
+ db MENU_BACKUP_TILES
menu_coords 0, 0, 13, 7
dw .MenuData
db 1 ; default option
@@ -59,17 +59,11 @@ MainMenuHeader:
db "じかんセット@"
MainMenuJumptable: ; 01:5457
- dw $547c
- dw NewGame
- dw $5cf3
- dw NewGame
- dw $5473
-
-CONTINUE EQU 0
-NEW_GAME EQU 1
-OPTION EQU 2
-PLAY_POKEMON EQU 3
-SET_TIME EQU 4
+ dw MainMenuOptionContinue
+ dw StartNewGame
+ dw MenuCallSettings
+ dw StartNewGame
+ dw MainMenuOptionSetTime
MainMenuItems:
@@ -99,176 +93,119 @@ PlayPokemonSetTimeMenu:
db SET_TIME
db -1
-SECTION "Oak Speech", ROMX[$555c], BANK[$01]
+MainMenuOptionSetTime:: ; 5473
+ callab SetTime
+ ret
+
+MainMenuOptionContinue:: ;547C
+ callab Function14624
+ call DisplayContinueGameInfo
+.loop
+ call ClearJoypad
+ call GetJoypad
+ ldh a, [hJoyState]
+ bit A_BUTTON_F, a
+ jr nz, .escape
+ bit B_BUTTON_F, a
+ jp nz, MainMenu
+ jr .loop
+.escape
+ call Function5397
+ call Function53b0
+ ld hl, wDebugFlags
+ res DEBUG_FIELD_F, [hl]
+ set CONTINUED_F, [hl]
+ set 3, [hl]
+ ldh a, [hJoyState]
+ bit SELECT_F, a
+ jr z, .skip
+ set 1, [hl]
+.skip
+ call ClearBGPalettes
+ call ClearTileMap
+ ld c, $0A
+ call DelayFrames
+ jp OverworldStart
+
+DisplayContinueGameInfo:: ; 54BF
+ xor a
+ ldh [hBGMapMode], a
+ hlcoord 4, 7
+ ld b, $08
+ ld c, $0D
+ call DrawTextBox
+ hlcoord 5, 9
+ ld de, PlayerInfoText
+ call PlaceString
+ hlcoord 13, 9
+ ld de, wPlayerName
+ call PlaceString
+ hlcoord 14, 11
+ call PrintNumBadges
+ hlcoord 13, 13
+ call PrintNumOwnedMons
+ hlcoord 12, 15
+ call PrintPlayTime
+ ld a, $01
+ ldh [hBGMapMode], a
+ ld c, $1E
+ call DelayFrames
+ ret
-NewGame:
- ld de, 0
+PrintNumBadges:: ;54FA
+ push hl
+ ld hl, wd163 ; badges?
+ ld b, $01
+ call CountSetBits
+ pop hl
+ ld de, wCountSetBitsResult
+ ld bc, $0102 ; flags and constants for this? 1 byte source, 2 digit display
+ jp PrintNumber
+
+PrintNumOwnedMons:: ; 550D
+ push hl
+ ld hl, wPokedexOwned
+ ld b, $20 ; flag_array NUM_POKEMON?
+ call CountSetBits
+ pop hl
+ ld de, wCountSetBitsResult
+ ld bc, $0103 ; 1 byte, 3 digit
+ jp PrintNumber
+
+PrintPlayTime:: ; 5520
+ ld de, hRTCHours
+ ld bc, $0103 ; 1 byte, 3 digit
+ call PrintNumber
+ ld [hl], ":"
+ inc hl
+ ld de, hRTCMinutes
+ ld bc, $8102 ; PRINTNUM_LEADINGZEROS, 1 byte, 2 digit
+ jp PrintNumber
+
+PlayerInfoText:
+ db "しゅじんこう"
+ next "もっているバッジ    こ"
+ next "#ずかん    ひき"
+ next "プレイじかん"
+ text_end
+
+StartNewGame:: ; 555C
+ ld de, MUSIC_NONE
call PlayMusic
- ld de, 3
+ ld de, MUSIC_OAK_INTRO
call PlayMusic
call LoadFontExtra
xor a
- ld [$ffde], a
- ld a, 1
- ld hl, $52f9
- call FarCall_hl
+ ldh [hBGMapMode], a
+ callba Function52f9
call ClearTileMap
call ClearWindowData
xor a
- ld [$ffe8], a
- ld a, [wce63]
- bit 1, a
- jp z, .OakSpeechPlayPokemon
- call Function5715
- jp .PlayerShrink
-
-.OakSpeechPlayPokemon
- ld de, OakPic
- lb bc, BANK(OakPic), 0
- call $5d27
- call $5cf7
- ld hl, $587b
- call PrintText
- call RotateThreePalettesRight
- call ClearTileMap
- ld de, ProtagonistPic
- lb bc, BANK(ProtagonistPic), 0
- call $5d27
- call $5d0e
- ld a, $d0
- ld [$ff48], a
- call $5849
- jp .PlayerShrink
-
-.OakSpeechNewGame
- ld de, OakPic
- lb bc, BANK(OakPic), 0
- call $5d27
- call $5cf7
- ld hl, $5956
- call PrintText
- call RotateThreePalettesRight
- call ClearTileMap
- ld a, DEX_YADOKING
- ld [$cb5b], a
- ld [$cd78], a
- call GetMonHeader
- ld hl, $c2f6
- ld hl, $c2f6
- call PrepMonFrontpic
- call $5d0e
- ld hl, $599f
- call PrintText
- ld a, DEX_YADOKING
- call PlayCry
- ld hl, $59e8
- call PrintText
- call RotateThreePalettesRight
- call ClearTileMap
- ld de, ProtagonistPic
- lb bc, BANK(ProtagonistPic), 0
- call $5d27
- call $5d0e
- ld hl, $5a35
- call PrintText
- call $5b25 ; naming screen
- call RotateThreePalettesRight
- call ClearTileMap
- ld de, RivalPic
- lb bc, BANK(RivalPic), 0
- call $5d27
- call $5cf7
- ld hl, $5a52
- call PrintText
- call $5ba9 ; naming screen
- call RotateThreePalettesRight
- call ClearTileMap
- ld de, OakPic
- lb bc, BANK(OakPic), 0
- call $5d27
- call $5cf7
- ld hl, $5a8f
- call PrintText
- ld a, $24
- ld hl, $4000
- call FarCall_hl
- call Function04ac
- call RotateThreePalettesRight
- call ClearTileMap
- ld de, ProtagonistPic
- lb bc, BANK(ProtagonistPic), 0
- call $5d27
- call RotateThreePalettesLeft
- ld hl, $5ac2
- call PrintText
- ld a, [$ff98]
- push af
- ld a, $20
- ld [$c1a5], a
- ld de, 0
- ld a, e
- ld [$c1a7], a
- ld a, d
- ld [$c1a8], a
- ld de, $b
- call PlaySFX
- pop af
- call Bankswitch
- ld c, 4
- call DelayFrames
-.PlayerShrink
- ld de, $4743
- ld bc, $400
- call $5d27
- ld c, 4
- call DelayFrames
- ld de, $479d
- ld bc, $400
- call $5d27
- ld c, 20
- call DelayFrames
- ld hl, $c30a
- ld b, 7
- ld c, 7
- call ClearBox
- ld c, 20
- call DelayFrames
- call $5d5d
- call LoadFontExtra
- ld c, 50
- call DelayFrames
- call RotateThreePalettesRight
- call ClearTileMap
- call Function0502
- ld a, 0
- ld [$d638], a
- ld [$d637], a
- call Function56e8
- ld hl, wce63
- bit 2, [hl]
- call z, Function15b5
- ld hl, wd4a9
- set 0, [hl]
- jp Function2a85
-
-Function56e8:
- ld a, 4
- ld [$d65e], a
- ld a, $f2
- ld [$ff9a], a
- ld hl, $ce63
- bit 2, [hl]
- ret nz
- ld a, $f1
- ld [$ff9a], a
- ld a, 0
- ld [$cc39], a
- ld hl, .Data
- ld de, $d656
- ld bc, 8
- call CopyBytes
- ret
-.Data
- db $01, $09, $33, $c6, $04, $04, $00, $01
-
-Function5715:
+ ldh [hMapAnims], a
+ ld a, [wDebugFlags]
+ bit DEBUG_FIELD_F, a
+ jp z, DemoStart
+ call DebugSetUpPlayer
+ jp IntroCleanup
+
+; 558D