diff options
author | obskyr <powpowd@gmail.com> | 2018-07-03 03:27:58 +0200 |
---|---|---|
committer | obskyr <powpowd@gmail.com> | 2018-07-03 03:29:47 +0200 |
commit | 5a8a294140c870b1a979980c6e7e61cea5883452 (patch) | |
tree | e24ef35ef9b65bb64759a5c7637c4fb64f692cee | |
parent | d65cb5004e20387c7c808ccde3ca8407c73f1213 (diff) | |
parent | f3de47a1d575b63ae52a3bb667f2a70f8c5e26c5 (diff) |
Merge branch 'master' of https://github.com/2Tie/pokegold-spaceworld into master
Long overdue!
39 files changed, 4431 insertions, 359 deletions
@@ -70,7 +70,7 @@ $(CORRECTEDROM): %-correctheader.gb: %.gb $(ROM): poke%-spaceworld.gb: $(OBJS) | $(BASEROM) $(RGBLINK) -d -n $(@:.gb=.sym) -m $(@:.gb=.map) -O $(BASEROM) -o $@ $^ $(RGBFIX) -f lh -k 01 -l 0x33 -m 0x03 -p 0 -r 3 -t "POKEMON2$(shell echo $* | cut -d _ -f 1 | tr '[:lower:]' '[:upper:]')" $@ - $(sort_sym) $(@:.gb=.sym) +# $(sort_sym) $(@:.gb=.sym) $(BASEROM): @echo "Please obtain a copy of Gold_debug.sgb and put it in this directory as $@" diff --git a/charmap.asm b/charmap.asm index 575a8eb..be20a37 100644 --- a/charmap.asm +++ b/charmap.asm @@ -101,7 +101,7 @@ charmap "<RIVAL>", $53 ; wRivalName charmap "#", $54 ; "POKé" charmap "<CONT>", $55 - charmap "<……>", $56 ; "……" + charmap "<⋯⋯>", $56 ; "⋯⋯" charmap "<DONE>", $57 charmap "<PROMPT>", $58 charmap "<TARGET>", $59 @@ -140,7 +140,7 @@ charmap "『", $72 charmap "』", $73 charmap "・", $74 - charmap "…", $75 + charmap "⋯", $75 charmap "ぁ", $76 charmap "ぇ", $77 diff --git a/constants.asm b/constants.asm index c559622..a9a3afa 100644 --- a/constants.asm +++ b/constants.asm @@ -36,3 +36,4 @@ INCLUDE "constants/menu_constants.asm" INCLUDE "constants/wram_constants.asm" INCLUDE "constants/sgb_constants.asm" INCLUDE "constants/map_object_constants.asm" +INCLUDE "constants/main_menu_constants.asm" diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm index 536f4a4..52f74e5 100644 --- a/constants/gfx_constants.asm +++ b/constants/gfx_constants.asm @@ -35,6 +35,7 @@ HP_YELLOW EQU 1 HP_RED EQU 2 SPRITEBUFFERSIZE EQU 7*7 * 8 ; 7 * 7 (tiles) * 8 (bytes per tile) +DOUBLESPRITEBUFFERSIZE EQU 2*SPRITEBUFFERSIZE ; sprite_oam_struct members (see macros/wram.asm) const_def diff --git a/constants/main_menu_constants.asm b/constants/main_menu_constants.asm new file mode 100644 index 0000000..033e396 --- /dev/null +++ b/constants/main_menu_constants.asm @@ -0,0 +1,12 @@ + const_def + const M_NEW_GAME + const M_CONTINUE + const M_PLAY_GAME + const M_SET_TIME + + const_def + const CONTINUE + const NEW_GAME + const OPTION + const PLAY_POKEMON + const SET_TIME
\ No newline at end of file diff --git a/constants/text_constants.asm b/constants/text_constants.asm index f899ea3..e487d4c 100644 --- a/constants/text_constants.asm +++ b/constants/text_constants.asm @@ -1,6 +1,6 @@ ; name lengths NAME_LENGTH EQU 11 ; English -PLAYER_NAME_LENGTH EQU 8 ; English +PLAYER_NAME_LENGTH EQU 6 ; Japanese BOX_NAME_LENGTH EQU 9 ; English MON_NAME_LENGTH EQU 6 MOVE_NAME_LENGTH EQU 13 ; English diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm index c530a8b..8fc2c59 100644 --- a/constants/wram_constants.asm +++ b/constants/wram_constants.asm @@ -21,3 +21,9 @@ PLAYER_BIKE EQU 1 PLAYER_SKATE EQU 2 PLAYER_SURF EQU 4 PLAYER_SURF_PIKA EQU 8 + +; wDebugFlags:: ; ce63 + const_def + const DEBUG_BATTLE_F + const DEBUG_FIELD_F + const CONTINUED_F diff --git a/data/predef_pointers.inc b/data/predef_pointers.inc index 3ee6205..f10af54 100644 --- a/data/predef_pointers.inc +++ b/data/predef_pointers.inc @@ -12,10 +12,10 @@ PredefPointers:: ; 1:62d3 ; WE NEED LABELS! ; Thank youu~ add_predef Function6445 ; 0 - add_predef Function5d27 + add_predef IntroDisplayPicCenteredOrUpperRight add_predef Function6713 add_predef Function66b1 - add_predef Function4031 + add_predef DebugMenu add_predef GetItemAmount add_predef HealParty add_predef AddBCD 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 diff --git a/home/audio.asm b/home/audio.asm index 03a0990..609c8dc 100644 --- a/home/audio.asm +++ b/home/audio.asm @@ -140,3 +140,130 @@ PlaySFX:: ; 3d63 ret WaitPlaySFX:: ; 3d7f + call WaitSFX + call PlaySFX + ret + +WaitSFX:: ; 3d86 + push hl +.loop + ld hl, wChannel5Flags1 + bit 0, [hl] + jr nz, .loop + ld hl, wChannel6Flags1 + bit 0, [hl] + jr nz, .loop + ld hl, wChannel7Flags1 + bit 0, [hl] + jr nz, .loop + ld hl, wChannel8Flags1 + bit 0, [hl] + jr nz, .loop + pop hl + ret + +MaxVolume:: ; 3DA5 + ld a, $77 + ld [wVolume], a + ret + +LowVolume:: ; 3DAB + ld a, $33 + ld [wVolume], a + ret + +VolumeOff:: ; 3DB1 + xor a + ld [wVolume], a + ret + +UpdateSoundNTimes:: ; 3DB6 +.loop + and a + ret z + dec a + call UpdateSound + jr .loop + +FadeToMapMusic:: ; 3DBE + push hl + push de + push bc + push af + call GetMapMusic + ld a, [wMapMusic] + cp e + jr z, .jump + ld a, $08 + ld [wMusicFade], a + ld a, e + ld [wMusicFadeID], a + ld a, d + ld [wMusicFadeID+1], a + ld a, e + ld [wMapMusic], a +.jump + pop af + pop bc + pop de + pop hl + ret + +PlayMapMusic:: ; 3DE1 + push hl + push de + push bc + push af + call GetMapMusic + ld a, [wMapMusic] + cp e + jr z, .jump + push de + ld de, $0000 + call PlayMusic + call DelayFrame + pop de + ld a, e + ld [wMapMusic], a + call PlayMusic +.jump + pop af + pop bc + pop de + pop hl + ret + +SpecialMapMusic:: ; 3E05 + ld a, [wPlayerState] + and a + jr z, .normal + cp $02 + jr z, .state2 + ld de, $0009 + scf + ret + +.state2 ; 3E14 + ld de, $0000 + scf + ret + +.normal ; 3E19 + and a + ret + +GetMapMusic:: ; 3E1B + call SpecialMapMusic + ret c + ld a, [wMapPermissions] + cp $01 + jr z, .jump + cp $03 + jr z, .jump + ld de, $0002 + ret +.jump ; 3E2E + ld de, $0007 + ret + +; 3E32, this is likely not a function.
\ No newline at end of file diff --git a/home/map.asm b/home/map.asm index 8105781..7c691cb 100644 --- a/home/map.asm +++ b/home/map.asm @@ -470,7 +470,7 @@ Function2407:: ; 00:2407 ld [wPlayerFacing], a ld a, $0 ld d, $0 - call Function19c0 + call SetObjectFacing ret MapSetup_Connection:: ; 2439 @@ -1593,7 +1593,7 @@ Function2a8d:: ; 00:2a8d dbbw $05, $33, Function14777 Function2ae5:: -.asm_2ae5: ; 00:2ae5 +.loop: ; 00:2ae5 ld hl, wJoypadFlags set 4, [hl] set 6, [hl] @@ -1608,33 +1608,31 @@ Function2ae5:: bit 7, [hl] res 7, [hl] ret nz - call Function38e3 + call TestWildBattleStart ret nz call OverworldStartButtonCheck ret nz - ld hl, PlaceWaitingText - ld a, $3 - call FarCall_hl + callab Functionc000 ldh a, [hMapEntryMethod] and a ret nz call Function2c4a - jr nc, .asm_2ae5 + jr nc, .loop callba Function824c ld a, [wc5ed] bit 6, a - jr nz, .asm_2ae5 + jr nz, .loop call CheckMovingOffEdgeOfMap ret c call WarpCheck ret c - jr .asm_2ae5 + jr .loop Function2b39:: ld hl, wJoypadFlags res 4, [hl] res 6, [hl] - ld hl, wce63 + ld hl, wDebugFlags res 6, [hl] res 7, [hl] ld hl, wVramState @@ -1714,8 +1712,8 @@ Function2ba8:: ; 00:2ba8 scf ret -Function2be5:: ; 00:2be5 - ld a, [wce63] +Function2be5:: ; 00:2be5 ; TODO + ld a, [wDebugFlags] bit 7, a ret nz ld a, [wMapGroup] diff --git a/home/map_objects.asm b/home/map_objects.asm index 70cba50..faa4bb9 100644 --- a/home/map_objects.asm +++ b/home/map_objects.asm @@ -315,6 +315,7 @@ UpdateSprites:: ; 00:17a8 ret GetObjectStruct:: ; 00:17bf +; Puts the start of the a'th object struct into bc ld bc, $28 ld hl, wObjectStructs call AddNTimes @@ -334,26 +335,27 @@ Function17cb:: call Bankswitch ret -Function17de:: +CheckNonTurningSprite:: ; 00:17de + ; sets carry flag if a is equal to any of the sprites below push hl push bc ld c, a ld b, $ff ld hl, .Data -.asm_17e6: ; 00:17e6 +.loop: ld a, [hli] cp b - jr z, .asm_17ee + jr z, .escape cp c - jr nz, .asm_17e6 + jr nz, .loop scf -.asm_17ee: ; 00:17ee +.escape: pop bc pop hl ret .Data: ; 00:17f1 - db $51, $55, $56, $57, $58, $5a, $5b, $ff + db SPRITE_KABIGON, SPRITE_POKE_BALL, SPRITE_POKEDEX, SPRITE_PAPER, SPRITE_OLD_LINK_RECEPTIONIST, SPRITE_EGG, SPRITE_BOULDER, $ff Function17f9:: call GetMapObject @@ -661,7 +663,8 @@ Function19b5:: res 7, [hl] ret -Function19c0:: +SetObjectFacing:: ; 19C0 + ; a is NPC number, d is direction push de call CheckObjectVisibility pop de diff --git a/home/misc_32c8.asm b/home/misc_32c8.asm index 8b423bb..00e41ce 100644 --- a/home/misc_32c8.asm +++ b/home/misc_32c8.asm @@ -78,7 +78,7 @@ WaitPressedAny:: ; 369a CountSetBits:: ; 36b1 ; Count the number of bits set in b bytes at hl. -; Return to a, c, and wce37. +; Return to a, c, and wCountSetBitsResult. ld c, $0 .asm_36b3: ; 00:36b3 ld a, [hli] @@ -94,5 +94,5 @@ CountSetBits:: ; 36b1 dec b jr nz, .asm_36b3 ld a, c - ld [wce37], a + ld [wCountSetBitsResult], a ret diff --git a/home/music.asm b/home/music.asm deleted file mode 100755 index 8d908f0..0000000 --- a/home/music.asm +++ /dev/null @@ -1,26 +0,0 @@ -SECTION "PlayMapMusic", ROM0[$3de1]
-
-PlayMapMusic: ; 00:3de1
- push hl
- push de
- push bc
- push af
- call GetMapMusic
- ld a, [wMapMusic]
- cp e
- jr z, .dont_play
- push de
- ld de, 0
- call PlayMusic
- call DelayFrame
- pop de
- ld a, e
- ld [wMapMusic], a
- call PlayMusic
-
-.dont_play
- pop af
- pop bc
- pop de
- pop hl
- ret
diff --git a/home/overworld.asm b/home/overworld.asm index 2b37b7c..51ba0f5 100644 --- a/home/overworld.asm +++ b/home/overworld.asm @@ -14,8 +14,8 @@ if DEBUG and (START | B_BUTTON) cp (START | B_BUTTON) jr nz, .regularMenu - ld a, [wce63] - bit 1, a + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a ret z ; debug disabled callba InGameDebugMenu jr CheckStartmenuSelectHook diff --git a/home/talk_to_npc.asm b/home/talk_to_npc.asm index 9ef5dd3..7f4452c 100644 --- a/home/talk_to_npc.asm +++ b/home/talk_to_npc.asm @@ -6,9 +6,9 @@ else SECTION "Unknown 3025", ROM0 [$2fe9] endc -Function3025:: +MapDefaultText:: ld hl, .Text - call Function3111 + call OpenTextbox ret .Text: ; 00:302c @@ -22,8 +22,8 @@ Function3036:: ; 3036 .Text: ; 00:303a db "@" -CallMapTextSubroutine:: - ld a, [wcdb0] +CallMapTextSubroutine:: ; 00:303b + ld a, [wTalkingTargetType] bit 0, a jr z, asm_3062 call Function3055 @@ -43,16 +43,16 @@ CallMapTextSubroutine:: Function3055:: ; 00:3055 ldh a, [hFFEA] ld b, a -.asm_3058: ; 00:3058 +.Loop: ; 00:3058 ld a, [hli] cp $ff ret z cp b - jp z, Function3240 - jr .asm_3058 + jp z, SetFFInAccumulator + jr .Loop asm_3062: ; 00:3062 - ld a, [wcdb0] + ld a, [wTalkingTargetType] bit 1, a ret z ld h, d @@ -71,28 +71,29 @@ asm_3062: ; 00:3062 jp hl Function307a:: ; 00:307a - ld hl, wcdb0 + ld hl, wTalkingTargetType res 0, [hl] res 1, [hl] - call Function3240 + call SetFFInAccumulator ret -Function3085:: ; 00:3085 +PrintTextboxDebugNumbers:: ; 00:3085 push hl push de push bc - ld de, $99 - ld a, [wcdb0] + ld de, $0099 ; default address to print from (not a sign or NPC) + ld a, [wTalkingTargetType] bit 0, a - jr z, .asm_3097 + jr z, .CheckSign ld de, hFFEA - jr .asm_309e + jr .PrintNum -.asm_3097: ; 00:3097 +.CheckSign: ; 00:3097 bit 1, a - jr z, .asm_309e + jr z, .PrintNum ld de, hFFEE -.asm_309e: ; 00:309e + +.PrintNum: ; 00:309e hlcoord 4, 12 lb bc, PRINTNUM_LEADINGZEROS | 1, 2 call PrintNumber @@ -105,17 +106,17 @@ Function3085:: ; 00:3085 pop hl ret -QueueMapTextSubroutine:: +QueueMapTextSubroutine:: ; 00:30b7 ldh a, [hJoyState] bit A_BUTTON_F, a - jp z, Function323e + jp z, ClearAccumulator ; if we didn't press a call GetFacingPersonText - jp nc, Function30e8 + jp nc, Function30e8 ; if not talking to a person ld d, $0 ld e, a - ld a, [wce63] - bit 1, a - call nz, Function3085 + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a + call nz, PrintTextboxDebugNumbers ; if debug, print these ld hl, wMapTextPtr ld a, [hli] ld h, [hl] @@ -128,14 +129,14 @@ QueueMapTextSubroutine:: inc de ld a, [hl] ld [de], a - ld hl, wcdb0 - set 0, [hl] - call Function3240 + ld hl, wTalkingTargetType + set 0, [hl] ; we're talking to an NPC + call SetFFInAccumulator ret Function30e8:: ; 00:30e8 call GetFacingSignpost - jp nc, Function323e + jp nc, ClearAccumulator ; if not facing person or sign ld a, e ldh [hFFEB], a ld a, d @@ -144,14 +145,217 @@ Function30e8:: ; 00:30e8 ldh [hFFED], a ld a, [hl] ldh [hFFEE], a - ld hl, wcdb0 - set 1, [hl] - call Function3240 + ld hl, wTalkingTargetType + set 1, [hl] ; we're talking to a sign + call SetFFInAccumulator ret GetFacingPersonText:: ; 00:3103 callba Function776e ret nc - call Function319b + call TurnNPCTalkingTo scf ret + +OpenTextbox:: ; 00:3111 + ; Opens a textbox and waits for input + push hl + call PrepareTextbox + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a + call nz, PrintTextboxDebugNumbers + pop hl + call TextboxIdle + ret + +OpenTextboxNoInput:: ; 00:3122 + push hl + call PrepareTextbox + pop hl + +TextboxIdle:: ; 00:3127 + ; Prints text, then waits for A or B to be pressed, unless bit 5 of JoypadFlags is set. + call PrintTextBoxText +.Loop + ld a, [wJoypadFlags] + bit 5, a + res 5, a + ld [wJoypadFlags], a + jr nz, .Escape + call GetJoypad + ldh a, [hJoyDown] + and A_BUTTON | B_BUTTON + jr nz, .Escape + call UpdateTime + call UpdateTimeOfDayPalettes + call DelayFrame + jr .Loop +.Escape + call TextboxCleanup + ret + +PrepareTextbox:: ; 00:314E + call ClearWindowData + ldh a, [hROMBank] + push af + ld a, 01 + call Bankswitch + call ReanchorBGMap_NoOAMUpdate + hlcoord 0, 12 ;in the tilemap in WRAM + ld b, 04 + ld c, $12 + call DrawTextBox + call WaitBGMap + call LoadFonts_NoOAMUpdate + pop af + call Bankswitch + ret + +TextboxCleanup: ; 00:3171 + callab ReanchorBGMap_NoOAMUpdate + call UpdateSprites + xor a + ldh [hBGMapMode], a + ld a, $90 + ldh [hWY], a + call Function318f + ld hl, wToolgearFlags + res 7, [hl] + call InitToolgearBuffer + ret + +Function318f: ; 00:318f + callab Function140ea + call Function0d02 + ret + +TurnNPCTalkingTo:: ; 00:319b + ; If an NPC is allowed to turn when talked to, turn it. + ldh a, [hObjectStructIndexBuffer] + call GetObjectStruct + ld hl, OBJECT_SPRITE + add hl, bc + ld a, [hl] + call CheckNonTurningSprite + jr c, .Jump + ld a, [wPlayerWalking] + xor 04 + ld hl, OBJECT_DIRECTION_WALKING + add hl, bc + ld [hl], a + push bc + call UpdateSprites + pop bc +.Jump + ld hl, OBJECT_MAP_OBJECT_INDEX + add hl, bc + ld a, [hl] + sub 02 + ldh [hFFEA], a + ret + +Function31C3:: ; 00:31C3 + ret + +CheckInlineTrainer:: ; 00:31C4 + ; Passed de is the pointer to a map_object struct. If it's an inline trainer, write to relevant wram region. + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, de + ld a, [hl] + call GetObjectStruct + call GetInlineMapObject + jr nc, .Escape + ld hl, MAPOBJECT_POINTER_HI + add hl, de + ld a, [hl] + cp b + jr c, .Escape + ld hl, MAPOBJECT_OBJECT_STRUCT_ID + add hl, de + ld a, [hl] + add a, a + ld hl, wCurrMapInlineTrainers + add a, l + ld l, a + jr nc, .NoCarry + inc h +.NoCarry + ld [hl], b + inc hl + ld [hl], c +.Escape + ret + +GetInlineMapObject:: ; 00:31EB + ;bc is start of object struct. if c flag set, returns distance in B and direction in C + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [wPlayerStandingMapX] + cp [hl] + jr z, .EqualX + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld a, [wPlayerStandingMapY] + cp [hl] + jr z, .EqualY + and a + ret +.EqualX + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld a, [wPlayerStandingMapY] + sub [hl] + jr z, .Reset + jr nc, .SetDown + cpl + inc a + ld b, a + ld c, UP + scf + ret +.SetDown ; 3214 + ld b, a + ld c, DOWN + scf + ret +.EqualY ; 3219 + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [wPlayerStandingMapX] + sub [hl] + jr z, .Reset ; (this condition is impossible to meet) + jr nc, .SetRight + cpl + inc a + ld b, a + ld c, LEFT + scf + ret +.SetRight ; 322C + ld b, a + ld c, RIGHT + scf + ret +.Reset ; 3231 + and a + ret + +CheckBPressedDebug: ; 3233 + ; If in debug mode, returns a check on the B button. + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a + ret z + ldh a, [hJoyState] + bit B_BUTTON_F, a + ret + +ClearAccumulator:: ; 323E + xor a + ret + +SetFFInAccumulator:: ; 3240 + xor a + dec a + ret + +; 3243 diff --git a/home/text.asm b/home/text.asm index b3cd75c..5d5f607 100644 --- a/home/text.asm +++ b/home/text.asm @@ -156,7 +156,7 @@ ENDM dict "<TM>", TMChar dict "<TRAINER>", TrainerChar dict "<CONT>", ContText - dict "<……>", SixDotsChar + dict "<⋯⋯>", SixDotsChar dict "<DONE>", DoneText dict "<PROMPT>", PromptText dict "<GA>", GaCharacter @@ -244,7 +244,7 @@ ENDM PrintMomsName:: print_name wMomsName PrintPlayerName:: print_name wPlayerName -PrintRivalName:: print_name wRivalsName +PrintRivalName:: print_name wRivalName TrainerChar:: print_name TrainerCharText TMChar:: print_name TMCharText @@ -287,7 +287,7 @@ TrainerCharText:: db "トレーナー@" PCCharText:: db "パソコン@" RocketCharText:: db "ロケットだん@" POKeCharText:: db "ポケモン@" -SixDotsCharText:: db "……@" +SixDotsCharText:: db "⋯⋯@" EnemyText:: db "てきの @" GaCharacterTExt:: db "が @" @@ -680,7 +680,7 @@ Text_TX_DOTS: ; 11e1 (0:11e1) ld h, b ld l, c .loop - ld a, "…" + ld a, "⋯" ld [hli], a push de call GetJoypad diff --git a/home/time.asm b/home/time.asm index 3eba96c..d82235d 100644 --- a/home/time.asm +++ b/home/time.asm @@ -32,8 +32,8 @@ UpdateTime:: ; 436 (0:0436) and $1f ldh [hRTCHours], a call CloseSRAM - ld a, [wce63] - bit 1, a + ld a, [wDebugFlags] + bit DEBUG_FIELD_F, a jr z, .asm_0478 ld a, [wd153] bit 7, a diff --git a/home/unknown.asm b/home/unknown.asm index 6568b5d..3962377 100644 --- a/home/unknown.asm +++ b/home/unknown.asm @@ -53,10 +53,8 @@ Function094c:: push af ld a, BANK(Functionfe255) call Bankswitch - call Functionfe255 pop af call Bankswitch - - jp Function4031 + jp DebugMenu diff --git a/home/unknown_388f.asm b/home/unknown_388f.asm index 453c2f8..1182506 100644 --- a/home/unknown_388f.asm +++ b/home/unknown_388f.asm @@ -49,19 +49,19 @@ Function38d8:: ld [wd637], a ret -Function38e3:: +TestWildBattleStart:: ldh a, [hJoyState] - and $f0 - ret z - call Function3233 - jp nz, Function323e + and D_PAD + ret z ; if no directions are down, don't try and trigger a wild encounter + call CheckBPressedDebug + jp nz, ClearAccumulator ; if b button is down, clear acc callab Function3ee3e ld a, [wBattleMode] and a - ret z + ret z ; if no battle, return ld a, $3 call WriteIntod637 - call Function3240 + call SetFFInAccumulator ret Function3904:: @@ -92,7 +92,7 @@ Function3920:: ld hl, wJoypadFlags res 4, [hl] ld hl, .text - call Function3111 + call OpenTextbox call RotateFourPalettesLeft jp Init diff --git a/home/util.asm b/home/util.asm index 880513b..ccc990a 100644 --- a/home/util.asm +++ b/home/util.asm @@ -65,12 +65,13 @@ SkipNames:: ; 341f ret AddNTimes:: ; 3429 (0:3429) +; Adds bc to hl, a times and a ret z -.asm_342b +.loop add hl, bc dec a - jr nz, .asm_342b + jr nz, .loop ret ; 0x3430 diff --git a/home/window.asm b/home/window.asm index c2dc212..9e86453 100644 --- a/home/window.asm +++ b/home/window.asm @@ -17,7 +17,7 @@ RefreshScreen:: ret Function1fea:: - call Function3171 + call TextboxCleanup call ClearWindowData call InitToolgearBuffer ret diff --git a/maps/Map13.asm b/maps/Map13.asm new file mode 100644 index 0000000..b69dc4b --- /dev/null +++ b/maps/Map13.asm @@ -0,0 +1,26 @@ +include "constants.asm" + +SECTION "Map 13 Script", ROMX[$6078], BANK[$34] + +Map13ScriptLoader:: ; 6078 + ld hl, Map13ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Map13ScriptPointers: ; 6082 + dw Map13Script + dw Map13NPCIDs + +Map13NPCIDs: ; 6086 + db $FF + +Map13TextPointers: ; 6087 + dw MapDefaultText + dw MapDefaultText + +Map13Script: ; 608B + ld hl, Map13NPCIDs + ld de, Map13TextPointers + call CallMapTextSubroutine + ret
\ No newline at end of file diff --git a/maps/PlayersHouse1F.asm b/maps/PlayersHouse1F.asm new file mode 100644 index 0000000..5157d63 --- /dev/null +++ b/maps/PlayersHouse1F.asm @@ -0,0 +1,60 @@ +include "constants.asm" + +SECTION "Player's House 1F", ROMX[$409C], BANK[$34] + +PlayersHouse1FScriptLoader:: ; 409C + ld hl, PlayersHouse1FScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +PlayersHouse1FScriptPointers: ; 40A6 + dw PlayersHouse1FScript1 + dw PlayersHouse1FNPCIDs1 + dw PlayersHouse1FScript2 + dw PlayersHouse1FNPCIDs2 + +PlayersHouse1FNPCIDs1: ; 40AE + db $FF + +PlayersHouse1FNPCIDs2: ; 40AF + db 0 + db $FF + +PlayersHouse1FScript1: ; 40B1 + ld hl, PlayersHouse1FNPCIDs1 + ld de, PlayersHouse1FTextPointers + call CallMapTextSubroutine + ret + +PlayersHouse1FScript2: ; 40BB + ld hl, PlayersHouse1FNPCIDs2 + ld de, PlayersHouse1FTextPointers + call CallMapTextSubroutine + ret + +PlayersHouse1FTextPointers: ; 40C5 + dw Function38ab + dw Function38b4 + dw Function38a2 + dw Function38bd + dw Function3899 + dw PlayersHouse1FNPCText1 + +PlayersHouse1FNPCText1: ; 40D1 + ld hl, PlayersHouse1FTextString1 + call OpenTextbox + ret + +PlayersHouse1FTextString1: ; 40D8 + text "おかあさん『えっ あなた" + line "オーキドはかせに" + cont "ポケモンずかんを つくってくれって" + cont "たのまれたの?" + + para "すごいじゃない!" + line "わたしも ポケモン きらいって" + cont "わけじゃないし がんばるのよ!" + done + +; 4132
\ No newline at end of file diff --git a/maps/PlayersHouse2F.asm b/maps/PlayersHouse2F.asm new file mode 100644 index 0000000..e96a07b --- /dev/null +++ b/maps/PlayersHouse2F.asm @@ -0,0 +1,263 @@ +include "constants.asm" + +SECTION "Player's House 2F", ROMX[$418B], BANK[$34] + +PlayersHouse2FScriptLoader:: ; 418B + ld hl, PlayersHouse2FScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +PlayersHouse2FScriptPointers: ; 4195 + dw PlayersHouse2FScript1 + dw PlayersHouse2FNPCIDs1 + dw PlayersHouse2FScript2 + dw PlayersHouse2FNPCIDs2 + dw PlayersHouse2FScript3 + dw PlayersHouse2FDollText + +PlayersHouse2FNPCIDs1: ; 41A1 + db 0 + db 1 + db $FF + +PlayersHouse2FNPCIDs2: ; 41A4 + db 1 + db $FF + +PlayersHouse2FTextPointers: ; 41A6 + dw Function3899 + dw PlayersHouse2FRadioText + dw PlayersHouse2FComputerText + dw Function3899 + dw PlayersHouse2FN64Text + +PlayersHouse2FScript1: ; 41B0 + call PlayersHouse2PositionCheck + ret z + ld hl, PlayersHouse2FNPCIDs1 + ld de, PlayersHouse2FTextPointers + call CallMapTextSubroutine + ret nz + ret + +PlayersHouse2PositionCheck: ; 41BF + ld hl, wd41a + bit 0, [hl] + ret nz + ld a, [wYCoord] + cp 1 + ret nz + ld a, [wXCoord] + cp 9 + ret nz + ld hl, wJoypadFlags + set 6, [hl] + ld a, LEFT + ld d, 0 + call SetObjectFacing + ld hl, PlayersHouse2FTextString2 + call OpenTextbox + call PlayersHouse2FMovePlayer + call ClearAccumulator + ret + +PlayersHouse2FMovePlayer: ; 41EA + ld a, 0 + ld hl, Movement + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ret + +Movement: ; 41FD + db $08 + db $04 + db $32 + +PlayersHouse2FScript2: ; 4200 + ld hl, PlayersHouse2FNPCIDs2 + ld de, PlayersHouse2FTextPointers + call CallMapTextSubroutine + ret + +PlayersHouse2FScript3: ; 420A + ld hl, wd41a + bit 3, [hl] + jr nz, .jump + ld hl, PlayersHouse2FTextString1 + call OpenTextbox + ld hl, wd41a + set 3, [hl] + ld c, 3 + call DelayFrames +.jump + ld hl, PlayersHouse2FTextString2 + call OpenTextbox + ret + +PlayersHouse2FDollText: ; 4228 + ld hl, PlayersHouse2FTextString3 + call OpenTextbox + ret + +PlayersHouse2FRadioText: ; 422F + ld hl, PlayersHouse2FTextString9 + call OpenTextbox + ret + +PlayersHouse2FComputerText: ; 4236 + ld hl, wd41a + bit 0, [hl] + jr nz, .jump + ld hl, PlayersHouse2FTextString5 + call OpenTextbox + ret + +.jump +; 4244 + call RefreshScreen + callab Function1477D + call Function1fea + ret + +PlayersHouse2FCheckEmail: ; 4253 + call YesNoBox + jr c, .jump2 + ld hl, wd41a + set 0, [hl] + ld hl, PlayersHouse2FTextString6 + call PrintText + ret + +.jump2 +; 4264 + ld hl, PlayersHouse2FTextString7 + call PrintText + ret + +PlayersHouse2FN64Text: ; 426B + ld hl, PlayersHouse2FTextString4 + call OpenTextbox + ret + +PlayersHouse2FTextString1: ; 4272 + text "ケン『おっ おまえの うでで" + line "ひかりかがやく そのとけいは⋯⋯" + cont "<PLAYER>も ついに" + cont "トレーナーギアを かったのか!" + + para "すごいじゃないか!" + line "でも かったばかりじゃ じかんしか" + cont "わからないだろ?" + cont "あとで マップが" + cont "みられるように してやるよ!" + cont "おまえ どうせ" + cont "あそびに いくんだろう?" + + para "ざんねんながら おふくろは" + line "かいものに いってるから" + cont "おこづかいを もらおうなんて" + cont "きょうは むり だぜ!" + done + +PlayersHouse2FTextString2: ; 4332 + text "そうだ おまえの パソコンに" + line "メールが とどいていたな" + cont "でかけるんなら" + cont "メールぐらい よんでおけよ" + done + +PlayersHouse2FTextString3: ; 4365 + text "クりスマスに カントーの" + line "しんせきに プレゼント" + cont "してもらった にんぎょうだ" + done + +PlayersHouse2FTextString4: ; 438D + text "ニンテンドウ64を してる!" + cont "⋯⋯ ⋯⋯ さてと!" + cont "そろそろ そとに あそびに" + cont "でかけるか!" + done + +PlayersHouse2FTextString5: ; 43BD + text "<PLAYER>は" + line "パソコンの スイッチを いれた!" + + para "おや? <PLAYER>あてに" + line "メールが とどいている ようだ" + cont "よんでみる?@" + + db $08 + +; 43F3 + call PlayersHouse2FCheckEmail + call Function3036 + ret + +PlayersHouse2FTextString6: ; 43FA + text "とつぜん メールを さしあげる" + line "しつれいを おゆるしあれ" + + para "じつは きみに どうしても" + line "わたしたい ものが あるのじゃが" + cont "うけとって もらえんかのう" + cont "ポケモンけんきゅうしゃ オーキド" + done + +PlayersHouse2FTextString7: ; 4456 + text "あとで" + line "よもっと<⋯⋯>" + done + +PlayersHouse2FTextString8: ; 4461 (unused?) + text "しんはつばい トレーナーギア!" + line "ポケモントレーナーの ための" + cont "さいせんたんの とけい です" + + para "じかんが わかるのは あたりまえ" + line "カセットを ついかすれば" + cont "ばしょも わかる! " + cont "でんわが かけられる!" + + para "とどめは" + line "ラジオを きくことができる!" + + para "もうしこみさきは⋯⋯" + line "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯" + cont "シルフの ホームぺージだ" + done + +PlayersHouse2FTextString9: ; 44FE + text "<PLAYER>は" + line "ラジオのスイッチを おした!" + + para "ジェイ オー ピー エム" + line "こちらは" + cont "# ほうそうきょく です" + + para "#ニュースを おおくりします" + line "<⋯⋯> #の せかいてきな" + cont "けんきゅうしゃ オーキドはかせが" + cont "カントー から" + cont "すがたを けしました" + cont "あらたな けんきゅうの ばしょを" + cont "もとめて いどうした との" + cont "みかたも ありますが" + cont "なんらかの じけんに まきこまれた" + cont "かのうせいも あり" + cont "かんけいしゃは とても" + cont "しんぱい しています" + + para "<⋯⋯><⋯⋯>いじょう" + line "#ニュースでした" + + para "<⋯⋯><⋯⋯><⋯⋯><⋯⋯><⋯⋯><⋯⋯>" + line "それでは ひきつづき" + cont "おんがくを おたのしみ ください" + done + +; 45FF
\ No newline at end of file diff --git a/maps/Route1Gate1F.asm b/maps/Route1Gate1F.asm new file mode 100644 index 0000000..4772da7 --- /dev/null +++ b/maps/Route1Gate1F.asm @@ -0,0 +1,55 @@ +include "constants.asm" + +SECTION "Route 1 Gate 1F", ROMX[$4061], BANK[$26] + +Route1Gate1FScriptLoader: ;4061 + ld hl, Route1Gate1FScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Route1Gate1FScriptPointers: + dw Route1Gate1FScript ;>> routine + dw Route1Gate1FNPCIDs ;>> data + +Route1Gate1FNPCIDs: ; 406F + db $00 + db $01 + db $FF + +Route1Gate1FTextPointers: + dw MapDefaultText ;no signs + dw Route1Gate1FText1 + dw Route1Gate1FText2 + +Route1Gate1FScript: ; 4078 + ld hl, Route1Gate1FNPCIDs + ld de, Route1Gate1FTextPointers + call CallMapTextSubroutine + ret + +Route1Gate1FText1: ; 4082 + ld hl, Route1Gate1FText1String + call OpenTextbox + ret + +Route1Gate1FText2: ; 4089 + ld hl, Route1Gate1FText2String + call OpenTextbox + ret + +Route1Gate1FText1String: ; 4090 + text "このゲートを ぬけると" + line "すぐに オールドシティ です" + done + +Route1Gate1FText2String: ; 40AC + text "オールドシティには" + line "あの ゆうめいな" + cont "ごじゅうのとう が あるの" + + para "いってみたこと ある?" + done + +;ends at 40D9 + diff --git a/maps/Route1Gate2F.asm b/maps/Route1Gate2F.asm new file mode 100644 index 0000000..0ab81a8 --- /dev/null +++ b/maps/Route1Gate2F.asm @@ -0,0 +1,86 @@ +include "constants.asm" + +SECTION "Route 1 Gate 2F", ROMX[$411F], BANK[$26] + +Route1Gate2FScriptLoader:: ; 411F + ld hl, Route1Gate2FScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Route1Gate2FScriptPointers: ; 4129 + dw Route1Gate2FScript + dw Route1Gate2FNPCIDs + +Route1Gate2FNPCIDs: ; 412D + db 0 + db 1 + db $FF + +Route1Gate2FTextPointers: ; 4130 + dw Route1Gate2FTextSign1 + dw Route1Gate2FTextSign2 + dw Route1Gate2FTextNPC1 + dw Route1Gate2FTextNPC2 + +Route1Gate2FScript:: ; 4138 + ld hl, Route1Gate2FNPCIDs + ld de, Route1Gate2FTextPointers + call CallMapTextSubroutine + ret + +Route1Gate2FTextNPC1: ; 4142 + ld hl, Route1Gate2FTextString1 + call OpenTextbox + ret + +Route1Gate2FTextNPC2: ; 4149 + ld hl, Route1Gate2FTextString2 + call OpenTextbox + ret + +Route1Gate2FTextSign1: ; 4150 + ld hl, Route1Gate2FTextString3 + call OpenTextbox + ret + +Route1Gate2FTextSign2: ; 4157 + ld hl, Route1Gate2FTextString4 + call OpenTextbox + ret + +Route1Gate2FTextString1: ; 415E + text "ガンテツさんって しってる?" + + para "ガンテツさんに" + line "きに いられるように なれば" + cont "トレーナーとして たいしたもの よ" + done + +Route1Gate2FTextString2: ; 4197 + text "あなた かんこうで きたの?" + line "なら ざんねんね" + + para "オールドシティの" + line "ごじゅうのとう は" + cont "だれでも はいれる って" + cont "ものじゃないわ" + done + +Route1Gate2FTextString3: ; 41D8 + text "<PLAYER>は" + line "ぼうえんきょうを のぞいた!" + + para "むむむ!" + line "たかーい とう が みえる!" + done + +Route1Gate2FTextString4: ; 41FF + text "<PLAYER>は" + line "ぼうえんきょうを のぞいた!" + + para "むむ?" + line "ながーい かわ が みえる" + done + +; 4224
\ No newline at end of file diff --git a/maps/Route1P1.asm b/maps/Route1P1.asm new file mode 100644 index 0000000..d67ffd9 --- /dev/null +++ b/maps/Route1P1.asm @@ -0,0 +1,75 @@ +include "constants.asm" + +SECTION "Route 1 East", ROMX[$7B98], BANK[$36] + +Route1P1ScriptLoader:: ; 7B98 + ld hl, Route1P1ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Route1P1ScriptPointers: ; 7BA2 + dw Route1P1Script + dw Route1P1NPCIDs + +Route1P1NPCIDs: ; 7BA6 + db 0 + db 1 + db $FF + +Route1P1TextPointers: ;7BA9 + dw Route1P1TextSign1 + dw Route1P1TextSign2 + dw Route1P1TextNPC1 + dw Route1P1TextNPC2 + +Route1P1Script:: ; 7BB1 + ld hl, Route1P1NPCIDs + ld de, Route1P1TextPointers + call CallMapTextSubroutine + ret + +Route1P1TextNPC1: ; 7BBB + ld hl, Route1P1TextString1 + call OpenTextbox + ret + +Route1P1TextNPC2: ; 7BC2 + ld hl, Route1P1TextString2 + call OpenTextbox + ret + +Route1P1TextSign1: ; 7BC9 + ld hl, Route1P1TextString3 + call OpenTextbox + ret + +Route1P1TextSign2: ; 7BD0 + ld hl, Route1P1TextString4 + call OpenTextbox + ret + +Route1P1TextString1: ; 7BD7 + text "しょうねん!" + + para "モンスターボールは" + line "やせいの ポケモンを よわらせてから" + cont "つかうのが きほんだ!" + done + +Route1P1TextString2: ; 7C08 + text "ぼく ゆうがた じゅくの かえりに" + line "かわった ポケモンを みたよ" + done + +Route1P1TextString3: ; 7C2A + text "このさき しずかな おか" + line "やせいの ポケモンに ちゅうい" + done + +Route1P1TextString4:; 7C48 + text "ここは 1ばん どうろ" + line "サイレントヒル ⋯⋯ オールドシティ" + done + +; 7C68
\ No newline at end of file diff --git a/maps/Route1P2.asm b/maps/Route1P2.asm new file mode 100644 index 0000000..9fa72ec --- /dev/null +++ b/maps/Route1P2.asm @@ -0,0 +1,117 @@ +include "constants.asm" + +SECTION "Route 1 West", ROMX[$7C68], BANK[$36] + +Route1P2ScriptLoader:: ; 7C67 + ld hl, Route1P2ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +Route1P2ScriptPointers: + dw Route1P2Script + dw Route1P2NPCIDs + +Route1P2NPCIDs: ; 7C76 + db $00 + db $01 + db $FF + +Route1P2TextPointers: + dw Route1P2TextSign1 + dw Route1P2Text1 + dw Route1P2Text2 + +Route1P2Script:: ; 7C7F + ld a, [wYCoord] + cp $06 + jr nz, .skipCheck + ld a, [wXCoord] + cp $09 + jr nz, .skipCheck + ld a, 0 ; player + ld d, LEFT + call SetObjectFacing + ld a, 2 + ld d, RIGHT + call SetObjectFacing + jr .endDemo +.skipCheck + ld hl, Route1P2NPCIDs ;data + ld de, Route1P2TextPointers ;start of textld pointers? + call CallMapTextSubroutine + ret + +.endDemo +Route1P2Text1: ; 7CA7 + ld hl, Route1P2TextString4 + call OpenTextbox + call RotateFourPalettesLeft + jp Init + +Route1P2Text2: ; 7CB3 + ld hl, $D3A2 ; trainer flags? + bit 1, [hl] + jr nz, .Text2Jump ; already fought + ld hl, Route1P2TextString1 + call OpenTextbox + ld hl, $D3A2 + set 1, [hl] + ld a, $3C + ld [wce02], a + ld a, $02 + ld [wce05], a + ld hl, wc5ed + set 7, [hl] + ld a, $08 + ld [wd637], a + ret + +.Text2Jump +Route1P2Text3: ; 7CDA + ld hl, Route1P2TextString3 + call OpenTextbox + ret + +Route1P2TextSign1: ; 7CE1 + ld hl, Route1P2TextString5 + call OpenTextbox + ret + +Route1P2TextString1: ; 7CE8 + text "まあ かわいらしい トレーナーやこと" + line "うちと ポケモン しはります?" + done + +Route1P2TextString2: ; 7D0C (unused?) + text "いやあ かんにんやわあ" + done + +Route1P2TextString3: ; 7D19 + text "かわいい かおして つよおすなあ" + line "その ちょうしで おきばりやす" + done + +Route1P2TextString4: ; 7D3B + text "シゲル『おっ サトシじゃないか!" + + para "なんとか ここまで これた" + line "って かんじだな" + + para "じつりょくが ないのに" + line "むり するなよな" + + para "もっと ポケモン あつめるとか" + line "いろんな ポケモン そだてるとか" + cont "やること あるだろ?" + + para "ここで ひきかえしたほうが いいぜ!" + line "じゃあな" + done + +Route1P2TextString5: ; 7DBD + text "ここは 1ばん どうろ" + line "サイレントヒル ⋯⋯ オールドシティ" + done + +;7DDD
\ No newline at end of file diff --git a/maps/SilentHills.asm b/maps/SilentHills.asm new file mode 100644 index 0000000..ed7639c --- /dev/null +++ b/maps/SilentHills.asm @@ -0,0 +1,420 @@ +include "constants.asm" + +SECTION "Silent Hills Script", ROMX[$7669], BANK[$36] + +SilentHillsScriptLoader:: ; 7669 + ld hl, SilentHillsScriptPointers1 + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentHillsNPCIDs1: ; 7673 + db 0 + db 2 + db 3 + db $FF + +SilentHillsNPCIDs2: ; 7677 + db 2 + db 3 + db $FF + +SilentHillsNPCIDs3: ; 767A + db 1 + db 2 + db 3 + db $FF + +SilentHillsScriptPointers1: ; 767E + dw SilentHillsScript1 + dw SilentHillsNPCIDs1 + +SilentHillsScriptPointers2: ; 7682 + dw SilentHillsScript2 + dw SilentHillsNPCIDs1 + +SilentHillsScriptPointers3: ; 7686 + dw SilentHillsScript3 + dw SilentHillsNPCIDs1 + +SilentHillsScriptPointers4: ; 768A + dw SilentHillsScript4 + dw SilentHillsNPCIDs2 + +SilentHillsScriptPointers5: ; 768E + dw SilentHillsScript5 + dw SilentHillsNPCIDs3 + +SilentHillsScriptPointers6: ; 7692 + dw SilentHillsScript6 + dw SilentHillsNPCIDs2 + +SilentHillsScriptPointers7: ; 7696 + dw SilentHillsScript7 + dw SilentHillsNPCIDs2 + +SilentHillsScript1: ; 769A + ld a, [wYCoord] + cp 5 + ret nz + ld a, [wXCoord] + cp 5 + ret nz + ld hl, wJoypadFlags + set 4, [hl] + ld a, 02 + call Function17f9 + ld a, 02 + ld hl, SilentHillsMovement1 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentHillsMovement1: ; 76C8 + db $0D + db $0D + db $0D + db $09 + db $05 + db $02 + db $32 + +SilentHillsScript2: ; 76CF + ld a, 0 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentHillsTextRival1 + call OpenTextbox + ld hl, SilentHillsTextRival2 + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 2 + ld hl, SilentHillsMovement2 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ld a, 2 + ld [wMapScriptNumber], a + ret + +SilentHillsMovement2: ; 76FF + db $00, $04, $08, $0C, $0C, $0C, $33 + +SilentHillsScript3: ;7706 + call Function1848 + ld a, 3 + ld [wMapScriptNumber], a + call InitUnknownBuffercc9e + ret + +SilentHillsScript4: ; 7712 + ld a, [wXCoord] + cp 0 + jr nz, .bigjump + ld a, [wYCoord] + cp 8 + jr z, .jump + cp 09 + jr nz, .bigjump +.jump + call Function776a + ld hl, SilentHillsTextNorthExit + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 3 + call Function15ed + ld a, 3 + call Function17f9 + ld a, [wYCoord] + cp 9 + jr z, .jump2 + ld hl, SilentHillsMovement3 + jr .skip +.jump2 + ld hl, SilentHillsMovement4 +.skip + ld a, 03 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ld a, 4 + ld [wMapScriptNumber], a + ret + +.bigjump + ld hl, SilentHillsNPCIDs2 + ld de, SilentHillsTextPointers + call CallMapTextSubroutine + ret + +Function776a: ; 776A + ld hl, wd41a + set 7, [hl] + ld a, 1 + ld hl, wd29d + ld [hl], a + ret + +SilentHillsMovement3: ; 7776 + db $0A, $0A, $0A, $09, $0A, $06, $02, $32 + +SilentHillsMovement4: ; 777E + db $0A, $0A, $0A, $0A, $06, $02, $32 + +SilentHillsScript5: ; 7785 + ld a, 0 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentHillsTextPokemonInGrassString + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 3 + call Function17f9 + ld a, 0 + call Function186a + ld b, 3 + ld c, 0 + call StartFollow + ld a, [wYCoord] + cp 9 + jr z, .jump + ld hl, SilentHillsMovement5 + jr .skip +.jump + ld hl, SilentHillsMovement6 +.skip + ld a, 3 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ld a, 5 + ld [wMapScriptNumber], a + ret + +SilentHillsMovement5: ; 77CC + db $0B, $0B, $0B, $0B, $0B, $0B, $08, $08, $08, $08, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $05, $33 + +SilentHillsMovement6: ; 77E0 + db $0B, $0B, $0B, $0B, $0B, $0B, $08, $08, $08, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $0B, $05, $33 + +SilentHillsScript6: ; 77F3 + ld hl, SilentHillsNPCIDs2 + ld de, SilentHillsTextPointers + call CallMapTextSubroutine + ld hl, wd41b + bit 2, [hl] + ret z + ld a, $12 + ld [wd29d], a + ld a, 6 + ld [wMapScriptNumber], a + ret + +SilentHillsScript7: ; 780D + call CheckLabDoor + ret z + ld hl, SilentHillsNPCIDs2 + ld de, SilentHillsTextPointers + call CallMapTextSubroutine + ret + +CheckLabDoor: ; 781B + ld a, [wYCoord] + cp $C + ret nz + ld a, [wXCoord] + cp $E + jr z, .jump + ld a, [wXCoord] + cp $F + ret nz +.jump + ldh a, [hJoyState] + bit 6, a + ret z + ld a, 0 + ld d, UP + call SetObjectFacing + ld hl, wJoypadFlags + set 6, [hl] + ld hl, SilentHillsTextString1 + call OpenTextbox + call LabClosed + call ClearAccumulator + ret + +LabClosed: ; 784C + ld a, 0 + ld hl, SilentHillsMovement7 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + ret + +SilentHillsTextString1: ; 785F + text "あれ? カギが かかっている" + done + +SilentHillsMovement7: ; 786F + db $04, $32 + +SilentHillsTextPointers: ; 7871 + dw SilentHillsPlayerHouseText + dw Function38c6 + dw SilentHillsSignText1 + dw SilentHillsLabText + dw SilentHillsRivalHouseText + +SilentHillsLabText: ; 787B + ld hl, SilentHillsTextString2 + call OpenTextbox + ret + +SilentHillsTextString2: ; 7882 + text "にゅうきょしゃ ぼしゅうちゅう!" + done + +SilentHillsSignText1: ; 7894 + ld hl, SilentHillsTextString3 + call OpenTextbox + ret + +SilentHillsTextString3: ; 789B + text "ここは サイレント ヒル" + line "しずかな おか" + done + +SilentHillsPlayerHouseText: ; 78B1 + ld hl, SilentHillsTextString4 + call OpenTextbox + ret + +SilentHillsTextString4: ; 78B8 + text "ここは <PLAYER> のいえ" + done + +SilentHillsRivalHouseText: ; 78C3 + ld hl, SilentHillsTextString5 + call OpenTextbox + ret + +SilentHillsTextString5: ; 78CA + text "ここは <RIVAL> のいえ" + done + +; 78D5 + dw SilentHillsTextRival1 ; west + dw SilentHillsTextNorthExit ; north + dw SilentHillsTextBackpack ; npc1 + dw SilentHillsTextPokemonHate ; npc2 + +SilentHillsTextRival1: ; 78DD + text "<RIVAL>『よう ちょっと おまえに" + cont "じまん したいことが" + cont "あってきたんだよ" + + para "おれ あの ゆうめいなオーキドから" + line "メール もらっちゃった!" + cont "え? おまえにも きたの?" + cont "ちぇっ! つまんねーの!" + + para "⋯⋯ふん!" + line "じゃあさ じゃあさー おまえさー" + cont "じぶんの ははおや のこと" + cont "いつも なんて よんでる?@" + + db $08 + +LoadMomNamePromptUnused: ; 796F + call LoadStandardMenuHeader + callab MomNamePrompt + call CloseWindow + call GetMemSGBLayout + call UpdateSprites + call UpdateTimePals + jp Function3036 + +MomNameMenuHeaderUnused: ; 7989 + db MENU_BACKUP_TILES ; flags + menu_coords 00, 00, 10, 11 + dw .MomNameMenuDataUnused + db 01 ; initial selection + +.MomNameMenuDataUnused: ; 7991 + db STATICMENU_CURSOR + db 04 ; items + db "じぶんで きめる@" + db "おかあさん @" + db "ママ@" + db "かあちゃん@" + +SilentHillsTextRival2: ; 79AC - BYTE OFF + text "<RIVAL>『えー かっこわりい!" + line "そんな こどもっぽい" + cont "よびかた してるなんて" + cont "おわらいだぜ!" + cont"あー ちょっとだけ すっきりした!" + + para "そんじゃあ" + line "おれは ひとあし おさきに" + cont "オーキドのところへ" + cont "いくことに するぜ!" + done + +SilentHillsTextNorthExit: ; 7A14 + text "ちょいまち!" + line "まってよ! まてっ てば!" + done + +SilentHillsTextPokemonInGrassString: ; 7A2A + text "きみは まったく" + line "なんにも しらないんだね!" + cont "くさむらでは" + cont "やせいの ポケモンが とびだす!" + + para "じぶんも ポケモンを" + line "もって いれば" + cont "たたかえるんだ⋯⋯" + + para "あっ! ひょっとして きみは" + line "⋯⋯ちょっと" + cont "ぼくに ついて きて!" + done + +SilentHillsTextBackpack: ; 7A99 + ld hl, SilentHillsTextBackpackString + call OpenTextbox + ret + +SilentHillsTextBackpackString: ; 7AA0 + text "あなたの りュック かっこいいわよ" + line "どこで てに いれたの?" + done + +SilentHillsTextPokemonHate: ; 7AC0 + ld hl, SilentHillsTextPokemonHateString + call OpenTextbox + ret + +SilentHillsTextPokemonHateString: ; 7AC7 + text "よのなかに ポケモンが きらいな" + line "ひとは いるのかな?" + done + +; 7AE4
\ No newline at end of file diff --git a/maps/SilentHouse.asm b/maps/SilentHouse.asm new file mode 100644 index 0000000..70a6649 --- /dev/null +++ b/maps/SilentHouse.asm @@ -0,0 +1,171 @@ +include "constants.asm" + +SECTION "Silent Hills House", ROMX[$4839], BANK[$34] + +SilentHouseScriptLoader:: ; 4839 + ld hl, SilentHouseScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentHouseScriptPointers: ; 4843 + dw SilentHouseScript1 + dw SilentHouseNPCIDs1 + dw SilentHouseScript2 + dw SilentHouseNPCIDs2 + dw SilentHouseScript3 + dw SilentHouseNPCIDs1 + +SilentHouseScript1: ; 484F + ld hl, SilentHouseNPCIDs1 + ld de, SilentHouseTextPointers1 + call CallMapTextSubroutine + ret + +SilentHouseScript2: ; 4859 + ld hl, SilentHouseNPCIDs2 + ld de, SilentHouseTextPointers1 + call CallMapTextSubroutine + ret + +SilentHouseScript3: ; 4863 + ld hl, SilentHouseNPCIDs1 + ld de, SilentHouseTextPointers1 + call CallMapTextSubroutine + ret + +SilentHouseNPCIDs1: + db 0 + db $FF + +SilentHouseNPCIDs2: + db 0 + db 1 + db $FF + +SilentHouseTextPointers1:: ; 4872 + dw SilentHouseNPCText1 + dw Function38bd + dw Function3899 + dw Function38b4 + dw Function38ab + dw Function38cf + +SilentHouseNPCText1: ; 487E + ld hl, wd41a + bit 6, [hl] + jr nz, .jump + ld hl, SilentHouseTextString1 + call OpenTextbox + ret + +.jump +; 488C + call RefreshScreen + callab Function1477D + call Function1fea + ret + +SilentHouseTextString1: ; 489B + text "おや? <RIVAL>あてに メールが" + line "とどいている ようだ" + cont "よんでみる?@" + db $08 + +SilentHouseNPCText2: ; 48BD (unused due to typo in the text pointers?) + call YesNoBox + jr c, .jump + ld hl, wd41a + set 6, [hl] + ld hl, SilentHouseTextString2 + call PrintText + call Function3036 + ret +.jump + ld hl, SilentHouseTextString3 + call PrintText + call Function3036 + ret + +SilentHouseTextString2: ; 48DB + text "とつぜん メールを さしあげる" + line "しつれいを おゆるしあれ" + + para "じつは きみに どうしても" + line "わたしたい ものが あるのじゃが" + cont "うけとって もらえんかのう" + cont "ポケモンけんきゅうしゃ オーキド" + done + +SilentHouseTextString3: ; 4937 + text "ひとのメールは" + line "みちゃ いけないよな<⋯⋯>" + done + +SilentHouseTextPointers2:: ; 494C + dw SilentHouseNPCText3 + dw SilentHouseNPCText4 + +SilentHouseNPCText3: ; 4950 + ld hl, SilentHouseTextString4 + call OpenTextbox + ret + +SilentHouseTextString4: ; 4957 + text "このまえ かわったいろの" + line "ポッポを みかけたわ" + done + +SilentHouseNPCText4: ; 4970 + ld hl, wd41e + bit 2, [hl] + jr nz, .jump + ld hl, wd41e + set 2, [hl] + ld hl, SilentHouseTextString5 + call OpenTextbox + call WaitBGMap + ld hl, SilentHouseTextString6 + jr .skip +.jump + ld hl, SilentHouseTextString7 +.skip + call OpenTextbox + ret + +SilentHouseTextString5: ; 4991 + text "ケン『ななな" + line "なんだ <PLAYER> じゃないか!" + + para "おれは ちょっと あのー" + line"がっこうの しゅくだいを" + cont "おしえに きてるんだ!" + + para "えっ マップ?" + line "そうか そんな やくそくも してたな" + cont "わかった" + cont "トレーナーギアを かしてみな" + + para "スロットに マップの カセットを " + line "さしこんでっと⋯⋯" + cont "よし これで マップが みれるぞ!" + done + +SilentHouseTextString6: ; 4A29 + text "もし オールドにいくなら" + line "マサキって やつに あうといい" + + para "おれの ともだちで" + line "すごい ポケモン マニアだ!" + cont "きっと おまえの" + cont "てだすけを してくれるぜ" + done + +SilentHouseTextString7: ; 4A76 + text "ケン『<PLAYER>" + line "オーキドはかせに みこまれて" + cont "ポケモンずかんを つくるんだって?" + cont "すごいじゃないか がんばれよ" + done + +; 4AAC
\ No newline at end of file diff --git a/maps/SilentLabP1.asm b/maps/SilentLabP1.asm new file mode 100644 index 0000000..eb4cd57 --- /dev/null +++ b/maps/SilentLabP1.asm @@ -0,0 +1,1108 @@ +include "constants.asm" + +SECTION "Silent Lab P1", ROMX[$4BBC], BANK[$34] + +SilentLabP1ScriptLoader:: ; 4BBC + ld hl, SilentLabP1ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentLabP1ScriptPointers: ; 4BC6 + dw SilentLabP1Script1 + dw SilentLabP1NPCIDs1 + + dw SilentLabP1Script2 + dw SilentLabP1NPCIDs2 + + dw SilentLabP1Script3 + dw SilentLabP1NPCIDs2 + + dw SilentLabP1Script4 + dw SilentLabP1NPCIDs2 + + dw SilentLabP1Conversation1 + dw SilentLabP1NPCIDs2 + + dw SilentLabP1Script6 + dw SilentLabP1NPCIDs3 + + dw SilentLabP1Script7 + dw SilentLabP1NPCIDs4 + + dw SilentLabP1Script8 + dw SilentLabP1NPCIDs5 + + dw SilentLabP1Script9 + dw SilentLabP1NPCIDs5 + + dw SilentLabP1Script10 + dw SilentLabP1NPCIDs5 + + dw SilentLabP1Script11 + dw SilentLabP1NPCIDs5 + + dw SilentLabP1Script12 + dw SilentLabP1NPCIDs6 + + dw SilentLabP1Script13 + dw SilentLabP1NPCIDs6 + + dw SilentLabP1Script14 + dw SilentLabP1NPCIDs6 + + dw SilentLabP1Script15 + dw SilentLabP1NPCIDs7 + + dw SilentLabP1Script16 + dw SilentLabP1NPCIDs7 + + dw SilentLabP1Script17 + dw SilentLabP1NPCIDs7 + + dw SilentLabP1Script18 + dw SilentLabP1NPCIDs7 + + dw SilentLabP1Script19 + dw SilentLabP1NPCIDs9 + +SilentLabP1NPCIDs1: ; 4C12 + db $02 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs2: ; 4C16 + db $00 + db $02 + db $04 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs3: ; 4C1C + db $02 + db $04 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs4: ; 4C21 + db $04 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs5: ; 4C25 + db $01 + db $03 + db $05 + db $06 + db $07 + db $08 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs6: ; 4C2E + db $01 + db $03 + db $05 + db $06 + db $07 + db $08 + db $FF +SilentLabP1NPCIDs7: ; 4C35 + db $00 + db $05 + db $06 + db $07 + db $08 + db $FF +SilentLabP1NPCIDs8: ; 4C3B (unused?) + db $00 + db $03 + db $05 + db $06 + db $07 + db $08 + db $09 + db $0A + db $FF +SilentLabP1NPCIDs9: ; 4C44 + db $00 + db $07 + db $08 + db $FF + +SilentLabP1TextPointers1:: ; 4C48 + dw SilentLabP1Text4 + dw SilentLabP1Text7 + dw SilentLabP1Text10 + dw SilentLabP1Text11 + dw SilentLabP1TextString20 + dw SilentLabP1Text12 + dw SilentLabP1Text13 + dw SilentLabP1Text14 + dw SilentLabP1Text15 + dw SilentLabP1Text16 + dw SilentLabP1Text16 + +SilentLabP1Script1: ; 4C5E + call SilentLabP1MoveDown + ret z + ld hl, SilentLabP1NPCIDs1 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1MoveDown: ; 4C6C + ld a, [wXCoord] + cp 4 + ret nz + ld a, [wYCoord] + cp 1 + ret nz + ldh a, [hJoyState] + bit 6, a + jp z, SetFFInAccumulator + call SilentLabP1Text3 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + call Function17f9 + ld a, 0 + ld hl, SilentLabP1Movement1 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 1 + call WriteIntod637 + call ClearAccumulator + ret + +SilentLabP1Movement1: ; 4CA2 + db $06, $32 + +SilentLabP1Script2: ; 4CA4 + ld a, 2 + ld [wMapScriptNumber], a + ret + +SilentLabP1Script3: ; 4CAA + ld a, 6 + call Function17f9 + ld a, 0 + call Function186a + ld b, 6 + ld c, 0 + call StartFollow + ld hl, SilentLabP1Movement2 + ld a, 6 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 3 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement2: ; 4CD3 + db 09, 09, 09, 09, 09, 09, 09, 09, 09, 05, 07, 01, $32 + +SilentLabP1Script4: ; 4CE0 + call Function1828 + ld a, 4 + ld [wMapScriptNumber], a + ret + +SilentLabP1Conversation1: ; 4CE9 + ld a, 4 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentLabP1TextString20 + call OpenTextbox + ld hl, SilentLabP1TextString4 + call OpenTextbox + ld a, 4 + ld d, UP + call SetObjectFacing + ld hl, SilentLabP1TextString28 + call OpenTextbox + ld hl, SilentLabP1TextString5 + call OpenTextbox + ld a, 4 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentLabP1TextString29 + call OpenTextbox + ld hl, SilentLabP1TextString7 + call OpenTextbox + call SilentLabP1Script5 + ret + +SilentLabP1Script5: ; 4D26 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 2 + call Function17f9 + ld a, 2 + ld hl, SilentLabP1Movement3 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 5 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement3: ; 4D48 + db 9, 5, $33 + +SilentLabP1Script6: ; 4D4B + ld hl, wJoypadFlags + set 4, [hl] + ld a, 4 + call Function17f9 + ld a, 4 + ld hl, SilentLabP1Movement4 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 6 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement4: ; 4D6D + db $0D, $0D, $0F, $0D, $0D, $33 + +SilentLabP1Script7: ; 4D73 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + call Function17f9 + ld a, 0 + ld hl, SilentLabP1Movement5 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 7 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement5: ; 4D95 + db 09, 09, 09, 05, $32 + +SilentLabP1Script8: ; 4D9A + ld a, 3 + call Function1989 + ld a, 5 + call Function1989 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + call Function17f9 + ld a, 0 + ld hl, SilentLabP1Movement6 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 8 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement6: ; 4DC6 + db 8, 8, 8, $0A, 6, $32 + +SilentLabP1Script9: ; 4DCC + ld hl, wJoypadFlags + set 4, [hl] + ld a, 5 + call Function17f9 + ld a, 5 + call Function197e + ld a, 5 + ld hl, SilentLabP1Movement7 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 9 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement7: ; 4DF3 + db $08, $08, $08, $08, $0A, $06, $32 + +SilentLabP1Script10: ; 4DFA + ld a, 5 + ld d, RIGHT + call SetObjectFacing + ld hl, SilentLabP1TextString21 + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + ld d, RIGHT + call SetObjectFacing + ld a, 5 + ld d, RIGHT + call SetObjectFacing + ld a, 3 + call Function17f9 + ld a, 3 + call Function197e + ld a, 3 + ld hl, SilentLabP1Movement8 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, $0A + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement8: ; 4E3C + db $08, $04, $32 + +SilentLabP1Script11: ; 4E3F + ld hl, SilentLabP1TextString8 + call OpenTextbox + ld hl, SilentLabP1TextString9 + call OpenTextbox + ld a, $0B + call Function1617 + ld a, $0C + call Function1617 + ld hl, SilentLabP1TextString10 + call OpenTextbox + ld hl, SilentLabP1TextString15 + call OpenTextbox + ld hl, wd41c + set 4, [hl] + call Function20f8 + ld a, $0B + ld [wMapScriptNumber], a + call InitUnknownBuffercc9e + ret + +SilentLabP1Script12: ; 4E72 + call SilentLabP1MoveDown + ret z + call SilentLabP1RivalMovePokemon + ret z + ld hl, SilentLabP1NPCIDs6 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1RivalMovePokemon: ; 4E84 + ld a, [wYCoord] + cp 8 + ret nz + ld hl, SilentLabP1Movement9 + ld a, [wXCoord] + cp 3 + jr z, .jump + cp 4 + ret nz + ld hl, SilentLabP1Movement10 +.jump + push hl + ld hl, wJoypadFlags + set 4, [hl] + ld a, 5 + call Function17f9 + pop hl + ld a, 5 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, $0C + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + call ClearAccumulator + ret + +SilentLabP1Movement9: ; 4EDE + db $08, $0B, $0B, $08, $08, $04, $32 + +SilentLabP1Movement10: ; 4EC5 + db $08, $0B, $08, $08, $04, $32 + +SilentLabP1Script13: ; 4ECB + ld hl, SilentLabP1TextString17 + call OpenTextbox + call GetLabPokemon + ld hl, wc5ed + set 7, [hl] + ld a, 8 + ld [wd637], a + ld a, $0D + ld [wMapScriptNumber], a + call InitUnknownBuffercc9e + ret + +GetLabPokemon: ; 4EE7 + ld hl, LabPokemon + ld a, [wd266] + ld b, a +.loop + ld a, [hl+] + cp b + jr nz, .jump + ld a, [hl] + ld [wce05], a + ld a, 9 + ld [wce02], a + ret +.jump + inc hl + jr .loop + +LabPokemon: ; 4EFF + db DEX_KURUSU + db 1 + db DEX_HAPPA + db 2 + db DEX_HONOGUMA + db 3 + +SilentLabP1Script14: ; 4F05 + ld hl, SilentLabP1TextString19 + ld a, [wcd5d] + and a + jr nz, .skip + ld hl, SilentLabP1TextString18 +.skip + call OpenTextbox + ld hl, wJoypadFlags + set 4, [hl] + ld a, 5 + call Function17f9 + ld a, 5 + ld hl, SilentLabP1Movement11 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, $0E + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP1Movement11: ; 4F36 + db $04, $08, $08, $08, $33 + +SilentLabP1Script15: ; 4F3B + call Function20f8 + ld a, $0F + ld [wMapScriptNumber], a + call InitUnknownBuffercc9e + ret + +SilentLabP1Script16: ; 4F47 + call SilentLabP1MoveDown + ret z + call SilentLabP1MoveRivalLeave + ret z + ld hl, SilentLabP1NPCIDs7 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1MoveRivalLeave: ; 4F59 + ld a, [wYCoord] + cp $0B + ret nz + ld hl, Movememt12+1 + ld a, [wXCoord] + cp 3 + jr z, .jump + cp 4 + ret nz + ld hl, Movememt12 +.jump + push hl + ld hl, wJoypadFlags + set 4, [hl] + ld a, 8 + call Function17f9 + pop hl + ld a, 8 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, $10 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + call ClearAccumulator + ret + +Movememt12:; 4F93 + db $07, $07, $07, $05, $32 + +SilentLabP1Script17: ; 4F98 + ld hl, SilentLabP1TextString23 + call OpenTextbox + ld hl, wd41d + set 2, [hl] + ld hl, wNumBagItems + ld a, 5 + ld [wCurItem], a + ld a, 6 + ld [wItemQuantity], a + call ReceiveItem + call Function20f8 + ld a, $11 + ld [wMapScriptNumber], a + ret + +SilentLabP1Script18: ; 4FBC + call SilentLabP1MoveDown + ret z + ld hl, SilentLabP1NPCIDs7 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1Script19: ; 4FCA + call SilentLabP1MoveDown + ret z + ld hl, SilentLabP1NPCIDs9 + ld de, SilentLabP1TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP1TextPointers2: ; 4FD8 + dw SilentLabP1Text1 + dw SilentLabP1Text2 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw SilentLabP1Text3 + +SilentLabP1Text1: ; 4FF6 + ld hl, SilentLabP1TextString1 + call OpenTextbox + ret + +SilentLabP1TextString1: ; 4FFD + text "パソコンを みると" + line "なんと メールが きていた!" + + para "<⋯⋯> <⋯⋯> <⋯⋯>" + line "オーキドはかせ!" + cont "あなたが ゆくえふめいに" + cont "なっていると せけんは" + cont "おおさわぎ です!" + + para "それは そうと" + line "はかせ から みつけるように" + cont "たのまれた れいの#" + cont "みつけるどころか" + cont "まだ てがかりも" + cont "つかむことが できません" + + para "やはり あいつは" + line "かくうの #なのでは" + cont "ないでしょうか<⋯⋯>" + cont "<⋯⋯> <⋯⋯> <⋯⋯>じょしゅより" + done + +SilentLabP1Text2: ; 50B3 + ld hl, wd39d + bit 0, [hl] + set 0, [hl] + jr z, .jump + res 0, [hl] + ld hl, SilentLabP1TextString2A + jr .skip +.jump + ld hl, SilentLabP1TextString2B +.skip + call OpenTextbox + ret + +SilentLabP1TextString2A: ; 50CA + text "スタート ボタンを プシュ!" + line "おすと メニューが ひらくなり" + done + +SilentLabP1TextString2B: ; 50EA + text "セーブするには # レポート" + line "こまめに かくと いいなり" + done + +SilentLabP1Text3: ; 5108 + ld hl, SilentLabP1TextString3 + call OpenTextbox + ret + +SilentLabP1TextString3: ; 510F + text "カギが かかっている" + done + +SilentLabP1Text4: ; 511B + ld a, [wMapScriptNumber] + cp $0E + jp nc, SilentLabP1Text7 + ld hl, SilentLabP1TextString4 + call OpenTextbox + ret + +SilentLabP1TextString4: ; 512A + text "オーキド『ごくろうさん!" + done + +SilentLabP1TextString5: ; 5138 + text "オーキド『そうとも!" + line "わしが オーキドじゃ!" + cont "じじいで わるかったな!" + + para "おまえたち ふたりは" + line "この オーキドが よんだのじゃ!" + + para "すこし わしの はなしを" + line "きいては くれんか?@" + db $08 + +SilentLabP1Text6: ; 5192 + call YesNoBox + jr c, .jump +.loop + ld hl, SilentLabP1TextString6A + call PrintText + call Function3036 + ret + +.jump + ld hl, SilentLabP1TextString6B + call PrintText + call YesNoBox + jr c, .jump + jr .loop + +SilentLabP1TextString6A: ; 51AE + text "オーキド『いまから 1ねんまえ" + line "わしは カントーで" + cont "きみたちの ような しょうねんに" + cont "#の けんきゅうの ため" + cont "#と ずかんを わたした" + + para "そして かれらは" + line "じつに よくやってくれた!" + + para "150しゅるいの" + line "#を みつけることに" + cont "せいこう したのじゃ!" + cont "が <⋯⋯> <⋯⋯> <⋯⋯>" + cont "しかし <⋯⋯> <⋯⋯>" + + para "せかいは ひろいものじゃ" + line "そのご ぜんこく かくちで" + cont "あたらしい #が ぞくぞくと" + cont "みつかっておる!" + + para "そこで わしは カントーから" + line "ここ サイレントヒルに" + cont "けんきゅうの ばしょを うつした" + + para "ばしょが かわれば" + line "あたらしい #にも" + cont "であうことが できるからな" + cont "<⋯⋯> <⋯⋯> <⋯⋯> <⋯⋯>" + + para "これからも どんどんと" + line "けんきゅうを すすめるが" + cont "わしも ごらんのとおりの おいぼれ" + cont "まごや じょしゅたちも おるが" + cont "それでも やはり かずが たらん!" + + para "<PLAYER>! <RIVAL>!" + line "#けんきゅうの ために" + cont "ちからを かして くれんか!" + done + +SilentLabP1TextString6B: ; 5332 + text "オーキド『そうか<⋯⋯>" + line "わしに ひとを みるめが" + cont "なかったと いうことじゃな<⋯⋯>" + + para "いや!" + line "わしの ひとを みるめは" + cont "まちがっては おらんはず!" + + para "な?" + cont "わしの はなしを きいてくれるな?" + done + +SilentLabP1TextString7: ; 538D + text "オーキド『ふたりとも!" + line "ちょっと わしに ついてこい!" + done + +SilentLabP1Text7: ; 53AA + ld a, [wMapScriptNumber] + cp $12 + jr z, .jump + ld hl, SilentLabP1TextString11A + call OpenTextbox + ret + +.jump + ld hl, SilentLabP1TextString11B + call OpenTextbox + ret + +SilentLabP1TextString8: ; 53BF + text "オーキド『<PLAYER>!<RIVAL>!" + line "このずかんを" + cont "おまえたちに あずける!" + done + +SilentLabP1TextString9: ; 53DE + text "<PLAYER>は オーキドから" + line "#ずかんを もらった!" + done + +SilentLabP1TextString10: ; 53F5 + text "オーキド『この せかいの すべての" + line "#を きろくした" + cont "かんぺきな ずかんを つくること!" + cont "それが わしの ゆめ だった!" + + para "しかし しんしゅの #は" + cont "ぞくぞくと みつかっている!" + + para "わしに のこされた" + line "じかんは すくない!" + + para "そこで おまえ たちには" + line "わしの かわりに" + cont "ゆめを はたして ほしいのじゃ!" + + para "さあ ふたりとも" + line "さっそく しゅっぱつ してくれい!" + cont "これは #の れきしに のこる" + cont "いだいな しごとじゃー!" + done + +SilentLabP1TextString11A: ; 54C3 + text "オーキド『せかい じゅうの" + line "#たちが" + cont "<PLAYER>を まって おるぞー" + done + +SilentLabP1TextString11B: ; 54E3 + text "オーキド『おう! <PLAYER>" + line "どうだ?" + cont "わしの あげた #は<⋯⋯>?" + + para "ほう!" + cont "だいぶ なついた みたいだな" + + para "おまえには #トレーナーの" + line "さいのうが あるかもしれん" + cont "これからも ときどきは" + cont "わしのところへ かおを だせ!" + + para "#ずかんの ぺージが" + line "きに なるからな" + done + +SilentLabP1Text8: ; 5560 + ld hl, SilentLabP1TextString12 + call OpenTextbox + ret + +SilentLabP1TextString12: ; 5567 + text "オーキド『よく きたな!" + line "#ずかんの" + cont "ちょうしは どうかな?" + + para "どれ<⋯⋯> ちょっと" + cont "みて あげようか!" + done + +SilentLabP1Text9: ; 559A + ld hl, SilentLabP1TextString13 + call OpenTextbox + ret + +SilentLabP1TextString13: ; 55A1 + text "オーキド『<⋯⋯> おっほんッ!" + line "よくやったな <PLAYER>!" + + para "ちょっと" + line "わしに ついて きなさい!" + + para "<RIVAL>は すまんが" + line "そこで まっていなさい!" + + para "<RIVAL>『えー!" + line "なんだよ ケチー!" + + para "オーキド『<RIVAL>は" + line "でんせつの #が" + cont "ほしかった だけじゃないのか?" + cont "<RIVAL>『ギクッ!" + done + +SilentLabP1Text10: ; 561A + ld hl, SilentLabP1TextString14 + call OpenTextbox + ret + +SilentLabP1TextString14: ; 5621 + text "<RIVAL>『なんだ" + line "<PLAYER>じゃないか!" + cont "おれも ここが" + cont "あやしいと おもって きたんだけど" + cont "だれも いないみたいだな<⋯⋯>" + done + +SilentLabP1Text11: ; 5658 + ld hl, SilentLabP1TextString16 + call OpenTextbox + ret + +SilentLabP1TextString15: ; 565F + text "<RIVAL>『よっしゃあ!" + line "じいさん! おれにまかせな!" + done + +SilentLabP1TextString16: ; 5678 + text "<RIVAL>『おれが えらんだ" + line "#のほうが つよそうだぜ!" + cont "こっちに したかったんじゃないの?" + done + +SilentLabP1TextString17: ; 56A4 + text "<RIVAL>『<PLAYER>!" + line "せっかく じいさんに" + cont "# もらったんだから" + cont "<⋯⋯> ちょっと" + cont "たたかわせて みようぜ!" + done + +SilentLabP1TextString18: ; 56D4 + text "<RIVAL>『くっそー!" + line "こんどは ぜったい まけないぞ!" + done + +SilentLabP1TextString19: ; 56EE + text "<RIVAL>『よーし!" + line "ほかの #と たたかわせて" + cont "もっと もっと つよくしよう!" + + para "そんじゃ ばいばい!" + done + +SilentLabP1TextString20: ; 571F + text "じいちゃん!" + line "つれてきたよー!" + done + +SilentLabP1TextString21: ; 5730 + text "ぼくは かつて" + line "#トレーナーの ちょうてんを" + cont "めざしたことが あるんだ" + cont "そのとき いいきに なっていた" + cont "ぼくの てんぐのはなを" + cont "へしおった やつに" + cont "きみは どことなく にている" + + para "あいつの おかげで ぼくは" + line "こころを いれかえて" + cont "じいさんの けんきゅうを" + cont "てつだうように なったのさ" + cont "<⋯⋯> <⋯⋯> <⋯⋯> <⋯⋯> <⋯⋯>" + + para "さあ!" + line "これが #ずかんだ!" + + para "みつけた #の データが" + line "じどうてきに かきこまれて" + cont "ぺージが ふえて いく という" + cont "とても ハイテクな ずかん だよ!" + done + +SilentLabP1Text12: ; 5814 + ld hl, SilentLabP1TextString22 + call OpenTextbox + ret + +SilentLabP1TextString22: ; 581B + text "ぼくも むかし やったけど" + line "なかなか たいへんだよ<⋯⋯>" + cont "がんばってね!" + done + +SilentLabP1Text13: ; 583F + ld hl, SilentLabP1TextString24 + call OpenTextbox + ret + +SilentLabP1TextString23: ; 5846 + text "ナナミ『さっき あなたを " + line "つれてきた わかい おとこのこ<⋯⋯>" + cont "あれは わたしの おとうとなの" + cont "<⋯⋯>ということは つまり" + + para "そう!" + line "わたしも オーキドの まご なの!" + + para "おじいちゃんは りっぱな" + cont "#けんきゅうしゃよ" + cont "わたしは おてつだい できることが" + cont "とっても うれしいの!" + cont "あっ こんなこと しられたら" + cont "おじいちゃん ちょうしに のるから" + cont "ないしょに しておいてね!" + + para "<⋯⋯>おじいちゃん すっかり" + line "わすれている みたいだから" + + para "わたしが かわりに これを あげる!" + line "さいしんがた #りュックよ" + + para "<PLAYER>は" + line "#りュックを もらった!" + + para "ナナミ『この りュックには" + line "モンスターボールを" + cont "まとめて いれられる" + cont "ボールホルダと" + cont "わざマシンを まとめて いれられる" + cont "わざマシンホルダが ついているの" + + para "モンスターボール 6こと " + line "わざマシンひとつは オマケしておくわ" + cont "ホルダに なんにも はいってないと" + cont "さびしいもんね!" + + para "ねえ <PLAYER>くン" + line "あなたの おかあさんが" + cont "しんぱいすると いけないから" + cont "このまちを でるまえに" + cont "かおを みせに いってあげてね" + + para "<⋯⋯>あなたの かつやく" + line "いのっているわ" + done + +SilentLabP1TextString24: ; 5A23 + text "<⋯⋯>あなたの かつやく" + line "いのってるわ" + done + +SilentLabP1Text14: ; 5A36 + ld hl, SilentLabP1TextString25 + call OpenTextbox + ret + +SilentLabP1TextString25: ; 5A3D + text "わたしは" + line "はかせの じょしゅ です" + + para "わたしは もちろん" + line "はかせを ソンケー しております" + + para "あなた とは また どこかで" + line "おあい することに" + cont "なるような きがします" + done + +SilentLabP1Text15: ; 5A90 + ld hl, SilentLabP1TextString26 + call OpenTextbox + ret + +SilentLabP1TextString26: ; 5A97 + text "わたしは" + line "はかせの じょしゅ です" + + para "わたしは もちろん" + line "はかせを ソンケー しております" + + para "あなた とは また どこかで" + line "おあい することに" + cont "なるような きがします" + done + +SilentLabP1Text16: ; 5AEA + ld hl, SilentLabP1TextString27 + call OpenTextbox + ret + +SilentLabP1TextString27: ; 5AF1 + text "なんだろう?" + line "でんし てちょう かな?" + done + +SilentLabP1Text17: ; 5B05 + ld hl, SilentLabP1TextString28 + call OpenTextbox + ret + +SilentLabP1TextString28: ; 5B0D + text "<RIVAL>『あのメールを くれた" + line "オーキドって こんな じじい<⋯⋯>" + + para "あっ ゴメン" + line "こんな じいさん なのか?" + cont "ほんもの はじめて みたよ!" + done + +SilentLabP1TextString29: ; 5B4F + text "<RIVAL>『<PLAYER>!" + line "なんだか" + cont "おもしろく なってきたな!" + done + +SilentLabP1Text18: ; 5B68 + ld hl, SilentLabP1TextString30 + call OpenTextbox + ret + +SilentLabP1TextString30: ; 5B6F + text "わたしは" + line "はかせの じょしゅ です" + + para "あなた とは また どこかで" + line "おあい することに" + cont "なるような きがします" + done + +SilentLabP1Text19: ; 5BA7 + ld hl, SilentLabP1TextString31 + call OpenTextbox + ret + +SilentLabP1TextString31: ; 5BAE + text "わたしは" + line "はかせの じょしゅ です" + + para "あなた とは また どこかで" + line "おあい することに" + cont "なるような きがします" + done + +; 5BE6
\ No newline at end of file diff --git a/maps/SilentLabP2.asm b/maps/SilentLabP2.asm new file mode 100644 index 0000000..54aab8f --- /dev/null +++ b/maps/SilentLabP2.asm @@ -0,0 +1,360 @@ +include "constants.asm" + +SECTION "Silent Lab P2 Script", ROMX[$5C69], BANK[$34] + +SilentLabP2ScriptLoader:: ; 5C69 + ld hl, SilentLabP2ScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentLabP2ScriptPointers: ; 5C73 + dw SilentLabP2Script1 + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script2 + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script3 + dw SilentLabP2NPCIDs1 + dw SilentLabP2RivalChoosePokemon + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script5 + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script6 + dw SilentLabP2NPCIDs1 + dw SilentLabP2Script7 + dw SilentLabP2NPCIDs1 + +SilentLabP2NPCIDs1: ; 5C8F + db 00, 01, 02, 03, 04, $FF +SilentLabP2NPCIDs2: ; 5C95 + db 00, 01, 04, $FF +SilentLabP2NPCIDs3: ; 5C99 + db 00, 01, 02, $FF +SilentLabP2NPCIDs4: ; 5C9D + db 00, 01, 03, $FF + +SilentLabP2TextPointers1: ; 5CA1 + dw SilentLabP2Text1 + dw SilentLabP2Func3 + dw SilentLabP2Func4 + dw SilentLabP2Func4 + dw SilentLabP2Func4 + +SilentLabP2Script1: ; 5CAB + ld hl, wJoypadFlags + set 4, [hl] + ld a, 0 + call Function17f9 + ld a, 0 + ld hl, SilentLabP2Movement1 + call LoadMovementDataPointer + ld hl, wd41b + set 1, [hl] + ld hl, wc5ed + set 7, [hl] + ld a, 1 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP2Movement1: ; 5CD2 + db 09, 09, 05, $32 + +SilentLabP2Script2: ; 5CD6 + ld hl, wc5ed + set 6, [hl] + call Function20f8 + ld a, 3 + ld d, UP + call SetObjectFacing + ld hl, SilentLabP2TextString1 + call OpenTextbox + ld hl, SilentLabP2TextString10 + call OpenTextbox + ld hl, SilentLabP2TextString2 + call OpenTextbox + ld a, 2 + ld [wMapScriptNumber], a + ret + +SilentLabP2Script3: ; 5CFD + ld hl, SilentLabP2NPCIDs1 + ld de, SilentLabP2TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP2RivalChoosePokemon: ; 5D07 + ld hl, wJoypadFlags + set 4, [hl] + ld a, 3 + call Function17f9 + ld hl, SilentLabP2MovementPointers + ld a, [wChosenStarter] + ld d, 0 + ld e, a + add hl, de + add hl, de + ld a, [hl+] + ld h, [hl] + ld l, a + ld a, 3 + call LoadMovementDataPointer + ld hl, wc5ed + set 7, [hl] + ld a, 4 + ld [wMapScriptNumber], a + ld a, 1 + call WriteIntod637 + ret + +SilentLabP2MovementPointers: ; 5D34 + dw SilentLabP2Movement2+1 + dw SilentLabP2Movement2 + dw SilentLabP2Movement2+2 + +SilentLabP2Movement2: ; 5D3A + db $0B, $0B, $0B, $0B, $05, $32 + +SilentLabP2Script5: ; 5D40 + ld hl, SilentLabP2TextString12 + call OpenTextbox + ld a, [wd266] + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + ld hl, SilentLabP2TextString13 + call OpenTextbox + ld a, 5 + ld [wMapScriptNumber], a + ret + +SilentLabP2Script6: ; 5D5B + call Function20f8 + ld hl, wc5ed + res 6, [hl] + ld a, 6 + ld[wMapScriptNumber], a + ret + +SilentLabP2Script7: ; 5D69 + ld hl, SilentLabP2NPCIDs1 + ld de, SilentLabP2TextPointers2 + call CallMapTextSubroutine + ret + +SilentLabP2Text1: ; 5D73 + ld hl, wd41b + bit 2, [hl] + ld hl, SilentLabP2TextString3 + jr z, .skip + ld hl, SilentLabP2TextString9 +.skip + call OpenTextbox + ret + +SilentLabP2TextString1: ; 5D84 + text "オーキド『ほれ そこに 3びき" + cont "ポケモンが いる じゃろう!" + cont "ほっほ!" + + para "こいつらを きみたちに" + cont "いっぴき づつ やろう!" + cont "⋯⋯ さあ えらべ!" + done + +SilentLabP2TextString2: ; 5DCD + text "オーキド『まあ" + line "あわてるな <RIVAL>!" + cont "おまえも すきなものを とれ!" + done + +SilentLabP2TextString3: ; 5DEF + text "オーキド『さあ <PLAYER>" + line "どの ポケモンに するかね?" + done + +SilentLabP2TextString4: ; 5E1C + text "オーキド『ほう! ほのおのポケモン" + line "@" + ld bc, wStringBuffer1 + text "に するんじゃな?@" + db 08 + call ConfirmPokemonSelection + call Function3036 + ret + +SilentLabP2TextString5: ; 5E32 + text "オーキド『ふむ みずのポケモン" + line "@" + ld bc, wStringBuffer1 + text "に きめるのじゃな?@" + db 08 + call ConfirmPokemonSelection + call Function3036 + ret + +SilentLabP2TextString6: ; 5E6E + text "オーキド『おお! くさのポケモン" + line "@" + ld bc, wStringBuffer1 + text "が いいんじゃな?@" + db 08 + call ConfirmPokemonSelection + call Function3036 + ret + +ConfirmPokemonSelection: ; 5E85 + call YesNoBox + jr c, .bigJump + ld hl, wd41b + set 2, [hl] + ld a, 1 + ld [wd29b], a + ld a, 1 + ld [wd29a], a + ld a, 1 + ld [wd2a0], a + ld hl, SilentLabP2TextString8 + call PrintText + ld hl, wJoypadFlags + set 5, [hl] + ld a, [wd265] + ld [wMonDexIndex], a + ld a, 5 + ld [wCurPartyLevel], a + callab Function60a0 + xor a + ld [wPartyMon1 + 1], a + ld a, 3 + ld [wMapScriptNumber], a + ret +.bigJump ; 5EC6 + ld hl, SilentLabP2TextString7 + call PrintText + ret + +SilentLabP2TextString7: ; 5ECD + text "では" + line "どれに するのじゃ?" + done + +SilentLabP2TextString8: ; 5EDC + text "オーキド『この ポケモンは" + line "ほんとに げんきが いいぞ!" + + para "<PLAYER>は オーキドはかせから" + line "@" + ld bc, wStringBuffer1 + text "を もらった!<PROMPT>" + +SilentLabP2TextString9: ; 5F14 + text "オーキド『そうじゃ!" + line "やせいの ポケモンが でて きても" + cont "そいつを たたかわせて いけば" + cont "となりまちへ いける!" + done + +SilentLabP2Func3: ; 5F4E + ld hl, wd41b + bit 2, [hl] + ld hl, SilentLabP2TextString11 + jr z, .skip + ld hl, SilentLabP2TextString14 +.skip + call OpenTextbox + ret + +SilentLabP2TextString10: ; 5F5F + text "<RIVAL>『あッ! おれにも!" + line "じいさん おれにもくれよう!" + done + +SilentLabP2TextString11: ; 5F7B + text "<RIVAL>『いいぜ <PLAYER>!" + line "さきに えらんで!" + cont "おれは こころが ひろいからな" + done + +SilentLabP2TextString12: ; 5F9F + text "<RIVAL>『じゃ おれは これ!" + done + +SilentLabP2TextString13: ; 5FAD + text "<RIVAL>は オーキドから" + line "@" + ld bc, wStringBuffer1 + text "を もらった!" + done + +SilentLabP2TextString14: ; 5FC5 + text "<RIVAL>『<PLAYER>の#" + line "いいなあ!" + cont "でも おれのポケモンも" + cont "ちょっと いいだろ?" + done + +SilentLabP2Func4: ; 5FE9 + ld hl, wd41b + bit 2, [hl] + jr nz, .bigjump + ldh a, [hFFEA] + sub 2 + ld [wChosenStarter], a + ld d, 0 + ld e, a + ld hl, SilentLabP2StarterData + add hl, de + add hl, de + add hl, de + add hl, de + ld a, [hl+] + ld [wd265], a + push hl + ld [wNamedObjectIndexBuffer], a + callba Function6734 + ld a, [wd265] + ld [wNamedObjectIndexBuffer], a + call GetPokemonName + pop hl + push hl + ld a, [hl+] + ld h, [hl] + ld l, a + call OpenTextbox + pop hl + inc hl + inc hl + ld a, [hl] + ld [wd266], a + ret +.bigjump + ld hl, SilentLabP2TextString15 + call OpenTextbox + ret + +SilentLabP2StarterData: ; 6031 + db DEX_HONOGUMA + dw $5E09 + db DEX_KURUSU + + db DEX_KURUSU + dw $5E33 + db DEX_HAPPA + + db DEX_HAPPA + dw $5E5C + db DEX_HONOGUMA + +SilentLabP2TextString15: ; 603D + text "オーキド『これ!" + line "よくばっちゃ いかん!" + done + +SilentLabP2TextPointers2: ; 6053 + dw Function3899 + dw Function3899 + dw Function3899 + dw Function3899 + dw MapDefaultText + +; 605D
\ No newline at end of file diff --git a/maps/SilentPokecenter.asm b/maps/SilentPokecenter.asm new file mode 100644 index 0000000..dc1a35a --- /dev/null +++ b/maps/SilentPokecenter.asm @@ -0,0 +1,113 @@ +include "constants.asm" + +SECTION "Silent Hills Pokecenter", ROMX[$4682], BANK[$34] + +SilentPokecenterScriptLoader:: ; 4682 + ld hl, SilentPokecenterScriptPointers + call RunMapScript + call WriteBackMapScriptNumber + ret + +SilentPokecenterScriptPointers: ; 468C + dw SilentPokecenterScript + dw SilentPokecenterNPCIDs + +SilentPokecenterScript: ; 4690 + ld hl, SilentPokecenterNPCIDs + ld de, SilentPokecenterPCPointer + call CallMapTextSubroutine + ret + +; 469A + dw SilentPokecenterNPCIDs + +SilentPokecenterNPCIDs: ; 469C + db 0 + db 1 + db 2 + db 3 + db 4 + db $FF + +SilentPokecenterPCPointer: ; 46A2 + dw SilentPokecenterPCText + +SilentPokecenterPCText: ; 46A4 + ld hl, SilentPokecenterTextString1 + call OpenTextbox + ret + +SilentPokecenterTextString1: ; 46AB + text "げんざい ちょうせいちゅうです" + done + +SilentPokecenterTextPointers:: ; 46BC + dw SilentPokecenterNPCText1 + dw SilentPokecenterNPCText2 + dw SilentPokecenterNPCText3 + dw SilentPokecenterNPCText4 + dw SilentPokecenterNPCText5 + +SilentPokecenterNPCText1: ; 46C6 + ld hl, SilentPokecenterTextString2 + call OpenTextbox + ret + +SilentPokecenterTextString2: ; 46CD + text "もうしわけありませんが" + line "ただいま しゅうりちゅう でして" + + para "かいふくは できません" + + para "まちから でるときは" + line "じゅうぶんに おきをつけ ください" + done + +SilentPokecenterNPCText2: ; 4714 + ld hl, SilentPokecenterTextString3 + call OpenTextbox + ret + +SilentPokecenterTextString3: ; 471B + text "あそこに ある パソコンは" + line "トレーナー だったら" + cont "いつでも むりょうで" + cont "つかうことが できるよ" + cont "きが きいてるよな!" + done + +SilentPokecenterNPCText3: ; 4757 + ld hl, SilentPokecenterTextString4 + call OpenTextbox + ret + +SilentPokecenterTextString4: ; 475E + text "いま じゅんびちゅうの" + line "きかいは すごいらしいよ" + + para "なんでも ときを こえて" + line "ポケモンが こうかん できるって!" + + para "ほんとかな?" + done + +SilentPokecenterNPCText4: ; 479E + ld hl, SilentPokecenterTextString5 + call OpenTextbox + ret + +SilentPokecenterTextString5: ; 47A5 + text "こいつ へルガー" + line "いままでにない タイプの ポケモンさ" + done + +SilentPokecenterNPCText5: ; 47C2 + ld hl, SilentPokecenterTextString6 + call OpenTextbox + ret + +SilentPokecenterTextString6: ; 47C9 + text "へルガー『ぐるるうー" + done + +; 47D5
\ No newline at end of file @@ -1,35 +1,16 @@ ; ROM0 -00:3111 Function3111 -00:3171 Function3171 -00:319B Function319b -00:3233 Function3233 -00:323E Function323e -00:3240 Function3240 00:3C43 GetPartyParamLocation 00:3CA8 InitSpriteAnimStruct -00:3D86 WaitSFX -00:3D87 WaitSFX.wait -00:3DA5 MaxVolume -00:3DAB LowVolume -00:3DB1 VolumeOff -00:3DB6 UpdateSoundNTimes -00:3DBE FadeToMapMusic -00:3DDC FadeToMapMusic.dontfade -00:3E05 SpecialMapMusic -00:3E14 SpecialMapMusic.state2 -00:3E19 SpecialMapMusic.normal -00:3E1B GetMapMusic -00:3E2E GetMapMusic.unk_3E2E -00:3E32 Unk_3E32 -01:4031 Function4031 -01:4031 DebugMenu -01:40EB Function40eb +01:40FD Function40fd 01:5007 Function5007 01:50B9 Function50b9 01:5190 _UpdateSprites 01:5190 Function5190 -01:5D27 Function5d27 +01:52F9 Function52f9 +01:5388 Function5388 +01:5397 Function5397 +01:53B0 Function53b0 01:63D8 ReanchorBGMap_NoOAMUpdate 01:6437 LoadFonts_NoOAMUpdate 01:6445 Function6445 @@ -37,6 +18,7 @@ 01:6713 Function6713 01:67d5 CorrectNickErrors 01:776E Function776e +01:78E5 SettingsScreen 02:4000 Function8000 02:4098 _InitializeVisibleSprites @@ -51,6 +33,7 @@ 02:4786 Function8786 02:4856 DecompTownMapTilemap 02:48DA DecompTownMapTilemap.tilemap +02:4AAB OpenPokegear 02:4C7C DrawMap 02:4DC2 TownMapGfx 02:4F32 PokegearRadioGfx @@ -73,10 +56,15 @@ 03:5E79 Functionde79 03:5F7D Functiondf7d 03:5F91 Functiondf91 +03:60A0 Function60a0 +03:6734 Function6734 +04:4743 ShrinkPic1 +04:479D ShrinkPic2 04:528F Function1128f 04:52C1 Function112c1 04:530A Function1130a +04:53F4 Function113f4 04:5677 DoPlayerMovement 04:5DBE DisplayStartMenu 04:640B Function1240b @@ -89,12 +77,14 @@ 05:405B AddIndoorSprites 05:40AA AddOutdoorSprites 05:40D9 Function140d9 +05:40EA Function140ea 05:40FB LoadUsedSpritesGfx ; TODO: maybe there's a better name 05:43B6 InitAllSRAMBanks 05:43E0 Function143e0 05:457A Function1457a 05:45B8 Function145b8 05:45DE Function145de +05:4624 Function14624 05:46DC Function146dc ; Structure: ; byte Map group ($ff = end) @@ -104,6 +94,7 @@ ; word Unknown (2 bytes) 05:470E UnknownMapBufferPointers 05:4777 Function14777 +05:477D Function1477D 05:4CAC Function14cac 05:4DAC Function14dac 05:4DC4 Function14dc4 @@ -134,6 +125,7 @@ 0F:508C Function3d08c 0F:55CE Function3d5ce 0F:567C Function3d67c +0F:6043 AddPokemonToBox 0F:61A4 Function3e1a4 0F:6874 Function3e874 0F:691E Function3e91e @@ -435,6 +427,7 @@ 36:73E8 MtFujiRoute_MapAttributes 36:7444 FontoRoute5_MapAttributes 36:7530 BullForestRoute3_MapAttributes +36:7AE4 SetTime 38:4000 PikachuMiniGame 39:4000 GameFreakIntro 39:432F OpeningCutscene @@ -458,11 +451,11 @@ 3F:654E PicTest 3F:6750 PicTestMenu 3F:6755 PicTestMenu.loop +3F:67A1 CallSubGameMenu 00:CB6F wPlayerStepDirection 01:D19E wItems -01:D258 wRivalName ; The starting house's map script number is stored at d29a. Others are probably nearby. 01:D35F wOptions 01:D513 wWarpNumber diff --git a/tools/tests/charmap.asm b/tools/tests/charmap.asm index 228bb6b..70e228c 100644 --- a/tools/tests/charmap.asm +++ b/tools/tests/charmap.asm @@ -101,7 +101,7 @@ charmap "<RIVAL>", $53 ; wRivalName charmap "#", $54 ; "POKé" charmap "<CONT>", $55 - charmap "<……>", $56 ; "……" + charmap "<⋯⋯>", $56 ; "⋯⋯" charmap "<DONE>", $57 charmap "<PROMPT>", $58 charmap "<TARGET>", $59 @@ -137,7 +137,7 @@ charmap "『", $72 charmap "』", $73 charmap "・", $74 - charmap "…", $75 + charmap "⋯", $75 charmap "ぁ", $76 charmap "ぇ", $77 @@ -54,7 +54,9 @@ wMusicFade:: ; c1a5 ; $00 = none (default) db wMusicFadeCount:: db ; c1a6 -wMusicFadeID:: dw ; c1a7 +wMusicFadeID:: +wMusicFadeIDLow:: db ; c1a7 +wMusicFadeIDHigh:: db ; c1a8 ds 2 ; TODO @@ -108,7 +110,7 @@ wMapScriptNumber:: db ; c5e8 wMapScriptNumberLocation:: dw ; c5e9 wUnknownMapPointer:: dw ; c5eb ; TODO wc5ed:: db ; c5ed - ds 18 ; TODO + ds 18 wMapBufferEnd:: ; c600 @@ -184,8 +186,12 @@ wEnemyMonNickname:: ds 6 ; c9fc wPlayerSubStatus3:: db ; ca3d ds $4 wEnemySubStatus3:: db ; ca42 -; ca43 - ds $14 + +wca43:: db ; ca43 + +wca44:: db ; ca44 + + ds $12 wTrainerClass:: ; ca57 db ; ca58 @@ -438,6 +444,8 @@ wVramState:: db ; cd59 ds 3 ; TODO wcd5d:: db ; cd5d + db +wChosenStarter:: db ; cd5f SECTION "CD72", WRAM0[$CD72] wcd72:: dw ; cd72 @@ -464,8 +472,9 @@ wcd9e:: db SECTION "CDB0", WRAM0 [$CDB0] -wcdb0:: ; bit 0 = has engaged NPC in dialogue (?) - db +wTalkingTargetType:: db ; cdb0 +;bit 0 = has engaged NPC in dialogue +;bit 1 = has engaged sign in dialogue SECTION "CDBA", WRAM0[$CDBA] @@ -505,13 +514,18 @@ wcdca:: db ; cdca wHPBarHPDifference:: dw ; cdcb wLinkBattleRNs:: ds 10 ; cdcd + +wcdd7:: db ; cdd7 ; cddd SECTION "CE00", WRAM0[$CE00] -wBattleMode:: ; ce00 +wBattleMode:: db ; ce00 db +wce02:: db ; ce02 + ds 2 +wce05:: db ; ce05 SECTION "CE07", WRAM0[$CE07] @@ -585,6 +599,7 @@ wce2e:: ; ce2e SECTION "CE37", WRAM0[$CE37] wNamedObjectIndexBuffer:: +wCountSetBitsResult:: wce37:: ; ce37 db @@ -606,25 +621,26 @@ wTimeOfDay:: db ; ce3d SECTION "CE5F", WRAM0[$CE5F] -wce5f:: ; ce5f ; TODO +wce5f:: ; ce5f ; debug menu writes $41 to it db -SECTION "CE61", WRAM0[$CE61] +wce60:: ; ce60 + db ; main menu checks this, maybe states if there's a save present? wActiveFrame:: db ; ce61 wTextBoxFlags:: db ; ce62 -wce63:: db ; ce63 +wDebugFlags:: db ; ce63 ; 76543210 -; \-- global debug enable +; \/|\- debug battle indicator +; | \-- debug field indicator +; \---- loaded/continued game ds 3 -wPlayerName:: db ; ce67 +wPlayerName:: ds 6 ; ce67 - -SECTION "Mom's Name", WRAM0[$CE6D] wMomsName:: ds 6 ; ce6d SECTION "CE7F", WRAM0[$CE76] @@ -712,7 +728,19 @@ wTimeOfDayPalset:: db ; d158 wCurTimeOfDay:: db ; d159 -SECTION "D165", WRAM0[$D165] +SECTION "D15D", WRAM0[$D15D] + +wd15d:: db ; d15d + +wd15e:: db ; d15e + +wd15f:: db ; d15f + +SECTION "D163", WRAM0[$D163] + +wd163:: db ; d163 + +wd164:: db ; d164 wTMsHMs:: db ; d165 @@ -731,12 +759,33 @@ wNumBallItems:: db ; d1de wBallQuantities:: db ; d1df SECTION "Rival's Name", WRAM0[$D258] -wRivalsName:: ds 6 ; d258 +wRivalName:: ds 6 ; d258 + ds 6 -SECTION "PlayerState", WRAM0[$D264] wPlayerState:: db ; d264 +wd265:: db ; d265 +wd266:: db ; d266 + +SECTION "D29A", WRAM0[$D29A] +wd29a:: db ; d29a +wd29b:: db ; d29b + db ; d29c +wd29d:: db ; d29d + db + db +wd2a0:: db ; d2a0 -SECTION "D4AB", WRAM0[$D4A9] +SECTION "D39D", WRAM0[$D39D] +wd39d:: db + +SECTION "Game Event Flags", WRAM0[$D41A] +wd41a:: db +wd41b:: db +wd41c:: db +wd41d:: db +wd41e:: db + +SECTION "D4A9", WRAM0[$D4A9] wd4a9:: db ; d4a9 ds 1 ; TODO @@ -744,7 +793,7 @@ wJoypadFlags:: db ; d4ab ; 76543210 ; ||||\__/ ; |||| \-- unkn -; |||\----- unkn +; |||\----- set for rival intro textbox ; ||\------ don't wait for keypress to close text box ; |\------- joypad sync mtx ; \-------- joypad disabled @@ -775,10 +824,15 @@ ENDR wCurrMapObjectCount:: ; d5f6 db + +wCurrMapInlineTrainers:: ; d5f7 +REPT 32 ; TODO: confirm this + ds 2 ; inline trainers. each pair of bytes is direction, distance +ENDR SECTION "D637", WRAM0[$D637] -wd637:: db ; d637 -wd638:: db ; d638 +wd637:: db ; d637 ;OW battle state? $3 wild battle, $8 is trainer battle $4 is left battle, $B is load overworld? $0 is in overworld +wd638:: db ; d638 ;wd637's last written-to value SECTION "Used sprites", WRAM0[$D643] @@ -805,8 +859,8 @@ wXCoord:: db ; d65b wMetatileStandingY:: db ; d65c wMetatileStandingX:: db ; d65d -; d65f - ds 1 ; TODO +wd65e:: ; d65e + db wMapPartial:: ; d65f wMapAttributesBank:: ; d65f @@ -887,7 +941,7 @@ wAnnonDex:: ds 26 ; d85a wAnnonID:: ds 1 ; d874 - + SECTION "Wild mon buffer", WRAM0[$D91B] wWildMons:: ; d91b |