include "constants.asm" SECTION "engine/intro.asm", ROMX 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 MAP_PLAYER_HOUSE_2F ; 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 "!" 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 NamingScreen 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 " と いうんだな!" 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 NamingScreen 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 " という なまえだ" 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 NamingScreen 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