summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorobskyr <powpowd@gmail.com>2018-07-03 03:27:58 +0200
committerobskyr <powpowd@gmail.com>2018-07-03 03:29:47 +0200
commit5a8a294140c870b1a979980c6e7e61cea5883452 (patch)
treee24ef35ef9b65bb64759a5c7637c4fb64f692cee
parentd65cb5004e20387c7c808ccde3ca8407c73f1213 (diff)
parentf3de47a1d575b63ae52a3bb667f2a70f8c5e26c5 (diff)
Merge branch 'master' of https://github.com/2Tie/pokegold-spaceworld into master
Long overdue!
-rw-r--r--Makefile2
-rw-r--r--charmap.asm4
-rw-r--r--constants.asm1
-rw-r--r--constants/gfx_constants.asm1
-rw-r--r--constants/main_menu_constants.asm12
-rw-r--r--constants/text_constants.asm2
-rw-r--r--constants/wram_constants.asm6
-rw-r--r--data/predef_pointers.inc4
-rw-r--r--engine/Intro.asm800
-rw-r--r--engine/menu/debug_menu.asm109
-rw-r--r--engine/menu/main_menu.asm339
-rw-r--r--home/audio.asm127
-rw-r--r--home/map.asm22
-rw-r--r--home/map_objects.asm17
-rw-r--r--home/misc_32c8.asm4
-rwxr-xr-xhome/music.asm26
-rw-r--r--home/overworld.asm4
-rw-r--r--home/talk_to_npc.asm268
-rw-r--r--home/text.asm8
-rw-r--r--home/time.asm4
-rw-r--r--home/unknown.asm4
-rw-r--r--home/unknown_388f.asm16
-rw-r--r--home/util.asm5
-rw-r--r--home/window.asm2
-rw-r--r--maps/Map13.asm26
-rw-r--r--maps/PlayersHouse1F.asm60
-rw-r--r--maps/PlayersHouse2F.asm263
-rw-r--r--maps/Route1Gate1F.asm55
-rw-r--r--maps/Route1Gate2F.asm86
-rw-r--r--maps/Route1P1.asm75
-rw-r--r--maps/Route1P2.asm117
-rw-r--r--maps/SilentHills.asm420
-rw-r--r--maps/SilentHouse.asm171
-rw-r--r--maps/SilentLabP1.asm1108
-rw-r--r--maps/SilentLabP2.asm360
-rw-r--r--maps/SilentPokecenter.asm113
-rw-r--r--shim.sym43
-rw-r--r--tools/tests/charmap.asm4
-rw-r--r--wram.asm102
39 files changed, 4431 insertions, 359 deletions
diff --git a/Makefile b/Makefile
index dd6c27a..69f9dde 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/shim.sym b/shim.sym
index 8390904..5eb4f08 100644
--- a/shim.sym
+++ b/shim.sym
@@ -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
diff --git a/wram.asm b/wram.asm
index b196ac4..e993003 100644
--- a/wram.asm
+++ b/wram.asm
@@ -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