shithub: pokecrystal

Download patch

ref: 8360a1a2e81d3c3d6c2529c9a6834b011fd66f36
parent: f7ee74c3b8fdd57c92844f3f9d7a89c0f9770d6d
author: PikalaxALT <PikalaxALT@gmail.com>
date: Sat Jan 9 18:41:03 EST 2016

Pokegear functions and RAM labels

--- a/constants/sprite_constants.asm
+++ b/constants/sprite_constants.asm
@@ -482,7 +482,7 @@
 	const SPRITE_ANIM_INDEX_SLOTS_CHANSEY
 	const SPRITE_ANIM_INDEX_SLOTS_EGG
 	const SPRITE_ANIM_INDEX_09
-	const SPRITE_ANIM_INDEX_WALK_CYCLE
+	const SPRITE_ANIM_INDEX_RED_WALK
 	const SPRITE_ANIM_INDEX_0B
 	const SPRITE_ANIM_INDEX_0C
 	const SPRITE_ANIM_INDEX_0D
@@ -502,7 +502,7 @@
 	const SPRITE_ANIM_INDEX_1B
 	const SPRITE_ANIM_INDEX_1C
 	const SPRITE_ANIM_INDEX_1D
-	const SPRITE_ANIM_INDEX_1E
+	const SPRITE_ANIM_INDEX_BLUE_WALK
 	const SPRITE_ANIM_INDEX_1F
 	const SPRITE_ANIM_INDEX_20
 	const SPRITE_ANIM_INDEX_21
--- a/engine/link.asm
+++ b/engine/link.asm
@@ -578,7 +578,7 @@
 rept 3
 	ld [hli], a
 endr
-	ld b, wc6d3 - (wMisc + 3)
+	ld b, $c8
 	xor a
 .loop3
 	ld [hli], a
--- a/engine/namingscreen.asm
+++ b/engine/namingscreen.asm
@@ -3,6 +3,7 @@
 	call NamingScreen
 	call ReturnToMapWithSpeechTextbox
 	ret
+
 ; 0x116c1
 
 NamingScreen: ; 116c1
@@ -37,6 +38,7 @@
 	ld [Options], a
 	call ClearJoypad
 	ret
+
 ; 116f8
 
 .SetUpNamingScreen: ; 116f8
@@ -54,6 +56,7 @@
 	call SetPalettes
 	call NamingScreen_InitNameEntry
 	ret
+
 ; 1171d
 
 .GetNamingScreenSetup: ; 1171d
@@ -69,9 +72,9 @@
 	ld h, [hl]
 	ld l, a
 	jp [hl]
+
 ; 1172e
 
-
 .Jumptable: ; 1172e (4:572e)
 	dw .Pokemon
 	dw .Player
@@ -82,7 +85,6 @@
 	dw .Pokemon
 	dw .Pokemon
 
-
 .Pokemon: ; 1173e (4:573e)
 	ld a, [CurPartySpecies]
 	ld [wd265], a
@@ -113,11 +115,13 @@
 .genderless
 	call .StoreMonIconParams
 	ret
+
 ; 11780 (4:5780)
 
 .NicknameStrings: ; 11780
 	db "'S@"
 	db "NICKNAME?@"
+
 ; 1178d
 
 .Player: ; 1178d (4:578d)
@@ -128,10 +132,12 @@
 	call PlaceString
 	call .StoreSpriteIconParams
 	ret
+
 ; 117a3 (4:57a3)
 
 .PlayerNameString: ; 117a3
 	db "YOUR NAME?@"
+
 ; 117ae
 
 .Rival: ; 117ae (4:57ae)
@@ -143,10 +149,12 @@
 	call PlaceString
 	call .StoreSpriteIconParams
 	ret
+
 ; 117c3 (4:57c3)
 
 .RivalNameString: ; 117c3
 	db "RIVAL'S NAME?@"
+
 ; 117d1
 
 .Mom: ; 117d1 (4:57d1)
@@ -158,10 +166,12 @@
 	call PlaceString
 	call .StoreSpriteIconParams
 	ret
+
 ; 117e6 (4:57e6)
 
 .MomNameString: ; 117e6
 	db "MOTHER'S NAME?@"
+
 ; 117f5
 
 .Box: ; 117f5 (4:57f5)
@@ -170,11 +180,11 @@
 	lb bc, BANK(PokeBallSpriteGFX), $4
 	call Request2bpp
 	xor a
-	ld hl, wc300
+	ld hl, wSpriteAnimDict
 	ld [hli], a
 	ld [hl], a
 	depixel 4, 4, 4, 0
-	ld a, SPRITE_ANIM_INDEX_WALK_CYCLE
+	ld a, SPRITE_ANIM_INDEX_RED_WALK
 	call _InitSpriteAnimStruct
 	ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
 	add hl, bc
@@ -184,10 +194,12 @@
 	call PlaceString
 	call .StoreBoxIconParams
 	ret
+
 ; 11822 (4:5822)
 
 .BoxNameString: ; 11822
 	db "BOX NAME?@"
+
 ; 1182c
 
 .Tomodachi: ; 1182c (4:582c)
@@ -196,10 +208,12 @@
 	call PlaceString
 	call .StoreSpriteIconParams
 	ret
+
 ; 11839 (4:5839)
 
 .oTomodachi_no_namae_sutoringu: ; 11839
 	db "おともだち の なまえは?@"
+
 ; 11847
 
 .LoadSprite: ; 11847 (4:5847)
@@ -216,11 +230,11 @@
 	ld hl, VTiles0 tile $04
 	call Request2bpp
 	xor a
-	ld hl, wc300
+	ld hl, wSpriteAnimDict
 	ld [hli], a
 	ld [hl], a
 	pop de
-	ld b, SPRITE_ANIM_INDEX_WALK_CYCLE
+	ld b, SPRITE_ANIM_INDEX_RED_WALK
 	ld a, d
 	cp KrisSpriteGFX / $100
 	jr nz, .not_kris
@@ -227,7 +241,7 @@
 	ld a, e
 	cp KrisSpriteGFX % $100
 	jr nz, .not_kris
-	ld b, SPRITE_ANIM_INDEX_1E
+	ld b, SPRITE_ANIM_INDEX_BLUE_WALK
 .not_kris
 	ld a, b
 	depixel 4, 4, 4, 0
@@ -257,7 +271,6 @@
 	ld [wNamingScreenStringEntryCoord + 1], a
 	ret
 
-
 NamingScreen_IsTargetBox: ; 1189c
 	push bc
 	push af
@@ -268,6 +281,7 @@
 	dec b
 	pop bc
 	ret
+
 ; 118a8
 
 NamingScreen_InitText: ; 118a8
@@ -330,6 +344,7 @@
 	dec b
 	jr nz, .row
 	ret
+
 ; 11915
 
 NamingScreenJoypadLoop: ; 11915
@@ -352,6 +367,7 @@
 	ld [hSCY], a
 	scf
 	ret
+
 ; 11940
 
 .UpdateStringEntry: ; 11940
@@ -377,6 +393,7 @@
 	ld a, $1
 	ld [hBGMapMode], a
 	ret
+
 ; 11968
 
 .RunJumptable: ; 11968
@@ -391,14 +408,13 @@
 	ld h, [hl]
 	ld l, a
 	jp [hl]
+
 ; 11977
 
-
 .Jumptable: ; 11977 (4:5977)
 	dw .InitCursor
 	dw .ReadButtons
 
-
 .InitCursor: ; 1197b (4:597b)
 	depixel 10, 3
 	call NamingScreen_IsTargetBox
@@ -410,7 +426,7 @@
 	ld a, c
 	ld [wNamingScreenCursorObjectPointer], a
 	ld a, b
-	ld [wc6d6], a
+	ld [wNamingScreenCursorObjectPointer + 1], a
 	ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
 	add hl, bc
 	ld a, [hl]
@@ -569,6 +585,7 @@
 	add hl, bc
 	ld [hl], a
 	ret
+
 ; 11a79 (4:5a79)
 
 .LetterEntries: ; 11a79
@@ -576,6 +593,7 @@
 
 .CaseDelEnd: ; 11a82
 	db $00, $00, $00, $30, $30, $30, $60, $60, $60
+
 ; 11a8b
 
 .GetDPad: ; 11a8b (4:5a8b)
@@ -593,6 +611,7 @@
 	and D_RIGHT
 	jr nz, .right
 	ret
+
 .right
 	call NamingScreen_GetCursorPosition
 	and a
@@ -604,9 +623,11 @@
 	jr nc, .asm_11ab4
 	inc [hl]
 	ret
+
 .asm_11ab4
 	ld [hl], $0
 	ret
+
 .asm_11ab7
 	cp $3
 	jr nz, .asm_11abc
@@ -619,6 +640,7 @@
 	add hl, bc
 	ld [hl], a
 	ret
+
 .left
 	call NamingScreen_GetCursorPosition
 	and a
@@ -630,9 +652,11 @@
 	jr z, .asm_11ad5
 	dec [hl]
 	ret
+
 .asm_11ad5
 	ld [hl], $8
 	ret
+
 .asm_11ad8
 	cp $1
 	jr nz, .asm_11ade
@@ -648,6 +672,7 @@
 	add hl, bc
 	ld [hl], a
 	ret
+
 .down
 	ld hl, SPRITEANIMSTRUCT_0D
 	add hl, bc
@@ -658,14 +683,17 @@
 	jr nc, .asm_11aff
 	inc [hl]
 	ret
+
 .asm_11af9
 	cp $4
 	jr nc, .asm_11aff
 	inc [hl]
 	ret
+
 .asm_11aff
 	ld [hl], $0
 	ret
+
 .up
 	ld hl, SPRITEANIMSTRUCT_0D
 	add hl, bc
@@ -674,6 +702,7 @@
 	jr z, .asm_11b0c
 	dec [hl]
 	ret
+
 .asm_11b0c
 	ld [hl], $4
 	call NamingScreen_IsTargetBox
@@ -710,6 +739,7 @@
 .end_of_string
 	scf
 	ret
+
 ; 11b39 (4:5b39)
 
 ; XXX
@@ -735,6 +765,7 @@
 .done
 	ld a, [hl]
 	jr NamingScreen_LoadNextCharacter
+
 ; 11b56
 
 Dakutens: ; Dummied out
@@ -752,6 +783,7 @@
 	db "はぱ", "ひぴ", "ふぷ", "へぺ", "ほぽ"
 	db "ハパ", "ヒピ", "フプ", "へぺ", "ホポ"
 	db $ff
+
 ; 11bbc
 
 NamingScreen_DeleteCharacter: ; 11bbc (4:5bbc)
@@ -781,6 +813,7 @@
 	add hl, de
 	pop af
 	ret
+
 ; 11be0
 
 NamingScreen_InitNameEntry: ; 11be0
@@ -801,9 +834,9 @@
 	jr nz, .loop
 	ld [hl], "@"
 	ret
+
 ; 11bf7
 
-
 NamingScreen_StoreEntry: ; 11bf7 (4:5bf7)
 	ld hl, wNamingScreenDestinationPointer
 	ld a, [hli]
@@ -861,6 +894,7 @@
 	add hl, bc
 	dec d
 	jr .loop
+
 .done
 	add hl, de
 	ld a, [hl]
@@ -867,7 +901,6 @@
 	ld [wNamingScreenLastCharacter], a
 	ret
 
-
 LoadNamingScreenGFX: ; 11c51
 	call ClearSprites
 	callab ClearSpriteAnims
@@ -912,6 +945,7 @@
 	ld a, $7
 	ld [hWX], a
 	ret
+
 ; 11cb7
 
 NamingScreenGFX_Border: ; 11cb7
@@ -928,6 +962,7 @@
 	db "s t u v w x y z  "
 	db "× ( ) : ; [ ] <PK> <MN>"
 	db "UPPER  DEL   END "
+
 BoxNameInputLower:
 	db "a b c d e f g h i"
 	db "j k l m n o p q r"
@@ -935,6 +970,7 @@
 	db "é 'd 'l 'm 'r 's 't 'v 0"
 	db "1 2 3 4 5 6 7 8 9"
 	db "UPPER  DEL   END "
+
 NameInputUpper: ; Unreferenced?
 	db "A B C D E F G H I"
 	db "J K L M N O P Q R"
@@ -941,6 +977,7 @@
 	db "S T U V W X Y Z  "
 	db "- ? ! / . ,      "
 	db "lower  DEL   END "
+
 BoxNameInputUpper:
 	db "A B C D E F G H I"
 	db "J K L M N O P Q R"
@@ -948,6 +985,7 @@
 	db "× ( ) : ; [ ] <PK> <MN>"
 	db "- ? ! ♂ ♀ / . , &"
 	db "lower  DEL   END "
+
 ; 11e5d
 
 GFX_11e5d: ; ????
@@ -1047,6 +1085,7 @@
 
 .Dummy: ; dummied out
 	db "メールを かいてね@"
+
 ; 11f84
 
 .InitCharset: ; 11f84 (4:5f84)
@@ -1137,7 +1176,6 @@
 	dw .init_blinking_cursor
 	dw .process_joypad
 
-
 .init_blinking_cursor: ; 1201b (4:601b)
 	depixel 9, 2
 	ld a, SPRITE_ANIM_INDEX_09
@@ -1242,6 +1280,7 @@
 	ret
 
 ; called from engine/sprite_anims.asm
+
 ComposeMail_AnimateCursor: ; 120c1 (4:60c1)
 	call .GetDPad
 	ld hl, SPRITEANIMSTRUCT_0D
@@ -1283,6 +1322,7 @@
 
 .CaseDelEnd: ; 12102
 	db $00, $00, $00, $30, $30, $30, $60, $60, $60, $60
+
 ; 1210c
 
 .GetDPad: ; 1210c (4:610c)
@@ -1425,6 +1465,7 @@
 MailComposition_TryAddLastCharacter: ; 121ac (4:61ac)
 	ld a, [wNamingScreenLastCharacter]
 	jp MailComposition_TryAddCharacter
+
 ; 121b2 (4:61b2)
 
 ; XXX
@@ -1461,6 +1502,7 @@
 .asm_121d9
 	ld a, [hl]
 	jp NamingScreen_LoadNextCharacter
+
 ; 121dd
 
 MailEntry_Uppercase: ; 122dd
@@ -1470,6 +1512,7 @@
 	db "1 2 3 4 5 6 7 8 9 0"
 	db "<PK> <MN> <PO> <KE> é ♂ ♀ ¥ … ×"
 	db "lower  DEL   END   "
+
 ; 1224f
 
 MailEntry_Lowercase: ; 1224f
@@ -1479,4 +1522,5 @@
 	db "'d 'l 'm 'r 's 't 'v & ( )"
 	db "<``> <''> [ ] ' : ;      "
 	db "UPPER  DEL   END   "
+
 ; 122c1
--- a/engine/phone.asm
+++ b/engine/phone.asm
@@ -651,15 +651,16 @@
 	call GetCallerName
 	ret
 
-Function9038a: ; 9038a (24:438a)
+CheckCanDeletePhoneNumber: ; 9038a (24:438a)
 	ld a, c
 	call GetCallerTrainerClass
 	ld a, c
+	; and a
 	ret nz
 	ld a, b
-	cp $1
+	cp PHONECONTACT_MOM
 	ret z
-	cp $4
+	cp PHONECONTACT_ELM
 	ret z
 	ld c, $1
 	ret
--- a/engine/pokegear.asm
+++ b/engine/pokegear.asm
@@ -3,20 +3,16 @@
 	ld a, [hl]
 	push af
 	set NO_TEXT_SCROLL, [hl]
-
 	ld a, [hInMenu]
 	push af
 	ld a, $1
 	ld [hInMenu], a
-
 	ld a, [VramState]
 	push af
 	xor a
 	ld [VramState], a
-
 	call Function90bea
 	call DelayFrame
-
 .loop
 	call UpdateTime
 	call JoyTextDelay
@@ -23,7 +19,7 @@
 	ld a, [wJumptableIndex]
 	bit 7, a
 	jr nz, .done
-	call Function90f04
+	call PokegearJumptable
 	callba PlaySpriteAnimations
 	call DelayFrame
 	jr .loop
@@ -71,14 +67,14 @@
 	ld [wcf64], a
 	ld [wcf65], a
 	ld [wcf66], a
-	ld [wc6d2], a
-	ld [wc6d1], a
-	ld [wc6d3], a
-	ld [wc6d9], a
-	ld [wc6da], a
-	ld [wc6db], a
-	call Function90d9e
-	call Function90da8
+	ld [wPokegearPhoneScrollPosition], a
+	ld [wPokegearPhoneCursorPosition], a
+	ld [wPokegearPhoneSelectedPerson], a
+	ld [wPokegearRadioChannelBank], a
+	ld [wPokegearRadioChannelAddr], a
+	ld [wPokegearRadioChannelAddr + 1], a
+	call Pokegear_InitJumptableIndices
+	call InitPokegearTilemap
 	ld b, SCGB_POKEGEAR_PALS
 	call GetSGBLayout
 	call SetPalettes
@@ -95,17 +91,14 @@
 	ld de, VTiles2
 	ld a, BANK(TownMapGFX)
 	call FarDecompress
-
 	ld hl, PokegearGFX
 	ld de, VTiles2 + $30 tiles
 	ld a, BANK(PokegearGFX)
 	call FarDecompress
-
 	ld hl, PokegearSpritesGFX
 	ld de, VTiles0
 	ld a, BANK(PokegearSpritesGFX)
 	call Decompress
-
 	ld a, [MapGroup]
 	ld b, a
 	ld a, [MapNumber]
@@ -113,14 +106,11 @@
 	call GetWorldMapLocation
 	cp FAST_SHIP
 	jr z, .ssaqua
-
 	callba GetPlayerIcon
-
 	push de
 	ld h, d
 	ld l, e
 	ld a, b
-
 	; standing sprite
 	push af
 	ld de, VTiles0 tile $10
@@ -127,9 +117,7 @@
 	ld bc, 4 tiles
 	call FarCopyBytes
 	pop af
-
 	pop hl
-
 	; walking sprite
 	ld de, 12 tiles
 	add hl, de
@@ -144,6 +132,7 @@
 	ld bc, 8 tiles
 	call CopyBytes
 	ret
+
 ; 90cb2
 
 FastShipGFX: ; 90cb2
@@ -170,6 +159,7 @@
 	add hl, bc
 	ld [hl], a
 	ret
+
 ; 90d52 (24:4d52)
 
 Unknown_90d52: ; 90d52
@@ -190,9 +180,9 @@
 	ld c, a
 	call GetWorldMapLocation
 	ret
+
 ; 90d70
 
-
 Function90d70: ; 90d70 (24:4d70)
 	ld a, [MapGroup]
 	ld b, a
@@ -199,19 +189,15 @@
 	ld a, [MapNumber]
 	ld c, a
 	call GetWorldMapLocation
-
 	cp FAST_SHIP
 	jr z, .FastShip
-
 	cp SPECIAL_MAP
 	jr nz, .LoadLandmark
-
 	ld a, [BackupMapGroup]
 	ld b, a
 	ld a, [BackupMapNumber]
 	ld c, a
 	call GetWorldMapLocation
-
 .LoadLandmark
 	ld [wTownMapPlayerIconLandmark], a
 	ld [wTownMapCursorLandmark], a
@@ -223,7 +209,7 @@
 	ld [wTownMapCursorLandmark], a
 	ret
 
-Function90d9e: ; 90d9e (24:4d9e)
+Pokegear_InitJumptableIndices: ; 90d9e (24:4d9e)
 	ld a, $0
 	ld [wJumptableIndex], a
 	xor a
@@ -230,7 +216,7 @@
 	ld [wcf64], a
 	ret
 
-Function90da8: ; 90da8 (24:4da8)
+InitPokegearTilemap: ; 90da8 (24:4da8)
 	xor a
 	ld [hBGMapMode], a
 	hlcoord 0, 0
@@ -242,39 +228,37 @@
 	add a
 	ld e, a
 	ld d, 0
-	ld hl, Jumptable_90e12
+	ld hl, .Jumptable
 	add hl, de
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-	ld de, .asm_90dcb
+	ld de, .return_from_jumptable
 	push de
 	jp [hl]
 
-.asm_90dcb
+.return_from_jumptable
 	call Function90eb0
 	callba TownMapPals
 	ld a, [wcf65]
 	and a
-	jr nz, .asm_90de8
-
+	jr nz, .kanto_0
 	xor a
 	ld [hBGMapAddress], a
 	ld a, VBGMap0 / $100
 	ld [hBGMapAddress + 1], a
-	call Function90e00
+	call .UpdateBGMap
 	ld a, $90
-	jr .asm_90df3
+	jr .finish
 
-.asm_90de8
+.kanto_0
 	xor a
 	ld [hBGMapAddress], a
 	ld a, VBGMap1 / $100
 	ld [hBGMapAddress + 1], a
-	call Function90e00
+	call .UpdateBGMap
 	xor a
-
-.asm_90df3
+.finish
 	ld [hWY], a
 	ld a, [wcf65]
 	and 1
@@ -282,7 +266,7 @@
 	ld [wcf65], a
 	ret
 
-Function90e00: ; 90e00 (24:4e00)
+.UpdateBGMap: ; 90e00 (24:4e00)
 	ld a, [hCGB]
 	and a
 	jr z, .asm_90e0e
@@ -293,18 +277,20 @@
 .asm_90e0e
 	call WaitBGMap
 	ret
+
 ; 90e12 (24:4e12)
 
-Jumptable_90e12: ; 90e12
-	dw Function90e1a
-	dw Function90e3f
-	dw Function90e82
-	dw Function90e72
+.Jumptable: ; 90e12
+	dw .Clock
+	dw .Map
+	dw .Phone
+	dw .Radio
+
 ; 90e1a
 
-Function90e1a: ; 90e1a
+.Clock: ; 90e1a
 	ld de, ClockTilemapRLE
-	call Function914bb
+	call Pokegear_LoadTilemapRLE
 	hlcoord 12, 1
 	ld de, .switch
 	call PlaceString
@@ -311,8 +297,9 @@
 	hlcoord 0, 12
 	lb bc, 4, 18
 	call TextBox
-	call Function90f86
+	call Pokegear_UpdateClock
 	ret
+
 ; 90e36 (24:4e36)
 
 .switch
@@ -319,8 +306,7 @@
 	db " SWITCH▶@"
 ; 90e3f
 
-Function90e3f: ; 90e3f
-
+.Map: ; 90e3f
 	ld a, [wTownMapPlayerIconLandmark]
 	cp FAST_SHIP
 	jr z, .johto
@@ -329,6 +315,7 @@
 .johto
 	ld e, 0
 	jr .ok
+
 .kanto
 	ld e, 1
 .ok
@@ -344,26 +331,29 @@
 	ld a, [wTownMapCursorLandmark]
 	call Function910b4
 	ret
+
 ; 90e72
 
-Function90e72: ; 90e72
+.Radio: ; 90e72
 	ld de, RadioTilemapRLE
-	call Function914bb
+	call Pokegear_LoadTilemapRLE
 	hlcoord 0, 12
 	lb bc, 4, 18
 	call TextBox
 	ret
+
 ; 90e82
 
-Function90e82: ; 90e82
+.Phone: ; 90e82
 	ld de, PhoneTilemapRLE
-	call Function914bb
+	call Pokegear_LoadTilemapRLE
 	hlcoord 0, 12
 	lb bc, 4, 18
 	call TextBox
 	call Function90e98
-	call Function912d8
+	call PokegearPhone_UpdateDisplayList
 	ret
+
 ; 90e98
 
 Function90e98: ; 90e98 (24:4e98)
@@ -419,7 +409,6 @@
 Function90ef2: ; 90ef2 (24:4ef2)
 	hlcoord 6, 0
 	ld a, $42
-
 Function90ef7: ; 90ef7 (24:4ef7)
 	ld [hli], a
 	inc a
@@ -432,38 +421,36 @@
 	ld [hld], a
 	ret
 
-Function90f04: ; 90f04 (24:4f04)
+PokegearJumptable: ; 90f04 (24:4f04)
 	ld a, [wJumptableIndex]
 	ld e, a
 	ld d, 0
-	ld hl, Jumptable_90f13
-rept 2
+	ld hl, .Jumptable
 	add hl, de
-endr
+	add hl, de
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
 	jp [hl]
 
-Jumptable_90f13: ; 90f13 (24:4f13)
-	dw Function90f2d
-	dw Function90f3e
-	dw Function90fb4
-	dw Function90fcd
-	dw Function90fee
-	dw Function90fcd
-	dw Function90fe9
-	dw Function91156
-	dw Function91171
-	dw Function911eb
-	dw Function91256
-	dw Function910f9
-	dw Function91112
+.Jumptable: ; 90f13 (24:4f13)
+	dw PokegearClock_Init
+	dw PokegearClock_Joypad
+	dw PokegearMap_CheckRegion
+	dw PokegearMap_Init
+	dw PokegearMap_JohtoMap
+	dw PokegearMap_Init
+	dw PokegearMap_KantoMap
+	dw PokegearPhone_Init
+	dw PokegearPhone_Joypad
+	dw PokegearPhone_MakePhoneCall
+	dw PokegearPhone_FinishPhoneCall
+	dw PokegearRadio_Init
+	dw PokegearRadio_Joypad
 
-
-Function90f2d: ; 90f2d (24:4f2d)
-	call Function90da8
-	ld hl, UnknownText_0x914d3
+PokegearClock_Init: ; 90f2d (24:4f2d)
+	call InitPokegearTilemap
+	ld hl, PokegearText_PressAnyButtonToExit
 	call PrintText
 	ld hl, wJumptableIndex
 	inc [hl]
@@ -470,59 +457,54 @@
 	call Function91492
 	ret
 
-Function90f3e: ; 90f3e (24:4f3e)
-	call Function90f7b
+PokegearClock_Joypad: ; 90f3e (24:4f3e)
+	call .UpdateClock
 	ld hl, hJoyLast
-
 	ld a, [hl]
 	and A_BUTTON + B_BUTTON + START + SELECT
-	jr nz, .asm_90f75
-
+	jr nz, .quit
 	ld a, [hl]
 	and D_RIGHT
 	ret z
-
 	ld a, [wPokegearFlags]
 	bit 0, a
-	jr z, .asm_90f5a
+	jr z, .no_map_card
 	ld c, $2
 	ld b, $1
-	jr .asm_90f71
-.asm_90f5a
+	jr .done
 
+.no_map_card
 	ld a, [wPokegearFlags]
 	bit 2, a
-	jr z, .asm_90f67
+	jr z, .no_phone_card
 	ld c, $7
 	ld b, $2
-	jr .asm_90f71
-.asm_90f67
+	jr .done
 
+.no_phone_card
 	ld a, [wPokegearFlags]
 	bit 1, a
 	ret z
-
 	ld c, $b
 	ld b, $3
-
-.asm_90f71
-	call Function91480
+.done
+	call Pokegear_SwitchPage
 	ret
 
-.asm_90f75
+.quit
 	ld hl, wJumptableIndex
 	set 7, [hl]
 	ret
 
-Function90f7b: ; 90f7b (24:4f7b)
+.UpdateClock: ; 90f7b (24:4f7b)
 	xor a
 	ld [hBGMapMode], a
-	call Function90f86
+	call Pokegear_UpdateClock
 	ld a, $1
 	ld [hBGMapMode], a
 	ret
 
-Function90f86: ; 90f86 (24:4f86)
+Pokegear_UpdateClock: ; 90f86 (24:4f86)
 	hlcoord 3, 5
 	lb bc, 5, 14
 	call ClearBox
@@ -532,21 +514,22 @@
 	ld c, a
 	decoord 6, 8
 	callba PrintHoursMins
-	ld hl, UnknownText_0x90faf
+	ld hl, .DayText
 	bccoord 6, 6
 	call PlaceWholeStringInBoxAtOnce
 	ret
+
 ; 90fa8 (24:4fa8)
+	db "ごぜん@"
+	db "ごご@"
 
-String_90fa8: db "ごぜん@"
-String_90fac: db "ごご@"
-
-UnknownText_0x90faf: ; 0x90faf
+.DayText: ; 0x90faf
 	text_jump UnknownText_0x1c5821
 	db "@"
+
 ; 0x90fb4
 
-Function90fb4: ; 90fb4 (24:4fb4)
+PokegearMap_CheckRegion: ; 90fb4 (24:4fb4)
 	ld a, [wTownMapPlayerIconLandmark]
 	cp FAST_SHIP
 	jr z, .johto
@@ -555,7 +538,6 @@
 .johto
 	ld a, 3
 	jr .done
-
 	ret
 
 .kanto
@@ -565,28 +547,28 @@
 	call Function91492
 	ret
 
-Function90fcd: ; 90fcd (24:4fcd)
-	call Function90da8
+PokegearMap_Init: ; 90fcd (24:4fcd)
+	call InitPokegearTilemap
 	ld a, [wTownMapPlayerIconLandmark]
-	call Function9106a
+	call PokegearMap_InitPlayerIcon
 	ld a, [wTownMapCursorLandmark]
-	call Function91098
+	call PokegearMap_InitCursor
 	ld a, c
-	ld [wc6d5], a
+	ld [wPokegearMapCursorObjectPointer], a
 	ld a, b
-	ld [wc6d6], a
+	ld [wPokegearMapCursorObjectPointer + 1], a
 	ld hl, wJumptableIndex
 	inc [hl]
 	ret
 
-Function90fe9: ; 90fe9 (24:4fe9)
+PokegearMap_KantoMap: ; 90fe9 (24:4fe9)
 	call TownMap_GetKantoLandmarkLimits
-	jr Function90ff2
+	jr PokegearMap_ContinueMap
 
-Function90fee: ; 90fee (24:4fee)
-	ld d, $2e
-	ld e, $1
-Function90ff2: ; 90ff2 (24:4ff2)
+PokegearMap_JohtoMap: ; 90fee (24:4fee)
+	ld d, SILVER_CAVE
+	ld e, NEW_BARK_TOWN
+PokegearMap_ContinueMap: ; 90ff2 (24:4ff2)
 	ld hl, hJoyLast
 	ld a, [hl]
 	and B_BUTTON
@@ -597,18 +579,18 @@
 	ld a, [hl]
 	and D_LEFT
 	jr nz, .left
-	call Function9102f
+	call .DPad
 	ret
 
 .right
 	ld a, [wPokegearFlags]
 	bit 2, a
-	jr z, .asm_91015
+	jr z, .no_phone
 	ld c, $7
 	ld b, $2
 	jr .done
 
-.asm_91015
+.no_phone
 	ld a, [wPokegearFlags]
 	bit 1, a
 	ret z
@@ -620,14 +602,15 @@
 	ld c, $0
 	ld b, $0
 .done
-	call Function91480
+	call Pokegear_SwitchPage
 	ret
+
 .cancel
 	ld hl, wJumptableIndex
 	set 7, [hl]
 	ret
 
-Function9102f: ; 9102f (24:502f)
+.DPad: ; 9102f (24:502f)
 	ld hl, hJoyLast
 	ld a, [hl]
 	and D_UP
@@ -636,50 +619,49 @@
 	and D_DOWN
 	jr nz, .down
 	ret
+
 .up
 	ld hl, wTownMapCursorLandmark
 	ld a, [hl]
 	cp d
-	jr c, .asm_91047
+	jr c, .wrap_around_up
 	ld a, e
 	dec a
 	ld [hl], a
-.asm_91047
+.wrap_around_up
 	inc [hl]
-	jr .done
+	jr .done_dpad
 
 .down
 	ld hl, wTownMapCursorLandmark
 	ld a, [hl]
 	cp e
-	jr nz, .asm_91054
+	jr nz, .wrap_around_down
 	ld a, d
 	inc a
 	ld [hl], a
-.asm_91054
+.wrap_around_down
 	dec [hl]
-
-.done
+.done_dpad
 	ld a, [wTownMapCursorLandmark]
 	call Function910b4
-	ld a, [wc6d5]
+	ld a, [wPokegearMapCursorObjectPointer]
 	ld c, a
-	ld a, [wc6d6]
+	ld a, [wPokegearMapCursorObjectPointer + 1]
 	ld b, a
 	ld a, [wTownMapCursorLandmark]
 	call Function910d4
 	ret
 
-Function9106a: ; 9106a
+PokegearMap_InitPlayerIcon: ; 9106a
 	push af
 	depixel 0, 0
-	ld b, SPRITE_ANIM_INDEX_WALK_CYCLE
+	ld b, SPRITE_ANIM_INDEX_RED_WALK
 	ld a, [PlayerGender]
 	bit 0, a
-	jr z, .asm_91079
-	ld b, SPRITE_ANIM_INDEX_1E
-
-.asm_91079
+	jr z, .got_gender
+	ld b, SPRITE_ANIM_INDEX_BLUE_WALK
+.got_gender
 	ld a, b
 	call _InitSpriteAnimStruct
 	ld hl, SPRITEANIMSTRUCT_TILE_ID
@@ -697,9 +679,10 @@
 	add hl, bc
 	ld [hl], d
 	ret
+
 ; 91098
 
-Function91098: ; 91098
+PokegearMap_InitCursor: ; 91098
 	push af
 	depixel 0, 0
 	ld a, SPRITE_ANIM_INDEX_0D
@@ -715,6 +698,7 @@
 	call Function910d4
 	pop bc
 	ret
+
 ; 910b4
 
 Function910b4: ; 910b4
@@ -731,6 +715,7 @@
 	hlcoord 8, 0
 	ld [hl], $34
 	ret
+
 ; 910d4
 
 Function910d4: ; 910d4
@@ -745,6 +730,7 @@
 	add hl, bc
 	ld [hl], d
 	ret
+
 ; 910e8
 
 TownMap_GetKantoLandmarkLimits: ; 910e8
@@ -759,11 +745,11 @@
 	ld d, ROUTE_28
 	ld e, VICTORY_ROAD
 	ret
+
 ; 910f9
 
-
-Function910f9: ; 910f9 (24:50f9)
-	call Function90da8
+PokegearRadio_Init: ; 910f9 (24:50f9)
+	call InitPokegearTilemap
 	depixel 4, 10, 4, 4
 	ld a, SPRITE_ANIM_INDEX_14
 	call _InitSpriteAnimStruct
@@ -775,7 +761,7 @@
 	inc [hl]
 	ret
 
-Function91112: ; 91112 (24:5112)
+PokegearRadio_Joypad: ; 91112 (24:5112)
 	ld hl, hJoyLast
 	ld a, [hl]
 	and B_BUTTON
@@ -783,11 +769,11 @@
 	ld a, [hl]
 	and D_LEFT
 	jr nz, .left
-	ld a, [wc6da]
+	ld a, [wPokegearRadioChannelAddr]
 	ld l, a
-	ld a, [wc6db]
+	ld a, [wPokegearRadioChannelAddr + 1]
 	ld h, a
-	ld a, [wc6d9]
+	ld a, [wPokegearRadioChannelBank]
 	and a
 	ret z
 	rst FarCall
@@ -813,7 +799,7 @@
 	ld c, $0
 	ld b, $0
 .asm_9114c
-	call Function91480
+	call Pokegear_SwitchPage
 	ret
 
 .cancel
@@ -821,20 +807,20 @@
 	set 7, [hl]
 	ret
 
-Function91156: ; 91156 (24:5156)
+PokegearPhone_Init: ; 91156 (24:5156)
 	ld hl, wJumptableIndex
 	inc [hl]
 	xor a
-	ld [wc6d2], a
-	ld [wc6d1], a
-	ld [wc6d3], a
-	call Function90da8
+	ld [wPokegearPhoneScrollPosition], a
+	ld [wPokegearPhoneCursorPosition], a
+	ld [wPokegearPhoneSelectedPerson], a
+	call InitPokegearTilemap
 	call Function91492
-	ld hl, UnknownText_0x914ce
+	ld hl, PokegearText_WhomToCall
 	call PrintText
 	ret
 
-Function91171: ; 91171 (24:5171)
+PokegearPhone_Joypad: ; 91171 (24:5171)
 	ld hl, hJoyPressed
 	ld a, [hl]
 	and B_BUTTON
@@ -849,7 +835,7 @@
 	ld a, [hl]
 	and D_RIGHT
 	jr nz, .right
-	call Function9126d
+	call PokegearPhone_GetDPad
 	ret
 
 .left
@@ -859,6 +845,7 @@
 	ld c, $2
 	ld b, $1
 	jr .asm_911ac
+
 .asm_9119c
 	ld c, $0
 	ld b, $0
@@ -871,7 +858,7 @@
 	ld c, $b
 	ld b, $3
 .asm_911ac
-	call Function91480
+	call Pokegear_SwitchPage
 	ret
 
 .b
@@ -881,11 +868,11 @@
 
 .a
 	ld hl, wPhoneList
-	ld a, [wc6d2]
+	ld a, [wPokegearPhoneScrollPosition]
 	ld e, a
 	ld d, 0
 	add hl, de
-	ld a, [wc6d1]
+	ld a, [wPokegearPhoneCursorPosition]
 	ld e, a
 	ld d, 0
 	add hl, de
@@ -892,16 +879,14 @@
 	ld a, [hl]
 	and a
 	ret z
-
-	ld [wc6d3], a
+	ld [wPokegearPhoneSelectedPerson], a
 	hlcoord 1, 4
-	ld a, [wc6d1]
+	ld a, [wPokegearPhoneCursorPosition]
 	ld bc, 20 * 2
 	call AddNTimes
 	ld [hl], "▷"
-	call Function91342
+	call PokegearPhoneContactSubmenu
 	jr c, .asm_911e5
-
 	ld hl, wJumptableIndex
 	inc [hl]
 	ret
@@ -911,7 +896,7 @@
 	ld [wJumptableIndex], a
 	ret
 
-Function911eb: ; 911eb (24:51eb)
+PokegearPhone_MakePhoneCall: ; 911eb (24:51eb)
 	call GetMapHeaderPhoneServiceNybble
 	and a
 	jr nz, .asm_91234
@@ -929,7 +914,7 @@
 	ld hl, UnknownText_0x9124c
 	call PrintText
 	call WaitSFX
-	ld a, [wc6d3]
+	ld a, [wPokegearPhoneSelectedPerson]
 	ld b, a
 	call Function90199
 	ld c, 10
@@ -938,10 +923,11 @@
 	set NO_TEXT_SCROLL, [hl]
 	ld a, $1
 	ld [hInMenu], a
-	call Function912b7
+	call PokegearPhone_UpdateCursor
 	ld hl, wJumptableIndex
 	inc [hl]
 	ret
+
 .asm_91234
 	callba Phone_NoSignal
 	ld hl, OutOfServiceAreaText
@@ -948,9 +934,10 @@
 	call PrintText
 	ld a, $8
 	ld [wJumptableIndex], a
-	ld hl, UnknownText_0x914ce
+	ld hl, PokegearText_WhomToCall
 	call PrintText
 	ret
+
 ; 9124c (24:524c)
 
 UnknownText_0x9124c: ; 0x9124c
@@ -957,6 +944,7 @@
 	;
 	text_jump UnknownText_0x1c5824
 	db "@"
+
 ; 0x91251
 
 OutOfServiceAreaText: ; 0x91251
@@ -963,9 +951,10 @@
 	; You're out of the service area.
 	text_jump UnknownText_0x1c5827
 	db "@"
+
 ; 0x91256
 
-Function91256: ; 91256 (24:5256)
+PokegearPhone_FinishPhoneCall: ; 91256 (24:5256)
 	ld a, [hJoyPressed]
 	and A_BUTTON | B_BUTTON
 	ret z
@@ -972,11 +961,11 @@
 	callba HangUp
 	ld a, $8
 	ld [wJumptableIndex], a
-	ld hl, UnknownText_0x914ce
+	ld hl, PokegearText_WhomToCall
 	call PrintText
 	ret
 
-Function9126d: ; 9126d (24:526d)
+PokegearPhone_GetDPad: ; 9126d (24:526d)
 	ld hl, hJoyLast
 	ld a, [hl]
 	and D_UP
@@ -987,52 +976,52 @@
 	ret
 
 .up
-	ld hl, wc6d1
+	ld hl, wPokegearPhoneCursorPosition
 	ld a, [hl]
 	and a
-	jr z, .asm_91285
+	jr z, .scroll_page_up
 	dec [hl]
-	jr .asm_912a3
+	jr .done_joypad_same_page
 
-.asm_91285
-	ld hl, wc6d2
+.scroll_page_up
+	ld hl, wPokegearPhoneScrollPosition
 	ld a, [hl]
 	and a
 	ret z
 	dec [hl]
-	jr .asm_912ad
+	jr .done_joypad_update_page
 
 .down
-	ld hl, wc6d1
+	ld hl, wPokegearPhoneCursorPosition
 	ld a, [hl]
 	cp $3
-	jr nc, .asm_91299
+	jr nc, .scroll_page_down
 	inc [hl]
-	jr .asm_912a3
+	jr .done_joypad_same_page
 
-.asm_91299
-	ld hl, wc6d2
+.scroll_page_down
+	ld hl, wPokegearPhoneScrollPosition
 	ld a, [hl]
 	cp $6
 	ret nc
 	inc [hl]
-	jr .asm_912ad
+	jr .done_joypad_update_page
 
-.asm_912a3
+.done_joypad_same_page
 	xor a
 	ld [hBGMapMode], a
-	call Function912b7
+	call PokegearPhone_UpdateCursor
 	call WaitBGMap
 	ret
 
-.asm_912ad
+.done_joypad_update_page
 	xor a
 	ld [hBGMapMode], a
-	call Function912d8
+	call PokegearPhone_UpdateDisplayList
 	call WaitBGMap
 	ret
 
-Function912b7: ; 912b7 (24:52b7)
+PokegearPhone_UpdateCursor: ; 912b7 (24:52b7)
 	ld a, " "
 	hlcoord 1, 4
 	ld [hl], a
@@ -1043,41 +1032,40 @@
 	hlcoord 1, 10
 	ld [hl], a
 	hlcoord 1, 4
-	ld a, [wc6d1]
-	ld bc, $28
+	ld a, [wPokegearPhoneCursorPosition]
+	ld bc, 2 * SCREEN_WIDTH
 	call AddNTimes
 	ld [hl], "▶"
 	ret
 
-Function912d8: ; 912d8 (24:52d8)
+PokegearPhone_UpdateDisplayList: ; 912d8 (24:52d8)
 	hlcoord 1, 3
-	ld b, $9
-	ld a, $7f
-.asm_912df
-	ld c, $12
-.asm_912e1
+	ld b, 9
+	ld a, " "
+.row
+	ld c, 18
+.col
 	ld [hli], a
 	dec c
-	jr nz, .asm_912e1
-rept 2
+	jr nz, .col
 	inc hl
-endr
+	inc hl
 	dec b
-	jr nz, .asm_912df
-	ld a, [wc6d2]
+	jr nz, .row
+	ld a, [wPokegearPhoneScrollPosition]
 	ld e, a
 	ld d, $0
 	ld hl, wPhoneList
 	add hl, de
 	xor a
-	ld [wc6d0], a
-.asm_912f8
+	ld [wPokegearPhoneLoadNameBuffer], a
+.loop
 	ld a, [hli]
 	push hl
 	push af
 	hlcoord 2, 4
-	ld a, [wc6d0]
-	ld bc, $28
+	ld a, [wPokegearPhoneLoadNameBuffer]
+	ld bc, 2 * SCREEN_WIDTH
 	call AddNTimes
 	ld d, h
 	ld e, l
@@ -1085,66 +1073,66 @@
 	ld b, a
 	call Function90380
 	pop hl
-	ld a, [wc6d0]
+	ld a, [wPokegearPhoneLoadNameBuffer]
 	inc a
-	ld [wc6d0], a
+	ld [wPokegearPhoneLoadNameBuffer], a
 	cp $4
-	jr c, .asm_912f8
-	call Function912b7
+	jr c, .loop
+	call PokegearPhone_UpdateCursor
 	ret
+
 ; 9131e (24:531e)
 
-Function9131e: ; 9131e
+PokegearPhone_DeletePhoneNumber: ; 9131e
 	ld hl, wPhoneList
-	ld a, [wc6d2]
+	ld a, [wPokegearPhoneScrollPosition]
 	ld e, a
 	ld d, 0
 	add hl, de
-	ld a, [wc6d1]
+	ld a, [wPokegearPhoneCursorPosition]
 	ld e, a
 	ld d, 0
 	add hl, de
 	ld [hl], 0
 	ld hl, wPhoneList
-	ld c, $a
-.asm_91336
+	ld c, CONTACT_LIST_SIZE
+.loop
 	ld a, [hli]
 	and a
-	jr nz, .asm_9133e
+	jr nz, .skip
 	ld a, [hld]
 	ld [hli], a
 	ld [hl], 0
-.asm_9133e
+.skip
 	dec c
-	jr nz, .asm_91336
+	jr nz, .loop
 	ret
+
 ; 91342
 
-Function91342: ; 91342 (24:5342)
+PokegearPhoneContactSubmenu: ; 91342 (24:5342)
 	ld hl, wPhoneList
-	ld a, [wc6d2]
+	ld a, [wPokegearPhoneScrollPosition]
 	ld e, a
 	ld d, 0
 	add hl, de
-	ld a, [wc6d1]
+	ld a, [wPokegearPhoneCursorPosition]
 	ld e, a
 	ld d, 0
 	add hl, de
 	ld c, [hl]
-	callba Function9038a
+	callba CheckCanDeletePhoneNumber
 	ld a, c
 	and a
-	jr z, .asm_91366
+	jr z, .cant_delete
+	ld hl, .CallDeleteCancelJumptable
+	ld de, .CallDeleteCancelStrings
+	jr .got_menu_data
 
-	ld hl, Jumptable_91455
-	ld de, Unknown_9143f
-	jr .asm_9136c
-
-.asm_91366
-	ld hl, Jumptable_9146a
-	ld de, Unknown_9145b
-
-.asm_9136c
+.cant_delete
+	ld hl, .CallCancelJumptable
+	ld de, .CallCancelStrings
+.got_menu_data
 	xor a
 	ld [hBGMapMode], a
 	push hl
@@ -1171,11 +1159,10 @@
 	call PlaceString
 	pop de
 	xor a
-	ld [wc6d4], a
-	call Function9141d
+	ld [wPokegearPhoneSubmenuCursor], a
+	call .UpdateCursor
 	call WaitBGMap
-
-.asm_91398
+.loop
 	push de
 	call JoyTextDelay
 	pop de
@@ -1182,89 +1169,90 @@
 	ld hl, hJoyPressed
 	ld a, [hl]
 	and D_UP
-	jr nz, .asm_913b4
+	jr nz, .d_up
 	ld a, [hl]
 	and D_DOWN
-	jr nz, .asm_913c1
+	jr nz, .d_down
 	ld a, [hl]
 	and A_BUTTON | B_BUTTON
-	jr nz, .asm_913d4
+	jr nz, .a_b
 	call DelayFrame
-	jr .asm_91398
+	jr .loop
 
-.asm_913b4
-	ld hl, wc6d4
+.d_up
+	ld hl, wPokegearPhoneSubmenuCursor
 	ld a, [hl]
 	and a
-	jr z, .asm_91398
+	jr z, .loop
 	dec [hl]
-	call Function9141d
-	jr .asm_91398
+	call .UpdateCursor
+	jr .loop
 
-.asm_913c1
+.d_down
 	ld hl, 2
 	add hl, de
-	ld a, [wc6d4]
+	ld a, [wPokegearPhoneSubmenuCursor]
 	inc a
 	cp [hl]
-	jr nc, .asm_91398
-	ld [wc6d4], a
-	call Function9141d
-	jr .asm_91398
+	jr nc, .loop
+	ld [wPokegearPhoneSubmenuCursor], a
+	call .UpdateCursor
+	jr .loop
 
-.asm_913d4
+.a_b
 	xor a
 	ld [hBGMapMode], a
-	call Function912d8
+	call PokegearPhone_UpdateDisplayList
 	ld a, $1
 	ld [hBGMapMode], a
 	pop hl
 	ld a, [hJoyPressed]
 	and B_BUTTON
-	jr nz, Function913f1
-
-	ld a, [wc6d4]
+	jr nz, .Cancel
+	ld a, [wPokegearPhoneSubmenuCursor]
 	ld e, a
 	ld d, 0
-rept 2
 	add hl, de
-endr
+	add hl, de
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
 	jp [hl]
 
-Function913f1: ; 913f1
-	ld hl, UnknownText_0x914ce
+.Cancel: ; 913f1
+	ld hl, PokegearText_WhomToCall
 	call PrintText
 	scf
 	ret
+
 ; 913f9 (24:53f9)
 
-Function913f9: ; 913f9
-	ld hl, UnknownText_0x914d8
+.Delete: ; 913f9
+	ld hl, PokegearText_DeleteStoredNumber
 	call MenuTextBox
 	call YesNoBox
 	call ExitMenu
-	jr c, .asm_91419
-	call Function9131e
+	jr c, .CancelDelete
+	call PokegearPhone_DeletePhoneNumber
 	xor a
 	ld [hBGMapMode], a
-	call Function912d8
-	ld hl, UnknownText_0x914ce
+	call PokegearPhone_UpdateDisplayList
+	ld hl, PokegearText_WhomToCall
 	call PrintText
 	call WaitBGMap
-.asm_91419
+.CancelDelete
 	scf
 	ret
+
 ; 9141b
 
-Function9141b: ; 9141b
+.Call: ; 9141b
 	and a
 	ret
+
 ; 9141d
 
-Function9141d: ; 9141d (24:541d)
+.UpdateCursor: ; 9141d (24:541d)
 	push de
 	ld a, [de]
 	inc de
@@ -1276,22 +1264,23 @@
 	ld c, a
 	push hl
 	ld a, " "
-	ld de, 20 * 2
-.asm_9142c
+	ld de, SCREEN_WIDTH * 2
+.clear_column
 	ld [hl], a
 	add hl, de
 	dec c
-	jr nz, .asm_9142c
+	jr nz, .clear_column
 	pop hl
-	ld a, [wc6d4]
-	ld bc, 20 * 2
+	ld a, [wPokegearPhoneSubmenuCursor]
+	ld bc, SCREEN_WIDTH  * 2
 	call AddNTimes
 	ld [hl], "▶"
 	pop de
 	ret
+
 ; 9143f (24:543f)
 
-Unknown_9143f: ; 9143f
+.CallDeleteCancelStrings: ; 9143f
 	dwcoord 10, 6
 	db 3
 	db   "CALL"
@@ -1300,13 +1289,14 @@
 	db   "@"
 ; 91455
 
-Jumptable_91455: ; 91455
-	dw Function9141b
-	dw Function913f9
-	dw Function913f1
+.CallDeleteCancelJumptable: ; 91455
+	dw .Call
+	dw .Delete
+	dw .Cancel
+
 ; 9145b
 
-Unknown_9145b: ; 9145b
+.CallCancelStrings: ; 9145b
 	dwcoord 10, 8
 	db 2
 	db   "CALL"
@@ -1314,29 +1304,29 @@
 	db   "@"
 ; 9146a
 
-Jumptable_9146a: ; 9146a
-	dw Function9141b
-	dw Function913f1
+.CallCancelJumptable: ; 9146a
+	dw .Call
+	dw .Cancel
+
 ; 9146e
 
-
-Function9146e: ; 9146e
+; XXX
 	ld a, [hHours]
 	cp 12
-	jr c, .asm_9147b
+	jr c, .am
 	sub 12
 	ld [wd265], a
 	scf
 	ret
 
-.asm_9147b
+.am
 	ld [wd265], a
 	and a
 	ret
+
 ; 91480
 
-
-Function91480: ; 91480 (24:5480)
+Pokegear_SwitchPage: ; 91480 (24:5480)
 	ld de, SFX_READ_TEXT_2
 	call PlaySFX
 	ld a, c
@@ -1347,23 +1337,23 @@
 	ret
 
 Function91492: ; 91492
-	ld a, [wc6dc]
+	ld a, [wPokegearRadioMusicPlaying]
 	cp $fe
 	jr z, .asm_914a3
 	cp $ff
 	call z, EnterMapMusic
 	xor a
-	ld [wc6dc], a
+	ld [wPokegearRadioMusicPlaying], a
 	ret
 
 .asm_914a3
 	call RestartMapMusic
 	xor a
-	ld [wc6dc], a
+	ld [wPokegearRadioMusicPlaying], a
 	ret
+
 ; 914ab
 
-
 DeleteSpriteAnimStruct2ToEnd: ; 914ab (24:54ab)
 	ld hl, SpriteAnim2
 	ld bc, wSpriteAnimationStructsEnd - SpriteAnim2
@@ -1373,9 +1363,9 @@
 	ld [wSpriteAnimCount], a
 	ret
 
-Function914bb: ; 914bb (24:54bb)
+Pokegear_LoadTilemapRLE: ; 914bb (24:54bb)
 	hlcoord 0, 0
-.asm_914be
+.row
 	ld a, [de]
 	cp $ff
 	ret z
@@ -1385,32 +1375,35 @@
 	ld c, a
 	inc de
 	ld a, b
-.asm_914c8
+.col
 	ld [hli], a
 	dec c
-	jr nz, .asm_914c8
-	jr .asm_914be
+	jr nz, .col
+	jr .row
+
 ; 914ce (24:54ce)
 
-UnknownText_0x914ce: ; 0x914ce
+PokegearText_WhomToCall: ; 0x914ce
 	; Whom do you want to call?
 	text_jump UnknownText_0x1c5847
 	db "@"
+
 ; 0x914d3
 
-UnknownText_0x914d3: ; 0x914d3
+PokegearText_PressAnyButtonToExit: ; 0x914d3
 	; Press any button to exit.
 	text_jump UnknownText_0x1c5862
 	db "@"
+
 ; 0x914d8
 
-UnknownText_0x914d8: ; 0x914d8
+PokegearText_DeleteStoredNumber: ; 0x914d8
 	; Delete this stored phone number?
 	text_jump UnknownText_0x1c587d
 	db "@"
+
 ; 0x914dd
 
-
 PokegearSpritesGFX: ; 914dd
 INCBIN "gfx/misc/pokegear_sprites.2bpp.lz"
 ; 9150d
@@ -1417,17 +1410,17 @@
 
 RadioTilemapRLE: ; 9150d
 INCBIN "gfx/unknown/09150d.tilemap.rle"
-
 PhoneTilemapRLE: ; 9158a
 INCBIN "gfx/unknown/09158a.tilemap.rle"
-
 ClockTilemapRLE: ; 915db
 INCBIN "gfx/unknown/0915db.tilemap.rle"
 ; 9163e
+
 _UpdateRadioStation: ; 9163e (24:563e)
 	jr UpdateRadioStation
 
 ; called from engine/sprite_anims.asm
+
 AnimateTuningKnob: ; 91640 (24:5640)
 	push bc
 	call .TuningKnob
@@ -1453,9 +1446,8 @@
 	ld a, [hl]
 	and a
 	ret z
-rept 2
 	dec [hl]
-endr
+	dec [hl]
 	jr .update
 
 .up
@@ -1463,12 +1455,9 @@
 	ld a, [hl]
 	cp 80
 	ret nc
-rept 2
 	inc [hl]
-endr
-
+	inc [hl]
 .update
-
 UpdateRadioStation: ; 9166f (24:566f)
 	ld hl, wRadioTuningKnob
 	ld d, [hl]
@@ -1479,9 +1468,8 @@
 	jr z, .nostation
 	cp d
 	jr z, .foundstation
-rept 2
 	inc hl
-endr
+	inc hl
 	jr .loop
 
 .nostation
@@ -1495,8 +1483,9 @@
 	ld de, .returnafterstation
 	push de
 	jp [hl]
+
 .returnafterstation
-	ld a, [wc6d9]
+	ld a, [wPokegearRadioChannelBank]
 	and a
 	ret z
 	xor a
@@ -1506,20 +1495,22 @@
 	ld a, $1
 	ld [hBGMapMode], a
 	ret
+
 ; 916a1 (24:56a1)
 
 Function916a1: ; 916a1
-	ld [wc6d9], a
+	ld [wPokegearRadioChannelBank], a
 	ld a, [hli]
-	ld [wc6da], a
+	ld [wPokegearRadioChannelAddr], a
 	ld a, [hli]
-	ld [wc6db], a
+	ld [wPokegearRadioChannelAddr + 1], a
 	ret
+
 ; 916ad
 
-
 RadioChannels:
 ; frequencies and the shows that play on them.
+
 ; frequency value given here = 4 × ingame_frequency − 2
 	dbw 16, .PkmnTalkAndPokedexShow
 	dbw 28, .PokemonMusic
@@ -1534,6 +1525,7 @@
 
 .PkmnTalkAndPokedexShow
 ; Pokédex Show in the morning
+
 ; Oak's Pokémon Talk in the afternoon and evening
 	call .InJohto
 	jr nc, .NoSignal
@@ -1589,11 +1581,9 @@
 
 .EvolutionRadio
 ; This station airs in the Lake of Rage area when Rocket are still in Mahogany.
-
 	ld a, [StatusFlags]
 	bit 4, a
 	jr z, .NoSignal
-
 	ld a, [wTownMapPlayerIconLandmark]
 	cp MAHOGANY_TOWN
 	jr z, .ok
@@ -1610,6 +1600,7 @@
 
 .InJohto
 ; if in Johto or on the S.S. Aqua, set carry
+
 ; otherwise clear carry
 	ld a, [wTownMapPlayerIconLandmark]
 	cp FAST_SHIP
@@ -1619,12 +1610,11 @@
 .kanto
 	and a
 	ret
+
 .johto
 	scf
 	ret
 
-
-
 LoadStation_OaksPokemonTalk: ; 91753 (24:5753)
 	xor a ; OAKS_POKEMON_TALK
 	ld [wd002], a
@@ -1682,6 +1672,7 @@
 	ret z
 	ld de, BuenasPasswordName
 	ret
+
 ; 917c3 (24:57c3)
 
 BuenasPasswordName:    db "BUENA'S PASSWORD@"
@@ -1719,6 +1710,7 @@
 	call Radio_BackUpFarCallParams
 	ld de, LetsAllSingName
 	ret
+
 ; 91814 (24:5814)
 
 LoadStation_RocketRadio: ; 91814
@@ -1731,6 +1723,7 @@
 	call Radio_BackUpFarCallParams
 	ld de, LetsAllSingName
 	ret
+
 ; 91829
 
 LoadStation_PokeFluteRadio: ; 91829 (24:5829)
@@ -1754,6 +1747,7 @@
 	call Radio_BackUpFarCallParams
 	ld de, UnknownStationName
 	ret
+
 ; 91853 (24:5853)
 
 LoadStation_Dummy: ; 91853
@@ -1762,7 +1756,7 @@
 RadioMusicRestartDE: ; 91854 (24:5854)
 	push de
 	ld a, e
-	ld [wc6dc], a
+	ld [wPokegearRadioMusicPlaying], a
 	ld de, MUSIC_NONE
 	call PlayMusic
 	pop de
@@ -1774,7 +1768,7 @@
 RadioMusicRestartPokemonChannel: ; 91868 (24:5868)
 	push de
 	ld a, $fe
-	ld [wc6dc], a
+	ld [wPokegearRadioMusicPlaying], a
 	ld de, MUSIC_NONE
 	call PlayMusic
 	pop de
@@ -1783,11 +1777,11 @@
 	ret
 
 Radio_BackUpFarCallParams: ; 9187c (24:587c)
-	ld [wc6d9], a
+	ld [wPokegearRadioChannelBank], a
 	ld a, l
-	ld [wc6da], a
+	ld [wPokegearRadioChannelAddr], a
 	ld a, h
-	ld [wc6db], a
+	ld [wPokegearRadioChannelAddr + 1], a
 	ret
 
 NoRadioStation: ; 91888 (24:5888)
@@ -1794,9 +1788,9 @@
 	call NoRadioMusic
 	call NoRadioName
 	xor a
-	ld [wc6d9], a
-	ld [wc6da], a
-	ld [wc6db], a
+	ld [wPokegearRadioChannelBank], a
+	ld [wPokegearRadioChannelAddr], a
+	ld [wPokegearRadioChannelAddr + 1], a
 	ld a, $1
 	ld [hBGMapMode], a
 	ret
@@ -1805,7 +1799,7 @@
 	ld de, MUSIC_NONE
 	call PlayMusic
 	ld a, $ff
-	ld [wc6dc], a
+	ld [wPokegearRadioMusicPlaying], a
 	ret
 
 NoRadioName: ; 918a9 (24:58a9)
@@ -1818,6 +1812,7 @@
 	ld bc, $412
 	call TextBox
 	ret
+
 ; 918bf
 
 OaksPkmnTalkName:     db "OAK's <PK><MN> Talk@"
@@ -1825,13 +1820,183 @@
 PokemonMusicName:     db "#MON Music@"
 LuckyChannelName:     db "Lucky Channel@"
 UnknownStationName:   db "?????@"
+
 PlacesAndPeopleName:  db "Places & People@"
 LetsAllSingName:      db "Let's All Sing!@"
 PokeFluteStationName: db "# FLUTE@"
 ; 9191c
 
-INCLUDE "engine/town_map.asm"
+_TownMap: ; 9191c
+	ld hl, Options
+	ld a, [hl]
+	push af
+	set NO_TEXT_SCROLL, [hl]
 
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+
+	ld a, [VramState]
+	push af
+	xor a
+	ld [VramState], a
+
+	call ClearBGPalettes
+	call ClearTileMap
+	call ClearSprites
+	call DisableLCD
+	call Function90c4e
+	callba ClearSpriteAnims
+	ld a, 8
+	call SkipMusic
+	ld a, $e3
+	ld [rLCDC], a
+	call Function90d56
+	ld [wd002], a
+	ld [wd003], a
+	xor a
+	ld [hBGMapMode], a
+	call .InitTilemap
+	call WaitBGMap2
+	ld a, [wd002]
+	call PokegearMap_InitPlayerIcon
+	ld a, [wd003]
+	call PokegearMap_InitCursor
+	ld a, c
+	ld [wd004], a
+	ld a, b
+	ld [wd005], a
+	ld b, SCGB_POKEGEAR_PALS
+	call GetSGBLayout
+	call SetPalettes
+	ld a, [hCGB]
+	and a
+	jr z, .dmg
+	ld a, %11100100
+	call DmgToCgbObjPal0
+	call DelayFrame
+
+.dmg
+	ld a, [wd002]
+	cp KANTO_LANDMARK
+	jr nc, .kanto
+	ld d, KANTO_LANDMARK - 1
+	ld e, 1
+	call .loop
+	jr .resume
+
+.kanto
+	call TownMap_GetKantoLandmarkLimits
+	call .loop
+
+.resume
+	pop af
+	ld [VramState], a
+	pop af
+	ld [hInMenu], a
+	pop af
+	ld [Options], a
+	call ClearBGPalettes
+	ret
+
+.loop
+	call JoyTextDelay
+	ld hl, hJoyPressed
+	ld a, [hl]
+	and B_BUTTON
+	ret nz
+
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .pressed_up
+
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .pressed_down
+.loop2
+	push de
+	callba PlaySpriteAnimations
+	pop de
+	call DelayFrame
+	jr .loop
+
+.pressed_up
+	ld hl, wd003
+	ld a, [hl]
+	cp d
+	jr c, .okay
+	ld a, e
+	dec a
+	ld [hl], a
+
+.okay
+	inc [hl]
+	jr .next
+
+.pressed_down
+	ld hl, wd003
+	ld a, [hl]
+	cp e
+	jr nz, .okay2
+	ld a, d
+	inc a
+	ld [hl], a
+
+.okay2
+	dec [hl]
+
+.next
+	push de
+	ld a, [wd003]
+	call Function910b4
+	ld a, [wd004]
+	ld c, a
+	ld a, [wd005]
+	ld b, a
+	ld a, [wd003]
+	call Function910d4
+	pop de
+	jr .loop2
+; 91a04
+
+.InitTilemap: ; 91a04
+	ld a, [wd002]
+	cp KANTO_LANDMARK
+	jr nc, .kanto
+	ld e, $0
+	jr .okay
+
+.kanto
+	ld e, $1
+
+.okay
+	callba PokegearMap
+	ld a, $7
+	ld bc, 6
+	hlcoord 1, 0
+	call ByteFill
+	hlcoord 0, 0
+	ld [hl], $6
+	hlcoord 7, 0
+	ld [hl], $17
+	hlcoord 7, 1
+	ld [hl], $16
+	hlcoord 7, 2
+	ld [hl], $26
+	ld a, $7
+	ld bc, NAME_LENGTH
+	hlcoord 8, 2
+	call ByteFill
+	hlcoord 19, 2
+	ld [hl], $17
+	ld a, [wd003]
+	call Function910b4
+	callba TownMapPals
+	ret
+; 91a53
+
 PlayRadio: ; 91a53
 	ld hl, Options
 	ld a, [hl]
@@ -1845,15 +2010,14 @@
 	ld a, [hJoyPressed]
 	and A_BUTTON | B_BUTTON
 	jr nz, .stop
-	ld a, [wc6da]
+	ld a, [wPokegearRadioChannelAddr]
 	ld l, a
-	ld a, [wc6db]
+	ld a, [wPokegearRadioChannelAddr + 1]
 	ld h, a
-	ld a, [wc6d9]
+	ld a, [wPokegearRadioChannelBank]
 	and a
 	jr z, .zero
 	rst FarCall
-
 .zero
 	call DelayFrame
 	jr .loop
@@ -1863,6 +2027,7 @@
 	ld [Options], a
 	call Function91492
 	ret
+
 ; 91a87
 
 .PlayStation: ; 91a87
@@ -1870,9 +2035,8 @@
 	ld [EnemyTurnsTaken], a
 	ld hl, .StationPointers
 	ld d, $0
-rept 2
 	add hl, de
-endr
+	add hl, de
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
@@ -1895,6 +2059,7 @@
 	ld [hl], $73
 	call WaitBGMap
 	ret
+
 ; 91ab9
 
 .StationPointers: ; 91ab9
@@ -1907,6 +2072,7 @@
 	dw LoadStation_PlacesAndPeople
 	dw LoadStation_LetsAllSing
 	dw LoadStation_RocketRadio
+
 ; 91acb
 
 .OakOrPnP: ; 91acb
@@ -1921,6 +2087,7 @@
 
 .kanto
 	jp LoadStation_PlacesAndPeople
+
 ; 91ae1
 
 PokegearMap: ; 91ae1
@@ -1935,6 +2102,7 @@
 	call LoadTownMapGFX
 	call FillKantoMap
 	ret
+
 ; 91af3
 
 _FlyMap: ; 91af3
@@ -1985,7 +2153,6 @@
 	ld de, Flypoints + 1
 	add hl, de
 	ld a, [hl]
-
 .exit
 	ld [wd002], a
 	pop af
@@ -2000,6 +2167,7 @@
 	ld a, [wd002]
 	ld e, a
 	ret
+
 ; 91b73
 
 FlyMapScroll: ; 91b73
@@ -2024,7 +2192,6 @@
 	ld a, e
 	dec a
 	ld [hl], a
-
 .NotAtEndYet
 	inc [hl]
 	call CheckIfVisitedFlypoint
@@ -2039,12 +2206,10 @@
 	ld a, d
 	inc a
 	ld [hl], a
-
 .NotAtStartYet
 	dec [hl]
 	call CheckIfVisitedFlypoint
 	jr z, .ScrollPrev
-
 .Finally
 	call TownMapBubble
 	call WaitBGMap
@@ -2051,6 +2216,7 @@
 	xor a
 	ld [hBGMapMode], a
 	ret
+
 ; 91bb5
 
 TownMapBubble: ; 91bb5
@@ -2060,47 +2226,38 @@
 	hlcoord 1, 0
 	ld a, $30
 	ld [hli], a
-
 ; Top row
 	ld bc, 16
 	ld a, " "
 	call ByteFill
-
 ; Top-right corner
 	ld a, $31
 	ld [hl], a
 	hlcoord 1, 1
 
-
 ; Middle row
 	ld bc, 18
 	ld a, " "
 	call ByteFill
 
-
 ; Bottom-left corner
 	hlcoord 1, 2
 	ld a, $32
 	ld [hli], a
-
 ; Bottom row
 	ld bc, 16
 	ld a, " "
 	call ByteFill
-
 ; Bottom-right corner
 	ld a, $33
 	ld [hl], a
 
-
 ; Print "Where?"
 	hlcoord 2, 0
 	ld de, .Where
 	call PlaceString
-
 ; Print the name of the default flypoint
 	call .Name
-
 ; Up/down arrows
 	hlcoord 18, 1
 	ld [hl], $34	
@@ -2118,13 +2275,12 @@
 	ld de, Flypoints
 	add hl, de
 	ld e, [hl]
-
 	callba GetLandmarkName
-
 	hlcoord 2, 1
 	ld de, StringBuffer1
 	call PlaceString
 	ret
+
 ; 91c17
 
 GetMapCursorCoordinates: ; 91c17
@@ -2147,6 +2303,7 @@
 	add hl, bc
 	ld [hl], d
 	ret
+
 ; 91c3c
 
 CheckIfVisitedFlypoint: ; 91c3c
@@ -2166,6 +2323,7 @@
 	pop bc
 	and a
 	ret
+
 ; 91c50
 
 HasVisitedSpawn: ; 91c50
@@ -2176,18 +2334,16 @@
 	predef FlagPredef
 	ld a, c
 	ret
+
 ; 91c5e
 
 Flypoints: ; 91c5e
 ; landmark, spawn point
-
 	const_def
-
 flypoint: MACRO
 	const FLY_\1
 	db \2, SPAWN_\1
 ENDM
-
 ; Johto
 	flypoint NEW_BARK,    NEW_BARK_TOWN
 	flypoint CHERRYGROVE, CHERRYGROVE_CITY
@@ -2201,10 +2357,9 @@
 	flypoint LAKE,        LAKE_OF_RAGE
 	flypoint BLACKTHORN,  BLACKTHORN_CITY
 	flypoint MT_SILVER,   SILVER_CAVE
-
 ; Kanto
-KANTO_FLYPOINT EQU const_value
 
+KANTO_FLYPOINT EQU const_value
 	flypoint PALLET,      PALLET_TOWN
 	flypoint VIRIDIAN,    VIRIDIAN_CITY
 	flypoint PEWTER,      PEWTER_CITY
@@ -2217,54 +2372,46 @@
 	flypoint FUCHSIA,     FUCHSIA_CITY
 	flypoint CINNABAR,    CINNABAR_ISLAND
 	flypoint INDIGO,      INDIGO_PLATEAU
-
 	db -1
+
 ; 91c8f
 
 ret_91c8f: ; 91c8f
 	ret
+
 ; 91c90
 
 FlyMap: ; 91c90
-
 	ld a, [MapGroup]
 	ld b, a
 	ld a, [MapNumber]
 	ld c, a
 	call GetWorldMapLocation
-
 ; If we're not in a valid location, i.e. Pokecenter floor 2F,
-; the backup map information is used
 
+; the backup map information is used
 	cp SPECIAL_MAP
 	jr nz, .CheckRegion
-
 	ld a, [BackupMapGroup]
 	ld b, a
 	ld a, [BackupMapNumber]
 	ld c, a
 	call GetWorldMapLocation
-
 .CheckRegion
 ; The first 46 locations are part of Johto. The rest are in Kanto
 	cp KANTO_LANDMARK
 	jr nc, .KantoFlyMap
-
 .JohtoFlyMap
 ; Note that .NoKanto should be modified in tandem with this branch
-
 	push af
-
 ; Start from New Bark Town
 	ld a, FLY_NEW_BARK
 	ld [wd002], a
-
 ; Flypoints begin at New Bark Town...
 	ld [StartFlypoint], a
 ; ..and end at Silver Cave
 	ld a, FLY_MT_SILVER
 	ld [EndFlypoint], a
-
 ; Fill out the map
 	call FillJohtoMap
 	call .MapHud
@@ -2273,23 +2420,23 @@
 	ret
 
 .KantoFlyMap
-
 ; The event that there are no flypoints enabled in a map is not
+
 ; accounted for. As a result, if you attempt to select a flypoint
 ; when there are none enabled, the game will crash. Additionally,
+
 ; the flypoint selection has a default starting point that
 ; can be flown to even if none are enabled
 
 ; To prevent both of these things from happening when the player
 ; enters Kanto, fly access is restricted until Indigo Plateau is
-; visited and its flypoint enabled
 
+; visited and its flypoint enabled
 	push af
 	ld c, SPAWN_INDIGO
 	call HasVisitedSpawn
 	and a
 	jr z, .NoKanto
-
 ; Kanto's map is only loaded if we've visited Indigo Plateau
 
 ; Flypoints begin at Pallet Town...
@@ -2298,11 +2445,10 @@
 ; ...and end at Indigo Plateau
 	ld a, FLY_INDIGO
 	ld [EndFlypoint], a
-
 ; Because Indigo Plateau is the first flypoint the player
+
 ; visits, it's made the default flypoint
 	ld [wd002], a
-
 ; Fill out the map
 	call FillKantoMap
 	call .MapHud
@@ -2316,24 +2462,18 @@
 ; Start from New Bark Town
 	ld a, FLY_NEW_BARK
 	ld [wd002], a
-
 ; Flypoints begin at New Bark Town...
 	ld [StartFlypoint], a
 ; ..and end at Silver Cave
 	ld a, FLY_MT_SILVER
 	ld [EndFlypoint], a
-
 	call FillJohtoMap
-
 	pop af
-
 .MapHud
 	call TownMapBubble
 	call TownMapPals
-
 	hlbgcoord 0, 0 ; BG Map 0
 	call TownMapBGUpdate
-
 	call TownMapMon
 	ld a, c
 	ld [wd003], a
@@ -2340,6 +2480,7 @@
 	ld a, b
 	ld [wd004], a
 	ret
+
 ; 91d11
 
 _Area: ; 91d11
@@ -2355,17 +2496,14 @@
 	ld [hBGMapMode], a
 	ld a, $1
 	ld [hInMenu], a
-
 	ld de, PokedexNestIconGFX
 	ld hl, VTiles0 tile $7f
 	lb bc, BANK(PokedexNestIconGFX), 1
 	call Request2bpp
-
 	call .GetPlayerOrFastShipIcon
 	ld hl, VTiles0 tile $78
 	ld c, 4
 	call Request2bpp
-
 	call LoadTownMapGFX
 	call FillKantoMap
 	call .PlaceString_MonsNest
@@ -2399,7 +2537,6 @@
 
 .select
 	call .HideNestsShowPlayer
-
 .next
 	call DelayFrame
 	jr .loop
@@ -2411,6 +2548,7 @@
 	pop af
 	ld [wd002], a
 	ret
+
 ; 91d9b
 
 .LeftRightInput: ; 91d9b
@@ -2446,6 +2584,7 @@
 	ld a, 1 ; Kanto
 	call .GetAndPlaceNest
 	ret
+
 ; 91dcd
 
 .BlinkNestIcons: ; 91dcd
@@ -2465,6 +2604,7 @@
 	ld bc, SpritesEnd - Sprites
 	call CopyBytes
 	ret
+
 ; 91de9
 
 .PlaceString_MonsNest: ; 91de9
@@ -2487,6 +2627,7 @@
 	ld de, .String_SNest
 	call PlaceString
 	ret
+
 ; 91e16
 
 .String_SNest:
@@ -2530,12 +2671,12 @@
 	ld bc, SpritesEnd - Sprites
 	call CopyBytes
 	ret
+
 ; 91e5a
 
 .HideNestsShowPlayer: ; 91e5a
 	call .CheckPlayerLocation
 	ret c
-
 	ld a, [wd002]
 	ld e, a
 	callba GetLandmarkCoords
@@ -2547,21 +2688,17 @@
 	ld a, [de]
 	cp $80
 	jr z, .copy
-
 	add b
 	ld [hli], a
 	inc de
-
 	ld a, [de]
 	add c
 	ld [hli], a
 	inc de
-
 	ld a, [de]
 	add $78 ; where the player's sprite is loaded
 	ld [hli], a
 	inc de
-
 	push bc
 	ld c, 0 ; RED
 	ld a, [PlayerGender]
@@ -2572,7 +2709,6 @@
 	ld a, c
 	ld [hli], a
 	pop bc
-
 	jr .ShowPlayerLoop
 
 .copy
@@ -2581,6 +2717,7 @@
 	xor a
 	call ByteFill
 	ret
+
 ; 91e9c
 
 .PlayerOAM: ; 91e9c
@@ -2593,6 +2730,7 @@
 
 .CheckPlayerLocation: ; 91ea9
 ; Don't show the player's sprite if you're
+
 ; not in the same region as what's currently
 ; on the screen.
 	ld a, [wd002]
@@ -2600,7 +2738,6 @@
 	jr z, .johto
 	cp KANTO_LANDMARK
 	jr c, .johto
-
 .kanto
 	ld a, [wd003]
 	and a
@@ -2611,7 +2748,6 @@
 	ld a, [wd003]
 	and a
 	jr nz, .clear
-
 .ok
 	and a
 	ret
@@ -2623,6 +2759,7 @@
 	call ByteFill
 	scf
 	ret
+
 ; 91ed0
 
 .GetPlayerOrFastShipIcon: ; 91ed0
@@ -2636,6 +2773,7 @@
 	ld de, FastShipGFX
 	ld b, BANK(FastShipGFX)
 	ret
+
 ; 91ee4
 
 TownMapBGUpdate: ; 91ee4
@@ -2646,29 +2784,26 @@
 	ld [hBGMapAddress], a
 	ld a, h
 	ld [hBGMapAddress + 1], a
-
 ; Only update palettes on CGB
 	ld a, [hCGB]
 	and a
 	jr z, .tiles
-
 ; BG Map mode 2 (palettes)
 	ld a, 2
 	ld [hBGMapMode], a
-
 ; The BG Map is updated in thirds, so we wait
+
 ; 3 frames to update the whole screen's palettes.
 	ld c, 3
 	call DelayFrames
-
 .tiles
 ; Update BG Map tiles
 	call WaitBGMap
-
 ; Turn off BG Map update
 	xor a
 	ld [hBGMapMode], a
 	ret
+
 ; 91eff
 
 FillJohtoMap: ; 91eff
@@ -2677,7 +2812,6 @@
 
 FillKantoMap: ; 91f04
 	ld de, KantoMap
-
 FillTownMap: ; 91f07
 	hlcoord 0, 0
 .loop
@@ -2688,11 +2822,11 @@
 	ld [hli], a
 	inc de
 	jr .loop
+
 ; 91f13
 
 TownMapPals: ; 91f13
 ; Assign palettes based on tile ids
-
 	hlcoord 0, 0
 	decoord 0, 0, AttrMap
 	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
@@ -2700,17 +2834,15 @@
 ; Current tile
 	ld a, [hli]
 	push hl
-
 ; HP/borders use palette 0
 	cp $60
 	jr nc, .pal0
-
 ; The palette data is condensed to nybbles,
+
 ; least-significant first.
 	ld hl, TownMapPalMap
 	srl a
 	jr c, .odd
-
 ; Even-numbered tile ids take the bottom nybble...
 	add l
 	ld l, a
@@ -2735,7 +2867,6 @@
 
 .pal0
 	xor a
-
 .update
 	pop hl
 	ld [de], a
@@ -2766,16 +2897,13 @@
 	add hl, de
 	ld a, [hl]
 	ld [wd265], a
-
 ; Get FlyMon icon
 	ld e, 8 ; starting tile in VRAM
 	callba GetSpeciesIcon
-
 ; Animation/palette
 	depixel 0, 0
 	ld a, SPRITE_ANIM_INDEX_00
 	call _InitSpriteAnimStruct
-
 	ld hl, SPRITEANIMSTRUCT_TILE_ID
 	add hl, bc
 	ld [hl], $8
@@ -2783,19 +2911,17 @@
 	add hl, bc
 	ld [hl], SPRITE_ANIM_SEQ_NULL
 	ret
+
 ; 91fa6
 
 TownMapPlayerIcon: ; 91fa6
 ; Draw the player icon at town map location in a
 	push af
-
 	callba GetPlayerIcon
-
 ; Standing icon
 	ld hl, VTiles0 tile $10
 	ld c, 4 ; # tiles
 	call Request2bpp
-
 ; Walking icon
 	ld hl, $c0
 	add hl, de
@@ -2805,28 +2931,24 @@
 	ld c, 4 ; # tiles
 	ld a, BANK(ChrisSpriteGFX) ; does nothing
 	call Request2bpp
-
 ; Animation/palette
 	depixel 0, 0
-	ld b, SPRITE_ANIM_INDEX_WALK_CYCLE ; Male
+	ld b, SPRITE_ANIM_INDEX_RED_WALK ; Male
 	ld a, [PlayerGender]
 	bit 0, a
 	jr z, .got_gender
-	ld b, SPRITE_ANIM_INDEX_1E ; Female
+	ld b, SPRITE_ANIM_INDEX_BLUE_WALK ; Female
 .got_gender
 	ld a, b
 	call _InitSpriteAnimStruct
-
 	ld hl, SPRITEANIMSTRUCT_TILE_ID
 	add hl, bc
 	ld [hl], $10
-
 	pop af
 	ld e, a
 	push bc
 	callba GetLandmarkCoords
 	pop bc
-
 	ld hl, SPRITEANIMSTRUCT_XCOORD
 	add hl, bc
 	ld [hl], e
@@ -2834,6 +2956,7 @@
 	add hl, bc
 	ld [hl], d
 	ret
+
 ; 0x91ff2
 
 LoadTownMapGFX: ; 91ff2
@@ -2842,9 +2965,9 @@
 	lb bc, BANK(TownMapGFX), $30
 	call DecompressRequest2bpp
 	ret
+
 ; 91fff
 
-
 JohtoMap: ; 91fff
 INCBIN "gfx/misc/johto.bin"
 ; 92168
@@ -2855,10 +2978,8 @@
 
 PokedexNestIconGFX: ; 922d1
 INCBIN "gfx/pokegear/dexmap_nest_icon.2bpp"
-
 FlyMapLabelBorderGFX: ; 922e1
 INCBIN "gfx/pokegear/flymap_label_border.2bpp"
-
 Function92311: ; 92311
 ; unreferenced
 	xor a
@@ -2923,7 +3044,6 @@
 	ld de, Flypoints + 1
 	add hl, de
 	ld a, [hl]
-
 .asm_9239f
 	ld [wd002], a
 	pop af
@@ -2938,6 +3058,7 @@
 	ld a, [wd002]
 	ld e, a
 	ret
+
 ; 923b8
 
 .HandleDPad: ; 923b8
@@ -2968,12 +3089,10 @@
 	ld [hl], FLY_INDIGO + 1
 .okay_ul
 	dec [hl]
-
 .continue
 	ld a, [wd002]
 	cp KANTO_FLYPOINT
 	jr c, .johto
-
 	call FillKantoMap
 	xor a
 	ld b, $9c
@@ -2983,7 +3102,6 @@
 	call FillJohtoMap
 	ld a, $90
 	ld b, $98
-
 .finish
 	ld [hWY], a
 	ld a, b
@@ -2993,4 +3111,5 @@
 	xor a
 	ld [hBGMapMode], a
 	ret
+
 ; 92402
--- a/engine/town_map.asm
+++ /dev/null
@@ -1,171 +1,0 @@
-
-_TownMap: ; 9191c
-	ld hl, Options
-	ld a, [hl]
-	push af
-	set NO_TEXT_SCROLL, [hl]
-
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-
-	ld a, [VramState]
-	push af
-	xor a
-	ld [VramState], a
-
-	call ClearBGPalettes
-	call ClearTileMap
-	call ClearSprites
-	call DisableLCD
-	call Function90c4e
-	callba ClearSpriteAnims
-	ld a, 8
-	call SkipMusic
-	ld a, $e3
-	ld [rLCDC], a
-	call Function90d56
-	ld [wd002], a
-	ld [wd003], a
-	xor a
-	ld [hBGMapMode], a
-	call Function91a04
-	call WaitBGMap2
-	ld a, [wd002]
-	call Function9106a
-	ld a, [wd003]
-	call Function91098
-	ld a, c
-	ld [wd004], a
-	ld a, b
-	ld [wd005], a
-	ld b, SCGB_POKEGEAR_PALS
-	call GetSGBLayout
-	call SetPalettes
-	ld a, [hCGB]
-	and a
-	jr z, .dmg
-	ld a, %11100100
-	call DmgToCgbObjPal0
-	call DelayFrame
-
-.dmg
-	ld a, [wd002]
-	cp KANTO_LANDMARK
-	jr nc, .kanto
-	ld d, KANTO_LANDMARK - 1
-	ld e, 1
-	call .loop
-	jr .resume
-
-.kanto
-	call TownMap_GetKantoLandmarkLimits
-	call .loop
-
-.resume
-	pop af
-	ld [VramState], a
-	pop af
-	ld [hInMenu], a
-	pop af
-	ld [Options], a
-	call ClearBGPalettes
-	ret
-
-.loop
-	call JoyTextDelay
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and B_BUTTON
-	ret nz
-
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .pressed_up
-
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .pressed_down
-.loop2
-	push de
-	callba PlaySpriteAnimations
-	pop de
-	call DelayFrame
-	jr .loop
-
-.pressed_up
-	ld hl, wd003
-	ld a, [hl]
-	cp d
-	jr c, .okay
-	ld a, e
-	dec a
-	ld [hl], a
-
-.okay
-	inc [hl]
-	jr .next
-
-.pressed_down
-	ld hl, wd003
-	ld a, [hl]
-	cp e
-	jr nz, .okay2
-	ld a, d
-	inc a
-	ld [hl], a
-
-.okay2
-	dec [hl]
-
-.next
-	push de
-	ld a, [wd003]
-	call Function910b4
-	ld a, [wd004]
-	ld c, a
-	ld a, [wd005]
-	ld b, a
-	ld a, [wd003]
-	call Function910d4
-	pop de
-	jr .loop2
-; 91a04
-
-Function91a04: ; 91a04
-	ld a, [wd002]
-	cp KANTO_LANDMARK
-	jr nc, .kanto
-	ld e, $0
-	jr .okay
-
-.kanto
-	ld e, $1
-
-.okay
-	callba PokegearMap
-	ld a, $7
-	ld bc, 6
-	hlcoord 1, 0
-	call ByteFill
-	hlcoord 0, 0
-	ld [hl], $6
-	hlcoord 7, 0
-	ld [hl], $17
-	hlcoord 7, 1
-	ld [hl], $16
-	hlcoord 7, 2
-	ld [hl], $26
-	ld a, $7
-	ld bc, NAME_LENGTH
-	hlcoord 8, 2
-	call ByteFill
-	hlcoord 19, 2
-	ld [hl], $17
-	ld a, [wd003]
-	call Function910b4
-	callba TownMapPals
-	ret
-; 91a53
--- a/event/field_moves.asm
+++ b/event/field_moves.asm
@@ -330,7 +330,7 @@
 	ld [VramState], a
 	call FlyFunction_InitGFX
 	depixel 10, 10, 4, 0
-	ld a, SPRITE_ANIM_INDEX_WALK_CYCLE
+	ld a, SPRITE_ANIM_INDEX_RED_WALK
 	call _InitSpriteAnimStruct
 	ld hl, SPRITEANIMSTRUCT_TILE_ID
 	add hl, bc
@@ -365,7 +365,7 @@
 	ld [VramState], a
 	call FlyFunction_InitGFX
 	depixel 31, 10, 4, 0
-	ld a, SPRITE_ANIM_INDEX_WALK_CYCLE
+	ld a, SPRITE_ANIM_INDEX_RED_WALK
 	call _InitSpriteAnimStruct
 	ld hl, SPRITEANIMSTRUCT_TILE_ID
 	add hl, bc
--- a/macros/wram.asm
+++ b/macros/wram.asm
@@ -232,3 +232,20 @@
 \1PP:: ds 1
 \1EffectChance:: ds 1
 endm
+
+slot_reel: MACRO
+\1ReelAction::   db
+\1TilemapAddr::  dw
+\1Position::     db
+\1SpinDistance:: db
+\1SpinRate::     db
+\1OAMAddr::      dw
+\1XCoord::       db
+\1Slot09::       ds 1
+\1Slot0a::       ds 1
+\1Slot0b::       ds 1
+\1Slot0c::       ds 1
+\1Slot0d::       ds 1
+\1Slot0e::       ds 1
+\1Slot0f::       ds 1
+endm
\ No newline at end of file
--- a/text/common_1.asm
+++ b/text/common_1.asm
@@ -368,10 +368,10 @@
 	done
 
 UnknownText_0x1bc6e9::
-	text_from_ram wc6d1
+	text_from_ram wPlayerTrademonSpeciesName
 	text " was"
 	line "sent to @"
-	text_from_ram wc719
+	text_from_ram wOTTrademonSenderName
 	text "."
 	done
 
@@ -380,13 +380,13 @@
 	done
 
 UnknownText_0x1bc703::
-	text_from_ram wc719
+	text_from_ram wOTTrademonSenderName
 	text " bids"
 	line "farewell to"
 	done
 
 UnknownText_0x1bc719::
-	text_from_ram wc703
+	text_from_ram wOTTrademonSpeciesName
 	text "."
 	done
 
@@ -393,64 +393,64 @@
 UnknownText_0x1bc71f::
 	text "Take good care of"
 	line "@"
-	text_from_ram wc703
+	text_from_ram wOTTrademonSpeciesName
 	text "."
 	done
 
 UnknownText_0x1bc739::
 	text "For @"
-	text_from_ram wc6e7
+	text_from_ram wPlayerTrademonSenderName
 	text "'s"
 	line "@"
-	text_from_ram wc6d1
+	text_from_ram wPlayerTrademonSpeciesName
 	text ","
 	done
 
 UnknownText_0x1bc74c::
-	text_from_ram wc719
+	text_from_ram wOTTrademonSenderName
 	text " sends"
 	line "@"
-	text_from_ram wc703
+	text_from_ram wOTTrademonSpeciesName
 	text "."
 	done
 
 UnknownText_0x1bc75e::
-	text_from_ram wc719
+	text_from_ram wOTTrademonSenderName
 	text " will"
 	line "trade @"
-	text_from_ram wc703
+	text_from_ram wOTTrademonSpeciesName
 	db "@@"
 
 UnknownText_0x1bc774::
 	text "for @"
-	text_from_ram wc6e7
+	text_from_ram wPlayerTrademonSenderName
 	text "'s"
 	line "@"
-	text_from_ram wc6d1
+	text_from_ram wPlayerTrademonSpeciesName
 	text "."
 	done
 
 UnknownText_0x1bc787::
-	text_from_ram wc6e7
+	text_from_ram wPlayerTrademonSenderName
 	text " will"
 	line "trade @"
-	text_from_ram wc6d1
+	text_from_ram wPlayerTrademonSpeciesName
 	db "@@"
 
 UnknownText_0x1bc79d::
 	text "for @"
-	text_from_ram wc719
+	text_from_ram wOTTrademonSenderName
 	text "'s"
 	line "@"
-	text_from_ram wc703
+	text_from_ram wOTTrademonSpeciesName
 	text "."
 	done
 
 UnknownText_0x1bc7b0::
-	text_from_ram wc6e7
+	text_from_ram wPlayerTrademonSenderName
 	text "'s"
 	line "@"
-	text_from_ram wc6d1
+	text_from_ram wPlayerTrademonSpeciesName
 	text " trade…"
 	done
 
@@ -457,15 +457,15 @@
 UnknownText_0x1bc7c3::
 	text "Take good care of"
 	line "@"
-	text_from_ram wc703
+	text_from_ram wOTTrademonSpeciesName
 	text "."
 	done
 
 UnknownText_0x1bc7dd::
-	text_from_ram wc6e7
+	text_from_ram wPlayerTrademonSenderName
 	text "'s"
 	line "@"
-	text_from_ram wc6d1
+	text_from_ram wPlayerTrademonSpeciesName
 	text " trade…"
 	done
 
@@ -472,12 +472,12 @@
 UnknownText_0x1bc7f0::
 	text "Take good care of"
 	line "@"
-	text_from_ram wc703
+	text_from_ram wOTTrademonSpeciesName
 	text "."
 	done
 
 UnknownText_0x1bc80a::
-	text_from_ram wc703
+	text_from_ram wOTTrademonSpeciesName
 	text " came"
 	line "back!"
 	done
--- a/wram.asm
+++ b/wram.asm
@@ -574,44 +574,34 @@
 wc6d0::
 PlayerSDefLevel:: ; c6d0
 	ds 1
-wc6d1::
 PlayerAccLevel:: ; c6d1
 	ds 1
-wc6d2::
 PlayerEvaLevel:: ; c6d2
 	ds 1
 ; c6d3
-wc6d3:: ds 1
+	ds 1
 PlayerStatLevelsEnd::
 
-wc6d4::
 EnemyStatLevels:: ; c6d4
 ; 07 neutral
 EnemyAtkLevel:: ; c6d4
 	ds 1
-wc6d5::
 EnemyDefLevel:: ; c6d5
 	ds 1
-wc6d6::
 EnemySpdLevel:: ; c6d6
 	ds 1
-wc6d7::
 wTownMapCursorLandmark::
 EnemySAtkLevel:: ; c6d7
 	ds 1
-wc6d8::
 wTownMapPlayerIconLandmark::
 EnemySDefLevel:: ; c6d8
 	ds 1
-wc6d9::
 EnemyAccLevel:: ; c6d9
 	ds 1
-wc6da::
 EnemyEvaLevel:: ; c6da
 	ds 1
 
-wc6db:: ds 1
-wc6dc::
+	ds 1
 EnemyTurnsTaken:: ; c6dc
 	ds 1
 PlayerTurnsTaken:: ; c6dd
@@ -621,7 +611,6 @@
 
 PlayerSubstituteHP:: ; c6df
 	ds 1
-wc6e0::
 EnemySubstituteHP:: ; c6e0
 	ds 1
 
@@ -820,6 +809,7 @@
 wc7bd::
 	ds wc6d0 - @
 
+; naming screen
 wNamingScreenDestinationPointer:: ds 2 ; c6d0
 wNamingScreenCurrNameLength:: ds 1 ; c6d2
 wNamingScreenMaxNameLength:: ds 1 ; c6d3
@@ -829,24 +819,21 @@
 wNamingScreenStringEntryCoord:: ds 2 ; c6d8
 	ds wc6d0 - @
 
-; Slot Machine
+; pokegear
+wPokegearPhoneLoadNameBuffer:: ds 1 ; c6d0
+wPokegearPhoneCursorPosition:: ds 1 ; c6d1
+wPokegearPhoneScrollPosition:: ds 1 ; c6d2
+wPokegearPhoneSelectedPerson:: ds 1 ; c6d3
+wPokegearPhoneSubmenuCursor:: ds 1 ; c6d4
+wPokegearMapCursorObjectPointer:: ds 2 ; c6d5
+	ds 2
+wPokegearRadioChannelBank:: ds 1 ; c6d9
+wPokegearRadioChannelAddr:: ds 2 ; c6da
+wPokegearRadioMusicPlaying:: ds 1 ; c6dc
+	ds wc6d0 - @
+
 wSlots::
-slot_reel: MACRO
-\1ReelAction::   db
-\1TilemapAddr::  dw
-\1Position::     db
-\1SpinDistance:: db
-\1SpinRate::     db
-\1OAMAddr::      dw
-\1XCoord::       db
-\1Slot09::       ds 1
-\1Slot0a::       ds 1
-\1Slot0b::       ds 1
-\1Slot0c::       ds 1
-\1Slot0d::       ds 1
-\1Slot0e::       ds 1
-\1Slot0f::       ds 1
-endm
+; Slot Machine
 ; c6d0
 wReel1:: slot_reel wReel1
 wReel2:: slot_reel wReel2
@@ -2577,6 +2564,11 @@
 	ds 1
 
 wPokegearFlags:: ds 1
+; bit 0: map
+; bit 1: radio
+; bit 2: phone
+; bit 3: expn
+; bit 7: on/off
 wRadioTuningKnob:: ds 1
 wLastDexMode:: ds 2
 WhichRegisteredItem:: ; d95b